Compare commits

...
2 Commits
Author SHA1 Message Date
jfandClaude Sonnet 5.5 4918df574a docs: iOS bouwen op een gehuurde Mac zonder beheerrechten
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014MGLqt1uKfNARQHut9ifcx
2026-10-20 12:56:49 +00:00
jfandClaude Sonnet 5.5 706403ba31 iOS: bouwen op een Mac zonder Android-werkbelasting, simulator zonder certificaat
MetAndroid=false laat Android weg uit de TargetFrameworks (anders weigert een Mac
zonder Android-werkbelasting de build). ios-bouwen.sh bouwt nu eerst en start daarna,
en gebruikt voor de simulator een lokale handtekening (CodesignKey=-).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014MGLqt1uKfNARQHut9ifcx
2026-10-20 12:51:47 +00:00
3 changed files with 35 additions and 4 deletions
+22
View File
@@ -41,6 +41,28 @@ gecompileerd is, geeft meestal een handvol kleine dingen (een ontbrekende using,
API-naam). `PrivacyInfo.xcprivacy` moet na het bouwen in de `.app` zitten API-naam). `PrivacyInfo.xcprivacy` moet na het bouwen in de `.app` zitten
(`find . -name PrivacyInfo.xcprivacy`). (`find . -name PrivacyInfo.xcprivacy`).
## Een gehuurde Mac (MacinCloud) zonder beheerrechten
Beproefd op 20 oktober 2026: een Managed Server van MacinCloud (Mac mini M2, macOS Tahoe 26.x,
Xcode 26.6), met Windows via RDP. Daar heb je geen beheerrechten, en de .NET die erop staat heeft
een kapotte werkbelastinginstelling. Wat wel werkt:
1. Een eigen .NET in je eigen map, in dezelfde versie als de systeem-.NET:
`bash ~/dotnet-install.sh --version 10.0.302 --install-dir ~/dotnet302`
(script van https://dot.net/v1/dotnet-install.sh), en in elk Terminal-venster:
`export DOTNET_ROOT=$HOME/dotnet302 PATH=$HOME/dotnet302:$PATH`.
2. `dotnet workload install maui-ios` daarmee. **Let op de Xcode-versie:** de nieuwste .NET
(10.0.4xx) levert iOS 27.1 en eist Xcode 27.1 ("requires Xcode 27.1"). De 10.0.3xx-band levert
iOS 26.5 en past bij Xcode 26.x. Gebruik dus de oudere SDK zolang Xcode 26 de nieuwste stabiele is.
3. `tools/ios-bouwen.sh simulator`. Het script zet `MetAndroid=false` (anders eist de build de
Android-werkbelasting) en `CodesignKey=-` (lokale handtekening; de simulator wil geen
certificaat, maar de Keychain-rechten in `Entitlements.plist` vragen om een handtekening).
Geef nooit `-p:TargetFrameworks=...` op de opdrachtregel mee: dat gaat ook naar de gedeelde
projecten (net8.0) en breekt hun herstel.
Resultaat: de app bouwt en draait in de iPhone 16 Pro-simulator (iOS 18.0), inclusief inloggen en
de overzichtsschermen.
## Wat er nog moet ## Wat er nog moet
**Een Mac.** Apple's bouwgereedschap draait alleen op macOS. Visual Studio op Windows verbindt **Een Mac.** Apple's bouwgereedschap draait alleen op macOS. Visual Studio op Windows verbindt
+4 -1
View File
@@ -16,7 +16,10 @@
of blijvend, door MetIos in een Directory.Build.props of in de omgeving te zetten op de of blijvend, door MetIos in een Directory.Build.props of in de omgeving te zetten op de
machine die wél aan een Mac hangt. Zie docs/iOS-app.md. --> machine die wél aan een Mac hangt. Zie docs/iOS-app.md. -->
<TargetFrameworks>net10.0-android</TargetFrameworks> <!-- MetAndroid=false laat Android weg: op een Mac die alleen iOS bouwt staat de Android-
werkbelasting er niet, en dan weigert de hele build (NETSDK1147). Zonder deze schakelaar
verandert er niets: Android blijft standaard aan. -->
<TargetFrameworks Condition="'$(MetAndroid)' != 'false'">net10.0-android</TargetFrameworks>
<TargetFrameworks Condition="'$(MetIos)' == 'true'">$(TargetFrameworks);net10.0-ios</TargetFrameworks> <TargetFrameworks Condition="'$(MetIos)' == 'true'">$(TargetFrameworks);net10.0-ios</TargetFrameworks>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
+9 -3
View File
@@ -45,8 +45,14 @@ case "$MODUS" in
stap "Bouwen en starten in de simulator" stap "Bouwen en starten in de simulator"
# Eerst de lijst met simulators tonen, zodat je ziet welke je kunt kiezen. # Eerst de lijst met simulators tonen, zodat je ziet welke je kunt kiezen.
xcrun simctl list devices available | grep -i iphone | head -5 || true xcrun simctl list devices available | grep -i iphone | head -5 || true
dotnet build "$PROJECT" -f "$TFM" -p:MetIos=true -t:Run \ # Eerst bouwen, daarna starten: met alleen -t:Run bouwt hij de app niet en weet hij niet wat
-p:RuntimeIdentifier=iossimulator-arm64 # 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) toestel)
controle controle
@@ -58,7 +64,7 @@ case "$MODUS" in
echo "(Instellingen > Privacy en beveiliging > Ontwikkelaarsmodus)." echo "(Instellingen > Privacy en beveiliging > Ontwikkelaarsmodus)."
echo "Zonder betaald account werkt dit 7 dagen per installatie, en zonder meldingen." echo "Zonder betaald account werkt dit 7 dagen per installatie, en zonder meldingen."
stap "Bouwen voor het toestel" stap "Bouwen voor het toestel"
dotnet build "$PROJECT" -f "$TFM" -p:MetIos=true \ dotnet build "$PROJECT" -f "$TFM" -p:MetIos=true -p:MetAndroid=false \
-p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Development" -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Development"
echo echo
echo "Gebouwd. Installeren gaat het makkelijkst via Visual Studio (Pair to Mac) of" echo "Gebouwd. Installeren gaat het makkelijkst via Visual Studio (Pair to Mac) of"