如何使用应用商店配置文件重新设置应用以添加beta-reports-active键?

时间:2014-11-25 16:21:33

标签: ios xcode continuous-integration provisioning-profile ios-app-extension

为了通过Apple的新Test Flight服务分发应用程序,需要提供beta-reports-active密钥。目前我正在使用Apple的bot服务器分发到旧的Test Flight系统和Ad Hoc分发配置文件。使用post build触发器我想获取创建的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_IDENTITYPROVISIONING_PROFILE都是应用商店分发证书/个人资料。因此,配置文件嵌入ipa并包含beta-reports-active标志。但是,当我查看ipa以验证其权利时,它不存在。

我做错了什么?我在此看到的所有信息刚刚建议重新生成配置文件。我已经这样做了,知道钥匙存在。它没有被添加到权利中。我有一个小部件也被捆绑在ipa中。我不是在辞职。

5 个答案:

答案 0 :(得分:4)

您可以尝试使用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

答案 1 :(得分:2)

好吧所以我想我终于搞清楚了。似乎Bot服务器可能有一些苹果需要解决的问题。我注意到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分发工具进行分发。

答案 2 :(得分:1)

我使用以下命令来重新签名可能适合您的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”

确保Entitlements plist与您的签名证书和配置文件具有相同的TEAM ID。

答案 3 :(得分:0)

Xcode会自动将此测试版权利添加到您的权利列表中。您只需进行新的修订,点击身份下的团队帐户,重新选择您的帐户,然后通过iTunes连接重新制作新的个人资料。

之后,上传新的二进制文件。

上传后,您可以将beta测试人员分配到您的应用,选择预发布版本并将内部或外部Beta测试人员添加到列表中。

我希望它有所帮助。

答案 4 :(得分:0)

更好的方法是将Release provisioning配置文件设置为App store配置文件。然后,您将不需要提供--embed标志,并且beta报告标志将为真。

enter image description here

然后,如果您还需要adhoc构建,则可以提供相同的xcrun命令 - 与adhoc配置文件一起使用。

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"