Ответ 1
Если вы используете это на машине с mac os x, вы можете использовать следующее:
/usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin <<< $(security cms -D -i path_to_mobileprovision)
Я связываю создание системы php/ bash/mysql для автоматизации распределения adhoc для приложений iPhone. Но я хочу прочитать ключ идентификатора приложения в файле проектов mobileprovision и изменить его файл info.plist в соответствии с этим.
В настоящее время я могу создавать ipa файлы с php, если ключ cfbundleidentifer такой же, как и файл обеспечения.
Я нашел такой код https://gist.github.com/711794, но я хочу, чтобы bash script интегрировал его в мою систему.
Спасибо
Если вы используете это на машине с mac os x, вы можете использовать следующее:
/usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin <<< $(security cms -D -i path_to_mobileprovision)
Если вы хотите извлечь plist из mobileprovision надлежащим образом и не полагаться на grepping/sedding/etc., вы можете использовать OpenSSL следующим образом:
openssl smime -inform der -verify -noverify -in file.mobileprovision
Полный пример в вашем случае может быть:
openssl smime -inform der -verify -noverify -in file.mobileprovision > tmp.plist
/usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' tmp.plist
Часть OpenSSL должна работать на любой платформе, хотя я только сделал это на Mac до сих пор. PlistBuddy работает только на Mac, но можно найти другие утилиты для чтения/записи файлов списка свойств.
Одно из многих решений...
Используйте egrep с параметром -a, который обрабатывает двоичные файлы, такие как текстовые файлы и "-A 2", которые будут отображать две строки после строки, которую вы хотите сопоставить: ApplicationIdentifierPrefix.
После этого обрезать строку скобок и пробелов с помощью sed.
Использование серии труб:
egrep -a -A 2 ApplicationIdentifierPrefix file.mobileprovision | grep string | sed -e 's/<string>//' -e 's/<\/string>//' -e 's/ //'
Я создал функцию bash, основанную на ответе jlawrie, чтобы перечислить все идентификаторы пакетов .mobileprovision из папки ~/Library/MobileDevice/Provisioning Profiles
.
Сохраните это в своем .bash_profile
и просто вызовите его с помощью list_xcode_provisioning_profiles
с терминала.
list_xcode_provisioning_profiles() {
while IFS= read -rd '' f; do
2> /dev/null /usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin \
<<< $(security cms -D -i "$f")
done < <(find "$HOME/Library/MobileDevice/Provisioning Profiles" -name '*.mobileprovision' -print0)
}
Это немного утомительно, так как .mobileprovision - это "подписанные данные PKCS # 7" или так.
К счастью, вы, вероятно, можете избежать использования grep:)
Я использовал код из mobileprovision-read, чтобы иметь возможность извлекать информацию из файла mobileprovision. Для чтения файла используются API-интерфейсы macOS.
Здесь используется использование запущенной сгенерированной программы:
mobileprovision-read -- mobileprovision files querying tool.
USAGE
mobileprovision-read -f fileName [-o option]
OPTIONS
type – prints mobileprovision profile type (debug, ad-hoc, enterprise, appstore)
appid – prints application identifier
Will print raw provision plist if option is not specified.
You can also use key path as an option.
EXAMPLES
mobileprovision-read -f test.mobileprovision -o type
Prints profile type
mobileprovision-read -f test.mobileprovision -o UUID
Prints profile UUID
mobileprovision-read -f test.mobileprovision -o ProvisionedDevices
Prints provisioned devices UDIDs
mobileprovision-read -f test.mobileprovision -o Entitlements.get-task-allow
Prints 0 if profile doesn't allow debugging 1 otherwise