What is TestFlight?
TestFlight is a platform provided by Apple that allows you to send a testable version of your app to specific beta users. It’s important to realize this is different than the App Store (which is available to the general public). Once you send a user a TestFlight invitation, they must download the TestFlight app where they can download and use a specific version of your app for 60 days.
Apple’s Developer Portal. Here you create a distinct IDs for an App, get your certificates and much more. Note: you do need a Paid Developer Account to put your app on TestFlight or the App Store.
iTunes Connect is where you manage your app, its details, screenshots, and who all has access to the different types of the app info (like Revenue, and User stats).
The distinct identifier for every app is its bundle identifier. (Conventionally, you normally use your domain in reverse and the app name to form the bundle identifier).
We used to have to go to developer.apple.com to register the bundle ID. However, you can now do it in Xcode. Click on the Project -> Capabilities. You can toggle one of these switches (I normally choose In-App Purchases). It will then register a bundle ID on developer.apple.com for you!
Now that you have a bundle ID, go to http://itunesconnect.apple.com/ and register your App.
Next, go to the TestFlight tab and click on the iOS TestFlight Builds sidebar item.
Currently there are no builds uploaded to iTunes Connect. So, let’s add one.
Go to your project on Xcode. Choose to build your app for a Generic iOS Device.
Then go to Product -> Archive.
This may take a minute or two. What you are doing is creating an archive of your current build so that you can submit it to Apple. Once done, Xcode Organizer will open with an option on the right hand side to “Upload to the App Store”.
Note: This just uploads the build to the iTunes Connect site, you still have to do some stuff on iTunes Connect’s site to share the app with others on TestFlight.
If everything works properly you will get the below message:
However, it is very common to not get everything right on the first go.
One very common reasons for this is that you already have an archive uploaded to iTunes Connect with the same Major, Minor, and Build number. The numbers are pretty arbitrary but make sure to increment one of the three numbers with every new archive you send to iTunes Connect.
Another common mistake is not having an App icon or all the necessary App Icon Assets. Feel free to use https://makeappicon.com. It allows you to upload one big App icon and spits out all the necessary App Icon assets for iPhone and iPad 1X, 2X, and 3X sizes.
If you go back to the TestFlight tab and click on the iOS TestFlight Builds sidebar item you will now see that your archive is being processed by iTunes Connect. This should take ~15 mins and you will receive an email when done.
Now that our build is on iTunes Connect we need to set up Internal and/or External TestFlight Testing.
Internal vs External
Submitting your build for Internal testing involves adding anyone from your iTunes Connect team as internal testers for your app. There is a limit of 25 people can be added as Internal Testers.
Once added, click “Select Version to Test” and chose the version you want to send to your Internal Testers.
Next, click the “Start Testing” button to send this build to all your internal Testers.
Note: Internal Builds do not go through an Beta App Reviewal process and are therefore immediate.
External Builds, on the other hand, have to go through an Beta App Reviewal process. This usually takes within 1 or 2 days and you will have to fill out more information.
Note: You can add up to 2,000 people to be External Reviews.
Submitting to the App Store
Check out the App Store Tab on iTunes Connect. You have to add more details like App Screenshots, Description and submit the build you want to send to the App Store, but the overall process is very similar to the TestFlight submission process.
Additional Resources & Tips
Download the iTunes Connect App. It will send you a push notification whenever a build is ready for the next step on iTunes Connect.
Have a look here for FAQs for TestFlight: https://itunespartner.apple.com/en/apps/faq/TestFlight%20Beta%20Testing_Overview
This is a great Ray Wenderlich tutorial which goes into more detail on TestFlight: https://www.raywenderlich.com/101790/ios-beta-testing-with-testflight-tutorial
Sometimes you are using frameworks that supported only a version of iOS and higher. Make sure you are setting the appropriate Deployment Target and Base SDK and understand the difference between the two. http://stackoverflow.com/questions/18568572/whats-the-meaning-of-base-sdk-ios-deployment-target-target-and-project-in-xc
Lastly, there are alternatives to Testflight for getting a testable version of your app to beta users. If you have a bigger team than what Internal Testing will allow and want to stay in the Apple platform look up Enterprise Distribution. Otherwise, look up BuddyBuild(a Canadian company!) or Hockey App for enterprise alternatives.