ScriptingBridgeを使用している別のサンドボックスアプリケーションからサンドボックスアプリケーション(私が書いたもの)をスクリプト化しようとしています。ターゲット・アプリケーションのsdefにアクセス・グループを設定し、スクリプト・アプリケーションのサンドボックス・エンタイトルメントに設定されているエンタイトルメントを持っています。ただし、Apple Eventをターゲット(ScriptingBridgeを使用)に送信しようとすると、warning: failed to get scripting definition from ~/<snip>/MyApp.app; it may not be scriptable.
がコンソールに記録されています(ターゲットアプリケーションへのパスは正しい)。ScriptingBridgeを使用した別のサンドボックスアプリケーションからのAppleScriptingサンドボックスアプリケーション
私は、Sketchサンプルコードアプリの軽度に変更されたバージョンと、スクリプトブリッジを使用する非常に単純なテストアプリケーションで問題を再現できました。 Sketch.sdefの多くの要素に<access-group identifier="com.apple.CocoaExamples.Sketch.Draw" access="rw"/>
を追加し、Sketchのサンドボックス機能をオンにしました。
その後、私のテストのアプリでは、私は以下の資格でサンドボックスをオン:
<?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.app-sandbox</key>
<true/>
<key>com.apple.security.scripting-targets</key>
<dict>
<key>com.apple.CocoaExamples.Sketch</key>
<array>
<string>com.apple.CocoaExamples.Sketch.Draw</string>
</array>
</dict>
</dict>
</plist>
アプリを行い、以下:-applicationWithBundleIdentifier:
、「警告への呼び出しの際
#import "ViewController.h"
#import "Sketch.h"
@implementation ViewController
- (IBAction)draw:(id)sender {
SketchApplication *sketch = [SBApplication applicationWithBundleIdentifier:@"com.apple.CocoaExamples.Sketch"];
if (![sketch isKindOfClass:[NSClassFromString(@"SketchApplication") class]]) {
NSLog(@"Unable to get SketchApplication for Sketch");
}
}
@end
:スクリプト定義の取得に失敗しました "というメッセージが記録され、返されるオブジェクトはSketchApplication
ではなくSBApplication
のインスタンスになります。
テストアプリケーションでサンドボックスをオフにすると、エラーはログに記録されず、-applicationWithBundleIdentifier:
は期待通りにSketchApplication
を返します。 com.apple.security.temporary-exception.apple-events
資格を追加すると同じことが成り立ちますが、これはアプリストアレビューに合格する可能性は低いと考えています。
ターゲットのsdefにアクセスグループを定義して、com.apple.security.scripting-targets
資格を追加する以外にも何か不足していますか?これは誰のためにも使えますか?私はここでテストアプリと私の変更スケッチのプロジェクトをアップロードした
:https://www.dropbox.com/s/cdml9n5npu8o2m3/SandboxScriptTest.zip?dl=0
ターゲットアプリケーションが* already *実行中の場合にのみ発生します。そうでなければ動作します。 –
それは面白いです。私のテストアプリケーションで、Sketchが実行されていない場合、DrawボタンをクリックするとSketchが開き、 '-applicationWithBundleIdentifier:'への呼び出しが成功します。ただし、次回のクリックでSketch now runningが実行されても失敗します。 –
はい、一時的な例外の資格を必要とせずに実際にはじめて動作するのは奇妙です。 –