【问题标题】:Loading Objective C code dynamically动态加载 Objective C 代码
【发布时间】:2014-06-20 09:44:30
【问题描述】:

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

  1. 我将在我的 iOS 应用程序的后台运行一项服务。
  2. 它将从我的服务器获取一组文本格式的 Obj C 代码
  3. 此动态 Obj C 代码应动态执行并显示相应的 iOS 视图

来自评论未在应用商店中发布.. 内部使用

这可能吗?

【问题讨论】:

  • 在应用商店发布?
  • 未在应用商店发布..它的内部版本。
  • 介意告诉我们您为什么需要这样做吗?

标签: ios objective-c dynamic-loading


【解决方案1】:

简短回答:

不是那么简短的答案:

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

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

【讨论】:

    【解决方案2】:

    您不能为部署到应用商店执行此操作。

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

    【讨论】:

    • 这很好。有什么我可以遵循的参考吗?另一个问题,我可以让这个过程像编译和制作包一样自动化吗?是否有任何现有的软件可以自动执行此操作,而不是手动执行?因为我希望一切都应该在运行时动态地发生。
    • 我不会在应用程序中查看运行时编译,捆绑包应该在您为其编写代码时进行编译,然后将编译后的捆绑包保存在服务器上供应用程序下载。跨度>
    • 我不会以编程方式编写任何代码。基于 Obj C 的代码将通过桌面工具自动生成(文本格式)并保存在服务器中。
    • 因此,自动工具也应该在使用 Xcode 命令行工具将代码保存到服务器之前对其进行编译。
    【解决方案3】:

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

    来自Apple Docs

    从外部包加载代码的关键是找到一个 包的可执行文件的适当入口点。与 其他插件方案,这需要在 应用程序开发人员和插件开发人员。你可以发布一个 用于实现或定义正式插件的捆绑包的自定义 API 界面。无论哪种情况,一旦你有一个合适的捆绑包或 插件,您使用 NSBundle 类(或 CFBundleRef 不透明类型) 访问外部代码实现的函数或类。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多