• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Script vor dem Start einer App aufrufen

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
Huhu,

Problem ist folgendes: Ich habe ein Programm welches nur unter bestimmten Bedingungen starten darf dabei spielt es keine Rolle welche, da es mehrere Fälle gibt wo dies von nutzen wäre.

Ich möchte also wenn der User auf eine App klickt davor ein Script gestartet wird, wenn alle Bedingungen zutreffen starte Die App, falls nicht Warnung ausgeben oder einfach nicht starten, letzteres natürlich erstmal - verbessern kann man immernoch.

Nur wie mach ich das?

Falls ihr ein Beispiel braucht, starte XYZ nur wenn Verzeichnis /Blub/Blab/foo.bar existiert
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
Am einfachsten erstellst du mittels AppleScript eine "App", welche die Bedingungen prüft, und wenn die Bedingungen erfüllt sind ruft es das gewünschte Programm auf. Der erstellten App gibst du den Namen und das Icon des aufzurufenden Programms, und packst sie in den Programme-Ordner. Das eigentliche Prgramm kannste denn sonstwo verstecken (entsprechenden Pfad im AppleScript anpassen).

So sieht es aus als wenn du das Programm normal starten würdest, rufst aber eig. nur das AppleScript auf, welches denn gegebenenfalls das Pragramm startet.
 

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
Sowas in der richtung dachte ich mir auch schon, aber ist das der einzige Weg?
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Kannst auch einen Hintergrunddienst schreiben, der die Dateirechte der App so setzt, dass sie nur ausführbar ist, wenn Bedingung X erfüllt ist.

Wenn es nur um das Vorhandensein von Dateien/Ordnern geht, dann kann man eventuell mittels Ordneraktionen entsprechende Rechtewechsel antriggern, statt turnusmäßig zu überprüfen.
 

Guy.brush

Weißer Winterkalvill
Registriert
15.12.08
Beiträge
3.545
Genau weil es so einen "Hintergrunddienst" vermeiden würde, würde ich Samsas Lösung bevorzugen.
 

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
@Bananbieger würdest du das bitte etwas genauer erklären? Bei dem Programm wo es um das Verzeichnis geht wäre es iTunes...
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Genau weil es so einen "Hintergrunddienst" vermeiden würde, würde ich Samsas Lösung bevorzugen.
Ja, nur mein Weg ist effektiver, weil Samsas Lösung eben die Ausführung des Programms nicht unterbindet. Einfaches Beispiel: Skript startet iTunes. iTunes ist aber immer noch trivial über die Spotlight und aus anderen Programmen heraus startbar (z.B. beim Klick eines App-Store-Links).

Meine Lösung ist auch keineswegs perfekt, unterbindet sie doch Programmupdates.

@Bananbieger würdest du das bitte etwas genauer erklären? Bei dem Programm wo es um das Verzeichnis geht wäre es iTunes...
Kannst Du vielleicht den Grund nennen, warum Verzeichnis xyz nicht permanent verfügbar ist und/oder wie es gefüllt oder geleert wird? Bei "iTunes" fällt mir ansonsten spontan noch eine weitere Option ein: Du könntest nämlich einfach die iTunes-App in ein Unterverzeichnis packen und mit einem Alias dorthin verweisen.

--
Nachtrag
--

Ultimative Lösung:
Einfach Objective-C-Programm schreiben, das die Startbedingungen abprüft und bei erfolgreichen Prüfungen die Binary iTunesX startet.
Dann iTunes.app/Contents/MacOS/iTunes in iTunesX umbennen und die Binary des eben geschriebenen Objective-C-Programms als iTunes.app/Contents/MacOS/iTunes hinterlegen. iTunes sollte dann nur noch starten, wenn die Vorprüfungen bestanden wurden.
 
Zuletzt bearbeitet:

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
Ich kann nen bisschen C und Java was richtiges Progreammeiren betrifft.

Doch die Ultimative Lösung wie du sie nennst gehen dann auch Updates problemlos? Immerhin hast du ja doch iTunes "ersetzt".
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
C reicht auch. Du musst ja nur Deine Bedingungen testen und eine Binary starten.

Updates sind dann natürlich problembehaftet. Allerdings wird maximal nur die Prüfung verschwinden.
 

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
Könnte man ja dann mit deiner Oben erwähnten Ordneraktion verbinden:

Bei Update startet die Ordneraktion da auf iTunes.app geschrieben wird und startet ein Script was die richtige iTunes.app wieer an den richtigen Ort schiebt und macht eben alles geil. Ich denke du weißt was ich mein.

Um das wieder rückgänig zu machen einfach nen Anderes mini Script aufrufen und done.

Nur wird das dann erstmal meine erste C Applikation unter Mac OS X ^^
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo!

Bei deinem Wunsch muss ich an MegaManEffect oder auch Pop Rock denken (Klick auf die Links startet Download)
Programm starten, danach iTunes starten ...
Das geht schon in deine Richtung und wäre nur anzupassen, denn die Source Codes sind veröffentlicht.
iTunes würde zwar gestartet werden aber ... siehe selbst.

Gruß
 

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
@sedna Mal schanuen...

@Bananenbieger Waum eigentlich in C und nicht in Java? Das leuchtet mir noch nicht ganz ein? Kann ich da nicht einfach eine *.Jar reinwerfen? (Ist eine kompilierte Java Datei = Binärdatei)
 

naich

Pomme d'or
Registriert
22.11.08
Beiträge
3.082
Jar ist keine Binärdatei, sondern ein Zip-Archiv. Muss auch über java -jar aufgerufen werden.

