fix(skills): address code review feedback on iOS 26 skill examples

- Add required name/description properties and @Generable to RecipeSearchTool
- Fix missing argument label in session.respond(to:) call
- Remove non-existent .scrollExtensionMode API, replace with correct guidance
- Change PhotoProcessor from struct to class for cache mutation support
- Fix method name mismatch in @concurrent example caller
This commit is contained in:
Okmin
2026-02-19 12:15:41 +09:00
parent 3b8c157952
commit 0a770caf84
3 changed files with 12 additions and 11 deletions

View File

@@ -113,7 +113,11 @@ Let the model invoke custom code for domain-specific tasks:
```swift ```swift
struct RecipeSearchTool: Tool { struct RecipeSearchTool: Tool {
struct Arguments: Codable { let name = "recipe_search"
let description = "Search for recipes matching a given term and return a list of results."
@Generable
struct Arguments {
var searchTerm: String var searchTerm: String
var numberOfResults: Int var numberOfResults: Int
} }
@@ -139,7 +143,7 @@ let response = try await session.respond(to: "Find me some pasta recipes")
```swift ```swift
do { do {
let answer = try await session.respond("Find a recipe for tomato soup.") let answer = try await session.respond(to: "Find a recipe for tomato soup.")
} catch let error as LanguageModelSession.ToolCallError { } catch let error as LanguageModelSession.ToolCallError {
print(error.tool.name) print(error.tool.name)
if case .databaseIsEmpty = error.underlyingError as? RecipeSearchToolError { if case .databaseIsEmpty = error.underlyingError as? RecipeSearchToolError {

View File

@@ -124,13 +124,9 @@ Button("Toggle") {
.buttonStyle(.glass) .buttonStyle(.glass)
``` ```
### Scroll and Sidebar Extensions ### Extending Horizontal Scrolling Under Sidebar
```swift To allow horizontal scroll content to extend under a sidebar or inspector, ensure the `ScrollView` content reaches the leading/trailing edges of the container. The system automatically handles the under-sidebar scrolling behavior when the layout extends to the edges — no additional modifier is needed.
// Extend horizontal scroll under sidebar
ScrollView(.horizontal) { /* content */ }
.scrollExtensionMode(.underSidebar)
```
## Core Pattern — UIKit ## Core Pattern — UIKit

View File

@@ -137,8 +137,8 @@ This mode is opt-in and recommended for apps, scripts, and other executable targ
When you need actual parallelism, explicitly offload with `@concurrent`: When you need actual parallelism, explicitly offload with `@concurrent`:
```swift ```swift
nonisolated struct PhotoProcessor { nonisolated final class PhotoProcessor {
var cachedStickers: [String: Sticker] private var cachedStickers: [String: Sticker] = [:]
func extractSticker(data: Data, with id: String) async -> Sticker { func extractSticker(data: Data, with id: String) async -> Sticker {
if let sticker = cachedStickers[id] { if let sticker = cachedStickers[id] {
@@ -156,7 +156,8 @@ nonisolated struct PhotoProcessor {
} }
// Callers must await // Callers must await
processedPhotos[item.id] = await PhotoProcessor().process(data: data) let processor = PhotoProcessor()
processedPhotos[item.id] = await processor.extractSticker(data: data, with: item.id)
``` ```
To use `@concurrent`: To use `@concurrent`: