Холодный и тёплый запуск приложения — о чём речь?
Для начала пара слов о том, что такое «активация приложения». Она происходит, когда пользователь нажимает на иконку или иным образом возвращается в ваше приложение.
ℹ️ В iOS активация может быть либо запуском (
Launch — начало процесса, а resume — это когда в вашем приложении уже есть активный процесс, даже если он приостановлен.
Resume, как правило, намного быстрее, и работа по оптимизации запуска и возобновления отличается. В macOS система, например, не завершает ваш процесс в рамках обычного использования.
Что же такое холодный и тёплый запуски?
Активация вашего приложения значительно зависит от предыдущих действий на устройстве.
Например, в iOS, если вы свайпаете до хоумскрина и сразу же снова входите в приложение, то получите самую быструю возможную активацию. Вероятнее всего, это будет
Когда система определяет, что нужен запуск, это обычно называют «теплым запуском».
В iOS ваше приложение обычно вытесняется из памяти, чтобы предоставить foreground-приложению больше ресурсов.
Фреймворки также могут потребовать повторного запуска. Этот сценарий или запуск сразу после загрузки часто называют «холодным запуском».
Более корректно размышлять о тёплом и холодном запусках как о спектре.
Многое зависит и от состояния девайса, и именно из-за этого спектра тестирование в различных условиях необходимо для прогнозирования производительности в реальном мире.
📺 Для большего погружения рекомендую это видео с WWDC.
@iOS Dev
Для начала пара слов о том, что такое «активация приложения». Она происходит, когда пользователь нажимает на иконку или иным образом возвращается в ваше приложение.
ℹ️ В iOS активация может быть либо запуском (
launch
), либо возобновлением (resume
). Launch — начало процесса, а resume — это когда в вашем приложении уже есть активный процесс, даже если он приостановлен.
Resume, как правило, намного быстрее, и работа по оптимизации запуска и возобновления отличается. В macOS система, например, не завершает ваш процесс в рамках обычного использования.
Что же такое холодный и тёплый запуски?
Активация вашего приложения значительно зависит от предыдущих действий на устройстве.
Например, в iOS, если вы свайпаете до хоумскрина и сразу же снова входите в приложение, то получите самую быструю возможную активацию. Вероятнее всего, это будет
resume
. Когда система определяет, что нужен запуск, это обычно называют «теплым запуском».
В iOS ваше приложение обычно вытесняется из памяти, чтобы предоставить foreground-приложению больше ресурсов.
Фреймворки также могут потребовать повторного запуска. Этот сценарий или запуск сразу после загрузки часто называют «холодным запуском».
Более корректно размышлять о тёплом и холодном запусках как о спектре.
Многое зависит и от состояния девайса, и именно из-за этого спектра тестирование в различных условиях необходимо для прогнозирования производительности в реальном мире.
📺 Для большего погружения рекомендую это видео с WWDC.
@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Простой способ проверить тип в Swift
ℹ️ Кроме
Оператор проверки типа вернёт
В приведённом примере
Кстати, я изучаю возможности инструментов Apple и, как видите, гифки выходят на новый уровень!
@iOS Dev
ℹ️ Кроме
as?
можно использовать оператор проверки типа is
, чтобы проверить, относится ли экземпляр к определенному типу подкласса. Оператор проверки типа вернёт
true
, если экземпляр относится к этому типу подкласса, и false
, если нет.В приведённом примере
magicBool
может быть либо Int
, либо String
.@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
iOS Clean architecture на примере реализации фичи с использованием MVVM, Repository, URLSession
📖 В этом материале автор расскажет про:
1️⃣ Реализацию шаблона проектирования
2️⃣ Полностью несвязанную систему загрузки для любого источника данных с подходом
3️⃣ Создание клиента на базе
4️⃣ Корректное использование API.
И, что еще более важно, про создание функции, которую можно изолировать, смоделировать и протестировать на каждом уровне.
🛠 Бонус! Репозиторий с проектом, где вы сразу можете посмотреть на решение.
@iOS Dev
📖 В этом материале автор расскажет про:
1️⃣ Реализацию шаблона проектирования
MVVM
очень простым способом без дополнительных фреймворков.2️⃣ Полностью несвязанную систему загрузки для любого источника данных с подходом
Repository
.3️⃣ Создание клиента на базе
URLSession
.4️⃣ Корректное использование API.
И, что еще более важно, про создание функции, которую можно изолировать, смоделировать и протестировать на каждом уровне.
🛠 Бонус! Репозиторий с проектом, где вы сразу можете посмотреть на решение.
@iOS Dev
Как добавить поддержку файлов с любым расширением в вашем приложении?
🔆 Представьте ситуацию, что вы делаете кастомный видеоредактор или архиватор и нужно поддерживать не только стандартные, но и
Если необходимо заставить систему распознавать файл, вы можете использовать
В документации Apple четко указано, что новый тип должен соответствовать хотя бы одному из public-типов.
📖 Автор этой статьи доступно объясняет не только, как поддерживать кастомные типы данных и шарить их, но и как открывать эти файлы в вашем приложении.
@iOS Dev
свои файлы
в приложении.Если необходимо заставить систему распознавать файл, вы можете использовать
Document Types
и Exported Type Identifiers
. В документации Apple четко указано, что новый тип должен соответствовать хотя бы одному из public-типов.
public.data
— базовый тип для byte streams. public.content
— базовый тип для смешанного контента. Например, файл PDF содержит как текст, так и специальные данные форматирования.📖 Автор этой статьи доступно объясняет не только, как поддерживать кастомные типы данных и шарить их, но и как открывать эти файлы в вашем приложении.
@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Подборка необычных эффектов в IOS с конференции Tokyo iOS Meetup
Stack Overflow говорил, что это будет просто (спойлер: это оказалось отнюдь не просто)
Тим Оливер, в прошлом разработчик Realm и pixiv, делится своим опытом реализации сразу нескольких необычных вещей в iOS, кажущихся на первый взгляд тривиальными, но на самом деле содержащими непростую реализацию.
📺 Видео с конференции доступно здесь.
@iOS Dev
Stack Overflow говорил, что это будет просто (спойлер: это оказалось отнюдь не просто)
Тим Оливер, в прошлом разработчик Realm и pixiv, делится своим опытом реализации сразу нескольких необычных вещей в iOS, кажущихся на первый взгляд тривиальными, но на самом деле содержащими непростую реализацию.
📺 Видео с конференции доступно здесь.
@iOS Dev
Рекурсия в Swift: определение, примеры, код
Примером рекурсии в реальном мире может быть размещение двух параллельных зеркал друг против друга. Любой объект между ними будет отражаться рекурсивно.
Среди плюсов их использования:
🔘 Это делает наш код короче и чище.
🔘 Рекурсия требуется в задачах, касающихся структур данных и продвинутых алгоритмов, таких как обход графа и дерева.
Минусы, впрочем, тоже есть:
🔘 Это занимает больше места в стеке по сравнению с итеративной программой.
🔘 Реализация использует больше процессорного времени.
🔘 Отладка может быть более сложной по сравнению с эквивалентной итеративной программой.
📖 В этой статье наглядно объясняется, что такое рекурсивные функции в Swift и объясняется работа таких функций на примерах
@iOS Dev —рекурсия в Swift с примерами в этом посте
Примером рекурсии в реальном мире может быть размещение двух параллельных зеркал друг против друга. Любой объект между ними будет отражаться рекурсивно.
Среди плюсов их использования:
Минусы, впрочем, тоже есть:
📖 В этой статье наглядно объясняется, что такое рекурсивные функции в Swift и объясняется работа таких функций на примерах
@iOS Dev —
Please open Telegram to view this post
VIEW IN TELEGRAM
Async/await в Swift c примером использования на базе существующего проекта
ℹ️ Параллелизм в Swift означает возможность одновременного запуска нескольких фрагментов кода.
Пусть это и очень упрощенное описание, но оно должно дать вам представление о том, насколько важен параллелизм в Swift для производительности ваших приложений.
📖 Этот материал раскрывает следующие понятия:
🔘 Определение
🔘 Определение
🔘 Для чего нужен структурированный параллелизм (structured concurrency).
🔘 Добавление
@iOS Dev
Async await
является частью новых изменений структурированного параллелизма, которые появились в Swift 5.5 во время WWDC 2021. ℹ️ Параллелизм в Swift означает возможность одновременного запуска нескольких фрагментов кода.
Пусть это и очень упрощенное описание, но оно должно дать вам представление о том, насколько важен параллелизм в Swift для производительности ваших приложений.
📖 Этот материал раскрывает следующие понятия:
async
.await
.async-await
в существующий проект.@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Техники перехода между разными экранами: от простых к интерактивным
Каждая из статей ниже описывает решения автора, который создавал красивые кастомные переходы для собственного приложения, а также рассказывает о его шагах на пути к достижению цели.
1️⃣ Создание кастомных переиспользуемых переходов.
2️⃣ Переходы между экранами: добавляем естественности.
3️⃣ Переходы между экранами: задание произвольного размера.
Нельзя не согласиться с автором насчёт следующего вывода: иногда стоит приложить усилия, чтобы разобраться в непростом API, чтобы в будущем сэкономить время при реализации более сложных переходов.
🛠 Репозиторий с примерами кода из статьи.
@iOS Dev
Каждая из статей ниже описывает решения автора, который создавал красивые кастомные переходы для собственного приложения, а также рассказывает о его шагах на пути к достижению цели.
1️⃣ Создание кастомных переиспользуемых переходов.
2️⃣ Переходы между экранами: добавляем естественности.
3️⃣ Переходы между экранами: задание произвольного размера.
Нельзя не согласиться с автором насчёт следующего вывода: иногда стоит приложить усилия, чтобы разобраться в непростом API, чтобы в будущем сэкономить время при реализации более сложных переходов.
🛠 Репозиторий с примерами кода из статьи.
@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация плавного перехода между цветами в Swift
Эту красивую технику можно создать, вычислив средний цвет входного изображения.
📖 Этот пример был создан с использованием изображений из Unsplash для создания желаемого эффекта.
🛠 Посмотреть на решение в коде можно на Github.
@iOS Dev
Эту красивую технику можно создать, вычислив средний цвет входного изображения.
📖 Этот пример был создан с использованием изображений из Unsplash для создания желаемого эффекта.
🛠 Посмотреть на решение в коде можно на Github.
@iOS Dev
Создание Keyboard Extension для азбуки Морзе
Отличным примером дополнительной клавиатуры является встроенная в iOS клавиатура с эмодзи.
📖 С помощью этого материала вы создадите одно из таких расширений для азбуки Морзе.
🧐 Автор даже считает, что к концу туториала вы сможете её выучить!
@iOS Dev
Keyboard Extensions
позволяют пользователям добавлять дополнительные клавиатуры в список доступных. Отличным примером дополнительной клавиатуры является встроенная в iOS клавиатура с эмодзи.
📖 С помощью этого материала вы создадите одно из таких расширений для азбуки Морзе.
@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Пример реализации диаграммы с затемнением до указанного момента времени
В этом материале можно узнать, как построить диаграмму, отображающую УФ-индекс в течение дня (похожую на системное приложение погоды).
На диаграмме также используется линейный градиент для значения УФ-индекса, реализовано отображение временной шкалы, и затемняющий слой для уже прошедшего отрезка.
🛠 Код доступен по этой ссылке.
@iOS Dev
В этом материале можно узнать, как построить диаграмму, отображающую УФ-индекс в течение дня (похожую на системное приложение погоды).
На диаграмме также используется линейный градиент для значения УФ-индекса, реализовано отображение временной шкалы, и затемняющий слой для уже прошедшего отрезка.
🛠 Код доступен по этой ссылке.
@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Анализ текста в реальном времени с помощью Word Tagger (+ пример приложения)
Возможно, вы помните материал от Максима Скорынина. Я выкладывал в канале первую часть большого материала про работу с CreateML и анализ текста.
📖 Вышло продолжение, в котором создаётся приложение для iOS с нуля, объясняется про GoogleMLKit/TextRecognition и используется Live Text, которые позволяют нам распознавать текст из видеопотока или изображения с помощью камеры телефона.
Кроме этого, используется модель Word Tagger для конвертации англоязычного текста. А также вы сможете узнать о применении фреймворка NaturalLanguagе в реальном проекте.
🛠 Полностью пример приложения можно посмотреть в этом репозитории.
@iOS Dev —если у вас есть примеры проектов или статей, которыми вы хотите поделиться с сообществом, напишите мне 🧑💻
Возможно, вы помните материал от Максима Скорынина. Я выкладывал в канале первую часть большого материала про работу с CreateML и анализ текста.
📖 Вышло продолжение, в котором создаётся приложение для iOS с нуля, объясняется про GoogleMLKit/TextRecognition и используется Live Text, которые позволяют нам распознавать текст из видеопотока или изображения с помощью камеры телефона.
Кроме этого, используется модель Word Tagger для конвертации англоязычного текста. А также вы сможете узнать о применении фреймворка NaturalLanguagе в реальном проекте.
🛠 Полностью пример приложения можно посмотреть в этом репозитории.
@iOS Dev —
Please open Telegram to view this post
VIEW IN TELEGRAM
10 советов для успешного запуска пет-проектов от автора avanderlee
1️⃣ Создайте фокус. По иронии судьбы, сторонние проекты — одна из самых больших ловушек для незавершенных побочных проектов.
2️⃣ Смотрите на вещи реалистично. Вы не сможете сделать всё сразу! От себя я бы добавил, что этот совет касается разработки и в крупных компаниях.
3️⃣ Установите приоритеты.
4️⃣ Планирование — это ключ.
5️⃣ 10 минут в день засчитываются за 5 часов в месяц.
6️⃣ Умейте остановиться вовремя, даже если вы получаете удовольствие (и вы готовы кодить до полуночи).
7️⃣ Создайте задачи на будущее. А #warning вам поможет.
8️⃣ Используйте автоматизацию и инструменты, чтобы сэкономить время.
9️⃣ Поднимите себе настроение с друзьями-единомышленниками.
🔟 Не стесняйтесь отпраздновать успех (или хотя бы запуск проекта).
На мой взгляд, при определённом менеджменте большинство этих советов будут работать автоматически и в рабочих проектах.
⭐️ А вот тут можно прочесть отличные от Пола Хадсона про профессиональное развитие.
@iOS Dev
1️⃣ Создайте фокус. По иронии судьбы, сторонние проекты — одна из самых больших ловушек для незавершенных побочных проектов.
2️⃣ Смотрите на вещи реалистично. Вы не сможете сделать всё сразу! От себя я бы добавил, что этот совет касается разработки и в крупных компаниях.
3️⃣ Установите приоритеты.
4️⃣ Планирование — это ключ.
5️⃣ 10 минут в день засчитываются за 5 часов в месяц.
6️⃣ Умейте остановиться вовремя, даже если вы получаете удовольствие (и вы готовы кодить до полуночи).
7️⃣ Создайте задачи на будущее. А #warning вам поможет.
8️⃣ Используйте автоматизацию и инструменты, чтобы сэкономить время.
9️⃣ Поднимите себе настроение с друзьями-единомышленниками.
🔟 Не стесняйтесь отпраздновать успех (или хотя бы запуск проекта).
На мой взгляд, при определённом менеджменте большинство этих советов будут работать автоматически и в рабочих проектах.
@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Причина и два способа исправить ошибку: «The compiler is unable to type-check this expression in reasonable time»
Вполне возможно, что вы сталкивались с этой ошибкой при разработке. Конечно, причины могут быть различны, но все они будут сводиться примерно к одному и тому же.
Например, комбинация выражений
Два простых способа, которые помогут победить этот неприятный момент:
1️⃣ Разбить длинное выражение на более мелкие.
2️⃣ Можно уменьшить количество выражений.
📖 Детальнее можно прочесть в этой статье.
👩🎓 Кстати, вы знали, что оператор
@iOS Dev
Вполне возможно, что вы сталкивались с этой ошибкой при разработке. Конечно, причины могут быть различны, но все они будут сводиться примерно к одному и тому же.
Например, комбинация выражений
=, +, try, await
слишком сложна для компилятора Swift.Два простых способа, которые помогут победить этот неприятный момент:
1️⃣ Разбить длинное выражение на более мелкие.
// Вместо
var longExpression = "a" + "b" + "c" + "d"
// Использовать
var temp1 = "a" + "b"
var temp2 = "c" + "d"
var smallerExpression = temp1 + temp2
2️⃣ Можно уменьшить количество выражений.
// Вместо
var longExpression = "a" + "b" + "c" + "d"
// Использовать
var reduceExpression = "ab" + "cd"
📖 Детальнее можно прочесть в этой статье.
+
мощно перегружен и содержит около 60 различных функций?@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
UIScrollView и как он работает
📖 Илья Лобанов подробно рассказывает о том, как работает UIScrollView: приводит примеры замедления, баунса, spring animation и rubber band effect.
И даёт советы, как можно добиться естественной анимации и отзывчивого интерфейса в приложениях.
В материале можно получить представление и примеры работы со следующими эффектами:
🔘 Тестовый SimpleScrollView.
🔘 Замедление (Deceleration).
🔘 Реализация замедления.
🔘 Анимация пружины (Spring Animation).
🔘 Spring Animation в iOS SDK.
🔘 Реализация анимации пружины.
🔘 Rubber Band Effect.
🔘 Реализация Rubber Band Effect.
🔘 Примеры использования.
📺 Видео доклада можно посмотреть здесь.
🛠 Примеры кода из статьи: github.
🤩 Бонус: видео с WWDC о проектировании интерфейсов.
@iOS Dev
📖 Илья Лобанов подробно рассказывает о том, как работает UIScrollView: приводит примеры замедления, баунса, spring animation и rubber band effect.
И даёт советы, как можно добиться естественной анимации и отзывчивого интерфейса в приложениях.
В материале можно получить представление и примеры работы со следующими эффектами:
🔘 Тестовый SimpleScrollView.
🔘 Замедление (Deceleration).
🔘 Реализация замедления.
🔘 Анимация пружины (Spring Animation).
🔘 Spring Animation в iOS SDK.
🔘 Реализация анимации пружины.
🔘 Rubber Band Effect.
🔘 Реализация Rubber Band Effect.
🔘 Примеры использования.
📺 Видео доклада можно посмотреть здесь.
🛠 Примеры кода из статьи: github.
@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Настройка 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