我正试图浏览本指南:
https://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/walkthrough/
尝试为此github项目创建绑定:
https://github.com/lminhtm/LMGaugeView
使用Sharpie 3.4。
我遇到了以下问题:
我无法使用架构i386 armv7 x86_64 arm64
生成Fat二进制文件,因为我正在构建针对iOS11的版本。我只能使用体系结构x86_64
和arm64
生成Fat二进制文件,尝试其他人给出错误消息invalid iOS deployment version, iOS 10 is the max deployment target for 32-bit targets
。这是预期的吗?
当我使用Sharpie时,我能够生成API和Struct文件,但是,每个文件都很庞大,Structs最终为24K +行,而API 54K +行。我也遵循了一个youtube教程,他得到的输出大约是200行左右,所以我的这么大的事实让我觉得有些事情正在发生。他的教程不适用于我同样的Objective-C项目,但我甚至尝试了他所做的同样的结果,结果也是如此。
结构文件最终有超过7K的错误,我看到无数的行看起来像:
// extern long double tanhl (long double) __attribute__((const)) __attribute__((nothrow));
[DllImport ("__Internal")]
[Verify (PlatformInvoke)]
static extern [unsupported Builtin: long double] tanhl ([unsupported Builtin: long double]);
如果它缺少标识符名称并且有[不支持的内置:我不明白的部分。
对其他iOS版本以及watchOS和TV也有无数的引用,所以看起来它正在尝试为每个操作系统和版本创建API和Structs,这就是为什么文件会如此之大。这是Struct文件中的一小段代码:
// extern CGPathRef _Nullable CGPathCreateCopyByTransformingPath (CGPathRef _Nullable path, const CGAffineTransform * _Nullable transform) __attribute__((availability(ios, introduced=5.0))) __attribute__((cf_audited_transfer));
[iOS (5,0)]
[DllImport ("__Internal")]
[Verify (PlatformInvoke)]
[return: NullAllowed]
static extern unsafe CGPathRef* CGPathCreateCopyByTransformingPath ([NullAllowed] CGPathRef* path, [NullAllowed] CGAffineTransform* transform);
// extern CGMutablePathRef _Nullable CGPathCreateMutableCopy (CGPathRef _Nullable path) __attribute__((availability(ios, introduced=2.0))) __attribute__((cf_audited_transfer));
[iOS (2,0)]
[DllImport ("__Internal")]
[Verify (PlatformInvoke)]
[return: NullAllowed]
static extern unsafe CGMutablePathRef* CGPathCreateMutableCopy ([NullAllowed] CGPathRef* path);
// extern CGMutablePathRef _Nullable CGPathCreateMutableCopyByTransformingPath (CGPathRef _Nullable path, const CGAffineTransform * _Nullable transform) __attribute__((availability(ios, introduced=5.0))) __attribute__((cf_audited_transfer));
[iOS (5,0)]
[DllImport ("__Internal")]
[Verify (PlatformInvoke)]
[return: NullAllowed]
static extern unsafe CGMutablePathRef* CGPathCreateMutableCopyByTransformingPath ([NullAllowed] CGPathRef* path, [NullAllowed] CGAffineTransform* transform);
我知道这些文件应该更小,特别是因为Objective-C代码是单个头文件。我在这里做错了什么?
如果需要,我可以提供更多详细信息!
答案 0 :(得分:3)
我快速检查了你提到的LMGaugeView pod。
原来,你需要拥有最新的XCode和Sharpie(3.4是当前版本)。
您可以通过运行value counts
来更新sharpie。然后你可以生成一个绑定。
我已经尝试过,似乎工作得很好,看看自己:youtube.com/watch?v=g7qQJnMxubU&feature=youtu.be
无耻插件 - 我在视频中使用的工具是我用于Xamarin.iOS绑定的sharpie包装器 - objc-automatic。