Пакетная сборка и архивирование приложений iOS через терминал

Я пытаюсь упростить процесс build-> archive-> submit для публикации приложений iOS. У нас более 50 мобильных приложений, которые имеют почти идентичную структуру, но с различными настройками и настройками.

Обычно я загружал каждый проект в xcode 4.2, а build-> archive-> представлял обычный способ с помощью графического интерфейса xcode, но сейчас у нас более 50 приложений, и этот процесс очень утомителен при каждом выпуске обновления.

При этом я пытаюсь ускорить этот процесс с помощью функции оболочки. Я провел много исследований и обнаружил, что xcodebuild (см. Ответ Reid) должен работать, однако параметр Archive не работает, поскольку я получаю следующую ошибку:

unsupported build action 'archive' 

Поэтому я написал следующее:

 # $1 should be a date like: 2012-07-17 # $2 should be a time like: 10.31AM # $mybase will be the current directory at the time the function was called # so make sure to cd into the folder containing the xcode project folders first function xcodeArchive { mkdir ~/Library/Developer/Xcode/Archives/$1 mybase=$PWD for x in `ls` do mkdir ~/Library/Developer/Xcode/Archives/$1/$x mkdir ~/Library/Developer/Xcode/Archives/$1/$x/dSYMs mkdir ~/Library/Developer/Xcode/Archives/$1/$x/Products mkdir ~/Library/Developer/Xcode/Archives/$1/$x/Products/Applications cd $mybase/$x xcodebuild #read -p "Press [Enter] to continue" cd $mybase/$x cp $x/$x-Info.plist ~/Library/Developer/Xcode/Archives/$1/$x/Info.plist cp -r build/Release-iphoneos/$x.app.dSYM ~/Library/Developer/Xcode/Archives/$1/$x/dSYMs/$x.app.dSYM cp -r build/Release-iphoneos/$x.app ~/Library/Developer/Xcode/Archives/$1/$x/Products/Applications/$x.app cd ~/Library/Developer/Xcode/Archives/$1/ mv $x $x\ $1\ $2.xcarchive cd $mybase done } export -f xcodeArchive 

Я поместил это в свой .bash_profile, и все работает правильно, как и следовало ожидать, за исключением того, что я не копирую правильный «Info.plist», и я не могу понять, где его копировать или как его генерировать. Так что теперь я застрял.

Xcode распознает архивы, но перечисляет их в разделе «Неизвестная схема» и «Без имени» в организаторе.

Любая помощь в отношении получения правильного Info.plist очень ценится.

Я также приветствую рекомендации о том, как улучшить сценарий и / или более эффективный способ пакетной сборки + архивировать эти приложения для iOS.

Заметка:

  • Я не могу перейти за пределы Xcode 4.2, поскольку для этого требуется (как я понимаю) OS X 10.7+, которого я еще не могу получить (компьютер компании).

  • Я все еще очень начинающий bash / shell, поэтому я приношу свои извинения за любой уродливый код / ​​практику выше.

  • Кроме того, это для официального представления приложений, а не для ad-hoc или чего-то подобного.

В очередной раз благодарим за помощь.

У меня была такая же проблема с командой архива, и я нашел этот вопрос через Google. Это не сработает с этой командой сборки:

 xcodebuild -verbose -project $ProductName.xcodeproj -target $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}" 

Тем не менее, эта команда сборки будет успешной:

 xcodebuild -verbose -project $ProductName.xcodeproj -scheme $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}" 

Единственная разница заключается в том, чтобы указать схему вместо цели для построения. Если есть разумная причина такого поведения, мне будет приятно услышать это.

Я запускаю XCode 4.5.1 в Mac OS X 10.7.5

OK Я нашел решение, которое будет работать. После многого поиска и многого догадки и проверки я обнаружил, что все еще могу использовать опцию «archive» с xcodebuild, мне просто нужно указать рабочую область и схему, и, по-видимому, я не делал этого правильно раньше, как сейчас работает.

Итак, для тех, кто ищет аналогичное решение (для пакетного архивирования проектов xcode), вот моя функция:

 # $mybase will be the current directory at the time the function was called # so make sure to cd into the folder containing the xcode project folders first function xcodeArchive { mybase=$PWD for x in `ls` do cd $mybase/$x xcodebuild -workspace $x.xcodeproj/project.xcworkspace -scheme $x archive cd $mybase done } export -f xcodeArchive 
  • rootViewController, установленный в Storyboard, не отображающийся в App Launch
  • NSUnknownKeyException - setValue: forUndefinedKey в файле класса
  • Определить состояние приложения при одновременном нажатии кнопки home с запуском приложения
  • Как определить массив в макросах в Objective-c?
  • Действительно ли ARC поддерживается в iOS 4? В iOS 4.2 SDK отсутствуют символы, связанные с ARC, при соединении времени
  • Серый GPS-стрелка отображается в строке состояния, хотя приложение, основанное на местоположении, было убито с помощью Fast App Switcher
  • Пользовательская настройка высоты ячейки ячейки в раскадровке не отвечает
  • Навигация с UIViewController на Appdelegate
  • NSInvalidArgumentException, причина: «Storyboard не содержит контроллер представления с идентификатором« SomeController »
  • Включение символа аварийных логов в Xcode 4.2
  • Xcode: Scheme scripts vs Целевые скрипты
  • Interesting Posts

    didSelectRowAtIndexPath не вызывается (Swift)

    Obfuscate Objective-C для многоразового пакета iOS

    следует ли кэшировать текстуры в свойствах в наборе спрайтов?

    Как получить номер телефона для созданного приложения с расширением imessage

    Быстрые классы внутри Objective-C unit test – Неполное сгенерированное «-Swift.h»

    Захват / запись экрана iOS

    Как найти indexPath для нажатой кнопки в tableView Использование Seque

    Не удается получить данные из NSUserDefaults в текущее расширение (Swift)

    Обнаружение ошибок в ABPersonCreatePeopleInSourceWithVCardRepresentation ()

    Добавление пользовательского UIViewController с UITableView в качестве подзадачи

    Как отключить только выбор даты в UIDatePicker, а не выбор времени

    Apple In-App Purchase: как яблоко использует имя приложения для обнаружения нерегулярной активности?

    Подкласс MKOverlayPathView для создания MKPolylineView

    Cocoapods: невозможно найти спецификацию для , зависящую от

    Как перетаскивать и перемещать что-то и прокручивать одновременно в UIScrollView

    Давайте будем гением компьютера.