【问题标题】:Xcode 5 bots and Testflight automated buildsXcode 5 机器人和 Testflight 自动构建
【发布时间】:2013-11-02 19:01:18
【问题描述】:

首先,我在 Mavericks 上有一个运行服务器的 Mac Mini,并安装了 Xcode 5。在服务器上,我使用 Bots 设置了我的 iOS 项目,以便在每次提交到 master 时运行我的 Github 存储库的自动构建。我想知道的是,是否有人已经配置了这种设置来处理发送到 TestFlight 的自动构建。

之前与 Jenkins 构建过程一起工作的脚本粘贴在下面,但会引发错误并且在机器人完成构建时不会上传。我让这个脚本在我的应用程序存档过程的“后操作”上运行。

服务器日志错误:

打印:条目“CFBundleVersion”不存在

错误:指定的应用程序不存在或不是捆绑目录:'/Library/Server/Xcode/Data/BotRuns/Cache/s892fj1n2-f4bb-2514-522v-2a23d0f0c725/DerivedData/Build/Products/Debug -iphoneos/myApp.ipa'

脚本:

 PLIST_FILE=$(echo -n "${SRCROOT}/${INFOPLIST_FILE}")
 BUILD_TYPE=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PLIST_FILE}")
 API_TOKEN="<API_TOKEN>"
 TEAM_TOKEN="<SECRET>"

 APP="${BUILD_ROOT}/Debug-iphoneos/${FULL_PRODUCT_NAME}"

/bin/rm "/bots/${PRODUCT_NAME}.ipa"
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${APP}" -o "/bots/${PRODUCT_NAME}.ipa"

/usr/bin/curl "http://testflightapp.com/api/builds.json" \
-F file=@"/bots/${PRODUCT_NAME}.ipa" \
-F a      pi_token="${API_TOKEN}" \
-F team_token="${TEAM_TOKEN}" \
-F notes="Build uploaded automatically from server." \
-F distribution_lists="internal"

11/20 更新:

一个很好的尝试资源: TestFlight Bots

几周前我没有让它工作,但自从我上次尝试后,帖子已经更新了。

【问题讨论】:

  • 在这个线程上有太多关于 TestFlight 的讨论。该问题与TestFlight无关,与xcrun进程创建的错误有关:指定的应用程序不存在或不是捆绑目录
  • 不幸的是,这不适用于 Xcode 6

标签: ios xcode5 testflight xcode-bots


【解决方案1】:

这看起来像是权限问题。您可以访问 \Library\XCode\Data 文件夹吗?我能够运行您的脚本(上传到 testflight 除外)。我必须授予对 \Data 的读取权限和对目标文件夹的写入权限,然后我看到 ipa 已创建。

【讨论】:

  • 我还没有机会对此进行测试,如果这是问题所在,我会告诉你。谢谢!
  • 差不多一个月后......这并没有完全解决它,但它确实有帮助。我仍然无法上传 TestFlight 版本,但我确实找到了另一个很好的资源(添加了指向我原始帖子的链接)。
【解决方案2】:

我正在研究如何将我的团队从 iOS 构建的 Jenkins 农场切换到新的 Xcode 机器人服务器。在成功的 CI 构建/测试后,关于持续部署,我有一个非常相似的问题需要解决。

我(还)没有答案,但是,我想分享一些我发现可能对你有帮助的东西。

两个线程可能有助于为您的 TestFlight 上传在机器人服务器上失败的原因提供线索。

根据 Kra Larivain 的说法,this post regarding the CocoaPods CLI and Xcode bots

  • “构建作为非特权用户在机器人上运行,没有外壳(_teamsserver 使用 /usr/bin/false 作为外壳)”

  • “将_teamsserver 添加到无密码的sudoers(%_teamsserver ALL=(ALL) NOPASSWD: ALL 在你的sudoers 文件中)。你可能想要更聪明一点,只授予它sudo 权限”用于实际需要的命令

  • /Library/Server/Xcode/Data 仅由_teamsserver 用户设置为 rw

  • "将以下脚本添加到您的预操作中,其中BUILD_USER 是您的构建用户。确保您的主要目标是Provide build settings from,否则不会设置SRCROOT(默认是None)。” 此示例适用于 CocoaPods,但可以根据您的使用进行调整

if [ `whoami` = '_teamsserver' ]; then
echo "running pod install as part of CI build"
chmod 777 /Library/Server/Xcode/Data
cd ${SRCROOT}
rm ./Podfile.lock
rm -rf ./Pods
sudo chown -R BUILD_USER .
sudo -H -u BUILD_USER pod install
sudo chown -R _teamsserver .
fi

您可能已经看过这个,但是,对于其他人来说,这是值得一提的。查看 Justin Miller 的 post on Xcode and testflight post-archive actions 以与您的脚本进行比较。

祝你好运! 史蒂夫

【讨论】:

  • 我之前确实看过这篇文章,我将尝试重新开始。我添加了指向原始帖子的链接,这也可能有所帮助。我会回复对我有用的东西。谢谢!
  • @Mark,有进展吗?我是 CI 新手,在使用 Cocoapods 的项目中遇到了同样的问题。
  • @EdGs 我在它上面工作了一段时间,最终暂时回到使用 Jenkins,我只是无法上传 TestFlight 构建。我尝试过的最好的事情(我认为)是this link。顺便说一句,Apple 最近确实收购了 Burstly(拥有 TestFlight 的公司)source,所以也许我们会在不久的将来看到与 Xcode Server 的一些集成。
  • "将以下脚本添加到您的预操作中,其中 BUILD_USER 是您的构建用户"您需要在某处进行设置吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
  • 2015-04-09
  • 1970-01-01
  • 2016-08-07
相关资源
最近更新 更多