1. ホーム
  2. xcode

[解決済み] XcodeプロジェクトのPodfileで複数のターゲットを指定するにはどうすればよいですか?

2022-04-26 15:41:16

質問

Xcode 4のプロジェクトでCocoaPodsを使っていますが、私のプロジェクトには3つのターゲットがあります(デフォルト、ライトバージョン構築用、デモバージョン構築用の3つ)。すべてのターゲットは同じライブラリを使用しますが、CocoaPodsは静的ライブラリと検索パスをプライマリターゲットにのみ追加します。私のPodfileは以下のような感じです。

platform :ios, '5.0'

pod 'TestFlightSDK', '>= 1.1'
pod 'MBProgressHUD', '0.5'
pod 'iRate', '>= 1.6.2'
pod 'TimesSquare', '1.0.1'
pod 'AFNetworking', '1.1.0'
pod 'KKPasscodeLock', '0.1.5'
pod 'iCarousel', '1.7.4'

これを動作させる唯一の方法は、各ターゲットを個別に指定し、すべてのポッドを再度リストアップすることでした。

platform :ios, '5.0'

target :default do  
    pod 'TestFlightSDK', '>= 1.1'
    pod 'MBProgressHUD', '0.5'
    pod 'iRate', '>= 1.6.2'
    pod 'TimesSquare', '1.0.1'
    pod 'AFNetworking', '1.1.0'
    pod 'KKPasscodeLock', '0.1.5'
    pod 'iCarousel', '1.7.4'
end

target :lite do 
    link_with 'app-lite'

    pod 'TestFlightSDK', '>= 1.1'
    pod 'MBProgressHUD', '0.5'
    pod 'iRate', '>= 1.6.2'
    pod 'TimesSquare', '1.0.1'
    pod 'AFNetworking', '1.1.0'
    pod 'KKPasscodeLock', '0.1.5'
    pod 'iCarousel', '1.7.4'
end

target :demo do 
    link_with 'app-demo'

    pod 'TestFlightSDK', '>= 1.1'
    pod 'MBProgressHUD', '0.5'
    pod 'iRate', '>= 1.6.2'
    pod 'TimesSquare', '1.0.1'
    pod 'AFNetworking', '1.1.0'
    pod 'KKPasscodeLock', '0.1.5'
    pod 'iCarousel', '1.7.4'
end

何か良い方法はないでしょうか?

どのように解決するのですか?

以来 CocoaPods 1.0 は構文が変更され、代わりに link_with のようにします。

# Note; name needs to be all lower-case.
def shared_pods
    pod 'SSKeychain', '~> 0.1.4'
    pod 'INAppStoreWindow', :head
    pod 'AFNetworking', '1.1.0'
    pod 'Reachability', '~> 3.1.0'
    pod 'KSADNTwitterFormatter', '~> 0.1.0'
    pod 'MASShortcut', '~> 1.1'
    pod 'MagicalRecord', '2.1'
    pod 'MASPreferences', '~> 1.0'
end

target 'Sail' do
    shared_pods
end

target 'Sail-iOS' do
    shared_pods
end


古い回答 CocoaPods 1.0以前のものです。

そう、もっといい方法があるんです! 次のことを確認してください。 link_with できるところ link_with 'MyApp', 'MyOtherApp' で複数のターゲットを指定することができます。

のような単体テストで使っています。 link_with 'App', 'App-Tests' (ターゲット名のスペースに注意)。

platform :osx, '10.8'

link_with 'Sail', 'Sail-Tests'

pod 'SSKeychain', '~> 0.1.4'
pod 'INAppStoreWindow', :head
pod 'AFNetworking', '1.1.0'
pod 'Reachability', '~> 3.1.0'
pod 'KSADNTwitterFormatter', '~> 0.1.0'
pod 'MASShortcut', '~> 1.1'
pod 'MagicalRecord', '2.1'
pod 'MASPreferences', '~> 1.0'


を使ったアプローチ アブストラクトターゲット :

以下の例では 'ShowsiOS' , 'ShowsTV''ShowsTests' ターゲットはそれぞれ独立したポッドを持ち、さらに ShowsKit は、すべてダミーターゲットの子であるため、継承されます。 'Shows' .

# Note: There are no targets called "Shows" in any of this workspace's Xcode projects.
abstract_target 'Shows' do
  pod 'ShowsKit'

  target 'ShowsiOS' do
    pod 'ShowWebAuth'
  end

  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end

  # Our tests target has its own copy
  # of our testing frameworks
  # (beside inheriting ShowsKit pod).

  target 'ShowsTests' do
    inherit! :search_paths
    pod 'Specta'
    pod 'Expecta'
  end
end