JXA で「開く」ダイアログを使いたい。
Cocoa の NSOpenPanel というものを使うらしい。
手段はアッサリ見つかったけど、使うと以下が stderror に出力される。
どちらの kit を使うかはっきりせぇ!ということらしい。
調べると AppKit 版と sandbox 版があるらしい。
Overview の所を Google 翻訳にて。
NSOpenPanel – AppKit | Apple Developer Documentation
一応、sandbox については以下が解りやすい。
iOS アプリは全部コレだし。
新・OS X ハッキング!(37) これから必須のセキュリティモデル「サンドボックス」 | マイナビニュース
とにかくはっきりせぇ!と言われても手段がわからない。
真ん中あたりの Open and Save Dialog Behavior with App Sandbox を見つける。
えっと、このコードだと sandbox で動かせないって警告なのかな。
って JXA はデフォルトにて sandbox で動いているの?
無効にしようと振り分け手段を探しても Xcode からの手段しか出てこない。。。。。
ってよく考えたら GUI アプリなら stderror 関係ないジャン!
以上 sandbox についてのお勉強でした、macOS メンドクサ!
ということで、無視することにして。
ObjC.registerSubclass({ name: "MenuAction", methods: { "openFile:": { types: ["void", ["id"]], implementation: (sender)=> { let panel = $.NSOpenPanel.openPanel; panel.canChooseDirectories = true; //panel.message = $("指定すると TitleBar が現れる"); panel.allowsMultipleSelection = false; panel.allowedFileTypes = $(["cbz","zip"]); // sandbox @ Error //panel.beginSheetModalForWindowCompletionHandler(window, (res)=> { panel.beginWithCompletionHandler( (res)=> { if (res == $.NSFileHandlingPanelOKButton) { let url = panel.URLs.objectAtIndex(0); window.setPath(url.path.js); } }); } } } });
これで動く。
上記 stderror を吐くけど気にしない!
beginSheetModalForWindowCompletionHandler は動かない。
sandbox なので NSWindow を参照できない、でいいのかな?
間違えていたらごめんチャイ。
動きました、筆者の凡ミスコードのせいだった。