Может ли файл Xcode.mobileprovision быть установлен в командной строке?
Я пытаюсь автоматизировать процесс создания приложений для наших клиентов с помощью сценариев bash, работающих на Mac Mini Server (OSX 10.7).
My script основан на эффектно полезном script из github, первоначально опубликованном в https://gist.github.com/949831
Я создаю приложение с помощью xcodebuild, а затем подписываю и вставляю файл mobileprovision с помощью xcrun.
Когда я делаю все это с помощью файла mobileprovision, который я вручную установил в Xcode, используя графический интерфейс (например, двойной щелчок), он отлично работает. Если я просто пытаюсь использовать файл mobileprovision, скопированный на сервер с SCP, он терпит неудачу (ошибка кодового знака: профиль Provisioning '123abc123' не найден.)
Предположительно, это потому, что файл не установлен.
Есть ли способ установить файл mobileprovision с терминала? Я использую SSH, поэтому использование таких вещей, как команда "open", не будет работать.
Спасибо!
Ответы
Ответ 1
Спрашивая этот вопрос, я сам создал решение. Секрет состоит в том, чтобы просто скопировать файл в папку ~/Library/MobileDevice/Provisioning Profiles/, но (здесь сложный бит), переименованный в [UUID].mobileprovision.
UUID хранится внутри текстовой части самого файла (в plist). К сожалению, файл также содержит двоичный код, поэтому "чтение по умолчанию" не может его прочитать.
К счастью, этот парень создал небольшую утилиту командной строки, чтобы получить UUID (и некоторые другие вещи снова).
Здесь моя полная работа script:
https://gist.github.com/2568707
Ответ 2
Если вы не хотите загружать внешние зависимости (например, Бен), в большинстве случаев должно работать следующее:
uuid=`grep UUID -A1 -a adhoc.mobileprovision | grep -io "[-A-F0-9]\{36\}"`
cp adhoc.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$uuid.mobileprovision
Обратите внимание, что a UUID состоит из шестнадцатеричных цифр, поэтому правильный диапазон [-A-F0-9]
, а не [-A-Z0-9]
.
Бонус: загрузка и установка профилей
Используя инструмент cupertino, следующий фрагмент загружает все ваши профили распространения из портала разработчиков и устанавливает их.
ios profiles:download:all --type distribution
for file in *.*provision*; do
uuid=`grep UUID -A1 -a "$file" | grep -io "[-A-F0-9]\{36\}"`
extension="${file##*.}"
echo "$file -> $uuid"
mv -f "$file" ~/Library/MobileDevice/Provisioning\ Profiles/"$uuid.$extension"
done
cupertino (команда ios
) можно установить с помощью sudo gem install cupertino
.
Ответ 3
Сборник всех других ответов update_provisioning_profile.sh:
#!/bin/sh
#
# Download and install a single iOS provisioning profile
# Requires https://github.com/nomad/cupertino
#
# Usage
# - Login to your account once:
# ios login
# - Configure TEAM and PROFILE (instructions below)
# - Run update_provisioning_profile.sh at anytime, usually after adding/removing devices to the profile
# Configure the team identifier
# Copy it from developer portal or just use cupertino to get it:
# ios devices
# Copy the string in parens and set it as TEAM
TEAM="team id"
# Configure the profile name you want to manage
# Copy it from developer portal or use cupertino to get a list (ignoring Xcode managed profiles):
# ios profiles --team ${TEAM} | grep -v 'iOS Team Provisioning Profile'
# Copy the name as-is and set as PROFILE
PROFILE="profile name"
# Fetch the profile using `cupertino` tool
# you need to run `ios login` once to setup the account
ios profiles:download "${PROFILE}" --team ${TEAM}
PROFILE_FILE=`echo $PROFILE | tr ' ' '_'` # `cupertino` tool will replace spaces with _
UUID=`/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i ${PROFILE_FILE}.mobileprovision)`
# copy where Xcode can find it
cp ${PROFILE_FILE}.mobileprovision "$HOME/Library/MobileDevice/Provisioning Profiles/${UUID}.mobileprovision"
# clean
rm ${PROFILE_FILE}.mobileprovision
Легко адаптироваться к вашим потребностям в обеспечении.
Ответ 4
Похоже, что Apple добавила пустую строку в файл профиля предоставления .mobileprovision под каждой парой ключ-значение, а опция grep больше не работает.
Здесь, как получить его с помощью PlistBuddy и безопасности с помощью python script
command = "/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i abc.mobileprovision)"
uuid = os.popen(command).readline().rstrip('\n')
Ответ 5
Мы запускаем наши сборки в Jenkins и имеем аналогичную проблему. Наш профиль предварительной подписки Ad Hoc изменяется довольно часто, и мы не хотим запускать каждый из наших ведомых устройств сборки, устанавливая их в xcode каждый раз, когда они меняются, поэтому здесь я должен работать:
/usr/bin/xcrun -sdk iphoneos PackageApplication -v <path to yourapp.app> -o <path to your .ipa file> --sign "<Name of signing identity>" --embed <path to .mobileprovision file>
"- это то, что вы видите в разделе" Подписание кода" в настройках сборки вашей цели.
Ответ 6
Похоже, что на cupertino
не было никаких последних разработок. Fastlane
имеет инструмент под названием sigh
для управления профилями обеспечения (создания, загрузки, обновления, ремонта): https://github.com/fastlane/fastlane/tree/master/sigh#readme
Ответ 7
Используйте fastlane sigh для установки определенного временного файла, или вы можете создать новый.
fastlane sigh renew --adhoc -n "provisional-profile-name" --app_identifier "app-identifier" -u "user-name" --ignore_profiles_with_different_name
предварительный профиль-имя - это просто имя профиля, не содержит .mobileprovision расширение.
Чтобы создать новый профиль adhoc со всеми добавленными UUID-устройствами,
fastlane sigh --adhoc --app_identifier "app-identifier" -u "username"
FastFile,
lane :build do
sigh(
adhoc: true,
app_identifier: "***APP_ID**",
provisioning_name: "**Profile_name**",
username: "Apple_ID",
force: true,
skip_certificate_verification: true,
)
gym(
#export_options: "exportPlist.plist",
scheme: "**scheme-name**",
export_method: "ad-hoc",
xcargs: "PROVISIONING_PROFILE=$SIGH_UUID",
)
end