scpt vào thư mục người dùng - nhận định kèo
Gọi Apple Script từ Phần Mềm MAS
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" to return URL of front document as string"];
NSDictionary *scriptError = nil;
NSAppleEventDescriptor *descriptor = [script executeAndReturnError:&scriptError];
if (scriptError) {
NSLog(@"Lỗi: [ban ca 3d online](/post/did-i-adequately-answer-your-condescending-question/) %@", scriptError);
} else {
NSAppleEventDescriptor *unicode = [descriptor coerceToDescriptorType:typeUnicodeText];
NSData *data = [unicode data];
NSString *result = [[NSString alloc] initWithCharacters:(unichar *)[data bytes] length:[data length] / sizeof(unichar)];
}
Đoạn mã trên sẽ trả về địa chỉ URL của tab Safari hiện đang được hiển thị phía trước. Tuy nhiên, đoạn mã này chỉ hoạt động khi chế nhận định kèo độ sandbox chưa được bật. Nếu bật sandbox, bạn sẽ gặp lỗi sau:
2016-06-24 10:41:10.022 WebDrop[81536:1628248] Lỗi: {
NSAppleScriptErrorAppName = Safari;
NSAppleScriptErrorBriefMessage = "Ứng dụng không chạy.";
NSAppleScriptErrorMessage = "“Safari” gặp lỗi: Ứng dụng không chạy.";
NSAppleScriptErrorNumber = "-600";
NSAppleScriptErrorRange = "NSRange: {61, 6}";
}
Trong đó, thông điệp lỗi bằng Unicode có nghĩa là “ứng dụng không chạy”. Điều này xảy ra vì sandbox đã ngăn Apple Script truy cập vào Safari. Có hai phương pháp để giải quyết vấn đề này.
Phương Pháp Đầu Tiên
Phương pháp đầu tiên liên quan đến việc cài đặt tệp .scpt
vào thư mục người dùng. Tuy nhiên, phương pháp này dường như không đáp ứng yêu cầu của App Store. Khi tôi sử dụng phương pháp này để gửi ứng dụng lên, đội ngũ kiểm duyệt đã phản hồi như sau:
Hiệu Suất - 2.4.5
Ứng dụng của bạn cài đặt một tập lệnh AppleScript ở các vị trí chia sẻ.
Cụ thể hơn, ứng dụng cài đặt một tập lệnh AppleScript vào thư mục Application Scripts.
Tôi không rõ lý do tại sao nhóm kiểm duyệt không chấp nhận phương pháp này mà yêu cầu phải lưu trữ Apple Script bên trong container (xem thêm tham khảo từ StackOverflow). Vì vậy, chúng ta cần chuyển sang phương pháp thứ hai.
Phương Pháp Thứ Hai
Phương pháp thứ hai liên quan đến việc thêm khóa quyền lợi (entitlement key). Có hai khóa có thể được sử dụng:
com.apple.security.scripting-targets
com.apple.security.temporary-exception.apple-events
Khóa đầu tiên được khuyến nghị sử dụng hơn. Cấu trúc của nó trông như sau:
<key>com.apple.security.scripting-targets</key>
<dict>
<key>com.apple.mail</key>
<array>
<string>com.apple.mail.compose</string>
</array>
</dict>
Với khóa thứ hai, cấu hình đơn giản hơn vì không cần xác định hành động cụ thể. Chỉ cần liệt kê ID bundle của ứng dụng (lưu ý tất cả phải viết thường):
<key>com.apple.security.temporary-exception.apple-events</key>
<array>
<string>com.google.chrome.canary</string>
<string>com.google.chrome</string>
<string>com.apple.safari</string>
<string>com.vivaldi.vivaldi</string>
<string>org.webkit.nightly.webKit</string>
</array>
Việc chọn bắn cá máy xèng online khóa nào phụ thuộc vào yêu cầu cụ thể của ứng dụng và mức độ kiểm soát bạn muốn có đối với các tương tác giữa các ứng dụng.
Hy vọng bài viết này giúp ích cho những ai đang làm việc với Apple Script trong môi trường sandbox!