Xcode6 and ios8 app enterprise distribution - ios

In xcode 6 when I create an ipa for distribution enterprise is no longer created the file .plist be included in the website for distribution.
Also on some ipad when I open a link "itms-service" the app is installed normally, in others nothing happens and in others I get an error message. Documentation of the apple method itms-service has disappeared (it seemed to me that there was a paragraph in the distribution app guides), safari will no longer close automatically when launching the installation of an app.
Do you think that is still valid installation via web page or apple has decided to remove it giving space to other methods (MDM)?

If you need to distribute apps via OTA with both enterprise or developer you can use you old .plist files.
You have to edit the .plist file name in both the .plist and your "youSiteName.html".
The plist has to be edited on 3 places:
<?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://MY_SERVER_NAME/MY_APP_FOLDER_NAME/MY_APP_NAME.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>MY_BUNDLE_IDENTIFIER_FROM_XCODE_PROJECT_SETTINGS</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>MY_CUSTOM_APP_NAME</string>
</dict>
</dict>
</array>
</dict>
</plist>
So far I have tested this both on ENT and DEV accs on the following devices:
iPad 2
iPad 3
iPad Air
From iOS versions 7.1 - 8.1 it always worked with Xcode versions 5.1.1 and 6.0.1. Hope this helps you for the cases that don't work in your problem.
I really don't know if it is still valid but this approach works. Xcode 6.0.1. had bugs... this may have been one of them. Personally I haven't been looking into why apple did it because of the fact that nowhere in the docs & release notes was stated that the ENT OTA server has to be with an SSL certificate (upon iOS update). I found out by goolging. One developer tried by force to solve the problem and ended up losing 5 work days to find it on google. Therefore, just wait it out.

Related

How to show the icon and progress when installing an app on iPhone / iPad using a plist file, correctly?

I'm working on an own AppStore website that is hosting various enterprise apps for a company. So far everything works, except for the suggested way of downloading apps on Apple devices.
The problem is, I don't archive the same effect like apps that are getting installed from the official Apple AppStore. I don't see the icon of the app on the home screen until the app is installed and I don't see any progress when the app is downloading, only when the app gets installed. The download and install of the app itself works.
When one chooses to download an app to his/her iPhone, there is a redirection to the itms link like so:
itms-services://?action=download-manifest&url=https://example.org/appdistribution/iOS/myApp/meta.plist
My meta.plist file looks like so:
<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://example.org/appdistribution/iOS/myApp/app.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://example.org/appdistribution/iOS/myApp/icon.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.sample-company.myApp</string>
<key>bundle-version</key>
<string>3.0.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>MyApp</string>
</dict>
</dict>
</array>
</dict>
</plist>
This is what it looks while the app is downloading:
This is what it looks when the app is installing:
Once it's installed the icon appears.
I tried several image resolutions like 57x57, 72x72, 100x100 and 256x256. I've tested it on an iPhone and an iPad. I suspect the missing progress on the downloading process is a subsequent error that is caused, because the image cannot load.
The really strange part is that I could swear that it once worked before. This looks so trivial, yet I'm not sure what this is caused by. Is there any good example that just works?
I guess what you are expecting is to see your app icon with that dimmed effect iOS applies until it has been installed, is that right? If that's correct, I'm fairly certain that is a feature available only to App Store downloads.
To validate that, I have tested installing my app both with TestFlight and with another internal distribution system (AppCenter) and in both cases I saw the same as yourself. Apple's placeholder icon while the application was being downloaded and installed, my application icon once installation finished.
You can use BetaBuilder to generate the plist file :
https://github.com/HunterHillegas/iOS-BetaBuilder

iOS Beta Testers Can't Download App Distributed OTA

I've been using "OTA" distribution of my ad hoc distribution for beta testing for years. It's always worked. Last version was in May. Worked great.
The general idea is that the .ipa and .plist are on our server. I have a page with a itms-services: link to the .plist, which contains the URL of the .ipa, which is also on our server.
Just uploaded a new version for our beta testers. I can download it to my iPhone and iPad OTA just fine. Beta testers say they click the link on our website and nothing happens at all. When I do it, I get the normal message asking me if it's OK to install the app. I answer yes, then the app is downloaded and everything works great.
I have connected my iPad to XCode and removed all mobile provision files and the app. Then I did an install from the website and it worked fine. But every single one of my beta testers say it doesn't work. They don't even get the prompt that asks if it's OK to install. They say nothing happens when they tap the itms-services link.
I've confirmed that all their UDIDs are in the provisioning profile.
Here's what the itms-services link looks like:
Install Application
Here's what the .plist looks like:
<?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://www.example.com/example.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.example.example</string>
<key>bundle-version</key>
<string>3.3.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>Example</string>
</dict>
</dict>
</array>
</dict>
</plist>
I've substituted "example" for my domain and app; there are no spaces in either name (others have mentioned that problem in other questions -- just wanted to clear that up).
I was finally able to find an answer here which links to this blog article. Turns out this is a bug in iOS 8 that Apple hasn't bothered to fix. iOS 8 will not download an ad hoc distribution when there is a previous version of the app already installed (or perhaps, installed before the iOS 8 upgrade). It works if there's a developer certificate on the device, which is why it works for my devices even though I removed the provisioning profiles from the devices.
EDIT: This is fixed in iOS 9, but I find that iOS 9 users must first delete the released App Store version of the app before installing the beta. Other than that, Ad Hoc distribution is working great in iOS 9, especially with the expansion of the number of devices that can be registered in a provisioning profile (100 iPads, 100 iPhones, 100 iPod touches, instead of 100 total devices).

Install In-House iOS App wirelessly with manifest.plist does not work anymore with iOS 8

We have In-House distribution scheme, which includes both .ipa and manifest.plist files placed on a web-server. A simple web-page allows user to choose the app version and tap to install it. When user taps on the link in Safari on iPad with iOS 8, it asks would he like to install the app and after pressing "Install" do nothing. No errors or installation progress icon...
This scheme we used for year before and I could confirm it works with iOS 7 as well with iOS 8 beta (at the moment also). It doesn't work with iOS 8. It seems like iOS 8 blocks it. Does anybody already faced the issue or knows how to around it?
The server has MIME types set:
- application/octet-stream ipa
- text/xml plist
The manifest.plist file is below:
<?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://example.com:8079/foo.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.example.fooapp</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>Example Corporate App</string>
</dict>
</dict>
</array>
</dict>
</plist>
You can also just change the bundle id in your Manifest.plist file like:
<key>bundle-identifier</key>
<string>com.example.fooappNew</string>
Without regenerating the provisioning profiles.
Same problem with my App. Fixed by changing App bundle name, creating new App Id, and building new provisioning profile.

iOS Developer Enterprise program - can device users install the app directly?

I wish to enrol in the iOS Developer Enterprise program. I cannot find an answer to my question - and for that matter Apple themselves aren't sure when I ask on the phone.
My question: can I deliver an app over-the-air directly to the target device, if that app is developed using the iOS Developer Enterprise program?
Ideally this is the case, and I can deliver the app to "road warrior" colleagues who do not wish to open a laptop and start iTunes to install an app on their iOS device (almost always an iPhone).
What is your experience?
This is possible. We are doing the same thing in the company I work in.
We put .ipa and .plist file on the server and provide link to .plist file. When user clicks on the link from their mobile device they are prompted to install application.
The only necessary thing is to include UDIDs of all devices to the provisioning profile with which you are signing your application.
This is the content of the .plist file:
<?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://location of your .ipa file</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>your.app.identifier</string>
<key>bundle-version</key>
<string>3.5.2</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>app_title</string>
</dict>
</dict>
</array>
</dict>
</plist>
And then add link to your plist file:
<a href="itms-services://?action=download-manifest&url=http://location-of-plist.plist">
Download application</a>
I think, here is limit for number of devices you register per licence. – preetam Aug 16 at 12:46
Yes, 100 devices per licence. – JPetric Aug 16 at 13:04
iOS Developer Enterprise program allow you to distribute "In-House" apps to unlimited number of devices. There is no such 100 devices limitation.
From Distributing Enterprise Apps for iOS Devices: About deploying apps (which requires Apple developer login) it describes 4 different ways of distributing Apps including over the air:
Distribute the app for your users to install using iTunes.
Have an IT administrator install the app on devices using iPhone Configuration Utility or Apple Configurator.
Post the app on a secure web server; users access and perform the installation wirelessly.
Use your MDM server to instruct managed devices to install an in-house or App Store app, if your MDM server supports it.

Using launchd on IOS to restart app

I am using some iPads in a museum exhibition, running an app developed by others. Even though we've covered the Home button, I'm finding that occasionally the app crashes, leaving the user at the Home screen. From here they can access other unauthorised apps.
The museum is not averse to jailbreaking the iPad if that will give us the solution we require, so I have been doing some research into the idea of using launchd with the KeepAlive tag and putting the .plist file into the /Library/LaunchAgents directory to prevent the app closing or re-spawning it if it crashes
So far I have had success making it work with the default apps that come with the iPad and also Cydia installed apps but I can't get it to restart the app that we want. I have tried it from the /User/Applications directory and also /Applications, which someone suggested might make a difference but no joy. Can someone suggest a possible solution or am I wasting my time? I've inserted the XML from my plist file below.
<?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>Label</key>
<string>com.MVFieldguide.launchd</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/Field Guide 2010.app/Field Guide 2010</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<true/>
</dict>
This won't work because App Store applications are not kept in the Applications folder. I can think of two options.
Install AppLinks in Cydia. This will create symlinks of every App Store app and puts them in /var/mobile/AppLinks. Then in your plist file put the path to the application as
/var/mobile/AppLinks/Field Guide 2010/Field Guide 2010
Instead of installing the app onto the iPad conventionally, you can get the ipa from Xcode and extract the .app bundle. Then manually install it into /Applications/ and you'll be able to use your launchd plist the way you have it.
I recommend the first option because it will allow you update the app without manually putting the .app bundle into the Applications folder. Using the first option won't change your workflow for updating the app at all.
Also, just be aware that if you do this, you'll have to remove the plist before updating the app to quit it, as I don't think you can update an app while it's running.
iOS 6.0 may have some kind of fix for locking the device into a mode... I DON"T KNOW (NDA)
a hacked iOS 5.1 can still do the following:
user the app with the bundle identifier....
you can open calculator with com.apple.calculator.... no need for folders!
here is the script you put into launchd folder...
Install the Open app from cydia first so you can use the "open com.apple.calculator" terminal command
<?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>Disabled</key>
<false/>
<key>Label</key>
<string>com.perceptdev.tink</string>
<key>ProgramArguments</key>
<array>
<string>open</string>
<string>com.orbitusrobotics.thegatekeeper</string>
<string></string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>10</integer>
<key>WatchPaths</key>
<array/>
</dict>
</plist>

Resources