# AusweisApp für macOS

Diese Ergänzung ersetzt den Linux-Docker-Build durch einen lokalen macOS-Build.
Die AusweisApp basiert auf dem offiziellen Quellcode, Version 2.6.0, Commit
`a4bb6e8103cf9e5990c641e4e4cc018bfe4b79c8`. Der reproduzierbare Patch
`patches/macos-custom.patch` ergänzt macOS-Paketierung, Dock-Symbol und das
lokale Steuerarchiv; es wird keine zweite App installiert.

## Besonderheiten und Copyright

Dieser Build läuft nativ auf Apple Silicon, benötigt weder Docker noch
Rosetta und stellt den lokalen AusweisApp-HTTP-Dienst bereit, den Safari und
andere Browser für die Übergabe des Online-Ausweisvorgangs verwenden
(`127.0.0.1:24727`). Die Funktionen zur Ausweisprüfung stammen aus dem
offiziellen AusweisApp-Quellcode; diese macOS-Ausgabe ergänzt den lokalen
Build, die Paketierung und den Archivbereich.

Das Steuerarchiv und eine Anleitung für die WLAN-Kopplung mit einem iPhone sind in „Hilfe“ integriert. Die Mac-App enthält keine Profilübertragung und sendet keine Kontaktdaten an eine Website.

Das Archiv importiert ausgewählte PDFs und
Bilder in einen lokal verschlüsselten Speicher und kann optional einen
ausgewählten Download-Ordner auf neue PDFs prüfen. Die Schlüssel liegen im
macOS-Schlüsselbund und sind mit Touch ID oder dem Mac-Anmeldepasswort geschützt.
ELSTER-Dokumente werden nicht automatisch aus dem ELSTER-Konto abgerufen.

Copyright der macOS-Buildskripte und Paketierung: © 2026 Enrico Fischer.
Der AusweisApp-Quellcode und die Bibliotheken behalten ihre jeweiligen
Urheber- und Lizenzhinweise, insbesondere die von Governikus GmbH & Co. KG.
Eine entsprechende Information liegt außerdem in
`AusweisApp.app/Contents/Resources/macOS-Buildinfo.txt` und in den
macOS-Bundle-Metadaten. Dieser Build ist keine offizielle Governikus-Distribution. Eine Apple-Signierung oder -Notarisierung ist keine fachliche Freigabe durch Governikus.

## Bauen

Voraussetzungen: macOS 14 oder neuer, Xcode bzw. dessen Entwicklerwerkzeuge,
CMake ab 3.25, Git, Python 3 und Perl. Die Werkzeuge werden nicht automatisch
systemweit installiert. Ninja, Qt, OpenSSL und llhttp werden lokal gebaut.
Downloads der Bibliotheken werden durch die Prüfsummen des AusweisApp-Projekts geprüft.

```sh
./build-macos.sh
```

Der Build kann mehrere Stunden dauern. Standardmäßig werden bis zu zwölf parallele
Build-Aufgaben verwendet; bei Bedarf kannst du `CMAKE_BUILD_PARALLEL_LEVEL` reduzieren. Auf Apple-Chips wird `arm64`, auf Intel `x86_64` gebaut.
Die App liegt anschließend in `dist/AusweisApp.app`. Doppelklick auf
`Starten.command` öffnet sie und prüft den lokalen Statusdienst.

Ein vorhandener Build unter `dist/AusweisApp.app` wird beim nächsten erfolgreichen
Build ersetzt.
Das Buildskript signiert lokal ad hoc. Für die Weitergabe muss das fertige Bundle separat mit einem Developer-ID-Zertifikat signiert und von Apple notariell beglaubigt werden. Führe dafür `./scripts/notarize-macos.sh` aus. Das macht es weiterhin nicht zu einer offiziell von Governikus signierten AusweisApp-Version. Die macOS-Sicherheitsfunktionen werden nicht deaktiviert.

Ein späterer Aufruf des Buildskripts ersetzt das Bundle durch einen neu gebauten Stand; dieser muss vor einer Weitergabe erneut notariell beglaubigt werden.

Eigene Verzeichnisse und Architektur können vor dem Aufruf gesetzt werden:

Bei Leerzeichen im Projektpfad legt das Skript einen Pfadalias in `/tmp` an.
Die tatsächlichen Dateien bleiben im Projektordner. Eigene Build- und
Ausgabepfade müssen ohne Leerzeichen angegeben werden. Für jede Architektur
wird auf einem Mac mit dieser Architektur gebaut.
Qt 6.11 benötigt zusätzlich eine lokale Korrektur der Pfadmaskierung in zwei
Signierbefehlen für seine Testwerkzeuge. Das Skript wendet diese gezielt auf
die heruntergeladenen Qt-Quellen an.
Vor dem Start die bereits laufende offizielle AusweisApp beenden, damit der
lokale Port für die native Version frei ist.

```sh
AUSWEISAPP_BUILD_DIR=/absoluter/pfad/work \
AUSWEISAPP_OUTPUT_DIR=/absoluter/pfad/dist \
AUSWEISAPP_ARCH=arm64 ./build-macos.sh
```

## Warum der Browser Port 24727 benötigt

Für iPhone-Kopplung, automatische WLAN-Suche und Fehlersuche gibt es eine Schritt-für-Schritt-Anleitung: [ANLEITUNG-WLAN.md](ANLEITUNG-WLAN.md).

Der Browser übergibt den Online-Ausweisvorgang an die lokale AusweisApp.
Ein nativer Build ersetzt die Intel-Abhängigkeit, aber benötigt weiterhin den
HTTP-Dienst der AusweisApp. Der Status lässt sich ohne Anmeldung prüfen:

```sh
curl --noproxy '*' 'http://127.0.0.1:24727/eID-Client?Status=json'
```

Ein vorhandener Online-Ausweis, eine PIN und ein kompatibler USB-Kartenleser
oder ein gekoppeltes Smartphone werden weiterhin benötigt.

Quellen: [Docker-Ausgangsprojekt](https://github.com/misery/DockerAusweisApp),
[offizieller Quellcode](https://github.com/Governikus/AusweisApp/tree/2.6.0),
[Build der Bibliotheken](https://github.com/Governikus/AusweisApp/blob/2.6.0/libs/README.rst),
[lokaler Statusdienst](https://www.ausweisapp.bund.de/sdk/desktop.html).

Die Lizenz des Ausgangsprojekts liegt in `LICENSE.txt`. Für die gebaute
AusweisApp und ihre Bibliotheken gelten die Lizenztexte des offiziellen
Quellcodes; diese werden beim Build mitgeliefert.
