Сайт о телевидении

Сайт о телевидении

» » Тестирование iOS-приложений. Как выйти из программы бета-тестирования iOS и OS X

Тестирование iOS-приложений. Как выйти из программы бета-тестирования iOS и OS X

Всем привет. Раньше выход бета-версий iOS считался чуть ли не праздником для всех гиков. Каждая следующая обсуждалась, мусолилась в СМИ. Люди находили мельчайшие изменения как в функционале, так и в дизайне. Поставить её могли лишь избранные. Затем появилась возможность ставить публичные бета-версии официально у всех пользователей. Это с энтузиазмом восприняли многие пользователи.

Но в последние месяцы Apple откровенно достала даже меня своими бета-версиями, в которых визуально и фактически ничего не меняется: исправят пару багов и выкатывают новую бетку. О таких бестолковых обновлениях даже новость не хочется давать на сайт. Поэтому я стал оповещать читателей только о самых значимых бетах.

Ну ладно iOS - поставил на зарядку да обновил, но когда OS X начинает обновляться каждую неделю?! А это - лишняя перезагрузка ноутбука, надоедливые каждодневные оповещения о необходимости обновления…

Как выйти из программы бета-тестирования OS X?

Заходим в приложение «Системные настройки». Там выбираем App Store.

Напротив надписи «Ваш компьютер настроен на получение обновлений бета-версий ПО» жмите кнопку Изменить.

В новом окне нажмите «Не показывать обновления бета-версий ПО».

Всё. Теперь в Mac App Store вы будете получать только официальные релизы.

Как выйти из программы бета-тестирования iOS?

С iOS всё сложнее. Apple в своей официальной справке предлагает в режиме восстановления накатить резервную копию, которая была сделана до вступления в программу бета-тестирования.

Полный бред, учитывая, что обычно резервная копия одна и даже если их несколько, пользователи предпочитают удалять старые для экономии места на диске или в iCloud. Да и откат к старой резервной копии - это всегда вынужденный шаг, который может пройти с потерей каких-то свежих данных.

Поэтому единственный адекватный способ - полностью покинуть программу бета-тестирования.

Логиньтесь с вашим Apple ID и паролем.

При разработке мобильных iOS приложений в среде XCode запуск и тестирование происходит на симуляторе. Однако каждый профессиональный разработчик вам скажет, что окончательную отладку нужно производить на реальных устройствах. Причем лучше на нескольких различных устройствах. На iPhone 5, на iPhone 6, на различных версиях iPad и iPod. Однако для этого политика компании Apple заставляет приобрести аккаунт разработчика. Он стоит $99 и для начальных шагов в программировании не всегда оправданы эти затраты. И вот наконец, просьбы разработчиков были услышаны и появился способ легального запуска своих приложений на реальных устройствах и этот способ абсолютно бесплатный.

Были различные варианты решения этой проблемы от установки на устройство Jailbreak до недорогого варианта добавления UDID устройства к реально существующему аккаунту разработчика. (Последний способ стоит 300 руб). Но как написано выше с выходом XCode 7 эта проблема была решена.

Так что же нужно для запуска своих приложений на реальном устройстве?

Все что вам нужно, это Apple ID! Больше ничего не нужно.

Подключение устройства

Подключите iPhone, Ipod Touch, или IPad к вашему Mac с помощью кабеля USB кабеля. В меню Xcode зайдите Window → Devices , чтобы открыть список устройств. Окно выглядит следующим образом (я использую iPad Air):

В левой панели окна Xcode находится список устройств, которые могут быть использованы для запуска разработанных приложений. Нажмите на изображение вашего устройства, чтобы выбрать его. Если устройство используется впервые вместе с Xcode, вы увидите сообщение что-то вроде, «“iPad is not paired with your computer. «

Для того чтобы связать устройство с Xcode вам нужно разблокировать устройство (Slide to unlock). После разблокировки, на экране устройства появится сообщение с просьбой доверять этому компьютеру. Нажмите «Разрешить» чтобы продолжить. Теперь Xcode выведет страницу, на которой напишет что позволяет использовать устройство для тестирования.

