LoginSignup
68
66

More than 5 years have passed since last update.

App ExtensionでCocoaPods管理しているライブラリを使用する2つの方法

Last updated at Posted at 2014-08-09

修正

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する

WeatherKit.h
#import <AFNetworking/AFNetworking.h>

4. Build Settingsの変更

このままコンパイルすると、エラーになるので本体側、Extention側のBuild Settings > Allow Non-Modular Includes In Framework Modulesの設定をYESにします。

本体側
a.png

Extention側
b.png

5. 本体側、Extension側でFrameworkを使用する

あとは、使用したいファイルで

@import WeatherKit;

とすることで、Podsのライブラリが使用できるようになります。

方法2で動くプロジェクトのサンプルを作ったので、https://github.com/tmnb/WeatherForecast から試せます。

68
66
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
66