22

스택 오버플로에서 여기에 복제하기에는 너무 많은 노력이 필요한 코드, 스크린 샷 등으로 언급 된 블로그의 서식을 지정하는 데 많은 시간을 보냈습니다. 그것은 내가 커뮤니티가이 분야에서 도움이 될 것이라고 생각했다. (나는 오랫동안 그것을 고치려고 애썼다.) 그래서 나는이 질문과 대답을 게시했다. 이 게시물의 의도가 여전히 사악하다고 생각하시는 분은 언제든지 댓글을 달아주세요. 삭제 해 드리겠습니다.Xcode Bot에서 자동화 된 빌드를 TestFlight에 배포하려면 어떻게합니까?

질문 : 테스트 용 비행을 통해 완성 된 빌드를 내 테스터에게 지속적으로 통합하고 보내려면 멋진 Xcode 서버와 Bots를 어떻게 구성해야합니까? 나에게 이것은 iOS 세계에서 CI의 성배처럼 보였으므로 나는 그것을 이해하기 위해 많은 시간을 보냈다.

이 프로세스는 적어도 초기 릴리스에서는 매버릭스의 XCode 서버 소프트웨어에 의해 올바르게 수행되지 않은 수동 작업이 필요합니다. 많은 시간과 심지어 스크립팅을 통해 모든 것을 파악하고 작동하게 만들었으며 결과를 공유하게되어 기쁩니다.

이 질문에 가치를 추가하기 위해 아래 보관 프로세스 중에 실행해야하는 post-op 스크립트를 게시했습니다. 아래 블로그에 대한 링크는 자세한 정보가 필요하면 단계별 세부 정보를 제공합니다.

#!/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 [email protected]"${IPA}" \ 
-F [email protected]"${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!" 

나는 그것이 커뮤니티에 공동으로 더 많은 것을 저장할 것입니다. TestFlight에 빌드의 다음

+0

나는 이것을 "스택 오버플로 스타일"포스트로 만드는 것에 대해 저자와 이야기를 나누었습니다. 그에게 수정을 할 수있는 기회를주기 위해 잠시 플래그를 지정하거나 다른 행동을 취하십시오. – Pops

+0

다시 추가해 주셔서 감사합니다. 개정 내용이 적합하고 모든 사람에게 도움이되기를 바랍니다. – mattv123

답변

11

http://matt.vlasach.com/xcode-bots-hosted-git-repositories-and-automated-testflight-builds/는 제 3 자 자식 저장소에 연결된 어떻게 엑스 코드 봇을 만들 설명 게시물에 대한 링크입니다, 자동화 된 배포 : 여기

링크입니다

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

희망이 있습니다. 의견이나 피드백을 보내주십시오.

+2

Xcode 6에서는 업데이트되지 않습니다. –

+0

링크가 작동하지 않습니다. – RaffAl