问题标签 [objective-sharpie]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
343 浏览

xamarin.ios - Xamarin iOS 绑定 - 协议 - 无法创建抽象类的实例

我使用 Sharpie 为 Zebra Scanner SDK 生成了一些绑定代码。

斑马扫描仪 SDK

一旦我处理了[Verify]属性,生成的代码就可以很好地构建。

SDK 的起点是调用 SDK 工厂的静态方法,然后该方法应返回 SDK Api 对象。create SDK Api 方法绑定到我无法操作的本机调用。

SDK Api 对象是一个协议,Sharpie 生成的代码是一个抽象类。

因此,当尝试创建 SDK Api 对象时,按照 API 工厂的指示,我得到一个运行时异常Cannot create instance of an abstract class

我对如何解决这个问题有点迷茫。任何想法或建议将不胜感激。

0 投票
1 回答
170 浏览

objective-c - 如何在 Sharpie 中正确设置范围?

我想使用sharpie. 我在 /Users//Documents/binding/InfColorPicker/InfColorPicker 中有一些 .h 和 .m 文件。我的 Sharpie 命令看起来像这样 sharpie bind -output=InfColorPicker -namespace=InfColorPicker -sdk-iphoneos12.2 -scope Users/<username>/Documents/binding/InfColorPicker/InfColorPicker/*.h。但是ApiDefinition.csStruct.cs非常大。我认为它已经绑定了所有包含的框架(coregraphic、foundation 等)。如何正确地将范围设置为我的 .h 文件。请帮我。谢谢

0 投票
1 回答
175 浏览

c# - 公开 CocoaPods 依赖标头

回答我的问题:

因为我没有找到原始问题的答案(即公开通过 CocoaPods 加载的依赖项的标头),所以我不觉得我应该对自己的问题发布答案。但是,我确实找到了解决暴露标题的具体问题的方法。

在我的问题中,我试图使用 Objective Sharpie 为我的框架创建 Xamarin 绑定。我的框架公开了一个扩展 JSONModel 的类,因此需要 JSONModel 头文件来构建这些绑定。

通过阅读 Objective Sharpie 文档,我发现 Clang 有一个“框架目录”命令行参数,它告诉它在哪个目录中查找项目引用的框架。

我只是将JSONModel.frameworkandmyframework.framework放在同一个目录中,然后当我运行 Objective Sharpie 时,我像这样运行它:

这成功创建了绑定。

我确实遇到了一点小挫折。我可以使用 Objective Sharpie 的-scope命令行参数,它会输出一个大约 1800 行的文件,其中只有我自己的类的绑定。但是,此文件包含 JSONModel 的定义,并且在我的 Xamarin 项目中不起作用。如果我不使用该参数,它会为所有内容-scope创建绑定,包括所有 Foundation。这创建了一个大约 ~84000 行的文件。

为了解决这个问题,我手动将 JSONModel 绑定从 84000 行文件复制到 1800 行文件,并且效果很好。

问题:

