3.9 KiB
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-iosstaat inMijnBesluit.App.csproj, maar standaard uit. Aanzetten met-p:MetIos=true, of doorMetIosblijvend 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/heeftAppDelegate.cs,Program.csenInfo.plist.Toestelslotheeft 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 inInfo.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
- D-U-N-S aanvragen voor de B.V. (kan weken duren, en Google Play wacht er ook op)
- Apple Developer Program, als organisatie
- Mac regelen, Xcode erop, Pair to Mac aan de praat
- Bouwen en op een echt toestel zetten
- Uitproberen: inloggen met een code, de socket, de kluis, het slot met Face ID
- Meldingen via APNs
- Inzenden