Telegram Web Link
🎉 Swift 5.10 уже доступен!

В Swift 5.10 реализована полная изоляция данных.

Эта важная веха заняла годы активной разработки в течение многих релизов.

Модель параллелизма была представлена в Swift 5.5, включая async/await, actors и структурированный параллелизм.

В Swift 5.7 был представлен Sendable как фундаментальная концепция для потокобезопасных типов, значения которых могут совместно использоваться в произвольных параллельных контекстах без риска возникновения гонок данных.

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

Swift 5.10 будет выдавать предупреждения о гонках данных в некоторых случаях, когда код может быть признан безопасным с помощью дополнительного анализа компилятора.

📖 Больше изменений в официальном ченджлоге свифта здесь.

Узнать больше о Swift Concurrency и познакомиться с возможными кейсами вы можете здесь.

😃 iOS Dev🐱 Подпишись, чтобы узнать больше
Please open Telegram to view this post
VIEW IN TELEGRAM
iOS Dev
🎉 Swift 5.10 уже доступен! В Swift 5.10 реализована полная изоляция данных. Эта важная веха заняла годы активной разработки в течение многих релизов. Модель параллелизма была представлена в Swift 5.5, включая async/await, actors и структурированный параллелизм.…
Бонус к релизу Swift: протоколы теперь могут быть вложены в перечисления, классы, структуры и акторы

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

📖 Ссылка на принятый пропозал.

😃 iOS Dev🐱 Узнать о важном
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Повторение эффекта конфетти из iMessage

Я люблю анимации в iOS и иногда ищу (или реализую сам), как именно инженеры реализуют те или иные вещи.

Например, целый раздел в ноушне я посвятил подборке клёвых эффектов и их реализации.

iMessage имеет одну из самых красивых реализаций конфетти на iOS.

Но как это работает?

Краткий ответ: недокументированная функциональность и недокументированная функциональность.

📖 Хорошо, что есть энтузиасты, как, например, Брайс Паукен, которые тратят свои силы на объяснение и показывают, как можно реализовать такие вещи.

🔗А вот и пример кода для реализации этого эффекта.

Если вам нравятся такие темы, то напомню, что есть способ поддержки канала.

😃 iOS Dev🐱 Узнать о важном
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Поздравляю всех девушек с праздником!

Хотя красота и страшная сила, но она нужна для того, чтобы спасать мир.

В мире IT много талантливых женщин, и пусть большинство вспомнит Аду Лавлейс, я хотел бы рассказать пару фактов о Грейс Хоппер.

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

Команда с её участием выпустила первый компилятор, а ещё в некоторых источниках считается, что именно благодаря ей сейчас женщины могут работать в IT. Ах да, кстати она получила звание контр-адмирала.

Она была математиком, поэтому я решил посмотреть, какие есть формулы для рисования сердец (и решил одну из них реализовать).

И пусть приложения для iOS создавать проще, чем пилить компилятор, но и это важно.

🌷С праздником!

📖 А вот тут есть несложный гайд по анимации UIBezierPath.

😃 iOS Dev🐱 Больше эффектов!
Please open Telegram to view this post
VIEW IN TELEGRAM
Массивы в Swift: стартовые и продвинутые техники

Среди отзывов к базе знаний читатели просили рассмотреть не только хардкорные вещи, но и более базовые.

Я решил начать с одной из основных тем, и разобрать не только вводные техники по использованию массивов, но и некоторые особенности.

Кстати, это будет полезно не только новичкам, например, вы можете ещё узнать больше об ArraySlice и, например, рассмотреть использование метода elementsEqual(_:).

Уже сейчас можно почитать следующие темы:

1️⃣ Введение.
2️⃣ Проверка границ массива.
3️⃣ Методы удаления последнего элемента.
4️⃣ Разбор базовых техник.
5️⃣ ArraySlice и его особенности.
6️⃣ Различные способы сортировки.
7️⃣ 23 стратегии использования массивов.

➡️Получить доступ можно здесь.

