Daemons
-
-
Soweit ich weiss unterscheidet sich ein launchd daemon nicht von einem normallen daemon.
Nur solltest Du kein Cocoa Projekt benutzen sondern entweder ein Foundation, CoreFoundation oder ein normalles C-Programm.
Manfred -
Original von asraelNur solltest Du kein Cocoa Projekt benutzen sondern entweder ein Foundation, CoreFoundation oder ein normalles C-Programm.
#pragma klugscheiss ON
Foundation IST Cocoa
#pragma klugscheiss OFF
Ausserdem würde ich das so nicht sagen. Es kann Gründe für eine NSApp basierte Applikation als daemon geben.
LSBackgroundOnly ist Dein Freund extra für diese Zwecke.
Dennnoch sollte man sich wirklich überlegen, ob es nicht auch eine der von asrael genannten Apps sein kann.
Alex
EDIT: Wow bin ich nett. Da habe ich wirklich jemandem geantwortet, der "Gib Hip Hop keine Chance" als Avatar hat.The only thing that really worried me was the ether. -
Original von below
Original von asraelNur solltest Du kein Cocoa Projekt benutzen sondern entweder ein Foundation, CoreFoundation oder ein normalles C-Programm.
#pragma klugscheiss ON
Foundation IST Cocoa
#pragma klugscheiss OFF
Ausserdem würde ich das so nicht sagen. Es kann Gründe für eine NSApp basierte Applikation als daemon geben.
LSBackgroundOnly ist Dein Freund extra für diese Zwecke.
Dennnoch sollte man sich wirklich überlegen, ob es nicht auch eine der von asrael genannten Apps sein kann.
Foundation ist auf jedenfall machbar, aber irgendwie hatte ich die Befürchtung, dass beim Start das Terminal aufgeht...
EDIT: Wow bin ich nett. Da habe ich wirklich jemandem geantwortet, der "Gib Hip Hop keine Chance" als Avatar hat.
Das ist mein Standart Forum-Avatar, weil viele Foren nur sehr kleine Bilder zulassen (dieses auch), und ich keine Lust habe eines meiner andren originellen JPEGs zu skalieren...Skeiron
Der Mac heiligt die Mittel. -
Na ja, dafür kommt die Sig auf's Positiv-Konto

