iOS Dev
Ir al canal en Telegram
👨💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift
Mostrar más7 878
Suscriptores
-124 horas
Sin datos7 días
-5130 días
Archivo de publicaciones
7 879
Простой доступ к данным симулятора
🔎 При разработке для iOS часто бывает полезно перейти к файлам, которые вы создаете в симуляторе.
Местонахождение файлов на диске менялось годами, но одно оставалось неизменным — неудобно определять местонахождение файлов.
Трудности с поиском файлов становятся еще более очевидными при работе в команде.
ℹ️ В этом решении идея состоит в том, чтобы проверить таргет, а затем добавить символическую ссылку на ваш рабочий стол.
Проверка переменных среды, доступных при работе в симуляторе, показывает, что есть вся необходимая информация, чтобы это произошло.
😎 Теперь, каждый раз при запуске симулятора, на рабочем столе вашего Mac будет создаваться новая символическая ссылка.
@iOS Dev
7 879
OptionSet в Swift: определение, примеры и при чём тут побитовые операторы?
Недавно я писал пост про «базу» и то, что на самом деле мы гораздо чаще, чем нам кажется, встречаемся с важными алгоритмическими понятиями.
📖 В этом материале рассказывается о том, что создать собственный OptionSet не так уж и сложно.
Его можно использовать для большого количества логических значений.
Хотя вы можете инициализировать его литералом массива, на самом деле он больше похож на Set, чем на массив.
ℹ️ Фактически,
OptionSet наследует все SetAlgebra, которые вы можете применять к сетам, что означает, что OptionSet имеет такие методы, как intersection, union, contains и несколько других методов, которые вы могли использовать в Set.
В статье рассказывается об этой и остальных особенностях, приводится пример создания и рассматриваются возможности работы с OptionSet.
@iOS Dev7 879
Vision Framework для iOS: обнаружение контуров
💡 Творческий подход к доступным вам инструментам может существенно повлиять на результат.
Различные наборы алгоритмов изменяют то, как выглядит и воспринимается окончательный результат.
Вы даже можете использовать алгоритмы компьютерного зрения для создания интересных фильтров и эффектов для изображений и фотографий.
Например, если вы обнаружили все контуры на изображении, у вас появится классный материал, чтобы реализовать отлично выглядящий рисунок.
📖 В этом руководстве вы узнаете, как использовать фреймворк Vision для следующих этапов:
1️⃣ Создание запросов для обнаружения контуров.
2️⃣ Настройка параметров для получения разных контуров.
3️⃣ Упрощение контуров для создания художественных эффектов.
@iOS Dev
7 879
Repost from Код Воробья для iOS разработчиков
В Xcode 14 добавили экспорт локализации пакетов. Подробнее в туториале по локализации.
Это новый туториал на сайте, мы сделали большой ультимативный гайд по локализации. Разобрали основы, экспорт и импорт, как локализовать SPM-пакеты, плюрализацию, картинки, плагины для авторгенерации.
В конце туториала узнаете почему для некоторых российский рубль показывается как ₽, а для некоторых RUB.
7 879
Вы только посмотрите, разве это не самая милая реализация возможностей Dynamic Island?
В приложении Apollo можно кормить питомцев, играть с ними в игры, укреплять дружбу и не только.
📖 Материалы, которые вам помогут создать свой собственный остров: раз и два.
@iOS Dev
7 879
Как подружить фичу Autoplay и tvOS?
Autoplay — это когда по завершении просмотра одного фильма пользователю предлагается посмотреть похожий контент, рекомендованный системой.
О нюансах реализации этой фичи на tvOS рассказала Валерия Рублевская, iOS-разработчик на проекте онлайн-кинотеатра KION от МТС.
Прочитать можно здесь.
7 879
Интерполяция строк в Swift 5
📖 Swift 5 добавил некоторые приятные улучшения для интерполяции строк, о которых многие люди могут не знать.
Как минимум, это возможность управлять интерполяцией в кастомный тип, использующий
ExpressibleByStringInterpolation.
ℹ️ Это позволит создавать такие типы, как HTML, и управлять новым форматированием строк OSLog (например, log.debug("value \(x, privacy: .public)").
Бекка Ройал-Гордон предоставила несколько хороших примеров этого в SE-0228.
Как побочный эффект, String и Substring теперь используют DefaultStringInterpolation, что дает нам возможность для настройки поведения интерполяции.
@iOS Dev7 879
Создание и планирование локальных уведомлений с помощью async/await
После того как вы получите разрешение на отправку уведомлений, вам будет доступно управление уведомлениями с помощью
user notification center.
📖 В этом руководстве рассказывается, как создавать такие уведомления, начиная с работы над контентом и заканчивая планированием с помощью триггера, основанного на времени.
@iOS Dev7 879
Как работает Bool.random() в Swift на самом деле?
Наверняка, в своих проектах каждый хоть раз использовал нечто вроде:
let randomInt = Int.random(in: 1..<5)
let randomFloat = Float.random(in: 1..<10)
let randomBool = Bool.random()
🤔 Но задумывались ли вы, что происходит на самом деле внутри? Иногда я смотрю на реализацию крутых вещей в ядре Swift, как например в посте про сортировку, и ищу материалы, объясняющие то или иное решение.
Так вот, в случае Bool полная реализация API будет получать необработанное значение UInt64 от генератора (он же RNG), сдвигать его вправо 17 раз и возвращать true, если первый бит результирующего значения равен 0.
Самое интересное в количестве, а именно, почему же 17?
Причина, по которой значение сдвигается ровно 17 раз, заключается в том, что (некоторые) слабые ГСЧ (генераторы случайных чисел) имеют лучшие свойства случайности в средних битах по сравнению с младшими/старшими битами.
Команда разработчиков Swift решила защитить нас от API, которые решили использовать эти ГСЧ вместо стандартного SystemRandomNumberGenerator.
ℹ️ Кстати, до пулл-реквеста, в котором реализовано это улучшение, Bool.random() просто возвращал generator.next() % 2 == 0.
📖 Почитать подробнее можно в ядре свифта или в более понятном источнике. А ещё рекомендую пост про UUID.
@iOS Dev7 879
Архитектура MVVM за 90 секунд
📖 В этой статье вы найдете все необходимое, чтобы разобраться в этой популярной архитектуре iOS-приложений.
Шесть шагов, описанных в материале, затрагивают этапы от создания ViewModel до момента, когда ViewController сможет полагаться на ViewModel для извлечения и форматирования данных.
🛠 Поэкспериментировать самим можно с помощью кода.
📺 В формате короткого 🏴 видео материал доступен здесь.
7 879
Пример создания UICollectionViewCompositionalLayout
В iOS 13 Apple представила новый и очень мощный способ создания макетов для UICollectionView —
UICollectionViewCompositionalLayout.
Он предоставляет декларативный способ создания богатых и сложных макетов для вашего приложения. Больше никаких сложных расчетов размеров, борьбы со вставками, размеров заголовков.
В композиционном макете используются три типа «строительных блоков»:
🔘 item — описывает свойства фактической ячейки, которые будут отображаться.
🔘 group — это самая мощная вещь в композиционном лэйауте! Больше не нужно вычислять, какой элемент должен быть больше, меньше, полной ширины или половинной ширины. Всю эту информацию достаточно описать в группе.
🔘 section — как следует из названия, описывает секцию. Секция имеет внутри одну группу и может иметь дополнительные элементы, такие как нижние и верхние хэдеры.
📖 В этой статье более детально разбираются определения и приводятся примеры создания.
@iOS Dev7 879
Memory Warnings при разработке: определение и способы воспроизведения
⚠️ Если системе не хватает свободной памяти и она не может восстановить её, завершив приостановленные приложения, UIKit отправляет предупреждение о нехватке памяти работающим приложениям.
UIKit выдает предупреждения о нехватке памяти следующими способами:
🔘 Вызывая applicationDidReceiveMemoryWarning(_:) в app delegate.
🔘 Вызывая didReceiveMemoryWarning() в каждом из активных UIViewController.
🔘 C помощью didReceiveMemoryWarningNotification во все зарегистрированные observers.
🔘 Каждая из dispatch queues получает warning типа DISPATCH_SOURCE_TYPE_MEMORYPRESSURE.
Когда ваше приложение получает предупреждение о нехватке памяти, освободите как можно больше памяти так быстро, насколько это вообще возможно, с помощью следующих рекомендаций Apple:
1️⃣ Удалите ссылки на изображения, мультимедийные файлы или любые большие файлы данных, которые уже представлены на диске и могут быть повторно загружены позже.
2️⃣ Удалите ссылки на любые временные объекты, которые вам больше не нужны.
3️⃣ Если активные задачи могут потреблять значительный объем памяти, приостановите dispatch queues или ограничьте количество одновременных операций, выполняемых вашим приложением.
Если приложение не отдает достаточно памяти или же приложение использует слишком много памяти слишком быстро, iOS удалит приложение без предупреждения.
Иногда во время тестирования из-за этого приложение закрывается, но в отладчике ничего не появляется.
Что делать в таком случае?
🟢 На симуляторе: откройте Debug -> Simulate Memory Warning (или воспользуйтесь шорткатом CMD+SHIFT+M).
🟢 Приватное API — не используйте его в проде: UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)
ℹ️ А чтобы зафорсить out of memory, есть ещё и такой способ.
@iOS Dev7 879
BackgroundTask в SwiftUI: примеры коды и способы тестирования
Apple выпустила API под названием BackgroundTask для актуализации контента вашего приложения и выполнения операций, которые займут несколько минут, пока оно работает в фоновом режиме.
Следует учитывать, что для выполнения более длительных задач этому API может потребоваться включенное устройство и подключение к сети.
Вы указываете, что задача должна выполняться время от времени, а система решает, соответствует ли это активности пользователя.
Вы никогда не должны полагаться на такое планирование для чего-то критически важного для вашего приложения.
Также важно уточнить, что приложение может запланировать только 1 задачу обновления за раз и 10 задач обработки, запланированных в любое время, как сказано в документе.
📖 В этом материале рассказывается о реализации, а также о необходимом подготовительном этапе.
📖 Важное руководство по работе в фоновом режиме.
ℹ️ В Xcode 14.0 был баг в определённых условиях, но согласно этому треду он исправлен в Xcode 14.1 (впрочем, ничего нового).
@iOS Dev
