web-dev-qa-db-ja.com

アプリストアに送信した後にのみ発生する「無効なバンドル」エラーをデバッグする方法

私のアプリには多くのフレームワークがあります。アプリはアドホック/エンタープライズリリースで正常に動作します。 testflightテストのためにアプリストアに送信した場合にのみ、Appleから次のエラーメールが届きます。

親愛なる開発者、

「ここに私のアプリの名前」の最近の配信で1つ以上の問題が見つかりました。配送を処理するには、次の問題を修正する必要があります。

無効なバンドル-アプリによって参照される1つ以上の動的ライブラリがdylib検索パスに存在しません。

これらの問題を修正したら、修正したバイナリを再配信できます。

よろしく、

App Storeチーム

ここには特定の情報はありません。どうすればデバッグできますか?

31

Apple開発者テクニカルサポートから回答がありました。これはApple側のバグです。これは私にとってはうまくいかなかった、以下の推奨される回避策です。

この問題を診断するには、XcodeからApp Storeに送信するIPAをエクスポートする必要があります。 IPAはZipファイルであるため、右クリックして[アプリケーションから開く]> [アーカイブユーティリティ]と言うことにより、IPAを解凍できます。解凍されたフォルダー構造内でメインの実行可能ファイルを見つけ、コマンドラインでotoolを実行してライブラリリストを確認します。otool-L

取得するパスのリストは、IPA内で見つけたものと一致する必要があります。ライブラリはすべて@rpathで始まる必要があります。このリストのすべてを解凍されたIPAフォルダーと簡単に比較すると、不足しているものが明らかになります。

不足しているものがわかったら、Xcodeビルドフェーズのセットアップに進みます。ファイルのコピーまたは埋め込みフレームワークのいずれかのビルドフェーズに、欠落しているライブラリが含まれている必要があります。ライブラリをリストに追加するだけです。これらのビルドフェーズのいずれも表示されない場合は、新しいCopy Filesビルドフェーズを追加し、DestinationをFrameworksに設定し、ライブラリをリストに追加して、Code Sign On Copyがオンになっていることを確認します。

メインバイナリに欠けているものが見つからない場合は、watchOSアプリやiOSアプリ拡張機能など、他のバイナリでも同じ検索を実行してください。

すべてのフレームワークがこのビルドフェーズにあることがわかったら、アプリターゲットの[全般]ページの[埋め込みバイナリ]セクションをご覧ください。見つかったバイナリの横に複数レベルの../が表示されている場合はお知らせください不足している。

うまくいくかどうか教えてください!

31

ウォッチサポート付きのアプリをアプリストアにアップロードするときに、同じ問題が発生しました。

otool -Lを使用してipaまたはxcarchiveからバイナリを分析し、最初の回答のヒントで解決できました。ただし、問題は私のフレームワーク(@rpath)ではなく、Swift= lib。フレームワークフォルダーにlibswiftWatchKit.dylibが欠落していることに気付きました。

私のために働いた解決策は、ウォッチアプリのビルド設定でEMBEDDED_CONTENT_CONTAINS_Swift=YESを設定するのと同じくらい簡単でした(または、ウォッチアプリ拡張機能、両方ではありません)。その後、必要なすべてのSwiftライブラリがアーカイブ内の監視アプリのパスに正しくコピーされ、アプリストアへのアップロードが正常に機能しました。

どうやら、必要なSwift=ライブラリをメインアプリのフォルダーのみに指定すると、監視アプリが機能し、アップロードが成功します。

12
Martin Polak

カスタムSwiftフレームワークをプロジェクトに追加した後、アプリをiTunes connectにアップロードした後にこのメールを受け取りました。

このメールはiTunesストア

Invalid Bundle-アプリによって参照される1つ以上の動的ライブラリがdylib検索パスに存在しません。

この問題の修正は簡単です。

ステップ1:カスタムフレームワークEmbedded Binariesに追加されていることを確認しますターゲットの一般タブenter image description here

ステップ2:ビルド設定で、

セットする Always Embed Swift Standard Libraries = Yesメインプロジェクトターゲット。

そして、Always Embed Swift Standard Libraries = Noカスタムフレームワークターゲット。

これで問題が解決し、バイナリをiTunes connectにアップロードできました。

参照

11
Zaid Pathan

私の問題:組み込みフレームワークでも同じエラーが発生しました。

  1. Appプロジェクトにはカスタムフレームワークプロジェクトがあります
  2. カスタムフレームワークプロジェクト内には、別のカスタムフレームワークプロジェクトがあります

シミュレーターとデバイスに問題なくビルドされたアプリは、Appleテストに失敗し、「Invalid Bundle」を返しました。

TahaがTech Supportから指示されたのと同じようにパッケージを検査しましたが、すべてが正しく存在していました!

私のソリューション:プロジェクトを再構築して、2つのカスタムフレームワークを並べて配置し、一方がもう一方に埋め込まれないようにしました。

これはApple検証問題であるように見えます。これはすべてがデバイスとシミュレーターで正常に機能するが、回避策は簡単だったからです。

2
Dominic

私の場合、ビルド設定で、ライブラリのビルド設定に次を追加すると、これは修正されました。

 DYLIB_INSTALL_NAME_BASE = @rpath

手がかりはリンカーの警告でした:「YourLibraryのインストール名は「/」で始まりますが、指定されたSDKからではありません」

2

私は同じ問題を抱えていました。これは、アプリバンドルのFrameworksサブフォルダーに存在しないフレームワークが原因でした。

Copy Fieldsビルドフェーズを追加し、不足している.frameworkファイルをそこに追加することで修正しました。

1
Macondo2Seattle

このエラーメッセージは、AppleテクニカルノートTN2435アプリへのフレームワークの埋め込み: https://developer.Apple.com/library/archive/technotes/tn2435/_index。 html

トラブルシューティング手順を含む見出し「Missing Framework Bundle」の下にエラーメッセージがあります。

1
jverdi

同じ問題があり、 すべてのステップ (「Missing Framework Bundle」を参照)を経た後でも、動作したのはビットコードを無効にすることだけでした

0
kgaidis

同じ問題があった。これは、フレームワークターゲットの1つが「ライブラリとバイナリをリンク」のメインターゲットに追加されたが、「ターゲットの依存関係」と「埋め込みバイナリ」に追加されなかったために起こりました。

0

それで私はこれに二日間苦労しました。判明したのは、アーカイブしたスキームのビルドのアーカイブでUITestsをチェックしていたことです。

Archiveからチェックを外し、再アーカイブ、検証(常に合格する前に検証)、および「AppStoreにアップロード」後、Appleから通知する無効なSwiftサポート。代わりに、処理されたので行ってよいというメールを受け取りました!

0
Brandon Thomas