How would I "Upload to App Store" to a client's iTunes connect? - ios

I have created an app for a client, and instead of uploading to my iTunes connect account, I want to upload it to HIS (my client has a developer account, etc.). After I archive the project in Xcode and press the "Upload to App Store..." button, I am prompted the following message:
To submit to the iOS App Store, select a Development Team to use for provisioning:
And then naturally my own name is selected. When I press the "View Accounts..." button, I can see a "+" button to add an Apple ID. I am guessing I would add my client's Apple ID? And then his name will show under Development Teams and I select his name?
Someone please help me understand how to submit to someone else's iTunes connect account. Thank you.

There are two things to need to get:
Your client's private key (.p12 exported from keychain) for his distribution certification, you need it because App Store distribution cert can only have one per bundle identifier. Click here for instructions.
Your admin access to his developer program, this enables you the ability to upload archives, you will need sign in this account in XCode. Ask your client to send you an invitation. Click here for instructions. Do a Download All in Xcode preference after this step.
Then you can can submit again it should be all set.

For the developer program your client should invite you as an admin/developer using your main developer id(you don't need a new apple id for the dev. program i.e. you can switch teams).
You have to accept the invite
Login in the apple developer's website and switch to your client's team and create the certificates and provisioning profiles you need for the app.
Open X-Code preferences and download all the provisioning profiles you need.
In your app settings change to the distribution profile of your client(the one you just downloaded in the x-code preferences).
Create a new archive of your app in Xcode. Then follow step (7 and 8) or step (9 - added 29/09/2016)
When the organizer opens up after the archive is ready, highlight it and press export, then select - "Save for iOS App Store Development". When the export actions are ready save the .ipa file in location of your choice in your computer.
After all this is done, open up Application Loader, it is a tool which comes with x-code. Sign in with your apple Id and upload the .ipa file you created earlier.
---------------- Added 29/09/2016 ----------------
Another way to upload the app is from the organiser press Upload to App Store(blue button on the top right) while the archived build is highlighted. Select your client name from the dropdown in the dialog window press upload and wait until you see green tick
------------------------****-----------------------------
All previous steps assume that an entry for the app you are developing is created in your client's iTunes Connect and their apple developer account.
Finally log in to iTunes connect and do all the necessary processes to upload the app in the store.
Added/Edited on 29/09/2016: On iTunes Connect - in order to create entry for the app and upload it on their behalf, your client should invite you as an admin with your apple id and you have to accept it. Now you can be present on as many accounts as you are invited so very nice of Apple that they have updated this, saving a lot of time and mess. Change accounts from the dropdown in the top right corner when you log in.
I hope that helps.

You will need to have a developer account on the developer account you post to iTunes from. They will have to give you permission to access the account. I don't believe you can upload outside of Xcode anymore.

You've basically got it right. You need to add your client's information into your Xcode and then sign and provision the app as your client.
First, you tell Xcode that you want to add a new account:
Then, you sign in as your client's credentials:
At this point, you may need to download your client's signing certificates and provisioning profiles if Xcode doesn't do it automatically:
Then, just select the signing identity of your client and upload your app through either Xcode or Application Loader.

Related

How to build an iOS binary without setting an Apple Developer account and team?

I'm using Xcode 6.3.2, and I'd like to let another people to build and create the .ipa files of my projects, but I don't want neither to expose my Apple Developer account information, nor create users for them in my team... is that possible? Either by using Xcode, either by commands line.
Thanks in advance
EDIT: The goal is to prevent those external people from being able to submit apps to the App Store by means of my Apple Developer account and from being able to see the other apps managed in the account.
EDIT2: Does providing the distribution certificate to external people make possible to them to submit binaries to the App Store?
After reading your edits, I think I understand more clearly what you are trying to do. Basically, you will simply need to provide the other members of your team with the following:
The private key used to generate your app store distribution
certificate.
The distribution certificate
The app store distribution
provisioning profile
This will allow those team members to work on, and build the app for the app store. Without your Apple developer ID password, they will not be able to log into iTunes Connect to see the other apps you have. While they will be able to build the app for app store distribution, you (as the only one with the apple ID password) will have to be the one to submit the compiled app to the store.
So basically, your development team will create the apps. When you're ready for release, they can do an "Archive" in Xcode to create the .app that has been signed for the app store (using the provisioning profile and signing identity that you provided them in the three files I mention above. They will zip up the .app and the .dSym files into a .zip and send it to you. You will then log into iTunes Connect and set upt the app to be ready for the new binary, and then use the Application loader to upload the .zip to apple for review. Once you have gotten a successful review, you will again log into iTunes Connect to release the app. So at no point will the developers have access to submit apps or see other apps you have in the store.
Also, the development team will not need the provisioning profile, cert, and key until they need to build for the app store. During the development phase, there is no problem with them using their own developer accounts to build and test the app.
One additional thing to note is that Apple is changing the roles that are available in iTunes connect. You may want to review those new roles to see if some combination of those roles my work for your team setup.
From http://9to5mac.com/2015/06/12/wwdc-itunes-connect-testflight-limits-account-switching/
After several apps are added to an account by its admin, developers
can now assign user roles to individuals on their team— app manager,
developer, or marketer— with each allowing varying access to iTunes
Connect features. App managers, for example, will be able to create
users, assign user roles, change pricing, and submit apps for review.
Marketers will get access to updating store metadata, uploading promo
material, and requesting promo codes. Users assigned the developer
role will be able to upload binaries, and view crash logs and store
metadata.
Apple recently introduced Free-provisional-profile and/or free-developer-certificate support.
But it's limited (see below note).
To utilise that follow below steps suggested by Apple,
In Xcode, add your Apple ID to Accounts preferences, described in Adding Your Apple ID Account in Xcode.
In the project navigator, select the project and your target to
display the project editor.
Click General and choose your name fromthe Team pop-up menu.
Connect the device to your Mac and choose your device from the Scheme toolbar menu.
Below the Team pop-up menu, click Fix Issue.
Xcode creates a free provisioning profile for you and the warning text under the Team pop-up menu disappears.
Click the Run button.
Note that said support is limited, for example, the capability to sell things with "Apple Pay" would not even build with a free-certificate.
Yes, there are several ways to solve your problem.
You can create .ipa file with you provisioning profile and give them the file, they can you use application called "Application Loader", they can use this application to upload the .ipa, this should resign your application with their provisioning profile. I did not try this but it should work.
When you create an archive of you application, it will be listed in "Organizer", go to that location, and give them that .app file alone. Then they can use any third party application(can be downloaded from Mac Appstore) to resign the application with their profile. In this case, you are completely hiding your information. They can even change the application icon, default image.. etc during the resigning process.
When you build your application in release mode an .app file is created, this is unsigned binary. You can search for .app file in your Xcode project itself. Just find the location, and give them that .app file alone. Then they can use any third party application(can be downloaded from Mac Appstore) to resign the application with their profile. In this case, you are completely hiding your information. They can even change the application icon, default image.. etc during the resigning process.
Hope this helps.
No, There is no way to compile a .ipa without a provisioning profile (device compile, not simulator compile). To do this, you would go XCode->{AppTarget}->Build Settings->Code Signing->Code Signing Identity, and set 'Don't code sign".
Trying to compile afterwards will fail with
CodeSign error: Code signing is required for product type
'Application' in SDK...
EDIT: The goal is to prevent those external people from being able to
submit apps to the App Store by means of my Apple Developer account
and from being able to see the other apps managed in the account.
You have two options:
Send them your Source code + XCode Project, and not the library.
Compile the code using "iOS Developer" Code Signing identity, and not "iOS Distribution" identity.
Anything signed with iOS Developer can never be sent to the AppStore.
Anything signed with iOS Distribution can never be run on a device
unless it is downloaded from the AppStore.
They can never see what you have for sale, nor publish anything unless they have your AppleID username and password

Uploading app to client account in app store

This is my first time trying to upload app to app store, so I am completely lost. I have searched all over the web about the issue I am having, but could not find how to fix the issue.
Here is the problem:
I have developed an updated version for the existing iPhone app for client. Original version of app is already in app store for long time. Client wants me to upload new version of the app to their account in app store as "prerelease" for testing. They gave me their store account (admin role) username and password to log in. I added the account in Xcode and configured build settings to their team. But, after building the archive, when I click the "Validate" button and select their team, I am getting an error popup with the message "Your account already has a valid iOS Distribution certificate". I can't post images here, so here is snapshot image of the popup):
http://imgur.com/yLL5K1k
Apple troubleshooting documentation (documentation link here) shows that they should export developer profile and give me to import on my Mac. However, client say they don't have Mac and no Xcode, so they can't do it themselves. Apple documentation is mentioning another option - “Revoke and Request”, but I can't see that option. Also, if "revoke" is performed, will that affect client's application (more than 20 apps in app store)?
I have downloaded all of their certificates and profiles from Member center, imported to keychain, added account to Xcode, configured Xcode, but nothing helped.
Does anyone know what can I do, or ask to client, so that I can upload app to their app store account?
Thank you!
You must have downloaded the Distribution certificate from the account. That alone is not sufficient. You must get the private key from the client or developer who has created the certificate first or uploaded the application.
Log in to developer.apple.com portal, using the required credentials.
Click on "Manage your certificates, App IDs, devices, and provisioning profiles." under Certificates, Identifiers & Profiles
Then click on "Certificates"
On the new page Click on "+" button at right upper corner.
Now on this page select "App Store and Ad Hoc" under Production.
Then follow the instructions related to CSR file given on new page.
Note: Create new certificates with unique names so that you won't download old certificates to your mac, mistakenly.
For more info Distributing iOS Apps With iTunes Connect

HealthKit iTunes Connect entitlement error

I had enabled health kit capability in Xcode and HealthKit service in Developer center at some point for my app. But then I disabled it right away as I decided to not include it. My app doesn't have any HealthKit related stuff in it, I have disabled the capability and also disabled it in developer center. However, when I try to submit my app in iTunes connect, it gives me error:
Apps that use the entitlements [com.apple.developer.healthkit] must have a privacy policy URL for [English]. If your app doesn’t use these entitlements, remove them from your app and upload a new binary.
When validating the app in Xcode, it still shows me health kit entitlement: com.apple.developer.healthkit
Any idea how I can completely get rid of this entitlement from my app? I have been struggling for over a day now :(
NOTE: this is a new app, it's not available in the app store yet.
I faced exactly the same problem, and I finally fixed it. Be sure that you remove any reference to HealthKit not only in your app but also in your developer profile for this app.
Go To the developer portal
Click the App IDs link on the Certificates, Identifiers & Profiles developer page
Select the App ID you are using in your app
Click the Edit button
If HealthKit is enabled, disable it and click the Done button
Regenerate all provisioning profiles using that App ID
Open Xcode
Turn Healtkit to off in your project (it looks like you already did it, I write it for the other)
Check you have no trace of Healtkit in your entitlement file, plist file and HealthKit is not in your Frameworks.
select Xcode > Preferences > Accounts. Select your team and click View Details
Click the refresh button in the bottom left corner to refresh your provisioning profiles
Restart Xcode and rebuild your project
Submit your app. During the submit process, you should not see the Healtkit Entitlement anymore.
NB : If you still face the problem, I suggest you to delete all your provisioning profile at step 5 and try again. Don't forgot to restart XCode.
There is option of Privacy Policy URL inside the APP, just fill that URL with the URL of your company and save and submit the application.

Testflight Workflow

I am trying to understand the testflight App distribution workflow
1.
When a new tester wants to join my testing team - I ask them to create an account on test flight.
2.
Next they need to give me their device UUID so that I can add that UUID to the Distribution profile.
Question - What is the best way to get the UUID from the tester. I do not want them to email it to me or give me the UUID over the phone. Since they have the testflight account and the iPhone - Can they upload their device UUID from the iPhone to the testflight account so that I can see that tester JohnDoe has UUID xyz - If so how? What do they(The tester) need to run on the iPhone so that their UUID shows up when I (The App Developer) log into TestFlight.
3.
When I (The App Developer) have the newly Added UUID - I need to update the Distribution Provisioning Profile on my Apple Provisioning Portal with the new UUID - Save the updated Profile and then upload it back to Testflight.
Question - Can this (adding the new UUID to a profile) be done via Testflight itself? - i.e. can Testflight update my Profile with a new UUID or can this only be done via the Apple provisioning portal and then be brought back into Testflight
There are similar questions but none answer exactly the two questions I am looking for.
Best way to get UUID - is copy it from testers TestFlight profile when he will register device for testing.
You can update provisioning profile only at Developer Apple portal. But you can update provisioning profile for existing build by pressing Update Profile on build page.
1) You can always export device ID-s from your TestFlight users - exported file is
ready to be directly imported in your Apple Developer Portal.
And you always get an automatic email when new user (or new device) is added to you
TestFlight account.
As for what is the best way: who knows, it's really a matter of choice.
2) No. TestFlight can't create a new provisioning profile with devices added.
You have to create it by yourself (Apple Developer Portal):
add new devices to your developer account
add this devices to provisioning profile
regenerate and download provisioning profile
update provisioning profile for TestFlight build (https://stackoverflow.com/a/14265876/653513)
It's really much simpler:
Create team
Invite people by email
When they signup, they automatically email you their device UDID
Here's what TestFlight FAQ says about it: How does it work?
Step 4 is to manually add device id's into Apple site, generate new provision files, download and install, rebuild (hopefully using jenkins or something similar) and upload a new build to TestFlight (did I mention jenkins :))
1>Go to Project,Archive app.
2>In archive,click on distribute.
3>Click on save for enterprise or ad hoc deployment and save ipa file to your desktop
4>open https://testflightapp.com/dashboard/ and login
5>After login,click on upload your build button
6>Next click on drop your ipa file.Select .ipa file from desktop and upload it.
7>Selct provisioning profile by tick check mark and click update and notify button.
8>After clicking update and notify,Please click on share build button below update and notify.
9>Also you can see this share option by clicking permission on right hand menu.
10>After clicking share button,you need to provide your email id for showing testflight app in your mail inbox.
11>open test flight mail into your device and click on install button.
12>app automatically open testflight in your device,Please login with testflight,click on install profile button
13>After all click on app just you upload,click on install button. app will automatically install in your device.
Please tell me in case of any query regarding this.
Thanks
try TestFlight.top
Simple to invite testers
When a user requests to participate in your application test, you do not need to do any operation. Applicants only need to click on the download link in the page to directly download the test application. It is as simple as using the App Store

How do you beta test an iphone app?

How can you beta test an iPhone app? I can get it on my own device, and anyone that gives me a device, I can run it on theirs, but is there a way to do a limited release via the app store for beta testing?
Related: Also, see this question on getting your app onto phones without using the App Store.
Creating ad-hoc distribution profiles
The instructions that Apple provides are here, but here is how I created a general provisioning profile that will work with multiple apps, and added a beta tester.
My setup:
Xcode 3.2.1
iPhone SDK 3.1.3
Before you get started, make sure that..
You can run the app on your own iPhone through Xcode.
Step A: Add devices to the Provisioning Portal
Send an email to each beta tester with the following message:
To get my app on onto your iPhone I need some information about your phone. Guess what, there is an app for that!
Click on the below link and install and then run the app.
http://itunes.apple.com/app/ad-hoc-helper/id285691333?mt=8
This app will create an email. Please send it to me.
Collect all the UDIDs from your testers.
Go to the Provisioning Portal.
Go to the section Devices.
Click on the button Add Devices and add the devices previously collected.
Step B: Create a new provisioning profile
Start the Mac OS utility program Keychain Access.
In its main menu, select Keychain Access / Certificate Assistant / Request a Certificate From a Certificate Authority...
The dialog that pops up should aready have your email and name it it.
Select the radio button Saved to disk and Continue.
Save the file to disk.
Go back to the Provisioning Portal.
Go to the section Certificates.
Go to the tab Distribution.
Click the button Request Certificate.
Upload the file you created with Keychain Access: CertificateSigningRequest.certSigningRequest.
Click the button Aprove.
Refresh your browser until the status reads Issued.
Click the Download button and save the file distribution_identify.cer.
Doubleclick the file to add it to the Keychain.
Backup the certificate by selecting its private key and the File / Export Items....
Go back to the Provisioning Portal again.
Go to the section Provisioning.
Go to the tab Distribution.
Click the button New Profile.
Select the radio button Ad hoc.
Enter a profile name, I named mine Evertsson Common Ad Hoc.
Select the app id. I have a common app id to use for multiple apps: Evertsson Common.
Select the devices, in my case my own and my tester's.
Submit.
Refresh the browser until the status field reads Active.
Click the button Download and save the file to disk.
Doubleclick the file to add it to Xcode.
Step C: Build the app for distribution
Open your project in Xcode.
Open the Project Info pane: In Groups & Files select the topmost item and press Cmd+I.
Go to the tab Configuration.
Select the configuration Release.
Click the button Duplicate and name it Distribution.
Close the Project Info pane.
Open the Target Info pane: In Groups & Files expand Targets, select your target and press Cmd+I.
Go to the tab Build.
Select the Configuration named Distribution.
Find the section Code Signing.
Set the value of Code Signing Identity / Any iPhone OS Device to iPhone Distribution.
Close the Target Info pane.
In the main window select the Active Configuration to Distribution.
Create a new file from the file template Code Signing / Entitlements.
Name it Entitlements.plist.
In this file, uncheck the checkbox get-task-allow.
Bring up the Target Info pane, and find the section Code Signing again.
After Code Signing Entitlements enter the file name Entitlements.plist.
Save, clean, and build the project.
In Groups & Files find the folder MyApp / Products and expand it.
Right click the app and select Reveal in Finder.
Zip the .app file and the .mobileprovision file and send the archive to your tester.
Here is my app. To install it onto your phone:
Unzip the archive file.
Open iTunes.
Drag both files into iTunes and drop them on the Library group.
Sync your phone to install the app.
Done! Phew. This worked for me. So far I've only added one tester.
In year 2011, there's a new service out called "Test Flight", and it addresses this issue directly.
Apple has since bought TestFlight in 2014 and has integrated it into iTunes Connect and App Store Connect.
Note that there is a distinction between traditional "beta testing" which is done by professional QA engineers, and "public beta testing" which is releasing your product to the public before it's ready : )
You can do "beta testing" -- loading to specific iPhones/iPods your testers will be using. You can't do "public beta testing" -- pre-releasing to the public.
In 2014 along with iOS 8 and XCode 6 apple introduced Beta Testing of iOS App using iTunes Connect.
You can upload your build to iTunes connect and invite testers using their mail id's. You can invite up to 2000 external testers using just their email address. And they can install the beta app through TestFlight
Diawi Alternatives
Since diawi.com have added some limitations for free accounds.
Next best available and easy to use alternative is
Microsoft
https://appcenter.ms
Google
https://firebase.google.com/docs/app-distribution/ios/distribute-console
Others
https://hockeyapp.net/
http://buildtry.com
Happy build sharing!
There's a relatively new service called HockeyApp, which seems to rival TestFlight, however they claim to give you access to unlimited users, but it does cost some $$ unlike TestFlight which has now been integrated directly into iTunes Connect.
Using testflight :
1) create the ipa file by development certificate
2) upload the ipa file on testflight
3) Now, to identify the device to be tested on , add the device id on apple account and refresh your development certificate. Download the updated certificate and upload it on testflight website. Check the device id you are getting.
4) Now email the ipa file to the testers.
5) While downloading the ipa file, if the testers are not getting any warnings, this means the device token + provisioning profile has been verified. So, the testers can now download the ipa file on device and do the testing job...
With iOS 8, Xcode 6, iTunes Connect and TestFlight you don't need UDIDs and Ad Hocs anymore. You will just need an Apple ID from your beta tester. Right now you can only beta test your app with 25 internal testers, but soon 1000 external testers will be available too. This blog post shows you how to setup a beta test with internal testers.
(As the official guide is still missing in this thread..)
TestFlight, acquired by Apple and now (iOS8+) available for beta testing makes it easy to hand your app to beta testers without the need to collect device UUIDs beforehand (you only need email addresses of your testers). An extensive guide explaining all necessary steps may be found in the iTunes Connect Developer Guide.

Resources