我有一个用 Objective-C 编写的框架。该框架有 3 个依赖项(即CocoaLumberjackGoogle-IMA-iOS-SDKJSONModel

在我的框架内,我有一个这样定义的公共类:

广播.h

当我构建我的框架时,它工作得很好。当我将我的框架导入到一个 Objective-C 项目中时(并包含 JSONModel 框架,因为它是一个依赖项),它工作得很好。当我使用 CocoaPods 安装我的框架时,它工作得很好。

当我尝试使用Objective Sharpie为我的框架创建 C# 绑定(用于 Xamarin)时,问题出现了

当我跑的时候:

我得到了错误:Cannot find JSONModel.h

具体来说,它正在我的框架中寻找JSONModel.h 。这不是 CocoaLumberjack 或 Google IMA SDK 的问题,因为它们是严格的实现细节,而且我的公共标头都没有引用它们。然而,当谈到 JSONModel 时,它的接口实际上是我的公共 API 的一部分。

有没有办法将 JSONModel.h (和所有其他 JSONModel 标头)的副本放在我的输出Headers目录中?或者,以其他方式告诉Objective Sharpie 在多个框架中查找绑定?

更新

快速更新,因为在过去的一个小时里我一直在处理这个问题。通过告诉 Clang 在哪里可以找到并调整我的代码,我能够让 Objective Sharpie至少运行:JSONModel.h

广播.h

然后在运行 Objective Sharpie 时:

这工作得更好一点,但遇到了一个问题,给我留下了一个问题:

  • 在生成的绑定文件中,它typeof(JSONModel)在几个地方说,没有定义并抛出错误。我可以通过删除-scope参数来解决这个问题,但这会创建一个 84000 行长而不是 1800 行长的绑定文件,并且包括 AFNetworking、AVPlayer 等内容的绑定。
  • 我之前导入的原因<JSONModel/JSONModel.h>既是因为这是我一直看到导入 CocoaPods 依赖项的方式,也是因为它是自动完成推荐的。那么为什么导入<JSONModel.h>也同样有效呢?这会在未来破坏一些东西吗?

为了在不生成 84000 行绑定文件的情况下更正范围问题,我还尝试使用.or之类的范围,"$(pwd)"但没有任何效果。它要么创建了一个没有 JSONModel 定义的 1800 行文件,要么创建了一个包含所有内容定义的 84000 行文件

更新 2

虽然我仍然不完全理解 和 之间的区别<JSONModel/JSONModel.h><JSONModel.h>但我确实学到了一些东西:

  • 任何一个都允许我.framework直接从我的框架项目构建一个文件
  • 只有<JSONModel/JSONModel.h>当我尝试通过应用程序内的 CocoaPods 导入我的框架时才有效
  • <JSONModel.h>当我尝试使用 Objective Sharpie 创建 C# 绑定时才有效

这样就取消了该解决方案

0 投票
1 回答
232 浏览

ios - Sharpie 绑定错误:不支持的 clang 可用性平台:'macCatalyst'

我正在尝试使用以下命令将框架绑定到我的 Xamarin iOS 项目中:

我收到了这个错误:

我有最新的 Mac OS Catalina、最新的 XcCode 版本11.3.13.4.0Sharpie 版本。

有没有办法在不降级操作系统的情况下解决这个问题?

0 投票
0 回答
50 浏览

c# - 在 Xamarin 中将 iOS 框架与内部框架绑定

我正在尝试绑定一个 iOS 框架,其中包含另一个框架。

当我运行sharpie bind命令时,我得到模块'inner framework' not found 的错误。

我尝试提取内部框架并进行单独绑定并将生成的 dll 包含到父框架的绑定中。

我无法让它工作。有什么建议吗?

0 投票
1 回答
256 浏览

ios - Xamarins Sharpie pod 在搜索请求的 cocoapods 时停止

我正在尝试按照以下说明为 Braintree 支付网关进行 IOS Xamarin 绑定: https ://docs.microsoft.com/en-us/xamarin/cross-platform/macios/binding/objective-sharpie/examples/cocoapod 但是,当我运行 Sharpie pod init ios BraintreeDropIn 时,我到达“搜索请求的 CocoaPods ”行,然后似乎无限期地呆在那里,我尝试按照其他人的建议将 Pod 降级到 1.7.5,但这没有任何区别。有谁知道可能出了什么问题?Sharpie version = 3.4.0-c0f0e73 pod version = 1.7.5 挂了很久终于输出信息:error: Failed to run pod list

0 投票
0 回答
77 浏览

xamarin.ios - 如何在 Xamarin iOS 中符合协议

strong text我正在 Xamarin 中实现 iZettle 支付 SDK。我创建了绑定库并将所有头文件转换为 ApiDefintions。我坚持遵守 Xamarin 中的 iZettleSDKAuthorizationProvider 协议。

这是我的 APIDefinition.cs 文件代码;

简而言之,我希望 Xamarin ios 等效于以下代码;

如此处所示。所以任何人都可以帮助我,那就太好了。

0 投票
0 回答
50 浏览

ios - Xamarin IOS 绑定

我正在创建与 Pod 的绑定,运行 Sharpie 命令后,我经常收到错误,文件中找不到 Header。我打开后检查了文件,但标题已经存在。让我知道是否有人面临同样的问题。错误详情如下:-

'Realm/Realm.h' 文件未找到 #import <Realm/Realm.h> ^~~~~~~~~~~~~~~ /private/var/folders/y4/n93ks58x7vd1dl2fr7j9v6mw0000gn/T/com.xamarin .ObjectiveSharpie/11d3f185b30343fe978184fe0a7e4722.h:1:9:致命错误:无法构建模块“MatrixSDK”@import MatrixSDK;

0 投票
0 回答
131 浏览

c# - 类不能转换为 NSObject 类型的接口到 C# 绑定库 Xamarin IOS

我已经通过目标 C 框架创建了绑定库,有一个类在 Xamarin IOS 中扩展其他接口的 NsObject 类型(KsEvent),在转换过程中出错,无法将 KSMEvent 的类型转换为 KsEvent。

api定义:

Xamarin IOS:

** 错误:无法将 KSMEvent 类型转换为 KsEvent。**

0 投票
1 回答
26 浏览

objective-c - Xamarin 绑定 C 库参数不起作用(可变参数函数)

我需要使用 C 库,并且可以轻松地在模拟器上工作,但在 arm64 设备上只需要一些奇怪的技巧。问题是带有...(可变参数函数)的 C 函数不能将值正确地从 C# 传递到库。

这是 C 函数,带有...

我用 E_INFO() 检查值是否正确

方法 1 - 默认参数不起作用:

当我对 c 绑定使用以下默认参数表达式时,函数中打印的“arg”显示未知字符,当使用“val”时,函数崩溃。

方法 2 - 更精细的方法有效:

当我使用更精细的方法时,一切正常,通常在 x86_64 架构上,但对于 arm64 有一个奇怪的解决方法。以更精细的方法绑定表达式。

绑定适用于以下代码

如您所见,x86_64 正常工作以获取 C 库的值。但是 arm64 版本需要有 5 个空值,其他一半的值不会进入 C 库(我可以使用 C 函数中的 E_INFO 函数检查)。

任何人都知道如何使用参数或不使用 5 个前缀空值来正确获取此 Xamarin C 绑定吗?

源代码在github 上使用sphinxbase 的 c 库