To jest rzeczywiście możliwe. Zrobiłem przykładową aplikację dostępną tutaj - SendKey at GitHub
wziąłem łatwą drogę i zaczął z prostego AppleScript:
delay 5
tell application "System Events"
repeat 10 times
keystroke "#"
end repeat
end tell
do „opóźnienie” w scenariuszu po prostu daje mi wystarczająco dużo czasu, aby edytora tekstu przednia aplikacja. Proponuję zacząć od uruchomienia tego skryptu, aby zobaczyć, co robi.
Potem stworzył projekt Xcode przy użyciu szablonu domyślnej aplikacji i napisał:
- (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);
}
Przetestowałem to bez włączania piaskownice aby zweryfikować to działa i to zrobił. Potem włączyłem Sandboxing i, oczywiście, się zepsuł. Ale na szczęście jest to na odwrót. Na razie Apple udziela tymczasowego uprawnienia o nazwie com.apple.security.temporary-exception.apple-events. Możesz też zażądać wyjątku dla "com.apple.systemevents". To właśnie mój plik uprawnienia wygląda następująco:
<?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>
Gdy dodałem to uprawnienie do mojej piaskownicy aplikacji i podpisał go, pracował jako kolejny oczekiwano.
Teraz, jeśli chcesz wysłać inne klucze, to odpowiedź na pytanie & zademonstruje jak zbudować swój skrypt w locie - Passing variables to an applescript.
Oczywiście, gdy wszystkie te czynności będą działać, prawdopodobnie można zwrócić się do klasy NSAppleEventDescriptor i klas pokrewnych, aby zbudować zdarzenie w kodzie, ale nie grałem przy użyciu tej techniki.
Należy pamiętać, że Apple sugeruje wykonać następujące czynności przy użyciu tymczasowego uprawnienia:
Jeśli nie zdecydujesz się piaskownica aplikację teraz lub użyć tymczasowego prawa wyjątku, wykorzystywać system raportowania błędów firmy Apple do powiadom Apple o napotkanym problemie. Apple bierze pod uwagę funkcje , ponieważ rozwija platformę OS X. Ponadto należy użyć pola Uwagi do recenzji w witrynie iTunes Connect, aby wyjaśnić, dlaczego wymagany jest wyjątek.
Czy możesz podać wystarczającą ilość informacji o tym, które aplikacje robią to i kiedy mogę je odtworzyć? Nigdy nie widziałem, jak to się dzieje z aplikacją piaskownicy. –
Proszę sprawdzić aText.app, po prostu napisz aText w Google i sprawdź pierwszy link.Wygląda na to, że ich wersja witryny nie jest piaskowana, ale wersja sklepu z aplikacjami działa i działa w środowisku piaskownicy bez użycia żadnego tymczasowego wyjątku. proszę dać mi znać, jeśli się mylę. Dzięki – AmitSri