2 Stimmen

Erstellen Sie einen einfachen Cocoa-Anwendungs-Wrapper

Ich habe eine Anwendung, die ich (zusammen mit einigen zusätzlichen Dateien) in einer Wrapper-Anwendung bündeln möchte.

Im Grunde genommen möchte ich nur, dass die Wrapper-Anwendung eine Ressourcendatei startet (d. h. als ob ich Folgendes eingegeben hätte:

/path/to/Resources/Bundled.app/Contents/MacOS/ausführbar

in das Terminal.

Verständlich? Ich dachte, das sollte einfach sein, aber ich konnte keinen einfachen Weg finden, dies zu tun - meine Cocoa-Programmierung ist, gelinde gesagt, begrenzt.

Vielen Dank im Voraus!

3voto

Peter Hosey Punkte 94684

Ein Weg, wenn die verpackte "Anwendung" nur ein Shell-Skript oder etwas ähnliches ist, ist Platypus.

Wenn es sich um eine tatsächliche Anwendung (".app"-Bündel) handelt, warum startet die App A lediglich die App B? Warum gibt es überhaupt die App A?

1voto

RyanWilcox Punkte 13600

Ich habe einen Blogbeitrag dazu: Jedes Shell-Skript in eine doppelklickbare App verwandeln. Der Eintrag erwähnt "Starten Sie mit einem leeren App-Bundle" ... das Sie erhalten können, indem Sie das genannte Pashua-Tool verwenden, wenn ich mich richtig erinnere ...

1voto

Peter Hosey Punkte 94684

Ihr äußeres Programm kann NSBundle verwenden, um das innere Programm innerhalb des Bündels des äußeren Programms zu lokalisieren.

Um das innere Programm auszuführen: Wenn es sich um eine Anwendung handelt, verwenden Sie Launch Services oder NSWorkspace; handelt es sich um ein Befehlszeilentool, verwenden Sie NSTask.

1voto

Jack James Punkte 5032

Nur der Nachwelt willen (und falls es jemand anderem hilft), hier ist der vollständige Code, den ich verwendet habe (innerhalb der AppDelegate.m-Datei):

NSString *appName = @"";
NSString *bundledApp = [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:appName ofType:@"app"]]
                          bundlePath];
NSWorkspace *launchApp = [[NSWorkspace alloc] init];
NSLog(@"Starte %s", bundledApp);
[launchApp launchApplication:bundledApp];
[launchApp release];

// Lassen Sie den Launcher beenden (falls er keinen anderen Zweck erfüllt)
[NSApp terminate:nil];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X