Xcode6 GMでアプリを送信しようとしていますが、検証時にこのエラーが発生します。アプリには、アクション拡張機能と、拡張機能とアプリ自体の間で共有される動的フレームワークがあります。
「Frameworks」というファイルがプロジェクトのどこにもないので、これが何を意味しているのか本当にわかりません。誰かがこの問題を抱えているか、何かアイデアを持っていますか?
Xcode6 GMでアプリを送信しようとしていますが、検証時にこのエラーが発生します。アプリには、アクション拡張機能と、拡張機能とアプリ自体の間で共有される動的フレームワークがあります。
「Frameworks」というファイルがプロジェクトのどこにもないので、これが何を意味しているのか本当にわかりません。誰かがこの問題を抱えているか、何かアイデアを持っていますか?
回答:
エラーはSwiftの使用に関連していることが判明しました(アプリと拡張機能の両方がSwiftを使用しています)。
アプリについては、私は設定する必要がありました:
Embedded Content Contains Swift Code: YES
そして拡張のために:
Embedded Content Contains Swift Code: NO
Xcode 8および9
これはAlways Embed Swift Standard Libraries
Xcode 8および9で名前が変更されたようです。したがって、アプリの場合:
Always Embed Swift Standard Libraries: YES
そして拡張のために:
Always Embed Swift Standard Libraries: NO
@executable_path/../../Frameworks
私のために働いた唯一の解決策は、この実行スクリプトをApp Extensionターゲットに追加することでした:
cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then
rm -fr Frameworks
fi
dyld: Library not loaded: ... Image not found
誰でも私を助けることができますか?
だから、ビルド設定からこれを修正する3つのステップ
Embedded Content Contains Swift Code: YES
Embedded Content Contains Swift Code: NO
@executable_path/../../Frameworks
私の場合、CocoaPods 1.0.1にアップグレードしましたが、これは新しいバグのようです。
ポッドの更新により、拡張機能のターゲットに実行スクリプトが追加され、Frameworksフォルダーが作成されます。@Romanの実行スクリプトを追加して削除しようとしていたので、それを見つけました。
解決策は、このスクリプトを拡張機能のビルドフェーズから削除することでした。これは行く必要があったものです...
1.1.0.rc.2
て問題を解決しました。
すべてを削除 embed
タイトルに単語が含まれている拡張機能のビルドフェーズをします。
さらに:
Yes
、拡張ターゲットに設定する必要があります。上記の答えはどれもうまくいきませんでした。これは、エラーの原因が親アプリまたはその拡張機能ではないためです。むしろ、リンクされたライブラリの1つに問題がありました。
確認するには、まずXcodeを使用してアーカイブし、次にOrganizerを使用してエントリを選択し、Finderに表示を使用して検索します。これは.xcarchive
ファイルます。
そのファイルを選択し、「パッケージの内容を表示」を選択します。
Products / Applicationsフォルダーで.appを選択し、もう一度「パッケージの内容を表示」を選択します。
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の回答に詳しく記載されています。
もし埋め込みポッドフレームワークのスクリプトとローマのスクリプトと同じターゲットの両方に存在します。
埋め込みポッドフレームワークが他のフレームワークの前にあるかどうかを確認してください。そうでない場合は、Romanのスクリプトを最後に移動します。
cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if [[-d "Frameworks"]]; 次にrm -fr Frameworks fi
私はこのような質問をたくさん見つけましたが、私の問題を解決する助けにはならなかったので、うまくいけばこれが誰かを助けるかもしれません。
Intent拡張機能(Siriショートカット用)を備えたアプリを作成していて、Appleの推奨に従って、拡張機能とアプリ間で共有されるコードのフレームワークを使用しています。
ターゲットの[全般]設定の[フレームワークとライブラリ]セクションで拡張機能にフレームワークを追加しました。ここにフレームワークを追加すると、2つの列があります。1つはフレームワークの名前を言い、もう1つは「埋め込み」というタイトルです。「Embed」列には何も表示されなかったので、問題ないと思いましたが、フレームワークのその列に対して「Do Not Embed」オプションを明示的に選択する必要がありました。これを実行してXcodeでアーカイブしたところ、検証中にフレームワークが各ターゲットの下の私のipaコンテンツに表示されなくなったことを確認できましたが、一度だけ検証され、最終的に検証が成功しました。
私は、Today拡張機能を備えたアプリ(Xwiftがプロジェクトにない)のXCode 7.1.1で初めてこの問題に直面しました。スクリプト(https://github.com/CocoaPods/CocoaPods/issues/4203)が機能しませんでした。
cocoapodsをバージョン0.39.0.beta.3にダウングレードし、を実行pod install
してから、再アーカイブすると問題が解決しました。