Het Foundation Models-framework geeft ontwikkelaars toegang tot generatieve modellen binnen apps voor iPhone, iPad, Mac en
Apple Vision Pro. De huidige versie kan het on-device taalmodel achter
Apple Intelligence rechtstreeks vanuit Swift aanroepen. Daardoor zijn voor geschikte taken geen eigen modelserver, API-sleutel of kosten per token nodig.
Dat maakt het framework interessant voor samenvatten, classificeren, informatie uit tekst halen, content van een vaste structuur voorzien en andere compacte functies die lokaal kunnen draaien. Het is niet bedoeld als één-op-één vervanging voor een groot cloudmodel met brede wereldkennis.
Deze handleiding maakt daarom een belangrijk onderscheid:
- Nu beschikbaar in de OS 26-generatie: het on-device model, LanguageModelSession, guided generation, tool calling en een native Swift-API.
- Beschikbaar als developer beta en aangekondigd voor de stabiele OS 27-generatie: één modelprotocol voor lokale en externe modellen, beeldinvoer, modellen via Private Cloud Compute, Dynamic Profiles, uitgebreidere evaluatietools en nieuwe agentische mogelijkheden.
Wie eerst wil begrijpen hoe het consumentenproduct, de apparaten en de privacyarchitectuur samenhangen, kan beginnen bij de
complete uitleg over Apple Intelligence. Dit artikel richt zich uitsluitend op het bouwen van apps.
Wat is het Foundation Models-framework?
Foundation Models is een framework van Apple waarmee een app een taalmodel kan gebruiken via Swift. In de eerste publieke versie, geïntroduceerd met iOS 26, iPadOS 26 en macOS 26, staat het lokale systeemmodel centraal. Het besturingssysteem beheert het model; een app hoeft de gewichten niet zelf mee te leveren.
De belangrijkste bouwstenen zijn:
| Onderdeel | Functie |
| SystemLanguageModel | Vertegenwoordigt het on-device systeemmodel en meldt of het beschikbaar is |
| LanguageModelSession | Beheert instructies, prompts, antwoorden en gesprekscontext |
| @Generable | Laat het model uitvoer genereren die direct in een Swift-type past |
| Guides | Leggen extra eisen op aan velden, aantallen of toegestane waarden |
| Tool calling | Laat het model gecontroleerd functies uit de app aanroepen |
| Transcript | Legt de interacties binnen het sessieobject vast als context; blijvende opslag moet de app zelf regelen |
De app praat dus niet rechtstreeks met een onbekend proces op internet. Bij het huidige on-device model vindt inference lokaal plaats op een geschikt apparaat. De gebruiker moet
Apple Intelligence wel hebben ingeschakeld en de gebruikte taal en regio moeten worden ondersteund.
Voor welke taken is het lokale model geschikt?
Apple positioneert het on-device model als een compact model voor afgebakende taken. Goede toepassingen zijn bijvoorbeeld:
- een tekst samenvatten;
- onderwerpen of sentiment classificeren;
- namen, datums of actiepunten uit tekst halen;
- een lijst in vaste categorieën verdelen;
- korte tekstvarianten genereren;
- appcontent in een vooraf bepaalde structuur zetten;
- natuurlijke taal omzetten in parameters voor een appfunctie;
- een lokale zoek- of notitie-ervaring ondersteunen.
Minder geschikte taken zijn:
- actuele feiten van het web beantwoorden zonder eigen bron of tool;
- complexe wetenschappelijke of juridische analyses;
- zeer lange documenten in één keer verwerken;
- zware redeneertaken waarvoor een groot servermodel nodig is;
- volledig autonome acties zonder controles.
Het model weet bovendien niet automatisch wat er in de database, agenda of interface van de app staat. De ontwikkelaar moet relevante context aanbieden of een beperkte tool bouwen waarmee het model de benodigde informatie kan opvragen.
Vereisten
Voor de huidige on-device route zijn minimaal nodig:
- Xcode met ondersteuning voor het Foundation Models-framework.
- Een project voor een ondersteunde versie van iOS, iPadOS, macOS of visionOS.
- Een apparaat dat Apple Intelligence ondersteunt.
- Apple Intelligence ingeschakeld op het testapparaat.
- Een ondersteunde apparaat- en Siri-taal.
Test niet alleen in een ideaal ontwikkelprofiel. Een echte app moet ook correct reageren wanneer:
- het apparaat niet geschikt is;
- Apple Intelligence door de gebruiker is uitgeschakeld;
- het model nog wordt gedownload;
- de taal of regio niet wordt ondersteund;
- het contextvenster vol raakt;
- een prompt of antwoord door een veiligheidsfilter wordt geweigerd.
Stap 1: importeer Foundation Models
De basis begint met het importeren van het framework:
import FoundationModels
Voor het huidige lokale model is geen API-sleutel nodig. Zet dus ook geen fictieve sleutel of externe accountflow in de app.
Stap 2: controleer of het model beschikbaar is
Controleer de beschikbaarheid vóórdat de interface een AI-functie aanbiedt:
import FoundationModels
let model = SystemLanguageModel.default
switch model.availability {
case .available:
print("Het lokale model is beschikbaar.")
case .unavailable(let reason):
print("Foundation Models is niet beschikbaar: \(reason)")
}
De precieze reden kan samenhangen met het apparaat, de systeeminstellingen of het downloaden van het model. Toon een begrijpelijke melding in plaats van een kale technische fout. Bied waar mogelijk een gewone, niet-generatieve route als alternatief.
Een beschikbaarheidscontrole bij het openen van de app is niet altijd genoeg. Instellingen kunnen veranderen en het systeem beheert modelbronnen dynamisch. Controleer daarom opnieuw op het moment dat de gebruiker de functie wil starten.
Stap 3: maak een eenvoudige sessie
Een LanguageModelSession houdt de instructies en interacties bij:
import FoundationModels
let session = LanguageModelSession(
instructions: """
Je bent een assistent in een Nederlandse notitie-app.
Vat alleen de aangeleverde tekst samen.
Voeg geen feiten toe die niet in de tekst staan.
"""
)
let response = try await session.respond(
to: "Vat deze notitie samen in maximaal drie korte punten: ..."
)
print(response.content)
De instructions zijn regels van de ontwikkelaar. De prompt bevat de concrete opdracht en eventueel tekst van de gebruiker. Houd dat onderscheid scherp: plaats onbetrouwbare gebruikersinvoer niet in de ontwikkelaarsinstructies. Het model is getraind om instructies zwaarder te wegen dan een normale prompt, waardoor verkeerd ingevoegde gebruikersdata de besturing van de sessie kan beïnvloeden.
Stap 4: gebruik gestructureerde uitvoer
Vrije tekst is prettig voor een chatvenster, maar onhandig wanneer de interface vaste velden nodig heeft. Met @Generable kan het model rechtstreeks een Swift-struct invullen:
import FoundationModels
@Generable
struct NotitieSamenvatting {
let titel: String
let kernpunten: [String]
let actieNodig: Bool
}
let session = LanguageModelSession(
instructions: "Analyseer uitsluitend de aangeleverde notitie."
)
let response = try await session.respond(
to: "Analyseer deze notitie: ...",
generating: NotitieSamenvatting.self
)
let samenvatting = response.content
print(samenvatting.titel)
Deze aanpak is betrouwbaarder dan het model vragen om zelf JSON te schrijven en die tekst daarna handmatig te ontleden. Het framework maakt een schema op basis van het Swift-type en gebruikt guided generation om de vorm van de uitvoer te beperken.
Gestructureerde uitvoer voorkomt niet dat een inhoudelijk antwoord fout kan zijn. Een datum kan nog steeds verkeerd worden geïnterpreteerd en een actiepunt kan worden gemist. Valideer velden daarom op dezelfde manier als andere externe of probabilistische invoer.
Stap 5: voeg een tool toe
Met tool calling kan het model een gecontroleerde functie van de app aanroepen. Denk aan het opzoeken van een item in een lokale catalogus of het ophalen van een agenda-item nadat de gebruiker daarvoor toestemming heeft gegeven.
Een tool bevat in grote lijnen:
- een herkenbare naam;
- een korte omschrijving van het doel;
- gestructureerde argumenten;
- een call-functie die de echte bewerking uitvoert;
- een resultaat dat teruggaat naar de sessie.
Vereenvoudigd ziet dat er zo uit:
import FoundationModels
struct ZoekTaakTool: Tool {
let name = "zoekTaak"
let description = "Zoekt een taak op titel in de lokale takenlijst."
@Generable
struct Arguments {
let titel: String
}
func call(arguments: Arguments) async throws -> ToolOutput {
// Zoek veilig in de lokale database.
// Geef alleen de informatie terug die voor deze sessie nodig is.
return ToolOutput("Taak gevonden")
}
}
let session = LanguageModelSession(
tools: [ZoekTaakTool()],
instructions: "Help de gebruiker alleen met taken uit de lokale takenlijst."
)
let response = try await session.respond(
to: "Zoek mijn taak met de titel 'Bel de tandarts'."
)
print(response.content)
Geef het model nooit onbeperkte toegang tot een database, bestandssysteem of netwerk. Bouw een kleine tool met minimale bevoegdheden en valideer ieder argument in gewone code. Een taalmodel is geen autorisatielaag.
Voor acties met gevolgen, zoals verwijderen, versturen, betalen of publiceren, hoort een afzonderlijke bevestiging in de interface. Dat blijft nodig, ook wanneer de gegenereerde opdracht heel overtuigend klinkt.
Sessies, context en transcripts
Een LanguageModelSession is stateful. Eerdere prompts en antwoorden komen in het transcript terecht en kunnen bij een volgende beurt als context dienen. Dat maakt vervolgvragen mogelijk, maar het contextvenster is begrensd.
Praktische regels:
- maak niet voor iedere knop in de hele app één eeuwige sessie;
- begin een nieuwe sessie voor een duidelijk nieuw doel;
- bewaar alleen relevante eerdere beurten;
- vat oude context samen wanneer een gesprek lang wordt;
- behandel het transcript als potentieel gevoelige gebruikersdata;
- voorkom dat context van verschillende gebruikers of documenten wordt gemengd.
Wanneer het contextvenster wordt overschreden, kan het framework een fout geven. Vang die fout op en start gecontroleerd een nieuwe sessie met alleen de noodzakelijke context.
Streaming en wachttijd
Generatie duurt langer dan een gewone lokale functie. Ontwerp daarom een duidelijke laadstatus en blokkeer dubbele verzoeken zolang een sessie antwoord geeft. Voor een langere reactie kan streaming de interface sneller laten aanvoelen.
Let ook op:
- lange instructies verhogen de verwerkingstijd;
- lange antwoorden kosten meer lokale rekentijd en energie;
- het model kan na een periode van inactiviteit opnieuw in geheugen moeten worden geladen;
- prestaties verschillen per Apple-chip en systeemdruk;
- temperatuur en sampling beïnvloeden de variatie van antwoorden.
Een identieke prompt hoeft niet telkens exact dezelfde tekst op te leveren. Zelfs een deterministisch ingestelde route kan na een update anders reageren omdat Apple het systeemmodel via een OS-update kan vervangen.
Veiligheid en prompt injection
On-device verwerking verwijdert niet automatisch alle AI-risico’s. Een document, webpagina of e-mail kan tekst bevatten die het model probeert te beïnvloeden. Dat heet indirecte prompt injection.
Beperk het risico als volgt:
- Houd ontwikkelaarsinstructies gescheiden van gebruikers- en documenttekst.
- Geef tools alleen de minimaal noodzakelijke bevoegdheden.
- Valideer toolargumenten buiten het model.
- Vraag bevestiging vóór een externe of onomkeerbare actie.
- Behandel modeluitvoer als onbevestigde invoer.
- Test met misleidende, conflicterende en kwaadaardige tekst.
- Log geen gevoelige prompts of modelantwoorden zonder duidelijke noodzaak en toestemming.
Wie de bredere dreiging wil begrijpen, kan verder lezen over
prompt injection en de gevolgen voor AI-systemen.
Privacy: wat blijft lokaal?
Bij het huidige SystemLanguageModel vindt de inference op het apparaat plaats. Dat kan aantrekkelijk zijn voor apps met privénotities, persoonlijke planning of data die niet standaard naar een externe model-API hoeft.
Toch moet een ontwikkelaar precies bekijken wat de rest van de app doet. Een lokaal model biedt weinig privacywinst wanneer de app dezelfde invoer daarna naar analytics, crashlogging of een eigen backend stuurt. Documenteer dus:
- welke data de app aan het model geeft;
- welke informatie lokaal blijft;
- welke logs worden gemaakt;
- welke Apple- of appmachtigingen nodig zijn;
- of een externe provider wordt gebruikt;
- hoe lang appdata wordt bewaard.
Voor consumenten gebruikt Apple Intelligence naast lokale modellen ook
Private Cloud Compute voor zwaardere taken. Dat betekent niet dat iedere aanroep vanuit de huidige Foundation Models-API automatisch naar die cloudroute kan uitwijken. Behandel on-device en servermodellen als afzonderlijke mogelijkheden met eigen beschikbaarheid en limieten.
Foundation Models of App Intents?
De frameworks lossen verschillende problemen op.
| Vraag | Foundation Models | App Intents |
| Tekst genereren of samenvatten in de eigen app | Ja | Niet het hoofddoel |
| Gestructureerde informatie uit vrije tekst halen | Ja | Soms als onderdeel van een actie |
| De eigen app bestuurbaar maken via Siri en Opdrachten | Niet zelfstandig | Ja |
| Appcontent vindbaar maken voor systeemfuncties | Beperkt | Ja |
| Eigen gecontroleerde tools aan een modelsessie geven | Ja | Via appacties en intents |
Gebruik Foundation Models voor intelligentie binnen de app. Gebruik App Intents om functies en gegevens van de app herkenbaar te maken voor Siri, Opdrachten, Spotlight en andere systeemervaringen. In een volwassen app kunnen beide naast elkaar bestaan. Voor de nieuwe persoonlijke context, schermherkenning en appacties die Apple voor de assistent heeft aangekondigd, zie de afzonderlijke
uitleg over Siri AI.
Wat verandert met de OS 27-generatie?
Apple kondigde in juni 2026 een grote uitbreiding aan. De bijbehorende developer betas van de besturingssystemen en Xcode 27 waren op de peildatum beschikbaar, maar de OS 27-generatie was nog niet stabiel en algemeen uitgebracht. Presenteer deze preview-API’s daarom nog niet als breed beschikbare productiefunctionaliteit.
Eén protocol voor meerdere modellen
Een nieuw LanguageModel-protocol moet dezelfde sessielaag geschikt maken voor:
- Apples on-device modellen;
- Apple-modellen op Private Cloud Compute;
- modellen van andere aanbieders die het protocol ondersteunen;
- eigen lokale modellen via aanvullende frameworks en implementaties.
Daarmee kan een ontwikkelaar per taak een ander model kiezen zonder de hele app rond een leveranciersspecifieke API te bouwen. Een externe provider kan nog steeds eigen authenticatie, kosten, dataverwerking en gebruikslimieten hebben.
Beeldinvoer en multimodale prompts
Apple kondigde ondersteuning aan voor afbeeldingen naast tekst. Het model kan dan bijvoorbeeld een afbeelding analyseren in combinatie met appcontext. Ook systeemtools uit het Vision-framework, zoals tekst- en barcodeherkenning, kunnen een rol krijgen.
Private Cloud Compute voor apps
Voor taken die te zwaar zijn voor het apparaat heeft Apple voor OS 27 toegang tot een groter servermodel via PrivateCloudComputeLanguageModel aangekondigd. De developer beta vereist een entitlement waarvoor een ontwikkelaar een aanvraag moet doen. Volgens Apple komen ontwikkelaars in het App Store Small Business Program in aanmerking voor toegang zonder cloud-API-kosten wanneer hun app in totaal minder dan twee miljoen eerste App Store-downloads heeft.
Dat is iets anders dan “onbeperkt gratis”. Iedere gebruiker krijgt volgens Apple een dagelijkse limiet die via diens iCloud-account wordt bijgehouden; een iCloud+-abonnement verhoogt die limiet. Apple heeft in de openbare aankondiging geen vaste aantallen genoemd. Een app moet daarom beschikbaarheid en quotaUsage controleren, een bereikt quotum netjes afhandelen en de toelatingsvoorwaarden vlak voor release opnieuw verifiëren.
Apple zegt dat PCC-verzoeken alleen worden gebruikt om het verzoek uit te voeren en niet worden opgeslagen. Formuleer dit als een claim van Apple, ook al publiceert het bedrijf software en onderzoeksmiddelen waarmee beveiligingsonderzoekers de PCC-architectuur kunnen controleren.
Dynamic Profiles en agentische workflows
Dynamic Profiles moeten het mogelijk maken om tijdens één doorlopende sessie modellen, tools en instructies aan te passen. Dat ondersteunt workflows waarbij een compacte lokale stap wordt afgewisseld met een zwaardere modeltaak.
Meer autonomie vergroot ook het risico. Een agentische workflow heeft expliciete grenzen, toestemmingen, evaluaties en herstelpaden nodig.
Evaluations, Instruments en modelgebruik meten
Apple breidt de ontwikkeltools uit voor:
- modelgedrag onder verschillende omstandigheden testen;
- prompts onderling vergelijken;
- latency en toolgebruik inspecteren;
- token- en cachegebruik bekijken;
- regressies na model- of OS-updates opsporen.
Een gewone unit test is onvoldoende voor probabilistische output. Leg daarom meetbare kwaliteitscriteria vast, bouw een representatieve testset en laat belangrijke uitkomsten ook door mensen beoordelen.
Apples derde generatie modellen
Apple presenteerde in 2026 een familie van vijf modellen die samen met Google is ontwikkeld:
- AFM 3 Core: de volgende generatie van Apples dense on-device model met 3 miljard parameters.
- AFM 3 Core Advanced: een multimodaal, sparse on-device model met 20 miljard parameters, waarvan afhankelijk van het verzoek 1 tot 4 miljard parameters actief zijn.
- AFM 3 Cloud: het algemene servermodel, geoptimaliseerd voor snelheid, efficiëntie en prestaties.
- ADM 3 Cloud (Image): het servermodel voor beeldgeneratie en -bewerking.
- AFM 3 Cloud Pro: Apples krachtigste servermodel voor onder meer complex redeneren en agentisch toolgebruik.
Apple zegt dat AFM 3 Core, AFM 3 Core Advanced, AFM 3 Cloud en ADM 3 Cloud (Image) voor Apple silicon zijn gebouwd. Voor AFM 3 Cloud Pro gebruikt de aangekondigde PCC-infrastructuur Nvidia-GPU’s in Google Cloud. Dat onderstreept dat “Apple-model” niet automatisch betekent dat iedere berekening uitsluitend op een iPhone of op Apple silicon in een eigen datacenter draait. De verdieping over de hardwaremarkt staat in onze
uitleg over Nvidia en AI-infrastructuur.
AFM 3 Core Advanced en de functies die Apples krachtigste nieuwe on-device model gebruiken, hebben een strengere hardwaregrens dan het Foundation Models-framework als geheel. Apple noemt iPhone Air, iPhone 17 Pro en 17 Pro Max; iPads met M4 of nieuwer en minimaal 12 GB centraal geheugen; Macs met M3 of nieuwer en minimaal 12 GB centraal geheugen; en Apple Vision Pro met M5. Bouw daarom een afzonderlijke beschikbaarheidscontrole en neem niet aan dat ieder Apple Intelligence-apparaat hetzelfde lokale model kan laden.
Wanneer kies je Foundation Models?
Kies het framework wanneer:
- een compacte taak goed op een apparaatmodel past;
- offline gebruik belangrijk is;
- gegevens niet standaard naar een eigen cloudmodel hoeven;
- diepe integratie met een Swift-app gewenst is;
- gestructureerde uitvoer of gecontroleerde tools nodig zijn;
- de app ook zonder generatieve functie bruikbaar kan blijven.
Kies eerder een extern cloudmodel wanneer:
- brede, actuele wereldkennis noodzakelijk is;
- de taak zeer lange context nodig heeft;
- geavanceerd redeneren centraal staat;
- dezelfde backend meerdere niet-Apple-platforms moet bedienen;
- het team expliciete modelversies en servercapaciteit centraal wil beheren.
Een hybride architectuur is ook mogelijk. Gebruik lokaal wat lokaal goed kan, en stuur alleen een afgebakende taak naar een servermodel wanneer de gebruiker dat verwacht en de dataverwerking duidelijk is uitgelegd.
Praktische productiechecklist
- Controleer modelbeschikbaarheid op het moment van gebruik.
- Bied een bruikbare foutmelding en alternatief.
- Houd instructions en onbetrouwbare invoer gescheiden.
- Gebruik @Generable voor uitvoer die de interface moet verwerken.
- Valideer gegenereerde velden in gewone code.
- Geef tools minimale bevoegdheden.
- Vraag bevestiging vóór acties met gevolgen.
- Beperk sessies en beheer het contextvenster.
- Test ondersteunde en niet-ondersteunde talen.
- Test prompt injection en foutieve toolargumenten.
- Meet latency, energiegebruik en regressies op echte apparaten.
- Beschrijf lokale en externe datastromen correct in de privacyinformatie.
- Controleer vóór release welke OS 27-API’s werkelijk stabiel zijn.
Veelgestelde vragen
Is het Apple Foundation Models-framework gratis?
Voor het huidige on-device model zijn geen kosten per API-aanroep en geldt geen PCC-verzoekquotum. De gebruiker heeft wel een compatibel Apple-apparaat nodig. Voor de aangekondigde PCC-route geldt een dagelijkse limiet per gebruiker. Toegang zonder cloud-API-kosten is bovendien gebonden aan Apples toelatingsvoorwaarden voor ontwikkelaars en apps.
Werkt Foundation Models zonder internet?
Het huidige on-device systeemmodel kan lokaal werken. Functies die een servermodel, externe bron of eigen netwerktool gebruiken, hebben wel internet nodig.
Kan ik er een volledige ChatGPT-kloon mee bouwen?
Je kunt een chatinterface bouwen, maar het lokale model is bedoeld voor device-scale taken en heeft niet automatisch actuele wereldkennis of dezelfde capaciteit als grote cloudmodellen. Ontwerp rond een concreet appdoel.
Werkt het framework op een Intel-Mac?
Het on-device model vereist een ondersteunde Mac en Apple Intelligence ingeschakeld. Daaronder vallen MacBook Neo met A18 Pro en Macs met M1 of nieuwer; een Intel-Mac voldoet niet.
Kan het model Nederlands gebruiken?
Het systeemmodel is meertalig. Op ondersteunde iPhones, iPads en Macs behoort Nederlands vanaf versie 26.1 tot de Apple Intelligence-talen; Vision Pro ondersteunt Nederlands op de peildatum niet. Controleer in de app altijd de actuele beschikbaarheid van platform, taal en regio.
Wat is het verschil tussen Foundation Models en Core ML?
Foundation Models biedt een hogere Swift-laag voor generatieve taalmodellen, sessies, guided generation en tools. Core ML is het bredere framework voor het uitvoeren van uiteenlopende machinelearningmodellen op Apple-apparaten.
Kan ik Claude of Gemini via dezelfde API gebruiken?
Apple heeft dit voor de volgende generatie van het framework aangekondigd via het LanguageModel-protocol. Externe modellen behouden hun eigen authenticatie, kosten en privacyvoorwaarden. Controleer bij publicatie welke providerpakketten en OS-versies stabiel beschikbaar zijn.