Pull to refresh
9
0
Роман Войницкий @romeoq

IOS разработчик

Send message

Опровергаю пять архитектурных заблуждений

Level of difficultyMedium
Reading time13 min
Views23K

Привет! Я Алексей, iOS-разработчик в Тинькофф. Участвую в развитии архитектуры приложения, провожу собеседования и занимаюсь менторингом разработчиков.

За мой рабочий опыт у меня сложилось ощущение, что в среде мобильной разработки есть недопонимание ключевых принципов архитектуры. Хочется десакрализировать тему архитектуры, раскрыть некоторые принципы, по которым она строится, и разобрать популярные заблуждения, с которыми я столкнулся. Расскажу, почему бизнес-логика — это не все, кроме UI, с чего начинается архитектура и в чем разница между архитектурными шаблонами и архитектурой.

Читать далее
Total votes 40: ↑36 and ↓4+32
Comments27

Мобильная разработка за неделю #490 (22 — 28 мая)

Reading time4 min
Views2.5K
В новой подборке однонаправленные архитектуры и ошибки при публикации, не писание сетевого слоя и паттерны проектирования, лучшие практики, проектирование интерфейсов, состояние Fuchsia, лучшие пейволы и многое другое!

В нашем Telegram-канале Mobile Insights, еще больше материалов для мобильных разработчиков, а в IT Insights — об интересном коде и технологиях. Подключайтесь!

Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments0

Swift async/await. Чем он лучше GCD?

Reading time12 min
Views17K

Прошло уже больше года с момента выпуска async/await. Многие крупные и не очень проекты уже успели поднять минимальную версию до iOS 13, следовательно открылась возможность полноценно использовать новые языковые возможности по работе с асинхронным кодом. Но перед тем как начать полноценно рефакторить старый код и/или писать новый код используя относительно новую технологию в голове невольно всплывает вопрос: «А зачем? Чем это лучше того же GCD?». В этой вступительной статье из серии по async/await постараемся вместе ответить на этот вопрос.

Читать далее
Total votes 15: ↑14 and ↓1+13
Comments13

Swift async/await на примерах

Reading time13 min
Views10K

В предыдущей части мы разобрали преимущества работы с async/await по сравнению с GCD. В этой части мы более подробно рассмотрим ключевые слова async и await (и не только). Разберемся в том, как они работают, что означает "неблокирующее ожидание" и самое главное рассмотрим это все на примерах.

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments5

Combine: часть 2. Вершина айсберга

Level of difficultyMedium
Reading time15 min
Views5.5K

Привет, Хабр! На связи Сергей, iOS-разработчик в компании SimbirSoft.

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

Интеграция Combine в проект будет полезна для обеих сторон — бизнеса и команды разработки:

1. Процесс работы становится быстрее, а значит дешевле.

2. Фреймворк считается достаточно модным. Есть большое количество разработчиков, которым нравится использовать реактивный подход, и которые хотят поработать с новым инструментом — повышается интерес соискателей к вакансиям, в которых фигурирует эта технология.

3. Combine способствует легкой поддержке и удобном переходе на современные технологии в будущем (например, на SwiftUI).

Читать далее
Total votes 2: ↑2 and ↓0+2
Comments0

Ряд Фибоначчи и Мемоизация с примерами на Swift языке

Level of difficultyEasy
Reading time4 min
Views4.9K

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

Математически ряд Фибоначчи представляет собой последовательность чисел, которые следуют этому уравнению: F(n) = F(n-1) + F(n-2). Эта последовательность встречается в различных интересных контекстах, например, в природе, в раковинах, спиральных структурах и галактиках, а также в дизайне римских полов, и даже брокеры используют ряд Фибоначчи для прогнозирования акций.

Читать далее
Total votes 12: ↑8 and ↓4+4
Comments12

Как хранить данные в iOS: UserDefaults, Keychain и сэндвичи

Level of difficultyMedium
Reading time15 min
Views11K

