JXA で osacompile にて app 化すると argv が仕事しない件。
NSProcessInfo を使うことで解決した。
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 版は日本語アーカイブをサポートしない、で終わりにしよう。