Telegram Web Link
Вычисление математических выражений с помощью Swift
От научного калькулятора до приложения для работы с электронными таблицами

Арифметические выражения могут быть записаны в одной из трех форм нотаций: infix, prefix, postfix.

Несмотря на то, что инфиксную нотацию труднее всего обрабатывать на компьютерах, она представляет собой то, как выражения пишутся и распознаются людьми.

Однако, поскольку инфиксные выражения не подходят для простого вычисления, их следует преобразовать либо в префиксную, либо в постфиксную нотацию.

В двух больших материалах Elina Semenko рассказывает о каждом типе нотаций, совершает краткий экскурс в историю, и объясняет на примерах необходимые преобразовнаия, используя Swift.

📖 Первая часть. Преобразование инфиксных выражений в постфиксные выражения.

📖 Вторая часть. Улучшение алгоритма и пример использования NSExpression.

Бонусом рассматривается применение фреймворка JavaScriptCore (в чём может быть польза, и почему его стоит использовать в очень редких ситуациях).

@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация видеоплеера на Swift с помощью RealityKit

Apple продолжает исследование и изредка появляются анонсы об очках за $ 3 000. На мой взгляд, не стоит недооценивать потенциальный пул аудитории, которая захочет (и сможет) их себе позволить, и поэтому для прокачивания этой области изредка можно изучать и обращать внимание на связанные с технологией вещи.

Например, зачем необходим огромный физический телевизор, если вы можете транслировать свой контент на виртуальный, который можно разместить где угодно.

К слову, энтузисты продолжают изучать различные возможности RealityKit, и некоторые вещи реализовать намного проще, чем кажется.

📖 Например, David Cordero показывает, что создать плеер, используя этот фреймворк, совсем несложно.

@iOS Dev
Внимание, вопрос!
Каким будет результат выполнения кода со скриншота выше?
Anonymous Quiz
40%
true
23%
false
1%
nil
27%
Код не скомпилируется
9%
Код скомпилируется, но будет ошибка в рантайме
iOS Dev
Каким будет результат выполнения кода со скриншота выше?
Как ожидалось, голоса разделились
Не переживайте, если не угадали правильный ответ, сейчас всё объясню

Иногда Swift может быть сложнее, чем кажется на первый взгляд, и таить в себе подводные камни, о которых помнить всегда довольно непросто. Хотя, казалось бы, что сложного в соответствии Equatable.

Почему сравнение двух массивов с одинаковым содержимым возвращает false?

🔘
Тип Array связан с классом Foundation NSArray (подробнее тут).

🔘
NSArray не объявляет функцию ==(_:_:), поэтому он возвращается к функции NSObject ==(_:_:), которая вызывает isEqual.

🔘
isEqual NSArray сравнивает объекты путем приведения к AnyHashable.

И поэтому используется реализация NSObject ==(_:_:), а не реализация A.

Реализация NSObject ==(_:_:) проверяет isEqual, которая возвращает false, поскольку два элемента не совпадают в памяти.

Что сделать, чтобы получить true?

Лучший способ — заставить подкласс NSObject использовать кастомный isEqual с помощью override.

Кстати, если изначально сделать A структурой или обычным классом, для [A] не будет определено ==(_:_:). И вот как раз в этом случае компилятор поймает нашу ошибку.

И one more thing:

Если вы используете Swiftlint, на самом деле есть правило nsobject_prefer_isequal, которое можно использовать.

Источник вопроса: Noah Gilmore.

@iOS Dev — неочевидные ответы на любопытные вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Посмотрите, какие репозитории пользуются наибольшей популярностью у разработчиков

Иван в своём канале собрал статистику по самым успешным репозиториям для iOS, и если алгоритмы на Swift ожидаемо в топ-5, то, например, активно продвигаемый фреймворк Wave для анимаций от
Janum Trivedi набрал свои звёзды благодаря крутым примерам из твиттера (и не в последнюю очередь благодаря вашим отзывам после этого поста).