Дайте ему несколько минут — если процесс занимает слишком много времени, возможно потребуется отсоединить устройство и подключить его снова. Есть вероятность, что выскочит сообщение об ошибке: «An error was encountered while enabling development on this device. » Потребуется отключение устройства и перезагрузка его. Также перезапустите Xcode, прежде чем вы снова подключите устройство.

Так должно выглядеть окно с сопряженным устройством:

Настройка AppleID

Теперь, когда устройство сопряжено с компьютером, нужно связать ваш AppleID с Xcode. Можно использовать тот же идентификатор AppleID, что вы уже используете с Itunes и вашим устройством, однако, если вы разрабатываете корпоративное iOS приложение, то можете создать новый AppleID, чтобы разделить процессы разработки. Конечно, если у вас уже есть оплаченный аккаунт разработчика вы должны использовать именно его

Откройте меню Xcode -> Preferences -> Accounts :

Нажмите кнопку «+» внизу и выберите «Add Apple ID «. Xcode попросит логин и пароль от AppleID. Введите их и нажмите « Add« . Xcode проверит ваши данные и добавит их к списку аккаунтов.

Примечание : возможно Xcode не сможет использовать ваш Apple ID при условии, если он был ранее был использован как аккаунт разработчика, срок действия которого в настоящее время истек. Простейшим решением в этом случае является создание нового Apple ID. Это бесплатно и займет всего несколько минут. https://appleid.apple.com

Настройка проекта XCode

Вы все еще должны указать Xcode использовать эту учетную запись при создании вашего приложения. Перейдите к экрану настроек проекта и на вкладке General нажмите на Team , чтобы выбрать ваш Apple ID.

Ниже поля выбора команды вы видите предупреждение, «No code signing identities found » или «No matching provisioning profiles found «. Не лишним будет знать, что означают эти предупреждения. Для того чтобы Xcode мог запустить приложение на вашем iPhone, iPad или iPod, приложение должно быть подписано цифровой подписью с сертификатом на разработку (Development Certificate ). Сертификат является электронным документом, который идентифицирует вас как разработчика iOS приложений и действует только в течение ограниченного периода времени. Приложения, которые вы хотите представить в App Store должен быть подписаны другим сертификатом «Distribution Certificat» . Для использования Distribution Certificat необходимо быть членом платной программы разработчиков, однако использование сертификата разработки (Development Certificate ) является бесплатным. В дополнение к действующему сертификату также необходим так называемый профиль обеспечения (Provisioning Profile ) для каждого приложения которое вы разрабатываете. Xcode использует эти документы чтобы подписать приложение для запуска на вашем устройстве.

Специфика данных документов на первоначальных этапах разработки не имеет значения. Просто примите, что вам нужен Provisioning Profile или приложение не будет работать на вашем устройстве. Создание сертификатов и Provisioning Profile , в XCode 7 это очень простая задача!

Нажмите кнопку Fix Issue . Нужно немного подождать пока Xcode автоматически регистрирует устройство с вашей учетной записью, создает новый сертификат разработки, загружает и устанавливает Provisioning Profile на ваше устройство. Раньше вы должны были бы сделать это все вручную, но теперь Xcode 7 берет всю работу на себя. В этот момент возможно вы увидите следующее сообщение об ошибке:

Идентификатор пакета Bundle Identifier — это идентификатор приложения и он должен быть уникальным. Если какое либо другое другое приложение уже использует этот идентификатор, то вы не можете его использовать.

Поэтому для 100% уникальности следует указывать собственное доменное имя для Bundle ID , например ru.proswift.TestApp . Исправить эту ошибку легко: измените Bundle Identifier и повторите попытку.

Также возможно вы получите эту ошибку:

Xcode должен знать об устройстве на котором вы собираетесь запустить приложение. Вот почему мы начали именно с подключения устройства. Еще раз проверьте, что ваш iPhone или iPad по-прежнему подключен к Mac, и что ваше устройство есть списке Devices. У меня это окно выглядит так:

В основном окне XCode еще раз выберете ваше устройство и нажмите кнопку Fix Issue и предупреждение должно исчезнуть.

Настройка связки ключей

Все настроено и готово к работе. Нажмите Run , чтобы скомпилировать и запустить приложение. В этот момент вы можете получить всплывающее окно с вопросом «codesign wants to sign using key … in your keychain» . Если вышло это сообщение, нажмите Always Allow — т.е. разрешать всегда. Это сообщение говорит о том, что Xcode пытается использовать новый сертификат разработки, который вы только что создали, но просит дать ему разрешение для этого.

