2013-05-12 30 views
6

Mac App içinden bir Applescript dosyasını yürütmek için bir yol arıyorum. Ben NSAppleScript *script = [[NSAppleScript alloc] initWithSource: @"MY_CODE"]]; kullanmak önceki mac uygulamaları yaptık, ama benim applescript oldukça uzun olduğunu ve sadece bunun içeriği Projemin parçası ve boru gibi o dosyayı referans edebilmek istiyorum (veya sadece dosyayı doğrudan yürütmek benim app içinden).Mac uygulamasında AppleScript dosyasını yürütün?

Teşekkür ederiz!

+0

Ne olacaktı? –

cevap

2

Neden NSAppleScript en initWithContentsOfURL:error: method kullanmak ardından paketin içinde derlenmiş komut veya komut dosyası metnini koyup? Örneğin

:

NSError * error = NULL; 
NSURL * resourceURL = [[NSBundle mainBundle] resourceURL]; 
NSURL * urlOfScript = [resourceURL URLByAppendingPathComponent: @"MyApplescript.scpt"]; 
NSAppleScript *script = [[NSAppleScript alloc] initWithContentsOfURL: urlOfScript error: &error]; 
if(script == NULL) 
{ 
    NSLog(@"could not instantiate script at %@ - %@", [urlOfScript absolutePath], [error localizedDescription]); 
} 
11

Başvurunuz paket gömülü dosyaları veya kullanıcı tarafından sağlanan komut dosyalarını .scpt çalıştırmak için NSUserAppleScriptTask

kullanın kum havuzu (10.8+) dışında kullanıcı tarafından sağlanan AppleScripts çalıştırmak için 10.7 veya daha önce NSAppleScript kullanın.

NSUserAppleScriptTask ve NSAppleScript biraz topal, zihin hem bulunmaktadır. Ne Kakao hem de AS türleri arasında otomatik veri dönüşümü sağlar, bu da NSAppleEventDescriptors ile parametrelerin ve sonuçların geçmesi için çok fazla manuel mucking anlamına gelir. NSAppleScript örnekleri, kısmi kalıcılık desteği sağlar: komut dosyasının özellikleri, birden çok işleyici çağrısında durumları korur, ancak değiştirilen komut dosyasını diske geri kaydetmenin bir yolu yoktur, böylece tüm değişiklikler bir kez ayrıldıktan sonra kaybolur. Ve NSUSerAppleScriptTask tamamen tek bir çekim meselesidir, bu yüzden betik durumu aramalar arasında hiç kalmaz.

:

uygulama paket içinde gömülü AppleScript ve objc kodu arasındaki derin entegrasyonu için

, AppleScriptObjC (10.6+) kullanan ASOC iki yönlü bir ağdır PyObjC veya RubyCocoa benzer ge, komut dosyası içinde AppleScript kod yazmak izin ardından objc kodu işleyicileri AS ve objc yöntemleri çağırmak için kod AS çağırmak için izin düzenli Kakao sınıflar olarak objc koduna göründüğünü itiraz ediyor. Ortak ObjC ve AS tipleri (ints, double, NSStrings, NSArrays, vs) köprüyü geçerken otomatik olarak sarılır/dönüştürülür, bu nedenle AS tarafında başka bir ek çalışma gerektirmez.

ASOC kusursuz değil (Apple'ın kendi dokümanları emiliyor, köprüleme ücretsizdir ve hatalar bilinmemektedir), ancak ObjC'den betikli uygulamalar ile etkileşimde bulunmak için, daha ziyade çöp seçeneklerinin en iyisi . Eğer '[Amaç-c] applescript' burada ararsanız

+0

Parametreleri iletmek için herhangi bir yol var mı? Ya da her zaman aramak zorunda olduğumuz argümanlarla yeni bir betik inşa etmeliyiz (fakir insanın parametreleri)? –

+0

Komut satırı yardımcı programı 'osascript' [argümanları iyi bir şekilde destekleyin] (http://hints.macworld.com/article.php?story=20050523140439734). Umarım Objective-C veya Swift'de benzer bir şey mümkündür. –

+1

['NSAppleScript' /' NSUserAppleScriptTask'] kullanma (http://appscript.sourceforge.net/nsapplescript.html). ['AppleScriptObjC'] kullanarak (http://appscript.sourceforge.net/asoc.html). – foo

İlgili konular