Pertanyaan Bagaimana saya menambahkan dukungan Applescript ke aplikasi Kakao saya?


Saya baru di dunia pemrograman Kakao, dan saya ingin menambahkan dukungan Applescript ke aplikasi saya. Contoh di situs Apple sepertinya sudah ketinggalan zaman.

Bagaimana saya menambahkan dukungan Applescript ke aplikasi Kakao saya?


32
2018-03-19 18:11


asal


Jawaban:


  1. Jika Anda ingin mengirim AppleScript dari aplikasi Anda dan membutuhkan aplikasi sandbox, Anda perlu membuat kepemilikan sementara

  2. Anda perlu menambahkan kedua kunci tersebut di daftar info.plist Anda

    <key>NSAppleScriptEnabled</key>
    <true/>
    <key>OSAScriptingDefinition</key>
    <string>MyAppName.sdef</string>
    

... tentu saja Anda harus mengubah "MyAppName" ke nama aplikasi Anda

  1. Buat file .sdef dan tambahkan ke proyek Anda. Kursus lebih lanjut sekarang sangat tergantung pada kebutuhan aplikasi Anda, ada:

    1. Elemen Kelas (membuat objek dari AppleScript)
    2. Elemen Perintah (menimpa NSScriptCommand dan menjalankan perintah "mirip-kata-kata")
    3. Elemen Enumerasi
    4. Elemen Tipe Catatan
    5. Value-Type Elements (KVC)
    6. Elemen Kakao

    -

    Buka di sini untuk menemukan deskripsi mendetail dan banyak detail tentang penerapannya: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ScriptableCocoaApplications/SApps_script_cmds/SAppsScriptCmds.html

  2. Saya menemukan bekerja dengan Kelas dan Elemen KVC sangat rumit, karena saya hanya ingin menjalankan satu perintah, tidak ada yang mewah. Jadi untuk membantu orang lain, berikut ini contoh cara membuat sederhana baru perintah dengan satu argumen. Dalam contoh ini, ini akan "mencari" satu string seperti ini:

    tell application "MyAppName"
        lookup "some string"
    end tell
    
  3. File .sdef untuk perintah ini terlihat seperti ini:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE dictionary SYSTEM "file://localhost/System/Library/DTDs/sdef.dtd">
    
    <dictionary title="MyAppName">
        <suite name="MyAppName Suite" code="MApN" description="MyAppName Scripts">
            <command name="lookup" code="lkpstrng" description="Look up a string, searches for an entry">
                <cocoa class="MyLookupCommand"/>
                <direct-parameter description="The string to lookup">
                    <type type="text"/>
                </direct-parameter>
            </command>
        </suite>
    </dictionary>
    
  4. Buat subkelas NSScriptCommand dan beri nama MyLookupCommand

    The MyLookupCommand.h

    #import <Foundation/Foundation.h>
    
    @interface MyLookupCommand : NSScriptCommand
    
    @end
    

    The MyLookupCommand.m

    #import "MyLookupCommand.h"
    
    @implementation MyLookupCommand
    
    -(id)performDefaultImplementation {
    
        // get the arguments
        NSDictionary *args = [self evaluatedArguments];
        NSString *stringToSearch = @"";
        if(args.count) {
            stringToSearch = [args valueForKey:@""];    // get the direct argument
        } else {
            // raise error
            [self setScriptErrorNumber:-50];
            [self setScriptErrorString:@"Parameter Error: A Parameter is expected for the verb 'lookup' (You have to specify _what_ you want to lookup!)."];
        }
        // Implement your code logic (in this example, I'm just posting an internal notification)
        [[NSNotificationCenter defaultCenter] postNotificationName:@"AppShouldLookupStringNotification" object:stringToSearch];
        return nil;
    }
    
    @end
    

    Itu pada dasarnya. Rahasianya adalah subkelas NSScriptCommand dan menimpa performDefaultImplementation. Saya harap ini membantu seseorang untuk mendapatkannya lebih cepat ...


42
2018-05-27 12:30



Versi modern dari Cocoa dapat secara langsung menginterpretasikan daftar properti definisi scripting (.def), sehingga semua yang perlu Anda lakukan untuk dukungan dasar AppleScript adalah untuk membuat sdef per dokumen, menambahkannya ke fase "copy bundle resources" dan menyatakan dukungan AppleScript di Info.plist Anda. Untuk mengakses objek selain NSApp, Anda menetapkan penspesifikasi objek, jadi setiap objek mengetahui posisinya dalam hirarki dunia scripting. Itu membuat Anda memanipulasi kvc dari properti objek, dan kemampuan untuk menggunakan metode objek sebagai perintah skrip sederhana.


4
2018-03-19 20:20



Contoh sederhana untuk Anda mulai,

tempatkan skrip (dialog bernama) ke dalam folder dokumen, lalu Anda dapat menjalankannya dari Xcode

NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDirectory = [arrayPaths objectAtIndex:0];
    NSString *filePath = [docDirectory stringByAppendingString:@"/dialog.scpt"];

     NSAppleScript *scriptObject = [[NSAppleScript alloc] initWithContentsOfURL:[NSURL fileURLWithPath:filePath] error:nil];

 [scriptObject executeAndReturnError:nil];

Yang menyenangkan tentang menjaga skrip eksternal adalah kemampuan untuk mengeditnya di luar Xcode. Saya akan merekomendasikan menambahkan pemeriksaan kesalahan jika Anda mulai mengedit karena applescript tidak dapat dikompilasi

mungkin periksa dengan

if(scriptObject.isCompiled){

1
2017-10-23 14:23