You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sharpie生成ApiDefinition.cs后,Xamarin iOS绑定Swift协议编译失败

iOS Binding Library编译错误:Swift Protocol类型无法识别的解决方法

构建iOS Binding Library项目时,若函数参数或公开字段为Swift Protocol类型,即便ApiDefinition.cs(由sharpie工具生成)中已定义对应类型,仍会抛出编译错误:

The type or namespace name 'xxx' could not be found (are you missing a using directive or an assembly reference?)

问题示例

Swift原代码

@objc(ScanOperation)
public protocol ScanOperation { 

    @obj(onItemAdded:)
    func onItemAdded(itemObj: ItemData)

}

@objc(ScanAgent)
public class ScanAgent : NSObject {
    
    @objc(Initialize:)
    public func Initialize(scanOperation: ScanOperation) { }
}

Sharpie生成的ApiDefinitions.cs代码

[Protocol]
interface ScanOperation
{
    // @required -(void)onItemAdded:(ItemData * _Nonnull)itemObj;
    [Abstract]
    [Export("onItemAdded:")]
    void OnItemAdded(ItemData itemObj);
}


// @interface ScanAgent : NSObject
[BaseType(typeof(NSObject))]
interface ScanAgent
{
    // -(void)Initialize:(id<ScanOperation> _Nonnull)scanOperation;
    [Export("Initialize:")]
    void Initialize(ScanOperation scanOperation);
}

以上代码编译时会触发上述类型找不到的错误。

修复方案

Sharpie生成的Protocol定义缺少必要的特性标记,导致Xamarin无法正确映射Objective-C中的协议类型。只需修改Protocol的定义即可:

修正后的ApiDefinitions.cs代码

[Protocol(Name = "ScanOperation"), Model]
interface ScanOperation : INativeObject
{
    // @required -(void)onItemAdded:(ItemData * _Nonnull)itemObj;
    [Abstract]
    [Export("onItemAdded:")]
    void OnItemAdded(ItemData itemObj);
}

// @interface ScanAgent : NSObject
[BaseType(typeof(NSObject))]
interface ScanAgent
{
    // -(void)Initialize:(id<ScanOperation> _Nonnull)scanOperation;
    [Export("Initialize:")]
    void Initialize(ScanOperation scanOperation);
}

关键修改说明

  • 添加[Model]特性:告知Xamarin该接口对应Objective-C中的id<Protocol>类型,使其能被正确识别为可传递的协议实例。
  • 继承INativeObject:处理原生对象的生命周期管理,确保Xamarin能正确与Objective-C对象交互。
  • 指定Name = "ScanOperation":与Swift代码中@objc(ScanOperation)的命名保持一致,避免类型映射匹配失败。

若ItemData为自定义类型,需确保其已在ApiDefinitions.cs或Structs.cs中正确定义,否则也会引发类似的类型找不到错误。

内容的提问来源于stack exchange,提问作者Derorrist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:05:18