5

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

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

我真的很想知道:

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

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

4

1 回答 1

1

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

较旧的答案:

iOS 不允许动态加载不属于系统的可执行代码;这包括框架、dylib、使用 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 /

于 2012-05-01T00:10:27.140 回答