Запускаем iOS приложения из консоли на девайсе и симуляторе
В статье будет кратко описано, как собрать приложение консольными командами и запустить на реальном девайсе и симуляторе без какой-либо надобности открывать xcode для этого.
В общем, стоит начать с того, что в моей компании имеется отдел ios разработки в составе > 10 человек, которые работают над пачкой приложений. Для автоматизации рутинной работы нам пришлось развернуть CI сервер (пока самописный, ввиду особых исторических причин (ну как у всех), планируется миграция на jenkins). К рутинным вещам я отношу — сборку проектов, запуск тестов (если, конечно, вы их пишете), создание ипашек для тестеров и для выкладки в app store. В общем, хотелось чтобы по нажатию кнопочки или по хуку в гите всё это начинало работать. Пока у нас всё работает по нажатию кнопки разработчиком, про гит пока только в планах. В данной статье я только затрону тему компиляции проекта и упаковку его в ipa файла. Функционал запуска проектов на девайсах на стороне CI сервера еще находится в стадии разработки, а вот сам процесс упаковки уже давно в «бою», может кому пригодиться.
- соберем приложение и запустим на симуляторе
- соберем ipa и запустим на реальном девайсе
- соберем ipa для выкладки на маркет
- немного подэбажим ошибки сборки
- OS X 10.10.5
- Xcode 7.1
git clone https://github.com/ResearchKit/ResearchKit.git ~/Downloads/researchkit
cd ~/Downloads/researchkit
Перед компиляцией проекта необходимо установить apple doc generator github.com/tomaz/appledoc (там есть описание как установить).
Переходим к скаченному проекту. Корневой проект представляет собой сам ResearchKit framework, само тестовое приложение находится в другом месте, переходим туда:
cd samples/ORKCatalog/
Пробуем компилировать приложение. Собираем под симулятор, так как для сборки проекта под симулятор не нужны сертификаты/провижен файлы.
xcodebuild -project ORKCatalog.xcodeproj -scheme ORKCatalog -arch x86_64 VALID_ARCHS=x86_64 -sdk iphonesimulator
Билд падает, так как нет схемы ORKCatalog. Так как схема в оригинальном проекте не была помечена как shared, то после “слива” из гита, xcode еще ничего не знает об этой схеме, чтобы он ее снегирил, нужно просто открыть проект. Поэтому просто открываем проект:
open ORKCatalog.xcodeproj
И сразу же закрываем, после наша схема появится, проверить схемы можно через xcodebuild -list. Пробуем собрать снова:
xcodebuild -project ORKCatalog.xcodeproj -scheme ORKCatalog -arch x86_64 VALID_ARCHS=x86_64 -sdk iphonesimulator
После видим долгожданное ** BUILD SUCCEEDED **. Отлично, всё работает.
Запускаем проект на симуляторе
Компилируем под симулятор, архитектуры могут быть i386/x86_64. Через SYMROOT задаем путь результата сборки:
xcodebuild -project ORKCatalog.xcodeproj -scheme ORKCatalog ARCHS='x86_64 i386' VALID_ARCHS='x86_64 i386' -sdk iphonesimulator -configuration Debug SYMROOT=$(pwd)/build build
(Мысли вслух: когда писал статью, компиляция в режиме Release работала, перед публикацией статьи еще раз проверил все шаги и компиляция в этом режиме перестала работать, поэтому собираем в Debug, какие-то из последних коммитов это сломали.)
После успешной сборки мы получили ORKCatalog.app файл в build/Debug-iphonesimulator/. Осталось запустить это на симуляторе. Для этого будем использовать ios-sim утилиту github.com/phonegap/ios-sim. Пользоваться ей достаточно просто.
Получаем список доступных симуляторов:
ios-sim showdevicetypes

Из предложенного списка я выбрал ‘iPhone-6-Plus’. Запускаем приложение на нем:
ios-sim --devicetypeid iPhone-6-Plus launch build/Debug-iphonesimulator/ORKCatalog.app
Если всё правильно сделали, то должен запуститься симулятор с приложением (для входа в режим ввода в консоли используйте ctrl + C).

