start - Launching programs - redefined

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • start - Launching programs - redefined

    Hallo zusammen!

    Ich würde euch gern mein Programm "start" vorstellen. Zugegeben, das Programm ist aktuell bereits in der Version 2.x - also nimmer ganz taufrisch - aber ich habe auch erst vor kurzem dieses Forum hier entdeckt :)
    Bei "start" handelt es sich um einen Programmlauncher. Hier gibt es zwar bereits einige aber ich wollte sehr gern ein wenig mehr Ordnung in meine Programme reinbringen und so meine Programme mittels Tags gruppieren (mittels Tags/Schlagworten sind selten benutzte Programme einfach schneller zu finden :) )

    Weitere Infos findet Ihr auf meiner Webseite start.innovative-bytes.net

    "start" ist mein erstes Programm welches ich unter macOS entwickelt habe - die Jahre zuvor habe ich mich hauptsächlich mit der Programmierung unter Windows beschäftigt und nachdem ich nun privat vollständig auf macOS gewechselt bin fand ich es sehr spannend wie die Interna von macOS so funktionieren :)

    Schwierig gestaltete sich die Integration der Apple Sandbox. So lange der User nur Programme starten möchte die im Applications-Folder liegen ist der Zugriff kein Problem. Außerhalb der "Standardverzeichnisse" wird das ganze dann kniffliger und der User muss den Zugriff explizit erlauben. Hierbei verwende ich die Standard-Klassen PermissionManager sowie zum speichern der erlaubten Zugriffe BookmarkManager. Die Gradwanderung auf der einen Seite die Usability für den Anwender so angenehm wie möglich zu gestalten (Programme, Verzeichnisse und Dateien systemweit öffnen zu können) und dennoch die Sandbox zu verwenden ist dabei schwierig (falls jemand eine Idee hat wie dies besser gestaltet werden kann freue ich mich über einen Tipp :) )

    Für die nächste Version möchte ich die Möglichkeit implementieren die zuletzt (systemweit) verwendeten Programme anzuzeigen. Prinzipiell relativ einfach - wenn nicht auch hier die Sandbox den Zugriff auf die systeminternen Infos verhindern würde (com.apple.recentitems.plist bzw. Abfrage der Launchservices). Das ganze wird nun mittels Abfrage der Spotlight-Datenbank realisiert (NSPredicate(format: "kMDItemContentType == 'com.apple.application-bundle' AND kMDItemLastUsedDate >= %@", argumentArray: [startDate])). Das ganze scheint gut zu funktionieren und stört auch die Sandbox nicht - zur finalen Implementierung sind aber noch einige weitere Tests notwendig :)
  • Hallo!

    Die Beschreibung der Lösungsansätze war interessant und ich dachte, dass mir vielleicht mal BookmarkManager oder PermissionManager helfen könnte. Ich hatte es so verstanden, dass es Standardklassen von Apple seien, diese aber nicht gefunden. Kannst du dazu ein bisschen mehr schreiben?

    Grüße
    Marco
  • Hallo Marco,

    hab gerade gesehen dass ich das bei meinem ersten Posting ein wenig unglücklich formuliert habe (ich sollte spät Abends keine Postings mehr schreiben :) ). Die beiden Klassen sind von Vincent Esche. Den Sourcecode dazu findest Du auf GitHub:

    github.com/regexident/Sandbox

    Kurz gesagt:
    Der PermissionManager kümmert sich um die Zugriffserlaubnis auf Dateien und Verzeichnisse außerhalb der Sandbox und arbeitet eng mit dem BookmarkManager zusammen.
    Wichtigste Funktion:
    accessAndIfNeededAskUserForSecurityScopeForFileAtURL

    Diese Funktion ist die "Eierlegende Wollmilchsau" der Klasse. Sie prüft ob der Zugriff auf eine Datei oder ein Verzeichnis möglich ist. Wenn nein wird der User aufgefordert den Zugriff zu gewähren. Das daraus resultierende AccessToken wird mit dem BookmarkManager gespeichert (damit nicht bei jedem Neustart der Anwendung erneut nach einem Zugriffstoken gefragt wird).