在iOS上嵌入Mono

sun*_*ant 16 mono xamarin.ios ios xamarin

我想将mono嵌入到我的iOS应用程序中.我不想使用MonoTouch.我想像这样手动嵌入单声道:

http://www.mono-project.com/Embedding_Mono

我已经在Windows上成功完成了这个,使用上面的指南和各种在线示例,这里有一个很好的Windows:

https://github.com/inkdev/Embedded-Mono-Sample

但是我开始使用iOS时遇到了麻烦.我知道可以做到,像Unity3d这样的公司使用它来支持他们的游戏引擎技术.我无法弄清楚如何为iOS编译和链接单声道,也无法找到任何好的指令.我没有找到任何使用搜索引擎的帮助,他们似乎只是出现了关于MonoTouch的文章(Xamarin自己的商业包装器将单声道嵌入到iOS中).

这里有一些值得注意的链接:

http://www.mono-project.com/Mono:ARM

http://web.archive.org/web/20090106023130/http://mono-project.com./Mono:Iphone

有没有我可以获得Mono for iOS的预编译库和标题,所以在我的C代码中我可以简单地链接和包含?

有人可以提供如何为iOS ARM CPU编译单声道的示例吗?

MonoTouch为所有iOS Objective C API提供了一个很棒的包装器,但是你并不一定需要所有这些,因为据我所知它应该可以编译然后自己嵌入mono然后使用pInvoke来调用你的一些本机函数需要.

任何帮助将不胜感激,ty!

Joo*_*ong 0

正如 Rolf 所说,您需要先阅读Mono Licensing 文档。在 iOS 上嵌入 mono 需要 Xamarin 的特殊许可。

您需要从 XCode 更改多个构建设置,这就是我所做的。

  1. 打开(或创建)iOS 项目
  2. 添加libmonoboehm-2.0.a到您的项目(您可以使用其他版本的.a文件)
    1. 是在Library/Frameworks/Mono.framework/Versions/{version}/lib文件夹里的
  3. 项目 -> 构建设置 -> 标头搜索
    1. 添加路径:/Library/Frameworks/Mono.frameworks/Versions/{version}/include/mono-2.0
  4. 项目 -> 构建设置 -> 库搜索
    1. 添加路径:/Library/Frameworks/Mono.frameworks/Versions/{version}/lib

并且,在您的 iOS 应用程序中编写这样的代码

    #include <mono/jit/jit.h>
    #include <mono/metadata/mono-config.h>
    #include <mono/metadata/assembly.h>
    #include <mono/metadata/environment.h>

// ....

    const char* dllFile = "ABSOLUTE_PATH_TO_DLL_OR_EXE";
    domain = mono_jit_init(dllFile);
    mAssembly = mono_domain_assembly_open(domain, dllFile);
// ... Do whatever you want :)
Run Code Online (Sandbox Code Playgroud)

请记住。在 iOS 上嵌入 mono 时,您需要从 Xamarin 获取许可证。

享受 :)

  • 这*可能*可以在 iOS 模拟器上工作(因为 JIT 可以在那里工作),但它**不会**在 iOS 设备上工作。即使针对 ARM 重新构建,您也会遇到其他问题,甚至被 AppStore 拒绝(因为代码生成)。 (3认同)