Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How an iOS app is installed on a device

Tags:

xcode

ios

ios7

I'm interested to find out the technical details of how an iOS app installs on a device. Let me explain my situation,

  • I have my app's .ipa and .plist on a server. I made a download webpage that uses the itms-services to point to the .plist file.
  • I try to install the app on my friend's iPhone that is added to the project's provisioning profile.
  • The app downloads to his device but stays eternally in the waiting state.

I would like to know how an app installs, is it added to a queue? If one app that has an installation problem fails to install, how does this affect other apps that I want to install. More specifically, I want to know what does the 'waiting' state mean?

This problem does not only occur on my friend's iPhone, it also does the same on my iPhone. However, my iPhone has a more serious problem, I can't install any apps, because all apps go into the waiting state.

My friend's iPhone (iPhone 5S) has iOS 7.0.4, I have a iPhone 4S with iOS 7.0.3.

EDIT 03/12/13 - 09:30

Here's is the iPhone Configuration Utility console output during an attempted install.

... itunesstored[102] <Warning>: LaunchServices: installing placeholder for **.***.****.***********
... installd[62] <Notice>: 0x2c3000 handle_install_for_ls: Install of "/var/mobile/Library/Caches/com.apple.itunesstored/AppPlaceholders/4703876283909900519.app" requested by itunesstored
... installd[62] <Notice>: 0x2c3000 MobileInstallationInstall_Server: Installing app **.***.****.***********
... installd[62] <Notice>: 0x2c3000 install_application: Installing placeholder
... installd[62] <Notice>: 0x2c3000 MobileInstallationInstall_Server: Staging: 0.07s; Waiting: 0.00s; Installation: 0.24s; LS Sync: 0.00s; Overall: 0.38s
... filecoordinationd[128] <Warning>: sandboxing denied subscription to progress on category **.***.****.*********** (bundle id (null), ******-****-*****-*****-*********)

I guess that the sandboxing denied subscription to progress on category part and the (bundle id (null) are the relevant errors, but I can't find any information on them on Google, any ideas?

EDIT 03/12/13 - 09:39

I would also like to add that I get these same errors for any app that I try to install from the AppStore on my iPhone.

EDIT 03/12/13 - 09:53

Also, the app installs just fine via ad-hoc on an old iPad running iOS 5.1.1.

EDIT 03/12/13 - 16:18

After making a backup first in iTunes, and then doing a Settings -> Reset -> Erase all content and settings, the app was installed successfully! Before doing this, neither my friend nor I could install any apps (not our app either), but now we both can install our app or any other app on our phones. Since this is not an ideal solution, I don't know what the problem was, I don't know what "Waiting... really means, I want to leave the question open.

like image 562
paulvs Avatar asked Dec 02 '13 19:12

paulvs


People also ask

How do I know if my iOS app is installed?

In App store, click on the user icon top right of screen. Select "Purchased", then ensure that "All" is selected. Scroll down that list - Apps will either have an "Open" button (if they are installed), or a cloud download icon if they are int installed but eligible to be installed on that device.

Can you install an app on iPhone without App Store?

Sideloading Apps Maybe the simplest way to add apps to your iPhone without using the App Store is by using a technique called sideloading. Sideloading is the name used for installing apps directly on the iPhone rather than using the App Store.

How does an iOS app work?

In iOS, apps are event-driven. The control/object (e.g. UIButton) listens for certain events (e.g. touches and taps). When the event is triggered, the object calls up the preset action that associates with the event.


2 Answers

I personally use iResign to resign the ipa with the correct provisioning profile. https://github.com/maciekish/iReSign

That saves me from keep changing the provisioning profiles in the xCode project and build a new archive. The ipa can be resigned multiples times.

I would recommend before signing the file have a look at the provisioning profile by opening it in text editor and make sure the UDID for the device you are trying to install the app on is included in the file.

Once you have the ipa use Beta Builder to generate the plist file along with a nice html file which can be uploaded to the ftp. http://www.hanchorllc.com/2010/08/24/introducing-ios-beta-builder/

So all the user has to do now is visit a url on their phone to download an app.

You shouldn't have any issues with this method other than your internet connection dying.

like image 189
Omer Janjua Avatar answered Oct 19 '22 03:10

Omer Janjua


Normally if a adhoc install via the web fails its either due to invalid provisioning set to the ipa, invalid entitlements set or timeouts due to internet connection.

I would check to see what entitlement settings you are using in xcode. Get task allowed should be set to false.

If its not entitlements I would log into itunes connect, make sure your distribution profile has the correct devices set to it. Delete your local distribution profile, download the profile from itunes connect and reinstall into your keychain. This is to avoid the chance that old profiles are still being referenced.

A quick and easy way to install ipas would be to use the iphone configuration tool like paul said. I think there was a bug with mavericks but that might be fixed now. Worst case scenario you can drag and drop the ipa into the device via organiser.

like image 41
VeganTofu Avatar answered Oct 19 '22 01:10

VeganTofu