Apple Intelligence: What Developers Should Actually Build For
Apple Intelligence isn't just Siri improvements. It's a ~3 billion parameter on-device foundation model running on Apple Silicon, quantized to 2-bit for efficiency . After building with the Foundation Models framework (WWDC25), here's what actually matters for cross-platform developers.
Native First: Swift Gets the Full Stack
At WWDC25, Apple released the Foundation Models Framework — direct Swift API access to the same on-device LLM powering Apple Intelligence.
import FoundationModels
// Create a session with stateful context
let session = LanguageModelSession()
// Generate structured output with @Generable macro
@Generable struct Itinerary {
var title: String
var days: [DayPlan]
var summary: String
}
let response = try await session.respond(
to: "Plan 3 days in Paris",
as: Itinerary.self
)
// Returns typed Swift object — not raw JSON
Key capabilities exclusive to native
-
Guided Generation (@Generable, @Guide) — guaranteed structural correctness via constrained decoding
-
Streaming snapshots — partial Swift objects that populate progressively
-
Tool calling — model executes your Swift functions autonomously
-
Zero app size impact — model is baked into the OS
Cross-Platform Reality: Gaps Are Real
The LinkedIn discourse calling Flutter "RIP" is hyperbolic, but the concern has merit . iOS 18+ features increasingly assume Swift/SwiftUI.
What cross-platform tools can't access (yet)
- Native Siri integration and system-level Writing Tools
- Real-time streaming snapshots from the foundation model
- On-device model loading with hardware-specific optimizations (Neural Engine, GPU ML accelerators)
However, React Native is catching up faster than Flutter . Callstack released @react-native-ai/apple (preview), providing:
import { foundationModels } from '@react-native-ai/apple';
import { z } from 'zod';
// Structured output with Zod schema
const schema = z.object({
name: z.string(),
price: z.number(),
summary: z.string()
});
const result = await foundationModels.generateText(
[{ role: 'user', content: 'Analyze this product' }],
{ schema }
);
// Streaming support
const stream = foundationModels.generateStream([...]);
for await (const chunk of stream) {
console.log(chunk.textDelta);
}
Requirements: React Native 0.80+, New Architecture enabled, iOS 26+ . Vercel AI SDK compatibility means existing patterns translate.
What Actually Requires Native (For Now)
According to Apple's WWDC sessions, these features have no cross-platform bridge
| Feature | Framework | Cross-platform Status |
|---|---|---|
| Writing Tools integration | UIKitView/NSTextView | iOS only |
| Genmoji rendering | NSAdaptiveImageGlyph | iOS only |
| Siri App Intents | App Intents framework | iOS only |
| Translation API | Translation framework | iOS only |
| Vision gestures | Vision framework (Swift 6) | iOS only |
Translation API example (native only)
import Translation
let config = TranslationSession.Configuration()
let response = try await translator.translate("Hello world",
from: .en, to: .es,
configuration: config)
Strategic Recommendation: Hybrid Architecture
Don't rewrite everything. Do this instead:
Layer 1: Core UI (Cross-platform)
- Maintain React Native/Flutter for 80% of screens
- Use for standard lists, forms, navigation
Layer 2: Intelligence Features (Native Modules)
- Implement Apple Intelligence features as native Swift modules
- Expose via React Native bridge or Flutter platform channel
// React Native Module Example
class AppleIntelligenceModule : NSObject, RCTBridgeModule {
static func moduleName() -> String! { return "AppleIntelligence" }
@objc func generateText(_ prompt: String,
resolver: @escaping RCTPromiseResolveBlock,
rejecter: @escaping RCTPromiseRejectBlock) {
Task {
let session = LanguageModelSession()
let response = try await session.respond(to: prompt)
resolver(response.content)
}
}
}
Layer 3: Progressive Enhancement
- Detect Apple Intelligence availability via FoundationModels.isAvailable
- Show enhanced features only on supported devices (iPhone 15 Pro+, M-series iPads/Macs)
// Availability check
if case .available = FoundationModels.status {
// Show AI features
} else if case .unavailable(let reason) = FoundationModels.status {
// Fallback to basic UI
}