DEPRECATED ON JUNE 2027
SEE NEW OFFICIAL METHOD @ How to make your continuous integration more continuous?
--
OMA provides you with internal GitLab CI runners ( beta ) in order to automatically deliver your application to testflight.
First of all, take a look at this tutorial if you know nothing about GitLab CI :
https://gitlab.forge.orange-labs.fr/mldm7393/gitlab-ci-tutorial/blob/master/README.md
Then:
- Contact OMA team ( oma.support@orange.com ) to create and register a specific runner for your project.
-
Configure your project to use GitLab CI or - if you already use it - add a step to call our runner. Here's an example of what looks like the configuration file on a project that uses one runner to build and one runner to deploy on testflight:
stages: - build - testflight build_project: stage: build script: - cd Example - carthage update --cache-builds --platform iOS --configuration Release - xcodebuild archive -project AppsPlusDemo.xcodeproj -archivePath ../archive/AppsPlusDemo.xcarchive -scheme AppsPlusDemo-Carthage artifacts: paths: - archive/AppsPlusDemo.xcarchive tags: - ios - inhouse - xcode 10.2 sign: stage: testflight script: - sh /Users/runner/gitlab_runner/supersign/gitlab_runner_utils/testflight.sh tags: - testflight -
add a project.yml file into the root folder of your project. Here's an example of such configuration file:
--- uploadBitcode: false uploadSymbols: true stripSwiftSymbols: true bundleid: com.orange.AppsPlusDemo: com.orange.appsplus slack-webhook-url: "http://hooks.slack.com/path/to/the/webhook" testflight: - me@gmail.com - testernumberone@gmail.com - famoustester@orange.com xcarchive: AppsPlusDemo.xcarchive whatsNew: "fixes crash at launch"uploadBitcode: set true is your application uses bitcode, false otherwise. ( update: since BITCODE has been deprecated years ago, this should be always set to false )
uplaodSymbols: set true if you want to upload symbols ( should be always set to true ).
stripSwiftSymbols: mirrors your project configuration ( fyi, this option is set to true by default in Xcode ).
bundleid: a dictionnary that contains your development app ids as keys and production app ids ( ask us if not sure about it ) as values. You have to list all the app ids you use : app extension, watch app, watch app extension.
Reminder: if you use app extensions and uses shared app group or keychains, you will probably have to use ORASupersign in order to make it work after signature (see how to configure ORASupersign in your Info.plist).
slack-webhook-url (optional ): the slack webhook url where feedback messages are sent. See Slack documentation for how to get this web hook url.
testflight: an array of testers emails you want to add to the testflight.
xcarchive: the name of you xcarchive. Note that the runner expects it to be in a "archive" sub-directory of your project root folder.
whatsNew: the What to test message to send to testers once the testflight application is validate
feedbackEmail (optional ): email address where users can send feedback directly. Useful for gathering direct user insights outside of TestFlight or app review mechanisms.
description ( optional ): a brief description of the project or build, often used to inform testers or stakeholders about the key features or changes in this particular build.
marketingURL ( optional ): a URL linking to marketing or promotional materials associated with this build or the overall project. This is useful for testers to get an understanding of the app’s market positioning.
name ( optional ): the formal name of the application as it should appear in communications and during the TestFlight process.
privacyPolicyURL (optional ): a URL to the privacy policy relevant to this application. Essential for informing testers and users about the data handling practices of the app.
demoAccountLogin ( optional ): the username for a demo account that can be used by testers to explore the app without needing to create a personal account.
demoAccountPassword ( optional ): the password for the demo account. Ensure this is communicated securely to testers.
*** new functionality ***
testflight-beta-group ( optional ): specifies the beta group within TestFlight to which this build will be associated. Allows for organizing multiple builds under groups like 'dev', 'prod', or 'beta' to target specific tester groups or phases of development. Note that the generated public link remains the same for a group.
PRO TIP:If you need to associate a new build with an older build group where testflight-beta-group was not defined, you can set testflight-beta-group as follows: "{VERSION} ( {BUILD_VERSION} )". Here, {VERSION} and {BUILD_VERSION} refer to the version and build version of the older build, respectively. Note that spaces around the parentheses are important.
What does it do?
The runner resigns your build, uploads it to AppStore Connect, waits for build processing, creates a testflight group, adds testers to it, adds your build to the group and finally submits it for beta review.
Internal Gitlab limitations
xcarchive size limit for artefacts is 200MB. If your archive is above this limit, please use this workaround ( shared by Karl Cosse ):
- Remove artifacts stuff in your configuration
- At the end of build stage, zip and archive on artifactory
- zip -qr "build/archive/${GITLAB_XCARCHIVE}.zip" "build/archive/${GITLAB_XCARCHIVE}"
- curl -u${ARTIFACTORY_USER}:${ARTIFACTORY_PWD} -T "build/archive/${GITLAB_XCARCHIVE}.zip" "https://artifactory-iva.si.francetelecom.fr/artifactory/gen-virt-orange-product-devops-unstable/OEM/Builds/${GITLAB_GOROCO}/${GITLAB_BUILD}/${GITLAB_XCARCHIVE}.zip"- At the beginning of testflight stage, download and unzip the archive at the right destination
- curl -O "https://artifactory-iva.si.francetelecom.fr/artifactory/gen-virt-orange-product-devops-unstable/OEM/Builds/${GITLAB_GOROCO}/${GITLAB_BUILD}/${GITLAB_XCARCHIVE}.zip"
- unzip -qa "${GITLAB_XCARCHIVE}.zip"
That's it!
What if my job timeouts?
The default timeout for gitlab jobs is one hour but some apps can take more than one hour to process on AppStore Connect.
If it is your case, just go in your gitlab project settings and increase timeout value.
OMA Portal
The runner is now integrated to OMA Portal and everything is automatic. Each job will generate a testflight request on your project and a public testflight link will be generated and added to OMA Portal at publication time.
*** UPDATE REGISTRATION ( October 2023 ) ***
New gitlab version deprecated token registration.
Runner has to be configured and added on gitlab UI :
- Go to Settings -> CI/CD
- Go to Runners section
- Push "New Project Runner" button
- Configure it : select "MacOS" platform, choose a name, specify tags you want, etc
- Push "Create Runner" button
- Provide me with generated registration command
- Wait for me to type it in the right terminal window :|
Comments
2 comments
Great! Good job
This will able us to go to the next level ;)
What happends with Android? How can we do IC?
Please sign in to leave a comment.