Multiple iPhone Developer Accounts on One Mac? - iphone

I have searched but cant find this question anywhere. My wife and I are about to take on iPhone development and we've only got the funds to purchase one iMac 24" to do this. Anyone out there with iPhone development experience know if two different Apple developer accounts can be profiled on one development Mac? Not only via the developer program but also does the XCODE (I believe it is) IDE support it?
What we're hoping to be able to do is that I can log in with my profile and developer/debug, etc my iPhone application and her do the same under her own profile (not seeing mine and vice-versa). Time sharing wont be an issue as I work from home while she works away from home and we'll be able to figure out that part no problem.
Please understand that we're both completely new to the Mac, OS X as well as the iPhone development arena and so we have no idea if this is possible. If not our second option would be to purchase two Mac Mini's (keyboards and mice too) and figure out some KVM to each of our existing PC's monitors that we already have, and develop that way. We would rather not and just share one iMac between two developer accounts and IDE profiles.
UPDATE: My wife and I invested in a 24" iMac from Best Buy utilizing a 12 month no-interest offer, which made it the choice over the 20" iMac. Its got plenty of RAM (4G out of 8G max) and HD space (640G) and we're getting used to the MAC OS X and will begin developing soon. We've created two OS X accounts, to keep settings and such separate. Either Windows moved closer to OS X or vice-versa as things on OS X seem quite intuitive and we were highly impressed at the whole un-box and setup time of about 8 minutes! So far, so good.

Sure. Just make two user accounts on the iMac. Easy!

I have two iPhone developer accounts that I work with, so instead of two accounts and two people, it's two accounts and one person. Unfortunately, being the same person both accounts ended up with the same Agent name (and it appears nearly impossible to change this - my case requesting the change has been open with Apple for months).
This resulted in two sets of keys and certificates and the keys have the same name. This causes problems in Xcode, both in the Organizer and in code signing. I filed bugs on these 6635822) some time ago, but ended up just now finding a work-around for both problems. I wrote it down in a blog entry in case it'd be helpful to others.
http://geekanddad.wordpress.com/2009/07/25/work-around-for-multiple-iphone-dev-account-and-code-signing-and-xcode-organizer-problems/
Update: Jan 2010: it looks like Apple has addressed this with their certificate generation - User Names now seem to have a number appended to them in parenthesis (e.g., My Name (A340D)). I have not tried to regenerate certificates on previous accounts to see if they get this hash added, but newly created ones are having this added.
Update: Feb 12 2010: Yes, if you regenerate the certificate on the account it appends a number to the name and this whole issue is a non-issue. So you can just have one keychain and all your certificates there now - thanks apple!

That's one way. You can share the single copy of the /Developer tools, but each have your own login name, preferences, and keychains.
If you share the same Mac OS X user account, but have two ADC identities, on the Safari side you just have to make sure you log out of the ADC website when you trade places.
On the Xcode side, you'll need to add both Developer Certificates to your keychain, and both Provisioning Profiles to Xcode's organizer. I recommend that you each have your own phone, if you're going to have separate Provisioning Profiles and Developer Certificates.
The crucial part is that for each project you work on, you need to set the Code Signing Identity to the full and exact identity for the person who owns it. The projects come set up with a wildcard identity of "iPhone Developer"; you need to change it to "iPhone Developer—John Appleseed" to use your signing certificate and profile, and your wife has to do the same on her projects.

Also, if you copy an app from one developer account and try to use the identity and provisioning profile associated with the other account, it won't work. You'll have to quit XCode and edit the project.pbxproj file which you'll find inside the .xcodeproj bundle. Find every term next to CODE_SIGN_IDENTITY or PROVISIONING_PROFILE and delete the value in double quotes (leave the double quotes). Then restart XCode and select the provisioning profile in the Get Info's Build tab for both the main object in the upper left of Groups and Files, and also any and all Targets. Then it should work. Apparently, when an app has been build using a provisioning profile for one ADC account, XCode doesn't fix up all the information necessary to allow you to change to a different ADC account.

Related

Developing iPhone app on multiple Macs

