3

Mac で Apple の Application Loader ユーティリティを使用して .ipa ファイルをアップロードしようとしています。すると、次のエラーが表示されます。

エラー ITMS-90094: 「無効な起動イメージ - アプリには、iOS 6.0 SDK 以降でビルドされたアプリでのみサポートされるサイズ修飾子を持つ起動イメ​​ージが含まれています。」

このアプリは、Embarcadero RAD Studio XE7 / C++ Builder の iOS 8.2 SDK を使用して構築されています。有効な Adhoc Distribution モバイル プロビジョニングを作成しました。これは Mac 上にあり、PAServer 15.0 および Xcode 6.2 でアプリをコンパイルするために使用されます。プロジェクトのプロパティ | で適切に定義しました。iOS プラットフォームでのアドホック配布のプロビジョニング。リリース モードに変更し、[構成] で [プロジェクト マネージャー] から [アドホック] を選択しました。最初にアプリをクリーンアップしてから、ビルドしてからデプロイします。完了すると、テスト デバイスで完全に動作する有効な .ipa ファイルを取得できます。

Apple によると、この問題は、iOS SDK 5.1 以前でアプリをビルドし、Default-568h@2x.png 画像 (iPhone 5 の 4 インチ Retina ディスプレイ サポート用) を含めた場合に発生します。この問題を解決するには、iOS 6.0 SDK 以降に対してアプリをビルドする必要があります。しかし、私が述べたように、私は iOS 8.2 SDK を使用しています。8.1 も試してみましたが、システムにインストールした iOS SDK のバージョンは 2 つだけです。

iOS 6 SDK に対してアプリをビルドするつもりがない場合は、プロジェクトから Default-568h@2x.png を削除してください。このファイルを削除しようとしたところ、エラーは消えましたが、「iPhone 5 の最適化要件 - バイナリが iPhone 5 用に最適化されていません」という別のエラーが表示されます。

どういうわけか、IPA ファイルから間違ったバージョンを検出しているに違いありません (これは、Xcode や他の多くの人々がこの問題を抱えているのではなく、方程式の RAD Studio 側の問題であるとしか思えません)。他の投稿では、「デプロイ ターゲット」、「ベース SDK」、「ターゲット SDK」などの用語を使用しています。

これらはすべて正しく設定されていると思いますが、XE7 によって生成された IPA が、iOS 6.0 より後の SDK でビルドされたものとして Application Loader によって適切に検出されるようにするには、どうすれば修正できますか?

私が試した解決策(成功せずに):

ほとんどの検索結果では、Xcode の新しいバージョン (少なくとも 5 以降) でビルドするように言われていますが、私は最新の Xcode バージョン 6.2 を使用しています。注: バージョン 6.0 と記載されているところはどこでも、7.0 も試しました。プロジェクト オプションは、ターゲット: すべての構成 - iOS デバイス プラットフォームを参照します。

  1. http://207.211.86.211/index.php/answers/my-discussion/upload-to-itunesconnect
    この男も同じ問題を抱えていて、すべてのプロジェクト オプションを確認するように言っています | アプリケーション画像は正しいサイズです。私は自分のものであることを確認しました。彼はまた、Apple の iOS SDK のリリース バージョンでビルドしていることを確認するよう勧めています。ツール経由 | オプション | 環境オプション | SDK Manager で iPhoneOS 8.x を選択し、[ローカル ファイル キャッシュの更新] をクリックします。これも役に立ちませんでした。

  2. https://pjstrnad.com/submitting-application-apple-store-delphi/
    まず、プロジェクトの下にカスタム Info.plist ファイルを作成することをお勧めします。展開。次に、無効なイメージの問題を修正するには、MinimumOSVersion キーを追加して 6.0 に設定する必要があると彼は言います。

    Custom.info.plist に追加:

    <key>MinimumOSVersion</key>
    <string>6.0</string>

  3. 投稿できるリンクは 2 つだけなので、この次のリンクは、community.embarcadero.com の Answers で「iOS 8.1 の展開に関する問題」を検索して、元の投稿を検索する必要があります。

    ここで、Hotfix 30036「iOS アプリケーションを Apple AppStore に送信するための Hotfix」をインストールすることをお勧めします。彼らはまた、Project Options |で提案しました。Delphi コンパイラ | コンパイルして、コンパイラに渡す追加オプションに「--ios-version-min:6.0」を追加します。私はBCBを使用しているので、それが私に影響を与えるかどうかはわかりませんが、私も試しました.

  4. stackoverflow に関する記事では、.IPA ファイルに対して otool と grep を使用してバージョン情報を確認する方法について説明しています。そこで、ipa ファイルを解凍し、otool を実行して grep を実行すると、次の出力が返されました:

    cmd = LC_VERSION_MIN_IPHONEOS
    cmdsize = 16
    version = 7.0
    sdk = 7.1

    私が期待するように 8.1 または 8.2 とは言いませんが、両方のバージョンは7+。これは間違いなく 6.0 よりも新しいため、Application Loader がバージョンを取得する場所が他にあるはずです。

  5. プロジェクト オプションの変更 | C++ リンカ: 高度: 6.0 までサポートされる最小 iOS バージョン。

  6. プロジェクト オプションの変更 | Delphi コンパイラ | リンク: iOS の最小バージョンは 6.0 までサポートされています。

  7. まったく新しい空のマルチデバイス アプリケーションを作成し、プロビジョニングして、Application Loader 経由でアップロードしようとしました。これはまったく同じエラーで失敗します。

4

1 に答える 1

0

答え:

Embarcadero のサポートと Apple からのエラー メッセージ/ドキュメントの間で、最終的に問題が何であるかを突き止めました。Apple は、Ad hoc アプリを iTunes Connect に送信しようとすることを許可していることが判明しました。まだパブリック App Store に配布しておらず、選択したユーザー グループにプライベート ベータ テスト バージョンを展開しているという事実にもかかわらず、それでも App Store プロビジョニングとして提出します。違いは、それが持っているベータ資格です。

TestFlight を介して App Store の外にある選択された数のデバイスに送信されることを意味するとアドホックに取りましたが、これは当てはまりません (少なくとも TestFlight では)。この問題は、Apple のエラー メッセージがまったく役に立たなかったことに起因しています。エラーには、「6.0 SDK の無効な起動イメージが含まれています」ではなく、「アドホックまたは開発のプロビジョニングではなく、App Store のプロビジョニングを使用する必要があります」のようなメッセージが表示されるはずです。

さらに悪いことに、TestFlight がサードパーティのサービスだったときは、Ad hoc として送信するよう指示されていました。そのため、アップルが購入したときに変更されたため、私たちのチームは混乱しました(ただし、これは明らかにされていませんでした。少なくとも、エンバカデロのドキュメントでは明らかにされていませんでした)。

また、用語も別の問題です。CERTIFICATE と PROVISION という用語は、同じ意味で、または誤ってどちらか一方から使用されることがありますが、この区別は非常に重要です。

したがって、解決策は、アドホックのものではなく、App Store Mobile Provision (配布証明書で署名された) を使用することです。アプリが iTunes Connect に正常に送信されました。

于 2015-04-23T18:52:29.823 に答える