4

複数のプロジェクトを含むワークスペースがあります。各顧客には独自のプロジェクトがあり、各顧客のプロジェクトは

  1. コア プロジェクト: 共通コードを含む静的ライブラリ
  2. インターフェイス プロジェクト: 共通インターフェイスを持つ静的ライブラリ、つまり UIViewController コード

Interface ライブラリも Core に依存しています。

プロジェクトの依存関係

各プロジェクトには 2 つのターゲットがあります。通常のターゲットとテストのターゲットなので、

  • コア、コアテスト
  • インターフェース、InterfaceTests
  • 顧客、顧客テスト

現在、アプリのすべての側面が大幅に開発されているため、構造のどの部分でもいつでも変更が発生する可能性があるため、すべてのプロジェクトを同じワークスペースと同じリポジトリに配置しています。

CocoaPods を使用して、プロジェクトの依存関係を管理したいと考えています。簡単にするために、すべてのテスト ターゲットでOCMockを使用し、すべての通常のターゲットでNewRelicAgentを使用し、コア ターゲットでのみReachabilityを使用できるとしましょう。

Podfile は次のようになります。

workspace 'CompanyWorkspace'
xcodeproj 'Core/Core.xcodeproj'
xcodeproj 'Interface/Interface.xcodeproj'
xcodeproj 'Customer/Customer.xcodeproj'

target :Core do
    platform :ios, '6.0'
    xcodeproj 'Core/Core.xcodeproj'
    pod 'NewRelicAgent', '~> 5.1'
    pod 'Reachability', '~> 3.2'
end

target :CoreTests do
    platform :ios, '6.0'
    xcodeproj 'Core/Core.xcodeproj'
    pod 'OCMock', '~> 3.1'
end


target :Interface do
    platform :ios, '6.0'
    xcodeproj 'Interface/Interface.xcodeproj'
    pod 'NewRelicAgent', '~> 5.1'
end

target :InterfaceTest do
    platform :ios, '6.0'
    xcodeproj 'Interface/Interface.xcodeproj'
    pod 'OCMock', '~> 3.1'
end


target :Customer do
    platform :ios, '7.0'
    xcodeproj 'Customer/Customer.xcodeproj'
    pod 'NewRelicAgent', '~> 5.1'
end

target :CustomerTests do
    platform :ios, '7.0'
    xcodeproj 'Customer/Customer.xcodeproj'
    pod 'OCMock', '~> 3.1'
end

スタティック ライブラリ Core.a を Interface.a のビルド フェーズに追加し、ユーザー ヘッダー検索パスを変更してヘッダーを検出することで、構造間の依存関係を解決しました。Customer プロジェクトでは、Core.a と Interface.a をビルド フェーズに追加し、ユーザー ヘッダーの検索パスを変更して、Core と Interface からコードを見つけられるようにしました。

このアプローチの問題は、Core と Interface がビルドしてテストを適切に実行することですが、Customer.app をビルドしようとすると、多数の重複シンボルエラーが発生します。これは、CocoaPods の target キーワードが依存関係が構成された静的ライブラリを生成するため、Customer のビルド時に Core からのコードを 2 倍インクルードしようとするためだと思います。この問題を解決する方法はありますか?

4

0 に答える 0