What's the point of the provisioning process Apple makes you complete in order to test your apps on an iOS device? - iphone

Today I walked to through the process of getting my iOS device connected to my computer and running my app. To do that, I had to...
Obtain a developer certificate
Assign the device to my team
Obtain my app ID
and create a provisioning profile
While I understand the process and was able to successfully get my device connected, I don't at all understand the point of all this. Can anyone explain the point of each step in that process and why Apple has us do this?
Thanks so much in advance for your help! It's important to me to understand this stuff at least at a high level.

Apple just wants to torture the developers :)
Joking aside, I don't know why. There's no official explanation why you need those steps, here's my speculation.
Apple wants to make sure that
only the developer registered to Apple can freely install
onto his or her i-Devices
applications of his or her own applications .
This is presumably to forbid the distribution of apps outside of Apple's own App Store. If any of these three steps is not required,
it's easy to imagine how you can "abuse" the developer status to install lots of apps without going through App Store.
This explains why you need to do 1, 2 and 3. In order for XCode and the i-Device itself to check it, you need a provisioning profile. This explains the point 4.

As a rough explanation.. the device only runs signed apps. Your developer certificate (along with your private key) signs your app so it can run on your device. (or other development devices of your nomination)
If you beta test, your Ad Hoc certificate + provisioning profile will allow all devices with their UDID in the profile to run that app. The beta testers don't need your developer certificate, just their device UDID embedded in the profile.
When you distribute to the app store, you use a Distribution profile (along with the team agent key), and that needs additional signing (co-signing?) from Apple before that code can run on the device. Because Apple signed it, the device doesn't care what UDIDs are allowed.

Apple has made a business decision to maintain tight control over developers and apps both during and after their app development. This means that at any given point in time, they have a tight connection between a developer, app, devices, and the app's users, be it through the adhoc distribution mechanism, or through purchases that users make in iTunes Store. We may only speculate what they internally thought that the goals and benefits here are, but as the market has shown, the outcome is beneficial to all parties, as they have shot from oblivion to one of the most popular smartphone platforms in a few years.
One quite straightforward goal is that they intend to maintain control of the distribution channel and make sure the app cannot be officially distributed through any side channels and they have control over all the money that moves, hence the 100-deviceIDs-per-developeraccount limit (so you couldn't distribute your app outside Apple's channel, yet the 100 devices should be sufficient for closed testing).

Related

How best to share iOS app progress with customer

I'm making an iOS app for a client, and need to share my progress with them in a convenient way.
At the moment I know of two options:
add their device to my provisioning profile then send an IPA to them
send an app through to them, built for the simulator, and have them run that directly
Neither of these are ideal, as the simulator doesn't give the full experience, and getting UDIDs off non-technical people can be painful.
Are there any other options I should know about?
I use testflight - iOS beta testing on the fly. I used to battle with the same problems you mentioned but once I started using testflight, I didn't look back. What testflight allows is -
You can add the specific customer to send the IPA to.
Progress reports
No need for your customer to go through the complicated Provisioning certificate
No need to register your device
You can even create groups and send different builds to different groups. Like "Test Group" would get more bleeding edge builds whereas the customers might get a more stable build.
Free over-the-air beta distribution. Apps are installed in one tap over-the-air and users will be notified of future builds.
Recruitment: Promote your beta app and select new users that sign up
Works within Apple’s guidelines and rules for ad hoc provisioning and device # limitations
You don’t need to jailbreak or alter your phone.
It is not a replacement for Apple’s ad hoc provisioning profile and device limitations.
Hope this helps...
PS: I do not work at testflight & this is not a promo. Just appreciating a good product...
UPDATE: Recently test flight has launched TestFlight Live, pretty awesome for tracking launched apps. This is all with detailed flowcharts et al. Definitely worth a dekko. Defunct after Apple buying TestFlight (or available in different name)
LATER UPDATE: Apple has bought TestFlight. Links updated.
https://testflightapp.com takes a lot of the pain out of circulating iOS app builds. It's free and it's worked very well for me.

IPhone Distribution - Multiple Devices - Not App Store

I am an individual developer who has written an ipad app for a company. They have bout 30 devices they want to put it on, so my current plan is to create a provisioning profile that contains all the UDIDS for all those device. So here are my questions:
I surely will miss at least one device and have to either:
a. Create a new distribution provisioning profile for that device
or
b. Add it to the existing provisioning profile, in that case does it void the others
Could I submit something to the appstore that is obviously for internal use and password protect it? The company probably isn't willing to do an enterprise account, and I don't want to maintain it by getting them a new provisioning profile every year when they expire. Any ideas here?
Did you consider Ad Hoc distribution? That would allow you to add the app to a new device without having to make a new provisioning profile.
I haven't done it myself, but this looks useful:
http://www.iphonedevsdk.com/forum/iphone-sdk-development/35818-unofficial-ad-hoc-distribution-guide.html
I love TestFlight for small distributions. Also, see the Apple enterprise distribution documentation. It goes over signing and wireless distribution.
Rather if this is going to be used by the company for a longer period of time then I would advice you to go for iOS Developer Enterprise Program.
The main highlighting lines about Enterprise Program is
"Gain access to resources that will help you develop proprietary, in-house iOS apps that you can distribute to employees or members of your organization."
So you can distribute the app among your company employees directly without need to submit it on app store. That would surely be a better option.
For more details on iOS Developer Enterprise Program, you can check out this link..
iOS Developer Enterprise Program

