Сёрф iOS-разработка
1.34K subscribers
384 photos
25 videos
95 links
Download Telegram
Как вам формат лонгридов? Делать ещё подобные посты?
Anonymous Poll
91%
Нравится, давайте ещё 👍
9%
Не удобно, давайте по-другому 👎
1
Делимся с вами крутым Live Coding от нашего разработчика!

В нём Владислав обозревает новинки с WWDC 2022 и показывает, как Surf внедряют новые фишки. Раскладываем всё не по полочкам, а по строчкам 💪

Смотри видео на нашем YouTube-канале.
🔥7
Отобрали для вас инсайты из ежегодного исследования DevCrowd 📊

Что нужно знать о нём:

• Проводил Егор Толстой из JetBrains вместе с партнёрами.
• Опросили 900 iOS разработчиков.
• Информация полезная и «недушная».

Смотрите наши карточки, а за полным ресёрчем переходите по ссылке в заголовке.
👍3🔥3
Как создать виртуальную карту лояльности для добавления в Wallet

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

Меня зовут Александр Чаусов, я iOS TechLead. Давайте разберёмся, как создавать карту для Wallet.

1️⃣ Создаём файл .pkpass
Перед стартом рекомендуем открыть документацию.

• В консоли разработчика заводим identifier для pass: подробнее — в документации в секции Creating Pass Packages ➡️ Setting the Pass Type Identifier and Team ID.

Создаём под него сертификат. Signing request к бюро сертификации по традиции делаем через keychain на своей машине, а потом делаем то, что написано в Creating Pass Packages ➡️ Signing and Compressing the Pass.

Скачиваем сертификат, сохраняем его в keychain, запоминаем созданный identifier.

Скачиваем example-материалы, выбираем понравившийся, открываем pass.json. Его нужно изменить: достаточно заменить passTypeIdentifier и teamIdentifier.

В тех же материалах находим тулзу signpass. Из проекта signpass.xcodeproj, который скачали в файлах ранее, собираем executable-файл. Подробности — в секции Signing and Compressing the Pass.

• Запускаем из консоли ./signpass -p Lollipop.pass, где Lollipop.pass — название директории с вашими файлами для pass.

• На выходе должен получиться файл с расширением .pkpass.

⚠️ Для всех этих манипуляций нужен оплаченный аккаунт разработчика Apple.

Первый этап завершён: можно открыть этот файл и полюбоваться на него. А можно даже переслать по почте на девайс и полюбоваться там.

В следующих постах расскажем, как настроить контент и связать карту с приложением. До связи 😉
🔥9👍1
Как создать виртуальную карту лояльности для добавления в Wallet. Часть 2: настройка контента

С вами Александр Чаусов, iOS TechLead. Продолжаем разбираться, как создать карту для Wallet.

В предыдущем посте обсудили, как создать файл .pkpass. Дальше всё будет крутиться вокруг него.

Директория .pass содержит файл pass.json: его нужно отредактировать, чтобы получить нужный контент на карте.

Важные ссылки:

🔹 Документация
🔹 Описание всех полей, которые могут быть использованы в pass.json

Обязательные поля
Которые должны быть определены в json-файле

Краткое описание карты: отображается при добавлении и на задней стороне карты.
Версия формата файла. Значение должно быть 1.
Название организации, которая выдаёт карту.
Identifier, который создавали на первом шаге.
Серийный номер карты.
TeamID команды-разработчика — с первого шага.

⚠️ Уникальность карты обеспечивается связкой полей
passTypeIdentifier
и
serialNumber
. Две карты с одинаковыми значениями считаются одинаковыми: если установить в кошелёк карту, у которой значения этих полей совпадают со значениями существующей, кошелёк заменит старую карту на новую.
🔥7
Элементы, из которых состоит pass 👆

На что обратить внимание в документации
Подложите в папку <Название>.pass рядом с json-файлом:
‣ icon.png/[email protected] — иконка размером 29*29, отображается при добавлении карты в wallet и на lock-экране.
‣ logo.png/[email protected] — из документации «The allotted space is 160 x 50 points; in most cases it should be narrower», отображается в верхнем левом углу.
‣ strip.png/[email protected] — картинка-задник, которая отображается за primary-field. В sample-карте от Apple она размером 312*123.
Обратите внимание на секцию документации про barcode: там указаны ограничения, допустимые поля, форматы отображения кода.
Возможна локализация карты на несколько языков.
Цвета кастомизируются.
Очень интересная секция в документации «Relevance Information Displays Passes on the Lock Screen»: возможность показать карту на lock-экране, когда пользователь подошел к определённой локации или наступило определённое время.

