2014年10月27日月曜日

CocoaPodsで複数ターゲット指定した時の設定

iOS8のAction Extensionを試してみるため、ターゲットを

1. アプリ本体のターゲット
2. Action Extensionのターゲット
3. 本体とExtensionで共用するコードのターゲット
の3つを作成し、CocoaPodsでライブラリを指定してworkspaceを作成しました。
その際、設定でいくつか引っかかったのでメモ。


Podfile

platform :ios, '8.0'

# アプリ本体のターゲット (ImagesToPDF)
target 'ImagesToPDF' do
  pod 'LibraryA"
end

# 共用コードのターゲット (FLICommon)
target 'FLICommon' do
    pod 'LibraryB'
    pod 'LibraryC'
end

こんな感じでターゲット毎に使用するLibraryを指定できる。


xcconfigの設定

これを、pod installすると以下のようにターゲット毎のxcconfigが作成される



ターゲット指定しない時は Pods.debug.xcconfig , Pods.release.xcconfig になるけど、ターゲット指定の時は Pods-{ターゲット名}.debug.xcconfig のようなファイル名に。

これらxcconfigは、ProjectのConfigurationsで指定されるはず。


CocoaPodsで設定が変更できなかった時は、pod install時に以下の警告がでたりする。

[!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target `ImagesToPDF` to `Pods/Target Support Files/Pods-ImagesToPDF/Pods-ImagesToPDF.debug.xcconfig` or include the `Pods/Target Support Files/Pods-ImagesToPDF/Pods-ImagesToPDF.debug.xcconfig` in your build configuration.

この時は、ProjectのConfigurationsで違うxcconfigになっている可能性があるのでチェック。


Podsのライブラリ設定

Podsで作成されたライブラリも、
ターゲット指定してない時は、libPods.a というファイル名だが、
ターゲット指定している時は、libPods-{ターゲット名}.a というファイル名になる。

このライブラリは、Build Phases の Link Binary With Libraries に設定されている。



ビルドエラーで

ld: library not found for -lPods

...と言われた時には、
Link Binary With Libraries に、もう存在しない libPods.a が指定されている可能性があるのでここをチェック。


• • •