🤩 Кстати, недавно Apple обновили свой курс для разработчиков, и об этом можно почитать вот тут:

🌐 Анонс Apple курса для разработчиков длительностью в 14 часов

@iOS Dev – сам топ смотрите ниже😉
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Код Воробья для iOS разработчиков
Топ-5 репозиториев, которые набрали больше всего звёзд ⭐️ на GitHub за 2022 год:

- Алгоритмы на Swift от Apple.
- Приложение на SwiftUI с общим кодом для Mac, iPad и iPhone. Тоже от Apple.
- DivKit рисует интерфейс с сервера. Проект Яндекса.
- Настраиваемые spring-анимации.
- Графики на Swift Charts.

В нашем чате ежедневно приходит топ-репозиториев за день.
Итерация сообщений веб-сокетов с помощью async/await в Swift

В iOS 13 мы получили возможность легко отправлять и получать данные с помощью веб-сокетов через URLSession.

С помощью async/await появилась возможность получать данные с серверов, используя ключевое слово await.

📖 В этом материале объясняется, как создать собственный механизм для удобного асинхронного перебора сообщений при использовании веб-сокетов, особое внимание уделяется URLSessionWebSocketTask и AsyncThrowingStream.

@iOS Dev
Передача данных в iOS: delegates, notifications, closures

Несомненно, это обязательные знания для каждого разработчика, независимо от того, является ли он новичком.

Знание доступных инструментов и методов, того, что работает лучше всего, где и когда, имеет решающее значение для правильного процесса разработки.

В конце концов, возможность отправлять сообщения и данные туда и обратно между классами — это одна из первых вещей, о которых должен узнать разработчик.

В этой статье рассматриваются следующие способы для обмена данными внутри приложения:

1️⃣ Паттерн delegate.

2️⃣ Notifications (они же уведомления).

3️⃣ Closures & action handlers.

🛠 Код доступен по ссылке на Github.

Кстати, если вы хотите узнать о способах обмен данными между приложениями, то рекомендую посмотреть вот тут.

@iOS Dev
Пример создания нативного приложения с использованием реализации Core ML Stable Diffusion от Apple

В декабре в Apple представили оптимизацию Core ML для Stable Diffusion в macOS 13.1 и iOS 16.2, а также код для начала развертывания на устройствах Apple Silicon.

Существует ряд причин, по которым развертывание Stable Diffusion на устройстве в приложении предпочтительнее серверного подхода.

1️⃣ Во-первых, конфиденциальность конечного пользователя защищена, поскольку любые данные, предоставленные пользователем в качестве входных данных для модели, остаются на устройстве пользователя.

2️⃣ Во-вторых, после первоначальной загрузки пользователям не требуется подключение к Интернету для использования модели.

3️⃣ Наконец, локальное развертывание этой модели позволяет разработчикам сократить или полностью исключить свои расходы, связанные с сервером.

🔗 В этом репозитории содержатся подробные инструкции по тестированию и развертыванию.

🔗 Пример реализации в нативном приложении на Swift.

Внимание, по очевидным причинам требования к совместимости довольно существенные:

🔘 macOS Ventura 13.1, iOS/iPadOS 16.2, Xcode 14.2.

🔘 Время работы:

~8s in macOS on MacBook Pro M1 Max (64 GB). Model: Stable Diffusion v2-base, ORIGINAL attention implementation, CPU + GPU.
23 ~ 30s on iPhone 13 Pro. Model: Stable Diffusion v2-base, SPLIT_EINSUM attention, CPU + Neural Engine, memory reduction enabled.

@iOS Dev
Поиск эффективного алгоритма для определения среднего цвета изображения

Поиск среднего цвета изображения — хороший трюк, который можно иметь в своем наборе инструментов для оживления ваших экранов.

