我已经设法解决了这个问题。
我希望这个答案对其他Xamarin开发人员有帮助。
如果您使用的是Objective C绑定库,则应使用XCode构建并生成ApiDefinition。cs和StructsAndEnum。cs使用
Objective Sharpie
可获得的
here
.
我遇到的问题是自动生成的代码无法处理
Delegates
正确地此外
[Native]
属性导致解释器使用不兼容的数据类型,即和
enum
结构与
uint
.
使上述问题更加复杂的是,我还试图绑定多个
.a
同一项目中的静态库。
因此,您需要在Objective Sharpie生成的C#文件中重构一些内容:
删除任何重复的方法签名在我的示例中,工具生成了以下代码:
[Export("revealControllerPanGestureShouldBegin:")]
bool RevealController(SWRevealViewController revealController);
[Export("revealControllerTapGestureShouldBegin:")]
bool RevealController(SWRevealViewController revealController);
为了避免编译器抛出重复的方法错误,应该是:
[Export("revealControllerPanGestureShouldBegin:")]
bool RevealControllerPanGestureShouldBegin(SWRevealViewController revealController);
[Export("revealControllerTapGestureShouldBegin:")]
bool RevealControllerTapGestureShouldBegin(SWRevealViewController revealController);
接下来,查找工具生成了从不受支持的原语继承的枚举结构的任何示例。
因此,例如:
[Native]
public enum FrontViewPosition : uint
{
LeftSideMostRemoved,
LeftSideMost,
LeftSide,
Left,
Right,
RightMost,
RightMostRemoved
}
对的更改
public enum FrontViewPosition : ulong
.
接下来删除任何
[Verify]
装饰。
最后,我发现Objective Sharpie处理扩展方法的能力很差,导致生成的代码试图创建一个包含虚拟方法的静态类。。。
要修复,请查找的所有实例
[Category]
,例如:
[Category]
[BaseType(typeof(UIViewController))]
partial interface UIViewController_SWRevealViewController
{
[Export("revealViewController")]
SWRevealViewController RevealViewController{ get; };
}
并将其更改为
[Category]
[BaseType(typeof(UIViewController))]
partial interface UIViewController_SWRevealViewController
{
[Export("revealViewController")]
SWRevealViewController RevealViewController();
}
现在清理并重新生成,自动生成的代码将正确编译。在任何需要的项目中引用绑定dll以使用它。
如果有人正在考虑使用
SWRevealViewController
Xamarin中的库,这样可以节省您使用我的repo的时间
here
.
祝你好运,玩得开心。
约翰