Ваше приложение заработало на устройстве без аккаунта разработчика и без Jailbreak? Потрясающие! Если нет, то читайте дальше …

Возможные проблемы и их решение

Есть несколько ошибок, которые могут возникнуть при попытке запуска своего iOS приложения на реальном устройстве, особенно если вы никогда не делали этого раньше. Так что не паникуйте, если вы столкнетесь с проблемами.

Устройство не подключено.

Как ни странно это самая распространенная ошибка, поэтому я напишу о ней в третий раз в этой статье. Убедитесь, что ваш iPhone, iPod Touch, или iPad подключены к Mac. Устройство должны быть списке устройств Xcode, и на нем не должно быть желтого значка предупреждения, о том что устройство не доверяет компьтеру.

Подозрительный не одобренный Apple разработчик.

Если XCode выдаст такое сообщение, а на устройстве выйдет сообщение с текстом «Untrusted Developer. Your device management settings do not allow using apps from developer «, не нужно втираться в доверие к Apple:-). Для решения этой проблемы откройте на устройстве Настройки -> Основные -> Управление Устройством . Выберете профиль вашего Apple ID и вы увидите список приложений на устройстве, которые нужно перевести в разряд «Проверенные» . Попробуйте снова запустить приложение.

Устройство заблокировано.

Если на устройстве установлен пароль, то вы можете получить это предупреждение:

Приложение не будет работать если устройство заблокировано. Для решения нужно разблокировать устройство и запустить компиляцию еще раз.

Надеюсь данная информация будет вам полезна. По себе знаю, что начиная разрабатывать iOS приложения, разработчики сталкиваются с проблемой тестирования своих приложений на реальных устройствах. А несправедливость в виде $99 никак не греет душу брата программиста. И даже если разработчик решается на Jaibreak, все равно для запуска потребуется куча сторонних бубнов. Вариант описанный в данной статье позволит вам запускать и тестировать свои приложения без этих бубнов и совершенно бесплатно.

С нетерпением жду комментариев и критику статьи.

Вконтакте

– первая мобильная операционная система, для которой Apple стала выпускать публичные бета-версии. Теперь любой желающий может лично ознакомиться со всеми новыми функциями прошивки и оказать помощь Apple в ее тестировании.

Вконтакте

Тестирование бета-версии предполагает ее загрузку и установку на iPhone или iPad. Этот процесс нельзя назвать сложным, однако он немного непривычен. Пользователям, желающим лично опробовать новую тестируемую версию iOS beta, мы расскажем, как это сделать.

1 . Откройте браузер Safari на iPhone или iPad и нажмите эту ссылку (зеркало) , чтобы загрузить профиль зарегистрированного разработчика.

2. В появишемся всплывающем окне выберите Разрешить .

3. Нажмите iPhone и подтвердите установку профиля для разработчиков на свой iPhone или iPad.

4 . Перезагрузите iOS-устройство.

5. После перезагрузки откройте Настройки и перейдите по пути Основные Обновление ПО . iOS 12 станет доступна для загрузки и установки. На устройстве должно быть не менее 2 ГБ свободного места.

6 . Нажмите кнопку «Загрузить и установить » и дождитесь установки iOS 12 на iPhone или iPad.

Как зарегистрировать учетную запись участника Программы публичного бета-тестирования iOS 12 (начнет действовать в июле 2018 года)

Участникам программы бета-тестирования macOS повторно регистрироваться для загрузки iOS 12 бета не нужно – можно воспользоваться тем же . Пользователи, ранее не участвовавшие в программе, должны зарегистрироваться с помощью Apple ID. Для этого необходимо:

2 . Нажать на кнопку iOS;

3 . Нажать на кнопку «Загрузить профиль» ;

4 . В появившемся всплывающем окне нажать на кнопку «Разрешить» ;

5 . Выбрать iPhone (запрос появится в случае, если Ваш iPhone находится в паре с Apple Watch)

6 . Нажать «Установить» .

7

8 . Нажать на кнопку «Установить », подтверждая условия пользования.

9 . Нажать Перезагрузить для перезагрузки устройства.

Как установить публичную бета-версию iOS 12

