16 H16: Je app klaarmaken
De app werkt. Nu moet hij er ook professioneel uitzien als je hem wilt publiceren. In dit hoofdstuk doorloop je de checklist: app-icoon, versienummers, Privacy Manifest en de Entitlements die beschrijven wat je app mag doen.
16.1 Wat gaan we bouwen?
Geen nieuwe code — wel een complete voorbereiding voor publicatie. Na dit hoofdstuk is de app klaar om naar App Store Connect te sturen.

16.2 Het app-icoon
Een app zonder icoon ziet er onaf uit. Het icoon is het eerste wat gebruikers zien in de App Store.
16.2.1 Formaten
macOS vereist meerdere formaten. Je levert één hoge-resolutie afbeelding van 1024×1024 pixels aan (PNG, geen transparantie), en Xcode genereert de rest.
Stap 1: Maak of koop een icoon van 1024×1024 pixels.
Stap 2: Open Xcode → selecteer Assets.xcassets → klik op AppIcon.
Stap 3: Sleep de 1024×1024 afbeelding naar het grote vakje “Mac 512pt @2x”.
Xcode genereert automatisch alle benodigde formaten.
16.2.2 De EnergyClock AppIconView
De EnergyClock heeft een AppIconView die het icoon programmatisch tekent — een 12-segmentsklok als SwiftUI-view. Je kunt hiervan een PNG exporteren:
// Bron: EnergyClock/AppIconView.swift
// Render de view naar een PNG
let renderer = ImageRenderer(content: AppIconView().frame(width: 1024, height: 1024))
renderer.scale = 1.0
if let image = renderer.nsImage {
// Sla de afbeelding op als PNG
}16.3 Versienummers
In Xcode selecteer je je app-target en ga je naar General. Hier staan twee velden:
| Veld | Betekenis | Voorbeeld |
|---|---|---|
| Version | Zichtbaar voor gebruikers | 1.0.0 |
| Build | Interne teller, elke upload hoger | 42 |
Gebruik Semantic Versioning voor de versie: MAJOR.MINOR.PATCH
MAJOR— grote, incompatibele wijzigingenMINOR— nieuwe functionaliteit, backwards-compatiblePATCH— bugfixes
Voor een eerste release is 1.0.0 de standaard.
16.4 Privacy Manifest
Sinds 2024 vereist Apple een Privacy Manifest (PrivacyInfo.xcprivacy): een bestand dat beschrijft welke data je app verzamelt en waarom.
Stap 1: Maak een nieuw bestand in Xcode: File > New > File > App Privacy.
Stap 2: Vul in welke API’s je gebruikt. De EnergyClock gebruikt UserDefaults, wat valt onder NSPrivacyAccessedAPICategoryUserDefaults.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" ...>
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
</dict>
</plist>CA92.1 betekent: “ik gebruik UserDefaults om de voorkeuren van de gebruiker op te slaan.”
16.5 Entitlements
Entitlements beschrijven wat je app mag doen: toegang tot het netwerk, push-notificaties, App Groups. Ze staan in het .entitlements-bestand van je target.
De EnergyClock heeft deze entitlements nodig:
| Entitlement | Waarom |
|---|---|
com.apple.security.app-sandbox |
Verplicht voor Mac App Store |
com.apple.security.network.client |
Netwerkaanroepen doen |
com.apple.security.application-groups |
App Group voor widget |
Voeg ze toe via Signing & Capabilities in je target-instellingen.
16.6 Signing
Voor de App Store moet je app gesigneerd zijn met een Distribution Certificate. Xcode kan dit automatisch regelen:
- Selecteer je target → Signing & Capabilities
- Zorg dat “Automatically manage signing” aangevinkt is
- Selecteer je Team
Als je nog geen Apple Developer account hebt, maak er dan een aan op developer.apple.com. Het gratis account werkt voor ontwikkeling; voor publicatie heb je een betaald account nodig (€99/jaar).
Code signing is een cryptografisch mechanisme waarbij Apple garandeert dat de app niet gewijzigd is na het ondertekenen. macOS controleert bij het opstarten of de handtekening geldig is en of de app afkomstig is van een bekende ontwikkelaar (Gatekeeper).
De App Sandbox beperkt wat een app mag doen buiten zijn eigen container. Dit is een onderdeel van macOS’s beveiligingsmodel: een gehackte of kwaadaardige app kan zo minimale schade aanrichten. Voor de App Store is sandboxing verplicht.
Entitlements werken als “uitzonderingen” op de sandbox: je vraagt Apple expliciet toestemming voor elke extra bevoegdheid. Apple beoordeelt bij de App Review of de gevraagde bevoegdheden gerechtvaardigd zijn voor de app.
De com.apple.security.network.client entitlement is nodig omdat standaard het netwerk geblokkeerd is. Zonder deze entitlement mislukken alle URLSession-aanroepen met een sandbox-fout.
16.7 Apple documentatie
Meer over het app-icoon:
developer.apple.com/design/human-interface-guidelines/app-icons
Meer over Privacy Manifests:
developer.apple.com/documentation/bundleresources/privacy_manifest_files
Meer over Entitlements:
developer.apple.com/documentation/bundleresources/entitlements
16.8 Samenvatting
| Begrip | Betekenis |
|---|---|
| App-icoon | Visuele herkenning van de app, 1024×1024 pixels |
| Version | Zichtbare versie voor gebruikers (bijv. 1.0.0) |
| Build | Interne teller, elke upload hoger |
| Semantic Versioning | MAJOR.MINOR.PATCH versieschema |
| Privacy Manifest | Bestand dat beschrijft welke data je app gebruikt |
| Entitlement | Toestemming voor een specifieke functionaliteit |
| App Sandbox | Beveiligde omgeving die apps van elkaar afschermt |
| Code signing | Cryptografisch bewijs dat de app van jou is |
16.9 Opdracht
- Maak een app-icoon voor de EnergyClock. Gebruik
AppIconViewals basis en exporteer hem als 1024×1024 PNG viaImageRenderer. - Stel het versienummer in op
1.0.0en het build-nummer op1. - Maak een
PrivacyInfo.xcprivacyaan en voeg de UserDefaults-reden toe. - Controleer in de Entitlements of
network.clientaanwezig is.