
æè¿ããã€ã¯ããœããã«ãã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ã®ãããã¡ã€ã«ãã¡ã€ã«ãšããŒã¿ããŒã¹ã®ä¿åã
WebAPIãããžã§ã¯ãã®äœæ

ã¹ããã 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ãŠãŒãã£ãªãã£ã®çµæ

ç»é²æžã¿ã®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ã衚瀺ãããŸãã
ç»é²æžã¿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ã€ã®åå¥ã®ãµã€ããå±éããŸãã
- iOSããã€ã¹ã®UDIDãååŸããã«ã¯
https://iphone-udid-zzzz.com
- ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããã«ã¯
https://corp-apps-zzzz.com
ã泚æ
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ãå®è¡ããŠããä»®æ³ãã·ã³ã®ãããã¯ãŒã¯ã¢ããã¿ãŒèšå®ã

WiFiã«ãŒã¿ãŒã®DNSèšå®ã D-Linkã®å ŽåãDNSãµãŒããŒã®é åºãéèŠã§ãã

Windows Server 2012ãå®è¡ããŠããä»®æ³ãã·ã³ã®ãããã¯ãŒã¯ã¢ããã¿ãŒèšå®ã

ããŒãïŒAãŸãã¯AAAAïŒãäœæããŸãã
詳现
ãµãŒããŒã®IPã¢ãã¬ã¹ãç»é²ããŸã
FQDNåã䜿çšããŠãµã€ãã«ã¢ã¯ã»ã¹ã§ããããšã確èªããŠãã ããã DNSãã£ãã·ã¥ãã¯ãªã¢ããŸãããã
çŽ æŽãããããã¹ãŠãæ©èœããŠããããšãããããŸãã

ãµãŒããŒã®IPã¢ãã¬ã¹ãç»é²ããŸã

FQDNåã䜿çšããŠãµã€ãã«ã¢ã¯ã»ã¹ã§ããããšã確èªããŠãã ããã DNSãã£ãã·ã¥ãã¯ãªã¢ããŸãããã


çŽ æŽãããããã¹ãŠãæ©èœããŠããããšãããããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®ããŠã³ããŒããµã€ãcorp-apps-zzzz.comã«å¯ŸããŠåãã¢ã¯ã·ã§ã³ãã§ãŒã³ãç¹°ãè¿ããŸãããã
詳现



ããã§ãIISã®ã€ã³ã¹ããŒã«ãšæ§æãéå§ã§ããŸãã
詳现
[WebãµãŒããŒïŒIISïŒ]ãéžæããŸãã
ããã§ã¯ããã¹ãŠãå€æŽããŸããã
ãã®ã¬ã€ãã®äžéšãšããŠã次ã®æ§æã䜿çšãããŸããã
ããã«ãµãŒããŒã§ãèªååèµ·åããéžæããå Žåã¯æ³šæããŠãã ããã
ã€ã³ã¹ããŒã«ãå®äºããŸããã




[WebãµãŒããŒïŒ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) { // } 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ã®ãããžã§ã¯ãã®æ§ç¯ãéå§ã§ããŸãã
詳现





åä¿¡ãããã¡ã€ã«ããµãŒããŒäžã®é©åãªãã©ã«ããŒã«ã³ããŒããŸãã
詳现
ãµã€ãããªããŒãããããšããå§ãããŸãã


ãµã€ãããªããŒãããããšããå§ãããŸãã

ãŸãããµãŒããŒäžã®ãã£ã¬ã¯ããªå ã®udids.xmlãã¡ã€ã«ãžã®å€æŽãèš±å¯ããå¿ èŠããããŸãã
詳现



ãã以éããŠãŒã¶ãŒã¯ãµã€ãã§iOSããã€ã¹ã®UDIDãç»é²ã§ããŸãã
https://iphone-udid-zzzz.com:9001
ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³
SSL蚌ææžãã€ã³ã¹ããŒã«ããŸãã ããã¯ãªãã·ã§ã³ã§ãã
UDID iOSããã€ã¹ãç»é²ããŸãã
iOSããã€ã¹ã®UDIDã衚瀺ããŸãã



[詳现]ãã¯ãªãã¯ããå Žå




UDID iOSããã€ã¹ãç»é²ããŸãã


[詳现]ãã¯ãªãã¯ããå Žå




iOSããã€ã¹ã®UDIDã衚瀺ããŸãã

UDIDãç»é²ããããã®POSTãªã¯ãšã¹ãããã¹ãããã«ã¯ãGoogle Chrome- Postmanã®ç¡æã®æ¡åŒµæ©èœã䜿çšããããšããå§ãããŸãã
- URLïŒ
http://iphone-udid-zzzz.com/api/xml
- ãã¹ããªã¯ãšã¹ãïŒ
xxxxxxUDIDxxxxxxxxxxxxxxxx100000000000000000002 <xxxxxxxxxxx
詳现



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
ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³
SSL蚌ææžãã€ã³ã¹ããŒã«ããŸãã
ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŸãã



[詳现]ãã¯ãªãã¯ããå Žå




ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŸãã



ãããã«
ãã®èšäºã§ã¯ãMicrosoftãã¯ãããžãŒã¹ã¿ãã¯ã䜿çšããŠãåç §ã«ãã£ãŠiOSã¢ããªã±ãŒã·ã§ã³ãé åžããæ¹æ³ãæ€èšããŸããã
æ £ããããã«ãGitHubã«ãã¢ãããžã§ã¯ããæçš¿ããŸããã
- é 眮ã«å€éšãµã€ãã䜿çšãããããžã§ã¯ãã®ãœãŒã¹ã¯ã ããã«ãããŸãã
- ãã©ãããã©ãŒã ãšããŠç€Ÿå ã®WindowsãµãŒããŒã䜿çšãããããžã§ã¯ãã®ãœãŒã¹ã¯ã ããã«ãããŸã ã
ãã®èšäºããã®ãããã¯ãç解ãå§ããŠãã人ã ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã