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 版は日本語アーカイブをサポートしない、で終わりにしよう。
