Codemagic (iOS)

Check out our Fastlane Plugin documentation to understand how to configure it to upload your iOS builds.

Configuring access to Emerge in Codemagic

Follow our steps on obtaining an API key and add the API Key under the environment variables section in Codemagic.

Name the variable as EMERGE_API_TOKEN and put it under the group emerge_credentials. Then, you can refer to the variable group in codemagic.yaml as:

workflows:
  ios-workflow:
    name: iOS Workflow
    environment:
      groups:
        - emerge_credentials

Fastlane Action

The Fastlane action will upload either a release build or development build to Emerge depending on the branch used to trigger the build.

When a build is triggered by a pull request, Codemagic merges the master branch into your PR branch. We can access the SHA of the merge commit's parent to obtain a base_build_id that gets passed to the Emerge action.

When a build is triggered from the master branch we upload a master build type with the current git SHA as the build_id.

Here’s an example Fastfile that brings it all together:

fastlane_require 'git'

default_platform(:ios)

git = Git.open('..')

platform :ios do
  lane :emerge_app_upload do
    BRANCH = ENV["CM_BRANCH"]
    IS_PULL_REQUEST = ENV["CM_PULL_REQUEST"]
    PR_NUMBER = ENV["CM_PULL_REQUEST_NUMBER"]
    REPO_NAME = ENV["CM_REPO_SLUG"]
    CURRENT_BUILD_ID = ENV["CM_COMMIT"]
    FILE_PATH = "/build/ios/xcarchive/swiftly.xcarchive"
    BASE_BUILD_ID = git.log[0].parent.sha
    PARENT_BUILD_ID = git.log[0].sha
    PREVIOUS_BUILD_ID = git.log[1].sha
    
    if IS_PULL_REQUEST == "true"
      emerge(
        file_path: FILE_PATH,
        build_type: "pull_request",
        repo_name: REPO_NAME,
        pr_number: PR_NUMBER,
        sha: CURRENT_BUILD_ID,
        base_sha: BASE_BUILD_ID,
        previous_sha: PREVIOUS_BUILD_ID
      )
    elsif BRANCH.eql? "main"
      emerge(
        file_path: FILE_PATH, 
        build_type: "main",
        repo_name: REPO_NAME,
        sha: PARENT_BUILD_ID
        previous_sha: PREVIOUS_BUILD_ID
      )
    end
  end
end

This script checks if the current build is building a pull request. If it is a pull request, it takes the source commit of the build and compares it to the build of the base commit hash. Then, it uploads to Emerge for processing. Otherwise, it uploads the build to Emerge with the type "main".

To use it in your codemagic.yaml, use the lane that you created:

- name: Upload archive to Emerge Tools
   script: bundle exec fastlane emerge_app_upload

Example codemagic.yaml file

You can upload the iOS build to Emerge Tool as a part of your Codemagic CI/CD workflow to automate the process. Here is an example of scripts you can add to your codemagic.yaml for building the archive and uploading it to Emerge:

scripts:
      - name: Bundle install
        script: | 
          bundle install
      - name: Install Emerge Fastlane plugin
        script: |
          fastlane add_plugin emerge
      - name: Build ipa for distribution
        script: | 
          xcode-project build-ipa --project "$XCODE_PROJECT" --scheme "$XCODE_SCHEME"
      - name: Upload archive to Emerge Tools
        script: | 
          bundle exec fastlane emerge_app_upload