修正
potatotips (iOS/Android開発Tips共有会) 第9回での発表資料が新しい情報になります。
App ExtensionでCocoaPods管理しているライブラリを使用する方
https://speakerdeck.com/tmnb/app-extensiondecocoapodsguan-li-siteiruraiburariwoshi-yong-surufang
--
iOS8の新機能App Extensionを開発する中で、CocoaPodsで管理しているライブラリを使用したくなるケースが必ずでてくると思います。そこで2つの方法を紹介したいと思います。
※ https://www.facebook.com/groups/ios.dev.jp/permalink/768435093177874/ で質問してフィードバック頂いた内容の詳しいやり方です
方法1 : PodsのtargetにExtensionを指定する
おそらく1番お手軽な方法です。
例えばExtentionの名前がWeatherExtentionだった場合、Podfileに
target :WeatherExtention, :exclusive => true do
pod 'AFNetworking'
end
として、pod installします。これだけで使用できるようになります。
※本体側で同じライブラリを使用している場合は、重複して導入されるのでアプリの容量が増える?
方法2 : Cocoa Touch Frameworkを作成する
XCode6からCocoa Touch Frameworkを作成できるようになりました。Cocoa Touch Frameworkを作成すると、本体側、Extension側で共通のコードをFramework化する事ができます。このFrameworkにPodsのライブラリを含める方法です。Podsライブラリは作成したFrameworkを通して使用するようになります。
1. CoCoa Touch Frameworkを作成する
File > New > Target > Framework & Library > Cocoa Touch FrameworkからFramework targetを作成します。
2. Podfileの設定
例えばの1で作成したFramework名がWeatherKitだった場合、Podfileに
link_with 'WeatherKit'
pod 'AFNetworking'
として、pod installします。
3. FrameworkのヘッダーファイルにPodファイルのヘッダーをimportする
#import <AFNetworking/AFNetworking.h>
4. Build Settingsの変更
このままコンパイルすると、エラーになるので本体側、Extention側のBuild Settings > Allow Non-Modular Includes In Framework Modulesの設定をYESにします。
5. 本体側、Extension側でFrameworkを使用する
あとは、使用したいファイルで
@import WeatherKit;
とすることで、Podsのライブラリが使用できるようになります。
方法2で動くプロジェクトのサンプルを作ったので、https://github.com/tmnb/WeatherForecast から試せます。