TestFlightの魔法、または構成プロファイルとURLスキームテクノロジーの詳細

TestFlightに関するHabrの記事( ここここ )が既にありましたが、それらは主にアセンブリプロセスでのその使用と統合/自動化を扱いました。 そして、私はいつもこれが内部からどのように機能するのか疑問に思っていました:

•デバイス識別子はどのように収集されますか? (UDIDを収集する理由が分からない場合は、上記のリンクに従ってください)

•リンクをクリックすると、アプリケーションはどのようにインストールされますか?

•ホーム画面にアイコンはどのように作成されますか?

•これらはすべてハッキングまたは法的手段ですか?



ブラックジャックなどを使用してTestFlightを構築する場合、または上記の1つがどのように行われるかに関心がある場合は、catをリクエストします。







読者は既にTestFlightサービスとiOS開発者の苦痛、つまりiOSデバイスの識別子を収集する必要性に精通していることを前提としています。 Testflightは、構成プロファイルをインストールすることにより、UDIDの取得を非常に簡単にします。



プロファイルは通常のxmlファイルであり、「。mobileconfig」権限とAppleのドキュメントで指定された形式のおかげで、アクションのガイドとして処理されます。つまり、オペレーティングシステムによって、適用する必要がある設定の説明として解釈されます。 このテクノロジーの主な目的は、主に企業環境で使用される多数のiOSデバイスを自動的に構成することです。



構成プロファイルには、ペイロードと呼ばれるさまざまなブロックが含まれる場合があります。 各ブロックは特定の機能です。 構成プロファイルを使用すると、次のことができます。

•パスワードポリシーを確立する

•デバイスまたはサービスの使用を禁止する

•ネットワーク、VPNアクセスを構成する

•IMAP、Exchange、LDAP、CalDAVアカウントを構成する

•ホーム画面でアイコンを作成する

•証明書をインストールする



しかし、これらすべてがUDIDの取得にどのように役立つのでしょうか?



設定を設定しない特別なペイロードがあります。 これはプロファイルサービスペイロードと呼ばれ、iOSデバイスを企業ランクに組み込むマルチステージプロセス(Over-The-Air登録および構成)で使用されます。 そのようなシステムを完全に構築するには、シンプルなサポートを備えたサーバーが必要です

証明書登録プロトコル(SCEP)-Testflightおよび同様のサービスはまさにそれを使用します。 SCEPプロトコルをサポートするために、有償(Microsoftから)およびOpenSCEPなどの無料のオープンソースソリューションがあります。



しかし、判明したように、デバイスUDIDを取得する簡単な方法があります。デバイスを企業環境に取り込むプロセス全体の最初のステップのみを実装する方法です。 この手順は、デバイスから情報を要求することです。そのため、UDID、IMEI、ICCID、デバイスのMACアドレス、モデル(iPad3,1またはiPhone4,1など)、およびiOSのバージョンを取得できます。 この最初のステップのみを実装するには、通常のWebサーバーで十分です。



したがって、構成プロファイルは次のようになります。

<?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>PayloadContent</key> <dict> <key>URL</key> <string>http://SERVER_URL/enroll.php</string> <key>DeviceAttributes</key> <array> <string>UDID</string> <string>IMEI</string> <string>VERSION</string> <string>PRODUCT</string> </array> </dict> <key>PayloadOrganization</key> <string>parallels.com</string> <key>PayloadDisplayName</key> <string>Profile Service</string> <key>PayloadVersion</key> <integer>1</integer> <key>PayloadUUID</key> ...
      
      







ユーザーデバイス情報でインストールする場合

POSTメソッドを使用して、指定されたSERVER_URLに送信されます。 SCEPプロトコルを介して相互作用を実装しているが、送信された情報に答える必要がある場合

特別なSCEPペイロード。 これについては、 Appleのドキュメントを参照してください 。 Testflightの場合のプロファイルと証明書の交換の最後のステップは、Webクリップペイロードを使用した構成プロファイルです。これにより、iOSデバイスのホーム画面にサービスへのリンクが表示されます。

そして、これは、一般的に言えば、デスクトップアイコンを作成する唯一のソフトウェア方法です。



企業インフラストラクチャを扱う場合、すべての設定を含む構成プロファイルが最後にデバイスに送信されます。 このプロファイルは、ユーザーに追加の質問をすることなく、単独でインストールされます。

パスがサーバーにSCEPを実装しない場合、デバイスから受信した情報に応答する必要はありません。 確かに、プロファイルをインストールした後、ユーザーは不快なメッセージを受け取ることに注意する必要があります。







Apple Developers Forumのブランチの1つで提案されているように、スクリプトハンドラにリダイレクトをインストールすることにより、このようなイベントの発生を回避できます。 そして、ここでは、iOSデバイスからの識別情報の受信は、一般に完全と見なすことができます。



次に、TestFlightがアプリケーションをインストールする方法を見てみましょう。

各テスターは、アプリケーションの新しいバージョンを作成した後に、この「幸福の手紙」を受け取ります。







[インストール]ボタンをクリックすると、次の形式のリンクが表示されます。

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







•「itms-services」とは、カスタムURLスキームの使用を意味します。これは、アプリケーションの相互作用を可能にする技術であり、起動パラメーターを渡すことで、他の1つを呼び出します。 どのアプリケーションがそのようなリンクを処理するかは明確ではありません。同様のリンクについて知られています。「itms」-iTunesで処理、「itms-books」-iBooks、「itms-apps」-App Store。 高い確率で、これはアプリケーションのインストールを担当する特別なシステムアプリケーションです。 しかし、システムアプリケーションがカスタムURLを持つことができるだけでなく、どのアプリケーションもInfo.plistで指定することで独自のURLを登録できます。 興味のあるアプリケーションのURLを見つけて、特別なhandleopenurl.comサービスを使用してアプリケーションのURLを公開できます。

•「url = http://url/app-manifest.plist」は、アプリケーションに関する最小限のデータセットを保存するマニフェストを示します。名前、カテゴリ、およびアプリケーションバイナリとそのアイコンをダウンロードする方向。 このようなマニフェストは、「エンタープライズ」配布タイプを選択した場合、Xcodeを使用して実行できます。

•「action = download-manifest」-呼び出されたアプリケーションで実行する必要があるアクション。明らかに、上記のマニフェストをダウンロードする必要があることを意味します。



ご覧のとおり、Testflightのようなシステムを実装するのに特別な困難はありませんが、Parallelsでは、内部サービスを実装する重大な理由は見当たらないため、この既製のソリューションを引き続き使用します。



この記事は、Yandex Mobile Camp Spbでの講演に基づいて作成されました。



All Articles