This is probably super dumb, but can I use multiple Macs with different development profiles to make apps? If I take my friend's Macbook on travel, who also is a developer and has his own development profile, can I use my own developer profile on it to work on my apps without interfering with his? Thanks.
For sure, as long as you install your provisioning profiles and emit new signing certificates.
I'm not aware of a way to export custom behaviors of other Xcode 4 configs, but that should not be a big problem.
After your trip is over, you can delete you provisioning profiles.
You can share a single project on multiple Macs (each one having their own signing identity, or sharing the same Keychain items if they're both yours).
You can also use a single Mac to work with multiple signing identities.
I do both regurlarly as I'm enrolled in two companies that develop iOS apps; in both of them we're at least 2 developers having our own machines.
For your part, if you're borrowing a friend's Mac, I highly recommend to clone your Keychain's private key and certificates into this "new" Mac where you'll create a new user account, then delete this user account when you'll give it back.
(Posting as another answer as it's not quite the same subject)
In any case, you'd better use some kind of source control such as Git (included with XCode) or Mercurial. Create a working copy of your project when you're off with your "roadwarrior" Mac, then merge when you come back.

iPhone Provisioning: What's it all about?

Grepping around, I see that I'm not AT ALL alone in being... challenged... by the process of setting up an iPhone app, getting it to run, giving it my testers, and so on.
I've gotten it to work. Somehow I emailed a copy or two to testers, and eventually got my li'l app into the store, and that was fine.
But I can't say a really, deeply understand it! (And I don't do iOS dev every day. Even now my recollection of what I did is kind-of hazy.)
I'm moderately capable of understanding things, if presented, well, you know, in a way I can understand.
Can anyone point me to a crystal clear explanation of what provisioning actually is?
I feel that if I understood it, the recipes to do it would be obvious.
Thanks!
Development provisioning profiles sign your application, and allow the phone to know it's OK to run. These days, XCode automatically makes a Development Profile for you (the "Team Profile").
The other kind of profile, when you are talking about other people running you app, is a Distribution Profile. You need a Distribution profile for either giving your app to the store, or for giving to beta-testers.
The profile is what allows other people's phones to know it's OK to run your app, basically it includes a list of device ID's approved to run that application on the phone in question, along with being signed so that the phone knows the whole thing is valid.
If you read advice around the web concerning distribution, it's easy to get confused because things used to be a lot harder. You used to have to send Distribution certificates separately from your app to beta testers. These days the certificates are included in your app bundle so you don't have to worry about that.
Furthermore, sending an AdHoc build can be all kinds of unpleasant - for testers using Windows. These days, the absolute best way to do beta testing is have a link on the web that uses the Enterprise ad-hoc deployment feature, to let a user with iOS4 or higher automatically download and install your application with no iTunes or copying work at all. In fact I would at this point refuse to use beta testers running windows who were not on iOS4 or higher.
The guide link posted should have a section about the enterprise ad-hoc, but basically the way it works is there's a small plist file the phone downloads, that has a link to the IPA file containing your app. You point the phone to a specially formatted link to the plist file and the phone fetches the application directly.
All of this is predicated on using the "Build and Archive" option for building any ad-hoc distribution build. You should do that anyway because it also saves out a symbol file for you to use in debugging crash reports.
EDIT:
Here's a little more detail on enterprise deployment (which works for any registered developer, not just Enterprise registered developers):
http://jeffreysambells.com/posts/2010/06/22/ios-wireless-app-distribution/
The Developer Program User Guide should be helpful.

Clarifying questions about provisioning profiles & My specific problem

I'm having serious problems getting one of my app's to run on other people's iPhones. Another app of mine works fine, so I suppose I am at some level capable of getting it right.
I've tried a lot of different things based on Googling around, but there's just too many permutations. It's time for me to learn what is actually going on. While I dive into the documentation, I have a few questions that hopefully some people here can clarify for me:
I noticed the I can set the Entitlements and Code signing settings both on the Project (double click on the top item in Groups & File, which has the name of the project) and on the Target (under Targets, double click on your project name). What's the difference between these two? I know that with header paths, one tends to override the other (without warning of course...).
When I choose "Build and Archive" (a really cool feature by the way), it again allows me to code sign. What's the difference here?
Many forums point to a setting in Entitlements.plist called "get-task-allow" (which needs to be set to false). However, when I create an entitlements file in XCode, there is no such line. Does that mean Apple fixed that bug/feature?
What is the difference between "Code signing identify" and "Any iOs device"?
What is the difference in the provisioning portal between "Development" and "Distribution"?
In that same portal, when you create a new profile for distribution, what is the difference between Ad Hoc and App Store? I've heard people say (and I believe I also experienced this in the past) that you can use the App Store profile for Ad Hoc distribution as well (maybe not the other way around). Then again, that might be due to my confusion if XCode uses multiple profiles at the same time, so it's not clear which profile is doing what.
My situation:
I'm using XCode 3.2.4 with SDK 4.1. The app runs fine on my own phone (which actually makes it harder to debug). Errors my friends keep getting vary from "Entitlements are not valid" to 0xE8003FFE and 0x800ccc0e, depending on what I send them. One has an iPhone 3G, the other an iPod touch. Both run iOS 4.1 and are not jail broken. Both do not have "restrictions" turned on.
I have two applications:
* com.isimplifiedchinese.teacher
* com.isimplifiedchinese.student
I was able to distribute the student application by building for the device and then manually creating the .ipa file (that was before I knew about the Build & Archive feature). I'm not able to distribute it with the Build & Archive feature yet. But I would like to focus on the teacher application, which I'm not able to distribute in any way at all (even though it worked in the past, before I started changing things).
In my provisioning profile I have (for the teacher application):
* one certificate for development
* one certificate for distribution
* a list of devices including my own and those two friends
* a provisioning profile for development (with me and my two friends in it)
* a provisioning profile for distribution (with me and my two friends in it). It's configured for "App Store" (but I've also tried "Ad Hoc" in the past, albeit possibly with slightly different options elsewhere)
All profiles are still valid. They are all listed in XCode Organiser and seem to be up to date.
Deployment is set to Device 4.1 - Ad hoc. On both the project and the target build settings:
* I added "Entitlements.plist" to "Code signing entitlements".
* code signing identity is set to automatic selector which points to my iPhone Distribution certificate and the App Store profile for the application.
* Any iOS Device is set to my iPhone Developer certificate (it's not set to automatic, because if I do that it points to a provisioning profile of the student application of mine).
When I choose Build and Archive and then Share Application, I set Identity to iPhone Distribution (which matches iPhone Distribution - App Store).
I regularly, but not consistently, used Clean All Targets during my struggles
Another thing that may or may not be relevant: I started with the teacher application and after a while a cloned and renamed the clone to student application. The student application uses shared libraries from the teacher application, but not the other way around.
Needless to say there's just too many permutations here and too much magic (from my point of view). Hopefully you can either help me understand this system better or magically point me in the right direction so I never have to worry about it again.
Lots of questions indeed... Some answers:
Q4. Code signing identity is the name of the entry, which can include several sub entries: you can sign with a different identity for each possible platform. E.g. you sign with identity X for iOS 3.2 devices and with identity Y for iOS 4 devices.
Q5. Development vs Distribution: when you develop your app, you sign it with your development profile so that authorized devices will accept it, when you're ready to deploy the app, you sign it with your distribution profile, which only the App Store will accept. Apple then applies its own signature on the app so that any device will accept it when it downloads it from the app store.
Q6. App store distribution is for selling your app through Apple's App store, while Ad Hoc distribution is for distributing your app through your "own enterprise app store", your app is not available on the App Store.

iPhone using same certificate on multiple computers with different accounts

I have looked around here to see if somebody has asked this question before but nobody really has the same situation so i would like to now how to do the following:
At home i have an iMac on which i do my iPhone development. I can deploy the application on my own iPhone without any problem.
At work i have a colleague who owns a Macbook Pro and i would like to use my certificate to deploy the application on his iPhone.
The tricky part is that we (of course) have different accounts on the computers and i don't want to create an account on his Macbook Pro just for this.
I have read in several places that you can export the certificate (in my case from my iMac) and import it onto his computer, a detailed description can be found here: http://www.theevilboss.com/2009/06/iphone-sdk-development-on-multiple.html) but does this scenario also work for different accounts?
If not, how can i do this?
A second question (and which might also solve my first question), does every member on the development team need to have a personal account for the Provisioning portal? And thus pay the development fee?, i have a company registration and i can register 100 devices but when i want to add a person using the Member center i get the feeling that this person needs to register himself first and pay the development fee)
The quickest smartes and easiest solution.
Saved me hours of searching and implemnting different tactics and techniques
iphone sdk development on multiple mac machines
Two ways to do this:
First: add your buddy to your 'team' in the iphone developer portal. he then will have to generate his own certificates. There is no additional charge for this. This makes sense if you want to give him source code and let him use Xcode to work with / debug the app. If you don't want to give him source code, do the second choice.
Second: if he doesn't need to debug and use Xcode, just add his phone UUID to your 'Devices' in the portal, generate an Ad Hoc Distribution Certificate and then make an Ad Hoc build for anything you want to give him to test/try out. He then just uses itunes to copy the ad hoc certificate and the app to his phone. There are instructions in the portal for making the ad hoc builds.

