Eerste commit

This commit is contained in:
jf
2026-09-27 14:21:31 +00:00
commit de4ff128cb
295 changed files with 47374 additions and 0 deletions
+72
View File
@@ -0,0 +1,72 @@
# De iOS-app
De app voor iPhone en iPad is dezelfde app als die voor Android. `MijnBesluit.AppUi` (alle
schermen), `MijnBesluit.Client` en het socketprotocol zijn gedeeld; op iOS draait diezelfde HTML
in een WKWebView in plaats van een Android WebView. Wat verschilt is alleen wat het toestel zelf
doet.
Dit document gaat over dat verschil, en over wat Apple wil.
## Wat er klaarstaat
- `net10.0-ios` staat in `MijnBesluit.App.csproj`, maar **standaard uit**. Aanzetten met
`-p:MetIos=true`, of door `MetIos` blijvend te zetten op de machine die aan een Mac hangt.
Dat moet wel zo: staat de iOS-doelomgeving er onvoorwaardelijk in, dan wil ook een build van
alleen de Android-APK de iOS-werkbelasting en een Mac hebben, en struikelt het maken van de
APK over iets wat er niets mee te maken heeft.
- `Platforms/iOS/` heeft `AppDelegate.cs`, `Program.cs` en `Info.plist`.
- `Toestelslot` heeft een iOS-tak: Face ID of Touch ID via LocalAuthentication, met de code van
de telefoon als terugval.
- De gebruikstoelichtingen staan in `Info.plist`.
## Wat er nog moet
**Een Mac.** Apple's bouwgereedschap draait alleen op macOS. Visual Studio op Windows verbindt
er over het netwerk mee ("Pair to Mac", over SSH) en laat de Mac compileren en ondertekenen. Op
die Mac moet Xcode staan, één keer met de hand geopend zijn, en Remote Login aan. Staat er geen
Mac, haal `net10.0-ios` dan tijdelijk uit `TargetFrameworks`; Android blijft dan gewoon bouwen.
**Het Apple Developer Program**, $99 per jaar. Als organisatie heb je nodig: een echte
rechtspersoon, een D-U-N-S-nummer daarvoor, een e-mailadres op je eigen domein en een werkende
website op dat domein. Dat D-U-N-S-nummer heb je voor Google Play ook nodig - vraag het één keer
aan.
**Meldingen via APNs.** `Toestelmeldingen` geeft op iOS nu null terug: geen kenmerk, dus geen
meldingen, en verder werkt alles. Dat komt erbij zodra het account er is, want het hangt eraan
vast: een APNs-sleutel, de Push Notifications-capability, een provisioning profile en een
`Entitlements.plist`.
## Twee vallen waar je vroeg in loopt
**Ontbrekende gebruikstoelichting = de app sluit.** Vraag je om Face ID zonder
`NSFaceIDUsageDescription` in `Info.plist`, dan sluit iOS de app ter plekke af. Geen foutmelding,
geen crashmelding die ergens op wijst - hij is gewoon weg. Hetzelfde geldt voor camera, microfoon
en fotobibliotheek. Ze staan er nu allemaal in; komt er ooit iets bij wat het toestel moet
vrijgeven, dan hoort de tekst er in dezelfde wijziging bij te staan. Een zelfcontrole bewaakt dat.
**De socket op poort 5200.** Dat is een eigen TLS-verbinding en geen URL-verkeer, dus App
Transport Security gaat er niet over en je hebt er géén ATS-uitzondering voor nodig. Een
uitzondering toevoegen die je niet nodig hebt levert alleen vragen op bij de beoordeling. Maar
probeer die verbinding wel vroeg op een echt toestel, en ook over 4G en niet alleen over wifi.
## Wat Apple bij het inzenden vraagt
- **Account verwijderen in de app.** Verplicht. Staat er al.
- **App Privacy** - hetzelfde soort formulier als Databeveiliging bij Google. De
privacyverklaring staat in `Privacytekst.razor`.
- **Exportverklaring** (`ITSAppUsesNonExemptEncryption`). Deze app versleutelt een kluis, dus dat
antwoord is niet vanzelfsprekend "nee" zoals bij een app die alleen HTTPS gebruikt. De sleutel
staat bewust NIET in `Info.plist`: dan vraagt App Store Connect het bij elke inzending en
beantwoord je het bewust. Zie de toelichting in dat bestand.
- **Sign in with Apple** is NIET verplicht. Dat geldt alleen als je inloggen via Google of
Facebook aanbiedt; MijnBesluit doet e-mail met een code.
## De volgorde
1. D-U-N-S aanvragen voor de B.V. (kan weken duren, en Google Play wacht er ook op)
2. Apple Developer Program, als organisatie
3. Mac regelen, Xcode erop, Pair to Mac aan de praat
4. Bouwen en op een echt toestel zetten
5. Uitproberen: inloggen met een code, de socket, de kluis, het slot met Face ID
6. Meldingen via APNs
7. Inzenden