{"id":1491,"date":"2015-06-17T15:14:03","date_gmt":"2015-06-17T14:14:03","guid":{"rendered":"http:\/\/www.aymericlamboley.fr\/blog\/?p=1491"},"modified":"2016-10-19T14:23:32","modified_gmt":"2016-10-19T12:23:32","slug":"install-an-ipa-on-ios-directly-from-a-url","status":"publish","type":"post","link":"http:\/\/www.aymericlamboley.fr\/blog\/install-an-ipa-on-ios-directly-from-a-url\/","title":{"rendered":"Install an IPA on iOS directly from a URL"},"content":{"rendered":"<p>Back from vacations in Qu\u00e9bec (lovely country &#038; people), it&#8217;s time for a quick blog post for sharing a good trick!<\/p>\n<p>On iOS when you want to share a build with others, you mostly use a third party service (like TestFlight), or you provide the IPA and they have to install it via iTunes or even better <a href=\"http:\/\/www.i-funbox.com\/\" target=\"_blank\">iFunbox<\/a>. Unlike Android (with an APK file), on iOS we&#8217;re not able to install an app directly from its binary (IPA). Unless you point your URL to a plist file!<br \/>\n<!--more--><\/p>\n<p>Upload your IPA on a FTP. Then create a plist file with this format:<\/p>\n<pre lang=\"xml\"><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<!DOCTYPE plist PUBLIC \"-\/\/Apple\/\/DTD PLIST 1.0\/\/EN\" \"http:\/\/www.apple.com\/DTDs\/PropertyList-1.0.dtd\">\r\n<plist version=\"1.0\">\r\n<dict>\r\n    <key>items<\/key>\r\n    <array>\r\n        <dict>\r\n            <key>assets<\/key>\r\n            <array>\r\n                <dict>\r\n                    <key>kind<\/key>\r\n                    <string>software-package<\/string>\r\n                    <key>url<\/key>\r\n                    <string>http:\/\/davikingcode.com\/MyGame.ipa<\/string>\r\n                    <!-- it could also work with a TestFlight build inside the PUBLIC folder -->\r\n                    <!-- <string>https:\/\/dl.dropboxusercontent.com\/u\/id\/MyGame.ipa<\/string> -->\r\n                <\/dict>\r\n            <\/array>\r\n            <key>metadata<\/key>\r\n            <dict>\r\n                <key>bundle-identifier<\/key>\r\n                <string>com.davikingcode.MyGame<\/string>\r\n                <key>bundle-version<\/key>\r\n                <string>1.0<\/string>\r\n                <key>kind<\/key>\r\n                <string>software<\/string>\r\n                <key>title<\/key>\r\n                <string>MyGame<\/string>\r\n            <\/dict>\r\n        <\/dict>\r\n    <\/array>\r\n<\/dict>\r\n<\/plist><\/pre>\n<p>Don&#8217;t forget to change the url, app id and title name. Then create a simple HTML page:<\/p>\n<pre lang=\"xml\"><html xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\" xml:lang=\"fr\">\t\r\n\t<head>\r\n\t\t<meta http-equiv=\"Content-Type\" content=\"application\/xhtml+xml; charset=utf-8\" \/>\r\n\t\t<title>Install MyGame<\/title>\r\n\t\t<style>\r\n\t\t\thtml, body { height:100%; }\r\n\t\t\tbody { margin:0;font-family:\"Arial\";font-size:40px; }\r\n\t\t<\/style>\r\n\t<\/head>\r\n\r\n\t<body>\r\n\t\t\r\n\t\t<br\/> \r\n\t\r\n\t\t<div style=\"text-align:center;\">\r\n\t\t\t<h3>Install MyGame<\/h3>\r\n\t\t<\/div>\r\n        \r\n\t\t<div style=\"text-align:center;\">\r\n\t\t\t<img decoding=\"async\" src=\"icon_57.png\" border=\"0\" align=\"center\"><\/img>\r\n\t\t<\/div>\r\n\t\t<br\/>\r\n         \r\n\t\t\r\n\t\t<div style=\"text-align:center;\">\r\n\t\t\t<a href=\"itms-services:\/\/?action=download-manifest&#038;url=https:\/\/dl.dropboxusercontent.com\/s\/an-id\/MyGame.plist\">Install MyGame<\/a>\r\n\t\t<\/div>\r\n\t\t<br\/>\r\n\t\t\t\r\n\t<\/body>\r\n<\/html><\/pre>\n<p>Note you must have your plist file on a https server, Dropbox is the quickest way. You get it <em>itms-services<\/em> is the key.<\/p>\n<p>And then, why not adding a QR Code to that page thanks to <a href=\"https:\/\/developers.google.com\/chart\/infographics\/docs\/qr_codes\" target=\"_blank\">Google Chart Tools<\/a>?<\/p>\n<pre lang=\"xml\"><div>\r\n\t<center>\r\n\t\t<img decoding=\"async\" src=\"http:\/\/chart.apis.google.com\/chart?cht=qr&amp;chs=400x400&amp;chl=<? echo rawurlencode(\"http:\/\/\".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']) ;?>\" \/>\r\n\t<\/center>\r\n<\/div><\/pre>\n<p>Thanks <a href=\"https:\/\/bitbucket.org\/spautet\/as3isolib-starling\" target=\"_blank\">S\u00e9bastien<\/a> for the trick!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Back from vacations in Qu\u00e9bec (lovely country &#038; people), it&#8217;s time for a quick blog post for sharing a good trick! On iOS when you want to share a build with others, you mostly use a third party service (like TestFlight), or you provide the IPA and they have to install it via iTunes or &hellip; <a href=\"http:\/\/www.aymericlamboley.fr\/blog\/install-an-ipa-on-ios-directly-from-a-url\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Install an IPA on iOS directly from a URL<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[98],"tags":[99],"_links":{"self":[{"href":"http:\/\/www.aymericlamboley.fr\/blog\/wp-json\/wp\/v2\/posts\/1491"}],"collection":[{"href":"http:\/\/www.aymericlamboley.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.aymericlamboley.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.aymericlamboley.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.aymericlamboley.fr\/blog\/wp-json\/wp\/v2\/comments?post=1491"}],"version-history":[{"count":11,"href":"http:\/\/www.aymericlamboley.fr\/blog\/wp-json\/wp\/v2\/posts\/1491\/revisions"}],"predecessor-version":[{"id":1601,"href":"http:\/\/www.aymericlamboley.fr\/blog\/wp-json\/wp\/v2\/posts\/1491\/revisions\/1601"}],"wp:attachment":[{"href":"http:\/\/www.aymericlamboley.fr\/blog\/wp-json\/wp\/v2\/media?parent=1491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.aymericlamboley.fr\/blog\/wp-json\/wp\/v2\/categories?post=1491"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.aymericlamboley.fr\/blog\/wp-json\/wp\/v2\/tags?post=1491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}