Skip to content

Instantly share code, notes, and snippets.

@justinokamoto
Created November 5, 2014 19:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save justinokamoto/9bbe8837081e1aa88041 to your computer and use it in GitHub Desktop.
Save justinokamoto/9bbe8837081e1aa88041 to your computer and use it in GitHub Desktop.
Script for deploying iOS app to TestFlight with Xcode 6.1 & Xcode Server 4
#!/bin/bash
#
# (Above line comes out when placing in Xcode scheme)
#
# Valid and working as of 11/4/2014
# Xcode 6.1, XCode Server 4
#
API_TOKEN="<Your TestFlight API Token>"
TEAM_TOKEN="<Your TestFlight Team Token>"
DISTRIBUTION_LISTS="<Comma separated TestFlight Distribution List Names for auto deploy>"
PROVISIONING_PROFILE="/Library/Developer/XcodeServer/ProvisioningProfiles/<your file name here>.mobileprovision"
SIGNING_IDENTITY="<your provisioning profile name here>"
# EXAMPLE: "iPhone Distribution: Company, Inc."
# DO NOT EDIT BELOW HERE!
########################################
DSYM="${ARCHIVE_DSYMS_PATH}/${PRODUCT_NAME}.app.dSYM"
IPA="/tmp/${PRODUCT_NAME}.ipa"
APP="/tmp/Archive.xcarchive/Products/Applications/${PRODUCT_NAME}.app"
# Remove previous archive files from tmp folder
echo "Removing old Archive files from /tmp...";
/bin/rm -rf /tmp/Archive.xcarchive*
# Copy over the latest archive to tmp folder
echo "Copying latest Archive to /tmp...";
/bin/cp -Rp "${ARCHIVE_PATH}" "/tmp/"
# Create .ipa in tmp folder
echo "Creating .ipa for ${PRODUCT_NAME}..."
/bin/rm "${IPA}"
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${APP}" -o "${IPA}" --sign "${SIGNING_IDENTITY}" --embed "${PROVISIONING_PROFILE}"
echo "Created .ipa for ${PRODUCT_NAME}."
# Zip .DSYM
echo "Zipping .dSYM for ${PRODUCT_NAME}..."
/bin/rm "${DSYM}.zip"
/usr/bin/zip -r "${DSYM}.zip" "${DSYM}"
echo "Created .dSYM for ${PRODUCT_NAME}."
# Upload files to TestFlight
echo "*** Uploading ${PRODUCT_NAME} to TestFlight ***"
/usr/bin/curl "http://testflightapp.com/api/builds.json" \
-F file=@"${IPA}" \
-F dsym=@"${DSYM}.zip" \
-F api_token="${API_TOKEN}" \
-F team_token="${TEAM_TOKEN}" \
-F distribution_lists="${DISTRIBUTION_LISTS}" \
-F notes="Build uploaded automatically from Xcode Server Bot."
echo "TestFlight upload finished!"
@cloudsail
Copy link

I was trying to make use of the ipa file that Xcode creates at the end of the integration process, but for some reason it seems like it doesn't want to create this file until every single step in the integration has run, including the post-integration triggers. This makes absolutely no sense to me, and makes me think maybe I'm doing something wrong. Did you also have this problem? Is this why you have to create the ipa file yourself?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment