В компании где я работаю наступила пора корпоративов тестирования нашего iOS приложения, и т.к. мако тут только у меня, а все остальные разработчики и, что самое главное, QA работают под Ubuntu, а значит айфонов у них нет, то пришлось придумать решение проблемы и избавить себя от мук передачи личного айфона в руки тестеров.
Если Вы сталкивались с подобной проблемой или просто интересуетесь темой шаринга одного мака с возможностью одновременной работы на нём, то прошу под кат.
Apple Remote Desktop
Сначала мы попробывали www.pieceable.com/, вещь действительно хорошая, особенно с перспективами развития проекта, т.к. судя по главной его купили Facebook, но пока что скорость его работы оставляет желать лучшего, хотя самая идея (если кто не знаком с ней, то это запуск эмулятора на маке с последующей трансляцией картинки на клиенты) нам приглянулась.
Начиная с Mac OS X 10.6 Apple Remote Desktop (VNC, по сути дела, только тссс...) поддерживает Multi-user Scree Sharing, и это как раз то, что нам надо, ведь основная задача была не отвлекать от рабочего процесса iOS разработчика, который работает за этим Mac-ом.
Действия со стороны Mac
Настройки для Mac OS X 10.8 aka Mountain Lion (для остальных систем не должны сильно отличаться):
- Создаём юзера, например, SimulatorViewer;
- Идём в Settings -> Sharing -> Remote Managment, там настраиваем Allow access for: SimulatorViewer, там выбираем как минимум Observe + Control + Open And Quit Applications;
- Жмём на Computer Settings и выбираем там VNC viewers may control screen with password, а так же вводим пароль для VNC.
На этом настройка Mac OS X части закончена.
Действия со стороны Ubuntu
Для подключения к Mac-у будем использовать Remmina Remote Desktop Client, который уже присутствует в стандартной поставки Ubuntu, как мне сказали:) Прошу прощения за «чужой» скриншот, нет сейчас возможности сделать свой:
- Connection->New...
- Protocol: VNC — Virtual Network Computing;
- Server — IP адрес Mac-а (показывается на нём в окне Sharing да и вообще много где, взрослые уже)
- Вписываем в User и Password наши данные для юзера SimulatorViewer, которого мы создали чуть выше;
- Color Depth выставляем в High color (15 bit), можно и больше, если сеть позволяет), от тормозов значение особо не избавит:)
Можете попробывать уже присоединиться, должен отобразиться экран Mac OS X, при этом сессия её пользователя за компьютером не прервётся.
Настраиваем Xcode
Осталось лишь сделать так, чтобы simulator билды Xcode-а были доступны для нашего юзера. Я выбрал самый простой вариант, переместив build-директорию в /Users/Shared/:
- Выгоняем iOS-разработчика от Mac-а покурить на 5 минут, а сами в это время лезем в настройки Xcode, секция Locations;
- Выбираем Derived Data: Custom, путь /Users/Shared/Xcode/DerivedData;
- В Advanced... жмём на Shared Folder и вводим Build;
- Комментируем рандомную строчку в коде программиста;
- создаём исполняемый(!) файл /Users/Shared/run.sh с таким содержимым:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/Contents/MacOS/iPhone Simulator -SimulateApplication blah
- Заметаем следы и уходим от компьютера iOS-программиста.
Внимательный читатель заметит иденификатор blah, краткое объяснение: без него работать не будет мы специально задаём несуществующий путь и тогда симулятор попросит нас его указать при старте:)
Работа полученной системы
Как подсоединиться к рабочему маку мы уже разобрались, осталось запустить в нём симулятор и начать издеваться над программистом.
- Просим iOS разработчика собрать билд для симулятора(!);
- Заходим через VNC на наш мак (дальнейшие действия я описываю уже внутри машины, на которую зашли);
- Переходим в Finder-е в /Users/Shared/;
- Запускаем run.sh, который откроет симулятор с окном выбора файла;
- Если у нас приложение называется Habrahabr, то путь к нему будет такой:
/Users/Shared/Xcode/DerivedData/Build/Products/Debug-iphonesimulator/Habrahabr.app
Если всё сделали правильно, то приложение запустится и можно начинать тестировать.
Appendix
В ходе тестирования встретились с некоторыми проблемами, которые я оформлю в виде FAQ:
A: При работе через VNC Вы можеет спокойно менять разрешение экрана, а так же их конфигурацию. Настройки экрана -> Scaled, 1024x768
Q: На маке 2 монитора, как отобразить только один из них?
A: Просто зайдите в настройки экрана и нажмите Mirror Displays, тогда будет показан только один экран.
Q: При работе ощущаются тормоза, что делать?(
A: Мы перепробовали несколько VNC клиентов и их настроек, но везде присутсвует проблема лагов и медленного «умерания» коннекта, с чем это связано так и не нашли, потому что в целом тестеров устроило. Помогает переподключение.
Q: А что делать пользователям Windows?
A: Тут такое дело (с), что мы не нашли Win компьютера в офисе, но всё сводится к простейшему поиску VNC клиента под Win, который умеет коннектится к Apple Remote Desktop.
Заключение
По сути дела статья — собирательный образ Mac VNC + VNC Client + Xcode custom build path + Running Simulator with target application и была написана с целью избавить Вас от гугления данных тем.
Приветствуются советы по улучшению схемы, особенно узкого места в виде VNC и его медленной работы.
Спасибо за внимание!
Автор: bsideup