Xcode 7でコンパイルされたiOSアプリを、App Store、開発者プログラムサブ、またはジェイルブレイクなしでリモートで配布しますか?


9

以下の手順に(も参照Appleの開発者向けドキュメントとのBoltClockの答えAppleデベロッパプログラムや脱獄せずにデバイス上のテストiOSアプリを)、私はこのケースでは(iOSアプリをコンパイルすることができた来歴、ないビデオゲームコンソールエミュレータアプリAppleのガイドラインを満たし、AppleのApp Storeで許可されることはありません)Xcode 7で、個人のiCloudアカウントで署名し、iPhoneにサイドロードします(USBでMacに接続し、XcodeメニューでiPhoneを選択します->製品->宛先)、設定->一般->プロファイルでこの署名を使用してアプリを「信頼」することにより、携帯電話での実行を許可します。これにより、icloudアカウントに関連付けられた証明書がデバイスにインストールされます。

これらの手順を無線ダウンロードで複製したいと思います。Xcodeを入手して、iPhoneを持っているがXcodeでMacにアクセスできない兄弟と共有できる実行可能ファイルを作成できますか?

StackExchange Networkは、この質問で述べたように、モバイルデバイス管理を介したAppleのエンタープライズディストリビューションを使用して、iOSアプリベータプログラムで明らかにこのようなことを達成しました。BuildStore(http://builds.io/)もあります。これは、有料のApple Developer Programアカウントに関連付けられた「開発者チーム」にユーザーを追加することで、年間$ 10でこの機能を有効にします(Apple dev docsを参照) 。Xcode 7を使用すると、企業や通常の有料の開発者アカウントがなくても、こうしたことを実行できますか?

更新: Stackszaの助けのおかげで、私はいくつかの進歩を遂げました。

  1. XCodeはアーカイブ(製品->アーカイブ)を作成しますが、有料のADPアカウント層にサブスクライブせずに、アドホック配布のためにアーカイブを.ipaファイルにエクスポートすることはできません。
  2. ただし、コマンドラインのXcodeツール、有料のADPアカウントがなくても.ipa実行可能ファイルを作成するため、問題はありません。次のようなコマンドを使用しますxcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/ProvenanceApple Developerアカウントなしでxcode 6でipaを作成する方法の Khawarの回答を参照してください)。
  3. ただし、このコマンドでは、マニフェストの.plistファイルを指定する必要があります。Over The Air(OTA)iOS IPA File Distribution for Publicでの Razvanの回答はサンプルのmanifest.plistと、SSL Webページでホストする必要があるダウンロードリンクを提供するために必要なハイパーリンク形式の手順が含まれています。SSL URLはアプリのバンドルIDを計算する必要があるかもしれませんが、わかりません。
  4. ただし、上記は、アプリをダウンロードするデバイス用にアプリがプロビジョニングされており、デバイスに開発者証明書が既にインストールされている場合にのみ機能します。たとえば、以前にUSB経由でXcodeに接続されていたデバイスは、無線でアプリをダウンロードできるようになりました。これは素晴らしいことです。これは進歩です。しかし、クリーンなデバイスの場合、エラーが発生しますCould not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.)(デバイスのコンソールで表示され、Xcode-> Window-> Devices、またはApple Configuratorアプリで表示できます)。
  5. アプリがデバイスにプロビジョニングされるために、それは、デバイスのUDID含まれている必要がありますembedded.mobileprovisionファイルを参照してくださいあなたはiOSのAppでプロビジョニングプロファイルを埋め込むかどうどう、IPAのembedded.mobileprovisionにフィールドをチェック自動化しますか?*。ipaファイルの作成に使用されたプロファイルを調べる方法 、およびビルドに含まれているUDIDを確認する方法はありますか?。ただし、このファイルを編集してUDIDを追加することはできません。ただし、アプリのCODESIGNATUREが一致せず、デバイスがエラーを報告するためです。Failed to verify code signature of /private/var/mobile/Library/Caches/com.apple.mobile.installd.staging/temp.7jBjpk‌​/extracted/Payload/Provenance.app : 0xe8008017 (A signed resource has been added, modified, or deleted.)}
  6. わかりましたので、アプリを辞任する必要があります。Xcodeは、codesignこれを実行できるコマンドラインツールを提供します。手順はipaファイルに再署名する方法にありますか?そしてIPA(iPhone)を辞任し、iPhoneアプリを辞任、新バンドルIDを挿入し、アップロードのためのXcodeのオーガナイザーに送信し、手動で新しいプロビジョニングプロファイルでIPAを再署名する方法。開発者証明書を指定する必要がありました。その正確な名前は、キーチェーンアクセスの[証明書]タブにあり、「iPhone Developer:username@mac.com(ABCDEFGHIJ)」のように見えます。その後、コマンドは次のようになりcodesign -f -s "iPhone Developer: username@mac.com (ABCDEFGHIJ)" Payload/Provenance.appます。上記の手順のコマンド例には、というフラグが含まれています--resource-rules、しかし、コンパイルしたアプリでそのようなファイルを見つけられなかったので、そのフラグを削除しました。私はそれが何をするのか、それが必要かどうか疑問に思います。編集: Thomas Kollbachによる優れたブログ投稿「Inside Code Signing」では、--resource-rulesフラグを使用してアプリのどの部分に署名する必要があるかを説明していましたが、iOS8は非推奨であり、アプリ全体に署名する必要があるためです。
  7. アプリにUDIDが追加されて署名されたので、新しいデバイスにダウンロードするCould not install embedded profile: 0xe8008003 (This provisioning profile is malformedとエラーとが表示されA valid provisioning profile for this executable was not foundます。今の問題は、デバイスがまだ開発者証明書をインストールしていないことだと思います。Xcodeを介してサイドローディングする場合、アプリを実行する前に、[設定]-> [全般]-> [プロファイル]でインストール済みの証明書を見つけ、証明書を選択して[信頼]をタップする必要があります。ただし、このオプションはアドホックアプリの無線ダウンロード後に表示されないため、続行する方法がわかりません。デバイスに開発者証明書をインストールする方法が必要だと思います。iOS 8.0.2でのプロビジョニングプロファイルのインストールによると、証明書をデバイスに電子メールで送信するだけで使用できましたが、iOS 8の時点では機能しなくなりました。私は確認しようとしませんでした。開発者証明書をiOSデバイスにリモートでインストールするにはどうすればよいですか?
  8. iPhone開発者証明書をキーチェーンアクセスからエクスポートし、デバイスにメールで送信してみました。デバイスは証明書をインストールできましたが、署名されていないことを示す赤い警告が表示されましたが、Xcode / USBを介して証明書をインストールした場合、そのような警告はありませんでした。Rhythmic Fistmanによると、embedded.mobileprovisionファイルを再暗号化することは可能ですか?、動作するにはAppleがプロファイルに署名する必要があります。これがこだわりのポイントかもしれません。Appleは、有料のADPアカウントを持っている場合にのみ証明書に署名します。
  9. Sean Heberによるプロビジョニングに関するこのブログ投稿は、開発者証明書とプロビジョニングプロファイルの一般的な理論について非常に説明していましたKollbachの場合は両方とも読む必要があります)。次の段落が含まれています。

    これらがすべて機能し、安全である理由は、Appleがポータルでプロビジョニングプロファイルを生成し、それを配信する前に独自の秘密キーでそれらに署名するためです。プロビジョニングプロファイルの署名は、Appleだけができることです。したがって、ダウンロードしたファイルは、無効にすることなく改ざんすることはできません。無効なプロビジョニングプロファイルはiOSで受け入れられないため、Appleは、プロビジョニングプロファイルの署名へのアクセスを、開発者ポータルが最初に構成する許可を与えるものに制限するだけで、開発者がプロ​​ビジョニングできるものとできないものを正確に制御できますplace-プロビジョニングプロファイルは、ジェイルブレイクなしでは使用できない他の素晴らしいオプションをいくつでもサポートできますが。これが、テストデバイスをポータルに登録する必要がある理由です。ポータルなどに証明書を追加します-ポータル内のもの(したがってAppleが任意に制御および制限できるもの)のみを、生成され適切に署名されたプロビジョニングプロファイルに含めることができます。ポータルは、Appleのプロビジョニングポリシーと制限が実際に実施される場所です。

