![](https://habrastorage.org/files/376/7f8/856/3767f885618149ae969317dd0ad36b51.jpg)
æè¿ããã€ã¯ããœããã«ãã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ã¢ã«ãŠã³ãã䜿çšããåç
§ã«ããã¢ããªã®é
åž
![](https://habrastorage.org/files/6ba/248/1f8/6ba2481f86f24282bb26621b66b29a8e.png)
Apple Developer Enterprise Programã¢ã«ãŠã³ãã䜿çšããåç
§ã«ããã¢ããªã®é
åž
![](https://habrastorage.org/files/670/7fd/a17/6707fda178274736884117079f763a66.png)
ã芧ã®ãšãããæšæºã®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ã®ãããã¡ã€ã«ãã¡ã€ã«ãšããŒã¿ããŒã¹ã®ä¿åã
WebAPIãããžã§ã¯ãã®äœæ
![](https://habrastorage.org/files/0dc/e27/3e9/0dce273e9fca4d22b275aef9f8ef2938.png)
ã¹ããã 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$
uuidgenãŠãŒãã£ãªãã£ã®çµæ
![](https://habrastorage.org/files/436/b71/bcc/436b71bcc3d145df9cc3a941564d32ea.png)
ç»é²æžã¿ã®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>
ããã§ããŠãŒã¶ãŒãå¿ èŠãšããã®ã¯ããµã€ãã«ã¢ã¯ã»ã¹ããŠããã€ãã®ãã¿ã³ãæŒãã ãã§ãã
ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³
![](https://habrastorage.org/files/c60/e74/a3a/c60e74a3a38747ba84ed6b8517c6c942.png)
![](https://habrastorage.org/files/955/eb7/378/955eb7378dda4ddc878586e60d1a9a47.png)
[詳现]ãã¯ãªãã¯ããå Žå
![](https://habrastorage.org/files/c5d/964/633/c5d96463345e4dcbb5104b5a7a8245c8.png)
![](https://habrastorage.org/files/14c/0c0/8e6/14c0c08e606a4ca9a0e9201520f364e4.png)
![](https://habrastorage.org/files/adf/4f5/db7/adf4f5db747b43fe8da6eba99f94f656.png)
![](https://habrastorage.org/files/865/e0e/b3c/865e0eb3c4034771867aa712d83d3f20.png)
ãã®åŸããµã€ãã«ãã®UDIDã衚瀺ãããŸãã
ç»é²æžã¿UDIDã®ãªã¹ã
![](https://habrastorage.org/files/813/690/c37/813690c37f534d88a97b6b7651cf4598.png)
æåŸã«ãiOSããã€ã¹ã®UDIDãæã«å ¥ããŸããããããéçºè ã¢ã«ãŠã³ãã«ç»é²ããå¿ èŠããããŸãã
ã¡ã³ããŒã»ã³ã¿ãŒã»ã¯ã·ã§ã³ã®Appleéçºè ãµã€ãã«ã¢ã¯ã»ã¹ããŸãã
詳现
![](https://habrastorage.org/files/83e/106/f8c/83e106f8c5284b69b211a91a54b1b9f0.png)
![](https://habrastorage.org/files/4f9/514/b99/4f9514b992a44e7b9a93c4c288ab3ae5.png)
![](https://habrastorage.org/files/6b4/621/d3b/6b4621d3bbc44b68920de6da388326f6.png)
![](https://habrastorage.org/files/647/988/da0/647988da03514870aba822b198dac8b6.png)
iOSããã€ã¹ã®UDIDãè¿œå ããŸãã
詳现
![](https://habrastorage.org/files/056/d6c/5da/056d6c5dac9f42ec8b123243566c94b4.png)
![](https://habrastorage.org/files/5f6/c39/6bc/5f6c396bcf464f9ca2ae0f94913af334.png)
App IDãäœæããŠããªãå Žåã¯ãäœæããŸãã
詳现
![](https://habrastorage.org/files/4ec/412/ab9/4ec412ab9f914aaca750e44f8f2f54b4.png)
![](https://habrastorage.org/files/c71/f85/5cd/c71f855cd16845eeba471c37ae27012b.png)
ã¢ããªã±ãŒã·ã§ã³ã®ããããžã§ãã³ã°ãããã¡ã€ã«ãäœæããŸãã
詳现
ããã§ããã€ã§ããã®é åžãããã¡ã€ã«ã«ããã€ã¹ãè¿œå ã§ããŸãã
![](https://habrastorage.org/files/101/a41/39f/101a4139ffb54cba86b4f8433632aade.png)
![](https://habrastorage.org/files/969/0ec/104/9690ec10450547b98c5e94dca2d7d683.png)
![](https://habrastorage.org/files/097/8dd/44a/0978dd44a4a04b3ba1255385a545f86c.png)
![](https://habrastorage.org/files/864/802/f31/864802f31810434cbbebc24624745bae.png)
![](https://habrastorage.org/files/980/391/2af/9803912afd5b436da49fda9bb0024c23.png)
![](https://habrastorage.org/files/bd4/f4f/a63/bd4f4fa637da4df4ab90b5a1fe0f684a.png)
![](https://habrastorage.org/files/367/376/0bf/3673760bf1214026861a9d5da456c896.png)
ããã§ããã€ã§ããã®é åžãããã¡ã€ã«ã«ããã€ã¹ãè¿œå ã§ããŸãã
![](https://habrastorage.org/files/572/941/0be/5729410be1c7483c846276ae4f8ffb36.png)
![](https://habrastorage.org/files/de0/114/6da/de01146da27149bc9ca4eb806d155a80.png)
ã¹ããã2ïŒãªã³ã¯çµç±ã§ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ãã
iOSããã€ã¹ã®UDIDãåãåã£ãŠéçºè ã¢ã«ãŠã³ãã«è¿œå ããããããžã§ãã³ã°ãããã¡ã€ã«ãå€æŽããåŸãã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ã«å¿ èŠãªãã¡ã€ã«ãé 眮ãããWebãªãœãŒã¹ããŠãŒã¶ãŒã«æäŸããå¿ èŠããããŸãã ãã®ãããªãªãœãŒã¹ãšããŠãMicrosoft Azureã䜿çšããŸããããã¯ãããã©ã«ãã§* .azurewebsites.netãµã€ãã«æå¹ãªSSL蚌ææžãæäŸããŸãã ãµã€ãã®ååãšããŠã次ãéžæããŸãã
https://corp-apps.azurewebsites.net
ã泚æ
åç §ã«ããã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ã¯ãæå¹ãªSSL蚌ææžã§HTTPSã䜿çšããå Žåã«ã®ã¿æ©èœããŸãã
Webãµã€ããäœæãããããžã§ã¯ããšããŠãã³ã³ãããŒã©ãŒãªãã§æãåçŽãªãã³ãã¬ãŒããéžæã§ããŸãã å¿ èŠãªã®ã¯ãHTMLããŒãžãšããã€ãã®è¿œå ãã¡ã€ã«ãããŠã³ããŒãããæ©èœã ãã§ãã
詳现
![](https://habrastorage.org/files/f04/70a/7f7/f0470a7f793d4cf7879b370206902c80.png)
ããã§ãå¿ èŠãªãã¡ã€ã«ã®æºåãéå§ã§ããŸãã ãããè¡ãã«ã¯ãXcodeã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ããã±ãŒãžããšã¯ã¹ããŒãããŸãã
詳现
![](https://habrastorage.org/files/a6a/adc/ea0/a6aadcea0f7649779768f6b011f408e4.png)
![](https://habrastorage.org/files/709/ebd/273/709ebd273a32429bbf7dc0967bb60ca9.png)
![](https://habrastorage.org/files/ef1/0de/0a3/ef10de0a3d4a41b0aef1804bb1e5db64.png)
![](https://habrastorage.org/files/779/9a1/2e7/7799a12e77db4b1a8c07fb1e6a47ff24.png)
![](https://habrastorage.org/files/9d0/122/0f4/9d01220f4b8248dbae1f4ebbfaa5551f.png)
![](https://habrastorage.org/files/846/ca7/1e8/846ca71e8ce849fe90f18070d1caecbe.png)
![](https://habrastorage.org/files/4b2/2ea/487/4b22ea48777b426885b890694446c2ee.png)
ã¢ããªã±ãŒã·ã§ã³ã®é åžã«å¿ èŠãªæ å ±ãå ¥åããŸãã ãã¡ã€ã«æ¡åŒµåã«æ³šæããŠãã ããã
- ã¿ã€ãã«ïŒ
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
詳现
![](https://habrastorage.org/files/da5/c56/62a/da5c5662a0e145b4af8a8af69260e677.png)
ãšã¯ã¹ããŒããå®äºãããšãå¿ èŠãªãªãœãŒã¹ãžã®ãã¹ãšãå¿ èŠãªåœ¢åŒãšãµã€ãºã®åçãå«ãŸãã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ãªã©ã®ä»ã®ããŒã«ã«ã€ããŠãåæ§ã§ãã
ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³
![](https://habrastorage.org/files/187/922/7fb/1879227fb0b64a20b2897890c85fe190.png)
![](https://habrastorage.org/files/58b/2a1/461/58b2a1461a444abeb4e420f217971801.png)
![](https://habrastorage.org/files/ee9/cd3/e05/ee9cd3e059d14e00b469a73273969720.png)
![](https://habrastorage.org/files/489/443/235/4894432351474019a940c000c4372d39.png)
![](https://habrastorage.org/files/9e3/8c1/35e/9e38c135e17e427893c58c2d640dfbc1.png)
æé 3ïŒWindows Server 2012ãšã³ã¿ãŒãã©ã€ãºç°å¢ã«å±éãã
ãã®ãããå€éšãã©ãããã©ãŒã ãå©çšã§ããªãå Žåã«æãå°é£ãªã·ããªãªã«ãªããŸãã ãã®å ŽåãWindows Server 2012ãšIIS 8ã䜿çšããŸãã
æ確ã«ããããã«ã2ã€ã®åå¥ã®ãµã€ããå±éããŸãã
- iOSããã€ã¹ã®UDIDãååŸããã«ã¯
https://iphone-udid-zzzz.com
- ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããã«ã¯
https://corp-apps-zzzz.com
ã泚æ
iphone-udid-zzzz.comã«HTTPSãã€ã³ã¹ããŒã«ããå¿ èŠã¯ãããŸãããIISã®æ§æã瀺ãããã«ãã®ã±ãŒã¹ã䜿çšããŠãã ããã
æå®ããããã¡ã€ã³åã䜿çšããŠãµã€ãã«ã¢ã¯ã»ã¹ããã«ã¯ãæ§ææžã¿ã®DNSãµãŒããŒãå¿ èŠã§ãïŒãã®äŸã§ã¯ãActive Directoryãã¡ã€ã³ã³ã³ãããŒã©ãŒãDNSãµãŒããŒãããã³ãµã€ãèªäœãåããã·ã³ã«å±éãããŠããŸãïŒã
ãµã€ãã®çŽæ¥è¡šç€ºãŸãŒã³ã®äœæãå§ããŸãããã ãããè¡ãã«ã¯ããµãŒããŒãããŒãžã£ãŒã䜿çšããŸãã
詳现
![](https://habrastorage.org/files/2c4/7ba/2c5/2c47ba2c59ae4877a0ae671e001ee1cc.png)
![](https://habrastorage.org/files/1ef/4f6/a69/1ef4f6a691ad4a149f332f8b68cf843b.png)
![](https://habrastorage.org/files/921/b8e/bce/921b8ebce79c40fb9f02a495bef55960.png)
![](https://habrastorage.org/files/adb/73f/256/adb73f2562d24a9992c381bf037cb976.png)
![](https://habrastorage.org/files/177/f79/f41/177f79f410844fd69a8865ad77d9e176.png)
iOSããã€ã¹ã®UDIDãåä¿¡ããããã®ãµã€ãã®çŽæ¥è¡šç€ºãŸãŒã³iphone-udid-zzzz.comãäœæããŸãã
詳现
![](https://habrastorage.org/files/dbc/c21/29d/dbcc2129d3f84350986ad3eed633b7b4.png)
![](https://habrastorage.org/files/bcb/4c3/426/bcb4c34262ea4af1b4220863f60e595e.png)
![](https://habrastorage.org/files/2f5/8c0/a06/2f58c0a06b5e4a178ef1dfcdbca681dd.png)
ã¢ã«ãããã¯ãªç®çã®ããã«ãèæ ®ãã¹ãéèŠãªãããã¯ãŒã¯èšå®ãæäŸããŸãã
詳现
ãµãŒããŒãããã¯ãŒã¯ã¢ããã¿ãŒã®èšå®ïŒ192.168.0.1ã¯WiFiã«ãŒã¿ãŒã®IPã¢ãã¬ã¹ïŒ
WiFiã«ãŒã¿ãŒã®DNSèšå®ã D-Linkã®å ŽåãDNSãµãŒããŒã®é åºãéèŠã§ãã
Windows Server 2012ãå®è¡ããŠããä»®æ³ãã·ã³ã®ãããã¯ãŒã¯ã¢ããã¿ãŒèšå®ã
![](https://habrastorage.org/files/2a1/e83/caf/2a1e83caf1474ca2a8124ed443739be0.png)
WiFiã«ãŒã¿ãŒã®DNSèšå®ã D-Linkã®å ŽåãDNSãµãŒããŒã®é åºãéèŠã§ãã
![](https://habrastorage.org/files/ebd/d89/18f/ebdd8918ff9b4fd28583e993e26536e9.png)
Windows Server 2012ãå®è¡ããŠããä»®æ³ãã·ã³ã®ãããã¯ãŒã¯ã¢ããã¿ãŒèšå®ã
![](https://habrastorage.org/files/691/26d/16d/69126d16d9864e6b8aa758214ee0e3ca.png)
ããŒãïŒAãŸãã¯AAAAïŒãäœæããŸãã
詳现
ãµãŒããŒã®IPã¢ãã¬ã¹ãç»é²ããŸã
FQDNåã䜿çšããŠãµã€ãã«ã¢ã¯ã»ã¹ã§ããããšã確èªããŠãã ããã DNSãã£ãã·ã¥ãã¯ãªã¢ããŸãããã
çŽ æŽãããããã¹ãŠãæ©èœããŠããããšãããããŸãã
![](https://habrastorage.org/files/e69/588/854/e695888549104b29adf587403635e480.png)
ãµãŒããŒã®IPã¢ãã¬ã¹ãç»é²ããŸã
![](https://habrastorage.org/files/35d/94a/9c7/35d94a9c7be34c99b1ecbab0944ce44e.png)
FQDNåã䜿çšããŠãµã€ãã«ã¢ã¯ã»ã¹ã§ããããšã確èªããŠãã ããã DNSãã£ãã·ã¥ãã¯ãªã¢ããŸãããã
![](https://habrastorage.org/files/407/81e/cb5/40781ecb50504842bcdd2534ee03a35a.png)
![](https://habrastorage.org/files/30c/b25/d4a/30cb25d4aec44710902a2daa0fbd311d.png)
çŽ æŽãããããã¹ãŠãæ©èœããŠããããšãããããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®ããŠã³ããŒããµã€ãcorp-apps-zzzz.comã«å¯ŸããŠåãã¢ã¯ã·ã§ã³ãã§ãŒã³ãç¹°ãè¿ããŸãããã
詳现
![](https://habrastorage.org/files/c86/2a6/62e/c862a662eba54af28faaa06fe7806ef0.png)
![](https://habrastorage.org/files/1e7/fba/2fa/1e7fba2faab041868831f2cfdca2683b.png)
![](https://habrastorage.org/files/7fd/ce1/00a/7fdce100ad2f4976b670fb6d1d4a5fbe.png)
ããã§ãIISã®ã€ã³ã¹ããŒã«ãšæ§æãéå§ã§ããŸãã
詳现
[WebãµãŒããŒïŒIISïŒ]ãéžæããŸãã
ããã§ã¯ããã¹ãŠãå€æŽããŸããã
ãã®ã¬ã€ãã®äžéšãšããŠã次ã®æ§æã䜿çšãããŸããã
ããã«ãµãŒããŒã§ãèªååèµ·åããéžæããå Žåã¯æ³šæããŠãã ããã
ã€ã³ã¹ããŒã«ãå®äºããŸããã
![](https://habrastorage.org/files/0d6/213/f5f/0d6213f5f19e464c9776448bbdd2993d.png)
![](https://habrastorage.org/files/fa7/37a/93b/fa737a93b8da4ac4b5ab667fe7bfd594.png)
![](https://habrastorage.org/files/4de/7b9/700/4de7b9700b6e4bd79f68747968ebeda5.png)
![](https://habrastorage.org/files/f06/1ff/800/f061ff800a594c46bf0e993c1e84e75f.png)
[WebãµãŒããŒïŒIISïŒ]ãéžæããŸãã
![](https://habrastorage.org/files/2f5/e78/b18/2f5e78b1800a4afaa7d75ef985d650c7.png)
ããã§ã¯ããã¹ãŠãå€æŽããŸããã
![](https://habrastorage.org/files/f0b/28f/ddc/f0b28fddc5e6486690f310bdc4a96e6c.png)
ãã®ã¬ã€ãã®äžéšãšããŠã次ã®æ§æã䜿çšãããŸããã
![](https://habrastorage.org/files/8e5/6f5/b65/8e56f5b658524c60b66a5b6f1766318f.png)
![](https://habrastorage.org/files/6f2/f65/bf1/6f2f65bf1706486c8a48c2bd2210a339.png)
![](https://habrastorage.org/files/fea/109/662/fea10966284e4a48886c63ba46b1c46b.png)
![](https://habrastorage.org/files/8e6/bc0/134/8e6bc013495746d88a8b5658a843dc67.png)
ããã«ãµãŒããŒã§ãèªååèµ·åããéžæããå Žåã¯æ³šæããŠãã ããã
![](https://habrastorage.org/files/f64/07a/946/f6407a94661847bd9018fb569b586a76.png)
![](https://habrastorage.org/files/68a/15a/bba/68a15abbae854c5093edc64f22fb8477.png)
ã€ã³ã¹ããŒã«ãå®äºããŸããã
ãµã€ãã®ã¹ã¿ããäœæããŸãã
詳现
![](https://habrastorage.org/files/661/13a/735/66113a73583a4e708459e9d35db85090.png)
![](https://habrastorage.org/files/1f3/224/2fe/1f32242fec754449820b1964ad56a709.png)
![](https://habrastorage.org/files/502/094/628/502094628ae445bd999893994a1c829d.png)
![](https://habrastorage.org/files/c98/907/cf7/c98907cf70374cc48c83671ba94f2234.png)
ãªã³ã¯ãä»ããŠiOSããã€ã¹ã«ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããã«ã¯ãHTTPSãµããŒããå¿ èŠã§ã-SSL蚌ææžã®äœæãå§ããŸãããã æ®å¿µãªãããIISã«ãã£ãŠçæãããSSL蚌ææžã¯ç§ãã¡ã«ã¯é©ããŠããªããããOpenSSLãŠãŒãã£ãªãã£ã䜿çšããŸãã
ãã®ã¬ã€ãã§ã¯ã ãªã³ã¯ããããŠã³ããŒãã§ããWin32 OpenSSLã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ã䜿çšããŸãã
OpenSSLã€ã³ã¹ããŒã«ã®è©³çŽ°
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ããã深床ãéžæããŸãã ãã®Windows Server 2012ã§ã¯ã Win64 OpenSSL v1.0.2e ïŒ16MBã€ã³ã¹ããŒã©ãŒïŒãéžæãããŸãã
ã€ã³ã¹ããŒã«äžã«æ³šæããç¹ã
![](https://habrastorage.org/files/91d/a59/abe/91da59abe36942018bc5010830d3ab6b.png)
ã€ã³ã¹ããŒã«äžã«æ³šæããç¹ã
![](https://habrastorage.org/files/fe8/2e5/c3b/fe82e5c3b0a34b56b9b19cb903e286a8.png)
![](https://habrastorage.org/files/a46/a7e/477/a46a7e47762144ed98b1fd6f0e8826ee.png)
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>
å®è¡çµæ
![](https://habrastorage.org/files/704/890/396/704890396ee24c3da70a2b74aa914ecb.png)
![](https://habrastorage.org/files/1eb/584/749/1eb5847494504db28ec52d01cb086bfd.png)
åæ§ã«ã 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>
å®è¡çµæ
![](https://habrastorage.org/files/828/0bb/37f/8280bb37f9cb4e96939434e44bb4a04c.png)
![](https://habrastorage.org/files/098/3b3/f5a/0983b3f5a53944749455ab9a80069a17.png)
次ã®ã¹ãããã¯ãäœæããã* .pfx蚌ææžãIISã«ã€ã³ããŒãããããšã§ãã
詳现
![](https://habrastorage.org/files/3b2/93c/503/3b293c5035d849f5818eac3bdba715d8.png)
![](https://habrastorage.org/files/3fe/b5f/ef4/3feb5fef4c844191823e6816aa4574cb.png)
![](https://habrastorage.org/files/a01/b49/9b1/a01b499b174f4cac978d965d3ab1caf7.png)
![](https://habrastorage.org/files/1b0/efe/6dc/1b0efe6dc9604ebdadd95f250959f418.png)
ããã§ãHTTPSæ¥ç¶ãæäŸããããã«ãã€ã³ãã£ã³ã°ãå€æŽã§ããŸãã
ãµã€ãã®å ŽåïŒiphone-udid-zzzz.com
![](https://habrastorage.org/files/208/6b8/cee/2086b8cee1ff4446a9cdb76cc6b36c61.png)
![](https://habrastorage.org/files/a24/d63/2a8/a24d632a8e314d61872588b2ac0603b6.png)
![](https://habrastorage.org/files/4e4/c0d/88e/4e4c0d88e53d46708f37b9b3bfe8bc6c.png)
![](https://habrastorage.org/files/597/272/a1b/597272a1b47c434793766a31312ac1dd.png)
ãµã€ãã®å ŽåïŒcorp-apps-zzzz.com
![](https://habrastorage.org/files/8a1/c58/321/8a1c583211db4786b2a4aa6b7618a600.png)
![](https://habrastorage.org/files/c5c/e93/0bd/c5ce930bd0d04448bf8f21bf900d6b2d.png)
![](https://habrastorage.org/files/a78/f3c/de4/a78f3cde4cd34304a23d53b97c4a7610.png)
![](https://habrastorage.org/files/36e/100/165/36e10016521e4c8fa6cefad965b6b0e9.png)
ããŠã次ã®ã¹ãããã¯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ããã€ã¹ã§ã¯ãããã¹ããã¡ã€ã«ã®ããã«ãã©ãŠã¶ã§éããŸãã
詳现
![](https://habrastorage.org/files/67c/f00/935/67cf009359f641299cdc564c8b6552c8.png)
ãã¡ã€ã«/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) { // } 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; } } }
iphone-udid-zzzz.comã®ãããžã§ã¯ãã®æ§ç¯ãéå§ã§ããŸãã
詳现
![](https://habrastorage.org/files/e5b/642/568/e5b6425680cc4ec8b5b1b363cad37176.png)
![](https://habrastorage.org/files/046/f95/419/046f95419a244fa293be471b10eb3220.png)
![](https://habrastorage.org/files/525/4ed/eec/5254edeec31448969056f2c2f203b18d.png)
![](https://habrastorage.org/files/b8a/64a/2de/b8a64a2dec9d478e933522ec4de8265f.png)
![](https://habrastorage.org/files/3c5/ddb/604/3c5ddb6045dc438dbfe46324704be0df.png)
åä¿¡ãããã¡ã€ã«ããµãŒããŒäžã®é©åãªãã©ã«ããŒã«ã³ããŒããŸãã
詳现
ãµã€ãããªããŒãããããšããå§ãããŸãã
![](https://habrastorage.org/files/f11/0fa/5e1/f110fa5e193c43cc918034543c645fb5.png)
![](https://habrastorage.org/files/7ce/a3a/cac/7cea3acacd2f400ab6949485961790b3.png)
ãµã€ãããªããŒãããããšããå§ãããŸãã
![](https://habrastorage.org/files/d4f/4d7/8f1/d4f4d78f1db54393bb45315ac13d3474.png)
ãŸãããµãŒããŒäžã®ãã£ã¬ã¯ããªå ã®udids.xmlãã¡ã€ã«ãžã®å€æŽãèš±å¯ããå¿ èŠããããŸãã
詳现
![](https://habrastorage.org/files/ece/25f/00a/ece25f00a8c44580ba6116b2d8ce3102.png)
![](https://habrastorage.org/files/888/480/720/8884807200a64e1a8663aacc9e502b6a.png)
![](https://habrastorage.org/files/69f/719/1ca/69f7191ca5554f0fb3aed993e3f38157.png)
ãã以éããŠãŒã¶ãŒã¯ãµã€ãã§iOSããã€ã¹ã®UDIDãç»é²ã§ããŸãã
https://iphone-udid-zzzz.com:9001
ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³
SSL蚌ææžãã€ã³ã¹ããŒã«ããŸãã ããã¯ãªãã·ã§ã³ã§ãã
UDID iOSããã€ã¹ãç»é²ããŸãã
iOSããã€ã¹ã®UDIDã衚瀺ããŸãã
![](https://habrastorage.org/files/8f0/d0d/402/8f0d0d4021344cd1ac5b77c7045ad95d.png)
![](https://habrastorage.org/files/381/164/93b/38116493b34a4b53827d1945fb65306a.png)
![](https://habrastorage.org/files/36b/ab2/4d8/36bab24d85bc4e34b7f16bdc5a796e61.png)
[詳现]ãã¯ãªãã¯ããå Žå
![](https://habrastorage.org/files/13c/a57/dab/13ca57dabc0d4e08b7ce56339072a53b.png)
![](https://habrastorage.org/files/c8f/ddc/4c6/c8fddc4c644643fea8be329ad8d12825.png)
![](https://habrastorage.org/files/e5a/a30/79e/e5aa3079ee5740c1bf336f978738998c.png)
![](https://habrastorage.org/files/d14/b3d/340/d14b3d34048d4dc285a1adb0b46e9141.png)
UDID iOSããã€ã¹ãç»é²ããŸãã
![](https://habrastorage.org/files/455/fff/898/455fff89871840099ef7d3543bb76843.png)
![](https://habrastorage.org/files/b92/a2f/2b6/b92a2f2b6d4c498c8c631b2be10c83ac.png)
[詳现]ãã¯ãªãã¯ããå Žå
![](https://habrastorage.org/files/ae8/2ec/d2c/ae82ecd2c70a44c7a7c3440c62d0f229.png)
![](https://habrastorage.org/files/5bf/895/f70/5bf895f7028c48cab241d333b2c87618.png)
![](https://habrastorage.org/files/236/ad6/a5c/236ad6a5c4c24d66b46c392b324500cc.png)
![](https://habrastorage.org/files/3fe/beb/b9a/3febebb9aa884aacb47897337f63dabd.png)
iOSããã€ã¹ã®UDIDã衚瀺ããŸãã
![](https://habrastorage.org/files/1e1/77e/2a7/1e177e2a76ce41869c0052af451155e5.png)
UDIDãç»é²ããããã®POSTãªã¯ãšã¹ãããã¹ãããã«ã¯ãGoogle Chrome- Postmanã®ç¡æã®æ¡åŒµæ©èœã䜿çšããããšããå§ãããŸãã
- URLïŒ
http://iphone-udid-zzzz.com/api/xml
- ãã¹ããªã¯ãšã¹ãïŒ
xxxxxxUDIDxxxxxxxxxxxxxxxx100000000000000000002 <xxxxxxxxxxx
詳现
![](https://habrastorage.org/files/bc1/ed2/af9/bc1ed2af9eb24506acd377f1aa756e50.png)
![](https://habrastorage.org/files/997/e4e/d12/997e4ed123fd4de59cde860368f7e5c3.png)
![](https://habrastorage.org/files/009/55b/3af/00955b3af4de482fa838c8c7f2b52de4.png)
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://habrastorage.org/files/0ae/100/599/0ae10059951d473d833504194b4d5732.png)
ããã§ãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããããã«ããŠãŒã¶ãŒã¯ããã€ãã®ãã¿ã³ãã¯ãªãã¯ããã ãã§ãµã€ãã«ã¢ã¯ã»ã¹ã§ããŸãã
https://corp-apps-zzzz.com:9002
ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³
SSL蚌ææžãã€ã³ã¹ããŒã«ããŸãã
ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŸãã
![](https://habrastorage.org/files/b95/1ed/fbb/b951edfbb10b47269dd520f49b270448.png)
![](https://habrastorage.org/files/063/061/93c/06306193ccb84ddd9cbe5b36a348e855.png)
![](https://habrastorage.org/files/a3c/8de/063/a3c8de0639a4419ea49eb09d0c4facea.png)
[詳现]ãã¯ãªãã¯ããå Žå
![](https://habrastorage.org/files/b96/834/28e/b9683428ef354e4e99b4e25fe738bc6f.png)
![](https://habrastorage.org/files/b1a/508/ba6/b1a508ba66de4c3e85097694e9aa49c9.png)
![](https://habrastorage.org/files/edc/c90/414/edcc90414450493ea963eda9fa84594d.png)
![](https://habrastorage.org/files/83d/516/7b3/83d5167b37bf40b883d4666a2474dbf9.png)
ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŸãã
![](https://habrastorage.org/files/8a1/fce/13e/8a1fce13ee6d4c22bf3f0e48a6ac7a62.png)
![](https://habrastorage.org/files/f6b/cba/e35/f6bcbae35aa34f42bbd41a5585edf009.png)
![](https://habrastorage.org/files/5b8/1b3/8e5/5b81b38e5e534992a02a7ba5576da051.png)
ãããã«
ãã®èšäºã§ã¯ãMicrosoftãã¯ãããžãŒã¹ã¿ãã¯ã䜿çšããŠãåç §ã«ãã£ãŠiOSã¢ããªã±ãŒã·ã§ã³ãé åžããæ¹æ³ãæ€èšããŸããã
æ £ããããã«ãGitHubã«ãã¢ãããžã§ã¯ããæçš¿ããŸããã
- é 眮ã«å€éšãµã€ãã䜿çšãããããžã§ã¯ãã®ãœãŒã¹ã¯ã ããã«ãããŸãã
- ãã©ãããã©ãŒã ãšããŠç€Ÿå ã®WindowsãµãŒããŒã䜿çšãããããžã§ã¯ãã®ãœãŒã¹ã¯ã ããã«ãããŸã ã
ãã®èšäºããã®ãããã¯ãç解ãå§ããŠãã人ã ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã