Distributing a lot of test versions of apps comes with the territory of being an app developer. There’s no way around it. Whilst Microsoft App Center has made cross-platform distribution pretty straight forward and painless, there are times when the individual platform methods come in to play.
One thing I do is run a nightly “production” build pipeline that submits apps to App Store Connect for Apple/iOS and Google Play for Android so that the technical checks done by each platform are done regularly. This also means I can get a version as close to the release candidate as possible out to testers and address any issues found by either quickly.
Something that has always be a hassle with Apple is remembering to login to App Store Connect and provide the export compliance, which in the vast majority of cases is just ticking off that an app uses HTTPS and that it’s exempt from the Apple/US Government requirements. Whilst this isn’t too labour intensive, as programmers I firmly believe that if we can be lazy and automate something, it’s our sworn duty to do so.
Instead of logging in for every build and going through the 3 step process every single time:
1)
2)
3)
We can very simply just add the following to the Info.plist and go straight to testing for every submission:
GUI:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> ... <key>ITSAppUsesNonExemptEncryption</key> <false/> ... </dict> </plist> |
And that’s it, a really quick way to avoid a couple of minutes every build there by gaining valuable time to work on something more interesting or duck out a bit early on a Friday.
Hi very interesting article.
We are trying to build a pipeline in azure devops that builds and deploys to testflight, googled everywhere but cannot find the yml that does it.
Apparently the AppCenter Task does not work. are you using fastlane? could you share how you do it to iOS and android
Thanks again for your article
Hi Mark,
Good to hear you’re getting structured Azure DevOp’s pipelines setup for your project. I’ve been wanting to do a write up on Azure DevOp’s pipelines for quite a while now as I been using them very heavily and done some cool things with them over the past few years, it’s just the same old thing of finding the time!
With the majority of projects I work on we’ve actually standard pipeline that do involve deploying to App Center as well as TestFlight and Google Play etc, so if you want to provide a bit more information and submit a request through the Xamarin how-to Get Help section then we can see what we can do to help you.
Hi, may I ask if Apple Storekit API is also exempted from the Apple/US Government requirements since it encrypt user credential and passes it to the app store. If so, is there a need to submit a self classification report and what should the ECCN be for an app that uses storekit framework? Thank you!
Hi Jay,
That’s an interesting question I’m sure, probably just a bit beyond a quick answer from a tech forum though I’m afraid, especially given the all potential legal considerations.
If you want to provide a bit more information and submit a request through the Xamarin how-to Get Help section then we can see what we can do to help you, otherwise best of luck with it :).
Hi Matt, this is so simple yet so amazing, thank you! This was the last manual part of our nightly build automation, so am glad we can finally get rid of this tedious process.
Hey, thanks a million for this.
I always deploy Test Flight releases last thing on Friday, and then I end up having to sit and wait for the App Store scanning to finish so I can click through said menu. Sometimes it delays my start of the weekend by several hours when it could’ve been automated. Also more often than not I end up logging in using my phone to see if I can do the compliance stuff, and since I’m running Android instead of iOS, the 2FA can be a pain in the ass when it decides to kick in (about 50% of the time… )