Настройка Shortcut Actions с параметрами для iOS-приложений с примером кода
📖 В этом материале автор рассказывает о создании нескольких шорткатов, которые позволят выполнять основные математические операции.
Кроме этого, приводится пример модификации шорткатов для показа потенциальных возможностей.
🛠 Если же вы предпочитаете исследовать код, то готовый проект доступен по этой ссылке.
@iOS Dev
📖 В этом материале автор рассказывает о создании нескольких шорткатов, которые позволят выполнять основные математические операции.
Кроме этого, приводится пример модификации шорткатов для показа потенциальных возможностей.
🛠 Если же вы предпочитаете исследовать код, то готовый проект доступен по этой ссылке.
@iOS Dev
Core Graphics: что это, как появился и как на это повлияли деньги?
Core Graphics, также известный под своим маркетинговым названием «Quartz», является одним из старейших связанных с графикой API на платформах.
Quartz является основой большинства 2D-вещей. Хотите рисовать фигуры, заполнять их градиентами и придавать им тени? Это Core Graphics. Показывать изображения на экране? Они проходят через Core Graphics. Создавать PDF? Эм, ну это всё ещё Core Graphics.
Почему графический API работает с пользовательскими событиями?
Как и все для всего остального, нужно вспомнить историю. А знание истории может объяснить, почему части Core Graphics ведут себя именно так.
⏳ Еще в 1980-х, графические API были довольно примитивными. Инструменты были ограничены палитрой и рисовать можно было только основные фигуры. Существовали функции «побитового копирования».
В QuickDraw на Mac была интересная функция, называемая регионами для обрезки, контура или хиттеста (что-то знакомо?✅️ )
В 1985 году Apple представила LaserWriter — принтер, мощнее компа, который имел в 12 раз больше оперативной памяти и стоил вдвое дороже. Этот принтер производил (для того времени) невероятно красивый результат благодаря технологии
Помимо рендеринга страниц,
Когда инженеры NeXT проектировали свою систему, они выбрали
Почему OS X и iOS не используют Display PostScript?
💵 Дело в деньгах! Adobe взимала лицензионный сбор за Display PostScript.
Кроме того, Apple хорошо известна тем, что хочет владеть как можно большей частью своего технологического стека.
Обычно говорят, что
Те же основные механизмы были сохранены, хотя Display PostScript был заменен на Quartz, включая обработку событий.
🧐 Apple разработала новую структуру, объединив модель PDF с поддержкой альфа-канала, и сегодня мы знаем ее как Quartz 2D. Apple внутри компании называет эту графическую библиотеку
📖 Источники при подготовке материала: Mihaela MJ, Mark Dalrymple, дока эпл и, конечно,
@iOS Dev —теперь вы знаете больше!
Core Graphics, также известный под своим маркетинговым названием «Quartz», является одним из старейших связанных с графикой API на платформах.
Quartz является основой большинства 2D-вещей. Хотите рисовать фигуры, заполнять их градиентами и придавать им тени? Это Core Graphics. Показывать изображения на экране? Они проходят через Core Graphics. Создавать PDF? Эм, ну это всё ещё Core Graphics.
CG
— это довольно большой API, охватывающий весь спектр базовых геометрических структур данных (таких как точки, размеры, векторы и прямоугольники) и вызовы для манипулирования ими, которые преобразуют пиксели в изображения или в экран, вплоть до обработки событий. Почему графический API работает с пользовательскими событиями?
Как и все для всего остального, нужно вспомнить историю. А знание истории может объяснить, почему части Core Graphics ведут себя именно так.
⏳ Еще в 1980-х, графические API были довольно примитивными. Инструменты были ограничены палитрой и рисовать можно было только основные фигуры. Существовали функции «побитового копирования».
В QuickDraw на Mac была интересная функция, называемая регионами для обрезки, контура или хиттеста (что-то знакомо?
В 1985 году Apple представила LaserWriter — принтер, мощнее компа, который имел в 12 раз больше оперативной памяти и стоил вдвое дороже. Этот принтер производил (для того времени) невероятно красивый результат благодаря технологии
PostScript
. Интерпретатор языка PostScript
был встроен в LaserWriter, поэтому, когда программа на Mac хотела что-то напечатать, программа (или драйвер принтера) генерировала программный код, который загружался в принтер и выполнялся. А вот тут даже есть пример.Помимо рендеринга страниц,
PostScript
является полным по Тьюрингу и вы даже можете написать веб-сервер с его помощью.Когда инженеры NeXT проектировали свою систему, они выбрали
PostScript
в качестве модели рендеринга. Отображение PostScript
было основой взаимодействия с пользователем. События проходили через систему DPS
, а затем отправлялись в приложения.Почему OS X и iOS не используют Display PostScript?
💵 Дело в деньгах! Adobe взимала лицензионный сбор за Display PostScript.
Кроме того, Apple хорошо известна тем, что хочет владеть как можно большей частью своего технологического стека.
Обычно говорят, что
Quartz
«основан» на PDF, и в некотором смысле это правда. PDF (Adobe's Portable Document Format) — это модель рисования PostScript. Quartz
был разработан так, чтобы использование API было на то, что поддерживается в PDF, что делало создание PDF-файлов на платформе почти тривиальным.Те же основные механизмы были сохранены, хотя Display PostScript был заменен на Quartz, включая обработку событий.
Core Graphics
, а общедоступное название — Quartz 2D.📖 Источники при подготовке материала: Mihaela MJ, Mark Dalrymple, дока эпл и, конечно,
@iOS Dev —
Please open Telegram to view this post
VIEW IN TELEGRAM
DispatchSource: обнаружение изменений в файлах и папках в Swift
Семейство типов
📖 В этой статье приводится хороший пример, как использовать
Кроме вышеперечисленного, автор рассказывает об особенностях при изменении файла в редакторе (спойлер, всё довольно предсказуемо).
⭐️ Дополнительно:
@iOS Dev
Семейство типов
DispatchSource
из GCD
содержит ряд объектов, способных отслеживать события, связанные с операционной системой. 📖 В этой статье приводится хороший пример, как использовать
DispatchSource
для мониторинга лог-файла и создания debug-only view
, которое покажет последние логи в приложении.Кроме вышеперечисленного, автор рассказывает об особенностях при изменении файла в редакторе (спойлер, всё довольно предсказуемо).
DispatchSource
в доке эпла.@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Ключевое слово Never в Swift: определение c примерами кода
Тип
Это тип без значений, который предотвращает написание бесполезного кода.
Хотя сам по себе тип
📖 В этом материале раскрывается понятие
@iOS Dev
Never
— согласно документации Apple, возвращаемый тип функций, которые не возвращаются нормально, или, если сформулировать иначе, тип без значений.Тип
Never
в Swift позволяет вам сообщить компилятору о точке выхода в вашем коде. Это тип без значений, который предотвращает написание бесполезного кода.
Хотя сам по себе тип
Never
может быть малоизвестен, возможно, вы уже использовали его в своей кодовой базе (некоторые методы Swift юзают его по дефолту).📖 В этом материале раскрывается понятие
Never
, приводятся примеры и объясняется, зачем его в целом можно использовать.@iOS Dev
iOS Dev
Если ваше приложение использует только HTTPS или же шифрование только для аутентификации, и при этом вы устали каждый раз при отправке нажимать в диалоге одинаковые кнопки, то вы можете использовать следующий способ: <key>ITSAppUsesNonExemptEncryption</key>…
ℹ️ Обновление в App store при выкладке приложения
Расширили количество опций для соответствия экспортным требованиям.
Теперь можно выбирать из четырёх вариантов при ответе на вопрос о содержании алгоритмов шифрования:
1️⃣ Алгоритмы шифрования, которые являются частными или не принимаются в качестве стандартных международными организациями по стандартизации (IEEE, IETF, ITU и т. д.).
2️⃣ Стандартные алгоритмы шифрования вместо использования шифрования в составе операционной системы Apple или доступа к таковому (либо в дополнение к нему).
3️⃣ Оба вышеперечисленных алгоритма.
4️⃣ Ни один из вышеперечисленных алгоритмов.
И теперь подсказка про
@iOS Dev
Расширили количество опций для соответствия экспортным требованиям.
Теперь можно выбирать из четырёх вариантов при ответе на вопрос о содержании алгоритмов шифрования:
1️⃣ Алгоритмы шифрования, которые являются частными или не принимаются в качестве стандартных международными организациями по стандартизации (IEEE, IETF, ITU и т. д.).
2️⃣ Стандартные алгоритмы шифрования вместо использования шифрования в составе операционной системы Apple или доступа к таковому (либо в дополнение к нему).
3️⃣ Оба вышеперечисленных алгоритма.
4️⃣ Ни один из вышеперечисленных алгоритмов.
И теперь подсказка про
.plist
форсится самим Apple явно (а пост выше был хаком аж полгода назад).@iOS Dev
Правило трёх
ℹ️ Правило трёх или «Три страйка * — и вы проводите рефакторинг» — это эмпирическое правило рефакторинга кода, позволяющее решить, когда следует рефакторить похожие фрагменты кода, чтобы избежать дублирования.
В нем говорится, что два экземпляра похожего кода не требуют рефакторинга, но когда аналогичный код используется три раза, его следует выделить в новую процедуру.
Это правило было популяризировано Мартином Фаулером в книге «Рефакторинг» и приписано Дону Робертсу.
Но попытка преждевременного рефакторинга может привести к выбору неправильной абстракции, что может привести к ухудшению кода по мере появления новых требований и, в конечном итоге, потребует повторного рефакторинга.
Правило подразумевает, что стоимость сопровождения определенно перевешивает стоимость рефакторинга и возможного плохого дизайна, когда есть три копии, и может не перевесить, если есть только две копии.
😂 Моя позиция совпадает с этим правилом. В частности, с тем, что крайне редко бывает чёрное и белое в целом в разработке, и не всегда стоит рефакторить только ради самого процесса.
* три страйка — термин из бейсбола, а не боулинга. Его суть в том, что если бьющий набирает три страйка — это называется страйк-аут (англ. strike-out) — бьющий выбывает из игры.
@iOS Dev
ℹ️ Правило трёх или «Три страйка * — и вы проводите рефакторинг» — это эмпирическое правило рефакторинга кода, позволяющее решить, когда следует рефакторить похожие фрагменты кода, чтобы избежать дублирования.
В нем говорится, что два экземпляра похожего кода не требуют рефакторинга, но когда аналогичный код используется три раза, его следует выделить в новую процедуру.
Это правило было популяризировано Мартином Фаулером в книге «Рефакторинг» и приписано Дону Робертсу.
Дублирование считается плохой практикой в программировании, поскольку оно усложняет поддержку кода.
Но попытка преждевременного рефакторинга может привести к выбору неправильной абстракции, что может привести к ухудшению кода по мере появления новых требований и, в конечном итоге, потребует повторного рефакторинга.
Правило подразумевает, что стоимость сопровождения определенно перевешивает стоимость рефакторинга и возможного плохого дизайна, когда есть три копии, и может не перевесить, если есть только две копии.
@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Apple объявила о самом большом обновлении цен в App Store с момента запуска
Разработчики также получат больше гибкости для глобального управления ценообразованием
1️⃣ Добавлено 700 новых ценовых пунктов.
2️⃣ Будут добавлены новые инструменты для упрощения установки цен в каждом регионе, а также управление обменным курсом.
3️⃣ Доступно 45 валют в 175 магазинах для подписок c сегодняшнего дня. А с 2023 обещают внедрить это и для встроенных покупок.
4️⃣ В рамках обновленной системы ценообразования в App Store все разработчики смогут выбирать из 900 ценовых пунктов, что почти в 10 раз превышает ранее доступное количество. 100 более высоких ценовых категорий, доступны по запросу. Например, в рублях максимальная цена теперь может быть целых
Чтобы предоставить разработчикам по всему миру еще большую гибкость, цены можно будет выставить с $ 0,29 и шагом в 10 центов вплоть до $10 000 долларов. Вспоминаем приложение I am rich?
Начиная с сегодняшнего дня, разработчики приложений c подпиской смогут выбирать любой стор в качестве основы для автоматического формирования цен в других 174 магазинах и 44 валютах. По-прежнему будет доступна возможность устанавливать и произвольную цену для каждой страны.
📄 Документ со всеми возможными ценами доступен здесь.
🔗 Первоисточник.
@iOS Dev
Разработчики также получат больше гибкости для глобального управления ценообразованием
1️⃣ Добавлено 700 новых ценовых пунктов.
2️⃣ Будут добавлены новые инструменты для упрощения установки цен в каждом регионе, а также управление обменным курсом.
3️⃣ Доступно 45 валют в 175 магазинах для подписок c сегодняшнего дня. А с 2023 обещают внедрить это и для встроенных покупок.
4️⃣ В рамках обновленной системы ценообразования в App Store все разработчики смогут выбирать из 900 ценовых пунктов, что почти в 10 раз превышает ранее доступное количество. 100 более высоких ценовых категорий, доступны по запросу. Например, в рублях максимальная цена теперь может быть целых
900 000
.Чтобы предоставить разработчикам по всему миру еще большую гибкость, цены можно будет выставить с $ 0,29 и шагом в 10 центов вплоть до $10 000 долларов. Вспоминаем приложение I am rich?
Начиная с сегодняшнего дня, разработчики приложений c подпиской смогут выбирать любой стор в качестве основы для автоматического формирования цен в других 174 магазинах и 44 валютах. По-прежнему будет доступна возможность устанавливать и произвольную цену для каждой страны.
📄 Документ со всеми возможными ценами доступен здесь.
🔗 Первоисточник.
@iOS Dev
Пример создания простого виджета с помощью WidgetKit
WidgetKit впервые был представлен в
С тех пор он постепенно превратился в платформу, которая поддерживает некоторые из наиболее ожидаемых функций в iOS 16, а именно виджет блокировки экрана, Live Activities и Dynamic Island.
📖 Эта статья будет полезна новичкам и тем, кто впервые делает виджет для Home Screen.
📖 А вот тут можно прочесть и о другом примере.
@iOS Dev
WidgetKit впервые был представлен в
iOS 14
как простая платформа, с помощью которой разработчики могут создавать виджеты для главного экрана. С тех пор он постепенно превратился в платформу, которая поддерживает некоторые из наиболее ожидаемых функций в iOS 16, а именно виджет блокировки экрана, Live Activities и Dynamic Island.
📖 Эта статья будет полезна новичкам и тем, кто впервые делает виджет для Home Screen.
📖 А вот тут можно прочесть и о другом примере.
@iOS Dev
Как заставить сетевой запрос ожидать подключения к Интернету с помощью waitsForConnectivity
Если вы используете
Однако если вы создадите её с параметром конфигурации
По умолчанию система будет ждать семь дней, чтобы узнать, станет ли доступно подключение к Интернету, но это можно контролировать с помощью свойства
ℹ️ Например, вы можете установить интервал с помощью:
@iOS Dev
Если вы используете
URLSession
, когда у пользователя нет подключения к Интернету, ваш запрос немедленно завершится ошибкой. Однако если вы создадите её с параметром конфигурации
waitsForConnectivity
, для которого задано значение
true, система автоматически подождет некоторое время, чтобы проверить, станет ли подключение доступным, прежде чем пытаться выполнить запрос.По умолчанию система будет ждать семь дней, чтобы узнать, станет ли доступно подключение к Интернету, но это можно контролировать с помощью свойства
timeoutIntervalForResource
в вашем конфиге. ℹ️ Например, вы можете установить интервал с помощью:
config.timeoutIntervalForResource = 60
@iOS Dev
Как создать идеальный пайплайн (конвейер) на базе Fastlane для iOS
Представьте, вы потратили месяцы на создание приложения, и когда, наконец, пришло время распространять его в App Store, вы понимаете, что это будет непростая задача.
Даже для обычных обнов вы должны выполнять каждый шаг в правильном порядке и в соответствии со строгими спецификациями Apple — вплоть до загрузки сборки и генерации и установки различных метаданных и скриншотов.
Что, если бы вы могли запустить одну команду, чтобы позаботиться обо всех этих требованиях к отправке?
📖 В этом руководстве вы увидите пример работы с fastlane: тут описан процесс подписи, тестирования и развертывания простого приложения со списком дел.
В конце этого руководства у вас должно быть все необходимое для создания идеального пайплайна уже для вашего следующего приложения для iOS.
P.S. Конечно, я понимаю, что многие тут уже слышали и использовали fastlane и для своих, и для приложений компании, но остальным эта информация может помочь.
☁️ И кстати, возможно пора уже наконец, использовать Xcode cloud?
@iOS Dev
Представьте, вы потратили месяцы на создание приложения, и когда, наконец, пришло время распространять его в App Store, вы понимаете, что это будет непростая задача.
Даже для обычных обнов вы должны выполнять каждый шаг в правильном порядке и в соответствии со строгими спецификациями Apple — вплоть до загрузки сборки и генерации и установки различных метаданных и скриншотов.
Что, если бы вы могли запустить одну команду, чтобы позаботиться обо всех этих требованиях к отправке?
📖 В этом руководстве вы увидите пример работы с fastlane: тут описан процесс подписи, тестирования и развертывания простого приложения со списком дел.
В конце этого руководства у вас должно быть все необходимое для создания идеального пайплайна уже для вашего следующего приложения для iOS.
☁️ И кстати, возможно пора уже наконец, использовать Xcode cloud?
@iOS Dev
Фреймворк Foundation используется почти во всех проектах Swift. Он обеспечивает базовый уровень функциональности для фундаментальных вещей: строк, коллекций и дат.
Были анонсированы важнейшие изменения, которые позволят решить ряд технических задач:
1️⃣ Больше никакого C-кода.
С нативной реализацией на свифте в
Foundation
не будет затрат на преобразования между C и Swift, что приведёт к более высокой производительности. Реализация Swift, разработанная в виде пакета, также упростит для разработчиков Swift проверку, понимание и добавление кода.
2️⃣ Будет предоставлена опция импорта только нужных пакетов.
FoundationEssentials, FoundationInternationalization, FoundationNetworking, FoundationXML, FoundationObjCCompatibility.
Разработчики (и пользователи!) хотят уменьшить размер бинарников, поэтому, например,
FoundationEssentials
предоставит наиболее важные типы в Foundation без системных зависимостей, чтобы помочь в достижении этой цели. Другие пакеты будут по-прежнему обеспечивать поддержку XML и работу в сети. Кроме этого, новый пакет
FoundationObjCCompatibility
будет содержать устаревшие API, полезные для определенных приложений.3️⃣ Реализация
Foundation
будет унифицирована. Множественные реализации любого API рискуют отличаться поведением и, в конечном итоге, ошибками при перемещении кода между платформами. Этот новый пакет
Foundation
будет служить ядром единой канонической реализации Foundation, независимо от платформы.Кроме вышеперечисленного, будет достигнута и цель для сообщества.
Проекты с открытым исходным кодом лучше всего проявляют себя, когда сообщество пользователей может участвовать в развитии.
🎉 Анонсирована возможность разработчикам добавлять API в Foundation.
📖 Больше деталей, а ещё и возможность обсудить — здесь, первоисточник — тут.
@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😧 RunLoop больше не будет доступен. И вот почему
На платформах
Однако они решили сосредоточить нашу новую унифицированную реализацию на наиболее полезные API-интерфейсы Swift.
Это означает отход от цели
Многие функции Foundation были включены в состав прямой поддержки языка. Но следующие типы в настоящее время не планируется переносить в новый пакет:
🔘
🔘 Коллекции с NS-префиксами — изначально предусмотрены для совместимости, но полезность очень мала.
🔘
🔘
А вот на
@iOS Dev
На платформах
Darwin
разработчики Apple обязаны поддерживать совместимость со всеми существующими API. Однако они решили сосредоточить нашу новую унифицированную реализацию на наиболее полезные API-интерфейсы Swift.
Это означает отход от цели
swift-corelibs-foundation
о 100% совместимости исходного кода. Многие функции Foundation были включены в состав прямой поддержки языка. Но следующие типы в настоящее время не планируется переносить в новый пакет:
🔘
RunLoop, Lock, OperationQueue, Stream, Port, Timer
и т. д. — заменены структурированным параллелизмом.🔘 Коллекции с NS-префиксами — изначально предусмотрены для совместимости, но полезность очень мала.
🔘
NSCoding
, NSKeyedArchiver
— заменены на Codable
.🔘
Progress
— внешних зависимостей нет, но пересечение со структурированным параллелизмом еще не полностью разработано.А вот на
Darwin
платформа Foundation
продолжит поддерживать реализации этих типов в сочетании C, Objective-C и Swift.@iOS Dev
Полное руководство по работе с URL в Swift (и SwiftUI)
URL-адреса используются повсеместно, и приложения для iOS не являются исключением.
Наиболее распространенными примерами являются веб-контент, локальные файлы и конечные точки REST API.
📖 В этой статье разбираются пошагово следующие аспекты:
1️⃣ Что такое URL и как использовать URL в Swift.
2️⃣ Как URL-адреса идентифицируют локальные и веб-ресурсы.
3️⃣ Управление URL и преобразование их в более удобные типы.
4️⃣ Создание URL-адреса и проверка его отдельных компонентов.
5️⃣ Использование URL для чтения и записи в файловой системе устройства.
6️⃣ Показаны примеры работы с URL-адресами в приложениях SwiftUI.
Рекомендую после этого материала ознакомиться и с более любопытной темой:
📖 Создание переиспользуемой системы для сложных URL-запросов с помощью Swift.
@iOS Dev
URL-адреса используются повсеместно, и приложения для iOS не являются исключением.
Наиболее распространенными примерами являются веб-контент, локальные файлы и конечные точки REST API.
📖 В этой статье разбираются пошагово следующие аспекты:
1️⃣ Что такое URL и как использовать URL в Swift.
2️⃣ Как URL-адреса идентифицируют локальные и веб-ресурсы.
3️⃣ Управление URL и преобразование их в более удобные типы.
4️⃣ Создание URL-адреса и проверка его отдельных компонентов.
5️⃣ Использование URL для чтения и записи в файловой системе устройства.
6️⃣ Показаны примеры работы с URL-адресами в приложениях SwiftUI.
Рекомендую после этого материала ознакомиться и с более любопытной темой:
📖 Создание переиспользуемой системы для сложных URL-запросов с помощью Swift.
@iOS Dev
Семафоры в Swift и что это такое: определение, немного теории и примеры
ℹ️ Семафоры дают нам возможность контролировать доступ к общему ресурсу. Сам семафор состоит из очереди потоков и значения счетчика (типа
Очередь потоков используется семафором для отслеживания ожидающих потоков в порядке FIFO (первый поток, введенный в очередь, будет первым, кто получит доступ к общему ресурсу, как только он будет доступен).
Значение счетчика используется семафором, чтобы решить, должен ли поток получить доступ к общему ресурсу или нет. При этом оно изменяется, когда мы вызываем
📖 В этом материале буквально на пальцах объясняется:
🔘 Что такое семафоры.
🔘 Принципы работы семафоров.
🔘 А также автор приводит два примера для упрощения понимания.
@iOS Dev
ℹ️ Семафоры дают нам возможность контролировать доступ к общему ресурсу. Сам семафор состоит из очереди потоков и значения счетчика (типа
Int
). Очередь потоков используется семафором для отслеживания ожидающих потоков в порядке FIFO (первый поток, введенный в очередь, будет первым, кто получит доступ к общему ресурсу, как только он будет доступен).
Значение счетчика используется семафором, чтобы решить, должен ли поток получить доступ к общему ресурсу или нет. При этом оно изменяется, когда мы вызываем
signal()
или wait()
.📖 В этом материале буквально на пальцах объясняется:
🔘 Что такое семафоры.
🔘 Принципы работы семафоров.
🔘 А также автор приводит два примера для упрощения понимания.
@iOS Dev
Давайте остановим фильтрацию на секунду: альтернативные способы обработки коллекций
Когда мы хотим удалить элементы из коллекции, мы можем использовать тривиальный метод
📖 В этом материале вы можете найти некоторые альтернативы для
Некоторые из этих альтернатив более понятны и даже имеют оптимизацию производительности.
В статье акцентировано внимание на
Конечно же, с примерами.
@iOS Dev
Когда мы хотим удалить элементы из коллекции, мы можем использовать тривиальный метод
filter
, чтобы отфильтровать элементы, которые нам не нужны.📖 В этом материале вы можете найти некоторые альтернативы для
filter
, которые могут лучше соответствовать решаемым задачам. Некоторые из этих альтернатив более понятны и даже имеют оптимизацию производительности.
В статье акцентировано внимание на
removeAll(where:)
, contains(where:)
, allSatisfy(predicate:), reduce
и first(where:)
. Конечно же, с примерами.
@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
RunLoop.main и DispatchQueue.main: объяснение различий
📖 Во время код-ревью автор материала сталкивался с непоследовательностью в использовании обоих, и решил объяснить, в чём различия. Статья разбита на следующие блоки:
1️⃣ Что такое
2️⃣ Что такое
3️⃣ Различия между
4️⃣ Нужно ли использовать
Спойлер:
Наиболее существенное различие между RunLoop.main и DispatchQueue.main заключается в том, что последний выполняется напрямую, когда RunLoop может быть занят. Например, представление загруженного изображения во время прокрутки будет немедленно отображаться только при использовании DispatchQueue.main в качестве планировщика.
@iOS Dev
RunLoop.main
и DispatchQueue.main
часто используются в качестве планировщиков в Combine. 📖 Во время код-ревью автор материала сталкивался с непоследовательностью в использовании обоих, и решил объяснить, в чём различия. Статья разбита на следующие блоки:
1️⃣ Что такое
RunLoop.main
.2️⃣ Что такое
DispatchQueue.main
.3️⃣ Различия между
RunLoop.main
и DispatchQueue.main
.4️⃣ Нужно ли использовать
RunLoop.main
?Спойлер:
@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Объяснение параллелизма: как создать многопоточное приложение для iOS
Параллелизм в iOS — обширная (даже гигантская) тема. Автор пишет, что если вы никогда раньше не использовали GCD, эта статья — отличное место для начала.
В частности, объясняется разница между последовательными и параллельными очередями (
📖 А сам материал разбит на следующие части:
1️⃣ Параллелизм и Grand Central Dispatch.
2️⃣
3️⃣ Пример использования DispatchWorkItem.
4️⃣ Sync vs Async.
5️⃣ Что может вызвать deadlock и для чего можно использовать
6️⃣ Serial vs Concurrent.
7️⃣ Подводные камни. Кстати, тут интересный пример про машину, блокирующую скорую на узкой улице.
Также автор затрагивает (правда, не углубляясь в тему) взрыв потоков и гонки.
🛠 Приложение из статьи доступно на github.
@iOS Dev
Параллелизм в iOS — обширная (даже гигантская) тема. Автор пишет, что если вы никогда раньше не использовали GCD, эта статья — отличное место для начала.
В частности, объясняется разница между последовательными и параллельными очередями (
serial
и concurrent
), а также различия между синхронным и асинхронным выполнением.📖 А сам материал разбит на следующие части:
1️⃣ Параллелизм и Grand Central Dispatch.
2️⃣
Dispatch Queues
.3️⃣ Пример использования DispatchWorkItem.
4️⃣ Sync vs Async.
5️⃣ Что может вызвать deadlock и для чего можно использовать
async
.6️⃣ Serial vs Concurrent.
7️⃣ Подводные камни. Кстати, тут интересный пример про машину, блокирующую скорую на узкой улице.
Также автор затрагивает (правда, не углубляясь в тему) взрыв потоков и гонки.
🛠 Приложение из статьи доступно на github.
@iOS Dev
Шаринг файлов между приложением iOS и расширениями Widget и WatchKit
📖 Из этой статьи вы узнаете, как поделиться файлом, загруженным или созданным вашим приложением iOS, с виджетом или расширением WatchKit.
А также узнаете про:
🔘 Создание и работу с
🔘 Чтение файла из вашего расширения.
🔘 Перенос файла из приложения iOS в расширение
🔘 Сохранение файла в расширении
Кстати, про необычные варианты обмена данными между приложениями iOS можно прочитать в этом посте(казалось бы, при чём тут 🟡 iOS Photos) .
@iOS Dev
📖 Из этой статьи вы узнаете, как поделиться файлом, загруженным или созданным вашим приложением iOS, с виджетом или расширением WatchKit.
А также узнаете про:
🔘 Создание и работу с
App Groups
.🔘 Чтение файла из вашего расширения.
🔘 Перенос файла из приложения iOS в расширение
WatchKit
.🔘 Сохранение файла в расширении
WatchKit
.Кстати, про необычные варианты обмена данными между приложениями iOS можно прочитать в этом посте
@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Метатипы в Swift: что такое .self, .Type и .Protocol?
Метатипы очень полезны в Swift, и вы наверняка использовали их неоднократно.
К сожалению, в коде они выглядят довольно странно, что может вызвать некоторую путаницу при попытке понять, что они собой представляют на самом деле.
📖 В этом материале Бруно Роша подробно объясняет следующее:
1️⃣ Что представляет собой метатип?
2️⃣ Отличия динамических метатипов от статических.
3️⃣ Метатипы протоколов.
4️⃣ Ещё больше вариантов использования метатипов.
@iOS Dev
Метатипы очень полезны в Swift, и вы наверняка использовали их неоднократно.
К сожалению, в коде они выглядят довольно странно, что может вызвать некоторую путаницу при попытке понять, что они собой представляют на самом деле.
📖 В этом материале Бруно Роша подробно объясняет следующее:
1️⃣ Что представляет собой метатип?
2️⃣ Отличия динамических метатипов от статических.
3️⃣ Метатипы протоколов.
4️⃣ Ещё больше вариантов использования метатипов.
@iOS Dev
Как создать виджет для экрана блокировки в iOS?
В iOS 16 Apple серьезно переработала экран блокировки.
Поскольку виджеты для хоумскрина и для локскрина работают на
📖 В этом материале рассказывается о необходимых шагах и приводится пример кода для создания такого виджета.
@iOS Dev
В iOS 16 Apple серьезно переработала экран блокировки.
Поскольку виджеты для хоумскрина и для локскрина работают на
WidgetKit
, способ создания для экрана блокировки очень похож на вот этот. 📖 В этом материале рассказывается о необходимых шагах и приводится пример кода для создания такого виджета.
@iOS Dev