24

上記のブログをコード、スクリーンショットなどでフォーマットするのにかなりの時間を費やしました。これは、スタック オーバーフローでここに複製するにはあまりにも労力がかかります。そうは言っても、コミュニティがこの分野で何らかの助けを求めていると考えたので (私は長い間、すべてを理解するのに苦労しました)、この質問とそれぞれの回答を投稿しました。それでもこの投稿の意図が悪質だと思われる場合は、その旨コメントしてください。削除します。

問題は、新しい 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/

4

2 に答える 2

12

TestFlight へのビルドの自動デプロイを使用して、サード パーティの git リポジトリに接続された Xcode ボットを作成する方法を概説する投稿へのリンクを次に示します。

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

それが役に立てば幸い!コメントやフィードバックをお寄せください。

于 2013-10-24T01:06:38.260 に答える
0

クロスコード 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 ログ




6. ビルドを確認する

于 2021-07-07T08:19:35.647 に答える