FTDI D2XX API в C работает на консоли командной строки, но всегда возвращает ноль в приложении, построенном с помощью программирования Xcode и Swift на macOS - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь создать приложение macOS на masOS для связи с устройством FTDI D2XX. Я использовал gcc для компиляции простого консольного приложения с кодом C, и оно хорошо работает и позволяет получить ожидаемое количество устройств. Но когда я попытался импортировать FTDI в Xcode и создал приложение с помощью Swift 5. Приложение может быть успешно скомпилировано и выполнено, но оно всегда возвращает 0 для количества устройств FTDI. Я попытался использовать два метода для импорта статической библиотеки FTDI D2XX (ftd2xx.a) в Xcode. Но оба они имеют одинаковые результаты.

  1. Создана оболочка C и заголовок моста для вызова FTDI D2XX API
  2. Создан модуль и используется «import xxx»

Код C для вызова API FTDI D2XX:

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

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

     return 0;
}

Когда вызывается FT_CreateDeviceInfoList, он возвращает FT_OK в ftStatus. Но numDevs всегда равен нулю (он должен получить 2 в моей настройке). Я думаю, что драйвер FTDI D2XX должен быть в порядке в моем MacBookPro, потому что он хорошо работает в консоли командной строки. Итак, мне интересно, есть ли разница в вызове API FTDI между консолью командной строки и приложением с графическим интерфейсом. Я уверен, что API-интерфейс FTDI правильно вызывается в приложении с графическим интерфейсом.

Спасибо!

1 Ответ

0 голосов
/ 30 октября 2019

Я нашел в macOS GUI App, системный ресурс защищен. Мне нужно включить возможность доступа через USB в «Песочнице приложения», чтобы использовать API доступа через USB. Песочница приложения появляется в области Подписи и возможностей XCode, открывая дополнительные элементы управления для настройки возможности. USB access in App Sandbox

...