1) Клоним плейграунд и копируем код из него в новый iOS проект под названием MARepos.
2) Приложение должно отображать navigation controller с MA репозиториями, установленного в качестве root view controller-а в window.
Создаем новый target с типом iOS Framework и называем его MAReposFramework.
3) Перемещаем весь код нашего приложения (кроме AppDelegate и/или SceneDelegate) в MAReposFramework.
4) Нужно убедиться что все исходники принадлежат target-у MAReposFramework, а не target-у приложения.
5) Необходимо чтобы MAReposFramework был импортипрован в AppDelegate и/или SceneDelegate приложения MARepos чтобы иметь доступ к ReposViewController для создания инстанса ReposViewController.
6) Собираем приложение и убеждаемся, что все работает так же, как и прежде (нужно будет сделать некоторые типы и функции публичными)
7) Создаем iOS playground и перетаскиваем его в проект приложения.
8) Импортируем MAReposFramework, создаем экземпляр ReposViewController и устанавливаем его как live view playground-а.
9) Можно использовать исходный код playground-а в качестве примера.
10) Подменяем Current: live заменяем mock вариантом (нужно объявить статические свойства live и mock для Environment)
11) Теперь страница playground-а может выступать live примером этого экрана.
Меняем mock чтобы протестировать разные состояния, чтобы изменения вступили нужно пересобрать MAReposFramework
Задание 2
В приложении есть еще несколько зависимостей которые мы не затронули.
Давайте исследуем как их взять под контроль выполнив несколько упражнений:
1) Клиент аналитики использует несколько синглетонов: Bundle.main, UIScreen.main и UIDevice.current. Извлекаем эти зависимости в Environment. Какие есть преимущества контроля этих зависимостей?
2) DateComponentsFormatter может производить разные строки для разных языков и локалей, и по умолчанию в нем установлена локаль устройства.
Извлекаем эту зависимость в Environment и управляем ею в форматировщике
Приводим несколько примеров того как mock-и Current-а позволяют нам тестировать форматирование для разных языков и локалей.
Примечание Evironment это то же, что и World упоминаемый в лекции.
Задание 1
1) Клоним плейграунд и копируем код из него в новый iOS проект под названием MARepos. 2) Приложение должно отображать navigation controller с MA репозиториями, установленного в качестве root view controller-а в window. Создаем новый target с типом iOS Framework и называем его MAReposFramework. 3) Перемещаем весь код нашего приложения (кроме AppDelegate и/или SceneDelegate) в MAReposFramework. 4) Нужно убедиться что все исходники принадлежат target-у MAReposFramework, а не target-у приложения. 5) Необходимо чтобы MAReposFramework был импортипрован в AppDelegate и/или SceneDelegate приложения MARepos чтобы иметь доступ к ReposViewController для создания инстанса ReposViewController. 6) Собираем приложение и убеждаемся, что все работает так же, как и прежде (нужно будет сделать некоторые типы и функции публичными) 7) Создаем iOS playground и перетаскиваем его в проект приложения. 8) Импортируем MAReposFramework, создаем экземпляр ReposViewController и устанавливаем его как live view playground-а. 9) Можно использовать исходный код playground-а в качестве примера. 10) Подменяем Current: live заменяем mock вариантом (нужно объявить статические свойства live и mock для Environment) 11) Теперь страница playground-а может выступать live примером этого экрана. Меняем mock чтобы протестировать разные состояния, чтобы изменения вступили нужно пересобрать MAReposFramework
Задание 2
В приложении есть еще несколько зависимостей которые мы не затронули. Давайте исследуем как их взять под контроль выполнив несколько упражнений: 1) Клиент аналитики использует несколько синглетонов: Bundle.main, UIScreen.main и UIDevice.current. Извлекаем эти зависимости в Environment. Какие есть преимущества контроля этих зависимостей? 2) DateComponentsFormatter может производить разные строки для разных языков и локалей, и по умолчанию в нем установлена локаль устройства.
Примечание Evironment это то же, что и World упоминаемый в лекции.