swift - C 语言的 FTDI D2XX API 在命令行控制台上工作,但在 macOS 上由 Xcode 和 Swift 编程构建的应用程序中始终返回零

标签 swift xcode macos swift5 ftdi

我正在尝试在 masOS 上构建 macOS 应用程序以与 FTDI D2XX 设备进行通信。 我使用 gcc 用 C 代码编译了一个简单的控制台应用程序,它运行良好并获得了预期的设备数量。 但是,当我尝试将 FTDI 导入 Xcode 并使用 Swift 5 构建应用程序时。应用程序可以成功构建并执行,但 FTDI 设备计数始终返回 0。 我尝试使用两种方法将 FTDI D2XX 静态库(ftd2xx.a)导入 Xcode。但两者的结果是相同的。

  1. 创建了用于调用 FTDI D2XX API 的 C 包装器和桥接 header
  2. 创建模块并使用“import xxx”

调用 FTDI D2XX API 的 C 代码是:

int queryDeviceCount(void)
{
     FT_STATUS         ftStatus;
     DWORD             numDevs = 999;

     ftStatus = FT_CreateDeviceInfoList(&numDevs);
     if (ftStatus == FT_OK) {
           return numDevs;
     }

     return 0;
}

当调用 FT_CreateDeviceInfoList 时,它在 ftStatus 中返回 FT_OK。但 numDevs 始终为零(在我的设置中应该为 2)。 我认为 FTDI D2XX 驱动程序在我的 MacBookPro 中应该没问题,因为它在命令行控制台中运行良好。 所以,我想知道在命令行控制台和 GUI 应用程序之间调用 FTDI API 是否有任何区别。我非常确定 FTDI API 在 GUI 应用程序中被正确调用。

谢谢!

最佳答案

我发现在macOS GUI App中,系统资源受到保护。我需要在“App Sandbox”中启用USB访问功能才能使用USB访问API。 应用程序沙箱出现在 Xcode 的“签名和功能” Pane 中,显示用于配置功能的其他控件。 USB access in App Sandbox

关于swift - C 语言的 FTDI D2XX API 在命令行控制台上工作,但在 macOS 上由 Xcode 和 Swift 编程构建的应用程序中始终返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58538912/

相关文章:

swift - SWRevealController 以编程方式

objective-c - UIPanRecognizer 不起作用。我的观点从未重绘

IOS:按设备语言的日期格式

linux - 当我使用 ipv6 主机名时,ssh 连接在 1m 后被远程关闭

objective-c - OS X Cocoa - 如何检测触控板缩放手势?

ios - NSTask 不适用于具有特殊字符的文件路径

ios - 以编程方式设置 IOS 辅助功能颜色反转

选择随机数的快速概率?

json - SwiftyJSON - 无法解析 Json

swift - 尝试设置文本字段占位符、段 uiview 时出现 nil 错误