web-dev-qa-db-ja.com

エンタープライズアプリのデプロイはiOS 7.1では機能しません

itms-services://のURLを使用して、Enterpriseアカウントを介してアプリを配布します。これはいつもうまくいきました、しかし私達のiPadにiOS 7.1ベータ版をインストールした後それはインストールを拒否します。代わりに、アプリのダウンロード中に何らかの問題が発生したときにiOSが不適切に表示する一般的なCannot connect to example.comメッセージを受け取るだけです。

問題の原因を突き止めるために、SO、Google、7.1のリリースノートには何も見つからなかった。

316
Mark Parnell

アプリをインストールしようとしている間私はiPadをコンピュータに接続し、XCode Organizerを通してコンソールを見ることによって問題を見つけました。エラーは以下のようになります。

Https以外のマニフェストURLを読み込めませんでした: http://example.com/manifest.plist

IOS 7.1では、manifest.plistファイルのURLはHTTPSでなければなりません。ここではHTTPを使用していました。 URLをHTTPSに変更すると、問題が解決しました。

すなわち.

itms-services://?action=download-manifest&url=http://example.com/manifest.plist

になる

itms-services://?action=download-manifest&url=https://example.com/manifest.plist

問題のドメインに対して有効なSSL証明書が必要です。私達はすでにしました、しかし、あなたはそれなしであなたが問題を抱えることを想像するでしょう。

330
Mark Parnell

ingcontiは正しいです。

  1. App.plistをdropboxにアップロードしてください。
  2. https://www.dropbox.com/s/qgknrfngaxazm38/app.plist のように、app.plistの共有リンクを取得します
  3. https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist のように、リンク内のwww.dropbox.comdl.dropboxusercontent.comに置き換えます。
  4. 「?dl = 0t」などのDropbox共有可能リンク上のパラメータをすべて削除します(Carlos Aguirre Tradeco at エンタープライズアプリのデプロイはiOS 7.1 では動作しません)。 。
  5. リンクをdownload.htmlとしてフォーマットした<a href="itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist">INSTALL!!</a>ファイルを作成します
  6. download.htmlをdropboxにアップロードしてください
  7. 繰り返しますが、 https://www.dropbox.com/jp/gnoctp7n9g0l3hx/download.html のようにdownload.htmlの共有リンクを取得し、パラメータをすべて削除します。
  8. https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html のように、2番目のリンクでもwww.dropbox.comdl.dropboxusercontent.comに置き換えます。

今、あなたのデバイスでhttps://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.htmlにアクセスしてください、あなたは以前のようにアプリをインストールすることができます。

何が素晴らしい世界だ!

231
oldman

