Question

I installed a Jenkins and startet a Project with the Git Plugin, Xcode Plugin and the Testflight Plugin.

I can create automatic builds with the setup, but it is failing at the point on creating the .ipa files for Testflight.

The problem are at Debug and Release settings in different ways though…

If i try to create a .ipa via the Debug settings it will fail at the point that there is no build/Debug-iphoneos folder (i tried to turn of the clean option but it didn't helped). But the Xcode Build is not failing on the command line

When i try to switch to Release the linker is failing (ld).

Whithout the .ipa files i can't submit to Testflight and get a automated Test distributing.

Was it helpful?

Solution

Here is the script I'm using. (Obviously I removed the personal information, but you should be fine to understand it).

TARGET_NAME="-"     # Target name
TARGET_SDK="iphoneos"                   # Target SDK: iphoneos
CONFIGURATION="Release"     # Build Configuration
BUILD_DIR="build"                       # Directory where the build is generated
ARCHS="armv7"                           # Valid Architectures
APP_NAME="-"                # Application name

## Provisioning configurations
BUILD_ARCHIVED_DIR="BuildArchived"                  # Directory with the history of builds
DEVELOPER_NAME="-"  # Developer name
PROVISIONING_PROFILE=Prototype.mobileprovision      # Provisioning profile file
PROVISIONING_DIR=~/Library/MobileDevice/Provisioning\ Profiles/                     # Provisioning dir

## TestFlight App
TESTFLIGHT_API_TOKEN="-"    
TESTFLIGHT_TEAM_TOKEN="-"


#Release Notes
BUILDSCRIPTS_DIR="build"
TESTFLIGHT_RELEASE_NOTES_FILE="ios_testflight-releasenotes"


#Distribution Lists
TESTFLIGHT_DISTRIBUTION_LISTS="Jenkins"


# Returns to the root directory of the build
cd ../ios

PROJECT_BUILDDIR="${BUILD_DIR}/${CONFIGURATION}-${TARGET_SDK}"
CURRENT_DIR=`pwd`

# fix for the newest sdk
# Only export the environment variable if the location exists,
# otherwise it breaks the signing process!
if [ -f "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate" ]
then
  echo Export environment variable for codesign_allocate location
  export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
fi


#changing the build version
INFO_PLIST_PATH="${CURRENT_DIR}/${TARGET_NAME}/${TARGET_NAME}-Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${SVN_REVISION}" $INFO_PLIST_PATH


# compile project
echo Building Project
xcodebuild -target "${TARGET_NAME}" -sdk "${TARGET_SDK}" ARCHS=${ARCHS} -configuration "${CONFIGURATION}" clean build

#Check if build succeeded
#if [ $? != 0 ]
#then
#  exit 1
#fi

# Create output dir ($x) if doesn't exist
mkdir -p $BUILD_ARCHIVED_DIR

# .ipa file generation
echo Generating .ipa file 
/usr/bin/xcrun -sdk "${TARGET_SDK}" PackageApplication -v     "${PROJECT_BUILDDIR}/${APP_NAME}.app" -o     "${CURRENT_DIR}/${BUILD_ARCHIVED_DIR}/${APP_NAME}.ipa" --sign "${DEVELOPER_NAME}" 

#zipping the .dSYM to send to Testflight
echo Generating zip file
/usr/bin/zip -r "${CURRENT_DIR}/${BUILD_ARCHIVED_DIR}/${APP_NAME}.app.dSYM.zip" "${CURRENT_DIR}/${PROJECT_BUILDDIR}/${APP_NAME}.app.dSYM"

echo Sending to TestFlight
curl http://testflightapp.com/api/builds.json -F file="@${CURRENT_DIR}/${BUILD_ARCHIVED_DIR}/${APP_NAME}.ipa" -F dsym="@${CURRENT_DIR}/${BUILD_ARCHIVED_DIR}/${APP_NAME}.app.dSYM.zip" -F api_token="${TESTFLIGHT_API_TOKEN}" -F team_token="${TESTFLIGHT_TEAM_TOKEN}" -F notes="This build was uploaded via the upload API" -F notify=False -F distribution_lists="${TESTFLIGHT_DISTRIBUTION_LISTS}" 
echo Submission ended

OTHER TIPS

I imagine the Scheme your build is targeting is incorrect.

Additionally, TestFlight has a plugin for Jenkins so you can script your build process and execute the upload to TestFlight using the their Jenkins Plugin. I have provided a build script example that works for me via manual command line and under Jenkins CI.

If you would like to see the full setup, you can find a iOS/Git/TestFlight tutorial here: Jenkins iOS – Git, xcodebuild, TestFlight

xcodebuild -alltargets clean

rm -rf "./JenkinsBuild/*"

xcodebuild -target HelloJenkins PROVISIONING_PROFILE="00000000-0000-0000-0000-000000000000" CONFIGURATION_BUILD_DIR=JenkinsBuild

rm -rf "./JenkinsArchive/*"

xcodebuild -scheme HelloJenkins archive PROVISIONING_PROFILE="00000000-0000-0000-0000-000000000000" CODE_SIGN_IDENTITY="iPhone Developer: Jonny Appleseed (XXXXXXXXXX)" -archivePath ./JenkinsArchive/HelloJenkins.xcarchive

rm -rf "./JenkinsIPAExport/*"

xcodebuild -exportArchive -exportFormat IPA -exportProvisioningProfile iOS\ Team\ Provisioning\ Profile:\ com.yourAPP.HelloJenkins -archivePath ./JenkinsArchive/HelloJenkins.xcarchive -exportPath ./JenkinsIPAExport/HelloJenkins.ipa
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top