Treiber, kext in App ausliefern

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

  • Treiber, kext in App ausliefern

    Hallo,

    ich möchte gerne vermeiden, dass der Anwender eine Installationsroutine zur Installation eines Treibers durchlaufen muss.
    Habe ich auch seit Jahren nicht gemacht, aber die Installation hat mich geschockt.

    - Installation starten
    - mitten im Durchlauf kommt ein Dialog vom System
    - Systemeinstellungen öffnen, zu Sicherheit wechseln
    - dort dann den Knopf drücken um die Installation zu erlauben und abzuschlißen
    - zurück zum Installer

    Das ist schon beachtlich… :D

    Kann ich in meinem App Bundle die kext mitliefern?
    Ja klar, aber kann die auch geladen werden, wenn das "passende" USB-Gerät dazu angeschlossen wird?

    Vielen Dank für Tipps vorab!

    Viele Grüße
  • Das Verhalten wirst du nicht wegbekommen. Seit dem neusten Mac OS ist das das neue Sicherheitsfeeature. Ich find er den größten Dreck aber ist so.

    Manche Programme frieren jetzt ein während der Installation, weil sie nicht mit ner Unterbrechung rechnen und dann stürzt im schlimmsten Fall der Finder noch ab (passiert als ich das NTFS Plugin von Pragon installiert habe)
  • Ich nehme mal an es geht um die serielle Geschichte aus dem anderen Thread. Wir benutzen nur Adapter mit FTDI Chip, der ist schon im System drin und es gibt bei uns keine Probleme damit.


    Den Installer kannst du irgendwo im Bundle platzieren.
    Willst du die Extension denn gleich installieren?
    Dann prüfen auf Vorhandensein und Version. Installer starten und Programm beenden.

    Oder hab ich dich falsch verstanden?
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • Ja aus Sicht eines Programmierers ist das echt umständlich und nervig.
    Aus Sicht des Anwenders aber nichtmal so schlecht.
    Hab beim Umstieg gesehen welche Programme alles kexts installiert haben (bei einigen kann man sich ja denken warum, bei anderen ist es aber mehr als fraglich).
    Find ich also nichtmal soo schlecht!
  • Guten Morgen zusammen,

    Dann prüfen auf Vorhandensein und Version.

    Das wäre eine meiner ersten Fragen. Wie mache ich das konkret?
    Ich könnte einfach in "/Library/Extensions" nachsehen, aber aus der Sandbox heraus ist nicht gewollt.
    Gibt es dazu eine konkrete API um nachzufragen, ob der Treiber installiert ist?

    Ich nehme mal an es geht um die serielle Geschichte aus dem anderen Thread.

    Genau. :D

    Also mein Traumwunsch wäre so:

    - Anwender öffnet die Anwendung
    - Anwendung prüft, dass der Treiber nicht installiert ist
    - Anwendung lädt die Kext, Anwender willigt das Laden ein, wird vom macOS wohl auch gefordert sein
    - Anwender stöpselt USB-Gerät an

    Ich frage mal so:

    Kann ein Treiber "dynamisch" geladen werden, ohne ihn ins System installieren zu müssen?

    Wenn das alles nicht geht, dann lagere ich die Installation vom Treiber komplett aus:

    - Anwender öffnet die Anwendung
    - Anwendung prüft, ob der Treiber installiert ist
    - wenn ja, dann geht es weiter
    - wenn nein, Dialog zum Anwender kümmere Dich selbst darum und komm dann wieder
    - Anwendung zu

    Konkret geht es mir dadrum, CP210x USB to UART Bridge VCP Drivers:
    silabs.com/products/developmen…o-uart-bridge-vcp-drivers

    Wir benutzen nur Adapter mit FTDI Chip, der ist schon im System drin und es gibt bei uns keine Probleme damit.


    Wenn ich keinen Treiber installiere, dann wird das USB-Gerät vom System auch erkannt.
    Laut Systembericht ist es auch verfügbar. Stecke ich es an, dann wird es aber nicht unter /dev eingehängt.
    Erst mit dem Treiber wird es immer unter /dev hinzugefügt.

    Viele Grüße
  • Ich möchte nicht, dass der Anwender den Eindruck hat, dass ich ihm den Treiber installiere.
    Warum? So gar ich selber habe die Installation verhauen, weil ich nicht schnell genug in die Systemeinstellungen unter Sicherheit bin und es dort erlaubt habe.

    Das werden viele nicht verstehen. Da bin ich mir ganz sicher.
    Und das Ergebnis wären dann negative Kritiken.

    Viele Grüße
  • Ich ignoriere niemanden… :-p

    Unterjubeln klingt böswillig. Das ist ja nicht meine Absicht.
    Ich möchte ihm aber den Vorgang so leicht wie möglich machen.

    - Anwender öffnet
    - Hallo, für die Verwendung von dem Gerät benötigst Du einen Treiber, sonst ist die Anwendung nicht zu verwenden
    - Er klickt, ja habe ich verstanden
    - Anwendung will den Treiber laden
    - macOS klingt sich ein uns sagt "willst Du wirklich"
    - Anwendung prüft, ob es geklappt hat

    Im Prinzip haben wir genau das überall im System. Schlüsselbund, Adressbuch, Kontakte etc.
    Dort klingt sich macOS auch dazwischen.

    Auch bei einer Installationsroutine von einem Treiber passiert genau das.
    Nur möchte ich keine Installationsroutine aus meiner Anwendung heraus starten.
    Dann kann ich ihm auch via Dialog kommunizieren "mach selbst".

    Viele Grüße
  • Hallo zusammen,

    meine Anwendung ist nun fertig und ich dachte mir, ich gebe mal Rückmeldung:

    Ich habe den Installer vom Treiber nun doch aus meiner Anwendung heraus angeboten.
    Siehe Bild anbei. Das ist ein guter Kompromiss.

    Als nächstes entstand aber das Problem, wie ich ich die Anwendung in die Sandbox überführe.
    Bei Hardware-nahe Sachen scheint das gar nicht so einfach.

    Apple hat aber daran gedacht und bietet dafür zwei Schlüssel in den Entitlements an:
    com.apple.security.device.usb
    com.apple.security.device.serial

    Soweit so gut. Aber wie frage ich nun den Treiber vorab ab, ob dieser schon installiert ist?
    Das muss ich ja wissen, um dem Anwender entsprechende Oberfläche anbieten zu können.

    Apple bietet dazu die Funktion "KextManagerCreateURLForBundleIdentifier" an.
    Würde mir diese eine URL für den Bundle Identifier zurückgeben, dann weiß ich, dass der Treiber installiert.
    Bedauerlicherweise funktioniert aber diese Funktion in der Sandbox genau nicht. Aber warum?

    Ich sehe bei der Funktion keine Gefahr fürs System und habe deshalb eine Bezahl-Frage bei Apple eingelöst.
    Der Kontakt war/ist sehr nett, aber hat leider keinen Mehrwert erbracht. Seine Aussage ist, dass ich die Fehlermeldung interpretieren soll.
    Damit ließe sich dennoch Rückschluss ziehen, ob der Treiber installiert ist.
    Leider ist die Fehlermeldung aber "keine Zugriffsrechte" und mit der Frage war er dann erstmal beschäftig.
    Laut Apple ist das ein Fehler und derweil nicht lösbar und ich solle ein Bug-Report schreiben und man versuche das dann zeitnah (vielleicht) zu beheben.

    Ich habe noch weiter rum probiert und bin dann doch etwas sprachlos gewesen.
    Via NSURL kann ich prüfen, ob das Bundle "/Library/Extensions/SiLabsUSBDriver.kext" existiert.
    Das geht sogar aus der Sandbox heraus. In all den Jahren der Sandbox hätte ich jetzt gedacht "geht natürlich nicht".
    Habe ich hier eine Wissenslücke? Ich habe das mal an Apple geschrieben und bislang keine Antwort bekommen.

    Für mich ist das gut, da so mein Problem gelöst ist.
    Natürlich weiß ich nicht absolut sicher, ob die kext auch geladen ist/wird, aber für mein Szenario ist das nicht wichtig.

    Viele Grüße

    2.png
  • Danke für den Bericht. Ich finde es immer gut, wenn es Rückmeldung gibt.

    Zwei kleine Anmerkungen zum Text des Informationsdialogs: Abgesehen davon, daß ich kein Freund des Duzens in solchen Fällen bin, schreibt man 'deines' groß, also 'Deines'; und 'um zu' leitet einen abhängigen Nebensatz ein, d.h. daß nach '"Installieren"' ein Komma fehlt. ;)
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • Vielen Dank für Deine Rückmeldung!

    Mit dem Komma hast Du absolut Recht.
    Das Du sehe ich als problematisch, da Apple uns auch duzt.

    Selbst schreibe ich das Du/Sie auch groß, aber scheinbar ist das beim Du nicht mehr gängig.
    Deshalb orientiere ich mich da etwas an Apples-Sprachgebrauch.

    Bei einer anderen Anwendung von mir, die einen hohen Verteilungsgrad hat, habe ich auch schon mal eine "böse Email" dazu bekommen.
    Der Anwender hat sich daran sehr gestört, dass ich ihn duze, obwohl wir uns nicht kennen.

    Bei einer anderen Anwendung habe ich mal gesehen, dass beim ersten Start gefragt wurde, ob ich mit Du oder Sie angesprochen werden möchte.
    Das geht mir aber dann doch zu weit und mir persönlich ist es letztendlich egal.

    Aber nochmals zur Sandbox:

    Weiß jemand, ob es korrekt ist, dass via NSURL die Erreichbarkeit einer Ressource in einem Systemordner geprüft werden kann?
    Es funktioniert, keine Frage, aber ist es auch legitim?

    Viele Grüße
  • little_pixel schrieb:

    Vielen Dank für Deine Rückmeldung!

    Mit dem Komma hast Du absolut Recht.
    Das Du sehe ich als problematisch, da Apple uns auch duzt.

    Selbst schreibe ich das Du/Sie auch groß, aber scheinbar ist das beim Du nicht mehr gängig.
    Deshalb orientiere ich mich da etwas an Apples-Sprachgebrauch.

    Bei einer anderen Anwendung von mir, die einen hohen Verteilungsgrad hat, habe ich auch schon mal eine "böse Email" dazu bekommen.
    Der Anwender hat sich daran sehr gestört, dass ich ihn duze, obwohl wir uns nicht kennen.

    Bei einer anderen Anwendung habe ich mal gesehen, dass beim ersten Start gefragt wurde, ob ich mit Du oder Sie angesprochen werden möchte.
    Das geht mir aber dann doch zu weit und mir persönlich ist es letztendlich egal.

    Aber nochmals zur Sandbox:

    Weiß jemand, ob es korrekt ist, dass via NSURL die Erreichbarkeit einer Ressource in einem Systemordner geprüft werden kann?
    Es funktioniert, keine Frage, aber ist es auch legitim?

    Viele Grüße
    Kannst Du sie auch downloaden? :)

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)