Сёрф iOS-разработка
1.34K subscribers
384 photos
25 videos
95 links
Download Telegram
Как создать виртуальную карту лояльности для добавления в Wallet: полезные ссылки

🔹 Документация 
🔹 Описание полей в Json-файле 
🔹 Human Interface Guidelines для Wallet 
🔹 Видео, как создать .pkpass 
🔹 Обзорная статья What is PassKit
🔹 Статья про Apple Wallet на русском 
🔹 Статья Creating your Pass. Материал древний, но именно там мы наконец-то нашли поле altText у баркода.
🔥42👍2
Списки и галереи — быстро и удобно. Знакомство с библиотекой RDDM

UITableView
и UICollectionView — проверенные контейнеры для вёрстки списков и галерей. Но чтобы их добавить и настроить, необходимо написать много сопровождающего кода.

Например, для таблицы нужно:
🔹определить UITableViewDataSource,
🔹определить UITableViewDelegate,
🔹описать ячейку UITableViewCell,
🔹не забыть зарегистрировать тип ячейки,
🔹вызвать reloadData.

Чем больше ячеек, тем больше получается кода, размазанного по разным сущностям.

Когда-то давно мы в Surf 🏄‍♂️ устали от этого и создали RDDM — библиотеку, позволяющую удобно и быстро наполнять UITableView или UICollectionView, а также добавлять фичи с помощью плагинов.


Чтобы узнать больше, переходите в репозиторий проекта: там есть ExampleApp с примерами использования библиотеки и её фич.

Или прочитайте нашу статью об опыте добавления DiffableDataSource в RDDM.

💬 А каким инструментом для верстки списков и галерей пользуетесь вы? Пишите в комментариях 🙌
👍8🔥2🤩1
Карта для Wallet. Рекомендации по дизайну и аналитике 
Бывают ситуации, когда смежные отделы в компании, участвующие в проектировании приложения для iOS, понимают не все тонкости платформы. Одна из задач iOS-разработчика — предоставить все необходимые данные для проектирования и дизайна. 

Мы уже обсудили, как технически сделать карту лояльности для добавления в Wallet. Чтобы интеграция была качественно проработана с точки зрения дизайна и аналитики, подготовили эти рекомендации 👇👇👇

Для дизайнеров
🔹 Дать дизайнерам Human Interface Guidelines для кнопки добавления карточки на устройство, чтобы они понимали, как она выглядит и каких размеров.

🔹 Предоставить дизайнерам гайдлайны для нужной карточки. Там содержится много полезной информации: структура пакета, локализация, размеры картинок, схема карточки.

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

🔹 Если есть коробочное решение для программы лояльности, попросить выяснить у заказчика, нужно ли с ним интегрироваться для выпуска и менеджмента карт лояльности в Apple Wallet.

🔹 Если карты будут генерироваться сервером, узнать, какие «плюшки» добавить. Например:
— Разные strip-картинки на основе данных пользователя: на карте зоомагазина — кошка для владельцев кошек и собака для владельцев собак.
— Добавление локаций любимых магазинов, чтобы карта лояльности появлялась на lock-экране, когда пользователь оказывается рядом.
👍3🔥3👏2
Расширяемые ячейки

UITableView часто применяется для вёрстки списков. Однако не все знают, что этот элемент не поддерживает автоматическое изменение размера ячейки.

Представим, что нам дали задание добавить в список на UITableView ячейку, высота которой будет:
🔹увеличиваться на 50 пунктов по нажатию,
🔹уменьшаться до исходного значения при повторном нажатии.

Добавим кнопку, привяжем её края к краям ячейки и вынесем constraint высоты для обработки изменений.

Менять высоту будем тривиальным кодом buttonHeightConstraint.constant += isSmall ? 50 : -50. Полный код ячейки — на картинке ExpandableTableCell-1.

Запускаем приложение: что получится, видно на первой картинке. Изменения к высоте заметны только после прокрутки списка, то есть при переиспользовании ячейки.

Как заставить UITableView реагировать на изменения constraint-высоты сразу же?

Нужно вызвать функцию UITableView.performBatchUpdates(nil) после изменения constraint. Это заставит UITableView пересчитать высоту ячеек и отобразить изменения анимировано.

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

Однако использование этого метода изнутри ячейки требует поиск инстанса UITableView, что возможно лишь через копирование или рекурсивный поиск. Пример рекурсивного поиска — на картинке ExpandableTableCell-2.

Чтобы не копировать код поиска UITableView, мы создали протокол ExpandableItem и спрятали необходимый вызов за абстрактным ивентом.

Просто добавьте ячейке реализацию этого протокола и вызовите onHeightChanged.invoke(with: nil) в момент изменения высоты. Остальное RDDM сделает за вас. Пример использования ExpandableItem — на картинке ExpandableTableCell-3.

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

