Unity iOS - 无法从 .Bundle 导入函数

Posted

技术标签:

【中文标题】Unity iOS - 无法从 .Bundle 导入函数【英文标题】:Unity iOS - Cannot import functions from .Bundle 【发布时间】:2018-06-22 13:05:55 【问题描述】:

目前正在尝试为 Unity 上的 ios 框架创建包装器。

我做了一个.bundle,包含基本的objective-c代码:

sample.h:

#import <Foundation/Foundation.h>

extern "C"

    void SampleFunction(); // this is going to call already bridged swift or objc code

sample.mm:

#import "Sample.h"
#import <SDK/SDKFunctions.h>

void SampleFunction()


    // my sweet functions calls


SDK 作为 .framework 包含在捆绑包中(参考“链接的框架和库”)。捆绑目标是 iOS。

捆绑包构建成功。

捆绑包放置在 Unity 中的“Assets/Plugins/iOS”下,标记为“iOS”和“Add to Embedded Binaries”

然后,在 Unity 中,有一个简单的 C# 脚本调用 SDK 函数:

sample.cs

public class BundleImportSample : MonoBehaviour 


    #if UNITY_IOS
        [DllImport("__Internal")]
        private static extern void SampleFunction();
    #endif
        void Start()
        
    #if UNITY_IOS
            SampleFunction();
    #endif
        
    

当我在编辑器中测试此代码时,我收到以下错误:

EntryPointNotFoundException: SampleFunction

如果我在 iOS 上构建生成的项目,我会遇到类似的问题:

ld: 未找到架构 arm64 的符号

注意:我使用以下教程作为指导:http://blog.mousta.ch/post/140780061168

为什么在 __Internal 中找不到 SampleFunction()?

【问题讨论】:

我没有这样做的经验,但是看教程;你为什么使用“__Internal”?在他们所做的示例中:[DllImport ("SwiftBeep")] 其中“SwiftBeep”是项目/类/等的名称...... 在 iOS 上,DLL 在 __internal 中加载。请参阅 Unity 文档:docs.unity3d.com/Manual/PluginsForIOS.html 【参考方案1】:

代码很好。

问题在于 .bundle 中的切片。它是为 i386 / x86_64 而不是 arm64 / armv7 /armv7s 构建的。

为避免此问题,请检查您的目标上的以下选项:

在“通用 iOS 设备”上构建 构建设置:“仅构建活动架构:否” 构建设置:“架构:标准架构”

【讨论】:

你拯救了我的一天。谢谢:-) 那些构建设置是什么?捆绑或统一项目?我想为 iOS 和 macOS 创建一个包:我应该把它们放在哪里? 这些是 XCode 中捆绑包(一个 .framework)的构建设置。我不记得捆绑位置的良好做法;但 Unity 文档对此非常准确。

以上是关于Unity iOS - 无法从 .Bundle 导入函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将游戏从Unity导到iOS设备上

如何将游戏从Unity导到iOS设备上

如何从 iOS 静态库中访问 Bundle

从 Asset Bundle 加载资源以在 Unity 中进行 Play 资源交付

unity打包-1.Asset Bundle资源打包

unity打包-1.Asset Bundle资源打包