Dies ist tatsächlich möglich. Ich habe ein Beispiel-App verfügbar hier gemacht - SendKey at GitHub
Ich nahm den einfachen Weg und begann mit einem einfachen Apple:
delay 5
tell application "System Events"
repeat 10 times
keystroke "#"
end repeat
end tell
Die ‚Verspätung‘ im Skript einfach gibt mir genug Zeit, um einen Texteditor zu machen die vorderste Anwendung. Ich würde vorschlagen, mit dem Ausführen dieses Skripts zu beginnen, um zu sehen, was es tut.
Dann Ich habe ein Xcode-Projekt die Standard-Anwendungsvorlage mit und schrieb:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSString* scriptPath = [[NSBundle mainBundle] pathForResource:@"sendkey" ofType:@"scpt"];
NSURL* scriptURL = [NSURL fileURLWithPath:scriptPath];
NSDictionary* errors;
NSAppleScript* script = [[NSAppleScript alloc] initWithContentsOfURL:scriptURL error:&errors];
NSLog(@"%@", errors);
[script executeAndReturnError:&errors];
NSLog(@"%@", errors);
}
ich dies ohne Einschalten Sandbox getestet es funktioniert prüft und es tat. Dann habe ich Sandboxing angemacht und es ist natürlich kaputt gegangen. Aber glücklicherweise gibt es einen Weg dahin. Vorläufig bietet Apple eine temporäre Berechtigung namens com.apple.security.temporary-exception.apple-events an. Und Sie können beantragen, dass die Ausnahme für "com.apple.systemevents" gewährt wird. Dies ist, was meine Ansprüche Datei wie folgt aussieht:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.temporary-exception.apple-events</key>
<array>
<string>com.apple.systemevents</string>
</array>
<key>com.apple.security.app-sandbox</key>
<true />
</dict>
</plist>
Sobald ich diesen Anspruch auf meine Sandkasten App und unterzeichnet sie, es wieder wie erwartet gearbeitet.
Jetzt, wenn Sie andere Schlüssel senden möchten, wird diese Frage & Antwort zeigen, wie Sie Ihr Skript im laufenden Betrieb - Passing variables to an applescript.
Natürlich, sobald Sie alle diese arbeiten, können Sie wahrscheinlich zu NSAppleEventDescriptor und verwandten Klassen wenden, um das Ereignis im Code zu erstellen, aber ich habe nicht mit dieser Technik gespielt.
Bitte beachten Sie, dass Apple Sie doch nahe, tun nach dem, wenn eine temporäre Berechtigung mit:
Wenn Sie nicht Ihre App jetzt Sandbox oder eine temporäre Ausnahme Berechtigung zu verwenden, benutzen Sie Apples Bug-Reporting-System Lassen Sie sich über das Problem, das Ihnen begegnet, von Apple unter informieren. Apple berücksichtigt Feature Anforderungen, wie es die OS X-Plattform entwickelt. Vergewissern Sie sich außerdem, dass Sie in iTunes Connect das Feld Überprüfungshinweise verwenden, um zu erklären, warum die Ausnahme erforderlich ist.
Könnten Sie genügend Informationen darüber geben, welche Apps dies tun und wann ich es neu erstellen soll? Ich habe es noch nie in einer Sandbox-App gesehen. –
Bitte überprüfen Sie aText.app, schreiben Sie einfach einen Text in Google und überprüfen Sie den allerersten Link.Es scheint, dass ihre Site-Version keine Sand-Box ist, aber die App-Store-Version hat und in der Sandbox-Umgebung funktioniert, ohne eine temporäre Ausnahme zu verwenden. Bitte lassen Sie mich wissen, wenn ich falsch liege. Danke – AmitSri