在iOS上加载可装载的包,有什么方法可以实现吗?

5
我正在开发一个大型的iOS项目,想将独立模块分成几个可加载的bundle。然而,官方文档指出iOS不支持可加载的bundle。并且,我计划使用内部分发方式,所以应用商店审核不是问题。
现在我的问题是:我在代码中调用[_bundle principalClass]来访问可加载bundle的入口类。它在越狱的iOS设备上运行良好。对于未越狱的设备,在使用Xcode的调试模式时也可以正常工作。但是当我从springboard独立运行时,它会崩溃到后台。
我真的很想知道:
1)为什么可加载的bundle在越狱/未越狱设备上运行如此不同?
2)XCode调试模式和应用程序正常运行模式之间的主要区别是什么?
是否有其他巧妙的方法可以在未越狱的iOS设备上使用动态库?
1个回答

1
更新:自2014年发布的iOS 8起,iOS已经对框架提供了适当的支持,因此开发人员不再需要使用静态库。
旧答案:
iOS禁止所有动态加载不属于系统的可执行代码,包括Framework、dylibs、使用mmap的可执行内存页面等。希望他们有一天能允许动态捆绑包,但目前您需要将模块构建为静态库,并在构建时链接它们。目前没有已知的方法可以解决这个限制。
很多人已经写过如何做到这一点(例如,http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/),或者您可能想使用现有项目作为示例。我喜欢的一个是GData objc API,它在构建为OS X时具有动态框架的目标,在构建为iOS时具有静态库:http://code.google.com/p/gdata-objectivec-client/

这还有效吗? - Rahul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接