KMM глазами iOS-разработчика
В KMM есть свои нюансы, которые описаны в статье. Но нет блокеров, которые заставили задуматься об отказе от KMM. Зато вот какие профиты для бизнеса были получены:
👉 Экономия времени разработки (зависит от проекта).
Экономия будет больше, если в проектах много бизнес-логики находится на мобильном клиенте: офлайн-first решения
👉 Экономия времени переделок при изменении только бэкенда/логики без изменения UI — почти 50%
👉 Время погружения разработчиков iOS в KMM с 0 до реализации комплексных фичей — около 4 месяцев
👉 Bus factor — доработать KMM-логику могут не только iOS-разработчики, но и Android
#crossplatform
В KMM есть свои нюансы, которые описаны в статье. Но нет блокеров, которые заставили задуматься об отказе от KMM. Зато вот какие профиты для бизнеса были получены:
👉 Экономия времени разработки (зависит от проекта).
Экономия будет больше, если в проектах много бизнес-логики находится на мобильном клиенте: офлайн-first решения
👉 Экономия времени переделок при изменении только бэкенда/логики без изменения UI — почти 50%
👉 Время погружения разработчиков iOS в KMM с 0 до реализации комплексных фичей — около 4 месяцев
👉 Bus factor — доработать KMM-логику могут не только iOS-разработчики, но и Android
#crossplatform
🔥6👍2👎1
Running tasks in parallel
Учимся запускать задачи параллельно с помощью old-school техник и фреймворков, а также новой structured concurrency API.
Складываем числа от 0 до миллиарда с 8 worker'ами с помощью:
👉 concurrentPerform
👉 operation queues
👉 structured concurrency
👉 task groups
#swift
Учимся запускать задачи параллельно с помощью old-school техник и фреймворков, а также новой structured concurrency API.
Складываем числа от 0 до миллиарда с 8 worker'ами с помощью:
👉 concurrentPerform
👉 operation queues
👉 structured concurrency
👉 task groups
#swift
🔥7👎1🤩1
Что нового в Swift 5.7: Regex (4 мин)
Swift Regex очень удобен благодаря таким фичам, как билдеры или уже готовые парсеры. Способы использования:
👉 Regex-литералы. Нам больше не нужно использовать двойные escape-символы и беспокоиться о do-catch, как при работе с
👉 Run-time конструкции. Эта фича может очень пригодиться для полей поиска в редакторах или консольных утилит
👉 Regex-билдеры - структурированная форма написания регулярных выражений, доступная в Swift
На скринах примеры этих способов. В комментариях прикреплю демонстрацию преобразования Regex в Xcode
#swift
Swift Regex очень удобен благодаря таким фичам, как билдеры или уже готовые парсеры. Способы использования:
👉 Regex-литералы. Нам больше не нужно использовать двойные escape-символы и беспокоиться о do-catch, как при работе с
NSRegularExpression
👉 Run-time конструкции. Эта фича может очень пригодиться для полей поиска в редакторах или консольных утилит
👉 Regex-билдеры - структурированная форма написания регулярных выражений, доступная в Swift
На скринах примеры этих способов. В комментариях прикреплю демонстрацию преобразования Regex в Xcode
#swift
👍6👎1
20 уроков, которые я вынес из 20 лет работы программистом
И вот некоторые из них:
👉 Я до сих пор многого не знаю.Чем быстрее вы придете к этой мысли, тем скорее сумеете выбраться из синдрома самозванца и начнете находить радость в самообразовании и обучении других
👉 Лучший код – это отсутствие кода или хотя бы необходимости его поддерживать
👉 ПО – это не конечная цель, а способ ее достижения
👉 В конечном счете, любая система – отстой, смиритесь
👉 Нам нужно меньше искать 10x-программистов и больше избегать 0.1x-программистов
👉 Не путайте скромность с невежеством. Разговаривайте с окружающими, просите у них совета и обратной связи. Вы об этом не пожалеете
#softskills
И вот некоторые из них:
👉 Я до сих пор многого не знаю.Чем быстрее вы придете к этой мысли, тем скорее сумеете выбраться из синдрома самозванца и начнете находить радость в самообразовании и обучении других
👉 Лучший код – это отсутствие кода или хотя бы необходимости его поддерживать
👉 ПО – это не конечная цель, а способ ее достижения
👉 В конечном счете, любая система – отстой, смиритесь
👉 Нам нужно меньше искать 10x-программистов и больше избегать 0.1x-программистов
👉 Не путайте скромность с невежеством. Разговаривайте с окружающими, просите у них совета и обратной связи. Вы об этом не пожалеете
#softskills
👍15👎1
Подборка видео на выходные 😎
📺 After 13 months of building a Website, I switched to an App (7 мин)
📺 Better Swift Closures Explained – Swift Tips (2023) – iOS (6 мин)
📺 📱Заработок на мобильных приложениях iOS и Android! Как делать 30 000$ в месяц?💰 (66 мин)
📺 Как создать кликер в Xcode | SwiftUI (3 мин)
В комментариях делитесь видео по разработке, которые понравились вам и будут полезны другим
#подборкавидео
📺 After 13 months of building a Website, I switched to an App (7 мин)
📺 Better Swift Closures Explained – Swift Tips (2023) – iOS (6 мин)
📺 📱Заработок на мобильных приложениях iOS и Android! Как делать 30 000$ в месяц?💰 (66 мин)
📺 Как создать кликер в Xcode | SwiftUI (3 мин)
В комментариях делитесь видео по разработке, которые понравились вам и будут полезны другим
#подборкавидео
🔥3👍1👎1
Парсинг ответов на BLE-команды на языке Swift на примере GoPro
Общий алгоритм работы с BLE-ответом:
1️⃣ Получаем ответ от Bluetooth‑устройства
2️⃣ Если ответ простой, то получаем результат. Иначе проверяем, сколько в нем пакетов
3️⃣ Если один, сохраняем полезные данные
4️⃣ Иначе по маске определяем, сколько полезных байт должно прийти в ответ на данную команду, с какого байта они начинаются, и сохраняем их
5️⃣ Повторяем, пока не получим нужно количество байт
6️⃣ Затем приступаем к его парсингу
7️⃣ Нужно разделить общий ответ на отдельные ответы на каждую команду
8️⃣ На выходе получаем готовый словарь с id настройки (или статуса) в виде ключа и текущим состоянием этой настройки (или статуса) в виде значения
#bluetooth
Общий алгоритм работы с BLE-ответом:
1️⃣ Получаем ответ от Bluetooth‑устройства
2️⃣ Если ответ простой, то получаем результат. Иначе проверяем, сколько в нем пакетов
3️⃣ Если один, сохраняем полезные данные
4️⃣ Иначе по маске определяем, сколько полезных байт должно прийти в ответ на данную команду, с какого байта они начинаются, и сохраняем их
5️⃣ Повторяем, пока не получим нужно количество байт
6️⃣ Затем приступаем к его парсингу
7️⃣ Нужно разделить общий ответ на отдельные ответы на каждую команду
8️⃣ На выходе получаем готовый словарь с id настройки (или статуса) в виде ключа и текущим состоянием этой настройки (или статуса) в виде значения
#bluetooth
👍6😱2👎1
Эволюция архитектуры приложения Facebook для iOS
Facebook для iOS (FBiOS) — старейшая мобильная кодовая база в Meta. После многих лет изменений она не похожа на типичную кодовую базу iOS:
👉 Она полна C++, Objective-C(++) и Swift
👉 Имеет десятки динамически загружаемых библиотек (dylib) и так много классов, что их невозможно загрузить в Xcode сразу
👉 Apple SDK практически не используется в чистом виде — все было обернуто или заменено собственной абстракцией
👉 В приложении активно используется генерация кода с помощью Buck - кастомной системы сборки
👉 Без интенсивного кэширования собственной системой сборки пришлось бы провести целый рабочий день в ожидании сборки приложения
Подробнее об этапах эволюции - в статье.
#architecture
Facebook для iOS (FBiOS) — старейшая мобильная кодовая база в Meta. После многих лет изменений она не похожа на типичную кодовую базу iOS:
👉 Она полна C++, Objective-C(++) и Swift
👉 Имеет десятки динамически загружаемых библиотек (dylib) и так много классов, что их невозможно загрузить в Xcode сразу
👉 Apple SDK практически не используется в чистом виде — все было обернуто или заменено собственной абстракцией
👉 В приложении активно используется генерация кода с помощью Buck - кастомной системы сборки
👉 Без интенсивного кэширования собственной системой сборки пришлось бы провести целый рабочий день в ожидании сборки приложения
Подробнее об этапах эволюции - в статье.
#architecture
😱4👎2👍1
В iOS и iPadOS 16.4 появятся веб пуш-уведомления
Согласно новому сообщению в блоге WebKit, бета-версии iOS и iPadOS 16.4 от Apple позволят веб-приложениям Safari на домашнем экране отправлять push-уведомления.
Уведомления от веб-приложений работают точно так же, как уведомления от других приложений. Они отображаются на экране блокировки, в Центре уведомлений и на сопряженных Apple Watch.
#ios
Согласно новому сообщению в блоге WebKit, бета-версии iOS и iPadOS 16.4 от Apple позволят веб-приложениям Safari на домашнем экране отправлять push-уведомления.
Уведомления от веб-приложений работают точно так же, как уведомления от других приложений. Они отображаются на экране блокировки, в Центре уведомлений и на сопряженных Apple Watch.
#ios
👍9😢4
Swift Regex Tutorial: Getting Started
Недавно был пост Regex в Swift 5.7. А вот и туториал по данной теме на английском языке:
👉 Что такое регулярки в целом
👉 Как изменилась работа с ними в Swift 5.7
👉 Как захватывать части строк, которые вы ищете
👉 Как использовать
👉 Как загрузить плохо отформатированный текстовый файл в модель
👉 Как обрабатывать несостыковки в данных
#swift #tutorial
Недавно был пост Regex в Swift 5.7. А вот и туториал по данной теме на английском языке:
👉 Что такое регулярки в целом
👉 Как изменилась работа с ними в Swift 5.7
👉 Как захватывать части строк, которые вы ищете
👉 Как использовать
RegexBuilder
, чтобы собирать сложные регулярки, которые легко понимать👉 Как загрузить плохо отформатированный текстовый файл в модель
👉 Как обрабатывать несостыковки в данных
#swift #tutorial
👍5
Live coding интервью для iOS разработчиков (11 мин)
Разбор наиболее популярных задач, которые вы можете встретить на live coding этапе. Время, затраченное на решение таких задач, не должно превышать 30 минут, а их количество, обычно, ограничивается 1–2 задачами за одно интервью. В статье задачи на следующие темы:
👉 Thread-safe class
👉 DispatchGroup
👉 High-order functions
👉 Type erasure
👉 Any and Some
#interview
Разбор наиболее популярных задач, которые вы можете встретить на live coding этапе. Время, затраченное на решение таких задач, не должно превышать 30 минут, а их количество, обычно, ограничивается 1–2 задачами за одно интервью. В статье задачи на следующие темы:
👉 Thread-safe class
👉 DispatchGroup
👉 High-order functions
👉 Type erasure
👉 Any and Some
#interview
👍15👎1
Building a Neural Network from Scratch in SwiftUI
Пример, того как просто интегрировать CoreML в iOS приложение 🤖
Добавляем SwiftUI view (скрин 1), где будем размещать изображение и предсказание на его основе.
Затем добавляем CoreML модель через File > New > File > “Core ML Model” (скрин 2).
#coreML
Пример, того как просто интегрировать CoreML в iOS приложение 🤖
Добавляем SwiftUI view (скрин 1), где будем размещать изображение и предсказание на его основе.
Затем добавляем CoreML модель через File > New > File > “Core ML Model” (скрин 2).
#coreML
🤩3👍1👎1
NSPredicate: старый API с новыми сюрпризами
Выводы из статьи:
👉 В Swift результат
👉
👉 При извлечении из хранилища CoreData SQLite предикат выше не будет совпадать с объектами, у которых свойство, соответствующее
👉 Это можно обойти так:
👉 Урок: Проверяйте все и всегда
#swift
Выводы из статьи:
👉 В Swift результат
nil != nonNilValue
является истинным.👉
NSPredicate(format: "%K != %@", stringKey, nonNilValue)
, будет соответствовать объектам, у которых свойство, соответствующее stringKey
, равно nil
👉 При извлечении из хранилища CoreData SQLite предикат выше не будет совпадать с объектами, у которых свойство, соответствующее
stringKey
, равно nil
. Это происходит потому, что Core Data напрямую мапирует команду с SQL, а SQL определяет, что не существует значения, равного или неравного null
👉 Это можно обойти так:
NSPredicate(format: "%K != %@ OR %K == NIL", stringKey, nonNilValue, stringKey)
👉 Урок: Проверяйте все и всегда
#swift
👍7👎1
Подборка видео на выходные 🤩
📺 How to Manage SwiftUI Updates with Swift If Available (35 мин)
📺 Tech Interview Fest | Моковое собеседование IOS Junior |Solvery + Coffee&Code |Екатерина Батеева, VK (92 мин)
📺 Подписка в iOS: сборки, CI, bundle ID, сертификаты | Mad Brains Техно (44 мин)
📺 What’s New in iOS 16.4? The Features That Matter (5 мин)
#подборкавидео
📺 How to Manage SwiftUI Updates with Swift If Available (35 мин)
📺 Tech Interview Fest | Моковое собеседование IOS Junior |Solvery + Coffee&Code |Екатерина Батеева, VK (92 мин)
📺 Подписка в iOS: сборки, CI, bundle ID, сертификаты | Mad Brains Техно (44 мин)
📺 What’s New in iOS 16.4? The Features That Matter (5 мин)
#подборкавидео
👍2🤩2👎1
Adding a stretchable header to a SwiftUI ScrollView
Статья о том, как реализовать растягивающийся header в приложении.
Реализация в GitHub
#компоненты
Статья о том, как реализовать растягивающийся header в приложении.
Реализация в GitHub
#компоненты
👍9👎1
Топ вопросов на Junior собеседованиях
Вот примеры вопросов из статьи на позицию Junior iOS Dev:
👉 Что такое Value Type и Reference Type?
👉 Для любой ли структуры работает copy-on-write (COW)?
👉 Почему в каких-то моментах лучше использовать Value Type, а в каких-то Reference Type?
👉 Можно ли наследовать со структур?
Что такое утечка памяти и почему она образуется?
👉 Что такое Automatic Reference Counting (ARC)?
При каких условиях счетчик уменьшается?
👉 Если на объект есть только 1 слабая ссылка, создастся он или нет?
👉 Расскажите про жизненный цикл View controllers?
👉 В каком методе происходит подсчет Constraints?
#interview
Вот примеры вопросов из статьи на позицию Junior iOS Dev:
👉 Что такое Value Type и Reference Type?
👉 Для любой ли структуры работает copy-on-write (COW)?
👉 Почему в каких-то моментах лучше использовать Value Type, а в каких-то Reference Type?
👉 Можно ли наследовать со структур?
Что такое утечка памяти и почему она образуется?
👉 Что такое Automatic Reference Counting (ARC)?
При каких условиях счетчик уменьшается?
👉 Если на объект есть только 1 слабая ссылка, создастся он или нет?
👉 Расскажите про жизненный цикл View controllers?
👉 В каком методе происходит подсчет Constraints?
#interview
👍8👎1