Difficulties with iPhone ad-hoc distribution for testing

I'm attempting to do an ad-hoc distribution of my (first) iPhone App to a small group of volunteer testers. I've looked through Apple's documentation, as well as a number of blog posts, but am still having trouble. I have a couple questions about things that aren't clear (to me, at least):
When creating Development and/or Distribution certificate requests, for Common Name, should I use my name or my company's name? I registered for the iPhone Developer program as a company, and the portal shows this company name, but also my own name as "Agent".
Also, Apple's documentation (the "Publishing Applications for Testing" chapter of the Developer's Guide) contains a diagram showing the Tester Provisioning Profile as containing info about the Tester Device, the Test App ID, and the Development Certificate. When I try to create the Tester (Ad-hoc) Provisioning Profile on the portal, it selects the Distribution Certificate, not the Development Certificate. Is this right? It seems to make sense, but doesn't match the diagram.
Any other advice on ad-hoc provisioning would also be appreciated, particularly how to gather information for troubleshooting. My testers have reported getting an "application was not installed because an unknown error occurred (0xE8008016)" message, which doesn't tell me anything about what I may have done wrong.
Thanks,
Andrew
Well, I seem to have it working -- sorry for the long delay in following up. Here's the best resource on this that I've found: http://www.bigspaceship.com/blog/labs/iphone-101-understanding-distribution-pt-i-of-ii/ although even it doesn't get quite all the details right, and it seem that Apple changes the iPhone Program portal often, so maybe no resource will ever be fully up-to-date. Your mileage may vary.
To answer the questions I posed (and reply to some of the questions raised in other answers): For the Developer Certificate, I used my own name. For the distribution certificate, I used the name of the Company. Yes, the dist.plist bust exist and the get-task-allow property is false.
Finally, one more gotcha: the AppID/Bundle identifier should be all-lowercase.
I posted a sample packaging script that i use for automating ad hoc distribution builds, maybe this is useful?
http://iphonedev.makerlab.org/2009/12/packaging-script-for-iphone-ad-hoc-distribution-builds/
I used my own name for Common Name, however, I'm not sure this really matters. I did name my dist. provisioning profile with my company name, though.
Ad-Hoc is considered distribution, so the distribution certificate is the correct one.
Did you create an Entitlements.plist file for your ad-hoc?
Are you getting any signing errors when you build your ad-hoc?
Does the ad-hoc build you created install properly for you? That's the easiest way to gather information-try it yourself, following the directions you're giving your users.
I had problems with Windows users not being able to install my app because Windows couldn't properly decode the compressed folder I created on my Mac. I eventually resorted to a Run Script build phase in XCode that created a .ipa file which worked properly for drag-and-drop for Windows and Mac iTunes.
In your entitlements.plist file you have to uncheck the get-task-allow bool to give it a false value. This is only for AdHoc distribution.
I learned this the hard way when I went through a build cycle thinking I had saved and checked in the right entitlements.plist with get-task-allow unchecked.