⚠️ Суперважный элемент — поле
storeCard.backFields
. На задней стороне обязательно должна быть инфа о том, кто выпустил карту лояльности и как до него достучаться. Это требование Apple: будут проверять на ревью (пункт 1.5).

Итого
1️⃣ Редактируем файл pass.json, подглядывая в документацию и описание полей.
2️⃣ На выходе получаем json, по которому генерируем карту с дизайном, похожим на дизайн из макета.
3️⃣ Перекидываем карту по почте на свой девайс и проверяем, как она выглядит вживую.

В следующем посте расскажу, как связать карту с приложением.
👏7
Первый эфир в канале: как РМ стал iOS-разработчиком в Surf 🤯

В четверг поговорим с Антоном, участником Летней Школы, о начале пути в iOS. Он поделится опытом с курсами, бэкграундом и pet-проектами.

Ещё Антон покажет структуру и преимущества стажировки в Surf — подробно, прозрачно, с примерами.

Формат эфира будет полезен как новичкам, так и тем, кто уже делает шаги в iOS-разработке. Со всем поможем — приходи 😌

Когда и куда?

🗓 24 ноября
17:00
📍 Telegram-канал Surf iOS Team
👍14
Начинаем эфир! Вопросы оставляйте в комментах под этим постом и в чате 😌
👍1
Live stream finished (1 hour)
Media is too big
VIEW IN TELEGRAM
Делимся записью эфира для тех, кто не смог прийти ☺️

И прикрепляем полезные материалы от Антона. Презентация отдельным файлом в комментариях.

Если остались вопросы, задавайте в чате, ответим.

У нас к вам всего два вопроса👇
👍5
Понравились формат и тематика эфира?
Anonymous Poll
85%
Да
15%
Нет
👍1
Удобно ли было встречаться в такое время?
Anonymous Poll
68%
Да
32%
Нет
👍1
Приходи на iOS-тусовку с участием Surf 🤩

Мы с друзьями из Кошелька и Тинькофф приглашаем тебя на iOS-митап! Обсудим интересные кейсы в разработке, поделимся опытом и просто приятно проведём время.

В программе три выступления:

1️⃣ Зачем писать private
Богдан Маншилин, Engineering Manager в Кошельке
История одного проперти в классе фреймворка навигации, который должен был быть приватным, но вместо этого испортил всю задумку core-фреймворка.

2️⃣ Дружим Swift Concurrency с имеющейся кодовой базой
Тимур Хамидов, Старший разработчик, Отдел разработки мобильных платформ Тинькофф
Как подружить continuation с задачами и как тестировать асинхронный код без ожиданий — на примере проблем, с которыми столкнулась команда при применении Swift Concurrency.

3️⃣ SwiftUI — внедрение в аутсорс разработку
Владислав Климов, iOS Developer в Surf
Попытки внедрения и подходы, которые в Surf используют для навигации. Это история об исследовании с результатами, но открытым концом и интересными техническими решениями.

Когда и куда приходить

🗓 8 декабря
19:00
📍 Онлайн: регистрация
🏢 Офлайн: Санкт-Петербург, адрес по ссылке
3👍1
Async/await в Swift

Async/await появился в Swift больше года назад. Но многие разработчики всё ещё не понимают, в чём его преимущества перед GCD и Operation и может ли он заменить реактивный фреймворк типа Combine. Давайте разберёмся в этом вопросе.

Async/await был создан, чтобы заменить GCD и Operation. Вместе их лучше не использовать: они основаны на разных механизмах.

Механизм работы
В Async/await используется собственный пул потоков. Количество используемых потоков не превышает количество ядер процессора. 

Это стало возможным благодаря тому, что Async/await не блокирует потоки: поток может не простаивать в ожидании, а переключится на другую задачу. 

Например: отправляем запрос на сервер. Во время ожидания ответа от сервера поток может заниматься чем-то другим.

Другие преимущества
Код становится проще: более последовательным, нет необходимости передавать множество колбэков. 
Обработка ошибок тоже становится проще: теперь можно использовать стандартный механизм try-catch, а не передавать ошибки в колбэках.

Может ли Async/await заменить Combine
К сожалению, нет. Вместе с Async/await появилась AsyncSequence, которая позволяет асинхронно работать с коллекциями. Но AsyncSequence не обладает всеми возможностями, которые есть в Combine. Тем не менее, Async/await и Combine вполне можно использовать вместе.

Async/await поддерживается с iOS 13.
4🔥3👍1