Xamarin.Forms下用Sharpie绑定Unblu框架出现OpenTok导入错误如何解决
问题根源
UnbluCoreSDK内部采用<OpenTok/OpenTok.h>的模块导入语法引用依赖,你之前的Sharpie参数错误在于:
-F参数需要传入存放OpenTok.framework的父目录,而非OpenTok.framework本身的路径- 仅传入
-I头路径无法满足Clang的模块导入搜索规则
第一步:修正UnbluCoreSDK绑定命令
假设你本地的目录结构如下:
根目录 ├─ Unblu │ └─ UnbluCoreSDK.framework └─ Downloads └─ OpenTok-iOS └─ OpenTok.framework
在根目录执行以下命令:
sharpie bind \ --sdk=iphoneos \ --output="Unblu/UnbluCoreSDK/XamarinApiDef" \ --namespace="UnbluCoreSDK" \ --framework "./Unblu/UnbluCoreSDK.framework" \ -c -F"./Downloads/OpenTok-iOS"
重点:-F后面跟的是OpenTok.framework所在的文件夹路径,不是framework本身的路径。
第二步:绑定UnbluVisitorSDK
完成CoreSDK绑定后再执行VisitorSDK的绑定命令,需要同时传入CoreSDK和OpenTok的框架搜索路径:
sharpie bind \ --sdk=iphoneos \ --output="Unblu/UnbluVisitorSDK/XamarinApiDef" \ --namespace="UnbluVisitorSDK" \ --framework "./Unblu/UnbluVisitorSDK.framework" \ -c -F"./Downloads/OpenTok-iOS" -F"./Unblu"
异常兼容方案
如果执行上述命令仍报错,可采用以下临时方案绕过:
- 打开
UnbluCoreSDK.framework/Headers/OTDefaultAudioDevice.h,暂时把#import <OpenTok/OpenTok.h>注释掉,等Sharpie生成绑定代码后再取消注释 - 手动补全生成的
ApiDefinitions.cs和Structs.cs中缺失的OpenTok相关类型引用,绑定项目直接引用你已完成的OpenTok绑定项目即可
后续绑定项目配置注意事项
- 两个Unblu绑定项目都要添加对OpenTok绑定项目的引用
- 绑定项目的Native References中添加对应原生framework时,勾选
Frameworks、Linker flags=-ObjC选项 - 最终Xamarin.Forms iOS主项目要同时引用OpenTok、UnbluCoreSDK、UnbluVisitorSDK三个绑定项目
内容的提问来源于stack exchange,提问作者Maxime Esprit
相关产品推荐
相关产品推荐

