#!/usr/bin/env bash # Bouwt (en start) de iOS-app op een Mac. # # 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 cd "$(dirname "$0")/.." PROJECT="src/MijnBesluit.App/MijnBesluit.App.csproj" TFM="net10.0-ios" MODUS="${1:-controle}" stap() { printf '\n==> %s\n' "$*"; } stop() { printf '\nMISLUKT: %s\n' "$*" >&2; exit 1; } controle() { stap "Controle van de Mac" [[ "$(uname)" == "Darwin" ]] || stop "dit script draait alleen op macOS." command -v xcodebuild >/dev/null || stop "Xcode ontbreekt. Installeer Xcode uit de App Store." xcodebuild -version xcodebuild -checkFirstLaunchStatus >/dev/null 2>&1 \ || stop "Open Xcode één keer met de hand en accepteer de licentie (of: sudo xcodebuild -runFirstLaunch)." command -v dotnet >/dev/null || stop ".NET SDK ontbreekt. Installeer .NET 10 van https://dotnet.microsoft.com/download" dotnet --version if ! dotnet workload list 2>/dev/null | grep -q '^maui-ios\|^maui '; then stap "MAUI-werkbelasting voor iOS ontbreekt; installeren" dotnet workload install maui-ios fi dotnet workload list echo; echo "Mac is klaar." } case "$MODUS" in controle) controle ;; simulator) controle stap "Bouwen en starten in de simulator" # Eerst de lijst met simulators tonen, zodat je ziet welke je kunt kiezen. xcrun simctl list devices available | grep -i iphone | head -5 || true # Eerst bouwen, daarna starten: met alleen -t:Run bouwt hij de app niet en weet hij niet wat # hij moet starten. MetAndroid=false: op de Mac staat alleen de iOS-werkbelasting. # CodesignKey=-: een eenvoudige lokale handtekening. De simulator wil geen certificaat, maar de # app heeft wel een handtekening nodig vanwege de Keychain-rechten in Entitlements.plist. dotnet build "$PROJECT" -f "$TFM" -p:MetIos=true -p:MetAndroid=false \ -p:RuntimeIdentifier=iossimulator-arm64 -p:CodesignKey=- dotnet build "$PROJECT" -f "$TFM" -p:MetIos=true -p:MetAndroid=false -t:Run \ -p:RuntimeIdentifier=iossimulator-arm64 -p:CodesignKey=- ;; toestel) controle stap "Aangesloten toestellen" xcrun devicectl list devices || true echo echo "Voor een echt toestel moet in Xcode een team gekozen zijn (Settings > Accounts, Apple-ID" echo "toevoegen) en moet het toestel in Ontwikkelaarsmodus staan" echo "(Instellingen > Privacy en beveiliging > Ontwikkelaarsmodus)." echo "Zonder betaald account werkt dit 7 dagen per installatie, en zonder meldingen." stap "Bouwen voor het toestel" dotnet build "$PROJECT" -f "$TFM" -p:MetIos=true -p:MetAndroid=false \ -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Development" echo 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, toestel of archief)" ;; esac