iOS上的可加载包,有什么办法可以实现这个目的吗?

时间:2012-04-21 09:43:31

标签: ios dynamic bundle

我正在开发iOS上的大型项目,我想将独立模块分成几个可加载的软件包。但是,官方文档表明iOS不支持可加载包。此外,我计划使用内部分发,因此应用商店批准不是问题。

现在我的问题是:我在代码中调用[_bundle principalClass]来访问可加载包的入口类。它适用于越狱的iOS设备。对于未破坏的设备,当我使用Xcode的调试模式时,它也可以正常工作。但是当我从跳板独立运行时,它会崩溃到背景。

我真的想知道:

1)为什么在jailbroken / unjailbroken设备上运行的可装载捆绑包如此不同? 2)应用程序的XCode调试模式和正常运行模式之间的主要区别是什么?

在未破解的iOS设备上使用动态库还有其他棘手的方法吗?

1 个答案:

答案 0 :(得分:1)

更新:从2014年发布的iOS 8开始,iOS对框架提供了适当的支持,因此开发人员不再需要使用静态库。

旧答案:

iOS禁止动态加载不属于系统的可执行代码;这包括框架,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/