我正在尝试创建一个 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.plist 和 RTPrinterSDK.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/