itms
URLを介して配布しているエンタープライズアプリがあります。
itms-services://?action=download-manifest&url=itms-services://?action=download-manifest&url=https://$MY_PLIST_URL.plist
IOS 7では、ダウンロードとアップデートの両方が正常に機能します。ただし、iOS 8では、次のエラーが表示されます。
LoadExternalDownloadManifestOperation: Ignore manifest download, already have bundleID: com.mycom.MyApp
私のplistには、
<key>bundle-identifier</key>
<string>com.mycom.MyApp</string>
<key>bundle-version</key>
<string>0.2.2</string>
iOS 8のアプリでは、バージョン0.2.1を実行しています
アプリの配布でもこの問題が発生しました。この問題は、ダウンロード配布に使用する.plist内のバンドル識別子を「偽造」し、ipaバンドル識別子を同じに保つことで修正できました。
たとえば、plistで:
<key>bundle-identifier</key>
<string>com.mycom.MyApp</string>
<key>bundle-version</key>
<string>0.2.2</string>
com.mycom.MyAppをcom.mycom.MyApp.ios8fixに変更します
アプリは新しいアプリアイコンを使用してインストールされ、インストール後に表示されなくなります。
既にアプリをインストールしている場合は、インストール中に新しいアプリのアイコンが表示されます。インストール後、このアイコンは消えますが、既存のバージョンのアプリは更新されます。クリーンインストールでは、インストールアイコンが消え、インストールされたアプリケーションアイコンが所定の位置に表示されます。
IOS 8はバンドル識別子をキャッシュしており、要求されたインストールとこれらのキャッシュされたインストールを比較しているようです。ほとんどの場合、インストールを求めるポップアップが表示されますが、何も起こりません。
Seanがすでに気づいたように、これはxCode 6 GMと公式のiOS 8バージョンで表示されます。以前にアプリケーションをインストールしたことがないデバイスでも、アプリをインストールするのに問題はありません。
マニフェストやその他のトリックに触れる必要はありません(plist
が自動生成されるXcodeサーバーに最適です):
これにより、デバイスのキャッシュがリセットされ、通常どおりアプリをインストールできます。
私は同じ問題を抱えています。私はそれを再現しました:
1)iOS 7からiOS 8 GMへのアップグレード中にアプリケーションをインストールする
2)iOS 8で削除する
3)itms-servicesを介してインストールしよう:同じバンドル名
サーバーplist(アプリケーションInfo.plistではない)でbundle-identifierを変更しようとすると、機能しました(アプリケーションはダウンロードされ、「シャドウ」アイコンは残りませんでした)。しかし、それはAppleバグのように見えます。
受け入れられたソリューションはiOS9では動作しなくなりました。
私の理解では、Appleは、アドホックバイナリがストックアプリまたはApp Storeからダウンロードしたアプリを置き換えることを防ぐことにより、重大なiOSセキュリティホールを閉じたということです。背景については次の記事を参照してください(CVE-2015-3722/3725およびCVE-2015-3725):
https://www.fireeye.com/blog/threat-research/2015/06/three_new_masqueatt.html
セキュリティへの影響を考慮すると、将来のIOSバージョンでこの動作が変わるとは思わないでしょう。代替オプションは次のようです:
this answer および this answer をご覧ください。
ハッキングなしでこの問題を修正できます。iOS8では、マニフェスト.plist
ファイルのassets
キーにdisplay-image
およびfull-size-image
キーを含める必要があります。これらは、エンタープライズおよび追加の展開用にアーカイブを保存するときにXcode 5で使用できましたが、必須ではありませんでした。
install-manifet.plist ファイルのテンプレートを使用してgithubにGistを作成しました。
Gilが言ったことは正しいようですが、より具体的には、server.plistのbundle-version文字列をインクリメントする必要があることもわかりました。
<key>bundle-version</key>
<string>3.2.2</string>
これにより、少なくともOTAインストールを実行できます。
(申し訳ありません...コメントに追加しますが、私はn00bが多すぎます。)
Plistのバンドル識別子を変更することで問題が解決しました。
通常、itmsリンクをタップすると、アイコンのインストールを示すデスクトップが表示されます。ただし、私のiOS 8.0デバイスでは、itmsリンクをタップした後、インストールページに変更されませんが、インストールは既に動作しています。
これは、iOS8 Beta5で最初に見つかったバグです。 AppleシードのGMおよび公式のiOS8.0バージョンではまだ修正されていません。より多くの議論を見つけることができました こちら
自分でテストされている現在の回避策:
これは極端ですが、バンドルIDを変更できない場合(変更できません)、iTunesを使用してiPhoneを最新のiOS 8に復元し、バックアップから復元すると問題が修正されます。
IOS 10ベータ1でも同じ問題があります。
12月31日19:01:32 iphone-6s itunesstored [98]:LoadExternalDownloadManifestOperation:マニフェストダウンロードを無視、すでにbundleID:com。***************。ios with phase:SSDownloadPhaseWaiting
ここで理解できないことの1つは、XCodeデバイスログの日付が12月31日であるということですが、デバイスには正しい日付と時刻が設定されています。
更新: HockeyAppのユーザーは、WWDCでこの問題についてAppleに通知し、次のシードで修正が行われるはずです。
インターネットに完全にアクセスできることを確認してください。
OTAのインストールとIOS8で同じ問題に直面していました。私は企業のプロキシの背後にいるので、手動のプロキシ設定(IOS7では不要)を設定して問題を解決するまで、上記のソリューションは機能しませんでした。
8.1を実行しているデバイスでこの問題が発生しましたが、デバイスを8.3にアップグレードすると問題が解決しました。そのため、8.3 ....にはバグが存在しないか、アップグレードの動作によってキャッシュされたデータが消去されました。
ビルドスクリプトを使用してiOSアプリをビルドし、以前に--signフラグを指定してPackageApplicationを使用していた場合、問題が発生している可能性があります。 10.10でビルドし、それを削除すると、すべてのiOSアプリが再インストールされると、-signフラグは機能しなくなります。