Создание ipa файла и запуск на реальном девайсе
Тут немного сложнее, нам нужен mobileprovision файл для разработки (developer) и наличие сертификата на машине (p12 файл), при этом наличие аккаунта в xcode не нужно. При подписании/упаковки приложений из консоли нет необходимости добавлять аккаунт в xcode, это очень помогает, например, на CI сервере можно держать только p12 файлы.
Будем считать, что на вашей машине есть соответствующий сертификат. После генерируем developer mobileprovision через developer.apple.com в вашем аккаунте и скачиваем на машину (дадим ему название test.mobileprovision, а bundle id будет ru.habrahabr.test). После копируем его в директорию, где его сможет подхватить xcode:
cp test.mobileprovision ~/Library/MobileDevice/Provisioning Profiles/
Собираем архив под девайс (это архитектуры arm64/armv7):
xcodebuild -project ORKCatalog.xcodeproj -scheme ORKCatalog ARCHS='arm64 armv7' VALID_ARCHS='arm64 armv7' -sdk iphoneos -configuration Debug archive -archivePath build/archive
Компиляция упадет, так как мы еще не прописали в приложении свой bundle id и не прилинковали mobileprovision, ошибка будет такого вида:

Будем передавать bundle id из консоли + нужно прописать его в Info.plist файле. Также через консоль будем передавать линк на наш mobileprovision. Plist файл находим по пути ORKCatalog/Supporting Files/Info.plist, в котором для ключа CFBundleIdentifier выставляем значение ru.habrahabr.test. Bundle id передаем через ключ со значением нашего ид PRODUCT_BUNDLE_IDENTIFIER=ru.habrahabr.test. Линк на mobileprovision передаем через ключ PROVISIONIG_PROFILE, со значние UUID, который прописан в mobileprovision.
security cms -D -i test.mobileprovision | grep -o "\w\-\w\-\w\-\w\-\w\"
Значение будет подобно 87b0df89-793a-4a0f-92bf-c5f9c35f1405. Снова собираем:
xcodebuild -project ORKCatalog.xcodeproj -scheme ORKCatalog ARCHS='arm64 armv7' VALID_ARCHS='arm64 armv7' -sdk iphoneos -configuration Debug archive -archivePath build/archive PRODUCT_BUNDLE_IDENTIFIER=ru.habrahabr.test PROVISIONING_PROFILE=87b0df89-793a-4a0f-92bf-c5f9c35f1405
В итоге получим архив build/archive.xcarchive, который осталось упаковать в ipa. В xcode 7 появился новый метод упаковки, им и воспользуемся. Перед этим создадим конфиг файл options.plist с таким содержанием:
method development uploadSymbols
Пробуем собирать ipa:
xcodebuild -exportArchive -exportOptionsPlist options.plist -archivePath build/archive.xcarchive -exportPath build/dev-ipa/
Сборка падает, по логам можно понять, что что-то с entitlements:

