以下を含むワークスペースがあります。
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変数が設定されません。
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'
ワークスペースに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
これは私のフォルダ構造です
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
現在の構文では、次のようになります
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
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