iOS Dev
Photo
Какой стиль кода вы используете?
Anonymous Poll
3%
Allman
3%
GNU
1%
Whitesmiths
90%
Kernighan & Ritchie
2%
Ratliff
0%
Horstmann
0%
Pico
2%
Lisp
iOS Dev
Какой стиль кода вы используете?
Зато теперь вы в курсе, что если вдруг кто-то не следует не по стайл-гайду в самом начале своего пути, то возможно он просто приверженец Lisp-стиля (или просто так чувствует).
📖 А вот здесь больше инфы про отступы в разных языках (и не только).
Please open Telegram to view this post
VIEW IN TELEGRAM
Работа в Swift с UIViewRepresentable (как избежать лишних warnings и зацикливания)
При работе со SwiftUI иногда (ладно, на самом деле куда чаще) необходима поддержка
Документация по этим протоколам все еще довольно скудна, и заставить всё это работать бывает непросто).
👩🎓 Chris Eidhof попытался сформулировать некоторые правила и шаблоны их использования.
📖 В этой статье есть полезные советы по коммуникации между SwiftUI и UIKit/AppKit (когда и при каких условиях необходимо выполнять обновление, и какие подводные камни могут ожидать).
😃 iOS Dev
При работе со SwiftUI иногда (ладно, на самом деле куда чаще) необходима поддержка
UIKit
, используя UIViewRepresentable
, NSViewRepresentable
или UIViewControllerRepresentable
. Документация по этим протоколам все еще довольно скудна, и заставить всё это работать бывает непросто).
📖 В этой статье есть полезные советы по коммуникации между SwiftUI и UIKit/AppKit (когда и при каких условиях необходимо выполнять обновление, и какие подводные камни могут ожидать).
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация перетаскивания ячеек с помощью lazy grids и stacks
Автор взял за основу этот вариант и добавил возможность кастомного превью.
📖 Целиком решение с кодом можно посмотреть вот в этом посте.
🧑💻 А в нашем канале можно прочитать о решении такой задачи в UIKit.
😃 iOS Dev
Автор взял за основу этот вариант и добавил возможность кастомного превью.
📖 Целиком решение с кодом можно посмотреть вот в этом посте.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Отслеживание изменений данных в SwiftData с помощью Persistent History Tracking
Мы можем использовать эту возможность для реагирования на изменения (в том числе, например, и в виджетах в той же
ℹ️ Уведомления о подписке и объединение транзакций будут автоматически обрабатываться SwiftData.
Но в некоторых случаях может пригодиться ручная обработка для большей гибкости.
📖 В этой статье на примерах объяснено, как наблюдать за нужными изменениями данных с помощью
➡️ Кстати, ранее я делился масштабным материалом по работе со SwiftData и некоторыми вопросами по использованию.
😃 iOS Dev
Мы можем использовать эту возможность для реагирования на изменения (в том числе, например, и в виджетах в той же
App Group
) и задач пакетной обработки. ℹ️ Уведомления о подписке и объединение транзакций будут автоматически обрабатываться SwiftData.
Но в некоторых случаях может пригодиться ручная обработка для большей гибкости.
📖 В этой статье на примерах объяснено, как наблюдать за нужными изменениями данных с помощью
Persistent History Tracking
в SwiftData
.Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Использование фреймворка AppIntents: создание первого шортката
В iOS 16 был добавлен фреймворк
Одно из преимуществ использования AppIntents — простота создания прототипов.
📖 В этой статье разработчик делится своим опытом и рассказывает, как создать app action для приложения Shortcuts.
😃 iOS Dev
В iOS 16 был добавлен фреймворк
AppIntents
, позволяющий нам интегрировать app actions в систему (например, в Shortcuts, Siri и Spotlight). Одно из преимуществ использования AppIntents — простота создания прототипов.
📖 В этой статье разработчик делится своим опытом и рассказывает, как создать app action для приложения Shortcuts.
Please open Telegram to view this post
VIEW IN TELEGRAM
Работа с UIGestureRecognizer: создание, обработка состояний и работа с несколькими одновременно
🗒 Обработка жестов в приложениях на iOS — важнейшая часть разработки.
Касания, повороты или вращения, безусловно, предоставляют важнейший опыт взаимодействия с нашими продуктами для пользователей.
Конечно, иногда нам достаточно только нажатий кнопок (без каких-то размышлений, что распознавать и без учета потенциальных конфликтов).
Но для всех сколь угодно сложных случаев (которых у нас обычно 99% при реализации) поможет
📖 В этом вводном материале можно познакомиться с наиболее частыми ситуациями, касающихся(как вам такая игра слов) обработки жестов пользователей.
😃 iOS Dev
Касания, повороты или вращения, безусловно, предоставляют важнейший опыт взаимодействия с нашими продуктами для пользователей.
Конечно, иногда нам достаточно только нажатий кнопок (без каких-то размышлений, что распознавать и без учета потенциальных конфликтов).
Но для всех сколь угодно сложных случаев (которых у нас обычно 99% при реализации) поможет
UIGestureRecognizer
.📖 В этом вводном материале можно познакомиться с наиболее частыми ситуациями, касающихся
Please open Telegram to view this post
VIEW IN TELEGRAM
Импорт макросов Swift без использования Swift Package Manager
➡️ Макросы Swift, которые появились в Swift 5.9 — отличный способ сократить количество бойлерплейт-кода.
В подавляющем большинстве случаев для поддержки макросов используется SPM, но существуют и другие сценарии.
Например, когда макросы требуются в либах CocoaPods или нужно обфусцировать сорсы приложения (хотя это бывает редко).
📖 Как раз для таких случаев существует опция импорта макросов в проект Xcode в виде бинарника.
😃 iOS Dev
В подавляющем большинстве случаев для поддержки макросов используется SPM, но существуют и другие сценарии.
Например, когда макросы требуются в либах CocoaPods или нужно обфусцировать сорсы приложения (хотя это бывает редко).
📖 Как раз для таких случаев существует опция импорта макросов в проект Xcode в виде бинарника.
Please open Telegram to view this post
VIEW IN TELEGRAM
Оператор guard в Swift, примеры кода и варианты использования
При написании кода мы постоянно задаем различные условия, необходимые для продолжения работы того или иного метода.
⭐️ Необходимыми условиями могут быть либо булево значение (и проверка его на
И конечно, для этого нам всегда поможет
📖 В этой статье разбираются такие ситуации и даётся ответ, когда без guard не обойтись.
Кстати, в обновлении телеги появились кастомные реакции у канала, и если вы хотите увидеть какие-то необычные, то вы знаете, как помочь .
😃 iOS Dev
При написании кода мы постоянно задаем различные условия, необходимые для продолжения работы того или иного метода.
true
), либо работа с опциональными значениями (они не должны быть nil
). И конечно, для этого нам всегда поможет
guard
, однако у нас в арсенале существует и if let
. 📖 В этой статье разбираются такие ситуации и даётся ответ, когда без guard не обойтись.
Please open Telegram to view this post
VIEW IN TELEGRAM
Шаринг токенов между iOS/macOS/watchOS с помощью iCloud Keychain
Конечно, для этого нужно включить саму опцию
📖 А вот тут можно узнать о дополнительных шагах в коде и необходимости дополнительных ключей
Кстати, в канале есть пост и о способах обмена данными между своими приложениями.
😃 iOS Dev
Конечно, для этого нужно включить саму опцию
Keychain Sharing
, при этом не забыв о важности одной и той же Keychain Group
.📖 А вот тут можно узнать о дополнительных шагах в коде и необходимости дополнительных ключей
kSecAttrAccessGroup
и kSecAttrSynchronizable
.Кстати, в канале есть пост и о способах обмена данными между своими приложениями.
Please open Telegram to view this post
VIEW IN TELEGRAM
Formatters в Swift: их больше, чем вы думаете!
Если у вас есть небольшой опыт работы с iOS, то вы наверняка использовали и
Но пул форматтеров намного шире. Например, при работе с файлами (особенно, когда требуется красиво показать размер) сложно обойтись без
📖 А в этом материале Винсент делится и другими видами, которые могут пригодиться в нашей работе.
😃 iOS Dev
Если у вас есть небольшой опыт работы с iOS, то вы наверняка использовали и
DateFormatter
, и NumberFormatter
.Но пул форматтеров намного шире. Например, при работе с файлами (особенно, когда требуется красиво показать размер) сложно обойтись без
ByteCountFormatter
📖 А в этом материале Винсент делится и другими видами, которые могут пригодиться в нашей работе.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Pow - библиотека для создания эффектов в iOS-приложениях теперь в открытом доступе
Moving Parts совместно с Emergetools (создателями и других крутых продуктов) приняли решение открыть исходный код библиотеки эффектов Pow.
🤩 К слову, уже 2 100 звёзд на GitHub.
🛠 Посмотреть на доступные эффекты и примеры использования в проектах можно здесь.
😃 iOS Dev
Moving Parts совместно с Emergetools (создателями и других крутых продуктов) приняли решение открыть исходный код библиотеки эффектов Pow.
🛠 Посмотреть на доступные эффекты и примеры использования в проектах можно здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
От viewWillAppear к viewIsAppearing: адаптация пользовательского интерфейса
На WWDC23 Apple представила важное дополнение к жизненному циклу UIViewController:
По факту это революционное решение помогает создавать более отзывчивые и динамичные интерфейсы.
📖 На этих несложных примерах можно понять, почему этот момент стратегически важен, и как именно можно использовать его в приложениях.
😃 iOS Dev
На WWDC23 Apple представила важное дополнение к жизненному циклу UIViewController:
viewIsAppearing
. По факту это революционное решение помогает создавать более отзывчивые и динамичные интерфейсы.
📖 На этих несложных примерах можно понять, почему этот момент стратегически важен, и как именно можно использовать его в приложениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
Искусство работы с Corner Radius: пара трюков и хитростей
ℹ️ Работа со скруглениями едва ли не самая распространенная штука при работе над дизайном приложений.
Базовых скруглений легко добиться, но при работе с несколькими составляющими могут возникнуть трудности.
📖 В этой статье David Yang делится некоторыми несложными шагами при работе с таким дизайном.
😃 iOS Dev
Базовых скруглений легко добиться, но при работе с несколькими составляющими могут возникнуть трудности.
📖 В этой статье David Yang делится некоторыми несложными шагами при работе с таким дизайном.
Please open Telegram to view this post
VIEW IN TELEGRAM
Начиная с весны 2024 года, разработчики будут обязаны включать в приложения новые манифесты и подписи для SDK, которые могут влиять на конфиденциальность пользователей.
Подписи будут нужны, даже если SDK (пока список от Apple как на скриншоте выше) включены в качестве зависимостей.
Любая версия и SDK, которые переупаковывают вышеуказанные, также включены в требования.
Для каждого вида данных понадобится словарь
NSPrivacyCollectedDataType
с ключами:NSPrivacyCollectedDataType
, NSPrivacyCollectedDataTypeLinked
, NSPrivacyCollectedDataTypeTracking
и NSPrivacyCollectedDataTypePurposes
.Все значения должны соответствовать этому списку. Если будут указаны иные варианты, то Xcode не сможет корректно генерить отчёт о конфиденциальности.
Please open Telegram to view this post
VIEW IN TELEGRAM
AsyncPhoto и пример использования для отображения больших фотографий
ℹ️
Можно, например, создать кастомный плейсхолдер и управлять загруженной картинкой с помощью параметра
📖 В этом материале приводится пример использования AsyncImage в случаях, когда нужно уменьшить изображение (в том числе и для экономии памяти).
😃 iOS Dev
AsyncImage
нужен, как и следует из названия, для того, чтобы асинхронно грузить и отображать изображения.Можно, например, создать кастомный плейсхолдер и управлять загруженной картинкой с помощью параметра
content
.📖 В этом материале приводится пример использования AsyncImage в случаях, когда нужно уменьшить изображение (в том числе и для экономии памяти).
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Скрытая особенность typealias
⭐️ Скорее всего, при разработке вы периодически используете
Также как при работе со структурами или классами, мы можем объявлять дженерик-аргументы в
📖 В этой статье разбираются возможности
😃 iOS Dev
typealias
.Также как при работе со структурами или классами, мы можем объявлять дженерик-аргументы в
typealias
(и даже можем ограничить использование только числовых типов, например, с использованием Numeric
).📖 В этой статье разбираются возможности
typealias
на реальных примерах. Please open Telegram to view this post
VIEW IN TELEGRAM
Как и когда использовать Lazy Collections в Swift
➡️ Такие коллекции откладывает вычисления до тех пор, пока они действительно не понадобятся.
И хотя это может быть полезно (например, можно предотвратить выполнение ненужной работы, если элементы в итоге так и не будут запрошены), но у них есть и недостатки.
Условно, если у нас 5 элементов, вряд ли мы получим существенный выигрыш в производительности. Поэтому решение об использовании таких коллекций должно приниматься индивидуально в каждом случае.
📖 А о преимуществах и недостатках можно прочесть здесь.
😃 iOS Dev
И хотя это может быть полезно (например, можно предотвратить выполнение ненужной работы, если элементы в итоге так и не будут запрошены), но у них есть и недостатки.
Условно, если у нас 5 элементов, вряд ли мы получим существенный выигрыш в производительности. Поэтому решение об использовании таких коллекций должно приниматься индивидуально в каждом случае.
📖 А о преимуществах и недостатках можно прочесть здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM