Xcode6 GMでアプリを送信しようとしていますが、検証時にこのエラーが発生します。アプリには、アクション拡張機能と、拡張機能とアプリ自体の間で共有される動的フレームワークがあります。
プロジェクトのどこにも「Frameworks」というファイルがないので、これがどういう意味なのかよくわかりません。誰もがこの問題を受け取ったり、何かアイデアを持っていますか?
エラーはSwiftの使用に関連していることが判明しました(アプリと拡張機能の両方がSwiftを使用しています)。
アプリの場合、設定する必要がありました:
Embedded Content Contains Swift Code: YES
および拡張機能の場合:
Embedded Content Contains Swift Code: NO
Xcode 8および9
Xcode 8および9では、この名前がAlways Embed Swift Standard Libraries
に変更されているようです。したがって、アプリの場合:
Always Embed Swift Standard Libraries: YES
および拡張機能の場合:
Always Embed Swift Standard Libraries: NO
私のために働いた唯一の解決策は、この実行スクリプトをApp Extensionターゲットに追加することでした:
cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then
rm -fr Frameworks
fi
ビルド設定からこれを修正するための3つのステップ
Embedded Content Contains Swift Code: YES
Embedded Content Contains Swift Code: NO
@executable_path/../../Frameworks
タイトルにembed
Wordが含まれる拡張機能のすべてのビルドフェーズを削除します。
さらに:
Yes
に設定する必要があります.上記の答えのどれも私にとってはうまくいきませんでした。これは、エラーの原因が親アプリまたは拡張機能ではないためです。むしろ、リンクされたライブラリの1つに障害がありました。
確認するには、まずXcodeを使用してアーカイブし、次にオーガナイザーを使用してエントリを選択し、Show in Finderを使用して検索します。これにより、.xcarchive
ファイルが表示されます。
そのファイルを選択し、「パッケージの内容を表示」を選択します。
Products/Applicationsフォルダーで.appを選択し、再度「Show Package Contents」を選択します。
Frameworksフォルダーで問題のモジュールを見つけます。たとえば、エラーが次の場合:
ERROR ITMS-90206: "Invalid Bundle. The bundle at 'MyApp.app/Frameworks/MyLib.framework' contains disallowed file 'Frameworks'."
その後、Frameworks/MyLib.framework
で次の内容が表示される可能性があります。
../Frameworks/libswiftContacts.dylib
../Frameworks/libswiftCore.dylib
../Frameworks/libswiftCoreData.dylib
../Frameworks/libswiftCoreGraphics.dylib
../Frameworks/libswiftCoreImage.dylib
../Frameworks/libswiftCoreLocation.dylib
../Frameworks/libswiftDarwin.dylib
../Frameworks/libswiftDispatch.dylib
../Frameworks/libswiftFoundation.dylib
../Frameworks/libswiftLocalAuthentication.dylib
../Frameworks/libswiftObjectiveC.dylib
../Frameworks/libswiftPassKit.dylib
../Frameworks/libswiftUIKit.dylib
../Frameworks/libswiftWebKit.dylib
親アプリに含まれるリンクライブラリ(またはモジュール)にEMBEDDED_CONTENT_CONTAINS_Swift = YES;
があるため、これらが存在します
Xcodeで依存モジュールを見つけて、フラグを更新します。
この問題を克服しても、アプリはiTunes Storeからの説明メールで拒否される場合があります。
Invalid Swift Support - The Watch OS application has Swift libraries at both...
再び、これはEMBEDDED_CONTENT_CONTAINS_Swift
フラグに戻ります。親アプリのみがYES
に設定されていることを確認してください。 WatchKitアプリと拡張機能の両方で、このフラグをNO
に設定する必要があります。これは、上記の@Mikeの回答で詳しく説明されています。
私の場合、解決策は、拡張機能の埋め込みバイナリからフレームワークを削除し、拡張機能のリンクされたフレームワークとライブラリに追加することでした。 (どちらも拡張機能の[全般]タブにあります。)
Embed Pods Frameworksスクリプトと Romanのスクリプト が両方とも同じターゲットに存在する場合。
Embed Pods Frameworksが他のフレームワークの前にあるかどうかを確認してください。そうでない場合は、Romanのスクリプトを最後に移動してください。
Embedded Content Contains Swift Code
の設定を見つけることができませんでしたが、Always Embed Swift Standard Libraries
の設定を見つけることができ、フレームワークでこれをNOに設定することでこの問題は修正されました。
cd "$ {CONFIGURATION_BUILD_DIR}/$ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if [[-d "Frameworks"]]; then rm -fr Frameworks fi
CocoaPodsを使用している場合、問題のあるターゲット(拡張機能)のEmbedフレームワークビルドフェーズを削除することを検討します。これにより、問題が修正されました。
ここにリストされているビルド設定のいずれも、この問題を解決しませんでした。ただし、いくつかのフレームワークを「組み込みバイナリ」から「リンクされたフレームワークとライブラリ」に移動した後、これを機能させました。
私のメインアプリとカスタムフレームワークの1つは両方で同じフレームワーク依存関係を持っていたようです。エラーなし。
フレームワークを拡張バンドルにコピーしていたため、同じエラーが発生していました。結局のところ、拡張機能で使用されるフレームワークはメインアプリバンドルにコピーされ、拡張機能ビルド設定でのみリンクされる必要があります(コピーされません)。拡張ビルドに検索パス「@executable_path /../../ Frameworks」を必ず含めてください。そのパスはXCode 10によって自動的に追加されたと思います。
私はこれと同じエラーを受け取っていました
ネストされたバンドルの許可エラー
私の問題はSquareReaderSDK.framework
に特にありましたが、指示に従って新しい実行スクリプトを追加する必要がありました。
FRAMEWORKS="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
"${FRAMEWORKS}/SquareReaderSDK.framework/setup"
Today拡張機能を持つアプリのXCode 7.1.1で初めてこの問題が発生しました(プロジェクトにSwiftはありません)。スクリプト( https://github.com/CocoaPods/CocoaPods/issues/42 )が機能しませんでした。
Cocoapodsをバージョン0.39.0.beta.3にダウングレードし、pod install
を実行してから、再アーカイブすることで問題が解決しました。