😃 iOS Dev🐱 Подпишись, чтобы узнать больше
Please open Telegram to view this post
VIEW IN TELEGRAM
Бинарные деревья и очереди с приоритетом в Swift

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

За основу взята книга: «Алгоритмы и структуры данных» Марчелло Ла Рокка.

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

2️⃣ Во втором блоке демонстрируется swift-код для реализации очереди с приоритетом. API полагается на две внутренние функции (bubbleUp и pushDown), чтобы вернуть очередь в приоритетный порядок после выполнения операции.

🐱 Напомню, что в бусти есть специальный раздел 📓 Алгоритмическая секция, в котором я рассматриваю разные подходы к решению задач, в том числе и на реальных примерах.

😃 iOS Dev🐱 Подпишись, чтобы узнать больше
Please open Telegram to view this post
VIEW IN TELEGRAM
🥳 Приложения для iOS можно будет скачивать с сайтов напрямую

Apple анонсировали эту новость сегодня.

Благодаря функции Web Distribution, разработчики смогут распространять свои приложения для iOS среди пользователей ЕС непосредственно со своих веб-сайтов

Это будет реализовано с помощью специального доступа к API (подробнее на официальном сайте).

😃 iOS Dev🐱 Подпишись, чтобы узнать больше
Please open Telegram to view this post
VIEW IN TELEGRAM
Основы UIKit за 2 часа

На своём лайстриме Винсент дал вводный материал со следующими этапами разработки:

1️⃣ Структура проекта UIKit.

2️⃣ Создание экрана с использованием Storyboard.

3️⃣ Создание экрана с помощью кода (без использования Interface Builder).

4️⃣ Настройка запуска приложения.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Основы анимации в SwiftUI

Анимации и эффекты — это одна из тем, за которую все мы любим iOS. Возможности, и то, как они ощущаются при правильной реализации выгодно отличает систему Apple от других.

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

1️⃣ Демистификация анимации SwiftUI — исчерпывающее руководство
Про механизм анимации SwiftUI и приводится большое количество кода.

2️⃣ Секрет безупречной анимации: глубокое погружение в транзакции
О принципах, функциях, создании Transaction + примеры управления анимацией в SwiftUI.

3️⃣ Руководство по SwiftUI geometryGroup(): от теории к практике
Разбор концепции и использовании geometryGroup(), а также о том, как быть со старыми версиями.

📖 А тут можно узнать ещё больше не только об анимациях, но и многом другом.

😃 iOS Dev🐱 Разбор эффектов
Please open Telegram to view this post
VIEW IN TELEGRAM
По поводу вчерашних апдейтов в аппстор коннекте, что есть к этой минуте

Вчера все разработчики получили не самое однозначное обновление аппстора.

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

Эти изменения касаются не только аппстора, но и затрагивает другие диджитал-сервисы, например, jetbrains тоже писали.

Здесь и далее термин плагин для нас означает приложение.

Мне кажется, можно провести параллель. Вот из их примеров:

1️⃣ Если вы являетесь физическим лицом, действующим не в рамках своего бизнеса (не предприниматель), и предлагаете плагины бесплатно, вы можете быть квалифицированы как неторговец.

Проводим аналогию, бесплатно == нет прибыли, не торговец.

2️⃣ Если вы являетесь физическим лицом (разработчиком программного обеспечения), работающим в компании, но разрабатываете плагины в свободное время в качестве хобби, предлагаете их бесплатно и предоставляете пользователям средства для поддержки ваших разработок на добровольной основе (добровольный финансовый взнос), вы можете быть квалифицированы как неторговец.

Если фулл-тайм работаем, есть приложения, в которых чаевые (или другой вид саппорта), не торговец.

3️⃣ Если вы являетесь коммерческим юридическим лицом, независимо от того, являетесь ли вы частной или публичной компанией, вы будете напрямую квалифицированы как трейдер.

Тут без вариантов, ставим выбор trader.

4️⃣ Если вы являетесь физическим лицом, действующим в профессиональных целях (связанных с вашей торговлей, бизнесом, ремеслом или профессией), вы являетесь трейдером, и не имеет значения, предлагаете ли вы некоторые или все свои плагины бесплатно.

Если у нас только приложения (нет другого ремесла), мы получаем доход с них не в виде чаевых, то видимо, только трейдер.

Если вы создаете плагин в сотрудничестве с другими лицами, вы подаете декларацию как индивидуальный продавец, т. е. декларацию подает тот, кто загружает плагин.

К нам это не относится. Скорее к тем, кто работает в компании, а статус должен выбирать аккаунтхолдер.

Ещё из комментариев:
Вы по-прежнему можете продавать товары и услуги как частное лицо. Но с принятием нового закона ЕС клиенты будут проинформированы о том, что они, возможно, не ожидают такого же уровня защиты прав потребителей.

Вот этот пункт самый интересный. Возможно, в эпл будет баннер или плашка при покупке непосредственно в приложении. Если, например, текст в алерте, то ладно (может быть). Мы и так при выкладке приложения про встроенные покупки обязаны писать условия всегда и без вариантов.

Ещё есть инфа вот тут и вот тут.

Я бы ещё подождал информации от самих Apple и посмотрел на изменения внутри самого приложения AppStore (и алертов, связанных с покупками).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерны проектирования в iOS на основе банды четырёх

Я добавил 23 паттерна проектирования (тех самых), которые часто используются при разработке программного обеспечения.

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

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

Получить доступ можно здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как улучшить навыки чтения кода?

Чтение кода — одна из наших прямых обязанностей. Этот опыт может быть не всегда приятен (а для кого-то может и скучен, или даже сразу навешивается штамп, что код плохой из-за отсутствия навыка понимания, что внутри).

Особенно это применимо к чужому коду. Чаще всего нам хочется сосредоточиться на написании кода, а не на его чтении, хотя чтение - также важный (если не более важный навык).

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

1️⃣ Просто попробуйте его запустить (пожалуй, один из самых надёжных вариантов понять, что происходит внутри).

2️⃣ Постарайтесь найти высокоуровневую логику. От общего к частному (но не наоборот).

3️⃣ Старайтесь чаще использовать возможности Xcode (в том числе и шорткаты).

4️⃣ Не останавливайтесь на каких-то базовых знаниях, следите за развитием самого языка.

5️⃣ Читайте больше о паттернах проектирования.

6️⃣ Не бойтесь код-ревью. Комментарии вашей команды помогут развиваться обеим сторонам.

7️⃣ Временный рефакторинг — один из способов. Мы можем начать с какого-то длинного метода, разбить его на несколько частей (если необходимо) и продолжить дальше. А гит нам поможет, если что-то пойдет не так.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Собеседования: вопросы на понимание кода

Я считаю затронутую тему одну из важнейших в разработке.

Поэтому я наполняю базу интересными и необычными вопросами, проверяющими навык чтения кода и поиск ошибок в нём.

Задачи на разный уровень. Есть как несложные, так и заставляющие задуматься и вспомнить особенности Swift.

Вопросы доступны здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Оптимизация памяти для приложения SwiftUI + Core Data

Несмотря на использование lazy containers в SwiftUI и механизмы оптимизации памяти Core Data, по мере увеличения сложности и количества вьюх (например, микса текста и картинок) потребление памяти будет увеличиваться.

С свою очередь, это может привести к крашу.

В материале ниже показано, как можно оптимизировать память для приложения, в изначальном кейсе использующего 1,6 ГБ памяти для отображения 100 элементов данных.

В процессе также можно узнать, как можно работать с сотнями таких элементов и оставаться в рамках всего 200 МБ.

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

🛠 Код проекта доступен здесь.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Практические решения проблем с помощью Swift Concurrency

Swift Concurrency может быть довольно непростым в использовании.

