如何将LC_LOAD_DYLIB命令插入Mach-O二进制文件或将静态库连接到现有的二进制文件(IOS)

这是我第一次问stackoverflow和我绝望。

我的任务是加载一个dylib或join一个静态库到IOS设备已经存在的可执行文件。

我将使用static void __attribute__((constructor)) initialize(void)开始搅拌。 这个可执行文件是在内部企业appstore,所以我不需要通过苹果appstore(因为他们会拒绝它)。

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

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

我可以告诉你,我试图把LSEnvironment放在带有DYLD_INSERT_LIBRARIES的plist文件中,但是事实certificateLSEnvironment在IOS应用程序的沙盒中似乎没有任何作用。

我也尝试了install_name_tool来更改其中一个依赖关系,并用我的dylib(也有这个依赖关系)replace它。 它崩溃,没有信息为什么。

很明显,如果我将dylib添加到XCode中的testing应用程序,并重新编译,它是完美的,这是一个给定的。 但是,这是我不能问的,例如,一个公司的pipe理员。 重build可能会阻止客户使用这个库。

这里是一个相关的链接,我发现堆栈溢出,但对于OSX,我需要它的IOS。 如何将LC_LOAD_DYLIB命令插入Mach-O二进制文件(OSX)

我唯一能想到的是编辑二进制加载命令一些如何,但我不知道如何以及如何做到这一点考虑到搬迁表等…

任何替代scheme是值得欢迎

感谢您的时间。

我开源的optool正是这样(我没有在iOS上testing过,但它应该可以工作,如果你有问题,请打开一个问题)