3

我正在尝试浏览本指南:

https://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/walkthrough/

尝试为此 github 项目创建绑定:

https://github.com/lminhtm/LMGaugeView

使用Sharpie 3.4。

我遇到了以下问题:

  1. 我无法使用架构生成 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。这是预期的吗?

  2. 然后,当我使用 Sharpie 时,我能够生成 API 和 Struct 文件,但是,这些文件中的每一个都很大,Structs 以 24K+ 行结束,而 API 54K+ 行。我也关注了一个 youtube 教程,他得到的输出大约是 200 行左右,所以我的如此庞大的事实让我觉得有些事情正在发生。他的教程不是针对我的同一个 Objective-C 项目,但我什至尝试了与他相同的教程,并得到了相同的结果。

  3. 结构文件最终有超过 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 代码是单个头文件。我在这里做错了什么?

如果需要,我可以提供更多详细信息!

4

1 回答 1

3

我快速检查了您提到的 LMGaugeView 吊舱。

事实证明,你必须拥有最新的 XCode 和 Sharpie(3.4 是当前版本)。

您可以通过运行来更新 Sharpie sharpie update。然后你可以生成一个绑定。

我试过了,它似乎工作得很好,看看你自己:youtube.com/watch ?v=g7qQJnMxubU&feature=youtu.be

我在视频中使用的无耻插件工具是我用于 Xamarin.iOS 绑定的 Sharpie 的包装器 - objc-automatic

于 2017-10-21T13:25:35.770 回答