共有拡張子の付いたアプリがあります。私のアプリはCocoaLumberjack/Default
に依存しており、共有拡張機能はCocoaLumberjack/Core
に依存しています。 use_frameworks!
でビルドすると、次のエラーが発生します。
$ rm -rf Pods Podfile.lock; pod install
Updating local specs repositories
Analyzing dependencies
Downloading dependencies
Installing CocoaLumberjack (2.0.3)
Generating Pods project
2015-10-28 10:46:04.015 Ruby [53095:3440989]警告:「CocoaLumberjack.framework」のファイル参照は複数のグループ(「Products」および「Products」)のメンバーです。これは、不正な形式のプロジェクトを示しています。いずれかのグループのメンバーシップのみが保持されます(ただし、ターゲットのメンバーシップは影響を受けません)。複数のグループの同じファイルへの参照が必要な場合は、同じパスへの別の参照を追加してください。
Integrating client project
Sending stats
Sending stats
Pod installation complete! There are 2 dependencies from the Podfile and 1 total
pod installed.
[!] [Xcodeproj] Generated duplicate UUIDs:
PBXFileReference-/mainGroup/children/children:displayName:CocoaLumberjack.framework、explicitFileType:wrapper.framework、includeInIndex:0、isa:PBXFileReference、name:CocoaLumberjack.framework、path:CocoaLumberjack.framework、sourceTree:BUILT_PRODUCTS_DIR , displayName:CocoaLumber .framework、explicitFileType:wrapper.framework、includeInIndex:0、isa:PBXFileReference、name:CocoaLumberjack.framework、path:CocoaLumberjack.framework、sourceTree:BUILT_PRODUCTS_DIR , displayName:Pods_MyProject.framework、explicitFileType:wrapper.framework、includeInIndex:0、 isa:PBXFileReference、name:Pods_MyProject.framework、path:Pods_MyProject.framework、sourceTree:BUILT_PRODUCTS_DIR , displayName:Pods_MyShare.framework、explicitFileType:wrapper.framework、includeInIndex:0、isa:PBXFileReference、name:Pods_MyShare.framework、path:Pods_My .framework、sourceTree:BUILT_PRODUCTS_DIR , displayName:Products、isa:PBXGroup、name:Products、sourceTree:、/ Products/children/displayName:CocoaLumberjack.framework、explicitFileType:wrapper.frame work、includeInIndex:0、isa:PBXFileReference、name:CocoaLumberjack.framework、path:CocoaLumberjack.framework、sourceTree:BUILT_PRODUCTS_DIR、/ Products/CocoaLumberjack.framework
これは私のPodfile
です:
workspace 'MyWorkspace'
xcodeproj 'MyProject/MyProject.xcodeproj'
use_frameworks!
source 'https://github.com/CocoaPods/Specs.git'
link_with 'MyProject', 'MyShare'
target :MyProject do
pod 'CocoaLumberjack', '~> 2.0.1'
end
target :MyShare do
pod 'CocoaLumberjack/Core', '~> 2.0.1'
end
両方のターゲットで同じCocoaLumberjack
サブスペックを使用することで、この問題を回避することができました。私の作業中のPodfile
は以下のとおりです。
workspace 'MyWorkspace'
xcodeproj 'MyProject/MyProject.xcodeproj'
use_frameworks!
source 'https://github.com/CocoaPods/Specs.git'
link_with 'MyProject', 'MyShare'
target :MyProject do
pod 'CocoaLumberjack/Core', '~> 2.0.1'
end
target :MyShare do
pod 'CocoaLumberjack/Core', '~> 2.0.1'
end
なぜこの回避策が必要なのですか? 2つのターゲット間で実際に異なるサブスペックの依存関係がある場合はどうなりますか?
[〜#〜]編集[〜#〜]
これは CocoaPods Issue 437 に関連しているように見えます。サンプルプロジェクトを github に投稿しました。
これはCocoapodsのバグです-そしておそらくそれは長い間修正されないでしょう-
ランニング export COCOAPODS_DISABLE_DETERMINISTIC_UUIDS=YES
ターミナルでは、今のところ警告が抑制されているようです。
2016年2月編集:
Cocoapodsの最新バージョンでは、これはPodfileのインストールセクションに移動されました:install! 'cocoapods', :deterministic_uuids => false
アプリケーション拡張機能を追加するときにこのエラーが発生しました。
アプリケーションターゲットに存在するplatform :ios, '7.0'
行を新しいターゲットにも繰り返すことで、これを修正しました。
2つのターゲットが同じプラットフォームを使用していることを確認することで、問題が解決しました。
次の手順で問題が修正されました:(@ ale0xBの提案に従って変更も行いました)
これは、異なるディレクトリにあるファイルの重複が原因です。ファイルを別のディレクトリに移動すると、Xcodeが間違いを犯してファイルを複製することがあります。
私の解決策これらの重複ファイルを見つけるには、
duplicateUUIDs.txt
などの名前のテキストファイルにコピーしますgrep -E '[a-zA-Z+]+\.(h|m|Swift)' -o duplicateUUIDs.txt | sort | uniq -d
別の方法重複ファイルを見つける
find . -path ./.git -Prune -o -type f -exec basename {} + | sort | uniq -d
ここで、-path ./.git -Prune -o
は、検索時に.git
ディレクトリを除外することを意味します