iOS Dev
Ir al canal en Telegram
👨💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift
Mostrar más7 999
Suscriptores
-124 horas
+457 días
+7630 días
Archivo de publicaciones
7 998
RoomPlan в iOS 16 — 3D-планы этажей в ваших приложениях
Это новый API Swift, работающий на базе ARKit, использует камеру и сканер LiDAR на iPhone и iPad. Теперь ваши приложения могут создавать трехмерные планы этажей, включая ключевые характеристики, такие как размеры и типы мебели.
Фреймворк использует датчики устройства, ML-модели и RealityKit для захвата физического окружения. Например, фреймворк просматривает записи с камеры устройства и показания LiDAR и определяет стены, окна, проемы и двери.
RoomPlan распознает особенности помещения, мебель и технику, например, камин, кровать или холодильник, и передаёт данные в приложение.
Для захвата используется RoomCaptureView. Есть виртуальные подсказки по мере перемещения по комнате:
⚪ Графические наложения в реальном времени отображаются поверх объектов в комнате, чтобы передать ход сканирования.
⚪ Если фреймворк требует определенного вида движения или ракурса, UI отображает инструкции, объясняющие, как расположить устройство.
@iOS Dev7 998
‼️ Сегодня 30 июня, а значит, что пора наконец уже реализовать в ваших приложениях удаление профиля, если вы этого ещё не сделали.
В целом, ситуация не выглядит сложной, если вы используете решения в которых нет Sign In от Apple или же у вас собственный сервер для этого 😅.
Например, в одном из моих приложений используется как раз связка Sign In + Firebase, и, как оказывается, разработчики ещё не реализовали отзыв токена. К слову, iOS тоже такого инструмента не предоставляет, нужно генерить JWT и отзывать его только с помощью сервера.
Вероятно, в будущем или Google, или Apple уже упростят нам жизнь. А пока что можно воспользоваться решением из треда Firebase, или же от Ивана:
👏 Вот пост, который может пригодиться (как минимум, натолкнёт на правильный ход мыслей).
Всё равно, конечно, механизм не совсем тривиальный, нужно запросить код авторизации + сгенерить ключ в вашем аккаунте, но в целом ситуация уже будет выглядеть рабочей.
В целом, возможно несколько путей развития событий, среди которых кажется вероятным продление этого срока, не такая тщательная проверка отзыва токена на ревью, или апгрейд SDK через какое-то время.
❤️ Слежу за развитием событий, ваш @iOS Dev
7 998
Как отменить асинхронную задачу в Swift?
💡Один из возможных способов — использование DispatchWorkItem.
DispatchWorkItem инкапсулирует работу, которая должна быть выполнена в очереди диспетчеризации или в группе диспетчеризации. Его также можно использовать в качестве обработчика события, регистрации или отмены DispatchSource.
@iOS Dev7 998
Семантика версионирования для Swift Package и не только
Представьте, что мы используем библиотеку из популярного пакета Swift. Что случится, если выпустят новую версию с огромными изменениями в ее публичном API? Наш код может сломаться. Чтобы избежать этой проблемы, мы могли бы полагаться на единственную версию. Хуже, если каждый владелец пакета имеет свой способ работы с версиями. Такие сценарии называются адом зависимостей (dependency hell).
Семантическое версионирование - это спецификация, призванная положить конец аду зависимостей. Она разделяет версии на три числа: major, minor и patch (например, 1.5.8). Вот что означает каждый номер:
🔵 Major означает, что публичный API изменился, что требует обновления нашего кода.
🔵 Minor означает, что в общедоступный API был добавлен новый код, который не нарушает существующие интеграции (обратная совместимость).
🔵 Patch означает, что были исправлены ошибки без изменения публичного API.
📖 Здесь понятно объясняется, почему нужно делать именно так на примерах.
7 998
Продолжаю делиться находками с #WWDC и iOS 16
🙁 Раньше, чтобы получить путь к файлу в папке приложения, приходилось использовать API
FileManager, что выглядело довольно громоздко.
🙂 Теперь мы можем получать пути к системным папкам непосредственно из свойств URL.
Например, чтобы получить URL каталога документов, мы можем прочитать свойство URL.documentsDirectory.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.7 998
Написал небольшой пост о Deque, что это вообще такое, а также о некоторых её плюсах. Ну и о минусах тоже, конечно.
7 998
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.7 998
Когда скопировал два решения со StackOverflow
На самом деле это решение от изобретателя с ником The Q (подозреваю, тут есть связь с Джеймсом Бондом).
По легенде, автор сломал колесо своего обычного байка. А после этого решил не выбрасывать его и распилил на две равные половины, после чего и собрал новую версию транспорта — «по формуле 1+0,5+0,5=2».
😅 Иногда хочется поделиться не только серьёзными вещами.
@iOS Dev
7 998
Когда скопировал два решения со StackOverflow
На самом деле это решение от изобретателя с ником The Q (подозреваю, тут есть связь с Джеймсом Бондом).
По легенде, автор сломал колесо своего обычного байка. А после этого решил не выбрасывать его и распилил на две равные половины, после чего и собрал новую версию транспорта — «по формуле 1+0,5+0,5=2».
😅 Иногда хочется поделиться не только серьёзными вещами.
@iOS Dev
7 998
Clean Architecture и MVVM в iOS: пример реализации проекта
При разработке программного обеспечения важно использовать не только паттерны проектирования, но и архитектурные паттерны.
Как мы видим на графике Clean Architecture, у нас есть различные слои в приложении. Главное правило — не иметь зависимостей от внутренних слоев к внешним. Стрелки, указывающие снаружи внутрь, это правило зависимостей. Зависимости могут быть только от внешнего слоя внутрь.
📖 В этой статье на рабочем примере проекта показывается, как архитектурные паттерны MVVM и Clean Architecture могут быть применены в приложении для iOS.
🛠 Проект на Github, который может быть использован в качестве шаблона.
7 998
Различные способы перехвата ошибок в Swift при использовании do-catch
Конечно, заманчиво просто поймать все ошибки с помощью единственного
catch и на этом закончить, но не все ошибки одинаковы, и вы должны относиться к ним именно так.
👍 Изучив различные способы перехвата такого рода ошибок, вы сможете создавать грамотные выражения catch. Они будут легко читаться, пониматься и соответствовать потребностям вашего вашего приложения.
📖 В этой статье автор рассматривает различные способы перехвата из throw-функций. Кроме этого, описываются типы этих функций и разбирается, что в них используется для разделения каждого catch.7 998
Субботний опенсорс
🛠 Полезный репозиторий с реализацией нескольких сортировок.
Бонусом идёт наглядная демонстрация процесса (в примере для этого показано отображение для Quick Sort).
Используется Swift Playgrounds.
#opensource
7 998
Простой способ подсчитать количество строк в ваших Swift-файлах
Для этого вам понадобится терминал. Нужно перейти в корень вашего проекта и скопировать эту команду (для чистоты эксперимента тут исключено содержимое зависимостей CocoaPods):
find . -path ./Pods -prune -o -name '*.swift' -print0 ! -name '/Pods' | xargs -0 wc -l
Это не всё! Если вы хотите большего, то с помощью этой утилиты можно по фану определить стоимость кода в проекте💰.7 998
Xcode's Energy Organizer: поиск причин крашей при высокой нагрузке на CPU
Если вы не знаете, что такое CPU Usage termination, вам повезло. Это не только один из самых неприятных крашей в iOS, но он даже не рассматривается системой как сбой.
Об этом не сообщается Firebase, поэтому о сбое вы даже не узнаете. Ну, пока ваши пользователи не начнут сообщать вам об этом. Очень неприятная вещь!
🤔 Что такое CPU Exceptions в iOS?
Согласно Apple, ваше приложение может грузить процессор — до тех пор, пока оно в foreground и не делает это долго.
Однако если оно в фоне, вам необходимо сократить использование процессора. Это не то чтобы большая проблема, если задача выполняется единожды.
Но если вы постоянно используете более 80% процессора в течение одной минуты, iOS без предупреждения закроет приложение.
Это называется CPU Exception, или "прекращение работы при высокой нагрузке на процессор".
📖 В статье разбирается это понятие, рассматривается Xcode's Energy Organizer и приводится совет для предотвращения.
7 998
Применение default для подсчёта количества символов в строке
Задача подсчёта символов в строках является одним из потенциальных вопросов во многих алгоритмических секциях.
Вы можете легко установить значение по умолчанию для ключа в словаре. Для этого как раз можно воспользоваться ключевым словом
default.
🛠 На скриншоте я показал два способа для подсчёта повторений букв в строке «Hello iOS Devs».
💼 Конечно, вариантов подсчёта может быть намного больше, но всегда полезно расширить свой инструментарий.7 998
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков.
Собрал в один пост выжимку по фактам для Swift и Objective-C, больше графиков и сравнений можно посмотреть здесь.
Для Swift
❤️ 63% любят этот язык,😱 37% считают его неприятным.
💵 Медианная зарплата составляет $ 78 468 в год.
Для Objective-C
❤️ 24% любят, 😱 76% считают его неприятным.
💵 Медианная зарплата $ 83 165 в год.
Может на нём не так приятно писать, но пять тысяч долларов это пять тысяч долларов 😅.
🛠 Удовлетворённость средой разработки Xcode равная, 50% считают его годным инструментом, а 50% не очень.
💪Лидеры по зарплатам Closure и Erlang — разработчикам, пишущим на одном из этих языков, платят в среднем $ 100 000 в год.
7 998
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков.
Собрал в один пост выжимку по фактам для Swift и Objective-C, больше графиков и сравнений можно посмотреть здесь.
Для Swift
❤️ 63% любят этот язык,😱 37% считают его неприятным.
💵 Медианная зарплата составляет $ 78 468 в год.
Для Objective-C
❤️ 24% любят, 😱 76% считают его неприятным.
💵 Медианная зарплата $ 83 165 в год.
Может на нём не так приятно писать, но пять тысяч долларов это пять тысяч долларов 😅.
🛠 Удовлетворённость средой разработки Xcode равная, 50% считают его годным инструментом, а 50% не очень.
💪Лидеры по зарплатам Closure и Erlang — разработчикам, пишущим на одном из этих языков, платят в среднем $ 100 000 в год.
7 998
Стратегии обращения к пользователям с просьбой оценить ваше приложение 👏
📺 Многие пользователи смотрят, сколько звезд у приложения, прежде чем принять решение о его загрузке.
📖 В этой статье рассказывается про один из подходов.
Что НЕ следует делать
🔴 Показывать алерт при запуске.
🔴 Показывать его слишком рано.
🔴 Показывать при любом общем для всех действии.
Стратегии получения максимальной отдачи
🟢 Ориентироваться на уникальное действие в приложении.
🟢 Совмещать оценку с существующими. Например, если пользователь уже что-то положительно оценил в вашем приложении.
🟢 Внедрите систему, основанную на весе, для управления отображением ваших алертов. Например:
— Открытие твита 1 балл.
— Лайк твита 3 балла.
— Создание твита 5 баллов.
Если пользователь достигнет нужного порога — показываем запрос.
🙋Но вы должны использовать этот инструмент очень эффективно, потому что он очень ограничен, и если вы не будете осторожны, это может привести к печальному результату.
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
