IOSアプリを作成し、Over-The-Airで配布したいと思います。私はこのガイドに従いました:
http://help.Apple.com/iosdeployment-apps/mac/1.1/?lang=en-us#app43ad77ea
アプリはエンタープライズ証明書で署名され、配布プロビジョニングプロファイルが含まれています。
(このガイドで説明されている手法を使用して)アプリをiPadにダウンロードしようとすると、ダウンロードアイコンの付いた四角いアイコンが "Waiting ..."という名前で画面に表示され、その後、名前がmy実際のアプリケーション名、そして2秒後に再びエラーメッセージを受け取ります:
アプリケーションをダウンロードできません
現在、「アプリケーション」をダウンロードできませんでした。
このガイドには、3つのトラブルシューティングのヒントがあります。
ワイヤレスアプリの配布が失敗して「ダウンロードできません」というメッセージが表示された場合は、次を確認してください。
アプリが正しく署名されていることを確認してください。 iPhone構成ユーティリティまたはApple Configuratorを使用してデバイスにインストールしてテストし、エラーが発生するかどうかを確認します。
マニフェストファイルへのリンクが正しいこと、およびマニフェストファイルにWebユーザーがアクセスできることを確認してください。
マニフェストファイル内の.ipaファイルへのURLが正しいこと、および.ipaファイルにWebユーザーがアクセスできることを確認してください。
私は3つすべてをチェックしましたが、それらは大丈夫です。
他に何がダウンロードの問題を引き起こす可能性がありますか?
alexeyが述べたように、あまりにも多くの理由がそのメッセージを引き起こす可能性があります。 Apple「すべてのエラーをキャッチ」として使用します。
Consoleで診断できます。デバイスをデスクトップに接続し、XCodeのオーガナイザー(macのみ)またはiPhone構成ユーティリティ(macおよびwindows)からアクセスします。だが...
Consoleは十分ではありません。時々関連するメッセージはありませんがあります。
そして、最後の手段は---(checklist に続きます。ゼロからやり直します。多くの outthere ...がありますが、現時点では、一般的で詳細でないOver The Airディストリビューションのチェックリストがあります。
ディストリビューションを構築する-これは最も複雑な部分であり、常にWeb上で行われ、Appleは常に手順を変更します。一般的に、証明書が必要です、識別子およびプロビジョニングプロファイル。デバイスのリストはほとんど常に必要です。現在の選択は "Distribution-> In House 「。
追伸:デバイスを一覧表示する場合は、UDIDが正しいことを確認してください。ここで多くの問題が報告されました。
[プロジェクト]-> [ビルド設定]でプロファイルを設定します-XCode 5以降、状況は変わりました。 コード署名の代わりにidentityを使用して、すべてをクリアし、* Code Signing-> * Provisioning Profileで設定できます。 Identityは自動的に「Automatic」に変更されるはずです。また、手順1からファイルを手動でダウンロードしてインストールする必要もありません。 XCodeがそれを管理します。
アーカイブ-Xcode 5では、「アーカイブ用にビルド」する必要はもうありません。アーカイブするだけです。次にオーガナイザーに表示されるはずです。大きなプロジェクトの場合は時間がかかります。このステップで多くのエラーが発生する可能性がありますが、それらはほとんどの場合、OTAではなくコードのコンパイルに関連しています。
配置-オーガナイザー->アーカイブで、適切なアーカイブを選択します(すでに最新のものとして選択されているはずです)をクリックして、「配布」をクリックし、次に保存エンタープライズまたはアドホック展開の場合。今は大いに待つかもしれません。ファイルを保存するとき、「エンタープライズ配布用に保存」オプションがあります。それは完全に誤解を招く名前です。実際に行うのは、plistファイルを作成することです。既にお持ちの場合は、大丈夫です。手動で編集することもできますが、これは一般的に優れています。 plistは、ステップ(5)に必要です。ここに良いものがあります:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>http://example.com/app.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<false/>
<key>url</key>
<string>http://example.com/FullSizeImage.png</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<false/>
<key>url</key>
<string>http://example.com/Icon.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.example.app</string>
<key>kind</key>
<string>software</string>
<key>subtitle</key>
<string>for iOS</string>
<key>title</key>
<string>My App</string>
</dict>
</dict>
</array>
</dict>
</plist>
配布-XCodeまたはiPhone構成ユーティリティを使用してインストールする場合は、この手順をスキップします。できました。これは、Webサイトにファイルを置くことです。次のようなhrefリンクを含むHTMLページを「単純に」追加します。
itms-services://?action=download-manifest&url=http://example.com/app.plist
残念ながら、Webサーバーの取り扱いは決して簡単ではありません。 サーバーmime-typeを確認 !サーバーがphpをサポートしている場合、それらに対処するためにいくつかのPHPファイルを作成しました。ファイルをそのまま保持します(plist、htmlとipa)および代わりにapp.plist.php
へのリンク代わりに:
app.plist.php
$file = fopen("app.plist", "r");
while(!feof($file)){
$line = fgets($file);
print str_replace(".ipa", ".ipa.php", $line);
}
fclose($file);
?>
app.ipa.php
<?php
header('Content-type: application/octet-stream');
$file = fopen("app.ipa", "r");
while(!feof($file)){
$line = fgets($file);
print $line;
}
fclose($file);
?>
検証-資産配列にリストされているすべてのファイルがダウンロード可能であることを確認します。これらのファイルのいずれかが404など(アイコンを含む)を返す場合、インストール全体が失敗します。 (A)これらのファイルを使用可能にするか、(B)plistからこれらの欠落したエントリを削除する必要があります。ダウンロードが機能するために、アイコンエントリは必要ありません。
アイコンなしのplistの例を次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>http://example.com/app.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.example.app</string>
<key>kind</key>
<string>software</string>
<key>subtitle</key>
<string>for iOS</string>
<key>title</key>
<string>My App</string>
</dict>
</dict>
</array>
</dict>
</plist>
ファイルの例は、チェックリストの非常に重要な部分です。それらは100%正確でなければなりません。
追伸:私の場合、それは.plistファイル上の間違ったリンクの「単純な」問題であったため、この答えを書いています。そして、そのように、診断するのは地獄のように難しいです。さて、このチェックリストを実行するだけでエラーを見つけることができます! 「app.ipa」ではなく「another-app.ipa」を指していました!
このメッセージを引き起こす理由はたくさんあります。
診断する最良の方法は、デバイスをMacに接続するで、ConsoleのデバイスをOrganizerで探すことです。
私の場合、たとえば、次のとおりでした。
verify_bundle_metadata:このアプリは、このデバイスファミリをサポートするためにビルドされたものではありません
自分の質問に答える:
問題は、マニフェストのいずれかのサムネイルのマニフェスト.plistで正しいパスが設定されていないことです。したがって、ipaには正しいパスだけでなく、一時的なダウンロードアイコンも必要です。
別の問題として、.plist [〜#〜] and [〜#〜] .ipaの両方が、通常のHTTPではなくHTTPSでホストされる必要があることがあります。ソフトウェアパッケージの文字列は次のようになります。
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://example.com/app.ipa</string>
愚かな小さな見落としが、しばらく私をつまずかせていた。
IOS5 +アプリをiOS4.3.5電話にインストールしようとしたときに、まったく同じエラーメッセージが表示されました。展開/ビルドターゲットとターゲットアーキテクチャもチェックして、その問題を示しているデバイスと一致しましたか?
コンソールで見つけました。
installcoordinationd(MobileInstallation)[99]:**** bundleID ****:5:11:1:1:**** bundleID ****のPlaceholderMetadataを更新して失敗1 _LSInstallType 1、undergroundError(Error Domain = MIInstallerErrorDomain Code = 13 "/private/var/installd/Library/Caches/com.Apple.mobile.installd.staging/temp.IoCSM9/extracted/Payload/App.appのコード署名の検証に失敗しました:実行可能ファイルは無効な資格。) "UserInfo = {LibMISErrorNumber = -402620394、LegacyErrorString = ApplicationVerificationFailed、SourceFileLine = 147、FunctionName = + [MICodeSigningVerifier _validateSignatureAndCopyInfoForURL:withOptions:error:]、NSLocalizedDescription =/private/var/installd/Libraryのコード署名の検証に失敗しました/Caches/com.Apple.mobile.installd.staging/temp.IoCSM9/extracted/Payload/App.app:0xe8008016(実行可能ファイルは無効な資格で署名されました。)})、ソース17>
ここを見てください:
App.appのコード署名の検証に失敗しました
実行可能ファイルは無効な資格で署名されました。
私の場合、Amazonからエンタープライズビルドをダウンロードしたためです。ただし、ビルドに使用されたプロビジョニングプロファイルは期限切れになりました( 開発者コンソール で示されています)。
別の目的を持つ別のもの:
「このアプリは現在インストールできませんでした。」 UserInfo = {NSLocalizedDescription =現時点ではこのアプリをインストールできませんでした。NSUnderlyingError= 0x100cbd3c0 {Error Domain = MIInstallerErrorDomain Code = 64 "アップグレードのアプリケーション識別子の資格文字列(BBBUUUU.com.bundle.www)はインストールされたアプリケーションのアプリケーションと一致しません-識別子文字列(CCCEEEE.com.bundle.www);アップグレードの拒否。」 UserInfo = {LegacyErrorString = MismatchedApplicationIdentifierEntitlement、FunctionName =-[MIInstallableBundle _validateApplicationIdentifierForNewBundleSigningInfo:error:]、SourceFileLine = 878、NSLocalizedDescription = Upgradeのapplication-identifier資格文字列(BBBUUUU.com.bundle.www)は、インストールされたアプリケーションのapplication-identifier EE-identifier .com.bundle.www);拒否されました
ここでは、アプリの以前のバージョンを削除しました。エラーは、バンドルIDのチームを変更し、以前のバンドルIDでアプリをインストールしたためです。
Xcode
> Window
> Devices
すべてのファイルで大文字と小文字が一致していることを確認してください。大文字と小文字を区別しない傾向があります。
私の場合、問題はデバイスにあり、同じアプリの古いバージョンが同じバンドル識別子でインストールされていたため(applstoreからダウンロード)、エンタープライズディストリビューション経由で新しいバージョンをダウンロードしようとしても何もせず、エラーはまったくありませんでした。デバイスから既存のバージョンを削除すると、問題が解決しました。
XCode
およびbundle identifier
ファイルの.plist
を確認してください
私の場合、FTPフォルダーとその中のファイル(マニフェスト、IPA、イメージ)のファイル許可が正しくないという問題がありました。 775(rwx)があり、所有者/グループが所有者であることを確認します。
デバイスコンソールのエラーは、「iTunes Storeに接続できません」または「bundleIDのアートワークに失敗しました」または「bundleIDのプレースホルダーアートワークの読み込みに失敗しました "。しかし、それはファイルについてだけです。
ここで最初に確認することは、インストールしているデバイスに、インストールしているアプリの正しいOSがあることです。たとえば、アプリがiOS 11用に構築され、デバイスにiOS 10が搭載されている場合、アプリはインストールされますが、このエラー「アプリケーションをダウンロードできません」が表示されます。