AlexThe only thing that really worried me was the ether. -
-
Einfach Antwort: In dem Du es nicht beendest!
Am besten wäre es zu wissen, was Dein Daemon tun soll. Wartet er auf was? Insb. wenn das "was" eine Netzwerkverbindung ist, kannst Du den Daemon auch "on Demand" starten.
Und sonst kannst zum Beispiel selber einen RunLoop rennen lassen, oder mit sleep arbeiten.
Gruss
Alex
Psssst: "Hip Hop Hooraay!"The only thing that really worried me was the ether. -
Er soll warten, bis iTunes startet, dann soll er eine App starten. Wenn iTunes beendet wird, merkt meine App das und beendet sich. Theoretisch ist es also auch möglich, dass der Daemon zweimal die App starten muss.
Das nicht beenden hört sich genial an. Einfach return 0; weglassen?Skeiron
Der Mac heiligt die Mittel. -
Original von scaramangado
Er soll warten, bis iTunes startet, dann soll er eine App starten. Wenn iTunes beendet wird, merkt meine App das und beendet sich. Theoretisch ist es also auch möglich, dass der Daemon zweimal die App starten muss.
Das nicht beenden hört sich genial an. Einfach return 0; weglassen?
Nee nee, so einfach nicht.
Wie wartest Du denn darauf, NSDistributedNotification oder so?
In jedem Fall verhindert z.B. dass, das Deine App beendet wird:
BOOL quit = NO;
while (quit == NO)
sleep (1);
AlexThe only thing that really worried me was the ether. -
-
So, jetzt merkt das Tool aber nicht mehr, wenn iTunes startet, kann es an der Funktion sleep() liegen?
EDIT: Nein, es liegt wohl daran, dass NSWorkspace nicht Teil des Foundation frameworks ist (warum auch immer...) Muss es wohl doch in einer NSApplication machen....Skeiron
Der Mac heiligt die Mittel. -
Original von scaramangado
dass NSWorkspace nicht Teil des Foundation frameworks ist (warum auch immer...) Muss es wohl doch in einer NSApplication machen....
Ja, warum wohl
developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWorkspace_Class/Reference/Reference.html
AlexThe only thing that really worried me was the ether. -
Original von below
Original von scaramangado
dass NSWorkspace nicht Teil des Foundation frameworks ist (warum auch immer...) Muss es wohl doch in einer NSApplication machen....
Ja, warum wohl
developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWorkspace_Class/Reference/Reference.html
Alex
Ich wollte damit zum Ausdruck bringen, dass ich keinen Sinn darin sehe, dass Apple NSWorkspace nicht in das Foundation Framework gesteckt hat. Gerade für diesen bereich, wäre das sehr sinnvoll...
PS: Vielleicht skaliere ich ja mal ein Bild, das jedem gefällt...
Vielleicht so etwasSkeiron
Der Mac heiligt die Mittel. -
Original von scaramangado
Ich wollte damit zum Ausdruck bringen, dass ich keinen Sinn darin sehe, dass Apple NSWorkspace nicht in das Foundation Framework gesteckt hat. Gerade für diesen bereich, wäre das sehr sinnvoll...
PS: Vielleicht skaliere ich ja mal ein Bild, das jedem gefällt...
OK: Ich nehme an das liegt daran, dass zum erhalten von diesen Distributed Notifications nicht unerheblicher Setup erforderlich ist -- den NSApp erledigt.
Und schon haben wir ein Beispiel, warum eine deamon App "voll" Cocoa sein muss. Wie gesagt, mit LSBackgroundOnly kannst Du sie verstecken.
AlexThe only thing that really worried me was the ether. -
Original von below
Original von scaramangado
Ich wollte damit zum Ausdruck bringen, dass ich keinen Sinn darin sehe, dass Apple NSWorkspace nicht in das Foundation Framework gesteckt hat. Gerade für diesen bereich, wäre das sehr sinnvoll...
PS: Vielleicht skaliere ich ja mal ein Bild, das jedem gefällt...
OK: Ich nehme an das liegt daran, dass zum erhalten von diesen Distributed Notifications nicht unerheblicher Setup erforderlich ist -- den NSApp erledigt.
Und schon haben wir ein Beispiel, warum eine deamon App "voll" Cocoa sein muss. Wie gesagt, mit LSBackgroundOnly kannst Du sie verstecken.
Alex
Wäre es eine Distributed Notification, könnte ich einen Daemon als Foundation-Tool schreiben, warum Apple da ein weiteres Notification Center verwendet ist mir auch schleierhaft, aber die werdens wohl wissen...Skeiron
Der Mac heiligt die Mittel. -
So, bis jetzt läuft alles wie es soll, der Daemon kann meine App starten, die App installiert den Daemon beim ersten Start, ABER ein Problem habe ich noch. Ich kann den Daemon nicht automatisch starten lassen...
Ich habe schon diese Plisten angelegt und in die Library kopiert, aber starten tut da nichts.
(Am liebsten wärs mir, wenn die App nur bei dem User startet, der den Daemon installiert hat...)
Wie muss die Plist genau aussehen, und wo muss sie hin? Muss noch mehr gemacht werden?
Danke im Voraus.Skeiron
Der Mac heiligt die Mittel. -
Original von scaramangado
(Am liebsten wärs mir, wenn die App nur bei dem User startet, der den Daemon installiert hat...)
Das muss eigentlich klappen, wenn du die Plist in ~/Library/LaunchDaemons/ legst. Aussehen muss die wie die üblichen Launchd-Scripts, kannst einfach z.B. das vom Apachen (org.apache.httpd.plist) kopieren und abändern. Per GUI kannst du mit "Lingon" solche Plists erstellen.
tuppis.com/lingon/Widgetschmie.de • Life is too short for gadgets -
Original von Pascal
Original von scaramangado
(Am liebsten wärs mir, wenn die App nur bei dem User startet, der den Daemon installiert hat...)
Das muss eigentlich klappen, wenn du die Plist in ~/Library/LaunchDaemons/ legst. Aussehen muss die wie die üblichen Launchd-Scripts, kannst einfach z.B. das vom Apachen (org.apache.httpd.plist) kopieren und abändern. Per GUI kannst du mit "Lingon" solche Plists erstellen.
tuppis.com/lingon/
Die App kannte ich noch nicht. Danke.
Ist es richtig, dass es den Ordner '~/Library/LaunchDaemons/' gar nicht gibt, sondern nur den in der "großen" Library (also '/Library/LaunchDaemons/)? Wird der Ordner genutzt wenn ich ihn neu anlege?Skeiron
Der Mac heiligt die Mittel. -
Original von scaramangado
Ist es richtig, dass es den Ordner '~/Library/LaunchDaemons/' gar nicht gibt, sondern nur den in der "großen" Library (also '/Library/LaunchDaemons/)? Wird der Ordner genutzt wenn ich ihn neu anlege?
Die 3 Libraries werden immer nacheinander abgearbeitet (glaub ich zu wissen), sprich wenn du den in der ~/Library anlegst wird der auch verwendet. Ich hab den allerdings auch nicht (nur LaunchAgents), wirst du verifizieren müssen.
Widgetschmie.de • Life is too short for gadgets -
Original von Pascal
Original von scaramangado
Ist es richtig, dass es den Ordner '~/Library/LaunchDaemons/' gar nicht gibt, sondern nur den in der "großen" Library (also '/Library/LaunchDaemons/)? Wird der Ordner genutzt wenn ich ihn neu anlege?
Die 3 Libraries werden immer nacheinander abgearbeitet (glaub ich zu wissen), sprich wenn du den in der ~/Library anlegst wird der auch verwendet. Ich hab den allerdings auch nicht (nur LaunchAgents), wirst du verifizieren müssen.
Die App legt die Plist in LaunchAgents ab. Ich weiß nicht, wo der Fehler in der alten Plist war, aber jetzt läuft das wie am Schnürchen...
Danke.Skeiron
Der Mac heiligt die Mittel.