As I mentioned in my previous post, TestFlight has been acquired by Apple and will be discontinued on February 26, 2015, which is, eh, soon. Instead, they offer the “All-New TestFlight Beta Testing service available inside of iTunes Connect“.
So this post was going to be about moving to this new All-New iTunes Connect TestFlight Beta Testing service provided by Apple.
However, while investigating this new service I quickly stumbled upon so many issues with their service that renders it quite useless. Let me name a few:
- Apps made available to External Testers (testers that are not a member of your team in iTunes Connect) require a Beta App Review and must comply with the full App Store Review Guidelines before testing can begin. A review is required for new versions of your app that contain significant changes.
- A submitted build will be available for only 30 days after invitations to the testers have been sent.
- Enterprise (in-house) distribution builds are not supported, only App Store builds.
- Only support for iOS 8 and up. Really?
- There is no upload API which is kind of a deal breaker in a CI scenario. There is a workaround for this using deliver from fastlane which looks like a great toolset for automating iOS builds. I just happened to hear about fastlane last week in a recent episode of the Gone Mobile podcast. Sounds really interesting and I might give that a try some day.
Wow, that’s a lot of drawbacks! This led me to look for a different app distribution platform. A quick search gives you a number of options, such as http://app.io, http://installrapp.com, http://testfairy.com and http://hockeyapp.net.
In Part 1 we took care of all the prerequisites of preparing a clean Mac Mini as our Jenkins build server. Now we are ready to set up Jenkins and configure our jobs.
It’s good to summarize what we want to accomplish here. I’m not going into the merits of a CI server and why you should have one. Just trust me, you need one. If you want to read on the basics, see this Xamarin guide.
We want to automate the Build – Test – Deploy cycle for our Xamarin.iOS app, let’s call it MyProject from now on. It’s considered good practice to split up these tasks in separate jobs, both for maintainability and to limit job execution time. This way you can manage and track progress for each job separately. Separate jobs have its downsides too, but we will come to that. We are going to create 3 jobs:
- MyProject (Build)
- MyProject-testcloud (Test)
- MyProject-testflight (Deploy)
The MyProject job will trigger the jobs MyProject-testcloud and MyProject-testflight only when the build succeeds. This is what we call Downstream projects. Notice that we are deploying to TestFlight right after the build succeeds, we are not waiting for the Test Cloud tests to finish. This is because I want to deploy to TestFlight regardless of the Test Cloud results as TestFlight is used by our developers and manual testers.
You know how (technical) bloggers sometimes say that their blog is their personal memory dump? Sometimes you go searching for the solution to an issue and find the answer on your own blog! I bet this blog post is going to be one of those posts 🙂
Previously I wrote about issues when installing Java on Yosemite during a Jenkins install. I was installing Jenkins because I’m setting up a CI environment for our Xamarin.iOS app. The purpose of this CI environment is to build our Xamarin.iOS app, run the Xamarin.UITests on our Xamarin Test Cloud instance and upload the build to TestFlight for our internal QA and developers to play with.
I bought a nice Mac Mini for this purpose with OS X Yosemite installed. I started out with the Using Jenkins with Xamarin guide on the Xamarin website. This guide mentions a number of prerequisites, but I will try to be as complete as possible in describing the steps to get a Jenkins CI running with Xamarin.iOS, Xamarin Test Cloud and TestFlight.
Today I was setting up a new CI server for our Xamarin builds on a brand new Mac Mini running OS X Yosemite. It was a clean machine so I started from scratch using the instructions from the Xamarin guide: Using Jenkins with Xamarin – Configuring Jenkins to Power a Xamarin Continuous Integration on OS X.
Now, after you see this dialog it should open Safari and launch the Jenkins administration web interface.
However, you will be greeted by this dialog instead