Как стать автором
Обновить
19.89

Swift *

Открытый объектно-ориентированный язык

Сначала показывать
Порог рейтинга
Уровень сложности

Понимаем UICollectionViewLayout на примере Photos App

Время на прочтение 14 мин
Количество просмотров 19K
Здравствуй, Хабр! Меня зовут Никита, я работаю над мобильными SDK в компании ABBYY и в том числе занимаюсь UI-компонентом для сканирования и удобного просмотра многостраничных документов на смартфоне. Этот компонент сокращает время на разработку приложений на базе технологии ABBYY Mobile Capture и состоит из нескольких частей. Во-первых, камера для сканирования документов; во-вторых, экран редактора с результатами захвата (то есть автоматически сделанными фотографиями) и экран исправления границ документа.

Разработчику достаточно вызвать пару методов – и вот в его приложении уже доступна камера, которая автоматически сканирует документы. Но, помимо настроенных камер, нужно предоставить клиентам удобный доступ к результатам сканирования, т.е. автоматически сделанным фотографиям. А если клиент сканирует договор или устав, то таких фотографий может быть очень много.

В этом посте я расскажу о трудностях, которые возникли в процессе реализации экрана редактора с результатами захвата документов. Сам экран представляет из себя две UICollectionView, я их буду называть большой и маленькой. Возможности ручной корректировки границ документа и другой работы с документом я опущу, а фокус сделаю на анимациях и особенностях layout-а во время скролла. Ниже на GIF можно посмотреть, что получилось в итоге. Ссылка на репозиторий будет в конце статьи.



В качестве референсов я часто обращаю внимание на системные приложения Apple. Когда внимательно смотришь на анимации и другие интерфейсные решения их приложений, то начинаешь восхищаться их внимательным отношением к разного рода мелочам. Сейчас мы в качестве референса будем смотреть на приложение Photos (iOS 12). Я обращу ваше внимание на конкретные фичи этого приложения, а дальше мы попробуем их реализовать.
Читать дальше →
Всего голосов 13: ↑13 и ↓0 +13
Комментарии 3

Поиски «идеального» GUI. Путь новичка

Время на прочтение 3 мин
Количество просмотров 13K
Изучая первый язык я хотел видеть кнопочки, а не только текст в консоли. Я сделал на Python3+tkinter калькулятор. Это заняло 585 строк. Применив к коду магию py2app, я получил bundle размером 45MB. Мне не понравилась работать с py2app. Иногда все переставало работать, если использовались сторонние библиотеки, а иногда я исправлял код py2app. Из-за этого я думал, что standalone-приложения делать очень сложно.

Читать дальше →
Всего голосов 21: ↑15 и ↓6 +9
Комментарии 160

Измените свой образ мышления, работая с SwiftUI

Время на прочтение 3 мин
Количество просмотров 8.5K
image

На прошлой неделе я увидел, что сообщество пытается перенести наработаные шаблоны разработки c UIKit в SwiftUI. Но я уверен, что лучший способ написать эффективный код используя SwiftUI — это забыть все об UIKit и полностью изменить свое мышление с точки зрения разработки пользовательского интерфейса. На этой неделе я расскажу основные отличия между разработкой используя UIKit и SwiftUI.
Читать дальше →
Всего голосов 17: ↑13 и ↓4 +9
Комментарии 1

API для удаленной асинхронной выборки с помощью Apple Combine

Время на прочтение 17 мин
Количество просмотров 14K


Combine — это функциональный реактивный Swift фреймворк, который недавно реализован для всех платформ Apple, включая Xcode 11. С помощью Combine очень легко обрабатывать последовательности асинхронно появляющихся во времени значений values. Он также позволяет упростить асинхронный код, отказавшись от делегирования и сложных вложенных callbacks.

Но изучение самого фреймворка Combine на первых порах может показаться не таким уж простым. Дело в том, что основными «игроками» Combine являются такие абстрактные понятия, как «издатели» Publishers, «подписчики» Subscribers и операторы Operators, без которых не удастся продвинуться в понимании логики функционирования Combine. Однако благодаря тому, что Apple предоставляет разработчикам уже готовых «издателей», «подписчиков» и операторов, код, написанный с помощью Combine, оказывается очень компактным и хорошо читаемым.

Вы увидите это на примере приложения, связанного с асинхронной выборкой информации о фильмах из очень популярной сейчас базы данных TMDb. Мы создадим  два различных приложения: UIKit и SwiftUI, и покажем, как с ними работает Combine.


Читать дальше →
Всего голосов 22: ↑11 и ↓11 0
Комментарии 8

Истории

Redux — подобные контейнеры состояния в SwiftUI. Рекомендации

Время на прочтение 3 мин
Количество просмотров 2.2K
image

На прошлой неделе мы говорили о Redux – подобных контейнерах состояний в SwiftUI. Redux предоставляет единый источник истинностных значений, который предотвращает огромное количество потенциальных ошибок, которые могут возникнуть в разных состояниях приложения. На этой неделе мы поговорим о проверенных методах создания приложений на основе Redux, которые позволят сохранять нашу кодовую базу простой и без ошибок.
Читать дальше →
Всего голосов 9: ↑7 и ↓2 +5
Комментарии 0

SwiftUI: делаем Expandable/Collapsible секции в List view

Время на прочтение 6 мин
Количество просмотров 6.6K


Нередко встречающаяся в разработке под iOS задача — раскрывающиеся/складывающиеся секции в UITableView. Сегодня мы реализуем эту задачу, используя SwiftUI. В качестве небольшого twist'a добавим анимированный треугольник в заголовке секции и сделаем ячейки также раскрывающимися.

Разработка проходила на XCode 11.2 под macOS Catalina 10.15.1
Поехали!
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 3

Внедряем Sign in with Apple — систему авторизации от Apple

Время на прочтение 6 мин
Количество просмотров 48K
Привет, Хабр!

Этим летом на конференции WWDC 2019 Apple представила собственную систему авторизации Sign in with Apple  и сделала ее обязательной для всех приложений в App Store, которые используют вход через соцсети. Исключение составляют образовательные, корпоративные, правительственные и бизнес-приложения, использующие собственную авторизацию. К Sign in with Apple Apple сделала качественную документацию, и в этой статье мы на примере ЦИАН расскажем, как внедрить ее в свой сервис.


Читать дальше →
Всего голосов 34: ↑34 и ↓0 +34
Комментарии 10

Понимаем Property Wrappers в SwiftUI

Время на прочтение 4 мин
Количество просмотров 27K
Перевод статьи подготовлен специально для студентов курса «iOS Разработчик. Продвинутый курс v 2.0.»




На прошлой неделе мы начали новую серию постов о фреймворке SwiftUI. Сегодня я хочу продолжить эту тему, рассказав о Property Wrappers в SwiftUI. SwiftUI предоставляет нам обертки свойств @State, @Binding, @ObservedObject, @EnvironmentObject и @Environment. Итак, давайте попытаемся понять разницу между ними и когда, почему и какую из них мы должны использовать.
Читать дальше →
Всего голосов 16: ↑15 и ↓1 +14
Комментарии 4

Протокольно ориентированное программирование, часть 3

Время на прочтение 5 мин
Количество просмотров 5.5K

Завершающая статья на тему протокольно ориентированного программирования.


В этой части мы рассмотрим как переменные обобщенного типа хранятся и копируются и как с ними работает метод dispatch.

Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 3

Котлин против Свифта: Android и iOS движутся к созданию универсального языка?

Время на прочтение 5 мин
Количество просмотров 17K


Друзья, всем привет. На связи Дмитрий Кожевин — преподаватель базового курса «Android-разработчик» в OTUS. Специально для читателей нашего блога я подготовил перевод вот такой отчасти провокационной статьи. Очень интересно ваше мнение, поэтому после прочтения приглашаю всех в комментарии к данной публикации.



Как только Kotlin получил поддержку Google, явное волнение фанатов Kotlin стало не единственной реакцией. Те, кто не знаком с Kotlin, были весьма обеспокоены его уровнем совместимости с Java, средним временем, необходимым для его освоения, а также преимуществами использования Kotlin в целом.
Читать дальше →
Всего голосов 26: ↑18 и ↓8 +10
Комментарии 8

Протокольно ориентированное программирование, часть 2

Время на прочтение 8 мин
Количество просмотров 17K

В продолжение темы разберемся в протокольных типах и обобщенном (generic) коде.


По ходу будут рассмотрены следующие вопросы:


  • реализация полиморфизма без наследования и ссылочных типов
  • как объекты протокольных типов хранятся и используются
  • как с ними работает отправка метода
Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 5

Протокольно ориентированное программирование. Часть 1

Время на прочтение 10 мин
Количество просмотров 16K

Давайте подробнее изучим тему протокольно ориентированного программирования. Для удобства разделили материал на три части.


Данный материал является комментированным переводом презентации WWDC 2016. Вопреки частому мнению о том, что вещи "под капотом" должны там и оставаться, иногда крайне полезно разобраться, что же там происходит. Это поможет использовать предмет правильно и по назначению.

Читать дальше →
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 8

Лучшие практики и инструменты при разработке iOS приложений

Время на прочтение 7 мин
Количество просмотров 8.5K
Разрабатывая мобильные приложения, мне не раз приходилось создавать проекты с нуля. При этом я и моя команда всегда тратили много времени на основную настройку проекта, такие как интеграция сторонних инструментов, настройка структуры проекта, написание базовых классов, интеграция внешних библиотек и т.д.

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

