iOS разработчик, который делится фишками, своим опытом и опытом других. В этом канале вы сможете найти истории из жизни, подходы к реализации а также новости и тренды из мира iOS-разработки Авторский канал, iOS разработка
WidgetKit, способ создания для экрана блокировки очень похож на вот этот.
📖 В этом материале рассказывается о необходимых шагах и приводится пример кода для создания такого виджета.
@iOS DevApp Groups.
🔘 Чтение файла из вашего расширения.
🔘 Перенос файла из приложения iOS в расширение WatchKit.
🔘 Сохранение файла в расширении WatchKit.
Кстати, про необычные варианты обмена данными между приложениями iOS можно прочитать в этом посте (казалось бы, при чём тут 🟡 iOS Photos).
@iOS Devserial и concurrent), а также различия между синхронным и асинхронным выполнением.
📖 А сам материал разбит на следующие части:
1️⃣ Параллелизм и Grand Central Dispatch.
2️⃣ Dispatch Queues.
3️⃣ Пример использования DispatchWorkItem.
4️⃣ Sync vs Async.
5️⃣ Что может вызвать deadlock и для чего можно использовать async.
6️⃣ Serial vs Concurrent.
7️⃣ Подводные камни. Кстати, тут интересный пример про машину, блокирующую скорую на узкой улице.
Также автор затрагивает (правда, не углубляясь в тему) взрыв потоков и гонки.
🛠 Приложение из статьи доступно на github.
@iOS DevRunLoop.main и DispatchQueue.main часто используются в качестве планировщиков в Combine.
📖 Во время код-ревью автор материала сталкивался с непоследовательностью в использовании обоих, и решил объяснить, в чём различия. Статья разбита на следующие блоки:
1️⃣ Что такое RunLoop.main.
2️⃣ Что такое DispatchQueue.main.
3️⃣ Различия между RunLoop.main и DispatchQueue.main.
4️⃣ Нужно ли использовать RunLoop.main?
Спойлер:
Наиболее существенное различие между RunLoop.main и DispatchQueue.main заключается в том, что последний выполняется напрямую, когда RunLoop может быть занят. Например, представление загруженного изображения во время прокрутки будет немедленно отображаться только при использовании DispatchQueue.main в качестве планировщика.
@iOS Devfilter, чтобы отфильтровать элементы, которые нам не нужны.
📖 В этом материале вы можете найти некоторые альтернативы для filter, которые могут лучше соответствовать решаемым задачам.
Некоторые из этих альтернатив более понятны и даже имеют оптимизацию производительности.
В статье акцентировано внимание на removeAll(where:), contains(where:), allSatisfy(predicate:), reduce и first(where:).
Конечно же, с примерами.
@iOS DevInt).
Очередь потоков используется семафором для отслеживания ожидающих потоков в порядке FIFO (первый поток, введенный в очередь, будет первым, кто получит доступ к общему ресурсу, как только он будет доступен).
Значение счетчика используется семафором, чтобы решить, должен ли поток получить доступ к общему ресурсу или нет. При этом оно изменяется, когда мы вызываем signal() или wait().
📖 В этом материале буквально на пальцах объясняется:
🔘 Что такое семафоры.
🔘 Принципы работы семафоров.
🔘 А также автор приводит два примера для упрощения понимания.
@iOS DevDarwin разработчики 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 DevURLSession, когда у пользователя нет подключения к Интернету, ваш запрос немедленно завершится ошибкой.
Однако если вы создадите её с параметром конфигурации waitsForConnectivity, для которого задано значение true, система автоматически подождет некоторое время, чтобы проверить, станет ли подключение доступным, прежде чем пытаться выполнить запрос.
По умолчанию система будет ждать семь дней, чтобы узнать, станет ли доступно подключение к Интернету, но это можно контролировать с помощью свойства timeoutIntervalForResource в вашем конфиге.
ℹ️ Например, вы можете установить интервал с помощью:
config.timeoutIntervalForResource = 60
@iOS DeviOS 14 как простая платформа, с помощью которой разработчики могут создавать виджеты для главного экрана.
С тех пор он постепенно превратился в платформу, которая поддерживает некоторые из наиболее ожидаемых функций в iOS 16, а именно виджет блокировки экрана, Live Activities и Dynamic Island.
📖 Эта статья будет полезна новичкам и тем, кто впервые делает виджет для Home Screen.
📖 А вот тут можно прочесть и о другом примере.
@iOS Dev900 000.
Чтобы предоставить разработчикам по всему миру еще большую гибкость, цены можно будет выставить с $ 0,29 и шагом в 10 центов вплоть до $10 000 долларов. Вспоминаем приложение I am rich?
Начиная с сегодняшнего дня, разработчики приложений c подпиской смогут выбирать любой стор в качестве основы для автоматического формирования цен в других 174 магазинах и 44 валютах. По-прежнему будет доступна возможность устанавливать и произвольную цену для каждой страны.
📄 Документ со всеми возможными ценами доступен здесь.
🔗 Первоисточник.
@iOS DevДублирование считается плохой практикой в программировании, поскольку оно усложняет поддержку кода.
Но попытка преждевременного рефакторинга может привести к выбору неправильной абстракции, что может привести к ухудшению кода по мере появления новых требований и, в конечном итоге, потребует повторного рефакторинга.
Правило подразумевает, что стоимость сопровождения определенно перевешивает стоимость рефакторинга и возможного плохого дизайна, когда есть три копии, и может не перевесить, если есть только две копии.
😂 Моя позиция совпадает с этим правилом. В частности, с тем, что крайне редко бывает чёрное и белое в целом в разработке, и не всегда стоит рефакторить только ради самого процесса.
* три страйка — термин из бейсбола, а не боулинга. Его суть в том, что если бьющий набирает три страйка — это называется страйк-аут (англ. strike-out) — бьющий выбывает из игры.
@iOS Dev.plist форсится самим Apple явно (а пост выше был хаком аж полгода назад).
@iOS DevNever — согласно документации Apple, возвращаемый тип функций, которые не возвращаются нормально, или, если сформулировать иначе, тип без значений.
Тип Never в Swift позволяет вам сообщить компилятору о точке выхода в вашем коде.
Это тип без значений, который предотвращает написание бесполезного кода.
Хотя сам по себе тип Never может быть малоизвестен, возможно, вы уже использовали его в своей кодовой базе (некоторые методы Swift юзают его по дефолту).
📖 В этом материале раскрывается понятие Never, приводятся примеры и объясняется, зачем его в целом можно использовать.
@iOS Dev