Matt Massicotte задокументировал и поделился своими решениями и сложностями, с которыми можно столкнуться при работе со Swift Concurrency:

1️⃣ Создание асинхронного контекста.

2️⃣ Использование протоколов.

3️⃣ Изоляция.

4️⃣ Структурированный параллелизм.

5️⃣ Использование библиотек, не предназначенных для параллелизма.

6️⃣ Совместимость.

🐱 Напомню, что тут есть несколько важных советов, которые помогут разобраться не только в основах, но и в подводных камнях тестирования.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как уменьшить размер приложения с помощью динамических фреймворков

Даже крупнейшие приложения iOS в App Store допускают ошибки и нарушают D.R.Y. путём копирования целых модулей.

Например, Hyundai дублируют каталог assets (который в итоге добавляется в приложение 3 раза).

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

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

📖 Джейкоб Бартлетт в гостевом посте для EmergeTools рассматривает, что можно сделать и как это повлияет на общее время запуска.

🛠 Код проекта можно посмотреть на github.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Работа со SwiftData: гайд по использованию

Хотя она и поддерживается только с iOS 17+, но осваивать и изучать её полезно.
Для новых проектов вы можете использовать SwiftData уже сейчас, в том числе основываясь на этой подборке.

А сегодня я хотел бы поделиться ещё одним набором советов по работе:

Настройка

🔗 Как создать Persistent Container SwiftData или получить к нему доступ

Моделирование

🔗 Как создать модель SwiftData в Swift
🔗 Как добавить структуры или перечисления в SwiftData
🔗 Как использовать Transient в SwiftData

Действия в SwiftData

🔗 Как получить все объекты SwiftData
🔗 Как получить конкретный объект из SwiftData
🔗 Как узнать, существует ли объект в SwiftData

Создание

🔗 Как добавить объект в SwiftData

Обновление

🔗 Как обновить объект в SwiftData

Удаление

🔗 Как удалить объект в SwiftData
🔗 Как удалить все объекты из SwiftData в Swift

Возможные ошибки и решение

🔗 Краш в SwiftData при попытке доступа к удаленному объекту
🔗 Как решить проблему No exact matches in call to instance method 'setValue'

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Большое обновление базы iOS IQ

➡️ Добавлен блок на умение читать и понимать код (и поиск ошибок).

Разобрал порождающие паттерны проектирования (с примерами на Swift):

Абстрактная фабрика, строитель, прототип, синглтон, фабричный метод.

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

➡️ Для чего нужен DispatchSemaphore и как с его помощью решить проблему доступа к ресурсу.
➡️ Какая разница между raw и associated в enum?

Поделился своим опытом решения алгоритмических задач:

➡️ Блок средних задач с CodeRun (над некоторыми бился несколько дней).

И несколькими другими важными моментами (кстати, теперь есть и обновляемый changelog внутри).

🐱 Вступить можно вот тут.

😃 iOS IQ
Please open Telegram to view this post
VIEW IN TELEGRAM
Рисование и анимация: контуры и фигуры в SwiftUI

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

📖 В этом уроке рассматривается процесс создания такого элемента путем комбинирования различных контуров и фигур.

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

Отлично подойдёт новичкам (и по времени всего 25 минут). Код доступен здесь.

😃 iOS IQДругие эффекты
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Генерация Swift-кода в (почти) реальном времени на базе нарисованного скетча

🎆 Дэниел Лейверс в демонстрации магистерской диссертации показал, на что способны современные технологии.

Можно набросать скетч помощью iPad-pencil и увидеть, как рядом с ним появляется реальный интерактивный интерфейс и Swift-код.

Приложение использует модель, заранее созданную на базе элементов UI, которая подается в алгоритм yolov5 и преобразуется в CoreML.

Это невероятно сложно и интересно.

📖 Саму диссертацию Дэниела можно прочитать здесь.

😃 iOS IQДругие эффекты
Please open Telegram to view this post
VIEW IN TELEGRAM
2024/10/01 14:25:44
Back to Top
HTML Embed Code: