3

ベースを使用して、その上に別のプロジェクトを作成し、そのコードを使用したい大きなワークスペースがあります。コードで直接作業する代わりに、myPodProject を使用して別のプロジェクト myProject を作成して、コードとポッドにアクセスし、コードとポッドを個別に追加できるようにしたいと考えています。

元の構造:

CoreApp
|
+-- CoreApp.xcworkspace
     |
     +-- CoreProject.xcodeproj
     +-- Pods.xcodeproj

私が行ったことは、プロジェクトで独自のワークスペースを作成し、すべてのコア プロジェクトをワークスペースにドラッグし、「ヘッダー検索パス」でコア プロジェクトを指すことです。

したがって、新しい構造は次のとおりです。

MyApp
|
+-- MyApp.xcworkspace
     |
     +-- MyProject.xcodeproj
     +-- CoreProject.xcodeproj
     +-- Pods.xcodeproj

ここまでは順調です。

今、私は自分のポッドを持ちたいと思っています。しかし、同じワークスペースに 2 つの Pods.xcodeproj があると問題があるようです。

これを持つにはどうすればいいですか?

MyApp
|
+-- MyApp.xcworkspace
     |
     +-- CoreProject.xcodeproj
     +-- CorePods.xcodeproj
     +-- MyPods.xcodeproj
     +-- MyProject.xcodeproj
4

2 に答える 2

3

更新:同じワークスペースに 2 つの "Pods.xcodeproj" を配置することは可能ですが、同じディレクトリに配置することはできません。

サブディレクトリ ソリューション

「CoreProject」を「MyProject」のサブディレクトリにチェックアウトするpod installと、「MyProject」と「CoreProject」の両方のディレクトリで実行できます。このようにして、両方のプロジェクトが独自の「Pods.xcodeproj」を持つことができます。

実行後のファイル構成です。

MyProject
├── MyProject
├── MyProject.xcodeproj
├── MyProject.xcworkspace
├── Podfile
├── Podfile.lock
├── Pods
│    └── Pods.xcodeproj
└── CoreProject
    ├── Core.m
    ├── CoreProject
    ├── CoreProject.xcodeproj
    ├── CoreProject.xcworkspace
    ├── Podfile
    ├── Podfile.lock
    └── Pods
         └── Pods.xcodeproj

最後に、次の手順を実行する必要があります。

  1. 「MyProject.xcworkspace」を開く
  2. 「CoreProject.xcodeproj」とその「Pods.xcodeproj」を追加
  3. 「MyProject」から「CoreProject」をリンク

「CoreProject.xcworkspace」を使用して「MyProject」を編集しないでください。

これがこの場合のプロジェクト構造です。

MyProject.xcworkspace
|
+-- MyProject.xcodeproj
+-- Pods.xcodeproj (for MyProject)
+-- CoreProject.xcodeproj
+-- Pods.xcodeproj (for CoreProject)

共有ポッド ソリューション

CoreProject の Pod に触れることができる場合は、次の解決策が適しています。

新しい「Pods.xcodeproj」を作成し、「MyProject」および「CoreProject」と共有する必要があります。

プロジェクト構造は以下のようになります (「新しい構造」と同じですが、ポッドは新しいものに置き換えられます)。

MyApp
|
+-- MyApp.xcworkspace
     |
     +-- MyProject.xcodeproj
     +-- CoreProject.xcodeproj
     +-- Pods.xcodeproj (your own)

これは、ワークスペースの Podfile のサンプルです。この場合、「MyProject」から「CoreProject」をリンクすると、「AFNetworking」は両方のプロジェクトで使用できますが、「SDWebImage」は「MyProject」でのみ使用できます。

ポッドファイル

workspace 'MyApp'
xcodeproj 'CoreProject.xcodeproj'
xcodeproj 'MyProject.xcodeproj'

target "CoreProject" do
  pod 'AFNetworking'
  xcodeproj 'CoreProject.xcodeproj'
end

target "CoreProjectTests", :exclusive => true do
  pod 'OCMockito'
  xcodeproj 'CoreProject.xcodeproj'
end

target "MyProject" do
  pod 'SDWebImage'
  xcodeproj 'MyProject.xcodeproj'
end

target "MyProjectTests", :exclusive => true do
  pod 'OCHamcrest'
  xcodeproj 'MyProject.xcodeproj'
end
于 2015-01-26T15:38:40.077 に答える
0

xiongmaomaomao の回答に加えて、2 番目のプロジェクト (この場合は CoreProject としましょう) が別のディレクトリ (MyProject と Podfile とは別) にあり、両方でポッド (単体テスト用の OCMockito など) を使用する場合プロジェクトでは、Podfile で次のようなことを行う必要があります。

def mockito_shared_pod
  pod 'OCMockito', '~> 3.0'
end

target "MyProjectTests" do
  inherit! :search_paths
  mockito_shared_pod
end

target "CoreProjectTests" do
  mockito_shared_pod
  xcodeproj '../<path_to_proj_file>/CoreProject.xcodeproj'
end

ご覧のとおり、ここで重要なことは、プロジェクトごとに 2 つのターゲットを定義することです。MyProject / Podfile ディレクトリにないプロジェクトに関連付けられたターゲットについては、xcodeproj値を追加してそのプロジェクトの場所を指定する必要があります。

このmockito_shared_pod定義は必須ではありませんが、ポッドを 2 回 (各ターゲットで 1 回) 指定する必要がなくなります。

xiongmaomaomao の回答が非常に役に立ったため、これを投稿していますが、私の異常なケースに合わせて少し異なる方法で行う必要があり、他の誰かが私と同じ問題を抱えている可能性があります。

于 2016-08-31T13:56:56.973 に答える