Например, в iOS он используется Apple для создания своих красивых виджетов на хоумскрине.

Существует множество статей о том, как это сделать на iOS, но весь код, например, используя Core Image.

📖 Но, как рассказывает автор в этом материале, здесь могут быть свои подводные камни, и описывает ещё два подхода, которые можно использовать.

@iOS Dev
This media is not supported in your browser
VIEW IN TELEGRAM
Даже в сложных системах, и даже у Apple встречаются проблемы

Например, приложение часов macOS обновляет свой пользовательский интерфейс с помощью таймеров, и эти таймеры добавляются только в defaultRunLoopMode, в результате чего пользовательский интерфейс перестает обновляться (попросту фризятся часы) при открытии и отслеживании меню.

А вот если бы они прочитали этот пост в нашем канале, то такой проблемы бы не было:

Полное руководство по использованию таймеров в Swift

@iOS Dev — на самом деле работа со временем может быть куда труднее
Как отменить фоновую задачу в Swift при использовании async/await

Синтаксис async/await, представленный в Swift 5.5, позволяет писать асинхронный код в удобочитаемом виде.

Асинхронное программирование может повысить производительность приложения, но важно иметь возможность отменять неиспользуемые таски, чтобы они не вмешивались в работу приложения.

📖 В этой статье показано, как явно отменить задачу, и показано, как при этом автоматически отменяются дочерние задачи.

Кроме этого, будет полезно перед этим прочесть и этот материал:

🌐 Пример работы с async let для параллельного выполнения фоновых задач в Swift

@iOS Dev
Сегментация изображения (и применение в реальном времени) при работе с фреймворком Vision

Компьютерное зрение набирает всё большую популярность. Его использование включает обнаружение рака, классификацию клеток, анализ транспортных потоков, анализ спортивных событий в реальном времени и многое другое.

Фреймворк Vision позволяет выполнять различные задачи, такие как отслеживание лица, обнаружение штрих-кода и регистрация изображений.

В iOS 15 Apple представила API в фреймворке Vision для сегментации людей, который также поддерживает портретный режим.

📖 В этом материале есть ответы на следующие вопросы:

🔘 Что такое сегментация изображения и различные типы сегментации.

🔘 Как создать сегментацию человека для фото.

🔘 Понимание различных уровней качества и компромиссов производительности.

🔘 Создание сегментации людей для лайв-видео.

🔘 Лучшие практики для использования сегментации.

🤩 Кстати, ранее был пост о том, как определять контуры с помощью Vision.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Для чего используются Task groups в Swift: объяснение с примерами кода

Task groups (группы задач) в Swift позволяют объединять несколько параллельных задач и ждать возвращения результата, когда все задачи будут завершены.

⭐️ Например, их можно использовать для объединения нескольких ответов на запросы API в один объект ответа.

Вы можете рассматривать task group как контейнер нескольких дочерних задач.

Дочерние задачи могут выполняться параллельно или последовательно, но task group будет помечена как завершенная только после выполнения ее дочерних задач.

📖 В этом материале рассматривается, как и когда использовать группы задач, как реализовать отмену и как избежать ошибок, связанных с task group.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание iOS-приложения в стиле Trello с помощью Drag & Drop API

Drag & Drop — это взаимодействие с пользователем, с помощью которого можно перемещать данные по экрану.

Эта фича активно используется такими приложениями, как Trello, Jira и многими другими для перемещения элементов между досками.

📖 В этом примере используется API перетаскивания для создания приложения, похожего на Trello, с несколькими основными функциями:

1️⃣ Создание доски.

2️⃣ Добавление элементов на доску.

3️⃣ Перемещение элементов между досками с помощью перетаскивания.

🛠 Пример итогового приложения доступен на Github.

@iOS Dev
Эволюция архитектуры приложения *Facebook для iOS

*Facebook для iOS (FBiOS) — старейшая мобильная кодовая база в *Meta.

