Разбор мобильных файлов в bash?

Я связываю создание системы php / bash / mysql для автоматизации распределения adhoc для приложений iPhone. Но я хочу прочитать ключ-идентификатор приложения в файле проектов mobileprovision и изменить его файл info.plist в соответствии с этим.

В настоящее время я могу создавать ipa-файлы с php, если ключ cfbundleidentifer аналогичен файлу обеспечения.

Я нашел код, подобный этому https://gist.github.com/711794, но я хочу, чтобы скрипт bash интегрировал его в мою систему.

благодаря

Если вы запускаете это на машине с 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///' -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) } 

Это немного утомительно, так как мобильное обеспечение – это «PKCS # 7 подписанные данные» или около того.

К счастью, вы, вероятно, можете избежать использования grep 🙂

Я использовал код из репозитория readprofile, чтобы иметь возможность извлекать информацию из файла 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's 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 
  • Сценарий оболочки Bash - синтаксический анализ csv
  • Повторно использовать '~ / .profile` для Fish?
  • Putty SSH: CTRL + Клавиши курсора не работают, чтобы перейти к предыдущему / следующему слову
  • Как вводить путь с пробелом?
  • Как сбросить COMP_WORDBREAKS, не затрагивая другой скрипт завершения?
  • Назначение значений по умолчанию для переменных оболочки с помощью одной команды в bash
  • Почему у нас есть логин, не-логин, интерактивные и неинтерактивные оболочки bash?
  • Команда оболочки для суммирования целых чисел, по одной в строке?
  • Вкладка «Автозаполнение» в Mac OS X при использовании sftp в терминале
  • В чем разница между командами $ (command) и `command` в программировании оболочки?
  • Linux переименовывается с использованием параметров и пробелов?
  • Давайте будем гением компьютера.