我正在尝试浏览本指南:
https://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/walkthrough/
尝试为此 github 项目创建绑定:
https://github.com/lminhtm/LMGaugeView
使用Sharpie 3.4。
我遇到了以下问题:
我无法使用架构生成 Fat 二进制文件,
i386 armv7 x86_64 arm64
因为我正在针对 iOS11 构建。我只能生成具有体系结构的 Fat 二进制文件,x86_64
并且arm64
尝试其他文件会给我错误消息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]);
它缺少标识符名称并且有这个 [unsupported Builtin: 我不明白的部分。
还有无数对其他 iOS 版本、watchOS 和 TV 的引用,所以它似乎正在尝试为每个 OS 和版本创建 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 代码是单个头文件。我在这里做错了什么?
如果需要,我可以提供更多详细信息!