JXA で osacompile にて app 化すると argv が仕事しない件。
NSProcessInfo を使うことで解決した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | function run(argv) { $.NSApplication.sharedApplication; const window = new MyWindow(); $.NSApp.setActivationPolicy($.NSApplicationActivationPolicyRegular); ObjC.registerSubclass({ name: "AppDelegate" , protocols: [ "NSApplicationDelegate" ], methods: { "applicationDidFinishLaunching:" : { types: [ "void" , [ "id" ]], implementation: (notification)=> { let arr = $.NSProcessInfo.processInfo.arguments.js; if (arr.length > 2) window.setPath(arr[2].js); } } } }); // // etc.. // // Not work after compiling //if (argv.length < 0) window.setPath(argv[0]); $.NSApp.delegate = $.AppDelegate. new ; $.NSApp.run; } |
引数の数に注意。
[“osascript”, “src”, parm1, param2, …]
これで js のままでも app にコンパイルしても両方仕事する。
スクリプトのまま使うなら argv を使ったほうが簡単だけどね。
ところで前回の zipinfo の件だけど。
macOS の zip は -U オプションすら使えないじゃん。
パッチが当たっていないどころか UNICODE サポートですらないってことだ。
ということでこいつの出力からの変換は不可能であるようだ。
で、zipdetails という perl のコマンドを見つけた。
こいつの出力からなんとかならないかな?
かなり意地悪な zip ファイルを用意して試す。
改行が UNOCODE 未対応のようで化ける、駄目だ。
でも perl でできるということはスクリプトで得られるということだ。
バイナリを見ると、単純にファイル名は構造体にそのまんま入っているヤン。
って、だから JavaScript じゃバイナリは直接扱えないんだってばさ!
UInt8Array に変換すると超激遅なのは Gjs で経験済み。
Objective-c での手段も見つからない、みんな C でやっているの?
もう macOS 版は日本語アーカイブをサポートしない、で終わりにしよう。