EasySwift iOS🍏
3.03K subscribers
268 photos
8 videos
393 links
Все самое интересное в мире iOS разработки 🧑🏻‍💻

Предложить статью или новость: @EasySwiftBot

По всем вопросам обращаться к @itereznikov
Download Telegram
Swift 6 Refactoring in a Camera App - SLIT_STUDIO Development Log

➡️ Swift 6 требует от разработчиков учитывать новые требования к потокобезопасности, что создает сложности при миграции, особенно с фреймворками Apple.

⚙️ Разработчик Megabits успешно адаптировал приложение SLIT_STUDIO, используя новые компоненты, такие как actor и GlobalActor, для улучшения структуры кода и безопасности.

⚠️ AVFoundation использует GCD, что не совместимо с Swift Concurrency, требуя от разработчиков находить нестандартные решения для обеспечения потокобезопасности.

➡️ Код приложения был перегружен, и Megabits разделил его на более управляемые компоненты, такие как CaptureManageObject и Recorder, чтобы улучшить читаемость и поддержку.

💡 Важно не только исправлять ошибки, но и переосмысливать структуру приложения, чтобы избежать проблем с потокобезопасностью и улучшить общее качество кода.

@globalActor actor CameraActor: GlobalActor {
static let shared = CameraActor()
}

@CameraActor class Camera: NSObject {
let captureQueue = DispatchQueue(label: "com.linearCCD.capture")
var captureSession = AVCaptureSession()

var currentDevice: AVCaptureDevice?

var videoInput: AVCaptureDeviceInput?
var audioInput: AVCaptureDeviceInput?
var videoOutput: AVCaptureVideoDataOutput?
var audioOutput: AVCaptureAudioDataOutput?
...
}

@CameraActor class CapturePipeline: NSObject, ObservableObject {
let renderContext: MTIContext
var renderPoolForFilter = RenderPool()
var renderPoolForRecordingImage = RenderPool()
var cameraFeedRenderTask: Task<(), Never>?
...
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Для чего я написал собственный аудиопроигрыватель

👀 Автор разработал собственный аудиопроигрыватель из-за неудовлетворенности существующими решениями, такими как Apple Music и сторонние приложения, которые не обеспечивали нужного функционала для управления локальной музыкальной библиотекой.

⚙️ Приложение было создано с использованием SwiftUI для упрощения разработки интерфейса и управления данными, а также SQLite для реализации полнотекстового поиска и хранения данных.

⚠️ Приложение включает в себя гибкий поиск по папкам iCloud, управление плейлистами и воспроизведение музыки с возможностью настройки очереди и управления громкостью.

🫠 Существующие приложения часто требуют подписки, имеют ограниченные функции и неудобный интерфейс, что побудило автора создать собственное решение.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Unique values in Swift: Removing duplicates from an array

В Swift нет встроенных методов для удаления дубликатов из массива, поэтому необходимо использовать альтернативные подходы, такие как использование Set или создание расширения для массива.

➡️ Set по умолчанию содержит только уникальные значения и подходит, если порядок элементов не важен. Это более производительный вариант для решения проблемы уникальности.

➡️ Если порядок важен, можно создать расширение для массива, которое использует протокол Hashable для фильтрации дубликатов, обеспечивая линейную временную сложность.

👀 Выбор между Set и расширением массива зависит от необходимости сохранения порядка элементов: используйте Set, если порядок не важен, и расширение массива, если он важен.

extension Sequence where Iterator.Element: Hashable {
func unique() -> [Iterator.Element] {
var seen: Set<Iterator.Element> = []
return filter { seen.insert($0).inserted }
}
}

print(array.unique()) // prints: [1, 2, 3]
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Как мы превратили iPhone в лабораторный микроскоп с AI и BLE: real-world edge-приложение

⚡️ Крутая статья о применении iPhone в медицине. Тут и задачи компьютерного зрения, и оптимизации кода, и работа с AI.

⚙️ Система превращает обычный лабораторный микроскоп в цифровой сканер с автоматической подачей и съемкой, используя iPhone для управления и анализа клеток крови.

💵 Разработка недорогого комплекта автоматизации микроскопа, стоимость которого составляет ~800 $, что значительно дешевле, чем традиционные автоматические системы, стоящие от 10к $.

💡 Используемые технологии включают AI для распознавания клеток, Bluetooth Low Energy для управления моторизованным столиком и мощные процессоры iPhone для обработки изображений в реальном времени.

🔥 Мобильное приложение обрабатывает видеопоток, детектирует и классифицирует клетки, управляет движением предметного столика и отправляет данные на веб-сервер для анализа.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥101
Using AI and Cursor to localize Xcode String Catalogs


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

➡️ Для экспорта языка из строкового каталога выберите приложение и используйте меню Product > Export Localizations..., чтобы сохранить локализации в отдельные папки .xcloc.

💡 Cursor может быть использован для перевода файлов XLIFF, где вы можете выбрать конкретный файл и запросить перевод содержимого, что упрощает процесс локализации.

➡️ После перевода, импортируйте локализованные файлы обратно в Xcode через Product > Import Localizations..., чтобы обновить строковой каталог с новыми переводами.

А вот промпт, используемый автором:
Translate the selected .xliff file’s body tag to the target-language. For each text, keep the source tag and add a target tag with a state="translated"attribute and the translation as body. Output the result as plain text.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Meet the Foundation Models framework

WWDC прошел и, как обычно, показали много нового и интересного (нет, особенно ужасен новый дизайн Liquid Glass). Для меня самое интересное – это новые AI инструменты и возможности и тут на самом деле было много интересного.

Apple показали фрейморк Foundation Models для работы с llm on-device в приложениях. Из основного:
- полностью нативная реализация и интеграция со swift'ом. Сама модель адаптирована под работу на Apple процессорах
- модель: 3B квантизованная до 2х бит: создать полноценного чат бота с ней не выйдет, но с задачами суммаризации, генерацией / понимаем текста и другими несложными llm-based задачами она более чем может справится
- есть возможность не промптом, а с помощью макросов управлять и структурировать формат ответа модели. Этот подход назвали "guided generation". Если кратко, то мы описываем энамы и структуры, и говорим, что хотим от модели в таком формате получать ответ и будем его именно так и получать
- появится новый инструмент отладки и тестирования работы с моделью
- самое важное и крутое на мой взгляд: "Tool calling": мы можем "зарегистрировать" функции приложения и сказать модели, что она может к ним обращаться и получать из них информации. Это крутое новшество, которое тянет на отдельный пост, который мы позже принесем

Отдельным пунктом хочу еще выделить, что наконец-то Xcode получит интеграцию с chatgpt и другими llm, в том числе и локально запущенными 🔥

Если хотите глубже погрузиться в архитектуру, узнать больше про пост/пре-трейн и оптимизации моделей, на каких данных и как обучалась, то вам точно нужно зайти сюда. Еще завезли отдельный HIG, посвященный генеративным AI.

#wwdc2025
👍10
Code-along: Bring on-device AI to your app using the Foundation Models framework

😮 Продолжаем погружаться в нововведения AI от Apple.

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

Из ключевых моментов:

➡️ Написание хорошего промпта играет ключевую роль в достижении хороших результатов. Для упрощения процесса мы можем воспользоваться макросом #Playground в любом файле и там экспериментировать с получаемыми результатами - ответ будет сразу на канвасе.
Есть две сущности - Prompt и Instructions. Вторая - это что-то вроде системного промпта, недоступного пользователю. Очень полезная штука для предварительной «настройки» модели перед ответом на запросы.
Еще в помощь #Generable и #Guide, но про них нужен отдельный пост 🤫

➡️ Для отладки работы приложения, использующего Foundation Models подвезли новый инструмент. Он так и называется
Foundation Models Instrument

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

#wwdc2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Deep dive into the Foundation Models framework

😮 В этой сессии нам дают больше информации про три вещи: LanguageModelSession, @Generable и Tool calling.

➡️ В первой части достаточно знакомые вещи для всех, кто хоть как-то погружен в LLM: рассказывают, что такое токены, как они семплируются, влияние температуры на случайные ответы.

⚡️ Про Generable уже интереснее.
Итак, это макрос, который генерирует схему во время компиляции, после чего она инжектится в запросы к модели. Во время ответов модель генерирует различные токены. И если нас не устраивает название этого токена (например, модель вместо name: сгенерирует firstName: ), то согласно схеме этот токен «маскируется» под необходимый ответ. Это на самом деле очень круто, поскольку заставить модель отвечать так, как нужно не такая простая задача.

⚙️ В дополнение есть макрос @Guide, который применяется к полям в схеме с @Generable. С его помощью можно наложить определенные ограничения на поля. Например:
- если это поле Int, мы можем задать диапазон от 1 до 3 и ответы не будут выходить за его пределы;
- если это массив, то можно задать количество элементов, которое нужно сгенерировать;
- можно даже использовать регулярные выражения, чтобы сгенерировать строки по определенным шаблонам;

🔝 Еще есть такая штука, как DynamicGenerationSchema - если вам нужно генерировать структуру ответов не во время компиляции, а в рантайме. Пример: пользователь может добавить свои схемы для NPC - они могут начать задавать вопросы с выбором ответов. Это добавляет намного больше вариативности и гибкости.

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

В завершении нам рассказывают про то, как делать тулы и как с ними работать. Но об этом в следующий раз 🙂

#wwdc2025
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2👍2