编者语:iOS 绑定,对于Xamarin来说,是难点,也是痛点。这也阻碍了Xamarin的推广和真正进入一些大型项目,像上段时间两个例子微信和高德SDK绑定,随着版本更新也需要进行调整。这几个月我收到了不少留言和邮件是希望我总结一些步骤和实践的经验,由于工作繁忙,我拖到了现在实在不好意思,今天就来总结一把。
绑定原生库(Linking Native Libraries)
iOS的第三方库有两种,一种是Static Library ,一种是Dynamic Framework。 你可以把这些库对应成.NET中的DLL。封装成这些原生库一般是通过Objective-C/Swift/C去进行封装。通过Sharpie的转换,实际上是C#和这些Objective-C/Swift/C方法进行对接。这里再谈谈Sharpie对应生成两个文件ApiDefinition.cs/Structs.cs .(如图)
不少人说这两个文件就埋下了不少坑,转换后第一步在ApiDefinition.cs就一堆
[Verify(ConstantsInterfaceAssociation)]
这个提示更多是需要你确认,而不需要有太多恐惧。我经验告诉大家,先把这些注释掉就可以了,有这种提示你是无法编译通过的。需要修改基本上是一些属性设定,get/set . 个人觉得这是第一道坎,也是最轻松的。
修改完,真正的大坑才会出现。写代码是一个学问,不可能每个人都有高质量的代码。封装库就是了。因为ApiDefinition是做C#到Objecitve-C转换的桥梁。你需要理解好Protocol / Category / Interface 搞懂。
Protocol等价于C#的接口,Category等价于C#的扩展方法,Interface等价于一个类的声明它结合Implement组合成一个类
在 ApiDefinition.cs 中,这些都有对应的标识符作划分,这里通常呈现的问题如下:
1. 转换的时候,由于Objective-C的语法问题很容易把几个方法重名
2. 还有全局静态方法,会有多个
[Static]
partial interface Constants
这个时候你需要把它整合放到一个里面
3. 指针,C#是没有指针概念的,但Objective-C有 &#x
绑定原生库(Linking Native Libraries)
iOS的第三方库有两种,一种是Static Library ,一种是Dynamic Framework。 你可以把这些库对应成.NET中的DLL。封装成这些原生库一般是通过Objective-C/Swift/C去进行封装。通过Sharpie的转换,实际上是C#和这些Objective-C/Swift/C方法进行对接。这里再谈谈Sharpie对应生成两个文件ApiDefinition.cs/Structs.cs .(如图)
不少人说这两个文件就埋下了不少坑,转换后第一步在ApiDefinition.cs就一堆
这个提示更多是需要你确认,而不需要有太多恐惧。我经验告诉大家,先把这些注释掉就可以了,有这种提示你是无法编译通过的。需要修改基本上是一些属性设定,get/set . 个人觉得这是第一道坎,也是最轻松的。
修改完,真正的大坑才会出现。写代码是一个学问,不可能每个人都有高质量的代码。封装库就是了。因为ApiDefinition是做C#到Objecitve-C转换的桥梁。你需要理解好Protocol / Category / Interface 搞懂。
Protocol等价于C#的接口,Category等价于C#的扩展方法,Interface等价于一个类的声明它结合Implement组合成一个类
在 ApiDefinition.cs 中,这些都有对应的标识符作划分,这里通常呈现的问题如下:
1. 转换的时候,由于Objective-C的语法问题很容易把几个方法重名
2. 还有全局静态方法,会有多个
[Static]
partial interface Constants
这个时候你需要把它整合放到一个里面
3. 指针,C#是没有指针概念的,但Objective-C有 &#x