По ошибке ясно, что приложение подписываем entitlements, значения в котором не соответствуют значениям в нашем mobileprovision, а именно com.apple.developer.healthkit. Ищем причину. Смотрим каким entitlements подписано приложение:
codesign -d --entitlements - build/archive.xcarchive/Products/Applications/ORKCatalog.app
application-identifier XXXXX.ru.habrahabr.test beta-reports-active com.apple.developer.healthkit com.apple.developer.team-identifier XXXXX get-task-allow
Видим, что всё ок, за исключением этого:
com.apple.developer.healthkit
У нас в mobileprovision нет этой опции, нужно выяснить, откуда это взялось:
find ORKCatalog/ -name "*.entitlements" -type f
Поиск нам выдал ORKCatalog/Supporitng Files/ORKCatalog.entitlements. Смотрим что внутри:
cat ORKCatalog/Supporting Files/ORKCatalog.entitlements
Там только одно значение:
com.apple.developer.healthkit
По логике нужно перезаводить mobileprovision, в который нужно добавить это значение, но мы ленивые и для теста это не обязательно, нам нужно просто переподписать приложение с entitlements без этого значения.
У нас есть как минимум два варианта:
1. Просто редактируем существующий entitlements (ORKCatalog/Supporitng Files/ORKCatalog.entitlements) и снова пересобираем (через archive).
2. Без пересборки, сами переподпишем ORKCatalog.app с нужным entitlements.
Выберем первый вариант как более простой. Поэтому из файла ORKCatalog/Supporitng Files/ORKCatalog.entitlements просто удаляем строки:
com.apple.developer.healthkit
и снова пересобираем архив:
xcodebuild -project ORKCatalog.xcodeproj -scheme ORKCatalog ARCHS='arm64 armv7' VALID_ARCHS='arm64 armv7' -sdk iphoneos -configuration Debug archive -archivePath build/archive PRODUCT_BUNDLE_IDENTIFIER=ru.habrahabr.test PROVISIONING_PROFILE=87b0df89-793a-4a0f-92bf-c5f9c35f1405
После создаем ipa:
xcodebuild -exportArchive -exportOptionsPlist options.plist -archivePath build/archive.xcarchive -exportPath build/dev-ipa/
Видим долгожданное сообщение ** EXPORT SUCCEEDED **. Под build/dev-ipa/ появиться ipa файл, который будем устанавливать на девайс. Устанавливать на девайс будем с помощью ios-deploy github.com/phonegap/ios-deploy. Цепляем девайс к машине, получаем id девайса через:
ios-deploy -c
Деплоим на девайс:
ios-deploy -i -b build/dev-ipa/ORKCatalog.ipa
Собираем ipa файл для маркета
Всё тоже самое как для develop версии, только меняем линк на релизный mobileprovision, в options.plist вместо development проставляем app-store (какие еще options можно добавить смотрите в хелпе xcodebuild -help).
Итог
Без использования xcode смогли собрать ipa файлы для тестов и на выкладку в app store. Всё это можно легко автоматизировать на CI сервере чтобы облегчить жизнь разработчикам.
P.S.: Стоит отметить, что для процесса компиляции/подписания приложений со сложной структурой, когда несколько таргетов и каждый требует своего отдельного mobileprovision файла (приложения с extension, часами, embedded framework-ками), вышеописанный процесс без напильника работать не будет.
- Разработка под iOS
- Xcode
15 полезных приложений с открытым кодом для macOS. Прокачайте свой Mac абсолютно бесплатно

В закладки

Мы уже рассказывали о 15 полезных приложениях с открытым исходным кодом, которые помогут прокачать ваш Mac и сделать работу за компьютером более приятной и удобной.
Сейчас познакомим вас с еще одной порцией годных утилит и приложений, которые распространяются на GitHub.
1. Делаем меню переключения приложений более наглядным с AltTab


Окно переключения приложений в macOS сделано слишком минималистично и неинформативно. Система отображает лишь крупные значки приложений и их названия. Всем, кто переходит на Mac с операционной системы Windows, такой элемент может показаться очень простым и недоделанным.
Исправить ситуацию решили разработчики приложения AltTab. Утилита добавляет множество настроек и параметров внешнего вида для переключателя программ macOS.
Можно включить отображение превью-картинок для запущенных приложений, а еще можно выводить все окна каждой программы для быстрого переключения на нужное.
При этом можно не заменять стандартное меню, а пользоваться новым только при необходимости через любой настраиваемый шорткат. Огромное количество параметров приложения позволит каждому настроить его под себя.
2. Быстро расставляем окна с AppGrid

В десктопной операционной системе Apple давно назрела необходимость в удобном инструменте для расстановки и упорядочивания окон. Стандартными средствами можно разделить экран на две части или просто перенести окно на другое рабочее пространство.
В то же время разработчики Windows давно внедрили и успешно совершенствуют удобный механизм прилипания окон к краям экрана с быстрыми действиями. Нечто подобное можно реализовать при помощи сторонних приложений из Mac App Store.
Схожие возможности предлагает разработчик бесплатного приложения AppGrid. После установки программы нужно выдать необходимые разрешения и задать удобные сочетания клавиш для перемещения и масштабирования окон.
Теперь сможете в одно нажатие менять размер программы и размещать её в нужном месте рабочего пространства.
3. Настраиваем тему оформления для приложений с Gray

