mockingbot / mb_colorpicker_desktop_native

3 stars 5 forks source link

Auto detect bundle id with code #4

Open ThatBean opened 4 years ago

ThatBean commented 4 years ago

Found 2 possible candidate:

The ideal scenario is:

This way the required extra --bundle-id=* param can be removed for --mode-2

josephshen commented 4 years ago

第一个方案我之前试过了,是不行的。

josephshen commented 4 years ago

因为取色器启动的时候是以子进程方式启动的,而它自己并不是一个所谓的Bundle。而且往上找父进程的方式呢,又是不稳定的,比方说,我从terminal里面启动electron里面的取色器,权限实际上是需要terminal的,而不是electron的;但是进程树里面找到的第一个父进程是electron的。

josephshen commented 4 years ago

image

josephshen commented 4 years ago

比如说这个我在terminal里面启动的例子,取色器最终会作为一个Electron Helper(就是图中蓝色高亮的那个)进程的子进程运行。而 1:)你给的那几种例子都是找进程自己的Bundle-id,所以没法正常工作; 2:)如果试图遍历父进程的话,一级父亲进程只能找到Electron,但是这个并不是权限的目标程序; 3:)如果指定找几级父进程的话,还是不能全部覆盖到可能的打包情况(究竟是在Teminal里调试还是最终打包了); 4:)所以还是指定Bundle-id最为方便。

ThatBean commented 4 years ago

把规则改为 找到 launchd 的下一级父进程的 bundle id 应该比较符合? 考虑加这个的原因是 debug 的时候 bundle id 难以确定,不好提供 example

josephshen commented 4 years ago

😂我感觉太复杂了,我们还是在REAME里面加上个提醒吧 我觉得我就是忘记告诉你这点了!! 所以估计你调试的时候坑定踩到坑了~~~😂我的错❌

josephshen commented 4 years ago

确定id的时候用这条命令吧,cat XXXXXX.app/Contents/Info.plist | grep -A1 Identifie。

josephshen commented 4 years ago

grep 的时候-A1指定打印出来下一行,然后匹配Identifie就行了。 辛苦你了~~~😂😂😂

ThatBean commented 4 years ago

这个逻辑用 node 也是可以做的,提在这边是考虑到 objC 可能有 Apple 提供的接口会在整合度和效率上好一些

我在 electron-color-picker 先用 ps + defaults read 的方法 patch 一下看看,参考 https://stackoverflow.com/questions/8840149/how-to-obtain-an-applications-bundle-id-or-plist-path-from-only-the-pid

josephshen commented 4 years ago

嗯,我当初也是觉得要是可以自动找就好了,然后各种方法都试了,结论就是还是在脚本语言里面处理以下就好了😂,objC有点小麻烦而且还不确定好使。 当时我考虑的是,可能只有开发调试的时候才不确定Identifie,打包好以后实际上就定下来了,所以就定了加一个参数的方案。

ThatBean commented 4 years ago

已添加 node 实现: https://github.com/mockingbot/mb_colorpicker_desktop_native/blob/dev/electron-test/darwinMainBundleIdHack.js

原始代码在 electron-color-picker: https://github.com/mockingbot/electron-color-picker/blob/master/source/darwin/darwinMainBundleIdHack.js

josephshen commented 4 years ago

@ThatBean 优秀!!我参考一下!!