ru
Feedback
iOS Dev

iOS Dev

Открыть в Telegram

👨‍💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift

Больше
7 998
Подписчики
-324 часа
+207 дней
+7130 день
Архив постов
iOS Dev
7 998
Написал туториал по отображению лицензий из CocoaPods в приложениях Главная фишка — для этого почти не надо писать код, в pod-файле не считается же? 😅. Прочесть можно прямо здесь, в телеграме. 😎 Или же на хабре. @iOS Dev

iOS Dev
7 998
RoomPlan в iOS 16 — 3D-планы этажей в ваших приложениях Это новый API Swift, работающий на базе ARKit, использует камеру и сканер LiDAR на iPhone и iPad. Теперь ваши приложения могут создавать трехмерные планы этажей, включая ключевые характеристики, такие как размеры и типы мебели. Фреймворк использует датчики устройства, ML-модели и RealityKit для захвата физического окружения. Например, фреймворк просматривает записи с камеры устройства и показания LiDAR и определяет стены, окна, проемы и двери. RoomPlan распознает особенности помещения, мебель и технику, например, камин, кровать или холодильник, и передаёт данные в приложение. Для захвата используется RoomCaptureView. Есть виртуальные подсказки по мере перемещения по комнате: ⚪ Графические наложения в реальном времени отображаются поверх объектов в комнате, чтобы передать ход сканирования. ⚪ Если фреймворк требует определенного вида движения или ракурса, UI отображает инструкции, объясняющие, как расположить устройство. @iOS Dev

iOS Dev
7 998
‼️ Сегодня 30 июня, а значит, что пора наконец уже реализовать в ваших приложениях удаление профиля, если вы этого ещё не сделали. В целом, ситуация не выглядит сложной, если вы используете решения в которых нет Sign In от Apple или же у вас собственный сервер для этого 😅. Например, в одном из моих приложений используется как раз связка Sign In + Firebase, и, как оказывается, разработчики ещё не реализовали отзыв токена. К слову, iOS тоже такого инструмента не предоставляет, нужно генерить JWT и отзывать его только с помощью сервера. Вероятно, в будущем или Google, или Apple уже упростят нам жизнь. А пока что можно воспользоваться решением из треда Firebase, или же от Ивана: 👏 Вот пост, который может пригодиться (как минимум, натолкнёт на правильный ход мыслей). Всё равно, конечно, механизм не совсем тривиальный, нужно запросить код авторизации + сгенерить ключ в вашем аккаунте, но в целом ситуация уже будет выглядеть рабочей. В целом, возможно несколько путей развития событий, среди которых кажется вероятным продление этого срока, не такая тщательная проверка отзыва токена на ревью, или апгрейд SDK через какое-то время. ❤️ Слежу за развитием событий, ваш @iOS Dev

iOS Dev
7 998
Как отменить асинхронную задачу в Swift? 💡Один из возможных способов — использование DispatchWorkItem. DispatchWorkItem инка
Как отменить асинхронную задачу в Swift? 💡Один из возможных способов — использование DispatchWorkItem. DispatchWorkItem инкапсулирует работу, которая должна быть выполнена в очереди диспетчеризации или в группе диспетчеризации. Его также можно использовать в качестве обработчика события, регистрации или отмены DispatchSource. @iOS Dev

iOS Dev
7 998
Семантика версионирования для Swift Package и не только Представьте, что мы используем библиотеку из популярного пакета Swift
Семантика версионирования для Swift Package и не только Представьте, что мы используем библиотеку из популярного пакета Swift. Что случится, если выпустят новую версию с огромными изменениями в ее публичном API? Наш код может сломаться. Чтобы избежать этой проблемы, мы могли бы полагаться на единственную версию. Хуже, если каждый владелец пакета имеет свой способ работы с версиями. Такие сценарии называются адом зависимостей (dependency hell). Семантическое версионирование - это спецификация, призванная положить конец аду зависимостей. Она разделяет версии на три числа: major, minor и patch (например, 1.5.8). Вот что означает каждый номер: 🔵 Major означает, что публичный API изменился, что требует обновления нашего кода. 🔵 Minor означает, что в общедоступный API был добавлен новый код, который не нарушает существующие интеграции (обратная совместимость). 🔵 Patch означает, что были исправлены ошибки без изменения публичного API. 📖 Здесь понятно объясняется, почему нужно делать именно так на примерах.

iOS Dev
7 998
Продолжаю делиться находками с #WWDC и iOS 16 🙁 Раньше, чтобы получить путь к файлу в папке приложения, приходилось использо
Продолжаю делиться находками с #WWDC и iOS 16 🙁 Раньше, чтобы получить путь к файлу в папке приложения, приходилось использовать API FileManager, что выглядело довольно громоздко. 🙂 Теперь мы можем получать пути к системным папкам непосредственно из свойств URL. Например, чтобы получить URL каталога документов, мы можем прочитать свойство URL.documentsDirectory.

