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 导入函数的主要内容,如果未能解决你的问题,请参考以下文章