12

这是我第一次在 stackoverflow 上提问,我很绝望。

我的任务是加载 dylib 或将静态库加入到 IOS 设备的现有可执行文件中。

我将使用static void __attribute__((constructor)) initialize(void)开始调酒。这个可执行文件适用于内部企业应用商店,所以我不需要通过苹果应用商店(因为他们会拒绝它)。

这样做的原因是从客户那里获取现有的 IPA 及其签名密钥,并向他们的应用程序添加新功能,而无需开发人员干预。

有一家公司在做这件事,叫做 nukona。您可以在这里观看电影:https ://www.youtube.com/watch?feature=player_embedded&v=z9rrOB6lOxY

我可以告诉你,我尝试将 LSEnvironment 放入 plist 文件中,DYLD_INSERT_LIBRARIES但结果表明 LSEnvironment 在 IOS 应用程序的沙箱中似乎没有任何影响。

我还尝试了 install_name_tool 来更改其中一个依赖项并将其替换为我的 dylib(它也具有该依赖项)。它在没有信息的情况下崩溃。

显然,如果我将 dylib 添加到 XCode 中的测试应用程序并重新编译它可以完美运行,这是给定的。但是,这是我不能问的,例如,公司的管理员。重建可能会阻止客户使用此库。

这是我在堆栈溢出中找到的相关链接,但对于 osx,我需要它用于 IOS。 如何将 LC_LOAD_DYLIB 命令插入 Mach-O 二进制文件 (OSX)

我唯一能想到的就是以某种方式编辑二进制加载命令,但考虑到重定位表等,我不确定如何以及如何做到这一点......

欢迎任何替代方案。

感谢您的时间。

4

1 回答 1

7

我开源了optool它确实做到了这一点(我没有在 iOS 上测试过,但它应该可以工作。如果你有问题,请打开一个问题)

于 2014-08-05T05:56:55.140 回答