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

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

По всем вопросам обращаться к @itereznikov
Download Telegram
Tool Calling

В продолжении прошлого поста поговорим про тулинг для моделей.

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

⚠️ Из рекомендаций:
- стоит давать название инструменту понятное и короткое на английском языке
- описание также рекомендуют делать в одно приложение.

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

Вот так выглядит пример инструмента:

struct BreadDatabaseTool: Tool {
let name = "searchBreadDatabase"
let description = "Searches a local database for bread recipes."


@Generable
struct Arguments {
@Guide(description: "The type of bread to search for")
var searchTerm: String
@Guide(description: "The number of recipes to get", .range(1...6))
var limit: Int
}


struct Recipe {
var name: String
var description: String
var link: URL
}

func call(arguments: Arguments) async throws -> ToolOutput {
var recipes: [Recipe] = []


// Put your code here to retrieve a list of recipes from your database.


let formattedRecipes = recipes.map {
"Recipe for '\($0.name)': \($0.description) Link: \($0.link)"
}
return ToolOutput(GeneratedContent(properties: ["recipes": formattedRecipes]))
}
}


А так его использование:

let session = LanguageModelSession(
tools: [BreadDatabaseTool()]
)


let response = try await session.respond(
to: "Find three sourdough bread recipes"
)


⚙️ Для дебага сессии можно использовать свойство transcript самой сессии. Оно даст полную историю взаимодействия модели: вызовы инструментов, ответы инструментов, промпты, инструкции.

#wwdc2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Optimize CPU performance with Instruments

😮 Супер полезная сессия про оптимизации CPU. Тут и про то, как работает пайплан CPU, как устроена память и кеш в процессоре, а также про то, как это профилировать с помощью инструментов. Очень много полезного.

Вот пару моментов:

⚠️ Используйте CPU Profiler для точных замеров использования процессора - замеры проводятся независимо базируясь на тактовой частоте, в то время как Time Profiler делает общий замер.

✔️ Новый инструмент Processor Trace позволяет записывать все инструкции, выполняемые приложением, с минимальным влиянием на производительность, что помогает точно выявлять узкие места.

🔥 Инструмент CPU Counters помогает выявлять узкие места в производительности, анализируя события в каждом блоке CPU и предоставляя данные о производительности.

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

#wwdc2025
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥31
Read documents using the Vision framework

Что нового в Vision фреймворке?

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

😮 Функция DetectLensSmudgeRequest определяет, было ли изображение снято с запачканным объективом, используя коэффициент уверенности от 0 до 1, что помогает фильтровать низкокачественные изображения.

➡️ Новая модель определения позы руки более компактна и точна, но требует переобучения существующих классификаторов из-за изменения расположения суставов.

#wwdc2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
Android Workgroup

Swift идет в Android 🫠

⚡️ Основная цель Android workgroup заключается в добавлении и поддержке Android как официально поддерживаемой платформы для языка Swift. Иными словами можно будет пилить приложения под андроид из Swift.

➡️ Членство в группе открыто для всех желающих, и участники могут общаться через регулярные видеозвонки и форумы Swift.

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

А вы что думаете? Идет нормальная замена KMP? 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16
Subtle retain cycle is subtle

Отойдем немного от презентации эпл к насущным проблемам. А именно к Retain Cycle.

🔍 Retain cycle сложно отследить, и в приведенном примере класс Example создает цикл удержания, который не позволяет deinit выполниться.

class Example {
var task: Task<Void, Never>?

init() {
task = Task { [weak self] in
guard let self else { return }

repeat {
performSomeWork()
} while !Task.isCancelled
}
}

func performSomeWork() { }

deinit {
print("deinit")
task?.cancel()
}
}


Автор предлагает несколько решений:

➡️ Измените область видимости сильной ссылки, переместив guard внутрь цикла repeat, чтобы избежать удержания объекта Example.

task = Task { [weak self] in            //
repeat { //
guard let self else { return } // - strong reference taken here
performSomeWork() //
} while !Task.isCancelled // - goes out of scope here
}


➡️ Используйте слабую ссылку на self в методе performSomeWork, чтобы избежать создания retain cycle.

task = Task { [weak self] in
repeat {
self?.performSomeWork()
} while !Task.isCancelled
}


❗️ Использование capture group может не решить проблему, так как методы экземпляра имеют неявную ссылку на self.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
What’s new in UIKit

🆕 UIKit теперь поддерживает автоматическое отслеживание Observable объектов, что упрощает синхронизацию пользовательского интерфейса без необходимости вручную вызывать setNeedsLayout.

ℹ️ В iOS 26 представлен новый дизайн с материалом Liquid Glass, который обновляет стандартные компоненты UIKit и улучшает навигационные переходы.

✏️ UIKit теперь позволяет интегрировать сцены SwiftUI с помощью нового протокола UIHostingSceneDelegate, что упрощает совместное использование UIKit и SwiftUI в приложениях.

➡️ UIKit расширяет поддержку HDR, позволяя создавать HDR цвета и использовать их в UIColorPickerViewController, что улучшает визуальные эффекты в приложениях.

➡️ Введен новый метод updateProperties для UIView и UIViewController, который позволяет более эффективно обновлять свойства без лишних проходов по макету.

#wwdc2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
Automatic Observation Tracking in UIKit and AppKit: The Feature Apple Forgot to Mention

А вот и обзор изменений для обновления UI.

🔴 В iOS 18 и macOS 15 добавлено автоматическое отслеживание изменений для UIKit и AppKit, позволяющее обновлять интерфейс без ручных вызовов методов, таких как setNeedsDisplay().

👀 Чтобы активировать автоматическое отслеживание, необходимо добавить ключ UIObservationTrackingEnabled в Info.plist для UIKit и NSObservationTrackingEnabled для AppKit.

Автоматическое отслеживание работает в методах, таких как viewWillLayoutSubviews() и layoutSubviews(), что упрощает синхронизацию данных и интерфейса.

☄️ В iOS 26 добавлены новые методы, такие как updateProperties(), которые обеспечивают более эффективное обновление свойств перед layoutSubviews, улучшая производительность.

⚠️ Важно учитывать, что отслеживание происходит только в определенных методах, и необходимо следить за безопасностью потоков и возможными утечками памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Profile and optimize power usage in your app

☄️ Очень крутая сессия про профилирование использования батареи приложением - вся функциональность блекнет на фоне быстро садящегося телефона.

🆕 Используйте Power Profiler в Instruments для выявления и устранения проблем с энергопотреблением в приложениях, что позволяет улучшить время работы от батареи.

📊 При разработке новых функций сравнивайте влияние различных реализаций на энергопотребление, проводя тесты в разных условиях и усредняя результаты.

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

⚙️ Используйте инструменты Xcode, такие как Energy Gauges, XCTest и MetricKit, для мониторинга и оптимизации энергопотребления на всех этапах разработки и после выпуска приложения.

#wwdc2025
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32