Хранение данных — одна из самых ведущих тем в разработке. Очень важно уметь выбирать подходящий инструмент для разных ситуаций и знать, как хранить данные безопасно и максимально эффективно, не замедляя приложение. Старший iOS-разработчик red_mad_robot Аня Кочешкова рассказывает о механизмах хранения, способах работы с ними, а также плюсах и минусах каждого подхода.

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments3

Swift модуляризация вашего проекта

Reading time2 min
Views2.1K

Всем привет сегодня я покажу как можно завернуть проект в spm (модуляризация)

Модуляризация — Это процесс разбиения кодовой базы на небольшие специализированные, готовые к повторному использованию модули

У меня есть небольшой проект и я хочу чтобы он был завернут в spm.

Читать далее
Total votes 2: ↑2 and ↓0+2
Comments4

Async/await в iOS: что нам дает неблокирование потоков

Reading time7 min
Views3K

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

Рассказываем, что такое неблокирование потоков, как оно работает и какие преимущества даёт Async/await при работе с большим количеством задач.

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments2

Как подключить российский SSL-сертификат к iOS-приложению

Reading time5 min
Views10K

Одна из санкций, которая досталась России, — запрет на выдачу и продление SSL-сертификатов. Это приводит к тому, что у некоторых компаний сертификат может протухнуть и сайты перестанут открываться.

Основных решений два:

Использовать российский Яндекс.Браузер или Атом.

Поставить на компьютер сертификат или профиль от минцифры.

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

Например, 15 февраля 2023 года у Сбера истечёт действие сертификата и надо переходить на самоподписанный. Если этого не сделать, то эквайринг через Сбер может перестать работать. SberPay будет работать как и раньше.

В статье покажу, что делать разработчикам приложений, чтобы экраны c 3-D Secure открывались и эквайринг продолжал работу.

Читать далее
Total votes 20: ↑14 and ↓6+8
Comments21

Делаем плавный скролл в нагруженных таблицах

Reading time11 min
Views4.1K

Как часто вы обращали внимание на плавный скролл в мобильных приложениях?

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

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

Получается, реализация плавного скролла является одной из наших приоритетных задач, решить которую очень непросто. 

Читать далее
Total votes 12: ↑11 and ↓1+10
Comments5

«Оживляем» наше iOS-приложение с помощью Live Activity

Reading time10 min
Views3.7K

В то время как Android-устройства в целом ушли в направлении простых вырезов в экране под фронтальную камеру или даже подэкранных фронталок, Apple создала совершенно новый пользовательский опыт благодаря своему новому пространству для размещения камеры — «челке» (the notch). Сегодня мы с вами обсудим, как реализовать нечто подобное в iOS.

Виджеты, которые Apple представила в iOS 14, позволяют нам просматривать информацию прямо на наших главных экранах.

Но что, если мы пойдем еще дальше и представим контекстно-зависимую информацию, которая всплывает при необходимости и не задерживается на экране слишком долго? А что, если бы это было реализовано таким образом, чтобы все это гармонично работало с самым большим обновлением для фронтальной панели, которое наши iPhone видели с момента появления челки? Больше никаких «а что, если» — встречайте Dynamic Island.

Читать далее
Total votes 8: ↑7 and ↓1+6
Comments1

История скромного успеха моей первой за десять лет инди-игры

Reading time6 min
Views7.6K
В сентябре я впервые за последние десять с лишним лет опубликовал игру в жанре симулятора повседневности в и одновременно выживания среди зомби, она называется They Don't Sleep («Они не спят»). Это небольшая игра, на ее разработку ушло меньше года. Концепт сидел у меня в голове много лет: симулятор повседневной жизни, в котором ты играешь за родителя и должен заботиться о младенце, но есть одно «но» — всё это происходит посреди зомби-апокалипсиса, так что параллельно тебе приходится отбиваться от новых и новых толп зомби.

Если учесть, что маркетинг я завалил от и до, что разработкой занимался один и потратил на нее меньше года, я доволен тем, как игра себя показала – и в финансовом плане, и с точки зрения отклика игроков.
Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments8

Анимация переходов для содержимого в SwiftUI

Reading time3 min
Views1.3K

Анимации переходов между представлениями (view transition) были доступны с самой первой версии фреймворка SwiftUI. Фреймворк позволяет указать определенную анимацию перехода, которая будет применяться всякий раз, когда представление удаляется или добавляется в иерархию представлений. С недавних пор фреймворк SwiftUI предлагает нам еще один тип анимаций перехода — анимации переходов для содержимого (content transition). Суть та же, что и раньше. Фреймворк теперь позволяет нам указывать определенную анимацию перехода для содержимого представления, которая будет проигрываться всякий раз, когда оно изменяется. В этой статье разберемся, как использовать новый API для анимирования переходов содержимого в SwiftUI.

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments2

Bottom Sheet API в SwiftUI

Reading time4 min
Views2.7K

Два года назад я написал пост, посвященный созданию кастомного bottom sheet в SwiftUI. Сегодня же необходимости писать его вручную с нуля больше нет, по крайней мере, если вам не нужно какое-нибудь супер-уникальное поведение. SwiftUI теперь предоставляет новый API для отображения bottom sheet всего в несколько строк кода. В этом посте мы рассмотрим новый API, позволяющий нам отображать различные вариации bottom sheet.

Новый API SwiftUI для отображения bottom sheet достаточно прост в использовании. Все, что нам нужно сделать, это прикрепить модификатор представления presentationDetents к содержимому модификатора представления sheet.

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments1

Аналитика и нотификации для iOS

Reading time9 min
Views1.9K

В этой статье поделюсь тем, как настроить трекинг событий о получении и об открытии нотификаций на iOS устройствах. Рассматривается вариант, когда приложение уже интегрировано с Firebase Cloud Messaging для получения FCM токенов и отправки нотификаций через собственный сервер, а для трекинга событий подключен сервис Amplitude. Даже если в вашем приложении используется другой набор сервисов для работы с нотификациями и аналитикой, решения, описанные здесь, могут подойти.

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

Читать далее
Total votes 1: ↑1 and ↓0+1
Comments0

User-Defined в iOS проекте

Reading time3 min
Views2.2K

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

Читать далее
Total votes 5: ↑4 and ↓1+3
Comments2

Навигация в Swift UI: что изменилось с появлением iOS 16

Reading time7 min
Views7.4K

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

В iOS 16 появился совершенно новый API для работы с навигацией. Разбираемся, стало ли удобнее.

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments2

Новинка от Apple: RoomPlan API

Reading time7 min
Views4.9K

На WWDC 2022 Apple представила новый инструмент RoomPlan, реализованный на основе ARKit 6, который использует LiDAR датчик на новейших iPhone и iPad для быстрого создания 3D планов комнат. По словам Apple, API может быть полезен для приложений в сфере недвижимости, архитектуры и дизайна интерьеров, поскольку он, с одной стороны, точен и гибок в настройке и экспортировании результатов а, с другой стороны, достаточно прост в использовании. Так ли это, давайте разбираться.

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments7

Async/await в Swift 5.5: асинхронность «здорового человека»

Reading time6 min
Views9.8K

Не так давно WWDC21 представила новый интерфейс асинхронности async/await. Это одно из самых важных обновлений Swift  за последнее время. Меня, как iOS-разработчика, это событие не могло оставить равнодушной. Я решила вникнуть в нюансы работы async/await и сейчас хочу поделиться своим пониманием механизма, а также показать все его внешние и некоторые внутренние преимущества.  

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

Читать далее
Total votes 6: ↑4 and ↓2+2
Comments3

Information

Rating
Does not participate
Location
Бельцы, Молдова, Молдова
Date of birth
Registered
Activity