Чтобы узнать больше про возможности RDDM, переходите в репозиторий проекта: там есть ExampleApp с примерами использования библиотеки и её фич, таких как ExpandableItem.
🔥10👍4
Давай познакомимся поближе. Мы хотим развивать канал и понимать, какой контент больше подойдёт аудитории. Пожалуйста, ответь на пару вопросов.

1. Какой у тебя грейд?
Anonymous Poll
49%
Trainee
27%
Junior
15%
Middle
9%
Senior
👍1
Ищем стажёра в нашу команду 🏄‍♂️

Стажировка в Surf — крутая возможность проявить скиллы в разработке и поработать на иностранных проектах. Мы за развитие и карьерный рост — трудоустроим лучших и будем прокачивать их грейд.

Что делают в Surf для стажёров:

• Платят стипендию;
• Строят гибкий график;
• Подключают опытного наставника;
• Обеспечивают современным железом.

Смотри требования к будущим iOS-стажёрам на карточках. Если твои скиллы подходят, то отправляй заявку на стажировку — вышлем тестовое задание, которое нужно выполнить до 12.02 включительно.

Собрали материалы, которые помогут при подготовке к стажировке:

Список полезной инфы для iOS-разработчиков.
Советы новичкам в iOS-разработке.
Как проходят стажировки в Surf.
🔥12🤩3🎉2👍1
Наш опенсорс: NodeKit — библиотека для работы с сетью

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

Мы в Surf решили сделать сетевой слой переиспользуемым и легко кастомизируемым. Для этого создали NodeKit — гибкую и полностью кастомизируемую open-source библиотеку для работы с сетью.

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

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

NodeKit используется в большинстве iOS-приложений в Surf: с помощью него мы можем быстро и качественно реализовывать сетевой слой.

Дефолтный сетевой слой, а также модели к нему можно реализовать с помощью SurfGen. Но об — этом в следующих постах.

🔗 NodeKit

🔗 SurfGen
👍8🔥7👏3
Не проводите код-ревью на голодный желудок!
Или немного о том, как устроен процесс код-ревью в Surf

Процесс код-ревью в Surf есть! А если без шуток, в разных командах он проходит немного по-разному и зависит от разных факторов. О них и поговорим.

1️⃣ Размер команды
В небольшой команде из двух-трёх человек каждый разработчик проводит ревью каждого пул-реквеста.

Это:
повышает качество проекта,
помогает прокачать технически менее опытных разработчиков,
даёт возможность познакомить участников команды с кодом друг друга,
приводит к затратам ресурсов: отнимает довольно много времени.

В команде от четырёх человек и больше такое не сработает: как раз из-за временных затрат. Поэтому количество участников ревью ограничено: их может выбрать лид или создатель пул-реквеста.

2️⃣ Жизненный этап проекта
Иногда в жизнь вмешиваются обстоятельства в виде жёстких дедлайнов. Иногда в жизнь вмешиваются обстоятельства в виде жёстких дедлайнов. В этой ситуации можно воспользоваться таким понятием, как «технический долг» 😉

Если фичу надо отдать срочно и возможности перенести дедлайн нет, нужно запомнить то, что сделано «плохо»: зафиксировать это в техническом долге, а после релиза вернуться и исправить.

3️⃣ На что обращаем внимание в процессе код-ревью
🔹 общепринятые проектные договоренности,
🔹 соблюдение архитектурных правил,
🔹 грамотное разделение ответственностей,
🔹 соблюдение принципов программирования,
🔹 соблюдение code-style.

Проверять ли код на «правильность выполнения»? Об этом много споров. Наши техлиды проверяют.

Да, это отнимает много времени, но позволяет отсечь большинство багов ещё до попадания сборки к QA: это экономит время и QA, и разработчиков. Ведь чем раньше исправлен баг, тем меньше «стоимость» его исправления.
👍5
Код-ревью в прямом эфире 👨‍💻
Наши iOS-разработчики разберут твой код 🧐

🗓 21 февраля, вторник
🕓 19:00 мск
📍 Telegram-канал Surf iOS Team

Код-ревью — это клёвая возможность прокачаться: получить критику от более опытных коллег, улучшить код и узнать неочевидные нюансы его создания.

Мы приглашаем тебя поучаствовать: в роли того, чей код будут разбирать, или в роли зрителя. Решать тебе.

🤓 Хочу, чтобы разобрали мой код
Тогда присылай отклик в эту форму: ждём от тебя ссылку на гитхаб.

Мы выберем несколько проектов и будем ревьюить их в прямом эфире.

😎 Хочу послушать, как критикуют других
Тогда приходи в наш канал 21 февраля в 19:00 и подключайся к эфиру.

До встречи!
👍10🔥3👏2