Найти путь установки Xcode по версии
Не существует стандартных путей для хранения разных копий XCode (XCode3 и XCode4) в одной системе. Для моего Makefile или другого процесса сборки на основе командной строки я ищу способ определения пути установки ($DEVELOPER_DIR) XCode определенной версии, чтобы экспортировать этот путь как DEVELOPER_DIR или использовать xcode-select, чтобы сделать его активным.
Пока что я пытаюсь запросить вывод xml system_profiler.
Есть ли другие (более удобные) варианты?
По сути, мне нужен сценарий, чтобы система могла использовать Xcode3 (или Xcode4), не зная пути их установки.
3 ответа
Вот что я придумала до сих пор:
DEVELOPER_DIR=`system_profiler SPDeveloperToolsDataType -xml |\
xpath "//*[text()='spdevtools_version']/following-sibling::string[starts-with(text(),'3')]/../*[text()='spdevtools_path']/following-sibling::string[1]/text()"`
Это устанавливает DEVELOPER_DIR в путь установки Xcode3. Для Xcode4 просто замените "3" на "4"
Это не будет работать должным образом, если установлено несколько версий XCode3.
Это найдет Xcode с заданной версией в папке Applications, если его имя начинается с Xcode:
for xcode in ls /Applications/Xcode*; do
if grep -q -s -E "<string>$1\.[0-9.]+</string>" "$xcode/Contents/version.plist"; then
echo "$xcode/Contents/Developer\c"
break
fi
done
Сохраните это как findxcode.sh и затем запустите так: ./findxcode.sh 9
и он напечатает вам путь Xcode 9, который вы можете поместить в DEVELOPER_DIR. \c
в конце есть удаление новой строки в конце, если вам нужно захватить вывод с помощью другого скрипта /fastlane или чего-то еще.
Вы можете узнать пути установки всех установленных версий XCode из командной строки, запросив базу данных Launch Services с помощью команды lsregister
команда.
Чтобы найти все пути установки Xcode3, запустите:
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep --before-context=2 "com.apple.Xcode" | grep --only-matching "/.*\.app"
Чтобы найти все пути установки Xcode4, запустите:
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep --before-context=2 "com.apple.dt.Xcode" | grep --only-matching "/.*\.app"
Также посмотрите этот вопрос.