Добрый день! Меня зовут Виталий, мой профиль — это обработка больших данных. Некоторое время назад ради разнообразия я решил попробовать освоить Swift и выпустить приложение в AppStore. Постараюсь осветить основные моменты по пунктам, через которые пришлось пройти перед выпуском приложения.

Для начала пара слов о приложении. Разрабатывалось приложение-фоторедактор с возможностью публикации фотографий. Основной функционал:

  • Профиль пользователя. Тут отображаются опубликованные пользователем фотографии, карта с отметками, где было сделано фото и стена для публикации текстовых записей. Также из профиля можно просмотреть ленту уведомлений и открыть раздел настроек.
  • Фоторедактор. В фоторедактор есть возможность использования множества фильтров, в том числе фильтров на основе нейросетей, регулировать тонкие настройки (яркость, виньетка и прочее), добавлять стикеры, текст, рисовать на фото, обрезать фото и прочее.
  • Камера. Для возможности сделать фото прямо из приложения.
  • Поиск. В поиске можно найти других пользователей по никнейму или найти фотографии по хэштегу.
  • Карта. На карте отображаются все фото, опубликованные пользователями приложения.
  • Лента. В ленте 3 вкладки: новое, топ и подписки.
  • AR. В приложении можно открыть пост с фотографией и перейти в режим AR. В нем будет через камеру отображаться компас с указанием расстояния до места, где было сделано фото. Также на экрана камеры будет отображаться само фото.

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

  • Компьютер на Mac OS. Это первый пункт. Чтобы полноценно разрабатывать на Swift, нам необходима Mac OS. Я вел разработку в XCode (среда разработки от Apple), однако существуют и сторонние разработки (например, от JetBrains).
  • Выбрать язык разработки. Помимо Swift, есть возможность использовать другие языки программирования, например Objective-C. Также существует возможность вести разработку для двух платформ (iOS и Android), для этого можно использовать фреймворки Flutter или React Native. К сожалению, разработка кроссплатформенного приложения накладывает определенные ограничения на быстродействие и доступный функционал, поэтому мной был выбран Swift.
  • Поддерживаемые версии iOS. Следующий момент — это вопрос о поддерживаемых iOS-версиях. Swift позволяет создавать в языке конструкции следующего вида: if #available(iOS 15.0, *) { Т.е. если вы используете функционал, который доступен только в новой версии системы, то вы должны прописать дополнительную логику, что нужно делать приложению, если функционал еще не поддерживается (например, темная тема). Помимо этого, перед выпуском приложения необходимо протестировать приложение на каждой из версий. Для этого можно использовать встроенный в XCode эмулятор, либо поискать подержанные гаджеты на торговых площадках. В моем случае, минимальная поддерживаемая версия приложения — iOS 10.
  • Поддержка других платформ. XCode позволяет использовать реализованный на Swift код для запусков на iPad и Mac (для портирования на Mac используется разработка от Apple под названием Catalyst). И хоть в своих презентациях Купертиновцы заявляют, что код будет работать из коробки, скорее всего, чуда не случится. Вам нужно будет оптимизировать приложение под повороты экрана на планшете (а для этого неплохо бы добавить боковое меню) + поддержка Split View. Для Mac же нужна адаптация под все возможные изменения ширины и высоты вашего приложения. Помимо этого, вы почти наверняка найдете парочку другую Null-exception’ов. В моем случае, на адаптацию под планшет у меня ушло около 3 месяцев и на адаптацию под Mac еще около 2 месяцев.
  • Сервер. Данный пункт является опциональным. Зависит от того, что у вас за приложение. В моем случае реализовывался сервер на Spring. Авторизация осуществляется через JWT-токены. Помимо этого, был реализован сервер на Flask, через который происходит запуск обработки фотографий с применением нейростилей.
  • Уведомления. Отправка уведомлений занимает достаточно длительное время, поэтому, чтобы не нагружать основной сервер, информация об уведомления складывается в Kafka. Из Kafka их достает еще один сервер на Spring и уже он занимается отправкой уведомлений.
  • База данных. Для хранения информации о пользователях необходимо продумать структуру таблиц и выбрать базу данных. Скорее всего, вам понадобится таблица для хранения записей о пользователях, таблица для хранения информации о публикациях и прочее. В моем случае выбор пал на MySQL.
  • Вход через сторонние сервисы. В наше время пользователи не хотят тратить много времени на регистрацию в приложении, поэтому здорово, когда регистрацию можно пройти по нажатию одной кнопки. В моем случае реализован функционал входа через Google и через Apple. Однако нужно учитывать, что для этого нужно добавлять соответствующие методы на своем сервере.
  • Языки. В XCode достаточно просто формировать поддержку разных языков. Для этого при разработке указывайте следующие конструкции в вашем коде: NSLocalizedString("Some awesome text", comment: "") Затем можно будет сформировать специальный файл, где произвести сопоставление текста из данной структуры на нужный язык.
  • Аккаунт разработчика. Для возможности публикации приложений и сборки версий вам понадобится аккаунт разработчика. Стоит удовольствие 100$ в год. Советую покупать его, только если вы подготовили первую версию приложения и готовы начинать бета-тест.
  • Бета-тест. Apple позволяет отправлять тестовые сборки через TestFlight. Т.е. после того как вы закончили прототип, вы можете попросить ваших друзей или знакомых потестировать приложение. Для этого им нужно скачать TestFlight из AppStore и зарегистрироваться, а вам отправить им приглашение через личный кабинет разработчика.
  • Описание для магазина. Это достаточно важный момент. Сюда нужно будет добавить скриншоты для магазина, текст с описанием приложения, а также ключевые слова для поиска. Чаще всего пользователи смотрят именно на красивые превью, поэтому лучше не лениться на данном этапе.

Я буду очень рад, если вы оцените получившийся результат. Приложение доступно бесплатно и не содержит рекламы:

https://apps.apple.com/ru/app/gradcit/id1486574607

https://apps.apple.com/ru/app/gradcit-для-ipad-фоторедактор/id1531799712