一挙紹介!動画アプリで使ったCocoaPods
もはやiOS開発に欠かせない存在になったCocoaPods。先日弊社からリリースしたアプリでも、複雑なUIやありがちな機能を簡単に実装するものから実装を少しラクにするようなものまで、いろいろなものを使っています。
iPhoneで気軽にスポーツ動画を楽しめるアプリケーションをリリースしました。AppStoreにて配信中です。このアプリではスポーツのハイライトや試合結果、最新ニュースなどの動画を検索することなく閲覧することができます。スポーツが好きな方、スキマ時間を有効に使いたい方に最適な動画アプリです。
UI/コントロール系
MNMBottomPullToRefresh
MNMBottomPullToRefresh for iOS - Cocoa Controls
「上に引っ張ったら更新する」機能を実現するものです。
iOS標準では下に引っ張って更新を実現する方法は用意されていないので自分でやるためには色々頑張る必要がありますが、MNMBottomPullToRefresh利用することで簡単に実現できました。
MMDrawerController
Search results for mmdrawer - Cocoa Controls
メインコンテンツの左右にサイドバーを配置するためのコントロールです。一昔前のFacebookのiPhone版がこんな感じのインターフェースでしたね。
安易にサイドバーを配置することの賛否はあるとは思いますが、サイドバーを置くとなったらとても使いやすいライブラリでした。
XCDYouTubeVideoPlayerViewController
XCDYouTubeVideoPlayerViewController for iOS - Cocoa Controls
標準のMPMediaPlayerController
では動画のリソースを特定する必要があるため、YouTubeの動画IDだけでは再生できません。
XCDYouTubeVideoPlayerViewControllerは、MPMediaPlayerController
を継承しているクラスです。YouTubeの動画IDから動画自体のURIを解析してくれる機能をもっているため、動画IDから動画を再生するまでがすごく楽でした。
FontAwesome-iOS
Webでよく使われているFontAwesomeをiOSでも使えるようにするライブラリです。ちょっとしたアイコンなら画像なしで表現できるようになるのでとても楽です。
iRate
iRate for iOS - Cocoa Controls
iRateはアプリ起動時に「アプリを評価してね〜」のダイアログを出すための拡張です。この機能はユーザーに負荷をかけることになるのでいい感じのタイミングで出さないと評価を下げることになってしまうのですが、iRateは起動回数や経過日数などから使ってくれているユーザーに対してのみダイアログを出してくれるという仕組みになっています。
ユーザービリティを多少損なうことにはなりますが、レビューへの導線も大切なので入れておきたいところです。
SVProgressHUD
Search results for svprogress - Cocoa Controls
SVProgressHUDを使うと標準のActivityIndicatorよりもちょっとかっこ良くて使いやすいインジケータが使えるようになります。
ライブラリ/拡張
MWFeedParser
MWFeedParser for iOS - Cocoa Controls
RSSフィードを解析するライブラリの中では一番使われている(気がする)ライブラリです。RSSのパースは自分では絶対に書きたくない処理(DRY!)なのでこれを使うのが今のところ一番いいのかなと思います。
NSDate+TimeAgo
Objective-CのNSDate
クラスのカテゴリで、相対日時の文字列を返してくれるインターフェースが提供されます。
// githubより転載 NSDate *date = [[NSDate alloc] initWithTimeIntervalSince1970:0]; NSString *ago = [date timeAgo]; NSLog(@"Output is: \"%@\"", ago); 2011-11-12 17:19:25.608 Proj[0:0] Output is: "41 years ago"
LinqToObjectiveC
ColinEberhardt/LinqToObjectiveC
Objective-CのNSArray
やNSDictionary
のカテゴリで、Linqのようなインターフェースが使えるようになるライブラリです。
内部ではforループを回しているだけなのですが、場合によってはより読みやすいコードにすることができるので使用しました。
// githubより転載 LINQSelector surnameSelector = ^id(id person){ return [person name]; }; LINQAccumulator csvAccumulator = ^id(id item, id aggregate) { return [NSString stringWithFormat:@"%@, %@", aggregate, item]; }; NSArray* surnamesList = [[[[people linq_select:surnameSelector] linq_sort] linq_distinct] linq_aggregate:csvAccumulator];
上の例のNSArray* surnamesList = ...
のところがすごく簡潔に書けていると思います。
- peopleが入っているArrayを
- nameプロパティのArrayにして(
linq_select
) - ソートして(
linq_sort
) - 重複を取り除いて(
linq_distinct
) - カンマ区切りの文字列にまとめる(
linq_aggregate
)