Подтвердить что ты не робот

Может ли файл 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", не будет работать.

Спасибо!

4b9b3361

Ответ 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