This is my second time setting up the end-to-end continuously integration(CI) /build for mobile application development. The 1st project was purely an end-to-end process for iOS project, with TestFlightApp. This time, I have extended my previous experience to both iOS and Android projects.
This page contain information about entities that involved using SVN, TeamCity to compile mobile applications written in Xamarin Forms, and build the projects from the build agent, and finally submit them to TestFairy (No more TestFlight).
This page contain information about entities that involved using SVN, TeamCity to compile mobile applications written in Xamarin Forms, and build the projects from the build agent, and finally submit them to TestFairy (No more TestFlight).
It is a complete end-to-end continuously process with the facilities to dispatch to app to the end user or tester automatically. See the diagram below:
So, what it does?
SigningSigning is the most tricky thing for mobile application. For instance, you need to create a specific provisioning profile for iOS project; specific target for Android, etc. Well, I will focusing on some concerns of signing Android application here.
AndroidIn order to run on an Android device, packages must be signed. In order to allow quicker build iteration, the Xamarin.Android tasks do not sign packages during the build process, because signing is quite slow. Instead, they are signed (if necessary) before installation or during export, by the IDE or the Install build target. Invoking the SignAndroidPackage target will produce a package with the "- Signed.apk" suffix in the output directory.
- Developers - commit changes to SVN via the SVN Client installed in Xamarin Studio.
- Trigger - used to add builds to the queue when an event occurs (like commit a file)
- Transfer - transfer file from SVN to Build Agent (setup mac mini as a build agent to TeamCity).
- Major Build Steps:
- 'mdtool' on Xamarin PCL shared project
- 'mdtool' on iOS app
- 'xbuild' on Android app
- Custom script for publishing
- Publish iOS app to TestFairy
- Publish Android app to TestFairy
- Test fairy send out invitation email
Example Command:
Command Line to build iOS project:
/Applications/Xamarin\ Studio.app/Contents/MacOS/mdtool -v build --project:YouiOSProject.iOS --configuration:"Ad-Hoc|iPhone" YourSolution.sln;
Command Line to build Android project:
Signed:
xbuild /t:SignAndroidPackage /p:Configuration=release Droid/YourDroidProject.csproj
xbuild /t:SignAndroidPackage /p:Configuration=release %teamcity.build.checkoutDir%/Droid/YouDroidProject.csproj
Unsigned:
xbuild /t:PackageForAndroid /p:Configuration=release Droid/YourDroidProject.csproj
Publish YouriOSProject.iOS to TestFairy:
If you need dSYM, then you need to zip it:
zip -r %teamcity.build.checkoutDir%/Pro/build/iOS/iPhone/Ad-Hoc/YouriOSProject.app.dSYM.zip %teamcity.build.checkoutDir%/Pro/build/iOS/iPhone/Ad-Hoc/YouriOSProject.app.dSYM
curl -s http://app.testfairy.com/api/upload -F api_key='xxxxxxxxxxxxxxxxxxxx' -F file=@%teamcity.build.checkoutDir%/Pro/build/iOS/iPhone/Ad-Hoc/YouriOSProject.ipa -F symbols_file=@%teamcity.build.checkoutDir%/Pro/build/iOS/iPhone/Ad-Hoc/YouriOSProject.app.dSYM.zip -F testers_groups='TesterGroupInTestFairy' -F comment=‘Hello Built from TeamCity. %env.TEAMCITY_BUILDCONF_NAME% build#: %changesComment%’
Publish YourAndroidProject.Android to TestFairy
curl -s http://app.testfairy.com/api/upload -F api_key='xxxxxxxxxxxxxxxxxxxxx' -F file=@%teamcity.build.checkoutDir%/Pro/build/Droid/Release/YourDroidProject.pro-Signed.apk -F testers_groups='TesterGroupInTestFairy' -F comment=‘Your Droid Project;Built from TeamCity. %env.TEAMCITY_BUILDCONF_NAME% build#: %changesComment%’
AndroidIn order to run on an Android device, packages must be signed. In order to allow quicker build iteration, the Xamarin.Android tasks do not sign packages during the build process, because signing is quite slow. Instead, they are signed (if necessary) before installation or during export, by the IDE or the Install build target. Invoking the SignAndroidPackage target will produce a package with the "- Signed.apk" suffix in the output directory.
No comments:
Post a Comment