iOS Dev
7 998
Использование StoreKit для продвижения ваших приложений 💡Поделюсь советом для тех, у кого есть несколько пет-проектов или для компаний, которые интересуются возможностью кросс-промо😉. Например, прочитал пользователь книгу об iOS-разработке, покажем этот телеграм-канал приложение для покупки макбука. Есть целый ряд опций, как это сделать — получить список продуктов, кастомный лейаут для каждого, вбить название и добавить кнопку со ссылкой, например. Можно сделать проще со StoreKit, а точнее, с SKOverlay. Ниже пример (можете написать свой): func displayOverlay() { guard let scene = view.window?.windowScene else { return } let config = SKOverlay.AppConfiguration(appIdentifier: "APP_ID", position: .bottom) let overlay = SKOverlay(configuration: config) config.userDismissible = false overlay.present(in: scene) } В этом коде APP_ID — числовой идентификатор в аппстор. One more thing, если баннер не должен скрываться по свайпу: config.userDismissible = false Специально для @iOS Dev.

iOS Dev
7 998
Написал небольшой пост о Deque, что это вообще такое, а также о некоторых её плюсах. Ну и о минусах тоже, конечно.

iOS Dev
7 998
PhotosPicker: инструмент выбора фотографий с помощью SwiftUI и Transferable 📖 В этой статье рассказывается, как использовать
PhotosPicker: инструмент выбора фотографий с помощью SwiftUI и Transferable 📖 В этой статье рассказывается, как использовать новый SwiftUI PhotosPicker API, о котором было объявлено на одной из сессий #WWDC. Новый SwiftUI PhotosPicker API доступен на всех платформах: ⚪ iOS (16.0+) ⚪ iPadOS (16.0+) ⚪ macOS (13.0+) ⚪ watchOS (9.0+) Больше не нужно использовать UIViewControllerRepresentable для обертывания PHPickerViewController или его старой версии UIImagePickerController. Также приложению не нужно запрашивать доступ к библиотеке, чтобы использовать его. Кстати, из крутых фишек, пикер автоматически выберет оптимальный макет в зависимости от платформы, конфигурации и доступного пространства экрана. Не нужно беспокоиться о пользовательском интерфейсе, а время можно потратить на улучшение приложения. Для внедрения нужны два шага: 1️⃣ Использовать PhotosPicker для получения одного или нескольких экземпляров PhotosPickerItem. 2️⃣ Загрузить данные об объекте с помощью PhotosPickerItem.loadTransferable.

iOS Dev
7 998
Когда скопировал два решения со StackOverflow На самом деле это решение от изобретателя с ником The Q (подозреваю, тут есть связь с Джеймсом Бондом). По легенде, автор сломал колесо своего обычного байка. А после этого решил не выбрасывать его и распилил на две равные половины, после чего и собрал новую версию транспорта — «по формуле 1+0,5+0,5=2». 😅 Иногда хочется поделиться не только серьёзными вещами. @iOS Dev

iOS Dev
7 998
Когда скопировал два решения со StackOverflow На самом деле это решение от изобретателя с ником The Q (подозреваю, тут есть связь с Джеймсом Бондом). По легенде, автор сломал колесо своего обычного байка. А после этого решил не выбрасывать его и распилил на две равные половины, после чего и собрал новую версию транспорта — «по формуле 1+0,5+0,5=2». 😅 Иногда хочется поделиться не только серьёзными вещами. @iOS Dev

iOS Dev
7 998
Clean Architecture и MVVM в iOS: пример реализации проекта При разработке программного обеспечения важно использовать не толь
Clean Architecture и MVVM в iOS: пример реализации проекта При разработке программного обеспечения важно использовать не только паттерны проектирования, но и архитектурные паттерны. Как мы видим на графике Clean Architecture, у нас есть различные слои в приложении. Главное правило — не иметь зависимостей от внутренних слоев к внешним. Стрелки, указывающие снаружи внутрь, это правило зависимостей. Зависимости могут быть только от внешнего слоя внутрь. 📖 В этой статье на рабочем примере проекта показывается, как архитектурные паттерны MVVM и Clean Architecture могут быть применены в приложении для iOS. 🛠 Проект на Github, который может быть использован в качестве шаблона.

iOS Dev
7 998
Различные способы перехвата ошибок в Swift при использовании do-catch Конечно, заманчиво просто поймать все ошибки с помощью
Различные способы перехвата ошибок в Swift при использовании do-catch Конечно, заманчиво просто поймать все ошибки с помощью единственного catch и на этом закончить, но не все ошибки одинаковы, и вы должны относиться к ним именно так. 👍 Изучив различные способы перехвата такого рода ошибок, вы сможете создавать грамотные выражения catch. Они будут легко читаться, пониматься и соответствовать потребностям вашего вашего приложения. 📖 В этой статье автор рассматривает различные способы перехвата из throw-функций. Кроме этого, описываются типы этих функций и разбирается, что в них используется для разделения каждого catch.

iOS Dev
7 998
Субботний опенсорс 🛠 Полезный репозиторий с реализацией нескольких сортировок. Бонусом идёт наглядная демонстрация процесса (в примере для этого показано отображение для Quick Sort). Используется Swift Playgrounds. #opensource

