Обложка канала

iOS Dev. Страница 18

iOS разработчик, который делится фишками, своим опытом и опытом других. В этом канале вы сможете найти истории из жизни, подходы к реализации а также новости и тренды из мира iOS-разработки Авторский канал, iOS разработка

  • iOS Dev

    Построение 3D-диаграмм с помощью SceneKit и SwiftUI В прошлом месяце Apple анонсировала диаграммы на #WWDC, о них уже было написано несколько туториалов и даже есть целый репозиторий с примерами практически всех видов графиков. Автор же этого материала пошёл дальше, и уделил своё внимание построению 3D круговых диаграмм с помощью SceneKit. Это еще и хороший повод взглянуть на несколько других аспектов фреймворка. 📖 Даже абстрагируясь от SwiftUI, в статье можно прочесть про использование математики для построения путей и расширить свои знания о применении UIBezierPath. @iOS Dev
  • iOS Dev

    2 000 iOS-разработчиков в канале Невероятно, amazing, как это вообще возможно?! 🛠 Поделюсь своим рецептом: 400 постов, 15 публикаций на хабре, 12 статей в телеграфе, одна проведённая трансляция #WWDC и время, потраченное на разборы новинок и не только. Но всё это не имеет значения, если бы вы не читали этот канал. Поэтому — спасибо, коллеги! ❤️ Наш путь продолжается, туториалы, хаки, фишки Xcode и не только — в канале @iOS Dev 👍❤️🔥👏🎉 - вы знаете, что с этим делать😅 Чуть не забыл, помните небольшую традицию в этом канале? Гифка, как обычно, использует какой-то не совсем обычный компонент, на этот раз вы можете посмотреть реализацию здесь.
  • iOS Dev

    Полное руководство по использованию таймеров в Swift О создании, повторениях и не только. Класс Timer в Swift - это гибкий способ планирования будущих задач, как однократно, так и многократно. 📖 В этом руководстве представлены несколько способов работы с ним, а также решение частых проблем. Примечание. Прежде чем начать, автор напоминает, что использование таймеров требует значительных затрат энергии. Будут рассмотрены способы смягчения этой проблемы. 🧐 Несмотря на это, в целом любой вид таймера должен вывести систему из состояния покоя, чтобы запустить работу, а это влечет за собой соответствующие затраты. @iOS Dev
  • Реклама

  • iOS Dev

    Написал туториал по отображению лицензий из CocoaPods в приложениях Главная фишка — для этого почти не надо писать код, в pod-файле не считается же? 😅. Прочесть можно прямо здесь, в телеграме. 😎 Или же на хабре. @iOS Dev
    Как добавить список лицензий и благодарностей CocoaPods и при чём тут Settings.Bundle?

    Для этого даже не понадобится писать код (ну почти). CocoaPods по мнению многих доживает свои славные времена, ведь развитие и распространение SPM (Swift Package Manager) продолжает набирать обороты. Но для тех, кто из вас до сих пор использует CocoaPods в проде, эта статья может оказаться актуальной. В своих проектах я всё ещё использую CocoaPods и задался вопросом, как же отобразить список лицензий. И для сохранения авторских прав, и в качестве благодарности. Для этого нам понадобится связка плагина CocoaPods…

    Telegraph
  • iOS Dev

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

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

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

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

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

    Использование 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

    Deque в Swift, её преимущества и недостатки

    Deque (произносится как "дек", не декью и не декуе) работает так же, как и Array: это упорядоченная, с произвольным доступом, изменяемая, заменяемая по диапазону коллекция с целочисленными индексами. Основное преимущество Deque перед Array заключается в том, что она поддерживает эффективные вставки и удаления с обоих концов. Это делает Deque отличным выбором в тех случаях, когда нам нужна очередь "первый вошел - первый вышел". Чтобы подчеркнуть это, Deque предоставляет удобные операции для вставки и удаления…

    Telegraph
  • iOS Dev

    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

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

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

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

  • iOS Dev

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

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

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