web-dev-qa-db-ja.com

CocoaPodsを使用するときにカスタムプロジェクト構成をXcodeに追加する方法

CocoaPodsを使用しているiOS/OS X Xcodeプロジェクトがあり、ビルドを完全に爆破せずに自分のプロジェクト構成(デバッグとリリースに加えて)を追加する方法を理解できないようです。

このプロジェクトには、両方のプラットフォームのアプリとそのアプリ拡張機能のターゲットがいくつかあります。 XcodeワークスペースにはもちろんPodsプロジェクトもあります。

このプロジェクトはiOSおよびMacのターゲットを構築するため、CocoaPodsの「ターゲット」を使用してポッドをグループ化します。私のPodfileは次のようになります:

source 'https://github.com/CocoaPods/Specs.git'

target :iOS do
  platform :ios, '7.1'
  link_with 'iOS', 'NozbeToday', 'NozbeShare', 'NozbeWatch'

  # pods...
end

target :Mac do
  platform :osx, '10.9'
  link_with 'Mac'

  # pods...
end

さて、ここに問題があります。これまでのところ、プロジェクトにはデフォルトの「デバッグ」および「リリース」構成しかありませんでした。それらを変更し、異なるプロビジョニングプロファイル/バンドルIDの組み合わせにいくつか新しいものを追加したかったのです。

…そして、私は立ち往生しています。これを行う方法がわかりません。

問題の最初の兆候は、すべてのターゲット/構成の組み合わせに対して警告pod installが吐き出されたことです。

[!]プロジェクトにはすでにカスタム構成セットがあるため、CocoaPodsはプロジェクトの基本構成を設定しませんでした。 CocoaPods統合がまったく機能するためには、ターゲットNozbeTodayの基本構成をPods/Target Support Files/Pods-iOS/Pods-iOS.dev debug.xcconfigに設定するか、ビルド構成にPods/Target Support Files/Pods-iOS/Pods-iOS.dev debug.xcconfigを含めてください。

私はそれが何を意味し、これを修正する方法を理解できませんでした。いずれにせよ、プロジェクトはビルドされません—最良のケースでは、Pods-something.a…が見つからないというリンカエラーが発生します。

48
radex

OK、この質問を書く途中で私は自分でそれを理解しました(イヤラダッキング)。次世代のソリューションは次のとおりです。

基本的に、Podターゲットへの明示的な依存関係をアプリケーションスキームに追加する必要があります。

その方法は次のとおりです。アプリケーションスキームを編集し、[ビルド]セクションに移動して、ポッドターゲットを追加します上記アプリケーションターゲット。次のようなものが表示されるはずです。

enter image description here

そして、それはうまくいくでしょう。


pod installのCocoaPods警告については、Xcode構成ごとにCPによって生成されたxcconfigファイルを使用する必要があります。その方法は次のとおりです。

  • Pods/Target Support Filesで.xcconfigファイルを見つけます
  • xcodeプロジェクトの「ポッド」グループにドラッグアンドドロップします(参照のみを追加します。ターゲットにコピーしたり、ビルドに追加したりしないでください)
  • プロジェクトナビゲータでプロジェクトをクリックし、プロジェクト自体を選択します(ターゲットの1つではありません)。 [情報]に移動し、[構成]の下の[構成ファイルに基づく]列で各構成とターゲットに正しい.xcconfigsを設定します。

また、Xcode構成のどれが「デバッグ」(最適化されていない)、「リリース」であるかをCocoaPodsに知らせるには、Podfileに次のようなものが必要です。

project '1Nozbe', {
  'iOS 1 Dev Debug' => :debug,
  'iOS 2 Dev AdHoc' => :release,
  'iOS 3 Release Debug' => :debug,
  'iOS 4 Release AdHoc' => :release,
  'iOS 5 Release AppStore' => :release,
}

CocoaPodsとはまったく関係ありませんが、CP以外の他の(サブプロジェクト)依存関係がある場合は、2つのことも行う必要があります。

  • サブプロジェクトターゲットに明示的な依存関係を追加します(上記のスクリーンショットのように)
  • メインプロジェクトと同じになるように、サブプロジェクトの構成の名前を変更/追加します。 (それ以外の場合、Xcodeはサブプロジェクトで使用する構成を認識しません)
42
radex

ヘッダーファイルをインポートするのと同じように、設定ファイルに次の行を追加します。

#include "Pods/Target Support Files/Pods/Pods.debug.xcconfig"

注:#includeではなく#importです

10
leavez