Version 0.3.0, Selbstinstallation nach ~/Applications, Gatekeeper im README
Erster Start aus DMG oder Downloads bietet einmalig an, sich nach ~/Applications zu kopieren und von dort neu zu starten — der Weg dorthin braucht kein Administrator-Passwort, anders als /Applications. Ein DMG kann das nicht selbst leisten: der Applications-Alias darin ist ein absoluter Symlink auf /Applications. Die Kopie erbt per ditto die Quarantäne des Downloads, deshalb wird sie am Ziel gelöst — sonst käme beim Neustart erneut die Gatekeeper-Warnung für dieselbe, gerade laufende App. Ablehnen merkt sich die App (moveOfferDismissed), im Debug-Build fragt sie nie. README: ~/Applications als gleichwertiger Installationsort, dazu der Weg über System-Einstellungen -> Datenschutz & Sicherheit fuer alle, die kein Terminal aufmachen wollen. 0.8 ist fuer den Windows-Stand reserviert. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -61,6 +61,20 @@ pub(crate) fn spellcheck_lang(paths: &Paths) -> String {
|
||||
.unwrap_or_else(|| "de".to_string())
|
||||
}
|
||||
|
||||
/// Hat der Nutzer das Angebot, die App nach ~/Applications zu holen, schon
|
||||
/// abgelehnt? (settings.json: moveOfferDismissed, nur macOS)
|
||||
#[cfg_attr(not(target_os = "macos"), allow(dead_code))]
|
||||
pub(crate) fn move_offer_dismissed(paths: &Paths) -> bool {
|
||||
read_app_settings(paths)
|
||||
.and_then(|v| v["moveOfferDismissed"].as_bool())
|
||||
.unwrap_or(false)
|
||||
}
|
||||
|
||||
#[cfg_attr(not(target_os = "macos"), allow(dead_code))]
|
||||
pub(crate) fn set_move_offer_dismissed_in(paths: &Paths, dismissed: bool) -> Result<(), String> {
|
||||
write_app_setting(paths, "moveOfferDismissed", serde_json::json!(dismissed))
|
||||
}
|
||||
|
||||
/// Einen Schlüssel setzen; übrige App-settings bleiben erhalten.
|
||||
///
|
||||
/// Nur eine *fehlende* Datei rechtfertigt ein frisches Objekt. Unlesbar oder
|
||||
|
||||
Reference in New Issue
Block a user