Каждый инструмент или подход, добавленный в шаблон, заслуживают отдельной статьи, но я хотел бы попытаться суммировать каждый пункт и дать краткое объяснение того, почему я включил их в данную статью.
Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 14

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн

Как добавить поддержку льготного периода (Billing Grace Period) в iOS приложении?

Время на прочтение 3 мин
Количество просмотров 3.7K

image


В сентябре Apple добавили поддержку льготных периодов (или grace-периодов) для возобновляемых подписок. Она позволяет пользователям, оформившим подписку, сохранить доступ к платному сервису, даже если ее не удалось продлить вовремя из-за проблем с оплатой. Подписка возобновится, когда пользователь обновит способ оплаты.

Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 0

SwiftUI: знакомство

Время на прочтение 8 мин
Количество просмотров 17K
В этом руководстве мы научимся планировать UI приложения при помощи View и узнаем, как использовать переменные состояния (State variables) для модификации UI.

Примерное время чтения публикации: 25 минут.
Поехали!
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 16

Структуры против Классов

Время на прочтение 9 мин
Количество просмотров 24K
С самого начала, когда я начинал заниматься программированием, вставал вопрос, что использовать для улучшения быстродействия: структуру или класс; какие массивы лучше использовать и как. По поводу структур, Apple приветствует их использование, объясняя это тем, что они лучше поддаются оптимизации, и вся суть языка Swift — это структуры. Но есть и те, кто с этим не согласен, ведь можно красиво упростить код, отнаследовав один класс от другого и работая с таким классом. Для ускорения работы с классами создавали разные модификаторы и объекты, которые оптимизировались специально под классы, и тут уже сложно сказать, что и в каком случае будет быстрее.

Для расстановки всех точек на “е” я написал несколько тестов, которые используют обычные подходы к обработке данных: передача в метод, копирование, работа с массивами и так далее. Громких выводов я решил не делать, каждый решит для себя сам, стоит ли верить тестам, сможет скачать проект и посмотреть, как он будет работать у вас, и попробовать оптимизировать работу того или иного теста. Возможно даже выйдут новые фишки, которые я не упомянул, или они настолько редко используются, что я просто не слышал о них.
Всего голосов 15: ↑11 и ↓4 +7
Комментарии 7

То, что нужно знать о проверке чека App Store (App Store receipt)

Время на прочтение 4 мин
Количество просмотров 19K

В StackOverflow по-прежнему появляется много вопросов о валидации App Store чеков, поэтому мы решили написать статью на эту тему в формате вопросов и ответов.


image

Читать дальше →
Всего голосов 15: ↑14 и ↓1 +13
Комментарии 5

Эффективное использование libdispatch

Время на прочтение 8 мин
Количество просмотров 2.4K
(Прим.перев.: автор оригинального материала — пользователь github и twitter Thomas @tclementdev. Ниже в переводе сохранено повествование от первого лица, которое использует автор.)

Думаю, что большинство разработчиков использует libdispatch неэффективно из-за того как её представили сообществу, а также из-за запутанной документации и API. Я пришел к этой мысли после чтения обсуждения «concurrency» в рассылке посвященной развитию Swift (swift-evolution). Особенно просвещают сообщения от Пьера Хабузит (Pierre Habouzit — занимается поддержкой libdispatch в Apple):
Читать дальше →
Всего голосов 18: ↑16 и ↓2 +14
Комментарии 2

Как мы обошли Review Guidelines и запустили сервер на телефоне

Время на прочтение 4 мин
Количество просмотров 3.5K
Привет, Хабр. Меня зовут Антон Логинов, я iOS-разработчик в компании FINCH.

Недавно мы столкнулись с проблемой использования web-интерфейсов для азартных игр. В очередном обновлении AppStore Review Guidelines коллеги из Купертино опять ужесточили правила. Если конкретнее, то теперь Apple может зареджектить приложение, если какой-либо из web-интерфейсов будет классифицирован как азартная игра на реальные деньги.
Читать дальше →
Всего голосов 27: ↑19 и ↓8 +11
Комментарии 14

Изменения модальной презентации экранов в iOS 13

Время на прочтение 9 мин
Количество просмотров 18K

Всем привет!


Меня зовут Илья, я из Tinkoff.ru. Я перевел для вас статью от Geoff Hackworth про то, как изменился стиль модальной презентации в iOS 13, на что это повлияло и как работает обратная совместимость с предыдущими версиями iOS и Xcode.


image

Читать дальше →
Всего голосов 30: ↑29 и ↓1 +28
Комментарии 2

Вклад авторов

Работа

Swift разработчик
38 вакансий
iOS разработчик
23 вакансии