Question

I am currently using Jenkins on an independent server for iOS continuous integration. Jenkins builds, tests, and creates HTML links so the app can be downloaded from ad-hoc devices (Continuous Delivery).

Whenever I make an App Store release I get the code of the build I want and I make a build out of it. This presents a problem, since the although the code is the same, the binary is not guaranteed to be the same since two different machines are involved.

You usually read that in continuous integration releases should be a non-event. This works for me for the everyday builds but, what is the best approach to make App Store releases in a continuous integration environment?

Was it helpful?

Solution

I ended up adding a new job in Jenkins which only builds an .xcodearchive. That job belongs to a pipeline and is the last task to be executed. The command used to build the archive is:

xcodebuild -scheme ${JK_SCHEMA_NAME} -archivePath ${JK_OUTPUT_DIR}/${JK_ARCHIVE_NAME} clean archive "CODE_SIGN_IDENTITY=${JK_CODE_SIGN_IDENTITY}" "GCC_PREPROCESSOR_DEFINITIONS=${GCC_PREPROCESSOR_DEFINITIONS} ${JK_GCC_PREPROCESSOR_DEFINITIONS}" "PROVISIONING_PROFILE=${JK_PROVISIONING_PROFILE_UDID}"

This way I can make sure the flow to deliver an app from commit to final binary for the store is completely automated (or at least doesn't need human interaction). The version numbers are correctly set, and that there are no changes in source code or compiling options that can alter the final archive uploaded to the store.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top