Mark Parnellの答えに加えて、これを回避する手っ取り早い方法は、マニフェストplistをDropboxに入れてから、Dropboxウェブインターフェースを使って直接httpsリンクを張ることです( 'Share link' - > 'リンク ' - >'ダウンロード 'を取得します。

実際のIPAは、あなたがいつもそれを提供しているところならどこにでも残ることができます。 plmsのURLをitms-servivces URLのクエリに挿入する前にURLエンコードする必要があります(ただし、&を%3Dに置き換えるだけでもうまくいく可能性があります)。

1つの欠点は、インストールダイアログに「dl.dropbox.comが[whatever]をインストールしたい」と表示されることです。

72
Mike

確かに、iOS7.1以降はhttps経由ですべてのOTA展開を実行することが期待されています。これを文書化していないためにアップルを恥じてください。

Dropboxを頼りにしたり、証明書のために現金を引き出すことよりも優れた社内ソリューションを探しているあなたのために、あなたがここでヒント#5に概説されたステップに従うならあなたはソリューションを持つことができます: http ://blog.httpwatch.com/2013/12/12/five-tips-for-using-self-signed-ssl-certificates-with-ios/

その要旨はこれです:

  • 完全に信頼できるデバイスにインストールできる独自のCA認証局証明書を作成します(私は単にそれを電子メールで送ることによってインストールしました)
  • ルート証明書に対してキーとサーのペアを作成し、サーバーにインストールします
  • WebサーバがCA Authorityのルート証明書と一致するキーとサーのペアを使用していることを確認してください。
  • この時点であなたはいつものようにhttps経由であなたのアプリをインストールできるはずです。
  • これらすべてはOSX上で、デフォルトですでにインストールされているopensslを使用して実行できます。

これは、単に自己署名証明書を作成するのと同じではありません。このソリューションでは、あなたもあなた自身の私的認証局として機能しています。あなたのAppleデバイスにインストールされているあなたのルート証明書が信頼された(緑)としてマークされていないなら、何かが間違っています。やり過ぎてください。

これは絶対にうまくいきます。

更新日:2014年3月13日 - このプロセス全体を簡素化する小さなコマンドラインユーティリティを提供しました。あなたはそれを得ることができます: https://github.com/deckarep/EasyCert/releases

36
Ralph Caraveo

私は同じ問題を抱えていました。すでにSSLサーバーを使用していましたが、根本的な問題があるため、単純にリンクをhttpsに変更するだけでは機能しませんでした。

enter image description here 画像はここをクリック

そのハイライトされたビットは、証明書を信頼するオプションを与える必要があることを教えてくれましたが、これはアプリストアであるため、Safariを介して動作するため、回復の提案は表示されません。


既存のソリューションに満足できませんでした。理由は次のとおりです。

  • 一部のオプションでは、サードパーティに依存する必要があります(Dropbox)
  • SSL証明書の代金を支払うつもりはありませんでした。
    • 無料のSSL証明書は一時的なソリューションです。

自己署名ルート認証局を作成し、これを使用してサーバーのSSL証明書を生成することで、最終的に解決策を見つけました。

キーチェーンアクセスとOSXサーバーを使用しましたが、各ステップには他の有効なソリューションがあります


認証局の作成

私が収集したものから、認証局は証明書が本物であることを検証するために使用されます。自分で作成しようとしているので、正確にsecureではありませんが、特定の機関からのすべての証明書を信頼できることを意味します。これらの機関のリストは、実際に信頼されているため、通常ブラウザにデフォルトで含まれています。 (GeoTrust Global CA、Verisignなど)

  • キーチェーンを開き、証明書アシスタントを使用して認証局を作成します

enter image description here

  • 認証局情報を入力します

enter image description here

  • それが必要かどうかはわかりませんが、私は権威を信頼させました。

enter image description here


証明書署名要求の生成

この場合、証明書署名要求はサーバー管理者によって生成されます。単に、「このサイトのこの情報を含む証明書をください」と尋ねるファイルです。

  • 次に、証明書署名リクエストを作成する必要があります(このビットにはOSX Serverの証明書マネージャを使用しました

enter image description here

  • 証明書情報を入力します(ASCII文字のみを含める必要があります!、@ Jasper Bluesに感謝します)

enter image description here

  • 生成CSRをどこかに保存します

enter image description here


証明書を作成する

再び認証局として機能する場合、CSRを送信した人が本物であり、他人のふりをしていないかどうかを判断するのはあなた次第です。実際の当局にはこれを行う独自の方法がありますが、あなたがあなたであることを十分に確信しているので、あなたの検証は非常に確実でなければなりません:)

  • キーチェーンアクセスに戻り、図のように「証明書の作成」オプションを開きます。

enter image description here

  • 保存したCSRを指定のボックスにドラッグします

enter image description here

  • 「このリクエストボタンのデフォルトを上書きさせてください」をクリックします

enter image description here

  • 有効期間を延長したいです。

enter image description here

  • 何らかの理由で、もう一度情報を入力する必要があります

enter image description here

  • この画面で[続行]をクリックします

enter image description here

  • SSLサーバー認証をクリックすることを確認してください、これはいくつかの頭痛の種を引き起こしました。

enter image description here

  • 残りのオプションで[続行]をクリックできます。

  • メールアプリが開き、証明書を送信する機会が与えられます。メールで送信する代わりに、右クリックして保存します。

enter image description here


証明書のインストール

次に、SSLトラフィック用に作成した証明書を使用するようにサーバーを設定する必要があります。

  • 作業中のデバイスがサーバーである場合、証明書が既にインストールされていることがあります。

enter image description here

  • そうでない場合は、保留中の証明書をダブルクリックし、保存したPEMファイルを電子メールから指定されたスペースにドラッグします。 (または、保存していない場合は、キーチェーンからPEMをエクスポートできます。)

enter image description here

  • この新しい証明書を使用するようにサーバーを更新します。新しい証明書が「スティック」せずに元に戻ることがわかった場合は、BOLD ITALIC CAPS

enter image description here


デバイスのセットアップ

アプリをインストールする必要がある各デバイスには、この認証局のコピーが必要です。これにより、その認証局からのSSL証明書を信頼できることがわかります。

  • キーチェーンアクセスに戻り、認証局を.cerとしてエクスポートします

enter image description here

  • 次に、OTAアプリを使用してこのファイルをサーバーに配置すると、ユーザーはこのリンクをクリックして機関証明書をダウンロードできます。証明書をユーザーに直接メールで送信することも有効なオプションです。

enter image description here

  • デバイスに証明書をインストールします。

enter image description here


テスト

  • Plistリンクがhttpsであることを確認してください

    • アプリを試してインストールしてください!これで動作するはずです。認証局は信頼されており、SSL証明書はその認証局からのものです。
34
James Webster

私はそれがうまくいくことを確認することができます、しかしあなたはdropboxにhtmlとplistを置かなければなりません。それは非企業OTAのためにも働きます、すなわち、あなたはあなたの開発者とアプリを共有したいです。チーム。

やった:

a)私のサイトで私はこのリンクでページを作りました:

.. href = "https://dl.dropboxusercontent.com/u//(your DB id)/ipa.html"> MyApp

b)DropBoxで私は別のHTMLページを書きました:

.. https://dl.dropboxusercontent.com/u/(your DB id)/MyApp.plist ">をタップしてMyAppをインストールします

c)Dropboxでplistを動かしましたが、古いサーバーへのPOINTに残しました(httpsなし)

6
ingconti

端末を開いて次のコマンドを実行します。curl -i https://(.ipaファイルパスがplistではありません)

これにより、インストーラがIPAファイルを参照できるかどうかがわかります。 curlコマンドに '-i'を付けて実行すると、完全な応答が表示されます。おそらくIPAファイルではありません。これはインストーラに表示される応答なので、HTTP 200とIPAが返されない場合は、最後に返す必要があります。

ITMSインストーラーはSafariからコンテキストを保存しません。 Safariで安全なポータルに認証された場合、認証クッキーはインストーラに渡されません。つまり、インストーラーは認証なしでアプリを見ることができる必要があり、これが「サーバーに接続できません」という結果になる可能性があります。

3
Gagan_iOS

私は同じ悩みを持ち、上記のようにしました。

  • Plistをdropboxに入れてください。
  • ファイルのダウンロードボタンの上、マウスの右ボタンで文書の画像の下にあるリンクのコピーアクションを選択します。このリンクはすでに https://dl.dropboxusercontent.com/s/xyz123/app.plist?stuff=stuff のように多くのパラメータがあります。
  • パラメータを削除します(httpsと.plistの間のアドレスのみを保持)
  • オンラインでURLエンコードを参照し、それらのリンクの1つを選択し、コピー、貼り付け、実行してから、結果のテキストをコピーしてHTMLにコピーして貼り付け、そこでitms-servicesリンクがあります。ちなみにこのHTMLは2つの異なる場所にありますが、そのうちの1つはipaのある場所です。
  • Plistにipaファイルへの絶対参照が含まれていることを確認してください。

両方のページともios 7.1でiPhoneにアプリをインストールするのに成功しました。

しかし、今ではIOS 7.0x搭載のiPhoneはアプリをインストールできません。

私は新しい質問を作成しました。 アップグレードされたアドホックアプリのデプロイメントは7.1より前のiosでは動作しません

どちらの問題も密接に関連しており、公式の言及がないことによっても裏付けられています。

Class 1のStartSSL証明書と、証明書のサポート(すべての証明書で動作する)を追加する共有Apache設定、および既存の* .plistファイル内のリンクを自動的に変更するコードを使用して問題を処理しました。コピーするには長すぎるので、ここにリンクがあります。 http://cases.azoft.com/how-to-fix-certificate-is-not-valid-error-on-ios- 7 /

2
ice.cube

あなたがAWS S3を持っていることが偶然にも魅力のように働くならば。そうですね。比較的言えば:-)

AWSでアドホック用のバケットを作成し、インデックスファイル(単に空白のindex.htmlファイルにすることもできます)を追加してから、Cyber​​DuckやCodaなどのS3に接続できるクライアントを使用します(ここではAddを選択します)接続ウィンドウを取得するためのサイト)その後、添付のように接続を設定します。

次にXCodeでエンタープライズアドホックを構築し、 https://s3.amazonaws.com/your-bucket-name/your-ad-hoc-folder/your-appを必ず使用してください。アプリケーションURLとしてipa をクリックし、新しいS3バケットディレクトリにアップロードします。

あなたのITMSリンクは一致するべきです、すなわちitms-services://?action =ダウンロードマニフェスト&url = https://s3.amazonaws.com/your-bucket-name/your-ad-hocフォルダー/ your-app.plist

そしてvoilá。

これは一般的なAWS URLの場合のみです。AWSではカスタムURLを試していませんので、いくつか異なることをする必要があるかもしれません。

私はJames Websterの解決策を上に動かそうとすることを決心しました、しかし私はそれをPleskと働かせることができませんでした。

2
Catherine

企業向け配布にDropboxを使用する代わりに、エンタープライズ署名付きアプリの配布にTestFlightを使用できます。

https://www.testflightapp.com/

