代码之家  ›  专栏  ›  技术社区  ›  mattv123

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

  •  27
  • mattv123  · 技术社区  · 11 年前

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

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

    这个过程涉及一些手动工作,但小牛队的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 回复  |  直到 9 年前
        1
  •  14
  •   mattv123    11 年前

    这里有一个链接,链接到一篇文章,概述了如何创建一个Xcode bot,连接到第三方git存储库,并将构建自动部署到TestFlight:

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

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

        2
  •  2
  •   Den    3 年前

    X代码12

    使用 xcode生成 命令行工具


    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文件,您需要“ 导出选项.plist ”文件。

    导出选项.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.检查你的身材