これは、私の質問(有料のADPアカウントなしでアプリを実行できますか)に「いいえ」で確実に答えているようです。この記事はXcode 7より前のものですが、Xcode 7はデバイスのUDIDをAppleポータルに送信し、そのUDIDを含むAppleが署名したプロビジョニングプロファイルを応答として受信するようです。Xcode 7は、デバイスがUSB経由で接続され、Xcodeによって認識された場合にのみこれを行いますが、Appleへの手動のXcode要求を作成できるかどうか疑問に思いますか?これはAppleのもののリバースエンジニアリングに深く入り込んでおり、おそらくToSなどに違反しているので、「いいえ」の答えに満足していると思います。

BuildStoreのaboutページによると、彼らは電子メールで似たようなものを管理しているので、それが可能かもしれません。

コマンドラインからのXcode「Build and Archive」はかなり古い(xcode 3頃)が、私が使っているxcrun代わりに使うことを提案xcodebuildする。


1
これを分割することを検討してください。質問は短くシンプルで理解しやすいものでなければなりません。回答およびブログ投稿への回答方法/プロセスはすべて、回答セクションに記載する必要があります。
bmike

回答:


2

答えはほぼイエスです!

Apple Devサブスクリプションなしで、Fabric.io経由で同じアプリの新しいビルドをデバイスにインストールできました。(iTunesで配布することもできます。ipaをテスターに​​送信すると、iTunes経由でインストールできるはずです。)

