Telegram Web Link
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-стиля (или просто так чувствует).

📖 А вот здесь больше инфы про отступы в разных языках (и не только).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Работа в Swift с UIViewRepresentable (как избежать лишних warnings и зацикливания)

При работе со SwiftUI иногда (ладно, на самом деле куда чаще) необходима поддержка UIKit, используя UIViewRepresentable, NSViewRepresentable или UIViewControllerRepresentable.

Документация по этим протоколам все еще довольно скудна, и заставить всё это работать бывает непросто).

👩‍🎓 Chris Eidhof попытался сформулировать некоторые правила и шаблоны их использования.

📖 В этой статье есть полезные советы по коммуникации между SwiftUI и UIKit/AppKit (когда и при каких условиях необходимо выполнять обновление, и какие подводные камни могут ожидать).

😃 iOS Dev
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

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

ℹ️ Уведомления о подписке и объединение транзакций будут автоматически обрабатываться SwiftData.

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

📖 В этой статье на примерах объяснено, как наблюдать за нужными изменениями данных с помощью Persistent History Tracking в SwiftData.

➡️ Кстати, ранее я делился масштабным материалом по работе со SwiftData и некоторыми вопросами по использованию.

😃 iOS Dev
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 actions в систему (например, в Shortcuts, Siri и Spotlight).

Одно из преимуществ использования AppIntents — простота создания прототипов.

📖 В этой статье разработчик делится своим опытом и рассказывает, как создать app action для приложения Shortcuts.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Работа с UIGestureRecognizer: создание, обработка состояний и работа с несколькими одновременно

🗒 Обработка жестов в приложениях на iOS — важнейшая часть разработки.

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

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

Но для всех сколь угодно сложных случаев (которых у нас обычно 99% при реализации) поможет UIGestureRecognizer.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Импорт макросов Swift без использования Swift Package Manager

➡️ Макросы Swift, которые появились в Swift 5.9 — отличный способ сократить количество бойлерплейт-кода.

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

Например, когда макросы требуются в либах CocoaPods или нужно обфусцировать сорсы приложения (хотя это бывает редко).

📖 Как раз для таких случаев существует опция импорта макросов в проект Xcode в виде бинарника.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Оператор guard в Swift, примеры кода и варианты использования

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

⭐️ Необходимыми условиями могут быть либо булево значение (и проверка его на true), либо работа с опциональными значениями (они не должны быть nil).

И конечно, для этого нам всегда поможет guard, однако у нас в арсенале существует и if let.

📖 В этой статье разбираются такие ситуации и даётся ответ, когда без guard не обойтись.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Шаринг токенов между iOS/macOS/watchOS с помощью iCloud Keychain

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

📖 А вот тут можно узнать о дополнительных шагах в коде и необходимости дополнительных ключей kSecAttrAccessGroup и kSecAttrSynchronizable.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Formatters в Swift: их больше, чем вы думаете!

Если у вас есть небольшой опыт работы с iOS, то вы наверняка использовали и DateFormatter, и NumberFormatter.

Но пул форматтеров намного шире. Например, при работе с файлами (особенно, когда требуется красиво показать размер) сложно обойтись без ByteCountFormatter

📖 А в этом материале Винсент делится и другими видами, которые могут пригодиться в нашей работе.

😃 iOS Dev
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
Please open Telegram to view this post
VIEW IN TELEGRAM
От viewWillAppear к viewIsAppearing: адаптация пользовательского интерфейса

На WWDC23 Apple представила важное дополнение к жизненному циклу UIViewController: viewIsAppearing.

По факту это революционное решение помогает создавать более отзывчивые и динамичные интерфейсы.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Искусство работы с Corner Radius: пара трюков и хитростей

ℹ️ Работа со скруглениями едва ли не самая распространенная штука при работе над дизайном приложений.

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

📖 В этой статье David Yang делится некоторыми несложными шагами при работе с таким дизайном.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
❗️Новые требования Apple к сторонним SDK и Privacy Manifests

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

Подписи будут нужны, даже если SDK (пока список от Apple как на скриншоте выше) включены в качестве зависимостей.

Любая версия и SDK, которые переупаковывают вышеуказанные, также включены в требования.

Для каждого вида данных понадобится словарь NSPrivacyCollectedDataType с ключами:

NSPrivacyCollectedDataType, NSPrivacyCollectedDataTypeLinked, NSPrivacyCollectedDataTypeTracking и NSPrivacyCollectedDataTypePurposes.

Все значения должны соответствовать этому списку. Если будут указаны иные варианты, то Xcode не сможет корректно генерить отчёт о конфиденциальности.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
AsyncPhoto и пример использования для отображения больших фотографий

ℹ️ AsyncImage нужен, как и следует из названия, для того, чтобы асинхронно грузить и отображать изображения.

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

📖 В этом материале приводится пример использования AsyncImage в случаях, когда нужно уменьшить изображение (в том числе и для экономии памяти).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
❄️ Невероятно красивый зимний эффект в iOS-приложении

📖 Marcus Eckert пишет, что для реализации использовал кастомизацию всего по чуть-чуть, но основная логика написана с использованием cpp+metal.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Скрытая особенность typealias

⭐️ Скорее всего, при разработке вы периодически используете typealias.

Также как при работе со структурами или классами, мы можем объявлять дженерик-аргументы в typealias (и даже можем ограничить использование только числовых типов, например, с использованием Numeric).

📖 В этой статье разбираются возможности typealias на реальных примерах.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как и когда использовать Lazy Collections в Swift

➡️ Такие коллекции откладывает вычисления до тех пор, пока они действительно не понадобятся.

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

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

📖 А о преимуществах и недостатках можно прочесть здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
2024/11/19 20:41:59
Back to Top
HTML Embed Code: