itms-services://?action=download-manifest Not Work in IIS - ios

I have created an ios apps and let selected devices download&install on idevices browser safari.So make a link like this:
<a href="itms-services://?action=download-manifest&url=http://myserver.com/Info.plist">
and when i click it was popup a message "cannot connect to myserver.com".
Then i figure out IIS missing MimeType so i add back to it.
.ipa application/octet-stream
.plist text/xml
But finally when i click on it no response at all,why?
i doubt info.plist setting was wrong or something.
Here are my info.plist setting:
<?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>AppStoreFileSize</key>
<integer>4329818</integer>
<key>ApplicationProperties</key>
<dict>
<key>ApplicationPath</key>
<string>http://myserver.com/Apps.ipa</string>
<key>CFBundleIdentifier</key>
<string>com.app.app</string>
<key>IconPaths</key>
<array>
<string>http://myserver.com/icon.png</string>
<string>http://myserver.com/icon.png</string>
<string>http://myserver.com/icon#2x.png</string>
<string>http://myserver.com/icon-72.png</string>
</array>
<key>SigningIdentity</key>
<string>CSR Certificate</string>
</dict>
<key>ArchiveVersion</key>
<integer>2</integer>
<key>CreationDate</key>
<date>2012-10-10T09:02:39Z</date>
<key>Name</key>
<string>AppName</string>
<key>SchemeName</key>
<string>AppName</string>

You code needs to look like this
<?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>http://www.example.com/test.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.name.name</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>Name</string>
</dict>
</dict>
</array>
</dict>
</plist>
Remember to change:
Bundle Identifier= <string>com.company.name</string>
Installer Name= <string>Name</string>
Ipa Download= <string>http://www.example.com/test.ipa</string>
Change the <string>http://www.example.com/test.ipa</string> to where ever you located you ipa for install.
Create you Install.plist or Start.plist what ever and go into mobile safari and type: itms-services://?action=download-manifest&url=http://www.example.com/whatever.plist
And it should go a head and download it there may be some bugs when downloading.
Remember that the ipa needs a valid UDID= unique device identification.
Hope this helped.
Best Regards Silas.

Since iOS8, un-encrypted plist downloads are not accepted anymore.
So you need a valid ssl certificate and change the scheme to https. You can test this with amazon s3 for example.

you have to use Https for all urls in .plist file

Related

Download inhouse app from another app programmatically

we have a lot of inhouse apps and want an app like AppStore. We did a demo. We can open installed apps but apps,not installed on iPhone, can't be downloaded from our servers to the iPhone.
We do:
if([UIApplication sharedApplication] canOpenURL:..] == false){
NSString *schemelink = [NSString stringWithFormat:#"itms-services://?action=download-manifest&url=%#",**plist_url**];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:schemelink]]
}
The things that we do to find the reason:
Copy-paste plist url to the Mac Safari and I check the plist and it's correct everything(ipa links and others). They all at the same path.
Copy-paste just ipa url. It started to download on Mac.
Copy-paste ipa url with itms-services://?action=download-manifest&url=, it says
There is no application set to open the URL ......ipa
Search the App Store for an application that can open this document, or choose an existing application on your computer.
How can I solve it?
.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://....../AppName.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.company.AppName</string>
<key>bundle-version</key>
<string>1.3</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>AppName</string>
</dict>
</dict>
</array>
</dict>
</plist>
Your plist file should be hosted on HTTPS SSL enabled serve only otherwise you can not install it.
I have attached a sample manifest.plist file with sample data, you can modify with your original one.
<?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://127.0.0.0/app/App.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>url</key>
<string>https://127.0.0.0/app/icon57.png</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>url</key>
<string>https://127.0.0.0/app/icon512.jpg</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.companyname.appname</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>Your application name</string>
</dict>
</dict>
</array>
</dict>
</plist>
Place all the following files in same directory on your server.
App.ipa
icon57.png
icon512.jpg
manifest.plist
Your download URL should look like following.
itms-services://?action=download-manifest&url=https://127.0.0.0/app/manifest.plist
Example Click here to download App.
Also make sure your server supports MIME Type of application/octet-stream for ipa and text/xml for plist.

Dynamic link in ios ota manifest

I'm working on an application where I can use over the air deployment for iOS applications.
At runtime generated .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><![CDATA[https://myapp.com/file/d8A5s]]></string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.myapp.example</string>
<key>bundle-version</key>
<string>1</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>App Name</string>
</dict>
</dict>
</array>
</dict>
</plist>
You'll notice that the <url> tag is not a direct link to the file, it is a url that sends a redirect with a direct link to the file. When I change these lines to a direct link to the file, the installation succeeds.
<key>url</key>
<string><![CDATA[https://myapp.com/file/file.ipa]]></string>
I want to do this without a direct URL to the file in the manifest.
The content type https://myapp.com/file/d8A5s returns is application/octet-stream and I am able to download the file when I use my desktop browser to navigate to the URL.
Any help would be appreciated and I'd be happy to provide additional information.

manifest.plist file is displaying only as text

I uploaded a plist file but when I go to that link to get the ipa, the plist file is only displaying the text, and not doing anything else. Something is going wrong here and I don't understand what.
<!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>http://rentaid.info/clarktest/Clarktest2.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.rentaid.testapp</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>Clarktest2</string>
</dict>
</dict>
</array>
</dict>
</plist>
you cannot just open the manifest file via standard HTTP scheme becasue nothing useful will happpen. you need to create a link to your manifest file with a special scheme, and that link can work on the device only.
the link with the custom sceme should look like this:
itms-services://?action=download-manifest&url=https://rentaid.info/clarktest/manifest.plist
IMPORTANT: make sure your server has proper SSL certificate, because on iOS7 or above the device won't download the IPA file, if the hosting server has no SLL certificate.
Just uploading the plist file and try to open up willn't help you to get the app. you should hyperlink like this
<a href="itms-services://?action=download-manifest&url=http://example.com/Application.plist">
Install This App
</a>
Check this out tutorial 1
Check this out tutorial 2

Cannot distribute in-house iOS App "Cannot Open Page" Error iOS 7

<?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://app.company.com/myapp/app.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.company.*</string>
<key>bundle-version</key>
<string>1.0.0 (1.0.0)</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>Conference APp</string>
</dict>
</dict>
</array>
</dict>
</plist>
I am trying to access manifest file, to download the App on iPhone.
I point it to the manifest file but it does not seems to read it on the iOS device:
Download
The url parameter of the itms-services link needs to be properly escaped (you can't use a / character, has to be %2f) and it needs to be an absolute URL instead of a relative URL.
Try changing it to:
Download ProjectA Reports
The path was incorrect. There's not difference between this file for IOS6 and IOS7

ERROR whitelist rejection on phonegap, need plist format

I've researched that the whitelist rejection error requires
<key>ExternalHosts</key>
<array>
<string>*</string>
</array>
in your plist file. I'm building this app with phonegap build (not with XCode) and I need to know where in the plist file this key goes. Currently I have it as follows:
<plist version="1.0">
<dict>
<key>items</key>
<array>
...
</array>
<key>ExternalHosts</key>
<array>
<string>*</string>
</array>
</dict>
</plist>
But this is still throwing the same error.
Are there any modifications I need to make to my app in tandem with this change?
I did put that:
`<?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>KeyboardDisplayRequiresUserAction</key>
<true/>
...
<key>BackupWebStorage</key>
<string>cloud</string>
<key>ExternalHosts</key>
<array>
<string>dl.dropbox.com</string>
</array>
<key>Plugins</key>
<dict>`
into Cordova.plist file.

Resources