
最近、マイクロソフトによるXamarinの購入について知られるようになりました。 このニュースは、開発者コミュニティだけでなく、企業クライアントの間でも気付かれることはありませんでした。 この点で、Microsoftフルスタック環境にモバイルソリューションを統合する必要がある場合、ITホテルまたは会社全体の能力の劇的な拡大を必要としないストーリーがより重要になります。 このようなシナリオでは、SharePoint、ASP.NET MVC、WebAPIサービス、およびAzureで構成されるパズルにうまく適合するコンポーネントとしてXamarinを選択することが簡潔になります。
この記事では、リストされたマイクロソフトテクノロジスタックを使用して、主にプロトタイピング段階で企業内にモバイルアプリケーションを配布する方法について説明します。
この記事で説明されている方法は、.NET環境のバイアスにもかかわらず、Apache Cordovaでもクラシックネイティブでも、他の開発ツールを使用して記述されたiOSアプリケーションに適用できます。
はじめに
以前の
記事では、例としてOS X Serverを使用して、MDMソリューションを介して企業のiOSアプリケーションを配布する方法を検討しました。 この記事では、Microsoftの技術スタックを使用して、参照によってアプリケーションを配布する方法に焦点を当てます。
この記事がマイクロソフトのツールに焦点を当てているのはなぜですか? 答えは表面にあります。 会社が大規模な場合、ほとんどの場合、SharePointを扱っています。つまり、.NETの開発経験のある従業員を意味します。 ただし、他のテクノロジー(PHPなど)でも同じことができます。
通常、リンク配布方法は、ユーザーの数が非常に限られており、アプリケーションを自動的に更新する必要がない場合、またはプロトタイプの開発中に社内にテスターまたはプロジェクトキュレーターのグループがいる場合に選択されます。
ご注意Microsoftには、System Center Configuration ManagerおよびWindows Intuneの上に構築されたMDMソリューションもあります。 リンクを
1回 、
2 回 、
3 回クリックすることで、それらに関する詳細情報を取得できます。
問題の声明
私たちの前に設定されているタスクと、それらの実装に必要なリソースを決めましょう。
- アプリケーションは、インストール可能なファイルとして配布する必要があります。
- このソリューションは、サードパーティの専門サービスを使用せずに実装する必要があります。
- アプリケーションを作成するには、標準のApple Developer Programアカウントが使用されます。
選択した方法を使用する前に考慮する必要がある欠点をリストします。
- ほとんどの場合、アプリケーションの新しいバージョンをユーザーに通知するために電子メールが使用されます。
- 重大なエラーが検出された場合、またはセキュリティの問題が発生した場合に、アプリケーションを自動的に更新するツールはありません。
- およそ100ユーザーに制限されています。
- 新しいユーザーを追加するたびに、一連のアクションを手動で実行し、アプリケーションを再構築する必要があります。
新しいユーザー(iOSデバイス)を追加するときのアクションの簡単なシーケンスは次のとおりです。
- 追加するデバイスのUDIDを取得します。
- Apple Webサイトの開発者コンソールにデバイスUDIDを追加します。
- 目的のアプリケーションのプロビジョニングプロファイルにデバイスを追加します。
- 変更されたプロビジョニングプロファイルでアプリケーションを再構築します。
- アプリケーションの新しいバージョンをWebリソースに投稿します。
iTunesまたはApple Configurator 2を使用して、デバイスのUDIDを取得できます。ただし、このプロセスを自動化するのが自然な望みです。 これは、拡張子* .mobileconfigを持ち、XML構造を持つファイルであるプロファイル(
iOS Configuration Profile )の助けを借りて可能です。
要するに、それは次のように機能します:* .mobileconfigファイルで、iOSデバイスからリクエストするパラメーター(この場合はUDID)、およびフィールドが入力されたiOSデバイスが応答XMLファイルを送信する戻りURLを指定します。
直接リンクを介してアプリケーションをダウンロードおよびインストールする機能を提供することには、この記事で検討する多くの機能もあります。 その1つは、HTTPSを使用する必要があることです。
概念図と作業計画
このメソッドを使用するときにアクションの範囲を把握できるように、2つのスキームを用意しました。
Apple Developer Programアカウントを使用した参照によるアプリの配布 Apple Developer Enterprise Programアカウントを使用した参照によるアプリの配布 ご覧のとおり、標準のApple Developer Programアカウントを使用すると、多くのオーバーヘッドが発生します。 それでも、この特定のオプションを最も難しいものと考えます。
ストーリーを3つのセクションに分けたので、正しい順序で情報を把握するのに便利でした。 それらを「ステップ」と呼びます。 それでは、私たちがしなければならないことを簡単に見てみましょう。
ステップ1:ユーザーのiOSデバイスのUDIDを取得します。
- 必要なフィールドを示すプロファイル* .mobileconfigを作成します。
- ダウンロード可能な* .mobileconfigプロファイルをWebサービスに投稿します。
- ユーザー: iPhoneのSafariを介してhtmlページに投稿されたプロファイルをダウンロードします。
- ユーザー:プロファイルをインストールすると、「Thank you!」Htmlページが表示されます。
- ユーザーのUDIDはサーバーに保存されます。その後、管理者はこのUDIDをiOS開発者アカウントに手動で追加します。
ステップ2:リンクからアプリケーションをインストールします。
- Xcodeで* .ipa-applicationパッケージをエクスポートし、写真を準備します。
- パッケージをエクスポートするときは、サーバー上のパッケージへのパスを指定します。
- サーバー上で共有する:manifest.plist、myApp.ipa、image.57x57.png、image.512x512.jpg-たとえば、1つのapp-filesフォルダー。
- サーバーがファイルをダウンロードできるようにします:.jpg .png .plist .ipa;
- HTMLページで、manifest.plistへの特別なリンクをitms-services形式で提供します://?Action = download-manifest;
- Webリソースには、有効なSSL証明書を使用してhttps経由でアクセスできる必要があります。
- ユーザーは特別なリンクをたどり、アプリケーションをインストールします。
ステップ3: Windows Server 2012に基づく企業環境での展開(有効なSSL証明書を持つ外部サイトが利用できない場合、ステップ2への変更が含まれます):
- DNSサーバーのインストールと構成。
- IISをインストールして構成します。
- SSL証明書の作成とインストール。
- 配布用のサイトのセットアップと構築。
ご注意この分野の表面的な知識を持っている人でも、説明されたソリューションを設定するのが困難にならないように、すべての段階と中間ステップの詳細な説明を意図的に提供します。 したがって、寛大にしてください。 この記事は「教育資料」としてマークされています。 ありがとう
ステップ1:ユーザーのiOSデバイスのUDIDを取得する
iOSデバイスのUDIDを取得するには、ASP.NET WebAPI 2を使用します。これは、すぐに提供される便利なソリューションです。
- MVCコントローラーを介したユーザーとの対話。
- APIコントローラーを介してiOSデバイスからXMLファイルを受信および処理します。
- 登録済みUDIDのプロファイルファイルとデータベースの保存。
ステップ 1および2のサイトとして、Microsoft Azureを使用します。 デフォルトでは、有効なSSL証明書が* .azurewebsites.netサイトに提供されます。これは
ステップ 2で必要になります。もちろん、企業で使用する場合は、少なくとも最も単純な認証も提供する必要があります。 ただし、これはこの記事の範囲をはるかに超えています。
* .mobileconfigファイルを作成し、WebAPIプロジェクト「Downloads / corp-apps.mobileconfig」のディレクトリに配置します。
* .Mobileconfigファイルの内容<?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://iphone-udid.azurewebsites.net/api/xml</string> <key>DeviceAttributes</key> <array> <string>UDID</string> <string>IMEI</string> <string>ICCID</string> <string>VERSION</string> <string>PRODUCT</string> </array> </dict> <key>PayloadOrganization</key> <string>Corp Apps</string> <key>PayloadDisplayName</key> <string>CorpApps</string> <key>PayloadVersion</key> <integer>1</integer> <key>PayloadUUID</key> <string>B43A078F-E0E2-4F52-B1E6-C03AD7032EDF</string> <key>PayloadIdentifier</key> <string>com.CorpApps.profile-service</string> <key>PayloadDescription</key> <string>This temporary profile will be used to find and display your current device's UDID.</string> <key>PayloadType</key> <string>Profile Service</string> </dict> </plist>
このファイルでは、2つのフィールドに注意する必要があります。
URLは、iOSデバイスから送信されたXMLファイルを処理するAPIコントローラーのアドレスです。
私の場合、Azureでホストされているサイトへのリンクを提供します。/api/xmlはWebAPIコントローラーのPOSTメソッドです。
http://iphone-udid.azurewebsites.net/api/xml
PayloadUUID-このフィールドを記述する最も簡単な方法は一意のGUIDであり、同じiOSデバイス内で繰り返さないでください。
一意のUUID(PayloadUUID)は、uuidgenユーティリティを使用してOS Xで生成できます。
uuidgenユーティリティの使用 os-x-server:~ zanael$ uuidgen -- generate a universally unique identifier usage: uuidgen [-hdr] -hdr emit result in form suitable for coping into a header os-x-server:~ zanael$ uuidgen B43A078F-E0E2-4F52-B1E6-C03AD7032EDF os-x-server:~ zanael$
登録済みのUDIDを保存するXMLファイルを作成します。 これをudids.xmlと呼び、WebAPIプロジェクト「App_Data / udids.xml」のディレクトリに配置します。
登録済みのUDIDを保存するためのXMLファイル構造 <?xml version="1.0" encoding="utf-8"?> <udids> <iPhone> <TimeAdded></TimeAdded> <UDID></UDID> </iPhone> </udids>
プロファイルファイルをWeb.configにダウンロードするためのアクセス許可を追加します。
Web.configに必要な変更 <?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <staticContent> <mimeMap fileExtension=".mobileconfig" mimeType="application/x-apple-aspen-config" /> </staticContent> </system.webServer> </configuration>
モデルを追加して、Modelsフォルダーに登録済みUDIDに関する情報を保存します。
ファイルiPhoneUDID.cs namespace iPhoneUDID.Models { public class iPhoneUDID { public string TimeAdded { get; set; } public string UDID { get; set; } } }
ControllersフォルダーにHomeController(MVCコントローラー)を作成し、それにメソッドを追加して、XMLから登録されたUDIDのリストを表示します。
ファイルHomeController.cs using System; using System.Collections.Generic; using System.Web.Mvc; using System.Xml.Linq; namespace iPhoneUDID.Controllers { public class HomeController : Controller { [HttpGet] public ActionResult Index() { ViewBag.Title = "Home Page"; XDocument databaseXML; try { databaseXML = XDocument.Load(System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/udids.xml")); } catch (Exception exp) { databaseXML = new XDocument(new XElement("udids")); } List<Models.iPhoneUDID> UDIDs = new List<Models.iPhoneUDID>(); XElement iPhones = databaseXML.Element("udids"); foreach (XElement e in iPhones.Elements("iPhone")) { UDIDs.Add(new Models.iPhoneUDID { TimeAdded = e.Element("TimeAdded").Value, UDID = e.Element("UDID").Value }); } ViewBag.UDIDs = UDIDs; return View(); } } }
HomeControllerのビュー(Index.cshtml)を追加します。これはユーザーを歓迎し、UDIDの登録を要求します。
Take UDIDボタンをクリックすると、ユーザーがプロファイルをダウンロードし、iOSデバイスは必要なパラメーターを理解し、XML形式の* .mobileconfigファイルで指定したURLにそれらを送信します。
ファイル/Views/Home/Index.cshtml <div class="jumbotron"> <h1>Get your UDID</h1> <p class="lead">Please, reach this page in Mobile Safari from your iPhone.</p> <p><a href="/downloads/corp-apps.mobileconfig" class="btn btn-primary btn-lg">Take UDID</a></p> </div> <div class="row"> <p> @{ foreach (iPhoneUDID.Models.iPhoneUDID item in ViewBag.UDIDs) { <h5>TimeAdded: @item.TimeAdded, UDID: @item.UDID</h5> } } </p> </div> <div class="row"> @Html.ActionLink("Clear UDIDs list", "ClearHistory", "Home", null, new { @class = "btn btn-primary btn-large" }) </div>
ControllersフォルダーにXmlController(WebApi2コントローラー)を作成します。これにより、iOSデバイスからXMLファイルをキャッチし、そこから受信したUDIDをローカルXMLに保存します。
Windowsマシンを使用しているため、ファイルの2番目の部分は異なるエンコードになります。 これは、* .plist変換ライブラリを使用して修正できます。 これらはGitHubで見つけることができますが、UDIDのみが必要なので、行の特定の位置から基本要素を取得できます。 これにより、不必要な中毒をドラッグできなくなります。
XmlController.csファイル using System; using System.Net; using System.Net.Http; using System.Web.Http; using System.Xml.Linq; namespace iPhoneUDID.Controllers { public class XmlController : ApiController { [HttpPost] public HttpResponseMessage PostRawXMLMessage(HttpRequestMessage request) { string plist = request.Content.ReadAsStringAsync().Result; int begin = plist.IndexOf("UDID") + 20; int end = plist.IndexOf("<", begin); string UDID = plist.Substring(begin, end - begin); XDocument databaseXML; try { databaseXML = XDocument.Load(System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/udids.xml")); } catch (Exception exp) { databaseXML = new XDocument(new XElement("udids")); } databaseXML.Element("udids").Add( new XElement("iPhone", new XElement("TimeAdded", DateTime.Now.ToLongTimeString() + " - " + DateTime.Now.ToShortDateString()), new XElement("UDID", UDID))); databaseXML.Save(System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/udids.xml")); HttpResponseMessage response = request.CreateResponse(HttpStatusCode.MovedPermanently); response.Headers.Add("Location", "/Thanks"); return response; } } }
ユーザーがUDIDを受信した後にリダイレクトされるThanksController(MVCコントローラー)を作成します。
ThanksController.csファイル using System.Web.Mvc; namespace iPhoneUDID.Controllers { public class ThanksController : Controller { [HttpGet] public ActionResult Index() { ViewBag.Title = "Thanks Page"; return View(); } } }
ThanksControllerのビュー(Index.cshtml)を追加します。
ファイル/Views/Thanks/Index.cshtml <div class="jumbotron"> <h1>Thanks for Attending!</h1> </div>
受信したUDIDでローカルXMLをクリアするには、ClearHistoryメソッドをHomeController(MVCコントローラー)に追加します。
ファイルHomeController.cs [HttpGet] public ActionResult ClearHistory() { ViewBag.Title = "Home Page"; XDocument databaseXML = new XDocument(new XElement("udids")); databaseXML.Save(Server.MapPath("/App_Data/udids.xml")); ViewBag.UDIDs = new List<Models.iPhoneUDID>(); return View("Index"); }
これが一般的なレイアウト(_Layout.cshtml)の外観です-テンプレートの標準です。
_Layout.cshtmlファイル <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>@ViewBag.Title</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <body> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> @Html.ActionLink(" ", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li>@Html.ActionLink(" ", "Index", "Home", new { area = "" }, null)</li> <li>@Html.ActionLink("API", "Index", "Help", new { area = "" }, null)</li> </ul> </div> </div> </div> <div class="container body-content"> @RenderBody() <hr /> <footer> <p>© @DateTime.Now.Year – ASP.NET</p> </footer> </div> @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @RenderSection("scripts", required: false) </body> </html>
これで、ユーザーが必要とするのは、サイトにアクセスしていくつかのボタンを押すだけです。
その後、サイトにそのUDIDが表示されます。
最後に、iOSデバイスのUDIDを手に入れました。これを開発者アカウントに登録する必要があります。
メンバーセンターセクションのApple開発者
サイトにアクセスします。
iOSデバイスのUDIDを追加します。
App IDを作成していない場合は、作成します。
アプリケーションのプロビジョニングプロファイルを作成します。
ステップ2:リンク経由でアプリケーションをインストールする
iOSデバイスのUDIDを受け取って開発者アカウントに追加し、プロビジョニングプロファイルを変更した後、アプリケーションのインストールに必要なファイルが配置されるWebリソースをユーザーに提供する必要があります。 このようなリソースとして、Microsoft Azureを使用します。これは、デフォルトで* .azurewebsites.netサイトに有効なSSL証明書を提供します。 サイトの名前として、次を選択します。
https://corp-apps.azurewebsites.net
ご注意参照によるアプリケーションのインストールは、有効なSSL証明書でHTTPSを使用する場合にのみ機能します。
Webサイトを作成するプロジェクトとして、コントローラーなしで最も単純なテンプレートを選択できます。 必要なのは、HTMLページといくつかの追加ファイルをダウンロードする機能だけです。
これで、必要なファイルの準備を開始できます。 これを行うには、Xcodeを使用してアプリケーションパッケージをエクスポートします。
アプリケーションの配布に必要な情報を入力します。 ファイル拡張子に注意してください。
- タイトル:
myapp
- アプリのURL:
https://corp-apps.azurewebsites.net/app-files/myApp.ipa
- 表示画像URL:
https://corp-apps.azurewebsites.net/app-files/image.57x57.png
- フルサイズの画像URL:
https://corp-apps.azurewebsites.net/app-files/image.512x512.jpg
エクスポートが完了すると、必要なリソースへのパスと、必要な形式とサイズの写真が含まれるmanifest.plistマニフェストが宛先フォルダーに表示されます。
Manifest.plistファイルの内容 <?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>items</key> <array> <dict> <key>assets</key> <array> <dict> <key>kind</key> <string>software-package</string> <key>url</key> <string>https://corp-apps.azurewebsites.net/app-files/myApp.ipa</string> </dict> <dict> <key>kind</key> <string>display-image</string> <key>url</key> <string>https://corp-apps.azurewebsites.net/app-files/image.57x57.png</string> </dict> <dict> <key>kind</key> <string>full-size-image</string> <key>url</key> <string>https://corp-apps.azurewebsites.net/app-files/image.512x512.jpg</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.habr.hellohabr001</string> <key>bundle-version</key> <string>0.0.1</string> <key>kind</key> <string>software</string> <key>title</key> <string>myApp</string> </dict> </dict> </array> </dict> </plist>
次に、指定されたタイプのファイルをサーバーからダウンロードできるようにする必要があります。 これは、Web.configファイルに変更を加えることで実行できます。
Web.configファイルに必要な変更 <?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <staticContent> <mimeMap fileExtension=".jpg" mimeType="image/jpg" /> <mimeMap fileExtension=".png" mimeType="image/png" /> <mimeMap fileExtension=".plist" mimeType="text/plain" /> <mimeMap fileExtension=".ipa" mimeType="application/octet-stream" /> </staticContent> </system.webServer> </configuration>
そして最後に、アプリケーションをダウンロードするための特別なリンクを持つユーザー用のhtmlページを追加します。
Index.htmlファイル <!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title> </title> <link rel="stylesheet" href="dist/bootstrap.min.css"> </head> <body> <div class="container"> <br><br> <h1 class="text-center">Hello Apache Cordova</h1> <p class="text-center"> <a href="itms-services://?action=download-manifest&url=https://corp-apps.azurewebsites.net/app-files/manifest.plist" class="btn btn-info" type="button">Install App</a> </p> <br><br> </div> </body> </html>
ユーザーが行う必要があるのは、いくつかのボタンをクリックするだけです。
開発ツールに関するメソッドの汎用性を強調するために、この例ではApache Cordovaで記述されたアプリケーションを使用しました。 Xamarinなどの他のツールについても同様です。
手順3:Windows Server 2012エンタープライズ環境に展開する
そのため、外部プラットフォームが利用できない場合に最も困難なシナリオになります。 この場合、Windows Server 2012とIIS 8を使用します。
明確にするために、2つの個別のサイトを展開します。
ご注意iphone-udid-zzzz.comにHTTPSをインストールする必要はありません。IISの構成を示すためにこのケースを使用してください。
指定されたドメイン名を使用してサイトにアクセスするには、構成済みのDNSサーバーが必要です(この例では、Active Directoryドメインコントローラー、DNSサーバー、およびサイト自体が同じマシンに展開されています)。
サイトの直接表示ゾーンの作成を始めましょう。 これを行うには、サーバーマネージャーを使用します。
iOSデバイスのUDIDを受信するためのサイトの直接表示ゾーン
iphone-udid-zzzz.comを作成します。
アカデミックな目的のために、考慮すべき重要なネットワーク設定を提供します。
詳細サーバーネットワークアダプターの設定(192.168.0.1はWiFiルーターのIPアドレス)

WiFiルーターのDNS設定。 D-Linkの場合、DNSサーバーの順序が重要です。

Windows Server 2012を実行している仮想マシンのネットワークアダプター設定。

ノード(AまたはAAAA)を作成します。
詳細
サーバーのIPアドレスを登録します

FQDN名を使用してサイトにアクセスできることを確認してください。 DNSキャッシュをクリアしましょう。


素晴らしい、すべてが機能していることがわかります。
アプリケーションのダウンロードサイト
corp-apps-zzzz.comに対して同じアクションチェーンを繰り返しましょう。
これで、IISのインストールと構成を開始できます。
サイトのスタブを作成します。
リンクを介してiOSデバイスにアプリケーションをインストールするには、HTTPSサポートが必要です-SSL証明書の作成を始めましょう。 残念ながら、IISによって生成されたSSL証明書は私たちには適していないため、OpenSSLユーティリティを使用します。
このガイドでは、
リンクからダウンロードできるWin32 OpenSSLコマンドラインユーティリティを使用します。
OpenSSLインストールの詳細オペレーティングシステムのビット深度を選択します。 このWindows Server 2012では、
Win64 OpenSSL v1.0.2e (16MBインストーラー)が選択されました

インストール中に注意する点。


OpenSSLをインストールした後、ドライブ
Cに OpenSSL-Certificatesフォルダーを作成し
ます 。コマンドラインを実行します。
iphone-udid-zzzz.comの証明書を作成します。
opensslユーティリティを使用して証明書を作成する C:\Users\devin> cd c:\OpenSSL-Certificates c:\OpenSSL-Certificates> set RANDFILE=c:\OpenSSL-Certificates\.rnd c:\OpenSSL-Certificates> set OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg c:\OpenSSL-Certificates> c:\OpenSSL-Win64\bin\openssl.exe OpenSSL> genrsa -out iphone-udid-zzzz.key 2048 OpenSSL> req -new -x509 -sha256 -key iphone-udid-zzzz.key -out iphone-udid-zzzz.cer -days 365 -subj /CN=iphone-udid-zzz.com OpenSSL> pkcs12 -export -out iphone-udid-zzzz.pfx -inkey iphone-udid-zzzz.key -in iphone-udid-zzzz.cer Enter Export Password: Verifying - Enter Export Password: OpenSSL> exit c:\OpenSSL-Certificates>
同様に、
corp-apps-zzzz.comの証明書を作成します。
opensslユーティリティを使用して証明書を作成する C:\Users\devin> cd c:\OpenSSL-Certificates c:\OpenSSL-Certificates> set RANDFILE=c:\OpenSSL-Certificates\.rnd c:\OpenSSL-Certificates> set OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg c:\OpenSSL-Certificates> c:\OpenSSL-Win64\bin\openssl.exe OpenSSL> genrsa -out corp-apps-zzzz.key 2048 OpenSSL> req -new -x509 -sha256 -key corp-apps-zzzz.key -out corp-apps-zzzz.cer -days 365 -subj /CN=corp-apps-zzzz.com OpenSSL> pkcs12 -export -out corp-apps-zzzz.pfx -inkey corp-apps-zzzz.key -in corp-apps-zzzz.cer Enter Export Password: Verifying - Enter Export Password: OpenSSL> exit c:\OpenSSL-Certificates>
次のステップは、作成された* .pfx証明書をIISにインポートすることです。
これで、HTTPS接続を提供するために
バインディングを
変更できます。
サイトの場合:iphone-udid-zzzz.com サイトの場合:corp-apps-zzzz.com さて、次のステップは
iphone-udid-zzzz.comの WebAPIプロジェクトに変更を
加えることです。
Web.configファイル、WebDAVおよび405エラーのセクション
system.webServerを排除し
ます 。
Web.configファイルに必要な変更 <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule"/> </modules> <handlers> <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> <add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> <remove name="OPTIONSVerbHandler" /> <remove name="TRACEVerbHandler" /> <remove name="WebDAV" /> </handlers> <staticContent> <mimeMap fileExtension=".mobileconfig" mimeType="application/x-apple-aspen-config" /> </staticContent> </system.webServer>
証明書の場合、
Web.configに変更を追加する必要もあります。
詳細 <system.webServer> <staticContent> <remove fileExtension=".mobileconfig" /> <mimeMap fileExtension=".mobileconfig" mimeType="application/x-apple-aspen-config" /> <remove fileExtension=".crt" /> <mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" /> </staticContent> </system.webServer>
ファイル
/Downloads/iphone-udid-zzzz.mobileconfig-URLが変更されました。
詳細 <key>URL</key> <string>https://iphone-udid-zzzz.com:9001/api/xml</string>
生成された
iphone-udid-zzzz.cer証明書が
/ Downloads / フォルダーに追加されているため、拡張子を
* .crtに変更する必要が
あります。 それ以外の場合、iOSデバイスでは、テキストファイルのようにブラウザで開きます。
ファイル
/Views/Home/Index.cshtml-URL(href )が変更され、SSL証明書をダウンロードするためのリンクが追加されました。
Index.cshtmlファイルに必要な変更 <div class="jumbotron"> <h1>Get your UDID</h1> <p><a href="/downloads/iphone-udid-zzzz.mobileconfig" class="btn btn-primary btn-lg">Take UDID</a></p> </div> <div class="row"> <a href="/downloads/iphone-udid-zzzz.crt" download class="btn btn-info">Install SSL-Certificate</a> <p> @{ foreach (iPhoneUDID.Models.iPhoneUDID item in ViewBag.UDIDs) { <h5>TimeAdded: @item.TimeAdded, UDID: @item.UDID</h5> } } </p> </div> <div class="row"> @Html.ActionLink("Clear UDIDs list", "ClearHistory", "Home", null, new { @class = "btn btn-primary btn-large" }) </div>
ファイル
/Controllers/XmlController.cs-try / catchコンストラクトを追加
-plist (UDID)を解析する際のラッパー。
詳細 using System; using System.Net; using System.Net.Http; using System.Web.Http; using System.Xml.Linq; namespace iPhoneUDID.Controllers { public class XmlController : ApiController { [HttpPost] public HttpResponseMessage PostRawXMLMessage(HttpRequestMessage request) { string plist = request.Content.ReadAsStringAsync().Result; string UDID = "Error"; try { int begin = plist.IndexOf("UDID") + 20; int end = plist.IndexOf("<", begin); UDID = plist.Substring(begin, end - begin); } catch (Exception exc) {
iphone-udid-zzzz.comのプロジェクトの構築を開始できます。
受信したファイルをサーバー上の適切なフォルダーにコピーします。
また、サーバー上のディレクトリ内の
udids.xmlファイルへの変更を許可する必要があります。
これ以降、ユーザーはサイトでiOSデバイスのUDIDを登録できます。
https://iphone-udid-zzzz.com:9001
UDIDを登録するためのPOSTリクエストをテストするには、Google Chrome-
Postmanの無料の拡張機能を使用することをお勧めします。
corp-apps-zzzz.comのプロジェクトの構築を始めましょう。
Web.configファイル。
Web.configファイルのコンテンツ <?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <staticContent> <remove fileExtension=".jpg" /> <mimeMap fileExtension=".jpg" mimeType="image/jpg" /> <remove fileExtension=".png" /> <mimeMap fileExtension=".png" mimeType="image/png" /> <remove fileExtension=".plist" /> <mimeMap fileExtension=".plist" mimeType="text/plain" /> <remove fileExtension=".ipa" /> <mimeMap fileExtension=".ipa" mimeType="application/octet-stream" /> <remove fileExtension=".crt" /> <mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" /> </staticContent> </system.webServer> </configuration>
Index.htmlファイル
-URL (href)が変更され、SSL証明書をダウンロードするためのリンクが追加されました。
ユーザーは、アプリケーションをインストールする前にこの証明書をインストールする必要があります。 そうでない場合、証明書認証エラーを受け取ります。
index.htmlファイルに必要な変更 <!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title> iOS </title> <link rel="stylesheet" href="dist/bootstrap.min.css"> <script src="dist/jquery-1.11.3.min.js"></script> <style> h4 {line-height: 25px;} </style> </head> <body> <div class="container"> <br><br> <h1 class="text-center">Hello Apache Cordova</h1> <p class="text-center"> <a href="itms-services://?action=download-manifest&url=https://corp-apps-zzzz.com:9002/app-files/manifest.plist" class="btn btn-info" type="button">Install App</a> <a href="/app-files/corp-apps-zzzz.crt" download class="btn btn-info">Install SSL-Certificate</a> </p> <br><br> </div> </body> </html>
ファイル
manifest.plist -URLが変更されました(ポートが追加されました)。
manifest.plistに必要な変更 <?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>items</key> <array> <dict> <key>assets</key> <array> <dict> <key>kind</key> <string>software-package</string> <key>url</key> <string>https://corp-apps-zzzz.com:9002/app-files/myApp.ipa</string> </dict> <dict> <key>kind</key> <string>display-image</string> <key>url</key> <string>https://corp-apps-zzzz.com:9002/app-files/image.57x57.png</string> </dict> <dict> <key>kind</key> <string>full-size-image</string> <key>url</key> <string>https://corp-apps-zzzz.com:9002/app-files/image.512x512.jpg</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.habr.hellohabr001</string> <key>bundle-version</key> <string>0.0.1</string> <key>kind</key> <string>software</string> <key>title</key> <string>myApp</string> </dict> </dict> </array> </dict> </plist>
生成された証明書
corp-apps-zzzz.cerが / app-files / フォルダーに追加され
ているため、拡張子を
* .crtに変更する必要が
あります。 それ以外の場合、iOSデバイスでは、テキストファイルのようにブラウザで開きます。
これで、アプリケーションをインストールするために、ユーザーはいくつかのボタンをクリックするだけでサイトにアクセスできます。
https://corp-apps-zzzz.com:9002
おわりに
この記事では、Microsoftテクノロジースタックを使用して、参照によってiOSアプリケーションを配布する方法を検討しました。
慣れるために、GitHubにデモプロジェクトを投稿しました。
- 配置に外部サイトを使用するプロジェクトのソースは、 ここにあります。
- プラットフォームとして社内のWindowsサーバーを使用するプロジェクトのソースは、 ここにあります 。
この記事がこのトピックを理解し始めている人々に役立つことを願っています。