Как отказаться от приложения с профилем подготовки магазина приложений, чтобы добавить активный ключ бета-отчетов?

Чтобы распространять приложения через новый сервис Apple Test Flight, необходимо наличие ключа beta-reports-active. В настоящее время я использую бот-сервер Apple для распространения в старой системе Test Flight с профилем распространения Ad Hoc. Используя триггер пост-сборки, я хочу взять созданный archive и создать дистрибутив App Store ipa, который я могу загрузить в iTunes Connect. Я написал скрипт, который делает это. Я использую команду 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. Я не отказываюсь от этого.


person jervine10    schedule 25.11.2014    source источник
comment
Можете ли вы попробовать этот отличный скрипт. Я сам не пробовал github.com/KrauseFx/sigh   -  person Anuj Rajput    schedule 02.12.2014


Ответы (5)


Вы всегда можете попробовать использовать команду экспорта 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 для получения дополнительной информации.

person Sandy Chapman    schedule 01.12.2014
comment
Спасибо за предложение. Я работаю над изменением своего сценария, чтобы вместо этого использовать эту команду. Прямо сейчас это не удается с этим: ошибка: несоответствие между указанным профилем обеспечения и идентификатором подписи. Это сбивает меня с толку, потому что я проверил, что профиль обеспечения является правильным, и я подписываю с помощью своего сертификата распространения iOS. есть идеи? - person jervine10; 02.12.2014
comment
Я думаю, вам может понадобиться убедиться, что ваша подпись полностью указана. т.е. вместо дистрибутива iPhone вы используете дистрибутив iPhone: Company Ltd. (ABCD1234) - person Sandy Chapman; 02.12.2014
comment
@ jervine10 Кроме того, значение для -exportProvisioningProfile — это имя, а не UUID, не имя файла, а фактическое имя профиля (как оно отображается в разделе «Профили подготовки» в настройках сборки Xcode). Если вам нужна помощь в поиске этого, дайте мне знать. - person Sandy Chapman; 02.12.2014
comment
Спасибо, мне удалось это понять, но после этого я получаю ошибку, о которой я упоминал. - person jervine10; 02.12.2014
comment
@ jervine10 Совпадают ли идентификаторы приложений используемых вами профилей обеспечения? - person Sandy Chapman; 03.12.2014
comment
Я награждаю вас наградой, потому что я думаю, что это будет правильный подход. На этой неделе меня отстранили от этой задачи, чтобы поработать над чем-то другим, поэтому я не смог завершить свое расследование. Я сообщу о прогрессе, надеюсь, на этой неделе. Спасибо еще раз! - person jervine10; 07.12.2014
comment
@ jervine10 Еще один совет: если вы хотите проверить пакет перед загрузкой в ​​iTunesConnect, запустите codesign --verify --verbose=2 --no-strict /path/to/package.xcarchive/Products/Applications/AppName.app. Это распечатает valid on disk и satisfies its Designated Requirment, если у него есть правильный профиль обеспечения и он подписан правильным сертификатом. - person Sandy Chapman; 08.12.2014

Итак, я думаю, что наконец понял это. Похоже, что у бот-сервера могут быть некоторые недостатки, которые Apple необходимо сгладить. Я заметил, что в дистрибутивном IPA, созданном бот-сервером, отсутствуют какие-либо необходимые права моего приложения. Я немного поискал и обнаружил, что у других людей такая же проблема. Вот вопрос, который очень хорошо объясняет проблему: IPA, созданный с помощью бота Xcode, не запускается для APNS, но запускается, если он собран вручную с помощью самого Xcode или создан в виде архива с помощью 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.

person jervine10    schedule 22.12.2014

Я использую следующие команды для отказа от 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: бла-бла»

Убедитесь, что список прав имеет тот же идентификатор TEAM ID, что и ваш сертификат подписи и профиль обеспечения.

person Glenn    schedule 05.12.2014

Xcode автоматически добавляет это право на бета-версию в ваш список разрешений. Вам просто нужно сделать новую версию, щелкнуть учетную запись команды под удостоверением личности, повторно выбрать свою учетную запись, и новый профиль будет переделан с помощью iTunes connect.

После этого загрузите новый бинарник.

После загрузки вы можете назначить бета-тестеров для своего приложения, выбрав предварительную версию и добавив внутренних или внешних бета-тестеров в список.

Я надеюсь, что это помогло.

person Endre Olah    schedule 06.12.2014

Лучшим способом сделать это было бы установить профиль подготовки выпуска к профилю магазина приложений. Тогда вам не нужно будет указывать флаг --embed, и флаг отчетов о бета-тестировании будет истинным.

введите здесь описание изображения

Затем, если вам также нужна специальная сборка, вы можете предоставить ту же команду xcrun --embed с профилем подготовки 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"
person StackRunner    schedule 21.08.2015