How do you beta test an iphone app? - ios

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.

Related

Run ipa on device without cable and not with TestFlight?

Is it possible to distribute IPA to device without TestFlight, and not via cable? I have a new MacBook Pro with usb-c and an iPhone. Hard to get company set up TestFlight. Any idea how to test on device?
Yes. Ad-Hoc OTA is the way to go.
On developer.apple.com:
navigate to your account & login
click Certificates, IDs & Profiles in the side menu on the left
on the left, find Devices & click +
register multiple devices by uploading a spreadsheet including the UDIDs and names of the devices
follow the steps to finalize the registration process
You might need to wait 24 hours; I found, it sometimes takes really long for the changes to take effect.
Inside Xcode:
prep: open Xcode settings, accounts, your account and then re-download all the profiles and certificates
archive the product
open the Organizer window and find the archive you've just created
click Distribute App
choose Ad-Hoc
make sure to have include manifest for OTA installation enabled
follow the steps
finally, click export and choose a location to save the files
Upload all the files (icons, .plist & .ipa) to your server. Note that the server needs to be https, this is mandatory. If your's isn't, upload it to Dropbox or some other cloud service. If you're using Dropbox, make sure to replace www.dropbox.com with dl.dropboxusercontent.com.
Manifest
open the manifest.plist file and insert all the new urls
again, for dropbox: replace www.dropbox.com with dl.dropboxusercontent.com
upload the manifest plist to a secure server.
Link:
itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/YourURLHere/manifest.plist
You can try Diawi for Development & In-house Apps Wireless Installations
It will require the target devices to be registered into the signed provisioning profile that will be distributed with
For me Fabric is an excellent tool. You can check it out here. I often distribute ad-hoc builds using this. It simply sends the app install link in an email and you can open the email from your iOS device and install the build right away.

iOS: Bundle format unrecognized, invalid, or unsuitable

When I try to run an iOS app on real devices it give me the following error, but it works on simulator, also I uploaded test build on TestFlight successfully, I tried to use another bundle identifier but no luck.
The project is built using Swift and using CocoaPods to include Alamofire and other libraries.
Without having all the details it sounds like you need to update your Provisioning Profile for Distribution or Development.
You will first need to go to the Apple Developer portal and login in to your account. Then select "Certificates, Identifiers and Profiles", followed by "Devices". Add your iPhone's name and UDID to the list if it is not there already.
After your device is registered to your account you will need to update the Distribution Profile (to allow devices to open your app through the beta distribution channel of Test Flight) as well as your Development provision profile to allow team members to build and run the app through xcode on their device instead of the simulator.
First select Distribution and click on the preexisting Distribution Profile for your application. Select the edit option and make sure the check mark next to your device is selected. Then generate a new Distribution profile. This will cause a download to automatically occur in your browser window. Once its complete you should click the download and this will automatically add it to xcode.
Now create a new provisioning profile for your application. Add the appropriate App Bundle Id and select your device from the list. Generate the new profile and a download will again be triggered in the browser window. Once the download is complete again click the download which will automatically add the profile to xcode.
Your application should now be able to run on your device when building and running through xcode as well as when it is downloaded from your beta distribution channel.

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

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.

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

iOS : Is there any way to test .ipa file in multiple device without jailbreak?

I created .ipa file using ad-hoc as the app is in testing phase. I want to send this .ipa file to my friend in other country to test the app, but due to company policies, he cannot jailbreak the device. How to make .ipa file which can be executed in any iOS device?
Generated .ipa file from Xcode 4.6
Get his device's UDID and add it to your list of devices in the profisioning portal. Then include the device in the certificate, download the updated certificate and 1) import it in xcode and re-build and 2) add it to the mail with the ipa file. He is supposed to copy the certificate into the apps folder in itunes and then cops the ipa there and sync the device.
If you happen to have more betatesters on distributed locations then you should look for services like testflightapp. https://testflightapp.com/ which provides convenient aid for you and the testers.
Why don't you just register your friend's device to the Member Center and add it to your Ad-Hoc distribution certificate? Then re-distribute it.
Here is all the information you need : https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/TestingYouriOSApp/TestingYouriOSApp.html
Add all of the devices to your developer account and adhoc profile and then distribute. Or sign up for an enterprise account and then you can distribute the app internally to your company.
Consider to use TestFlight: http://testflightapp.com/dashboard/
You can upload your ipa and invite your friends to be testers.
it is possible and very easy.
So, you say you already have an ad-hoc provisioning profile. But actually only with one (your own) device ID. So here is, how to add more device IDs - no jailbreak necessary!
Ask your friend to connect his device to iTunes, and eMail his Device UID (DUID) to you (40 characters string)
Go to Apples Developer Member Center (iOS) web site, login with your account and head over to "Certificates, Identifiers & Profiles".
Click on "Devices" and add your friends device (name and UDID).
Now click on "Provisioning Profiles" and select the existing ad-hoc distribution provisioning profile for your app and click "Edit" to add the new device of your friend
Now make Xcode refresh its internal provisioning profile database via menu "Window / Organizer" then click "Devices" tab and "Provisioning Profiles" on the top left. Then click menu "Editor / Refresh from Developer Portal"
Rebuild your app with your just updated provisioning profile (this should update the code signing of your app.
Via "Product Archive" generate your *.IPA
You should now EMail the *.ipa to your tester friend.
If you are fast with the above steps 2 to 8, your frind still has connected his device to iTunes (see step 1 above).
;-)
He now simply drag'n'drops the *.ipa file from your mail to iTunes and iTunes syncs the App to his device. The app should work. (Eventually the device installs the profile - but nothing can go wrong here).
DONE.
If you have multiple testers and mutiple builds, then have a look at http://www.testflightapp.com - this free of charge website makes distrubution of iOS apps for ad hoc testing even more easy. But it only saves time if you have multiple testers and multiple to be tested apps (or versions of one app).
Have fun!
If you are developing on mac, Consider downloading multiple iOS and config your iphone simulator for those.

Resources