使用Objective Sharpie将Objective-C库绑定到C#时遇到问题

时间:2017-10-19 01:19:37

标签: xamarin xamarin.ios objective-sharpie

我正试图浏览本指南:

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

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

https://github.com/lminhtm/LMGaugeView

使用Sharpie 3.4。

我遇到了以下问题:

  1. 我无法使用架构i386 armv7 x86_64 arm64生成Fat二进制文件,因为我正在构建针对iOS11的版本。我只能使用体系结构x86_64arm64生成Fat二进制文件,尝试其他人给出错误消息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]);
    
  4. 如果它缺少标识符名称并且有[不支持的内置:我不明白的部分。

    对其他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代码是单个头文件。我在这里做错了什么?

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

1 个答案:

答案 0 :(得分:3)

我快速检查了你提到的LMGaugeView pod。

原来,你需要拥有最新的XCode和Sharpie(3.4是当前版本)。

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

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

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