С появлением темного интерфейса в macOS разработчики сторонних приложений добавили соответствующую опцию в свои программы. У некоторых получилось так здорово, что темную тему не хочется отключать даже днем. А у других – наоборот, светлое оформление выглядит отлично, а темное не выдерживает никакой критики.
При помощи утилиты Gray можно принудительно закрепить нужное оформление для любого стандартного или стороннего приложения на Mac.
Просто запустите программу, выдайте все необходимые разрешения и установите нужный интерфейс для всех утилит на компьютере.
4. Управляем параметрами дисплея и внешнего монитора через Lunar



Небольшая, но очень мощная утилита Lunar позволяет взять под контроль все параметры подключенных к вашему Mac мониторов. Вы сможете менять яркость и контрастность, переключать режимы отображения картинки, менять разрешение или ориентацию экрана.
Можно настроить пресеты для применения одной клавишей либо задать автоматическое изменение параметров в зависимость от уровня освещенности.
В утилите есть огромное количество тонких настроек и опций, за использование полной версии придется заплатить после 14-дневного триала.
Скачать Lunar – бесплатно на GitHub (включает встроенные покупки)
5. Удаляем ненужные языковые файлы при помощи Monolingual

Утилита Monolingual позволяет очистить систему от ненужных файлов локализации на другие языки. Всего за минуту вы сможете очистить накопитель от ненужных языковых пакетов, которые устанавливаются системой или сторонними программами.
Кроме этого утилита может удалять файлы для работы на старых архитектурах процессора, которые не нужны на вашем компьютере.
На данный момент это самый простой способ очистить несколько ГБ на накопителе Mac.
6. Меняем внешний вид индикаторов громкости и яркости через SlimHUD

Долгое время купертиновцы игнорировали устаревши внешний вид экранных индикаторов громкости на iPhone и iPad. Сейчас этот элемент выглядит более стильно и не занимает место на экране во время игр или просмотра контента.
Аналогичная ситуация наблюдается на Mac. Старые индикаторы выбиваются из общей стилистики оформления и нуждаются в замене. Сделать это можно при помощи программы SlimHUD. Утилита меняет индикаторы громкости, яркости экрана и подсветки клавиатуры на тонкие минималистичные полоски.
Вы можете выбрать подходящий размер, цвет и положение индикаторов.
Обратите внимание, что для работы приложения нужно отключить SIP-защиту macOS. Сделать это можно по нашей инструкции.
7. Распределяем ресурсы процессора с утилитой AppPolice

Приложение AppPolice после установки и запуска поселится в строке меню macOS. С его помощью можно ограничивать ресурсы процессора, которые сможет задействовать та или иная программа.
Например, вы можете задать порог на использование процессора браузером, мессенджером или сторонним почтовым клиентом. Так вы будете уверены, что одна программа не “съест” всю мощность чипа и не будет разряжать батарею MacBook.
Это простой и удобный способ бороться с плохо оптимизированными утилитами для macOS от сторонних разработчиков. Совместима только с процессорами Intel, для M1/M2 не подойдёт.
8. Добавляем наглядный индикатор аккумулятора с Apple Juice

Странно, что купертиновцы до сих пор не могут реализовать удобный механизм отображения оставшегося времени заряда аккумулятора. Если вместо банальных процентов хотите видеть точное время разряда батареи, придется использовать сторонние утилиты.
Программа Apple Juice при помощи встроенных алгоритмов расчёта позволяет достаточно точно определить время разрядки батареи в зависимости от текущей нагрузки компьютера.
Кроме этого можно добавить уведомление при достижении 20, 15, 10 или 5% заряда.
9. Обновляем сторонние приложения через Latest

Одним из преимуществ магазина Mac App Store является возможность быстро обновить все установленные от туда программы и игры. Реализовать аналогичную возможность со сторонними приложениями позволяет утилита Latest.
После запуска увидите перечень апдейтов для большинства сторонних программ, сможете ознакомиться с составом обновлений и загрузить установочные файлы.
10. Следим за показателями Mac в приложении eul

Активные пользователи Mac предпочитают держать под контролем ключевые показатели своего компьютера. Делать это можно не только при помощи дорогих сторонних утилит, но и через бесплатные программы с открытым исходным кодом.
Одним из таких приложений является eul. Утилита размещается в строке меню и выводит нужные вам показатели. Можно отобразить загрузку процессора, памяти и свободное место на накопителе. Еще возможно включить информацию о сетевой активности компьютера и работе системы охлаждения.
11. Храним пароли от приложений и сервисов в Bitwarden