С тех пор как приложение было переписано в 2012 году, над ним работали тысячи инженеров, оно было отправлено миллиардам пользователей и оно может поддерживать работу сотен инженеров одновременно.

После многих лет итерации кодовая база не похожа на типичную кодовую базу iOS:

🔘 Там полно C++, Objective-C(++) и Swift.

🔘 Она имеет десятки динамически загружаемых библиотек (dylib) и так много классов, что их невозможно загрузить в Xcode сразу.

🔘 Apple SDK практически не используется в чистом виде — все было обернуто или заменено собственной абстракцией.

🔘 В приложении активно используется генерация кода с помощью Buck (кастомной системы сборки).

🔘 Без интенсивного кэширования нашей системы сборки инженерам пришлось бы провести целый рабочий день в ожидании сборки приложения.

📖 Чтобы отпраздновать 10-летний юбилей кодовой базы, разработчики рассказали о технических решениях, лежащих в основе этой эволюции, а также об их историческом контексте.

*Facebook и Instagram продукты компании Meta, которая признана в России экстремистской организацией, деятельность ее сервисов Facebook и Instagram в стране запрещена.

@iOS Dev
Detached tasks в Swift: определение и примеры коды

Detached tasks (отсоединенные задачи) позволяют создать новую задачу верхнего уровня и отключиться от текущего структурированного контекста параллелизма.

Хотя отключение от структурированного параллелизма звучит ужасно, все же есть примеры использования, в которых вы можете извлечь выгоду.

Тем не менее, важно знать о последствиях, чтобы убедиться, что вы знаете, что делаете.

📖 В этом материале вы узнаете:

1️⃣ Что представляет из себя detached task?

2️⃣ Какие риски существуют при использовании таких задач.

3️⃣ Когда использовать detached tasks?

@iOS Dev
Обнаружение джейлбрейка iOS в 2023 году: необходимость, способы, примеры

🧑‍💻 Джейлбрейк — это использование эксплойта для повышения привилегий для снятия программных ограничений, наложенных Apple, среди которых:

1️⃣ Модификация операционной системы (обеспечивается «заблокированным загрузчиком»).

2️⃣ Установка неофициально одобренных приложений (известных как «твики») путем загрузки неопубликованных приложений с использованием менеджеров пакетов, таких как Cydia или Sileo.

3️⃣ Предоставление пользователю повышенных привилегий уровня администратора (рут-доступа).

Всё это может влиять на уровень безопасности приложений.

📖 В этом материале Marco Eidinger рассказывает, какие существуют методы обнаружения, и делится примерами кода для предотвращения такого доступа в ваших приложениях.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
⭐️ Доступен шорт-лист лучших технических статей за 2022 год на хабре

Рекомендую почитать не только про мобильную разработку, но и другие категории, там много интересного.

В будущем каждый материал будет оцениваться по следующим параметрам: техническая грамотность, глубина проработки темы, актуальность, лаконичность, подача и оформление.

От себя бы порекомендовал вот эти три материала:

1️⃣ Как научиться чувствовать треки? Визуализация музыкальных частот в Моей волне. К сожалению, самого программирования немного, но интересны этапы и рассуждения разработчиков.

2️⃣ Анимации и вибрации: как задизайнить фидбэк слайдера оплаты. Про то, что под реализацией красивых компонентов скрывается множество подводных камней и на пути могут возникнуть сложности, о которых вы и не подозревали.

3️⃣ FPS не падай, девайс не грейся. О просадке FPS, фризах, сторонних SDK и из взаимосвязи.

🧑‍💻 Ну, и в качестве бонуса — моя статья о создании медиаредактора, формулах и анимациях.

Рад оказаться в такой компании авторов, итоги будут +- через тысячу лет (в апреле), обязательно поделюсь.

@iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
2024/11/20 08:35:54
Back to Top
HTML Embed Code: