Xamarin iOS Binding 项目似乎不包含库或接口定义
Posted
技术标签:
【中文标题】Xamarin iOS Binding 项目似乎不包含库或接口定义【英文标题】:Xamarin iOS Binding project doesn't seem to include the library or interface definitions 【发布时间】:2014-09-16 16:19:22 【问题描述】:我创建了一个 ios 绑定项目,添加我的静态库,该库创建了以下 linkwith.cs 内容以及一些我需要的添加框架和链接器标志
[assembly: LinkWith ("libMyLibrary-iOS.a", LinkTarget.ArmV7 | LinkTarget.ArmV7s | LinkTarget.Simulator,Frameworks = "CoreTelephony SystemConfiguration UIKit Foundation CoreGraphics", LinkerFlags = "-ObjC -all_load -lz -lstdc++", ForceLoad = true )]
在 ApiDefinition.cs 文件中,我复制了 Objective-Sharpie 创建的内容,并添加了一些遗漏的更正和补充。还将所有枚举移至 StructsAndEnums.cs。
我也注意到了一些奇怪的事情,intelisense 不适用于某些属性,特别是 BaseType 和 Static 是红色的并且无法识别,而 StructsAndEnums.cs 文件中的枚举。第二次构建成功,如果我清理并尝试构建我在自动生成的文件中得到错误,或者如果我尝试重建我总是得到错误,第二次构建很好。
静态库文件是 12.5MB,但结果 .dll 发布版本只有 4kb,我觉得这很奇怪,而且由于它不是我创建的第一个绑定库,我知道 .a 库应该合并到 .dll 中图书馆。
检查文件的构建操作看起来是正确的。
libMyLibrary-iOS.a -> ObjcBindingNativeLibrary
ApiDefinition.cs -> ObjcBindingDefinition
StructsAndEnums.cs -> ObjcBindingCoreSource
没有修改或添加项目属性,只是 Xamarin Studio 5.3 (build 441) 的新绑定项目。
在解决方案中,我创建了一个单视图应用程序,添加了绑定项目库作为参考,但没有可见的命名空间可用于使用接口协定。
我可以采取什么措施来解决或调试问题?
[编辑]
我在重建项目时遇到的编译错误是关于我这样设置的块
public delegate string SPLJSONModelKeyMapBlock (string keyName);
并在这个界面中使用
[BaseType (typeof (NSObject))]
public partial interface SPLJSONKeyMapper
[Export ("JSONToModelKeyBlock")]
SPLJSONModelKeyMapBlock JSONToModelKeyBlock get;
[Export ("modelToJSONKeyBlock")]
SPLJSONModelKeyMapBlock ModelToJSONKeyBlock get;
[Export ("initWithJSONToModelBlock:modelToJSONBlock:")]
IntPtr Constructor (SPLJSONModelKeyMapBlock toModel, SPLJSONModelKeyMapBlock toJSON);
[Export ("initWithDictionary:")]
IntPtr Constructor (NSDictionary map);
[Static, Export ("mapperFromUnderscoreCaseToCamelCase")]
SPLJSONKeyMapper MapperFromUnderscoreCaseToCamelCase get;
[Static, Export ("mapperFromUpperCaseToLowerCase")]
SPLJSONKeyMapper MapperFromUpperCaseToLowerCase get;
Trampolines.g.cs
中的错误截图
【问题讨论】:
【参考方案1】:更新
尝试从委托返回 NSString
而不是字符串:
public delegate NSString SPLJSONModelKeyMapBlock (string keyName);
第一个答案
看起来第二次重建没有正确完成(如果第一次失败,第二次应该失败)。
换句话说,您需要修复(或向我们报告)您在自动生成的文件中遇到的构建错误。
【讨论】:
感谢您的回答,用所有适当的信息编辑了问题。 是的!它工作得很好,嗯,我应该检查何时将 iOS 类型用于 C# 类型。我可能会错过或从未见过的任何链接? 这是我们这边的一个bug,我们应该自动做NSString -> 字符串翻译。 太好了,感谢 Rolf 的更新。我们能否监控某处报告的问题或修复的 ETA,例如下一个 Xamarin iOS 版本? 大家好!我看到答案被标记为解决方案,但实际上我看不到“为什么图书馆是空的”问题的答案。我遇到了类似的问题:一切都可以很好地编译(构建),但是输出库只有 1KB,并且在 iOS 项目中没有可见的命名空间。有什么帮助吗?以上是关于Xamarin iOS Binding 项目似乎不包含库或接口定义的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Android Binding 源自github第三方库的绑定(高级教学)----aar文件
自定义控件的 Xamarin 数据绑定值计算为 Xamarin.Forms.Binding