如何从Xcode Bot向TestFlight部署自动构建?

时间:2013-10-24 01:06:38

标签: ios xcode continuous-integration build-automation testflight

我花了很多时间使用代码,屏幕截图等格式化所提到的博客,这在Stack Overflow上复制太多。那说我认为社区会在这个领域需要一些帮助(我很长时间都在努力搞清楚),所以我发布了这个问题和各自的答案。如果你仍然认为这篇文章的意图是邪恶的,请这样评论,我会删除它!

问题是:如何使用Bots配置我喜欢的新Xcode服务器,以便通过测试飞行不断集成并将完成的构建发送给我的测试人员?对我而言,这似乎是iOS世界中CI的圣杯,所以我花了很多时间来弄明白。

该过程涉及一些手动工作,这些工作似乎无法通过Mavericks中的XCode服务器软件正确完成,至少在初始版本中是这样。我花了很多时间甚至一些脚本来弄清楚这一切并让它发挥作用,我很高兴分享结果。

为了增加这个问题的价值,我发布了你应该在下面的存档过程中运行的操作后脚本。如果您需要更多信息,下面我的博客链接会提供详细的步骤。

#!/bin/bash
#
# (Above line comes out when placing in Xcode scheme)
#
# Valid and working as of 10/29/2013
# Xcode 5.0.1, XCode Server 
#
API_TOKEN="<Your TesFlight API Token>"
TEAM_TOKEN="<Your TestFlight Team Token>"
DISTRIBUTION_LISTS="<Comma separated TestFlight Distribution List Names for auto deploy>"
PROVISIONING_PROFILE="/Library/Server/Xcode/Data/ProvisioningProfiles/<your file name here>.mobileprovision"
#EXAMPLE:"/Library/Server/Xcode/Data/ProvisioningProfiles/DocLink_InHouse_2013.mobileprovision"

SIGNING_IDENTITY="<your provisioning profile name here>"
#EXAMPLE:"iPhone Distribution: Unwired Revolution, LLC."

# DO NOT EDIT BELOW HERE!
########################################
DSYM="/tmp/Archive.xcarchive/dSYMs/${PRODUCT_NAME}.app.dSYM"

IPA="/tmp/${PRODUCT_NAME}.ipa"

APP="/tmp/Archive.xcarchive/Products/Applications/${PRODUCT_NAME}.app"

# Clear out any old copies of the Archive
echo "Removing old Archive files from /tmp...";
/bin/rm -rf /tmp/Archive.xcarchive*

#Copy over the latest build the bot just created
echo "Copying latest Archive to /tmp/...";
LATESTBUILD=$(ls -1rt /Library/Server/Xcode/Data/BotRuns | tail -1)
/bin/cp -Rp "/Library/Server/Xcode/Data/BotRuns/${LATESTBUILD}/output/Archive.xcarchive" "/tmp/"

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 "Done with IPA creation."

echo "Zipping .dSYM for ${PRODUCT_NAME}"
/bin/rm "${DSYM}.zip"
/usr/bin/zip -r "${DSYM}.zip" "${DSYM}"

echo "Created .dSYM for ${PRODUCT_NAME}"

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!"

我希望我花在它上面的所有时间都将为社区集体拯救他们的更多!

以下是链接:http://matt.vlasach.com/xcode-bots-hosted-git-repositories-and-automated-testflight-builds/

2 个答案:

答案 0 :(得分:11)

这是一篇帖子的链接,其中概述了如何创建连接到第三方git存储库的Xcode机器人,并自动部署构建到TestFlight:

http://matt.vlasach.com/xcode-bots-hosted-git-repositories-and-automated-testflight-builds/

希望它有所帮助!请注意您的意见或反馈。

答案 1 :(得分:0)

Xcode 12

使用 xcodebuild 命令行工具


1.创建分发证书



2.创建分发资料



3.添加“集成后脚本

[试飞] 脚本

# Remove & Copy assets
rm -r ${XCS_SOURCE_DIR}/Archive
cp -R ${XCS_OUTPUT_DIR}/ ${XCS_SOURCE_DIR}/Archive

# Upload to TestFlight
IFS=$'\n'
ARCHIVE_PATH=$(find ${XCS_SOURCE_DIR}${PRODUCT_NAME} -name "BeBe.xcarchive")
IFS=$' '

IFS=$'\n'
PLIST_PATH=$(find ${XCS_SOURCE_DIR}${PRODUCT_NAME} -name "exportOptions.plist")
IFS=$' '

xcodebuild -exportArchive -archivePath $ARCHIVE_PATH  -exportOptionsPlist $PLIST_PATH -exportPath  $ARCHIVE_PATH



4.在项目文件夹中添加“exportOption.plist”文件

要导出 ipa 文件,您需要“exportOption.plist”文件。

exportOption.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
<dict>
    <key>method</key>
    <string>app-store</string>
    <key>destination</key>
    <string>upload</string>
</dict>
</plist>



5.运行你的机器人 TestFlight Log




6.检查您的构建