Jenkins + iOS + TestFlight API

Я установил Jenkins и начал проект с помощью плагина Git, плагина Xcode и плагина Testflight.

Я могу создавать автоматические сборки с установкой, но в момент создания файлов.ipa для Testflight это не удается.

Проблема в настройках Debug и Release по-разному, хотя...

Если я попытаюсь создать.ipa через настройки Debug, он потерпит неудачу в тот момент, когда нет папки build/Debug-iphoneos (я попытался отключить опцию clean, но это не помогло). Но Xcode Build не дает сбоя в командной строке

Когда я пытаюсь переключиться на Release, компоновщик не работает (ld).

Без.ipa-файлов я не могу отправить в Testflight и получить автоматическое распространение Test.

2 ответа

Решение

Вот сценарий, который я использую. (Очевидно, я удалил личную информацию, но вы должны быть в порядке, чтобы понять это).

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

Я полагаю, что схема, на которую нацелена ваша сборка, неверна.

Кроме того, TestFlight имеет плагин для Jenkins, поэтому вы можете написать сценарий процесса сборки и выполнить загрузку в TestFlight, используя их плагин Jenkins. Я предоставил пример сценария сборки, который работает для меня через командную строку вручную и под Jenkins CI.

Если вы хотите увидеть полную настройку, вы можете найти учебник по iOS/Git/TestFlight здесь: 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
Другие вопросы по тегам