これは、アドホック開発ビルドとエンタープライズビルドの両方をホスティングおよび配布するための素晴らしいサービスです。

1
Brody Robertson

Dropboxに関する以前の回答に加えて、PLISTファイルのみをDropboxにアップロードする必要があるなど、次のファイルツリーを実装しました。

  1. httpでipaファイルをサーバーにアップロードします(ここでは変更なし)
  2. httpでサーバーにプロビジョニング(.mobileprovision)ファイルをアップロードします(ここでは変更なし)
  3. plistファイルをあなたのdropboxにアップロードしてください(URLは絶対パスなのでplistファイルの中で行うための変更はありません)
  4. リンクをクリップボードにコピーする「リンクをDropboxと共有する」オプションを使用してください。 www.dropbox.comdl.dropboxusercontent.comという部分を変更した後、このリンクをhtmlファイルのitms-servivces URLのクエリにコピーする必要があります。注@Mikeが推奨するようにリンクをURLエンコードしましたが、それを行わずにテストすることはしません。これで、itms-services URLのクエリは次のようになります。itms-services://?action=download-manifest&url=https%3A%2F%2Fdl.dropboxusercontent.com%2Fs%2FYourShortDropboxLink.plist

  5. httpであなたのサーバーにhtmlファイルをアップロードしてください。 htmlファイルには、ipaへのリンクとプロビジョニングファイルの両方が含まれています。

  6. お使いのデバイスから今あなたのHTMLファイルへのアクセスと今ipaは通常のようにOTAによってインストールすることができます。

今から、ipaファイルだけがあなたのベータテスターに​​OTAによって次のアプリバージョンを提供するために変更される必要があります。 Appleがまだセキュリティルールを変えているまで。

私が使っている非常に単純なHTMLファイルの後にここに参加します。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>iPhone app for test</title>
</head>
<body>
<h1>iPhone app for test</h1>
<br/>
<ul>
    <li><a href="http://www.yourdomain.com/with/directories/provision/v.last/yourprovision_adhoc.mobileprovision">
            Install Provisioning File</a></li>
    <li><a href="itms-services://?action=download-manifest&url=https%3A%2F%2Fdl.dropboxusercontent.com%2Fs%2FYourShortDropboxLink.plist">
            Install Application</a></li>
</ul>
</body>
</html>
1
Lisarien

この記事を読んだ後、私はまだ私のアプリをダウンロードすることに問題がありました。問題は自己署名SSL証明書が原因でした。

私はこの問題に対する解決策を見つけました。証明書ファイルの拡張子を「.crt」にしてWebにアップロードし、そのアドレスをモバイルサファリに入力する必要があります。信頼された証明書のリストに自分の証明書を追加することについてシステムから質問されます。この操作の後、あなたはあなたのアドホックアプリをインストールすることができるでしょう。

0
ArturOlszak

普遍的な解決策は、お使いのデバイスをMacに接続して、インストール中に何が起こっているのかを観察することです。私はエラーを得ました:

根本的なエラーでダウンロードマニフェストを読み込めませんでした:エラードメイン= NSURLErrorDomainコード= -1202 "ストアに接続できません" UserInfo = 0x146635d0 {NSLocalizedDescription =ストアに接続できません、NSLocalizedRecoverySuggestion =サーバーに接続しますか?、NSLocalizedFailureReason =安全な接続を確立できませんでした。 日付と時刻の設定を確認してください。、NSErrorFailingURLStringKey = https://myserver.com/app/manifest.plist 、NSUnderlyingError = 0x14678880 "このサーバーの証明書が無効です。機密情報を危険にさらす可能性がある" myserver.com "のふりをしているサーバーに接続している可能性があります。"、NSURLErrorFailingURLPeerTrustErrorKey =、NSErrorFailingURLKey = https://myserver.com/app/manifest.plist }

日付の設定をチェックすることをそのエラーに提案さえありました。何らかの理由で、日付は1970年1月1日でした。正しい日付を設定することで問題は解決しました。

0
beryllium

私たちのチームはhttpsを使ったアドホック配布にdropboxを使っていますが、それでも私たちのアプリはインストールに失敗していました。多くのトラブルシューティングの後、titleフィールドも必須であることがわかりました。このフィールドなしでリンクを送信すると、safariはそのリンクを無視し、ユーザーにインストールを促しませんでした。素早い開発テストのために、xmlのtitleノードをスキップしてそれを追加しないことがありました。これがこの問題を抱えている人に役立つ場合は、.plistに次のノードが追加されていることを確認してください。

      ....
     <string>software</string>
    <key>title</key>
     <string>Your App Name</string>
      ...
0
user2325031