2013-08-29 12 views
14

私はiOSアプリケーションで数週間使用しています。これはテスト対象の1つのターゲット(「MainApp」と呼ばせてください)と完全に機能します。しかし、私は今、別のターゲット( "MyAppLite")をビルドし、ビルドが失敗したことに気づきました(ポッドのヘッダーファイルの1つにファイルが見つかりません)。次のようにすべてのターゲットとポッドを統合

私が気づいたビルド設定の違いは以下のとおりです。

  • その他のリンカフラグは
  • MyAppLiteフレームワーク/ヘッダー/ライブラリ検索パス内に必要なフレームワークは、すべてのMyAppLiteで空になっているが含まれていませんMainAppにでユーザー定義のビルド設定の
  • なしどのように確保することができますMyAppLite

に存在しないことを私はpod install、すべてのTAを実行するとrgetsにライブラリがリンクされていますか?ドキュメントから

platform :ios, '5.0' 

pod 'TTTAttributedLabel', '~> 1.7.0' 
pod 'iRate', '~> 1.7.5' 
pod 'MBProgressHUD', '~> 0.6' 
pod 'FlurrySDK', '~> 4.2.3' 
pod 'ACSimpleKeychain', '~> 0.0.1' 
pod 'WEPopover', '~> 0.0.1' 
pod 'AFNetworking', '~> 1.3.1' 
pod 'Nimbus', '~> 1.0.0' 
pod 'QuincyKit', '~> 2.1.9' 
+0

Cocoapods 1.0.0互換性のためにhttp://stackoverflow.com/a/34905278/1033581を参照してください。 –

答えて

13

に異なる依存関係の設定が必要な場合は、これがlibPods.aを生成し、それがTarget1Target1にリンクしますlink_withディレクティブ

platform :ios, '5.0' 

pod 'TTTAttributedLabel', '~> 1.7.0' 
pod 'iRate', '~> 1.7.5' 
pod 'MBProgressHUD', '~> 0.6' 
pod 'FlurrySDK', '~> 4.2.3' 
pod 'ACSimpleKeychain', '~> 0.0.1' 
pod 'WEPopover', '~> 0.0.1' 
pod 'AFNetworking', '~> 1.3.1' 
pod 'Nimbus', '~> 1.0.0' 
pod 'QuincyKit', '~> 2.1.9' 

link_with "MyApp" 
link_with "MyAppLite" 

を使用することができますCocoapodsのドキュメントでMultiple Targetsを参照してください。

関連documentation:あなたのプロジェクトにpodfile内のすべてのターゲットをリンクに自動的にcocoapods

  • 注意、。このため、ターゲットの名前が一致する必要があります。彼らの親が別のプラットフォームを持っている場合は、排他的である

    target :test, :exclusive => true do 
        link_with 'MyAppTests' 
    end 
    
  • ターゲット、デフォルトで:何らかの理由で別の名前を使用してpodfileにターゲットを指定したい場合は、link_with属性を設定することができます。

  • Podfileの主なターゲットは、常に最終プロジェクトの最初のターゲットにリンクされます。 CocoaPods 1.0.0について

+2

これは基本的に私がやったことですが、すべてのポッドを含む明示的なターゲットを定義し、その後に 'link_with ['MyApp'、 'MyAppLite']'という行の前にポッドのリストを追加する必要がありました。 – colincameron

+0

なぜそうしなければならないのか尋ねることはできますか? –

+0

わかりませんが、そうでなければ動作しません。 – colincameron

2

明示的なターゲットが指定されていない場合、その後、ポッドターゲットは、プロジェクトの最初のターゲットにリンクされます参考のため

は、ここに私のPodfileです。

link_withを使用して、さらなるターゲットとリンクすることができます。

また、あなたは、異なるターゲット

+0

ビルド設定は 'pod install'で自動的に設定されます - 私は正しく自動生成されるべきものを手でつないで起動したくありません - それはCocoaPodの全体のポイントではありませんか? – colincameron

+0

また、すべてのターゲットに対して同じ依存関係を正確に設定したいと考えています。 – colincameron

+0

OK。私は答えを更新しました。それが役に立てば幸い。 – serrrgi

24

、開発者からの推薦は、abstract_target(しかし、0.39.0と互換性がない)を使用している:CocoaPods 0.39.0 + 1.0

platform :ios, '5.0' 

abstract_target 'defaults' do 
    pod 'TTTAttributedLabel', '~> 1.7.0' 
    pod 'iRate', '~> 1.7.5' 
    pod 'MBProgressHUD', '~> 0.6' 
    pod 'FlurrySDK', '~> 4.2.3' 
    pod 'ACSimpleKeychain', '~> 0.0.1' 
    pod 'WEPopover', '~> 0.0.1' 
    pod 'AFNetworking', '~> 1.3.1' 
    pod 'Nimbus', '~> 1.0.0' 
    pod 'QuincyKit', '~> 2.1.9' 

    target 'MyApp' 
    target 'MyAppLite' 
end 

。0の互換性は、defを使用すると、正常に動作します(ただし、開発者によって推奨されません):

platform :ios, '5.0' 

def default_pods 
    pod 'TTTAttributedLabel', '~> 1.7.0' 
    pod 'iRate', '~> 1.7.5' 
    pod 'MBProgressHUD', '~> 0.6' 
    pod 'FlurrySDK', '~> 4.2.3' 
    pod 'ACSimpleKeychain', '~> 0.0.1' 
    pod 'WEPopover', '~> 0.0.1' 
    pod 'AFNetworking', '~> 1.3.1' 
    pod 'Nimbus', '~> 1.0.0' 
    pod 'QuincyKit', '~> 2.1.9' 
end 

target 'MyApp' do 
    default_pods 
end 

target 'MyAppLite' do 
    default_pods 
end 
関連する問題