Ad-hoc style distribution for an iPad app?

I'm talking with a client who is abroad and I'm wondering whether I will be able to send him versions of the iPad app for testing before it's on iTunes.
Is there a solution (e.g. Ad-Hoc?) I could rely that doesn't require jailbreak or anything?
If so, could you please provide me with a link to a guide?
Thank you !
Yes Ad-hoc is what you need, basically you will need to associate your client device identifier (UDID) to a certificate that you will use to sign application.
This is a standard procedure (no jailbreak required) that is fully documented on Apple provisioning portal in User Program Guide (you have to apply ($99) for the developer program and be logged to access this... and it is limited to 100 devices)
Another good thing is to use an "Ad-Hoc" updater such as HockeyKit to ease your client updates and installation procedure...
Yes, indeed, there is an ad-hoc distribution method:
here is its mention on the Apple Developer website. As far as details, I think you have to be in the developer program in order to get direct documentation for that, and sadly I allowed my developer account to lapse. A few key points can be found here
Essentially, you can distribute to up to 100 other iOS users who have your group's apple developer credentials installed on their phone, and the app will remain live for 90 days
Essentially, it's the same headache on the remote side with certs, keys, etc... that you have to do with XCode when developing on the device, but you can put the app on a website somewhere where the remote party can install it on their phone.
EDIT: I found this guide that is presented on a forum if you want to look through the steps.

Is it possible to test an app on a device (ipad/iphone) without having the device connected?

This is NOT a question about avoiding to pay apple, my boss has no problem paying the $99 enrolling fee to do the signing certificate stuff. Jailbreaking is not an option.
I have a customer that I am developing an app for, and they want to test/preview the app on their device, before traveling to the office to have a meeting about what to do with the app next.
Q 1. After doing research and finding guides on how to test on a device (http://mobiforge.com/developing/story/deploying-iphone-apps-real-devices) they all seem to say that the device has to be connected in order to be tested on is this the only way?
Q 2. Also, if I do get them to come into the office and set the device up to be tested on, will i be able to test it in the future without it being connect? Will I be able to somehow send them it?
Q 3. How exactly does distributing work, do you make a private app or something so only the customer that is having the app developed can use it, and not have it on the app store?
Thanks in advance for any help/advice you can give or a link to point me in the right direction.
Here's the short of it.
You get their UDID for their device and get a certificate from Apple (after paying the subscription).
Then you build the app with the certificate for the device (not simulator) target.
The user then installs the certificate. (they can just drag-drop on itunes).
I believe the app should be zipped (like during submission to the store) but it's pretty much the same process as the certificate.
If you need links, I can provide them, but this is how it works.
In the future, if you build with that certificate, the user only has to re-install the application. If the user is not connected to a Computer, you won't get Debug information, but they can run it to their hearts content.
Certificates expire after a while, so you'll have to get a new one every once and a while. But it's not that much of an issue.

Is it possible to install third-party apps on an iPhone? If not, how is it controlled?

Can I go around Apple and offer applications to users, or do they force you to go through them? How? Just legally?
Aside from the App Store (and jailbreaking), Apple provides two official routes to install applications on the iPhone.
Enterprise Distribution: designed for internal users of a company
Ad Hoc Distribution: allows your app to be installed on up to 100 iPhones
Source: http://developer.apple.com/iphone/program/distribute.html
For phones that are not jailbroken, distribution rules are enforced by the iPhone's code-signing system. The phone won't run any apps that aren't signed by Apple, and the only way to get an app signed is either to get it into the app store or to use ad-hoc distribution.
Ad-hoc is effective but time consuming for more than a few devices, in that you have to get the unique device ID for each device you want to distribute the app to. You then sign the app for that device and send a copy along with a provision file. Some batching is possible-- you can get up to 100 devices in the same ad-hoc build. But if/when Apple finds out you're doing it, they'll close your iPhone developer account (for violating the rules) and then you won't be able to generate any more provision files.
One developer tried using the ad-hoc approach last year when Apple rejected their app (Podcaster). They claimed to have sold something like 1100-1200 copies before Apple shut them down.
Jailbroken phones don't have this limitation, but it's up to you to determine (a) whether the market is big enough and (b) whether enough of those people will be willing to pay for your app. I don't know the answers-- it could well be "yes" to both-- but don't just assume they're true without investigating enough to make a reasonable prediction.
If you wish to distribute applications to phones with out going through the App Store, you must sign each copy of your application for a specific phone handset. If you need more wide spread distribution, all your client phones must be "jail broken". Once a phone is jail broken, it will accept any application for installation.
You can offer applications through Cydia for jailbroken iPhones / iPods. Cydia uses a system similar to Debian's apt. Basically allows users to add custom "sources" (repositories) and install applications provided by those sources.
Obviously this is not supported or approved by Apple since it circumvents the App store and their App approval process.