From 44064d2ea22b8158a9384ca3faadd98b29e87afe Mon Sep 17 00:00:00 2001 From: Jonathan Flietstra Date: Fri, 30 Oct 2026 05:18:33 +0000 Subject: [PATCH] iOS: archief-optie voor een .ipa (App Store Connect) en stappen in docs Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_014MGLqt1ukfnarqhut9ifcx --- docs/iOS-app.md | 36 ++++++++++++++++++++++++++++++++++++ tools/ios-bouwen.sh | 29 ++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/docs/iOS-app.md b/docs/iOS-app.md index ad4a26f..32bd98f 100644 --- a/docs/iOS-app.md +++ b/docs/iOS-app.md @@ -80,6 +80,42 @@ meldingen, en verder werkt alles. Dat komt erbij zodra het account er is, want h vast: een APNs-sleutel, de Push Notifications-capability, een provisioning profile en een `Entitlements.plist`. +## Een .ipa voor TestFlight en de App Store + +Kan zodra het Apple Developer Program actief is (Kwik-Bit Automatisering B.V., aangemeld op +27 oktober 2026, betaald; de accountpagina toont geen "Pending" meer). Stappen, in deze volgorde: + +1. **Voorwaarden accepteren** op developer.apple.com/account (de nieuwe licentieovereenkomst, + uiterlijk 14 november 2026). Alleen de accounthouder kan dat. Zonder dit werken Certificates, + App Store Connect en de API niet meer. +2. **App-ID registreren**: Certificates, IDs & Profiles > Identifiers > App IDs, bundel-ID + `nl.mijnbesluit.app` (gelijk aan `ApplicationId`). Capabilities: voorlopig geen extra; + Push Notifications komt later met APNs. +3. **Distributiecertificaat** (Apple Distribution) maken: Xcode > Settings > Accounts > het team > + Manage Certificates > + > Apple Distribution, op de Mac waar je bouwt. De private sleutel + blijft in de sleutelhanger van die Mac; bij een gehuurde Mac is die weg als de Mac weg is, + dus bewaar er een export van (met wachtwoord, buiten git). +4. **App Store-profiel** (Provisioning Profiles > + > App Store Connect) voor `nl.mijnbesluit.app` + met dat certificaat; downloaden en dubbelklikken op de Mac. Noteer de naam van het profiel. +5. **App-record** in App Store Connect (Apps > + > Nieuwe app): naam MijnBesluit, bundel-ID + `nl.mijnbesluit.app`, primaire taal Nederlands, SKU naar keuze. +6. **Bouwen**: op de Mac, met de namen uit stap 3 en 4: + + ``` + export IOS_SIGN_KEY="Apple Distribution: Kwik-Bit Automatisering B.V. (TEAMID)" + export IOS_PROFILE="" + tools/ios-bouwen.sh archief + ``` + + Het script toont eerst welke certificaten en profielen er staan, maakt dan de `.ipa` + (`dotnet publish`, ios-arm64, Release, `ArchiveOnBuild`) en zegt waar hij staat. Het bouwnummer + (`ApplicationVersion`) moet bij elke upload hoger zijn dan de vorige. +7. **Uploaden** met de app Transporter (Mac App Store, gratis): inloggen met het Apple-account, + `.ipa` erin slepen. Na enkele minuten staat de build onder TestFlight; de exportverklaring en + de App Privacy-antwoorden volgen in App Store Connect (zie hieronder). + +Niet gedaan en niet getest: dit script en deze stappen zijn nog nooit tegen Apple gedraaid. + ## Twee vallen waar je vroeg in loopt **Ontbrekende gebruikstoelichting = de app sluit.** Vraag je om Face ID zonder diff --git a/tools/ios-bouwen.sh b/tools/ios-bouwen.sh index 1f367e6..9e8cdc4 100644 --- a/tools/ios-bouwen.sh +++ b/tools/ios-bouwen.sh @@ -4,6 +4,9 @@ # tools/ios-bouwen.sh controle alleen kijken of de Mac er klaar voor is # tools/ios-bouwen.sh simulator bouwen en starten in de iPhone-simulator (geen account nodig) # tools/ios-bouwen.sh toestel bouwen en op een aangesloten iPhone zetten (Apple-ID / team nodig) +# tools/ios-bouwen.sh archief een .ipa voor App Store Connect / TestFlight maken +# (betaald Apple Developer Program, distributiecertificaat en +# App Store-profiel nodig; zie docs/iOS-app.md) # # Eerste keer: chmod +x tools/ios-bouwen.sh set -euo pipefail @@ -70,7 +73,31 @@ case "$MODUS" in echo "Gebouwd. Installeren gaat het makkelijkst via Visual Studio (Pair to Mac) of" echo "Xcode > Window > Devices and Simulators, of: dotnet build -t:Run -p:_DeviceName=" ;; + archief) + controle + # Namen, geen geheimen: de exacte naam van het distributiecertificaat en van het App Store-profiel. + # export IOS_SIGN_KEY="Apple Distribution: Kwik-Bit Automatisering B.V. (TEAMID)" + # export IOS_PROFILE="MijnBesluit App Store" + # Zie de lijst hieronder voor wat er op deze Mac staat. + stap "Distributiecertificaten op deze Mac" + security find-identity -v -p codesigning | grep -i 'Apple Distribution' \ + || echo "(geen 'Apple Distribution'-certificaat gevonden; maak er een in Xcode > Settings > Accounts > Manage Certificates)" + stap "Provisioning profiles op deze Mac" + ls "$HOME/Library/MobileDevice/Provisioning Profiles" 2>/dev/null || echo "(geen profielen gevonden)" + [[ -n "${IOS_SIGN_KEY:-}" ]] || stop "zet IOS_SIGN_KEY op de exacte naam van het 'Apple Distribution'-certificaat (zie de lijst hierboven)." + [[ -n "${IOS_PROFILE:-}" ]] || stop "zet IOS_PROFILE op de naam van het App Store-profiel voor nl.mijnbesluit.app." + stap "Archief maken (ios-arm64, Release)" + # Let op: ApplicationVersion (bouwnummer) moet bij elke upload hoger zijn dan de vorige. + dotnet publish "$PROJECT" -f "$TFM" -c Release -p:MetIos=true -p:MetAndroid=false \ + -p:RuntimeIdentifier=ios-arm64 -p:ArchiveOnBuild=true \ + -p:CodesignKey="$IOS_SIGN_KEY" -p:CodesignProvision="$IOS_PROFILE" + echo + echo "Klaar. De .ipa staat onder:" + find "$(dirname "$PROJECT")/bin/Release" -name '*.ipa' -print 2>/dev/null || true + echo "Uploaden: open de app Transporter (gratis, Mac App Store), log in met het Apple-account en" + echo "sleep de .ipa erin. Daarna staat de build na enkele minuten in App Store Connect > TestFlight." + ;; *) - stop "onbekende optie '$MODUS' (kies: controle, simulator of toestel)" + stop "onbekende optie '$MODUS' (kies: controle, simulator, toestel of archief)" ;; esac