После загрузки ОС появится уведомление о готовности к установке. Для инсталляции необходимо:

1 . Открыть приложение «Настройки », выбрать «Основные », а затем нажать на пункт «Обновление ПО »;

2 . Выбрать «Установить »;

3 . Ввести пароль экрана блокировки;

4 . Подтвердить согласие с условиями пользования, нажав «Принять ».

Устройство перезагрузится, после чего будет установлена последняя актуальная бета-версия iOS.

Как откатиться на официальную ОС, если работа тестовой версии iOS вас не устраивает

В случае, если по каким-либо причинам бета-версия iOS вам не понравится, можно откатиться до официальной iOS .

В этой статье я хочу рассказать о тестировании iOS приложений и небольшой автоматизации этого процесса.
Под катом будут рассмотрены инструменты для модульного и функционального тестирования и приведены простые примеры.

Тестовое приложение

В качестве примера я решил написать простейший калькулятор. Это приложение не имеет никакой практической пользы и имеет весьма скудный функционал, но на мой взгляд его вполне достаточно для того чтобы дать старт написанию тестов.

Эти инструменты очень похожи, они оба позволяют писать тесты на Cucumber"е и оба реализованы на Ruby, разница лишь в функционале.
В одном из проектов мне пришлось мигрировать с Frank"а, я просто запустил тесты с использованием Calabash"а и все они прошли почти сразу, пришлось только немного изменить пару шагов.

Сейчас я остановился на Calabash. Думаю что многие iOS разработчики не знакомы с Cucumber, потому и хочу немного рассказать как он работает и как писать тесты.

Cucumber
Я ни в коем случае не претендую на верность этого описания, просто опишу как я понимаю его работу, и надеюсь это описание внесет некоторую ясность и поможет стартануть тем кто все еще не решился его использовать.

Итак, в Cucumber"е есть несколько главных «сущностей»:

Feature - это набор нескольких связанных по логике сценариев (или не связанных, уж как программист решит). Она состоит из названия и краткого, информативного описания. К примеру:

Feature: Manage Orders As a User I should be able to manage Orders through iOS application
Scenario - конкретный сценарий описывающий некоторый use case. Состоит из имени и набора шагов.

Scenario: Create Order #steps
Step - описание конкретного действия пользователя (нажатие на кнопку/ссылку, ввод текста, свайп и.т.п).

When I fill in "Title" with "FuuBar" And I touch "Save" button Then I should see alert view titled "Saved successully"
Step definition - реализация конкретного действия пользователя. Выглядит она примерно так:

When /^I touch "([^"]*)" button$/ do |button_text| touch("button marked:#{button_text}") end

При прогоне тестов Cucumber берет один шаг и ищет нужную реализацию по регулярному выражению, прогоняет эту реализацию и берется за следующий шаг. Не уверен что это совсем так, но надеюсь суть ясна.

Давайте добавим Calabash в наш проект.
Перейдите в деректорию с проектом и выполните следующие команды:

Gem install calabash-cucumber calabash-ios setup calabash-ios gen
Calabash добавил к нашему проекту еще один таргет, по умолчанию он имеет шаблон project_name-cal. Нам необходимо выполнить build для этой цели.
Теперь мы почти готовы запустить тесты.
После генерации выводится подсказка как запустить тесты

DEVICE=iphone OS=ios5 cucumber

Но на выполнении этой команды все валится, т.к. calabash не знает где находится наше приложение. Для этого необходимо указать еще одну переменную - APP_BUNDLE_PATH. По умолчанию Xcode 4.x хранит приложения по адресу

~/Library/Application\ Support/iPhone\ Simulator/x.x/Applications/hash/app_name.app

Где x.x - версия iOS, а hash - сгенерированный Xcode"ом уникальный ключ для приложения.
Попробуйте найти свой.app и выполнить следующее

APP_BUNDLE_PATH="~/Library/Application\ Support/iPhone\ Simulator/x.x/Applications/hash/your_app-cal.app" DEVICE=iphone OS=ios5 cucumber
Теперь все должно пройти хорошо.

Guard
Такой способ не очень удобен, но он вполне оправдан, т.к. calabash не может знать где лежит наше приложение. И тут нам на помощь приходит Guard.
Guard - это гем, который следит за файловой системой и при изменении файлов, за которыми он следит выполняет какие-либо операции. Список guard"ов довольно обширный, но нам нужен guard-calabash-ios .