Отличный кроссплатформенный менеджер паролей подойдет тем, кто не хочет доверять свои учетные данных Apple, Google или Microsoft. Утилита имеет широкие возможности, открытый исходный код и большое сообщество пользователей.
Можно с легкостью заменить стандартную Связку ключей из macOS приложением Bitwarden и за пару минут перенести все хранящиеся в облаке Apple данные.
Соответствующе утилиты есть и для других ОС, в том числе и для мобильных iOS и Android.
12. Следим за сетевой активностью приложений через LuLu

Утилита является достаточно мощным сетевым монитором для macOS, а ведь именно такой опции нет в стандартном наборе ПО от Apple. Отслеживать активность программ и игр следует по ряду причин.
Так вы сможете вычислить потенциально опасные приложения, которые постоянно сливают данные в сеть, сэкономить сетевой трафик и продлить автономность компьютера при работе от аккумулятора.
Простое и бесплатное решение LuLu позволяет выводить список все программ, которые используют сетевое подключение и ограничивать доступ в интернет для каждой из них.
13. Переносим заставки с Apple TV через утилиту Aerial

Приложение позволяет активировать на любом компьютере Apple красивые скринсейверы с “яблочной” телевизионной приставки.
Утилита умеет не только выводить завораживающие видеоролики в режиме простоя компьютера, но и отображать прогноз погоды для выбранного региона.
14. Расширяем возможности буфера обмена при помощи Maccy

Программа серьезно прокачивает возможности стандартного буфера обмена macOS. В параметрах можно выбрать тип запоминаемых утилитой объектов и количество последних использованных элементов, которые будут храниться в памяти.
После этого сможете получить доступ к любому тексту, файлу или картинке, которую копировали или переносили куда-то за последнее время.
Утилита является платной, но при использовании последних тестовых сборок с GitHub вы можете использовать программу на бесплатной основе.
15. Добавляем разделители в Dock-панель через macOS Dock Separator

Очень простая программа, единственной возможностью которой является добавление новых разделительных блоков в Dock-панель macOS.
Вы можете добавить нужное количество черточек для более удобной наглядной сортировки своей панели.
Скачать macOS Dock Separator – бесплатно на GitHub
Как правильно собрать исходник с github в apple xcode?
Как правильно собрать и использовать исходник с github в apple xcode?
- Вопрос задан более трёх лет назад
- 1273 просмотра
Комментировать
Решения вопроса 1

на гитхабе исходники, которые подразумевают непосредственную сборку (а не reuse в собственном коде), обычно лежат в виде готового xcode-проекта.
то есть нужно скачать, открыть bla-bla-bla.xcodeproj в xcode и запустить билд.
Ответ написан более трёх лет назад
Нравится 3 2 комментария
Инструкция: как скачать файл с GitHub
Закройте IDE. Забудьте про пуши. Отрекитесь от коммитов и репозиториев.


Кадр: сериал «Остановись и гори»

Максим Сафронов
Автор, редактор, IT-журналист. Рассказывает о новых технологиях, цифровых профессиях и полезных инструментах для разработчиков. Любит играть на электрогитаре и программировать на Swift.
Если вы откроете файл в веб-версии GitHub, то заметите, что там нет отдельной кнопки «Скачать». Действительно, удобного способа загружать код напрямую с сайта разработчики не завезли, но есть альтернативные способы — в этой статье как раз о них поговорим. Заодно разберёмся, как скачивать файлы с GitHub на смартфон — пока только на Android-устройства, с айфонами всё сложно.
Способ первый
Скачать проект целиком
Все проекты на GitHub хранятся в репозиториях. Репозиторий — это место, где лежат файлы, библиотеки и фрагменты кода программы. Хорошая новость: если у вас есть доступ к проекту, его можно утащить себе на компьютер и разобрать на отдельные файлы. Вот как это сделать:
Шаг 1. Выберите проект, который хотите скачать. Ваши репозитории хранятся в разделе Your repositories, а проекты из свободного доступа можно найти с помощью окошка Search or jump to.

Шаг 2. Откройте выбранный проект. Мы, например, решили забрать себе классический «виндовый» калькулятор, с недавних пор выложенный в открытый доступ в аккаунте Microsoft.

Шаг 3. Нажмите кнопку Code в правом верхнем углу. Выпадет меню, в котором нужно выбрать Download ZIP.

Готово! Теперь у нас на компьютере есть собственная версия проекта. Можно запустить его в Visual Studio, а также в другом редакторе кода или IDE и допилить под свои нужды. Например, перекрасить кнопки в фиолетовый цвет — а почему бы и нет?
Способ второй
Скачать файл с GitHub через Raw
Единственный штатный способ скачать отдельный файл в GitHub — это кнопка Raw. Она превращает код файла в обычный текстовый документ без всякой разметки — в таком виде его можно легко загрузить на жёсткий диск. Не слишком удобный, но рабочий способ — давайте его тоже разберём.
Шаг 1. В репозитории проекта откройте файл, который хотите скачать.

Шаг 2. Когда файл откроется, нажмите кнопку Raw.

Шаг 3. Перед вами — исходный код файла, открытый в браузере. Чтобы его скачать, нажмите правой кнопкой мыши, а потом выберите «Сохранить как…».

Шаг 4. В открывшемся окне можно задать файлу имя и формат. Если планируете работать с кодом в текстовом редакторе, можно оставить .txt.
Способ третий
Использовать расширение
В интернет-магазинах браузеров полно расширений, которые облегчают загрузку с GitHub. Например, GitZip for GitHub помогает скачивать не только файлы, но и целые папки. Рассказываем, как им пользоваться:
Шаг 1. Скачайте и установите утилиту в магазине расширений вашего браузера — есть версии для Chrome, Microsoft Edge и Mozilla.

На заметку: если расширение доступно для Chrome, то запустить его можно в любом браузере, работающем на хромовском движке Blink, — например, в Opera, Vivaldi или «Яндекс.Браузере».
Шаг 2. В репозитории проекта напротив каждого файла появятся чекбоксы — отметьте галочками те, которые хотите скачать.
Шаг 3. Нажмите на кнопку загрузки в правом нижнем углу.

Готово! Можно наслаждаться новыми возможностями до боли знакомого сервиса.
Бонус: как скачивать файлы из GitHub на Android-устройствах
По умолчанию в мобильной версии GitHub нет функции скачивания файлов. Но её можно активировать, если открыть в мобильном браузере версию сайта для ПК. После этого можно будет скачать отдельный файл либо весь проект в виде ZIP-архива.
Если нужен проект целиком:
Шаг 1. Откройте веб-страницу нужного репозитория через Google Chrome.
Шаг 2. В контекстном меню браузера нажмите на кнопку «Версия для ПК».
Шаг 3. После этого страница перезагрузится и откроется обычная десктопная версия сайта. Нажмите зелёную кнопку Code, а потом — Download ZIP.

Если нужен отдельный файл:
Шаг 1. Откройте на GitHub страницу файла и активируйте версию для ПК.
Шаг 2. Когда откроется десктопная версия страницы, нажмите кнопку Raw в правом верхнем углу.
Шаг 3. Снова вызовите контекстное меню браузера и нажмите на значок загрузки в самом верху — после этого на смартфон скачается нужный файл в формате .txt.

К сожалению, на iOS десктопная версия GitHub не открывается ни в одном браузере, поэтому функции Raw и Download ZIP недоступны. Если у вас есть рабочий способ — напишите нам в редакцию, добавим его в статью.
Что дальше
В этой статье мы обсудили нюансы работы только с веб-версией GitHub. Если хотите полностью перенести проект на свой компьютер и работать с ним локально, почитайте нашу статью про GitHub Desktop. Вы узнаете, как создать репозиторий, синхронизировать его с ПК и обновлять файлы удалённо.
Ещё можно почитать материал про систему контроля версий Git. Объясняем на понятных схемах, как работает технология, которая лежит в основе GitHub и других похожих сервисов. Вы поймёте, как там всё устроено, и сможете блеснуть знаниями на собеседовании.
Больше интересного про код в нашем телеграм-канале. Подписывайтесь!
