Hinweis
Verwaltete Einstellungen gibt es ab TypeWhisper für Mac 1.8. Den verwalteten Lizenzschlüssel (ManagedLicenseKey) gibt es schon seit 1.6.1. Ohne Profil ändert sich nichts. Wie du TypeWhisper selbst verteilst, beschreibt die Seite Bereitstellung.
Schnellstart
- Lade den Profilgenerator und erstelle ein Profil mit den Einstellungen, die du brauchst. Er prüft jeden Wert, bevor er das Profil schreibt.
- Lade das Profil in dein MDM hoch, etwa als eigenes Profil in Iru oder unter Configuration Profiles in Jamf Pro, und weise es einem Test-Mac zu.
- Öffne auf dem Mac TypeWhisper > Einstellungen > Erweitert > Verwaltete Einstellungen. Dort stehen die verwalteten Werte und alle Probleme mit Richtlinien.
# Generator aus dem Release, das du verteilst (hier v1.8.0)
curl -fsSLO https://raw.githubusercontent.com/TypeWhisper/typewhisper-mac/v1.8.0/deployment/macos/make-typewhisper-profile.py
chmod +x make-typewhisper-profile.py./make-typewhisper-profile.py \
--set AllowCloudTranscription=false \
--set AllowCloudTextProcessing=false \
--set TranscriptionProviderId=com.typewhisper.parakeet \
--set TranscriptionModelId=parakeet-tdt-0.6b-v3 \
--set SuppressOptionalPrompts=true \
--recommend LaunchAtLogin=true \
--domain com.typewhisper.mac \
--domain com.typewhisper.typewhisper-app \
--identifier com.example.typewhisper \
--organization "Example Corp" --output TypeWhisper.mobileconfigDetails stehen unter Profilgenerator, Iru, Jamf Pro und andere MDMs.
So funktionieren verwaltete Einstellungen
Ein Konfigurationsprofil setzt verwaltete Einstellungen für die Preference Domain der App. Das ist derselbe Weg, den Iru, Jamf und andere MDMs für App-Einstellungen nutzen. Jede Edition hat ihre eigene Domain:
| Edition | Domain |
|---|---|
| TypeWhisper (Direkt-Download) | com.typewhisper.mac |
| TypeWhisper aus dem Mac App Store | com.typewhisper.typewhisper-app |
| Entwicklungs-Builds | dieselben Domains mit der Endung .dev, nur für Tests |
Schlüssel auf der obersten Ebene des Payloads sind erzwungen: Benutzer können sie nicht ändern. Schlüssel in einem Dictionary Recommended sind Vorgaben der Administration: Sie gelten, bis der Benutzer selbst etwas wählt, und bleiben änderbar. Setzen mehrere Quellen einen Wert, gilt diese Reihenfolge:
- Erzwungener Wert
- Eigene Wahl des Benutzers
- Empfohlener Wert
- Standard der App
TypeWhisper schreibt diese Werte nie und überschreibt nie die eigene Einstellung eines Benutzers. Wird ein Wert entfernt, gilt wieder die Einstellung des Benutzers.
Aufbau des Profils
Jeder Payload nennt die Domain als PayloadType und enthält die Einstellungen neben seinen eigenen Payload-Schlüsseln. Ist das Profil installiert, listen die Systemeinstellungen jede Einstellung mit ihrem Wert auf:
<dict>
<key>PayloadType</key>
<string>com.typewhisper.mac</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadIdentifier</key>
<string>com.example.typewhisper.com.typewhisper.mac</string>
<key>PayloadUUID</key>
<string>0D5A3A6E-9C1B-4F3A-8E2D-6B7C1F0A2E41</string>
<key>PayloadDisplayName</key>
<string>TypeWhisper managed settings</string>
<key>UpdateMode</key>
<integer>1</integer>
<key>AllowedUpdateChannels</key>
<array>
<string>stable</string>
</array>
<key>SuppressOptionalPrompts</key>
<true/>
<key>Recommended</key>
<dict>
<key>LaunchAtLogin</key>
<true/>
</dict>
</dict>- Das umgebende Profil ist dasselbe wie in den Beispielprofilen.
- Der Payload für eigene Einstellungen (
com.apple.ManagedClient.preferences) mit den Werten unterForced>mcx_preference_settingsfunktioniert genauso. - Geräte- und Benutzerprofile funktionieren beide. Ein Geräteprofil gilt für alle Benutzer des Mac, ein Benutzerprofil nur für diesen Benutzer.
- macOS kopiert einige Schlüssel des Profils selbst in die Domain, etwa
PayloadUUIDund_manualProfile. TypeWhisper ignoriert Schlüssel, die mitPayloadoder_beginnen.
Werttypen und Listen
- Schalter sind Booleans:
<true/>oder<false/>.<integer>1</integer>ist kein Boolean. - Auswahlwerte sind Integer.
- Text ist ein String mit höchstens 1024 Zeichen und ohne Steuerzeichen; Leerzeichen am Anfang und Ende werden entfernt, leer darf er nicht sein.
- Listen sind Arrays mit höchstens 256 Strings. Ein leeres Array oder der einzige Eintrag
noneerlaubt nichts. Ein ungültiger Eintrag macht die ganze Liste ungültig. - Schlüsselnamen unterscheiden Groß- und Kleinschreibung. Ein Schlüssel, der sich nur darin unterscheidet, wird mit dem gemeinten Namen gemeldet und ignoriert.
Ungültige und unbekannte Werte
- Ein Wert mit falschem Typ ist ungültig. Ein ungültiger erzwungener Wert sperrt alles, was sein Schlüssel steuert, bis er korrigiert ist, und lockert nie eine Einschränkung: Ein ungültiger
AllowCloudTranscriptionsperrt jede Engine, auch lokale, ein ungültigerAllowedPluginsjedes Plugin, ein ungültiger Update-Schlüssel pausiert Updates. - Unbekannte Schlüssel, eine ungültige Empfehlung und Einschränkungen unter
Recommendedmeldet die App und ignoriert sie. - Werte, die mit
defaults writegeschrieben sind, kann der Benutzer selbst ändern. TypeWhisper ignoriert und meldet sie daher. Die einzige Ausnahme istManagedLicenseKey, siehe unten.
Wann Änderungen gelten
TypeWhisper liest das Profil beim Start, bevor irgendeine andere Einstellung verwendet wird. Ein Profil, das beim ersten Start vorhanden ist, gilt also sofort. Danach liest die App es erneut, wenn sie aktiv wird, nach dem Ruhezustand, nach der Rückkehr in die Benutzersitzung und alle 30 Sekunden. macOS meldet Profiländerungen nicht von selbst; ein neues, ersetztes oder entferntes Profil gilt daher spätestens nach etwa 30 Sekunden, ohne Neustart.
Referenz der Schlüssel
Schlüsselnamen, Werte und Rangfolge entsprechen den Richtlinien von TypeWhisper für Windows, bis auf einige Plugin- und Anbieter-IDs (siehe „Anbieter-IDs“); dieselben Entscheidungen gelten also auf beiden Plattformen. Schlüssel, die auch empfohlen werden können, gehören in das Dictionary Recommended. Paare und Anbieter-IDs sind unten näher beschrieben.
Die Mac-App-Store-Edition wird vom App Store aktualisiert und bringt ihre Plugins mit. Sie ignoriert die Schlüssel mit dem Vermerk „nur Direkt-Download“ und listet sie als Probleme mit Richtlinien: ManagedLicenseKey, UpdateMode, UpdateChannel, AllowedUpdateChannels und AllowPluginDownloads.
Lizenz
| Schlüssel | Verhalten |
|---|---|
Managed | Aktiviert eine kommerzielle Lizenz für den angemeldeten Benutzer und verwaltet die Lizenzsteuerung in der App, solange der Wert gesetzt ist. Supporter-Schlüssel werden nicht akzeptiert. Ein neuer, geänderter oder entfernter Schlüssel aus einem Profil gilt spätestens nach etwa 30 Sekunden, ohne Neustart. Siehe „Verwalteter Lizenzschlüssel“ weiter unten. |
Modelle
| Schlüssel | Verhalten |
|---|---|
TranscriptionTranscription | Erzwungen: legt Transkriptions-Engine und -Modell überall fest: bei Diktat und Live-Vorschau, Datei-Transkription, Recorder, überwachten Ordnern, Wiederherstellung, erneuter Transkription im Verlauf und in der HTTP-API. Empfohlen: die erste Auswahl eines Benutzers, der noch keine Engine gewählt hat. Setze beide Werte gemeinsam, entweder erzwungen oder empfohlen. |
LlmLlm | Erzwungen: ersetzt Anbieter und Modell jedes Sprachmodell-Aufrufs: Workflows, Prompts, die globalen LLM-Fallbacks, Übersetzung per Sprachmodell und die Textverarbeitung über die API. Empfohlen: ersetzt das eingebaute Standard-Sprachmodell eines Benutzers, der es nicht geändert hat. Setze beide Werte gemeinsam, entweder erzwungen oder empfohlen. |
Updates und Start
| Schlüssel | Verhalten |
|---|---|
Update | 0 Extern: keine Update-Prüfungen, Downloads oder Installationen; die Einstellungen zeigen „App-Updates werden von deiner Organisation verwaltet.“ 1 Nur prüfen: TypeWhisper prüft beim Start, bei einer Änderung der Richtlinie und im regulären Rhythmus und zeigt eine neuere Version unter Einstellungen > Über an, ohne sie zu installieren. 2 Durch Nutzer: Updates werden nur installiert, wenn der Benutzer sie startet; im Hintergrund wird nichts geladen oder installiert. Nicht gesetzt: normales Update-Verhalten. Sobald UpdateMode gesetzt ist, fragt die App nicht, ob sie automatisch prüfen soll. |
Update | 0 Stable, 1 Daily, 2 Release Candidate. Erzwungen: legt den Kanal fest und sperrt die Auswahl „Update-Kanal“. Empfohlen: der Kanal für Benutzer, die noch keinen gewählt haben. |
Allowed | Einträge stable, daily, release-candidate. Die Auswahl „Update-Kanal“ bietet nur diese Kanäle an, und Prüfungen auf einem anderen Kanal werden abgelehnt. Ein leeres Array oder none als einziger Eintrag schaltet App-Updates ab; neben einem Kanal wird none ignoriert. Ein erzwungener UpdateChannel außerhalb der Liste ist ein Richtlinienproblem und schaltet Updates ab; TypeWhisper wechselt den Kanal nie eigenständig. |
Launch | Erzwungen: true registriert das Anmeldeobjekt von TypeWhisper, false entfernt es; die Einstellung ist gesperrt, und der vorherige Zustand kehrt zurück, sobald der Wert entfernt wird. Empfohlen: gilt einmalig für Benutzer, die die Einrichtung noch nicht abgeschlossen und selbst nichts gewählt haben. Benutzer können das Anmeldeobjekt in den Systemeinstellungen weiterhin abschalten, solange kein Service-Management-Payload es freigibt; siehe Bereitstellung. |
Skip | true hält den Einrichtungsassistenten geschlossen, wenn eine Transkriptions-Engine bereit ist, Mikrofon und (beim Direkt-Download) Bedienungshilfen erlaubt sind und ein Diktat-Tastenkürzel existiert. Sonst öffnet sich eine noch nicht begonnene Einrichtung beim ersten fehlenden Schritt statt auf der Willkommensseite. Nichts wird als abgeschlossen markiert, daher erscheint die Einrichtung wieder, wenn eine Voraussetzung wegfällt oder der Wert entfernt wird. |
Suppress | true blendet die automatische Übersicht „Neu in TypeWhisper“, den Hinweis auf die iPhone-App, die Lizenzkarte für berufliche Nutzung auf der Seite „Start“ und die Schaltfläche zum Freischalten auf der Premium-Seite aus. Lizenz-, Einrichtungs-, Berechtigungs-, Richtlinien- und Fehlermeldungen bleiben sichtbar; „Neu in TypeWhisper“ bleibt unter Einstellungen > Über erreichbar, Einstellungen > Lizenz ebenso. |
Daten und Plugins
| Schlüssel | Verhalten |
|---|---|
Allow | false hält Audio auf dem Mac: Nur Plugins mit dem Verarbeitungsort local transkribieren. Diktat, Datei-Transkription, Recorder, überwachte Ordner, Wiederherstellung, erneute Transkription im Verlauf und die HTTP-API lehnen mit Begründung ab, statt Audio an eine gesperrte Engine zu senden; die API antwortet mit 403. |
Allow | false hält Transkripte, Prompts, Wörterbuchbegriffe und Kontext auf dem Mac: Sprachmodelle, Nachbearbeitung, Aktionen, Sprachausgabe, Memory-Plugins und Ereignis-Empfänger, die nicht lokal arbeiten, erhalten nichts. Auch Wörterbuchbegriffe gehen nicht mehr als Prompt-Text an eine Transkriptions-Engine, die nicht lokal arbeitet. |
Allowed | Anbieter-IDs, die Audio empfangen dürfen; siehe „Anbieter-IDs“ weiter unten. Gilt überall, auch wenn ein Workflow oder eine API-Anfrage eine andere Engine verlangt. |
Allowed | Anbieter-IDs, die Text empfangen dürfen, auch in Workflows, Prompts, Übersetzung per Sprachmodell und bei der Memory-Extraktion. Apple Intelligence ist com.typewhisper.apple-intelligence. |
Allowed | Plugin-IDs, die installiert, geladen und aktiviert werden dürfen. Ein Plugin außerhalb der Liste wird nie geladen. Ein laufendes Plugin, das die Liste nicht mehr erlaubt, wird beendet und wieder geladen, sobald die Liste es erlaubt. Apple Intelligence ist eingebaut und nicht betroffen; schränke es mit AllowedLlmProviders ein. |
Allow | false lehnt das Installieren und Aktualisieren von Plugins aus dem Marketplace, aus Einstellungssicherungen, aus der Einrichtung und aus Dateien ab. Installierte Plugins laufen weiter. |
Allow | false lehnt Modell-Downloads ab: Modelle, die ein Plugin aus seinen Einstellungen, beim Laden oder beim Wiederherstellen lädt, Importe von Hugging Face und die Modelle der Sprechererkennung. Installierte Modelle funktionieren weiter. Ältere Plugin-Versionen prüfen den Schlüssel nicht und können weiter Modelle laden; aktualisiere die Plugins, bevor du ihn setzt. |
Anbieter-Modell-Paare
Ein Paar nennt einen Anbieter über seine Anbieter-ID und ein Modell über die ID, die der Anbieter auflistet, zum Beispiel com.typewhisper.parakeet mit parakeet-tdt-0.6b-v3 oder com.typewhisper.groq mit whisper-large-v3. Bei einem Plugin mit mehreren Anbietern, etwa OpenAI Compatible mit mehreren Endpunkt-Profilen, nennst du den Anbieter als <Plugin-ID>:<Anbieter-ID>. Anbieter, die keine Modelle auflisten, übernehmen die ID wie geschrieben. Ein erzwungenes Paar mit nur einem Wert ist ungültig und blockiert die Funktion, bis es vollständig ist; ein unvollständiges empfohlenes Paar wird gemeldet und ignoriert.
Erzwungene Paare
Ein erzwungenes Transkriptionspaar nutzen Diktat und Live-Vorschau, Datei-Transkription, Recorder, überwachte Ordner, Wiederherstellung, erneute Transkription im Verlauf und die HTTP-API, unabhängig von der gewählten Engine, von Workflows mit eigener Engine und von Engines einzelner Funktionen. Eine API-Anfrage für eine andere Engine, ein anderes Modell oder das Laden eines anderen Modells erhält 403. Die Auswahlfelder für Engine und Modell sind gesperrt. Die eigene Auswahl des Benutzers bleibt gespeichert und gilt wieder, sobald das Paar entfernt wird.
Parakeet ab 1.5.0 und WhisperKit ab 1.3.0 nutzen das erzwungene Modell, ohne es zu speichern. Wird das Paar entfernt, kehren sie zu dem Modell zurück, das der Benutzer gewählt hatte, oder zu keinem Modell, auch wenn das Profil entfernt wurde, während TypeWhisper nicht lief. Wählt der Benutzer in der Zwischenzeit auf der Einstellungsseite der Engine ein Modell, wird es gespeichert und nach dem Entfernen des Paars verwendet. Andere Engines speichern das erzwungene Modell als ihre Auswahl; siehe „Bekannte Grenzen“.
Ein erzwungenes Sprachmodell-Paar ersetzt Anbieter und Modell jedes Sprachmodell-Aufrufs. Workflow-Editor und globale LLM-Fallbacks behalten ihre gespeicherte Auswahl, sind aber gesperrt.
Fehlende Anbieter und Modelle
Ein Paar, das sich nicht nutzen lässt, weicht nie auf einen anderen Anbieter aus. Ist der Anbieter nicht installiert, abgeschaltet oder durch einen anderen Schlüssel gesperrt, oder bietet er das Modell nicht an, wird die betroffene Funktion mit Begründung blockiert, und Einstellungen > Erweitert > Verwaltete Einstellungen führt das Problem auf. Steht AllowModelDownloads auf false, verteile die Modelldateien zusammen mit der App.
Empfohlene Paare
Ein empfohlenes Paar wird einmal angewendet: wenn der Benutzer noch keine Engine gewählt (oder das eingebaute Standard-Sprachmodell behalten) hat und Anbieter und Modell bereit sind, das Modell also schon heruntergeladen ist. Eine Empfehlung startet nie einen Download. Danach kann der Benutzer das Paar ändern.
Anbieter-IDs
- Richtlinien nennen Anbieter über die Plugin-ID, also die
idim Manifest des Plugins, zum Beispielcom.typewhisper.parakeet,com.typewhisper.whisperkitodercom.typewhisper.groq. Eine Plugin-ID umfasst alle Anbieter, die das Plugin bereitstellt. - Für einen einzelnen Anbieter eines Plugins mit mehreren, etwa ein Endpunkt-Profil von OpenAI Compatible, schreibst du
<Plugin-ID>:<Anbieter-ID>. - Apple Intelligence ist in die App eingebaut und hat die ID
com.typewhisper.apple-intelligence. - Beim Vergleich zählt die Groß- und Kleinschreibung nicht.
- Der Plugin-Katalog unter
https://typewhisper.github.io/typewhisper-mac/plugins-community-v1.jsonnenntidundlocalityjedes Plugins. Nicht alle IDs beginnen mitcom.typewhisper; Mistral AI etwa istcom.minerale.mistralai. Modell-IDs liefertGET /v1/modelsder lokalen HTTP-API im Feldid. - Einige Plugin-IDs unterscheiden sich von TypeWhisper für Windows: Parakeet ist auf dem Mac
com.typewhisper.parakeetund unter Windowscom.typewhisper.sherpa-onnx. Pflegst du dieselben Vorgaben für beide Plattformen, nimm in die Listen beide IDs auf; für Paare brauchst du pro Plattform eigene Werte.
Cloud-Verarbeitung und Verarbeitungsort
Jedes Plugin gibt im Feld locality seines Manifests an, wo es Inhalte verarbeitet; der Plugin-Katalog veröffentlicht denselben Wert:
local: Nichts verlässt den Mac.cloud: der feste Dienst des Anbieters.configurable: ein Endpunkt, Skript oder Befehl, den der Benutzer festlegt und den TypeWhisper nicht einordnen kann.
Steht AllowCloudTranscription oder AllowCloudTextProcessing auf false, erhalten nur noch local-Plugins diese Inhalte. Plugins mit cloud oder configurable und Plugins ohne bekannten Wert werden abgelehnt.
Wichtig
Plugin-Versionen, die vor TypeWhisper 1.8 erschienen sind, haben kein Feld locality und werden unter diesen Schlüsseln abgelehnt, auch lokale. Aktualisiere die Plugins, bevor du die Schlüssel setzt.
Ein Plugin, das nicht lokal arbeitet und dessen Fähigkeiten (die Kategorien im Manifest) alle abgelehnt sind, wird ganz abgelehnt: Es wird weder installiert noch geladen oder aktiviert, und Marketplace und Plugin-Seite nennen den Grund. Ein Plugin mit einer erlaubten Fähigkeit läuft weiter; die abgelehnte Fähigkeit wird dort abgelehnt, wo sie genutzt wird. Abgelehnte Engines und Sprachmodelle verschwinden aus den Auswahlfeldern.
Ist die gewählte Engine abgelehnt, nutzt TypeWhisper vorübergehend eine erlaubte Engine, wie bei jeder nicht verfügbaren Engine, und behält die Wahl des Benutzers für den Fall, dass sie wieder erlaubt wird. Ist keine erlaubte Engine bereit, nennt das Diktat den Grund.
Bekannte Grenzen
- Der Code eines Plugins, das lief, als es abgelehnt wurde, bleibt geladen, bis TypeWhisper beendet wird. Das Plugin erhält keine weiteren Aufrufe.
- Konfigurationsaktionen in den Einstellungen eines Plugins, etwa das Prüfen eines API-Schlüssels, laufen weiter. Sie übertragen Zugangsdaten, keine Transkripte.
- Audio, das eine Streaming-Engine vor einer strengeren Richtlinie bereits empfangen hat, lässt sich nicht zurückholen. Die Richtlinie gilt wieder bei der nächsten Anfrage.
- Ein ganz abgelehntes Plugin läuft nie. TypeWhisper kennt seine Engine-IDs daher nur von einem früheren Start mit TypeWhisper 1.8 oder neuer. Gehört die gewählte Engine zu einem solchen Plugin und ist keine erlaubte Engine bereit, meldet das Diktat womöglich, dass keine Engine gewählt ist, statt den Grund zu nennen.
- Hatte eine Engine vor einem erzwungenen Paar kein Modell gewählt, bleibt das erzwungene Modell nach dem Entfernen des Paars ausgewählt, weil Plugins eine Auswahl nicht löschen können. Die Engine-Wahl des Benutzers und ein selbst gewähltes Modell kehren zurück. Parakeet ab 1.5.0 und WhisperKit ab 1.3.0 sind nicht betroffen.
- Ein Paar mit Apple Intelligence akzeptiert jede Modell-ID, etwa
default, weil Apple Intelligence nur ein Systemmodell hat, und setzt macOS 26 oder neuer voraus; auf älteren Versionen blockiert das Paar die Sprachmodell-Funktionen. - Die Schlüssel steuern das Verhalten von TypeWhisper. Sie sind keine Netzwerk-Firewall: Nutze für stärkere Garantien die Netzwerkkontrollen deines MDM.
Verwalteter Lizenzschlüssel
ManagedLicenseKey aktiviert eine kommerzielle Lizenz in der Sitzung des angemeldeten Benutzers. Du musst Polar nicht selbst aufrufen und nicht in den Schlüsselbund der Benutzer schreiben. Leerzeichen am Anfang und Ende werden ignoriert, und Supporter-Schlüssel werden nicht akzeptiert. Den Schlüssel gibt es seit TypeWhisper 1.6.1 und nur beim Direkt-Download: Apps-und-Bücher-Lizenzen der Mac-App-Store-Edition enthalten keine In-App-Käufe.
Nutze das Beispielprofil für die Lizenz und ersetze den Platzhalter durch deinen Lizenzschlüssel; maskiere dabei Sonderzeichen für XML. Oder erstelle ein Profil mit dem Generator (--set ManagedLicenseKey=…); der Schlüssel landet dann im Shell-Verlauf und steht, solange der Generator läuft, in dessen Kommandozeile, die andere Benutzer des Mac sehen können. Nutze dafür einen Mac, an dem nur du arbeitest, und lösche den Verlaufseintrag danach. Lade das Profil als eigenes Profil hoch und weise es den Macs zu. Installiere die App und starte TypeWhisper dann in der Sitzung jedes Benutzers mit Internetverbindung oder starte die App neu.
Alternative: Skript
Derselbe Wert lässt sich mit defaults im Kontext des jeweiligen Benutzers schreiben:
/usr/bin/defaults write com.typewhisper.mac ManagedLicenseKey -string 'YOUR_LICENSE_KEY'Das ist eine Vorgabe zur Bereitstellung, keine Zugriffskontrolle: Ein erzwungenes MDM-Profil verhindert, dass Benutzer den Wert ändern, ein mit defaults geschriebener Wert nicht. MDM-Agenten führen Skripte meist als root aus; Einstellungen von root konfigurieren die App des angemeldeten Benutzers nicht. Nutze die Ausführung in der Benutzersitzung deines MDM und warte, bis ein Benutzer angemeldet ist. Schalte kein Shell-Tracing (set -x) ein und halte echte Schlüssel aus Shell-Verläufen und Befehlsprotokollen heraus. Solange defaults läuft, steht der Schlüssel außerdem in dessen Kommandozeile, die andere Benutzer des Mac sehen können; nutze deshalb bevorzugt das Konfigurationsprofil.
Aktivierung
- Die App liest den Schlüssel beim Start. Kommt er aus einem Konfigurationsprofil, liest sie ihn ab TypeWhisper 1.8 bei jeder Profiländerung erneut, sodass ein neuer, geänderter oder entfernter Schlüssel spätestens nach etwa 30 Sekunden ohne Neustart gilt. Frühere Versionen und ein mit
defaultsgeschriebener Schlüssel brauchen nach einer Änderung einen Neustart. Einstellungen > Lizenz bietet zusätzlich „Aktivierung erneut versuchen“. - Die App speichert Schlüssel und Polar-Aktivierung im Schlüsselbund des Benutzers und aktiviert nicht bei jedem Start neu. Mehrere Benutzer auf einem Mac haben eigene Schlüsselbund-Einträge und Aktivierungen; ein Mac mit mehreren Benutzern belegt daher eine Aktivierung pro Benutzer.
- Die erste Aktivierung braucht eine Internetverbindung. Schlägt sie fehl, lässt sie sich unter Einstellungen > Lizenz oder beim nächsten Start wiederholen; einen Wiederholungsversuch im Hintergrund gibt es nicht. Bestehende Lizenzen behalten ihre normale Offline-Prüfung.
- Solange der Schlüssel verwaltet wird, blendet die Lizenzseite die manuelle Aktivierung kommerzieller Lizenzen und die Planauswahl aus, unterdrückt Hinweise zur Lizenzwahl und zeigt den Status ohne den Schlüssel. Mikrofonberechtigung, Modelleinrichtung und Einrichtungsassistent bleiben unverändert.
Schlüssel ändern oder entfernen
- Ein neuer Schlüssel wird geprüft und gespeichert, bevor die alte Aktivierung deaktiviert wird. Scheitert der neue Schlüssel, bleibt der bisherige Eintrag erhalten.
- Scheitert das Deaktivieren der alten Aktivierung, merkt sich die App sie im Schlüsselbund und versucht es bei späteren Starts und über „Aktivierung erneut versuchen“ erneut: höchstens drei Einträge pro Durchgang, zuerst nach einer Stunde, dann mit doppeltem Abstand bis zu einmal am Tag. Lehnt Polar eine Anfrage dreimal endgültig ab, etwa mit HTTP 422, hört die App für diesen Eintrag auf. Die aktuelle Aktivierung wird dabei nie deaktiviert. Aktivierungen, die danach noch in Polar stehen, lassen sich dort entfernen.
- Wird der Wert entfernt, kehren die manuellen Lizenzfunktionen zurück: bei einem Profil ab TypeWhisper 1.8 sofort, sonst beim nächsten Start. Die bestehende Aktivierung wird weder widerrufen noch gelöscht, und das Aufräumen ersetzter Aktivierungen läuft weiter. Deaktiviere sie manuell oder widerrufe die Lizenz zentral in Polar. Zentrale Änderungen bemerkt die App bei der nächsten Prüfung, beim Start oder über „Aktivierung erneut versuchen“, sobald die letzte erfolgreiche Prüfung einer aktiven Lizenz mehr als sieben Tage zurückliegt.
- Eine widerrufene Lizenz wird nicht immer wieder aktiviert. Eine in Polar gelöschte Aktivierung kann neu entstehen, solange der konfigurierte Schlüssel gültig bleibt.
Wichtig
Vertraulichkeit des Schlüssels
Der verwaltete Schlüssel erspart es dir, ihn an Mitarbeitende zu verteilen. Konfigurationsprofile und lokale Einstellungen sind aber kein Geheimnisspeicher: Ausreichend privilegierte Benutzer können einen verteilten Schlüssel auslesen. Nutze die Zugriffskontrollen deines MDM und protokolliere keine Profilinhalte. In der Support-Diagnose erscheint der Schlüssel nur als „[set]“.
Profilgenerator
make-typewhisper-profile.py erstellt ein Konfigurationsprofil aus --set (erzwungen) und --recommend (empfohlen) und prüft jeden Wert gegen die Referenz oben, sodass ein Tippfehler beim Erstellen auffällt und nicht erst auf den Macs. Er braucht Python 3.9 oder neuer, aber keine Pakete; auf einem Mac bringen es die Xcode Command Line Tools mit.
# Updates über die Softwareverteilung, empfohlener (änderbarer) Kanal
./make-typewhisper-profile.py --set UpdateMode=external --recommend UpdateChannel=stable \
--identifier com.example.typewhisper.updates --output TypeWhisper-Updates.mobileconfig
# Nur freigegebene Anbieter und Plugins, keine Plugin-Downloads
./make-typewhisper-profile.py \
--set AllowedTranscriptionProviders=com.typewhisper.parakeet,com.typewhisper.openai \
--set AllowedLlmProviders=com.typewhisper.openai,com.typewhisper.apple-intelligence \
--set AllowPluginDownloads=false \
--identifier com.example.typewhisper.approved --output TypeWhisper-Approved.mobileconfig
# Nur das Parakeet-Plugin darf laden
./make-typewhisper-profile.py --set AllowedPlugins=com.typewhisper.parakeet \
--identifier com.example.typewhisper.plugins --output TypeWhisper-Plugins.mobileconfig- Nimm den Generator aus dem Release, das du verteilst, wie im Schnellstart oben. Dann akzeptiert er genau die Schlüssel, die diese Version liest.
- Listen sind durch Kommas getrennt; ein leerer Wert (
--set AllowedPlugins=) erlaubt nichts. Booleans sindtrueoderfalse. UpdateModeakzeptiertexternal,check-onlyoderuser-initiated,UpdateChannelakzeptiertstable,dailyoderrelease-candidate, jeweils auch als Zahl.- Der Generator lehnt unbekannte Schlüssel ab (bei falscher Groß- und Kleinschreibung mit dem gemeinten Namen), ebenso Einschränkungen in
--recommendund unvollständige Paare. - Halte
--identifierstabil, etwacom.example.typewhisper, damit ein neues Profil ein verteiltes ersetzt, statt ein zweites hinzuzufügen. Die UUIDs des Profils leiten sich aus dem Identifier ab und bleiben beim erneuten Erstellen mit neuen Werten gleich. Nutze pro verteiltem Profil einen eigenen Identifier; Profile mit demselben Identifier ersetzen einander. - Einschränkungen gelten nur für die Domains im Profil. Für beide Editionen nimmst du beide mit
--domainauf oder verteilst ein Profil pro Domain; die App-Store-Edition liest nurcom.typewhisper.typewhisper-app. Schlüssel, die diese Edition ignoriert, lässt der Generator in ihrem Payload weg und sagt das. --scopewählt zwischen Geräte- (System) und Benutzerprofil (User),--nameund--organizationsetzen Anzeigename und Organisation.
Dateien zur Bereitstellung
Alle Dateien liegen im Repository unter deployment/macos. Die Beispiele nutzen die Domain des Direkt-Downloads, sofern ihr Name nichts anderes sagt. Erstelle eigene Profile mit dem Generator, statt die Beispiele zu bearbeiten, damit die Werte geprüft werden.
| Datei | Zweck |
|---|---|
make-typewhisper-profile.py | Erstellt ein Konfigurationsprofil aus KEY=VALUE-Paaren und prüft jeden Wert gegen die Schlüssel auf dieser Seite. Python 3.9 oder neuer, keine Pakete. |
examples/TypeWhisper-LocalOnly.mobileconfig | Audio und Text bleiben auf dem Mac; Parakeet v3 ist für die Transkription erzwungen, und nur Apple Intelligence und Local LLM dürfen Text verarbeiten. |
examples/TypeWhisper-ApprovedCloud.mobileconfig | Nur Parakeet und OpenAI dürfen transkribieren, nur OpenAI und Apple Intelligence dürfen Text verarbeiten, keine Plugin-Downloads; OpenAI ist für die Transkription empfohlen. |
examples/TypeWhisper-DeploymentUpdates.mobileconfig | Deine Softwareverteilung aktualisiert die App, TypeWhisper startet bei der Anmeldung, die Einrichtung bleibt geschlossen, wenn alles bereit ist, und optionale Hinweise sind ausgeblendet. |
examples/TypeWhisper-RecommendedDefaults.mobileconfig | Änderbare Vorgaben für beide Editionen. |
examples/TypeWhisper-LoginItem.mobileconfig | Gibt das Anmeldeobjekt frei (Service-Management-Payload). |
examples/TypeWhisper-Privacy.mobileconfig | Datenschutzeinstellungen (PPPC); siehe die Seite Bereitstellung. |
examples/TypeWhisper-AppSettings-Privacy.json | Deklarative App-Einstellungen für macOS 27 und neuer, die Bedienungshilfen und Mikrofon vorschlagen; siehe die Seite Bereitstellung. |
jamf/<domain>.json | Eigene Schemas für Jamf Pro, eines pro Edition. Das Schema der App-Store-Edition lässt die Schlüssel weg, die diese Edition ignoriert. |
ProfileManifests/<domain>.plist | Dieselben Einstellungen im ProfileManifests-Format von Profil-Editoren wie dem iMazing Profile Editor. |
Iru
Füge das erstellte Profil in der Library als eigenes Profil (Custom Profile) hinzu und weise es den Blueprints der gewünschten Macs zu. Auch die Beispiele für Anmeldeobjekt und Datenschutz sind eigene Profile. Wird das Profil von einem Mac entfernt, gelten spätestens nach etwa 30 Sekunden wieder die eigenen Einstellungen der Benutzer.
Jamf Pro
Jamf Pro kann die Einstellungen über ein Formular setzen, das es aus einem Schema erzeugt:
- Öffne Computers > Configuration Profiles > New, dann Application & Custom Settings > External Applications > Add > Custom Schema.
- Trage die Preference Domain ein,
com.typewhisper.macodercom.typewhisper.typewhisper-app, und füge den Inhalt der passenden Datei ausjamf/ein. - Konfiguriere die Eigenschaften, die du verwalten willst, und lass die übrigen auf „Not Configured“; das schreibt nichts. Empfohlene Einstellungen stehen unter „Recommended settings (users can change)“.
- Lege den Geltungsbereich fest und speichere. Füge bei Bedarf einen zweiten Payload für die andere Edition hinzu.
Jamf Pro liefert die konfigurierten Werte der obersten Ebene als verwaltete Einstellungen aus; TypeWhisper behandelt sie als erzwungen. Werte unter „Recommended settings (users can change)“ sind Vorgaben, die Benutzer ändern können. Ein mit dem Generator erstelltes Profil hochzuladen (Configuration Profiles > Upload) funktioniert ebenso und ist der Weg für die Beispiele zu Anmeldeobjekt und Datenschutz.
Das Schema ist noch nicht in einer Jamf-Pro-Instanz geprüft. Kontrolliere auf einem Pilot-Mac unter Einstellungen > Erweitert > Verwaltete Einstellungen, dass Eigenschaften auf „Not Configured“ nicht auftauchen, bevor du das Profil breit verteilst.
Andere MDMs
Jedes MDM, das eigene Konfigurationsprofile installiert, funktioniert: Lade die erstellte .mobileconfig-Datei hoch. Für einen Profil-Editor importierst du die passende Datei aus ProfileManifests/ oder schreibst den Payload selbst nach dem Aufbau oben. Signiere das Profil, wenn dein MDM signierte Uploads erwartet.
Ohne MDM testen
Öffne das Profil im Finder und installiere es unter Systemeinstellungen > Allgemein > Geräteverwaltung. Die verwalteten Einstellungen gelten dann wie in einer verwalteten Flotte. Payloads für Service Management und Datenschutz wirken dagegen nur, wenn ein MDM sie ausliefert.
Wirksame Werte prüfen
- Einstellungen > Erweitert > Verwaltete Einstellungen listet die verwalteten Werte mit Geltung (erzwungen oder empfohlen), ungültige Schlüssel und „Probleme mit Richtlinien“, dazu den Zeitpunkt, zu dem die aktuellen Werte gelesen wurden (angezeigt als „Zuletzt geprüft“; er ändert sich erst, wenn sich die Werte ändern), und die Schaltfläche „Aktualisieren“.
- Der Bereich erscheint nur, solange ein Wert verwaltet wird, ein Schlüssel gemeldet ist oder die verwalteten Einstellungen nicht lesbar sind. Fehlt er, ist kein verwalteter Wert in der Domain dieser Edition angekommen.
- Gesperrte Einstellungen zeigen „Von deiner Organisation verwaltet“, und abgelehnte Anbieter und Plugins nennen den Grund. Lässt sich das Profil nicht lesen, sagt der Bereich das, und verwaltete Funktionen warten, bis es wieder lesbar ist.
- Die Support-Diagnose (Einstellungen > Erweitert > Support-Diagnose > „Diagnose exportieren“) enthält die verwalteten Werte, ungültige Schlüssel und Prüfprobleme; Probleme mit Paaren und der Edition zeigen nur die Einstellungen. Benutzer können die Diagnose an dich oder an den TypeWhisper-Support schicken.
- Systemeinstellungen > Allgemein > Geräteverwaltung zeigt das installierte Profil mit jeder Einstellung und ihrem Wert.