Proat.
BRONRELEASE · 7 SEPTEMBER 2026

# Proat 1.92 zelf bouwen

Deze handleiding hoort bij de macOS-broncode, versie 1.92, build 192. De opdracht hieronder bouwt zonder Apple-account, certificaat of API-sleutel voor ondertekening. Pak de broncode uit en open Terminal in de map met `VoiceInk.xcodeproj`.

## Wat je nodig hebt

- Een Mac met volledige Xcode-installatie. De release-machine gebruikte Xcode 26.6 (17F113). De app heeft macOS 14.4 als minimale doelversie.
- Git en CMake 3.28 of hoger. Xcode levert onder meer Swift, libtool en dsymutil.
- Voor `make setup` moeten de macOS-, iOS-, tvOS- en visionOS-SDK's beschikbaar zijn: het gebruikte whisper-script bouwt een XCFramework voor die platforms.
- Internet voor whisper.cpp en de Swift Package Manager-afhankelijkheden. De elf packageversies staan vastgelegd in `VoiceInk.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved`.

## 1. Whisper voorbereiden

Onderstaande opdrachten gaan uit van een nieuwe map `~/VoiceInk-Dependencies/whisper.cpp`. De commit is die van de schone whisper-checkout op de release-machine. Voer `make setup` uit vanuit de uitgepakte Proat-bronmap.

    mkdir -p "$HOME/VoiceInk-Dependencies"
    git clone https://github.com/ggerganov/whisper.cpp.git "$HOME/VoiceInk-Dependencies/whisper.cpp"
    git -C "$HOME/VoiceInk-Dependencies/whisper.cpp" checkout --detach 080bbbe85230f624f0b52127f1ae1218247989f9
    (cd "$HOME/VoiceInk-Dependencies/whisper.cpp" && ./build-xcframework.sh)
    make setup

Het framework wordt eerst direct vanaf de vastgezette commit gebouwd. Daardoor controleert `make setup` alleen het aanwezige resultaat en voert het geen `git pull` uit.

Bestaat deze afhankelijkheidsmap al, controleer dan eerst de checkout en het eerder gebouwde framework. `make setup` slaat een aanwezig `build-apple/whisper.xcframework` over. Alleen een andere commit uitchecken vernieuwt dat framework dus niet.

Het Xcode-project verwijst naar `$(HOME)/VoiceInk-Dependencies/whisper.cpp/build-apple/whisper.xcframework`. Dit pad gebruikt de thuismap van de bouwer. De twee overige relatieve whisper-verwijzingen in het project worden niet door de link- of embedfase gebruikt.

## 2. De app bouwen zonder ondertekening

Gebruik deze directe Xcode-opdracht. De meegeleverde `make local`-opdracht is bedoeld voor de oorspronkelijke ontwikkelmachine en bevat daarvoor persoonlijke ondertekeninstellingen.

    xcodebuild -project VoiceInk.xcodeproj \
      -scheme VoiceInk \
      -configuration Debug \
      -derivedDataPath "$PWD/.source-build" \
      -xcconfig LocalBuild.xcconfig \
      CODE_SIGNING_ALLOWED=NO \
      CODE_SIGNING_REQUIRED=NO \
      CODE_SIGN_IDENTITY="" \
      CODE_SIGN_STYLE=Manual \
      DEVELOPMENT_TEAM="" \
      ENABLE_HARDENED_RUNTIME=NO \
      CODE_SIGN_ENTITLEMENTS=VoiceInk/VoiceInk.local.entitlements \
      PRODUCT_BUNDLE_IDENTIFIER=ai.vakwark.proat.source \
      build

De overrides schakelen ondertekening en het bijbehorende hardened runtime uit. De lokale configuratie behoudt `LOCAL_BUILD`; de lokale entitlements bevatten geen iCloud-groepen. De aparte bundle-ID houdt deze bronbuild gescheiden van een bestaande Proat-installatie.

Het resultaat staat in `.source-build/Build/Products/Debug/Proat.app`. Er is voor deze buildopdracht geen Mistral-sleutel nodig. Gebruik van cloudtranscriptie vraagt later om je eigen providersleutel.

## Reikwijdte en controles

De opdrachten zijn beoordeeld tegen de meegeleverde projectpaden en buildinstellingen. Deze specifieke unsigned-buildopdracht is niet opnieuw volledig uitgevoerd. Een geslaagde build bewijst geen werkende microfoon, transcriptie of automatisch plakken.

De bronbuild is niet ondertekend of genotariseerd als distributierelease. Opstarten en macOS-toestemmingen moeten apart worden gecontroleerd. Voor automatisch plakken is toestemming voor Toegankelijkheid nodig.

De macOS-build gebruikt het meegeleverde `VoiceInk/Services/DictionaryPack.generated.swift`. De oorspronkelijke `dictionary/generate.py --check` verwacht daarnaast een iOS-uitvoerbestand dat niet in deze macOS-bronzip zit. Die controle is daarom geen geldige zelfstandige controle voor deze zip.

De mapselectie bevat appbron, assets, entitlements, Xcode-project, tests, woordenboekbron en de oorspronkelijke `LICENSE`. iOS-code, interne projectdocumenten, ontwikkelcredentials en buildproducten zijn niet nodig voor de hier beschreven macOS-build.