Fastlane and the App with Extension Target

My friend and I are working now on Chars 2. This is iOS system-wide Unicode characters keyboard. Chars v. 1 was just a fancy wrapper (host application) for the keyboard extension target. Version 2 will have this “keyboard” inside the app regardless of enabling it system-wide. (Finally!)

It would be nice if Den Talalá tells about the design of Chars 2. But now about the development.

The great thing to use with any Xcode project is Fastlane by Felix Krause, surely. This tool helps thousand developers to save hours.

It’s straightforward in use if you have one target and simple app. Just type fastlane init in Terminal and you are done with setup. If you also have an extension target like keyboard, today widget or Watch app, Fastlane setup becomes much more complex.

The main problem with linked extension is the second provisioning profile. In this case keyboard target is signed with different identity than host app. So you have to specify that in the Build Settings.

The lane in Fastfile for this case might look like:

lane :beta do
match(type: ‘appstore’, app_identifier: ‘com...Chars’)
match(type: ‘appstore’, app_identifier: ‘com...Chars.Keyboard’)
gym(export_method: ‘app-store’, scheme: ‘Chars’)

This tells Fastlane to match profiles for both targets. Then gym and pilot are perfectly doing their job in the pipe. So, when you have robust certificates and profiles in this way, a setup of iOS continuous integration becomes easy.