唯一の欠点は、デバイスを少なくとも1回 Xcodeに接続する必要があることです。その後、新しいバージョンをリモートでインストールできます。(手動でudidを知る方法を見つけられませんでした)

「不明」デバイスをxcode 7に接続すると、にfix issueボタンがありますTarget general settings。問題を修正すると、Xcodeはこのデバイスを含む新しいプロビジョニングプロファイルを生成します。(で見つけることができます~/Library/MobileDevice/Provisioning Profiles

このプロビジョニングプロファイルを使用して、Fabric.io経由でアプリを配布できるよりも

  1. Fabric.ioへのサインアップ
  2. プロジェクトのセットアップファブリック(ステップバイステップガイドがあります)
  3. xcodeが正しい証明を使用していることを確認してください。それに署名するプロファイル。Automatic私のために働いた。
  4. Xcode>プロジェクト>アーカイブ
  5. ファブリックヘルパーがビルドを検出し、配布できるようになります。

Xcodeを十分に習得していない人、申し訳ありませんが、エラーの少ないガイドを追加する時間はあまりありませんが、この答えが誰かのアイデアに役立つことを願っています。

ヒント:このクイックルックプラグインを使用して ipasとprovの内部を確認します。プロファイル!


1
はい、この答えはテストでわかったことと一致しています。私はまだXcodeのは、新しいデバイスのUDIDとアップルのサーバに送信するメッセージなりすましによる「少なくとも一度のXcodeにデバイスを接続するステップ」という周りを取得することが可能であるかどうかを疑問に思う
ziggurismを

2

私の回答が最初に投稿されてからリリースされたiOS 9.xの一部のバージョンでは、これはもはや可能性すらありません。Appleは、インストールが失敗したときのデバイスログのエラーが示すように、OTAダウンロードを非無料アカウントに制限するようになりました。

これは私のアプリにとっても素晴らしいことなので、これを広範囲にテストしました。

開発者プログラムメンバーシップなしでアプリOTAを配布できますか(費用がかかります)?

IPAを作成して署名し、そのマニフェストファイルを作成できますが、デバイスへのインストールは失敗します。これは、XcodeがそのデバイスのIPAを設定する必要があるためです(UDIDで適切に署名することを想定しています)。新しいデバイスをMacに接続し、そのデバイスでXcodeを介してアプリを実行しようとすると、これが発生することもあります。短い答えはノーです。

この作業を行うにはどうすればよいですか?

Appleで開発者プログラムに登録し(費用がかかります)、デバイスのUDIDをプロファイルに追加し、IPAとマニフェストファイルを作成し、WebサーバーにアップロードしてURLを送信します。

価格の障壁は通常、悪意のあるアプリがウェブ上で配布されるのを防ぐものであるため、それは本当にセキュリティのためです。ダウンロードしたアプリの大部分をApp Storeに保存することは言うまでもありません。

開発者プログラムにサインアップしましたか?今どのように配布しますか?

HTTPS Webサーバー(および独自のルートを作成できるSSL証明書)が必要です。また、開発者プロファイルにUDIDを追加する必要があります(これを行う方法は正確にはわかりません)。Xcodeを使用してIPAを作成する必要があり(製品>アーカイブ>エクスポート>アドホック展開用に保存> Apple IDでサインイン>指示に従う)、PlistとIPAファイルを取得します。これらをサーバーに配置し、サーバー上のHTTPS URLに一致するようにPlistファイルの値を変更します。次に、特別なリンクを使用してPlistマニフェストにリンクすると、ユーザーにアプリのインストールを求めるポップアップが表示されます。すべてがうまくいけば、ユーザーはアプリを入手できます。必要な場合は、独自の更新メソッドをコーディングする必要もあります。

これがこの時点で配布したいアプリである場合は、実際にApp Storeに配置するか、ベータテスト用である場合はTestFlightを使用する方が合理的です。開発者アカウントを持っている場合は、TestFlightを使用して、アプリのテストのためにこれらすべてをスキップできます。必要なのは彼らのメールと、App StoreからTestFlightアプリをインストールすることです。TestFlightは、iTunes Connectから管理できます。


開発者にサインアップしたら、アプリをどのように配布しますか?
ジグリズム

指示で私の投稿を更新しました。
AppleBetas

ありがとう、それが私が探していたものです。有料の開発者アカウントとUDIDのプロビジョニングが必要だと言っていましたが、最初にこの方法を試してみたいと思います。結果を報告します。
ジグリズム

指示に従ってアーカイブを作成しますが、「アプリストアへのアップロード」、「検証」、「エクスポート」ボタンはすべてグレー表示され、「配布にはApple Developer Programへの登録が必要です」というリンクが表示されますWebページにアクセスして、ADPにサインアップします。一方で、あなたが約束したとおりです。アプリの無線(OTA)アドホック配信のみを行いたい場合でも、Apple Developer Programへの99ドルのサブスクリプションが必要なようです。XCode guiは、IPAとプロビジョニングプロファイルを作成しません。
ジグリズム

一方、stackoverflow.com / questions / 26928721 /… では、ユーザーKhawarはxcodebuild-exportProvisioningProfileフラグを使用すると、.ipaアーカイブを作成し、アプリに署名してプロビジョニングするコマンドラインを使用して、ADPサブなしで実行できると主張しています。(Pankaj Rathorによるコメントを参照)。
ジグリズム

1

基本的に、誰かがアプリに署名する必要があります。IPAファイルを取得できますが、任意のデバイスでは実行されません。それに集中すれば、Xcodeを使用して各人の手間を我慢するか、アプリに署名するためにAppleにお金を払うことが理にかなっているかどうかをすぐに判断できます。

古いApple IDでiOS 9の開発者以外の署名に依存している場合、テスターはすべて、アプリを実行するためにApple IDでサインインする必要があります。

Appleがアカウントを処理し、1年間のデベロッパーアカウントを支払うことで署名するために支払うことができます。次に、メールを送信したり、任意のサーバーにアプリをポップしたり、TestFlightを使用したり、Apple IDをアプリのテスター/ユーザーに配布する以外の方法で簡単に使用したりできます。

Xcodeを持っている兄弟にはいつでもソースコードを送信できますが、兄弟がアプリをインストールして署名するためのMacを持たないことのポイントであると述べました。

刑務所の破壊は、Appleの証明書チェーンを偽造するよりも簡単ですが、お勧めしません。


開発者以外が署名したアプリを実行するために、テスターは私のApple IDでどこにサインインする必要がありますか?
ジグリズム

Xcodeでは、Macを使用するのが最も簡単です。私は...それはXcodeのに得ることができない場合は、それらがアプリケーションをロードするためにあなたに自分の携帯電話を送信する必要があるだろう
bmikeの

ええ、USB経由でのXcodeからのインストールは素晴らしいです。私の質問は、リモート配布/インストールの可能性についてでした。StackExchangeは、ベータアプリ用にそれを行いました。私もやりたいです。
ジグリズム

@ziggurism SEは、エンタープライズ証明書の代金を支払いました。それを実現するには、少し法的な書類が必要です。さらに年間数百ドル。TestFlightは安価なオプションであり、グレーの領域が少なくなります。SEは、彼らが使用する証明書のライセンスに基づいて「本を読んで、」そうではありませんでしたが、私は弁護士...ないんだけど何
bmike
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.