如何使用应用商店配置文件退出应用以添加 beta-reports-active 密钥?
Posted
技术标签:
【中文标题】如何使用应用商店配置文件退出应用以添加 beta-reports-active 密钥?【英文标题】:How to resign an app with app store provisioning profile to add beta-reports-active key? 【发布时间】:2014-11-25 16:21:32 【问题描述】:为了通过 Apple 的新 Test Flight 服务分发应用程序,beta-reports-active
密钥需要存在。目前,我正在使用 Apple 的 bot 服务器分发到带有 Ad Hoc 分发配置文件的旧 Test Flight 系统。使用构建后触发器,我想获取已创建的 archive
并构建可以上传到 iTunes Connect 的 App Store Distribution ipa
。我写了一个脚本来做到这一点。我使用xcrun
命令构建:
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "$APP" -o "$APP_STORE_IPA" --sign "$SIGNING_IDENTITY" --embed "$PROVISIONING_PROFILE"
SIGNING_IDENTITY
和 PROVISIONING_PROFILE
都是应用商店分发证书/配置文件。所以配置文件被嵌入到ipa
中,它包含beta-reports-active
标志。但是,当我查看 ipa
以验证其权利时,它并不存在。
我做错了什么?我在这方面看到的所有信息都只是建议重新生成配置文件。我已经这样做了,并且知道密钥存在。它没有被添加到权利中。我有一个小部件也捆绑在 ipa 中。我不会就此辞职。
【问题讨论】:
你能试试这个漂亮的脚本吗?我自己没试过github.com/KrauseFx/sigh 【参考方案1】:您总是可以尝试使用 xcodebuild 导出命令:
xcodebuild -exportArchive -archivePath 'APP' -exportPath 'IPA' \
-exportFormat 'ipa' -exportWithOriginalSigningIdentity
或者如果您想要不同的个人资料和身份:
xcodebuild -exportArchive -archivePath 'APP' -exportPath 'IPA' \
-exportFormat 'ipa' -exportWithOriginalSigningIdentity \
-exportProvisioningProfile profilename -exportSigningIdentity identityname
请参阅man xcodebuild
了解更多信息。
【讨论】:
感谢您的建议。我正在修改我的脚本以使用该命令。现在它失败了:“错误:指定的配置文件和签名身份之间不匹配”这让我感到困惑,因为我已经验证了配置文件是正确的,并且我正在使用我的 ios 分发证书进行签名。有什么想法吗? 我认为您可能需要确保您的签名身份已完全指定。 IE。而不仅仅是“iPhone Distribution”,您使用“iPhone Distribution: Company Ltd. (ABCD1234)” @jervine10 此外,-exportProvisioningProfile
的值是名称,不是 UUID,不是文件名,而是配置文件的实际名称(如 Xcode 中的 Provisioning Profiles 部分所示)构建设置)。如果您需要帮助找到这个,请告诉我。
谢谢,我确实设法弄清楚了,但在那之后我得到了我提到的错误。
@jervine10 您正在使用的配置文件的应用程序 ID 是否匹配?【参考方案2】:
好吧,我想我终于弄明白了。看起来 Bot Server 可能有一些苹果需要解决的问题。我注意到 Bot 服务器生成的分发 IPA 缺少我的应用程序所需的任何权利。我做了一些搜索,发现其他人也有同样的问题。这是一个很好地解释了这个问题的问题:IPA created via Xcode bot fails to run for APNS but runs if built manually via Xcode itself or built as an archive by Xcode
因此,考虑到这一点,我创建了一个权利文件并将其添加到我的项目中,其中包含我需要的最低权利。我对项目中的小部件也做了同样的事情。然后在我的后期集成触发期间,我读取了两个权利文件并为其添加了必要的权利。
# Copy the Entitlements file out of the payload so we can update it
APP_ENTITLEMENTS="/tmp/distributionEntitlements.plist"
rm -rf $APP_ENTITLEMENTS
codesign -d --entitlements :$APP_ENTITLEMENTS "/tmp/Payload/MyAppName.app"
WIDGET_ENTITLEMENTS="/tmp/widgetDistributionEntitlements.plist"
rm -rf $WIDGET_ENTITLEMENTS
codesign -d --entitlements :$WIDGET_ENTITLEMENTS "/tmp/Payload/MyAppName.app/Plugins/$WIDGET_NAME"
# Copy over the latest build the bot just created
echo "Copying latest Archive to /tmp/...";
cp -Rp "$XCS_ARCHIVE" "/tmp/"
APP="/tmp/Archive.xcarchive/Products/Applications/MyAppName.app"
echo "Updating entitlements file"
/usr/libexec/PlistBuddy -c "Add :beta-reports-active bool true" $APP_ENTITLEMENTS
/usr/libexec/PlistBuddy -c "Add :aps-environment string production" $APP_ENTITLEMENTS
cat $APP_ENTITLEMENTS
echo "Updating widget entitlements file"
/usr/libexec/PlistBuddy -c "Add :beta-reports-active bool true" $WIDGET_ENTITLEMENTS
cat $WIDGET_ENTITLEMENTS
当然,您必须再次对这些应用程序进行代码设计:
echo "Codesign the widget"
cp "$WIDGET_PROVISIONING_PROFILE" "$APP/Plugins/$WIDGET_NAME/embedded.mobileprovision"
codesign -fv -s "$FULL_SIGNING_IDENTITY" "$APP/Plugins/$WIDGET_NAME" --entitlements "$WIDGET_ENTITLEMENTS" --preserve-metadata=resource-rules,requirements
echo "Codesign the app"
codesign -fv -s "$FULL_SIGNING_IDENTITY" "$APP" --entitlements "$APP_ENTITLEMENTS" --preserve-metadata=resource-rules,requirements
echo "Creating .ipa"
# Remove any whitespace
FILENAME=$XCS_BOT_NAME// /
echo "Filename: $FILENAME"
APP_STORE_IPA="/tmp/$FILENAME_AppStore_$VERSION_NUMBER.ipa"
rm "$APP_STORE_IPA"
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "$APP" -o "$APP_STORE_IPA" --sign "$SIGNING_IDENTITY" --embed "$PROVISIONING_PROFILE"
在这一切之后,我可以将此 IPA 上传到 Apple 并使用他们新的 TestFlight beta 分发工具进行分发。
【讨论】:
【参考方案3】:我使用以下命令退出可能对您有用的 ipa。基本技术是解压缩 ipa,添加所需的移动配置文件,使用所需证书对代码进行签名,然后压缩到新的 ipa。
unzip -q "$IPAFILE"
cp "$PROV_PROFILE" Payload/*.app/embedded.mobileprovision
/usr/bin/codesign -f -s "$SIGN_CERT" --keychain "$KEYCHAIN" \
--entitlements Payload/*.app/$APP-Entitlements.plist \
--resource-rules Payload/*.app/ResourceRules.plist Payload/*.app
zip -qr "$NEW_IPAFILE" Payload
如果您使用标准钥匙串,则可以省略 --keychain 选项。您的 Entitlements.plist 文件的名称可能不同。 SIGN_CERT 是您的证书的文本名称。例如“iPhone 分发:Blah Blah”
确保权利 plist 与您的签名证书和配置文件具有相同的 TEAM ID。
【讨论】:
【参考方案4】:Xcode 会自动将此测试版权利添加到您的权利列表中。您只需进行新的修改,点击身份下的团队帐户,重新选择您的帐户,新的个人资料将由 iTunes connect 重新制作。
之后,上传您的新二进制文件。
上传后,您可以为您的应用分配 Beta 测试人员,选择预发布版本并将内部或外部 Beta 测试人员添加到列表中。
希望对你有所帮助。
【讨论】:
【参考方案5】:执行此操作的更好方法是将发布配置文件设置为应用商店配置文件。那么您就不需要提供 --embed 标志,并且 beta 报告标志将为真。
然后,如果您还需要临时构建,您可以提供相同的 xcrun 命令 --embed 与临时配置文件。
ARCHIVE = "$ARCHIVE_FOLDER/Products/Applications/$PRODUCT_NAME.app"
#Adhoc
/usr/bin/xcrun -sdk iphoneos PackageApplication -v ARCHIVE -o IPA_DESTINATION --sign "SIGNING_IDENTITY" --embed PATH_TO_PROVISIONING_PROFILE
#App Store
/usr/bin/xcrun -sdk iphoneos PackageApplication -v ARCHIVE -o IPA_DESTINATION --sign "SIGNING_IDENTITY"
【讨论】:
以上是关于如何使用应用商店配置文件退出应用以添加 beta-reports-active 密钥?的主要内容,如果未能解决你的问题,请参考以下文章