web-dev-qa-db-ja.com

複数のプロジェクトでCocoaPodsを使用する

以下を含むワークスペースがあります。

  • myiPhone.xcodeproj
  • sharedStuff/sharedStuff.xcodeproj

sharedStuff.xcodeprojは、myiPhone.xcodeprojへの依存関係である静的ライブラリを構築します(簡単にするために、各プロジェクトに単一のターゲットがあると仮定します)。

次に、CocoaPodsを介して、両方のプロジェクトで使用できるライブラリを追加します。

私のPodsfileは次のようになります。

workspace 'myWorkspace.xcworkspace'
platform :ios

target :myiPhone do
    xcodeproj 'myiPhone.xcodeproj'
    pod 'MBProgressHUD', '~> 0.6'
end


target :sharedStuff do
    xcodeproj 'sharedStuff/sharedStuff.xcodeproj'
    pod 'MBProgressHUD', '~> 0.6'
end

ビルドすると、次のエラーが発生します。

diff:/../ Podfile.lock:そのようなファイルまたはディレクトリはありませんdiff:/Manifest.lock:そのようなファイルまたはディレクトリはありませんエラー:サンドボックスはPodfile.lockと同期していません。 'pod install'を実行するか、CocoaPodsインストールを更新します。

誰かがここで何が起こっているのか手がかりを持っていますか?

更新:「ポッドマニフェストのチェック」ビルドフェーズが実行されると、外観からPODS_ROOT変数が設定されません。

20
Mihai Damian

Xcodeプロジェクトの最初のターゲットには、2つのロックファイルで差分を実行するビルドフェーズがあります。しかし、xcodeプロジェクトの構成が、Pods /Pods-libPods.xcconfigで構成されたユーザー定義の設定を参照していないようです。

ポッドを複数のxcodeprojsの特定のターゲットにリンクしようとしているようです。私の仮定が正しければ、target属性を誤って使用しています。 target属性は、そのtarget内で構成したポッドを含むPodsプロジェクト内に新しい静的ライブラリを作成します。

Pods xcodeprojのデフォルトのターゲットは、libPods.a静的ライブラリを生成するlibPodsです。これは、targetを指定しない場合に生成されます。したがって、ポッドxcodeprojで複数の静的ライブラリを生成する必要がない場合は、ターゲットをわざわざ定義せずに、link_with属性を使用してデフォルトのlibPodstarget(静的ライブラリ)をxcodeprojsのターゲット。

たとえば、次のPodfileはPods.xcodeprojにlibPodsターゲットを作成し、MBProgressHUDソースをコンパイルフェーズに追加してから、PODS_ROOTとPODS_HEADER_SEARCH_PATHを定義するxcconfigファイルを各xcodeprojsに追加します。次に、この静的ライブラリをlink_withおよびxcodeprojで指定したターゲットにリンクします。

workspace 'myWorkspace.xcworkspace'
platform :ios

xcodeproj 'myiPhone.xcodeproj'
link_with 'myiPhone'
xcodeproj 'sharedStuff/sharedStuff.xcodeproj'
link_with 'sharedStuff'

pod 'MBProgressHUD', '~> 0.6'
8
Fergal Rooney

ワークスペースに2つのプロジェクトがあり、受け入れられた回答が機能しませんでした。しかし、ついに私はCocoapodsを2つのプロジェクトで適切に機能させる方法を管理しました。ポッドファイルは次のようになります。

workspace 'Projects.xcworkspace'
platform :ios, '8.0'

use_frameworks!

# ignore all warnings from all pods
inhibit_all_warnings!

def shared_pods
    # all the pods go here
    # pod 'Parse' etc.
end

xcodeproj 'Project1.xcodeproj'
xcodeproj 'Project2/Project2.xcodeproj'

target :Project1 do
  xcodeproj 'Project1'
  shared_pods
end

target :Project2 do
  xcodeproj 'Project2/Project2.xcodeproj'
  shared_pods
end
18
Andrey Gordeev

これは私のフォルダ構造です

OB
|podfile
|Project1->Project1.xcodeproj
|Project2->Project2.xcodeproj

これはOBフォルダ内の私のポッドファイルです

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

workspace 'OB.xcworkspace'
use_frameworks!

# ignore all warnings from all pods
inhibit_all_warnings!

project 'Project1/Project1.xcodeproj'
project 'Project2/Project2.xcodeproj'

abstract_target 'OB' do
    pod 'Alamofire', '~> 4.0'

    target 'Project1' do
        project 'Project1/Project1.xcodeproj'
    end

    target 'SchoolKids' do
        project 'Project2/Project2.xcodeproj'
    end
end

これにより、両方のプロジェクトにAfnetworking/Alamofireが追加されます。特定のプロジェクトに専用のポッドが必要な場合は、これを行うことができます。

 target 'Project1' do
        project 'Project1/Project1.xcodeproj'
        pod 'Alamofire', '~> 4.0'
    end
6
Rahul Vyas

現在の構文では、次のようになります

use_frameworks!
workspace 'myWorkspace'

project 'myiPhone'
project 'sharedStuff/sharedStuff'


target 'myiPhone' do
    project 'myiPhone'
    pod 'MBProgressHUD', '~> 0.6'
end


target 'sharedStuff' do
    project 'sharedStuff/sharedStuff'
    pod 'MBProgressHUD', '~> 0.6'
end
6

Rahul Vyasの答えのおかげで、私はついに私のプロジェクトで成功しました。私のプロジェクトはreact-nativeであり、サブプロジェクトとしてgitサブモジュールを使用しています。これが私のポッドファイルです:

workspace 'LuminPDFApp.xcworkspace'
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
use_frameworks!

inhibit_all_warnings!

project 'LuminPDFApp.xcodeproj'
project '../submodules/react-native-filepicker/ios/RNFilePicker.xcodeproj'

abstract_target 'LuminPDFApp' do
    pod 'SwiftyDropbox'

    target 'LuminPDFApp' do
        project 'LuminPDFApp.xcodeproj'
    end

    target 'RNFilePicker' do
        project '../submodules/react-native-filepicker/ios/RNFilePicker.xcodeproj'
    end
end
1
loc