Что я узнал, создав свое первое приложение SwiftUI

После многих лет использования различных кросс-платформенных фреймворков для публикации игр и приложений в магазине Apple AppStore я решил, что для своего следующего приложения Apoklisi я собираюсь перейти на нативный подход. SwiftUI казался многообещающим, поэтому я решил попробовать. Апоклиси — это ежедневный трекер целей и привычек. Достаточно простая концепция, но интерфейс настолько уникален, что я знал, что возникнут некоторые препятствия.

В отличие от других трекеров привычек, Apoklisi использует затмение для отображения вашего прогресса. Полное затмение означает, что вы достигли своей цели. Отсутствие этих целей приводит к тому, что Луна отклоняется от Солнца. Есть также частицы и специальные эффекты, используемые для изображения этого беспорядка. Я не был уверен, был ли SwiftUI достаточно зрелым, чтобы справиться с этим.

Я должен отметить, что хотя я раньше публиковал свои статьи в AppStore, Xcode все еще был для меня чуждым. Я никогда не программировал на Swift и не использовал какие-либо API непосредственно до Apoklisi.

SwiftUI отличается от всего, что я когда-либо использовал раньше

Я исхожу из фона MVC, где я привык к контроллеру, принимающему ввод, этот ввод обрабатывается моделью, а вывод отправляется в представление для рендеринга. SwiftUI — это декларативный фреймворк, основанный на состоянии, все происходит в представлении. Он работает на платформе Apple Combine. Требовать некоторого привыкания — это ничего не сказать. Не всегда было очевидно, как управлять вводом данных в представлении или как запускать сложный алгоритм в реальном времени. Кривая обучения для более сложных проектов довольно крутая. В основном это связано со следующим моментом.

Плохая документация

В настоящее время мы работаем во второй итерации SwiftUI. Хотя у Apple есть несколько отличных руководств и вспомогательная документация для этих руководств на своем веб-сайте для разработчиков, это все, что есть на самом деле. Когда вы начинаете работать, отсутствие дополнительной документации становится большой причиной разочарования. Мне пришлось многое выяснить самостоятельно, методом проб и ошибок с тонной отладкой. Я проводил часы, даже дни, исследуя глубины Интернета, чтобы найти крохотные кусочки информации, которая могла бы мне помочь. Некоторая базовая информация о том, как делать определенные вещи, похоронена в видеороликах WWDC или в старой устаревшей документации, отличной от SwiftUI, и это только в том случае, если вам повезет и она существует. Много раз я заходил на сайт документации Apple по определенной функции только для того, чтобы узнать, что это заглушка без дополнительной информации. Я не могу переоценить, какой это был ужасный опыт.

См. также:  Машинное обучение MultiTech Conduit

Для выполнения даже самых сложных задач требуется небольшая часть кода

В то время как SwiftUI все еще находится в зачаточном состоянии, экосистема Apple и ее API-интерфейсы — нет. Часто я ожидал, что на реализацию некоторых частей моего приложения уйдет несколько дней, только чтобы понять, что то, что мне нужно, можно выполнить с помощью простой строчки кода. Одна из моих любимых вещей — это NSPersistentCloudKitContainer, который позволяет хранить данные локально в базе данных и автоматически синхронизировать их между устройствами через iCloud. Это означало, что я мог отслеживать свою активность на часах и видеть результаты на своем телефоне в течение нескольких секунд, не нажимая ни на что. Это было так освежающе и изменило правила игры для меня. По моим оценкам, Apoklisi потребовалось бы как минимум в двадцать раз больше кода для выполнения того, что я сделал, если бы я не использовал SwiftUI. Он настолько легкий, что даже с поддержкой iCloud и баз данных, виджетами, темным режимом и всеми другими функциями конечный продукт весит всего 1,5 МБ. Напротив, когда я использовал Unity, пустой холст занимал более 35 МБ.

