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

За да разпространявате приложения чрез новата услуга на 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 Distribution вие използвате iPhone Distribution: 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: Blah Blah“

Уверете се, че списъкът с права има същия ИД на ЕКИПА като вашия сертификат за подписване и профил за осигуряване.

person Glenn    schedule 05.12.2014

Xcode автоматично добавя това бета право към вашия списък с права. Просто трябва да направите нова ревизия, да щракнете върху Екипния акаунт под самоличността, да изберете отново своя акаунт и новият профил ще бъде пренаправен от iTunes connect.

След това качете новия си двоичен файл.

След като бъде качен, можете да присвоите бета тестери на вашето приложение, като изберете предварителната версия и добавите вътрешни или външни бета тестери към списъка.

Надявам се, че помогна.

person Endre Olah    schedule 06.12.2014

По-добър начин да направите това е да настроите профила за предоставяне на издание на профила на магазина за приложения. Тогава няма да е необходимо да предоставяте флага --embed и флагът за бета отчетите ще бъде верен.

въведете описание на изображението тук

След това, ако имате нужда и от adhoc компилация, можете да предоставите същата команда 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