动态加载Objective C代码

时间:2014-06-20 09:44:30

标签: ios objective-c dynamic-loading

我正在寻找动态加载基于Obj C的源并在我的iOS应用程序中显示视图的可能性。例如:我有一组用于显示视图的代码,我想动态加载此代码并显示此视图。 有点像,

  1. 我的iOS应用程序后台运行服务。
  2. 它将以文本格式从我的服务器获取一组Obj C代码
  3. 此动态Obj C代码应动态执行并显示相应的iOS视图
  4. 来自评论未在appstore中发布..其内部

    这可能吗?

3 个答案:

答案 0 :(得分:3)

简短回答:

答案不是那么简短:

理论上你可以在你的项目中包含Cng或C ++接口到Clang编译工具链,让你的库编译你下载的代码,然后(通过NSBundle或与dlopen直接交互)链接编译代码进入你的应用程序。

在实践中,如果您要实现的目标是提交到App Store,则条款和条件明确禁止这样做。

答案 1 :(得分:2)

您无法在部署到应用商店时执行此操作。

您不会为此使用纯文本,而是使用捆绑包(NSBundle)。捆绑包可以包含文件(图形,NIB)资源和代码,因此您可以创建视图类和任何关联的NIB,编译捆绑包然后将其存储在服务器上。然后,应用程序可以下载捆绑包并在运行时加载它。

答案 2 :(得分:1)

您可以为非应用商店应用执行此操作。我没有尝试过这种方法。

来自Apple Docs

  

从外部捆绑中加载代码的关键是找到一个   适当的入口点到bundle的可执行文件中。和。一样   其他插件方案,这需要一些协调   应用程序开发人员和插件开发人员。你可以发表一个   用于捆绑包的自定义API,用于实现或定义正式插件   接口。在任何一种情况下,一旦你有一个合适的捆绑或   插件,你使用NSBundle类(或CFBundleRef opaque类型)   访问外部代码实现的函数或类。

     

加载Objective-C类如果您正在编写Cocoa应用程序,   你可以使用方法加载整个类的代码   一个NSBundle。用于加载类的NSBundle方法可用于   仅限Objective-C类,不能用于加载写入的类   C ++或其他面向对象的语言。