По моим оценкам, Apoklisi потребовалось бы как минимум в двадцать раз больше кода для выполнения того, что я сделал, если бы я не использовал SwiftUI.

SwiftUI еще недостаточно развит

Существовала недокументированная оговорка в отношении подхода NSPersistentCloudKitContainer, о котором я упоминал ранее. Данные будут синхронизироваться только тогда, когда приложения находятся на переднем плане. У меня есть крайний случай, когда мне нужно синхронизировать в фоновом режиме. Apple сказала мне, что в настоящее время это невозможно без сложного обходного пути. Опасности быть ранним последователем, верно? Есть еще несколько случаев, когда я просто не мог легко сделать то, что хотел, потому что фреймворка еще не было. Есть решения для всего, но они лишены легкости, которую продвигает SwiftUI.

См. также:  Дополнительный! Дополнительный! Прочитать все об этом!

Тестирование невероятно сложно

Посмотрим правде в глаза, разработчики часто пропускают тестирование, потому что оно слишком сложное или добавляет слишком много времени проекту. В общем, тестирование — это немного болезненно. SwiftUI выводит это на новый уровень. На сайте Apple нет примеров того, как протестировать SwiftUI. Apple, похоже, ожидает, что вы проверите свои просмотры с помощью функции предварительного просмотра. Это нормально, когда у вас есть несколько просмотров, но по мере роста сложности это становится неустойчивым. К счастью, модульное тестирование вашей логики довольно просто. Когда дело доходит до проверки ваших взглядов, этого еще нет.

Предварительные просмотры по большей части работают очень хорошо

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

Xcode отстает с точки зрения отличного редактора

При чем здесь SwiftUI? Если вы хотите использовать функцию предварительного просмотра, вам в значительной степени нужно использовать Xcode. К сожалению, Xcode не такой уж хороший редактор кода. Хорошо, но уже начинает показывать свой возраст. Я использую Visual Studio Code в течение последних нескольких лет, и многие функции автоматизации и ярлыки невозможно воспроизвести в Xcode. Форматирование в Xcode также довольно примитивно. Есть плагины, которые могут помочь, но они обычно запускаются только после компиляции, что, на мой взгляд, уже слишком поздно.

См. также:  Почему протоколы MPPlayableContentManager (MPPlayableContentDataSource и MPPlayableContentDelegate) в iOS 13.2 не вызываются?

Когда это работает, а часто бывает, SwiftUI кажется волшебным

Как только вы преодолеете все препятствия, о которых я упомянул, у вас останется структура, которая, несомненно, является будущим разработки приложений. Большая часть тяжелой работы по разработке приложений выполняется за вас. Вам просто нужно сосредоточиться на создании потрясающего приложения, а не на деталях. Это действительно похоже на волшебство, когда оно работает, и по большей части оно действительно работает хорошо. Это означает, что вы можете запустить свое приложение в кратчайшие сроки, что позволит вам с легкостью сосредоточиться на добавлении более продвинутых API, таких как машинное обучение. SwiftUI также является кроссплатформенным со всей экосистемой Apple, поэтому вы можете публиковать на iOS, iPadOS, watchOS, tvOS и macOS практически с той же кодовой базой.

Заключение

Мне нравится SwiftUI? Абсолютно. Я рекомендую это? С некоторыми колебаниями. Я думаю, что через два года SwiftUI станет прекрасным фреймворком, который упростит программирование. К сожалению, из-за отсутствия документации очень сложно разобраться, если вы работаете над чем-то более сложным, чем прототип. Хотя он может быть или не достаточно зрелым, мне все же удалось запустить Apoklisi для iPhone и Apple Watch с использованием SwiftUI, и он делает то, для чего был предназначен.

Если вы хотите проверить Апоклиси, вы можете найти его в AppStore. Если вам понравилась эта статья, не стесняйтесь аплодировать или оставлять комментарии. Удачного кодирования!

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: