ios - 使用 iOS SDK 创建 NativeScript 插件会导致 'Undefined symbols for architecture' 错误

标签 ios nativescript nativescript-plugin

我正在尝试创建一个 NativeScript 插件,以便将蓝牙打印机的 iOS SDK 集成到 NativeScript 应用程序。

这是 SDK as Static Framework 的链接

我不断收到以下错误,army7 部分在全新安装插件后显示不同的值。

Undefined symbols for architecture armv7:
  "_CBCentralManagerScanOptionAllowDuplicatesKey", referenced from:
      -[RTBleService startScan:serviceArray:clear:] in RTPrinterSDK(RTBleService.o)
  "_OBJC_CLASS_$_CBCentralManager", referenced from:
      objc-class-ref in RTPrinterSDK(RTBleService.o)
  "_OBJC_CLASS_$_CBUUID", referenced from:
      objc-class-ref in RTPrinterSDK(RTBleService.o)
ld: symbol(s) not found for architecture armv7
note: Using new build systemnote: Planning buildnote: Constructing build description

除了尝试使用官方插件种子插件外,我最终做了以下根据我的研究应该已经足够的:

安装:

1) 在/app 目录下为插件文件创建了一个文件夹(该插件目前仅适用于该项目)。此文件夹具有以下结构:

/app/plugin/src/package.json   
/app/plugin/src/platforms/ios/RTPrinterSDK.framework  

RTPrinterSDK.framework 有两个文件夹,Headers(有 .h 文件)和 Modules(有 module.modulemap 文件)以及 Info.plistRTPrinterSDK.a 这两个文件。

2) 我通过运行 tns plugin add app/plugin/src 将插件添加到项目中

3) 我相信现在 tns run ios --bundle 应该使用插件在连接的设备上运行项目——尽管我还没有在应用程序上对插件做任何事情。

健全性检查:

1) lipo -info app/plugin/src/platforms/ios/RTPrinterSDK.framework/RTPrinterSDK 显示 fat 文件中的架构:/path-to-RTPrinterSDK 是: army7 i386 x64_64 arm64.

2) tns run ios --bundle 没有自定义插件在模拟器和真实设备中都有效

3) 为了以防万一,我也在一个全新的 --ts 项目上尝试过这个

4) SDK 附带了一个演示应用程序。虽然它不是 NativeScript 应用程序,但它是一个 Xcode 项目文件,我能够在相同的连接设备上成功运行它。

SDK 中有一条注释提到了 ble_serial.plist 文件。根据说明,我确信我需要将它集成到插件文件夹中的某个位置以访问蓝牙连接,但我不确定在哪里。鉴于错误指的是名称中带有 “Ble” 的模块,我担心可能存在关联。

请注意,我没有编写/准备 SDK。打印机的供应商提供了它。我只能访问它提供的内容。

我将非常感谢有关此问题的任何提示或反馈。

最佳答案

根据 NativeScript 社区的宝贵建议,我发现错误中的 CB 前缀指的是 CoreBluetooth

为了确保它已加载,我最终在 /app/plugin/src/platforms/ios/build.xcconfig 中创建了一个新文件,并向其中添加了以下行:

OTHER_LDFLAGS = $(inherited) - 框架“CoreBluetooth”

它现在可以在设备上编译和运行了。

关于ios - 使用 iOS SDK 创建 NativeScript 插件会导致 'Undefined symbols for architecture' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56692183/

相关文章:

ios - 使用 ImageView 与程序化 Segue 进行挑战

ios - Apple Pay 适用于模拟器,但不适用于设备

ios - 我如何构建错误的日期格式?

ios - 为什么 Swift 中的 stride 函数会这样工作?

webpack - ENOTEMPTY : directory not empty, rmdir

javascript - 当文件较大时,Nativescript saveToFile 速度很慢

angular - Nativescript:未知 URL 的 HTTP 失败响应

android - NativeScript for Android App 中的 Kiosk 模式

android - native 模块在 NativeScript 中无法正常工作