Xcode Cloud
You can use the Fastlane action or HTTP API to upload builds as part of an Xcode Cloud workflow.
Xcode Cloud is a continuous integration system built by Apple, focusing on ease of use and direct integration into the Xcode environment. Whether you are using Fastlane or prefer to use Emerge's REST API it's easy to integrate a build upload step into your Xcode Cloud environment. This method is a great way to get started with Emerge if your project hasn't yet set up Github Actions.
Here is an example of a script you can use to upload. This file would be in ci_scripts/ci_post_xcodebuild.sh
In this example the repo_name
variable needs to be replaced with the name of your repo. Also, ensure you have generated an API key and set EMERGE_API_KEY
.
#!/bin/sh
set -e
required_env_vars=(
"CI_ARCHIVE_PATH"
"CI_BRANCH"
"CI_COMMIT"
"EMERGE_API_KEY"
)
for var in "${required_env_vars[@]}"; do
if [[ -z "${!var}" ]]; then
echo "Environment variable $var is not set"
exit 1
fi
done
brew install jq
zip_path="$CI_ARCHIVE_PATH.zip"
pushd $(dirname $CI_ARCHIVE_PATH)
zip -r --symlinks "$(basename $zip_path)" "$(basename $CI_ARCHIVE_PATH)"
popd
# Update this with your repo
repo_name='MyOrg/MyRepo'
tag='release'
if [[ "$CI_XCODE_SCHEME" == "My Debug Archive Scheme" ]]; then
tag='debug'
fi
json_fields=$(cat <<EOF
"filename":"${zip_path}",
"branch":"${CI_BRANCH}",
"sha":"${CI_COMMIT}",
"repoName":"${repo_name}",
"tag":"${tag}"
EOF
)
# For previousSha (required for only some features): Check if git is available
if ! command -v git &> /dev/null; then
echo "Git is not installed or not in PATH. Cannot fetch previous SHA."
elif ! git rev-parse --is-inside-work-tree &> /dev/null; then
echo "Not in a Git repository. Cannot fetch previous SHA."
else
if git rev-parse HEAD^ >/dev/null 2>&1; then
previous_sha=$(git rev-parse HEAD^)
json_fields=$(cat <<EOF
${json_fields},
"previousSha":"${previous_sha}"
EOF
)
fi
fi
if [[ -n "${CI_PULL_REQUEST_NUMBER}" ]]; then
pr_required_env_vars=(
"CI_PULL_REQUEST_NUMBER"
"CI_PULL_REQUEST_TARGET_COMMIT"
)
for var in "${pr_required_env_vars[@]}"; do
if [[ -z "${!var}" ]]; then
echo "Environment variable $var is not set"
exit 1
fi
done
json_fields=$(cat <<EOF
${json_fields},
"prNumber":"${CI_PULL_REQUEST_NUMBER}",
"baseSha":"${CI_PULL_REQUEST_TARGET_COMMIT}"
EOF
)
fi
upload_response=$(curl \
--url "https://api.emergetools.com/upload" \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header "X-API-Token: $EMERGE_API_KEY" \
--data "{$json_fields}")
# Pull the uploadURL field from the response using jq
upload_url=$(echo "$upload_response" | jq -r .uploadURL)
curl -v -H 'Content-Type: application/zip' -T "$zip_path" "$upload_url"
Updated about 1 month ago