gpt4 book ai didi

macos - 有没有办法在 mach_inject 之后卸载 bundle

转载 作者:行者123 更新时间:2023-12-04 05:12:06 26 4
gpt4 key购买 nike

我想将较新版本的包加载到目标进程,但这是不可能的,因为已经加载了同名的包。更改 CFBundleVersionCFBundleShortVersionString捆绑包不起作用。最简单的方法是简单地杀死目标进程并重新启动它。但我认为这不是最好的方法。那么还有另一种方法吗?

最佳答案

mach_inject 我也面临同样的问题。如果不修改 mach_inject,我看不到直接的解决方案。

我的解决方案是创建两个捆绑包。将第一个捆绑包视为真正插件的插件管理器。插件管理器非常简单,希望永远不需要升级,它加载和卸载原始包并添加了清理代码。

我正在使用 Apple 的 NSBundle 类来加载和卸载插件。在卸载之前,我调用原始插件中的主体类来清理它。

卸载用 objective-c 编写的包是危险的。 2 & 4 大体上是对的。

  • mach_override 不可撤销,但可以在插件管理器中调用,在真实插件中调用代码。
  • 在要卸载的插件中使用类别和协议(protocol)是不安全的。
  • 你需要取消调配你调配的东西,记住你不能删除方法,所以当你重新加载插件时,你需要替换(而不是添加)旧的悬空方法。您将需要检查您的调酒代码。
  • 您需要使安装的计时器无效,删除观察者,并删除添加到运行循环中的任何其他内容。
  • 关于macos - 有没有办法在 mach_inject 之后卸载 bundle ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14786070/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com