社内アプリがいくつかあり、iOS 9より前では、バージョン比較後にアプリが「itms-services://」のようなリンクを開き、新しいバージョンのアプリがダウンロードされてインストールされます。
しかし、iOS 9でテストした後、アプリがリンク「itms-services://」リンクを開くことができず、「LaunchServices:エラー:URLスキームitms-servicesの登録済みハンドラーがありません」などのエラーが発生することがわかりました。
アプリの更新に使用したコード:
let downloadUrl = NSURL(string: url)
UIApplication.sharedApplication().openURL(downloadUrl!)
「itms-services」、「itms-services://」、および完全なURLをplistファイルの「LSApplicationQueriesSchemes」に配置することをテストしました。しかし、それでも機能しません。
私はあなたと同じ問題に直面しました。そして、アプリが最初にサファリでhtml URLを開く方法で、この問題を解決します。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http:// xx.xx.xx.xx/xx.html"]];
htmlurlはurlにリダイレクトします--- itms-services://?action = download-manifest&url = https://xx.xx.xx.xx/xx/xx.plist アドレス。この方法でアプリを更新できますが、更新プロセスでは、最初にSafariを開いてから、App Storeを開くように警告する必要があります。開くボタンを選択すると、アプリをインストールするかどうかが警告され、最後にインストールボタンを確認します。アプリは自動的にインストールされます。
次のような私のhtmlコンテンツ:
<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=utf-8" />
<script type="text/javascript">
function load()
{
window.location ="itms-services://?action=download-manifest&url=https://xxx/xx/xx.plist";
}
</script>
</head>
<body onload = "load()">
IOS 9では、アプリがInfo.plistのLSApplicationQueriesSchemesキー(文字列の配列)の下でクエリを実行するURLスキームをホワイトリストに登録する必要があります。
Info.plistに含まれているスキームを使用すると、すべてが以前と同じように機能します。 iOS 9に対してリンクする場合、50の異なるスキームに制限されず、Info.plistで必要なものを宣言する必要があります。含めることができるスキームの数に制限はないようですが、メカニズムを悪用していると思われる場合は、AppStoreのレビューチームからの質問を期待します。
このメカニズムはcanOpenURLにのみ適用され、openURLには適用されないことに注意してください。 openURLで開くことができるようにするために、Info.plistにリストされているスキームを持っている必要はありません。
詳細情報: http://useyourloaf.com/blog/querying-url-schemes-with-canopenurl.html
それがあなたのケースかどうかはわかりませんが、アプリをダウンロードするにはhttpsのURLが必要です。ウェブサイトにSSLがないため、.plistをドロップボックスにアップロードし、itms-servicesリンクの共有リンクを使用します。 .plistはサーバーにリダイレクトし、問題はありません