web-dev-qa-db-ja.com

CocoaPodsファイルリファレンスは複数のグループのメンバーです

共有拡張子の付いたアプリがあります。私のアプリは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 に投稿しました。

22
Heath Borders

これはCocoapodsのバグです-そしておそらくそれは長い間修正されないでしょう-

ランニング export COCOAPODS_DISABLE_DETERMINISTIC_UUIDS=YESターミナルでは、今のところ警告が抑制されているようです。

2016年2月編集:

Cocoapodsの最新バージョンでは、これはPodfileのインストールセクションに移動されました:install! 'cocoapods', :deterministic_uuids => false

20
ale0xB

アプリケーション拡張機能を追加するときにこのエラーが発生しました。

アプリケーションターゲットに存在するplatform :ios, '7.0'行を新しいターゲットにも繰り返すことで、これを修正しました。

2つのターゲットが同じプラットフォームを使用していることを確認することで、問題が解決しました。

0
ofavre

次の手順で問題が修正されました:(@ ale0xBの提案に従って変更も行いました)

  1. プロジェクトをクリーンアップする
  2. Xcodeを閉じます
  3. 派生データを削除する
  4. すでにPODをインストールしている場合は、「。xcworkspace」ファイルと「Podfile.lock」ファイルを削除してください。
  5. ポッドを再度インストールします
  6. 「.xcworkspace」を開いて実行します
0
Ashvin Ajadiya

これは、異なるディレクトリにあるファイルの重複が原因です。ファイルを別のディレクトリに移動すると、Xcodeが間違いを犯してファイルを複製することがあります。

私の解決策これらの重複ファイルを見つけるには、

  1. エラーメッセージをduplicateUUIDs.txtなどの名前のテキストファイルにコピーします
  2. ソートされたファイル名を取得し、重複したアイテムを出力します
grep -E '[a-zA-Z+]+\.(h|m|Swift)' -o duplicateUUIDs.txt | sort | uniq -d
  1. ポッドソースディレクトリでそれらを見つけて、不要なファイルを削除します。

別の方法重複ファイルを見つける

find . -path ./.git -Prune -o -type f -exec basename {} + | sort | uniq -d

ここで、-path ./.git -Prune -oは、検索時に.gitディレクトリを除外することを意味します

0
DawnSong