Was ich mich nur frage: der User kann doch immer noch direkt iTunesX starten und damit die Überprüfungen unterbinden. Wenn das also eine Pflichtüberprüfung vor jedem Start sein soll, ist wohl noch mehr nötig.
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Waum eigentlich in C und nicht in Java?
Du musst ja die originale Binärdatei ersetzen. Ein Shell-Script funktioniert bspw. nicht. Eine .JAR wirst Du so auch nicht starten können. Es muss schon eine native Binärdatei sein, die Du iTunes da unterjubelst. Kannst natürlich statt C eigentlich alles benutzen, was Du kompilieren kannst. Rein theoretisch könntest Du sogar Malbolge nehmen (Code in den Interpreter hineinkompilieren...) ;)

Was ich mich nur frage: der User kann doch immer noch direkt iTunesX starten und damit die Überprüfungen unterbinden. Wenn das also eine Pflichtüberprüfung vor jedem Start sein soll, ist wohl noch mehr nötig.
Kann er. Dazu muss er aber erst mal ins App-Paket rein und sich durch Unterverzeichnisse hangeln und dort die Binary ausgraben.
 

naich

Pomme d'or
Registriert
22.11.08
Beiträge
3.082
Naja, das sollte für einen User der die Sperre umgehen will nicht allzuschwer sein. Man müsste halt genauer wissen, um welche Sperren es sich handelt und welche User damit von was abgehalten werden sollen...
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Ich bin jetzt nicht davon ausgegangen, dass eine sicherheitskritische Lösung gefunden werden sollte. Daher auch lediglich ein Lösungsvorschlag von mir, der das versehentliche Starten unterbinden würde.
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Die Ideen hier sind schon ok und wie naich schrieb, alle zu umgehen.
Das einzige, was wirklich hilft: iTunes in ein verschlüsseltes dmg packen (mit allen daraus resultierenden Einschränkungen) und am original Ort entfernen, bzw durch ein Dummy ersetzen.
Lion ? Dann viel Spaß! :-D

Erstelle dir ein verschlüsseltes Image und ... siehe Skript

property diskname1 : "XYZ"
property diskpath1 : POSIX path of (((path to "desk") & "XYZ.dmg") as string)

set thePassword to "123"

tell application "Finder"

if not (exists the disk diskname1) then
do shell script ("hdiutil attach " & quoted form of diskpath1 & " -mount required -passphrase " & thePassword)
repeat until name of every disk contains diskname1
delay 1
end repeat
end if
end tell

set iTapp to "XYZ:iTunes.app"
tell application iTapp to activate

 

Loooki

Beauty of Kent
Registriert
15.09.09
Beiträge
2.169
Jar ist keine Binärdatei, sondern ein Zip-Archiv. Muss auch über java -jar aufgerufen werden.

Was ich mich nur frage: der User kann doch immer noch direkt iTunesX starten und damit die Überprüfungen unterbinden. Wenn das also eine Pflichtüberprüfung vor jedem Start sein soll, ist wohl noch mehr nötig.

Da stimm ich dir zu, doch eine Jar ist das compilierte was du bekommst wenn du deinen Java Code eben bilest. Und rate mal was in so einer Jar steckt? .class files, meistens Bilder , alles Mögliche.

Natürlich ists ein Archiev, doch mit einem Manifest ist es ein ausführbares und damit ein zwischending finde ich. die .class FIels sind natürlich die richtigen Datein - Doch mit denen allein wirst du nur selten was anfangen können ;)

ja natürlich würde man mit "iTunesX" den ganzen Spaß umgehen, doch das ist ja nur für mich. Solang ich weiß wie ich den Spaß umgehe und was dahinter steckt ists ja okay. Möchte ja nicht andere User einladen den gleichen Kram mit iTunes zu machen wie ich.

Natürlich wäre die ultimative ultimative Lösung immernoch das vom OS abzufangen...

Edit: @ sedna klingt interessant aber macht ein Update umso schwerer außerdem nicht notwendig oder kennst du einen Grund?
 

naich

Pomme d'or
Registriert
22.11.08
Beiträge
3.082
Da stimm ich dir zu, doch eine Jar ist das compilierte was du bekommst wenn du deinen Java Code eben bilest. Und rate mal was in so einer Jar steckt? .class files, meistens Bilder , alles Mögliche.

Natürlich ists ein Archiev, doch mit einem Manifest ist es ein ausführbares und damit ein zwischending finde ich.
Es ist eine stinknormale Datei, wie jedes Word-Dokument aus. MacOS macht es nur "ausführbar", da es standardmäßig mit dem Programm Jar Launcher (oder wie der auch immer genau heißt) gestartet wird.

die .class FIels sind natürlich die richtigen Datein - Doch mit denen allein wirst du nur selten was anfangen können ;)
Prinzipiell kannst du auch ne class-Datei starten - wenn sie die entsprechende main-Methode besitzt.

ja natürlich würde man mit "iTunesX" den ganzen Spaß umgehen, doch das ist ja nur für mich.
Na dann sind die Lösungsvorschläge ja OK. ;)

Ich kenne noch eine andere Möglichkeit, wie man nen Programmstart einschränken kann, auch wenn hier die Auswahl heute nicht / morgen doch schwieriger sein dürfte:
Mit Espionage ist es möglich, die Nutzerdaten eines Programmes zu verschlüsseln (Diskimage). Bei jedem Start des Programms wird dann das Passwort für den Verschlüsselten Ordner abgefragt, gibst du dies nicht ein / kennst es nicht beendet sich das Programm wieder bzw. ist nicht zu gebrauchen. Vorteil gegenüber sednas Idee und der Variante mit iTunesX ist, dass Programm-Updates problemlos funktionieren.