iOS Dev
7 998
Простой способ подсчитать количество строк в ваших Swift-файлах Для этого вам понадобится терминал. Нужно перейти в корень ва
Простой способ подсчитать количество строк в ваших Swift-файлах Для этого вам понадобится терминал. Нужно перейти в корень вашего проекта и скопировать эту команду (для чистоты эксперимента тут исключено содержимое зависимостей CocoaPods): find . -path ./Pods -prune -o -name '*.swift' -print0 ! -name '/Pods' | xargs -0 wc -l Это не всё! Если вы хотите большего, то с помощью этой утилиты можно по фану определить стоимость кода в проекте💰.

iOS Dev
7 998
Xcode's Energy Organizer: поиск причин крашей при высокой нагрузке на CPU Если вы не знаете, что такое CPU Usage termination,
Xcode's Energy Organizer: поиск причин крашей при высокой нагрузке на CPU Если вы не знаете, что такое CPU Usage termination, вам повезло. Это не только один из самых неприятных крашей в iOS, но он даже не рассматривается системой как сбой. Об этом не сообщается Firebase, поэтому о сбое вы даже не узнаете. Ну, пока ваши пользователи не начнут сообщать вам об этом. Очень неприятная вещь! 🤔 Что такое CPU Exceptions в iOS? Согласно Apple, ваше приложение может грузить процессор — до тех пор, пока оно в foreground и не делает это долго. Однако если оно в фоне, вам необходимо сократить использование процессора. Это не то чтобы большая проблема, если задача выполняется единожды. Но если вы постоянно используете более 80% процессора в течение одной минуты, iOS без предупреждения закроет приложение. Это называется CPU Exception, или "прекращение работы при высокой нагрузке на процессор". 📖 В статье разбирается это понятие, рассматривается Xcode's Energy Organizer и приводится совет для предотвращения.

iOS Dev
7 998
Применение default для подсчёта количества символов в строке Задача подсчёта символов в строках является одним из потенциальн
Применение default для подсчёта количества символов в строке Задача подсчёта символов в строках является одним из потенциальных вопросов во многих алгоритмических секциях. Вы можете легко установить значение по умолчанию для ключа в словаре. Для этого как раз можно воспользоваться ключевым словом default. 🛠 На скриншоте я показал два способа для подсчёта повторений букв в строке «Hello iOS Devs». 💼 Конечно, вариантов подсчёта может быть намного больше, но всегда полезно расширить свой инструментарий.

iOS Dev
7 998
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков. Собрал в один по
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков. Собрал в один пост выжимку по фактам для Swift и Objective-C, больше графиков и сравнений можно посмотреть здесь. Для Swift ❤️ 63% любят этот язык,😱 37% считают его неприятным. 💵 Медианная зарплата составляет $ 78 468 в год. Для Objective-C ❤️ 24% любят, 😱 76% считают его неприятным. 💵 Медианная зарплата $ 83 165 в год. Может на нём не так приятно писать, но пять тысяч долларов это пять тысяч долларов 😅. 🛠 Удовлетворённость средой разработки Xcode равная, 50% считают его годным инструментом, а 50% не очень. 💪Лидеры по зарплатам Closure и Erlang — разработчикам, пишущим на одном из этих языков, платят в среднем $ 100 000 в год.

iOS Dev
7 998
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков. Собрал в один по
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков. Собрал в один пост выжимку по фактам для Swift и Objective-C, больше графиков и сравнений можно посмотреть здесь. Для Swift ❤️ 63% любят этот язык,😱 37% считают его неприятным. 💵 Медианная зарплата составляет $ 78 468 в год. Для Objective-C ❤️ 24% любят, 😱 76% считают его неприятным. 💵 Медианная зарплата $ 83 165 в год. Может на нём не так приятно писать, но пять тысяч долларов это пять тысяч долларов 😅. 🛠 Удовлетворённость средой разработки Xcode равная, 50% считают его годным инструментом, а 50% не очень. 💪Лидеры по зарплатам Closure и Erlang — разработчикам, пишущим на одном из этих языков, платят в среднем $ 100 000 в год.

iOS Dev
7 998
Стратегии обращения к пользователям с просьбой оценить ваше приложение 👏 📺 Многие пользователи смотрят, сколько звезд у при
Стратегии обращения к пользователям с просьбой оценить ваше приложение 👏 📺 Многие пользователи смотрят, сколько звезд у приложения, прежде чем принять решение о его загрузке. 📖 В этой статье рассказывается про один из подходов. Что НЕ следует делать 🔴 Показывать алерт при запуске. 🔴 Показывать его слишком рано. 🔴 Показывать при любом общем для всех действии. Стратегии получения максимальной отдачи 🟢 Ориентироваться на уникальное действие в приложении. 🟢 Совмещать оценку с существующими. Например, если пользователь уже что-то положительно оценил в вашем приложении. 🟢 Внедрите систему, основанную на весе, для управления отображением ваших алертов. Например: — Открытие твита 1 балл. — Лайк твита 3 балла. — Создание твита 5 баллов. Если пользователь достигнет нужного порога — показываем запрос. 🙋Но вы должны использовать этот инструмент очень эффективно, потому что он очень ограничен, и если вы не будете осторожны, это может привести к печальному результату.