Для его установки и использования необходимо выполнить следующее:

Gem install guard-calabash-ios guard init calabash-ios
Это создаст Guardfile - файл в котором описаны свойства необходимые guard"у и файлы за которыми нужно следить. (Детальные настройки можно найти на гитхабе . )
Последний штрих - откройте настройки Xcode и установите Derived Data как Relative. Теперь Xcode будет хранить сборки в директории с проектом, что позволит скрипту из guard-calabash-ios найти нужный нам APP_BUNDLE_PATH автоматически.
Теперь для прогона тестов необходимо выполнить в папке с проектом следующее.

Пишем тесты
Теперь когда все работает более удобно мы можем приступить к написанию наших UI-тестов.

Calabash создал папку features, в которой находятся наши сценарии и реализация шагов.
Давайте удостоверимся что наш калькулятор позволит пользователю сложить или вычесть два числа, и показать верный результат в alert view.

Отредактируйте файл my_first.feature

Feature: Add numbers As a User I should be able to perform calculations Scenario: Add numbers When I fill in "left" with "15" And I fill in "right" with "10" And I touch "add" Then I should see "25"
Если у вас все еще запущен guard, то при сохранении файла он автоматически запустит тесты, причем будет тестировать только измененный файл. Это очень удобно если у вас есть несколько файлов с фичами, т.к. не приходится после каждой строчки ждать пока прогонятся все тесты.

Итак, все тесты провалились, что логично.

Давайте добавим UI.

Для доступа к контролам из calabash"а нужно задать им accessibility label. Кроме того к кнопкам можно обращаться по надписи на них, а к текстовым полям по плэйсхолдеру.

Я сделал примитивный интерфейс: два текстовых поля и две кнопки в navigation bar"е, "+" и "-".
После того как мы добавили контролы на наш экран нам нужно выполнить следующие действия:

1. Добавить outlet"ы для кнопок и текстовых полей
2. Задать плэйсхолдеры нашим текстовым полям «left» и «right»
3. Задать accessibility label"ы для кнопок

Self.addButton.accessibilityLabel = @"add"; self.subtractButton.accessibilityLabel = @"subtract";
4. Повесить обработчики на наши кнопки

- (IBAction)addButtonTapped:(id)sender { CalculationManager *calculationManager = ; NSInteger left = ; NSInteger right = ; ]; } - (IBAction)subtractButtonTapped:(id)sender { CalculationManager *calculationManager = ; NSInteger left = ; NSInteger right = ; ]; }

5. Добавить метод для отображения результата

- (void)showResult:(NSInteger)result { NSString *resultString = ; [[[ initWithTitle:@"Result" message:resultString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease] show]; }

6. Перейдите в терминал с запущенным guard"ом и нажмите Enter, это запустит все ваши сценарии, у нас он один и если вы все сделали правильно, то тесты пройдут успешно.

Теперь напишем тест для вычитания.

Scenario: Subtract numbers When I subtract 15 from 38 Then I should see "23" as result
После запуска Cucumber сообщит что не знает таких шагов, и предложит их реализовать.
Скопируем и немного подредактируем то что он вывел в файл calabash_steps.rb (project_dir/features/steps_definitions/)

When /^I subtract (\d+) from (\d+)$/ do |subtrahend, minuend| step %{I fill in "left" with "#{minuend.to_s}"} step %{I fill in "right" with "#{subtrahend.to_s}"} step %{I touch "subtract"} end Then /^I should see "(.*?)" as result$/ do |result| res = query("view:"UIAlertView"", "message").first res.should == result end

В реальной жизни мы скорее всего использовали бы теже методы что и в первом сценарии, но здесь я хотел показать как выглядят step definitions, как вызывать другие шаги из реализации шагов(step %{}), как добраться до какого-либо значения (query) и как писать assert (should).

На этом по тестам все.

Заключение

Описанные тесты и приложение выглядят совершенно нелепо, но я ставил своей целью описать на этом примере основные возможности, которые позволят сразу начать использовать TDD/BDD, надеюсь что это у меня вышло и для статья окажется полезной.

В качестве логического завершения еще раз приведу ссылки.