ReferenceError: Metadata for "GoogleMaps.GMSGeometryDistance" found but symbol not available at runtime

ReferenceError: Metadata for "GoogleMaps.GMSGeometryDistance" found but symbol not available at runtime

我在 NativeScript JavaScript 项目中使用 nativescript-google-maps-utils 插件来访问 GoogleMapsUtils 函数(GMSGeometryDistance、GMSGeometryInterpolate 和 GMSGeometryHeading),以便我可以遍历折线. Android 等效项在 Android 设备上工作正常,列出的 iOS 函数在 iOS 模拟器上工作,但在 iOS 设备上我得到异常,

ReferenceError: Metadata for "GoogleMaps.GMSGeometryDistance" found but symbol not available at runtime.

我已经追查了一天的大部分时间,但仍然没有任何线索;我欢迎任何见解。

[编辑]

值得一提的是,我已经完成了平台、挂钩和节点模块文件夹的常规删除并重新构建,错误没有改变。

这是触发错误的第一行代码:

let lineDistance = GMSGeometryDistance(latlngs[i], latlngs[i + 1]);

[编辑 2]

仍在追逐这个...我从 this issue that I need to create a file with a list of exported symbols, and this issue 收集到一些建议如何做到这一点,但我不明白它如何适用于这种情况。

也就是说,现在手头的问题是如何从 iOS GoogleMapsUtils 静态库中确定符号?这越来越成为 NativeScript 或 JavaScript.

的 iOS 和 Xcode 问题

[编辑 3]

唉...我确实使用我在下面提供的答案使这个工作正常,但现在同样的方法不再有效。不知道为什么:-(

[编辑 4]

我重新检查了上面引用的链接并包含了 STRIPFLAGS 选项,现在代码可以正常工作了。我修改了答案以包含此内容,并编辑 build.xcconfig 而不是项目文件。

经过一天的调查,我终于可以正常工作了。这是它所花费的。

  1. 导航到 /platforms/iOS/Pods/GoogleMaps/Maps/Frameworks/GoogleMaps.framework/

  2. 运行 nm --defined-only GoogleMaps | grep " T " | cut -f 3 -d' ' | egrep -v '^$|GoogleMaps'

  3. 注意符号的名称。在我的例子中,我需要的每一个都是函数名,前缀为下划线

  4. /app/App_Resources/iOS

    中创建文件 exportedSymbols.txt
  5. 将符号添加到文件中。在我的例子中,内容是:

    _GMSGeometryDistance
    _GMSGeometryHeading
    _GMSGeometryInterpolate

  6. 编辑文件app/App_Resources/iOS/build.xcconfig并添加这两行

    STRIPFLAGS=$(inherited) -s {PROJECT_DIR}/../../app/App_Resources/iOS/exportedSymbols.txt EXPORTED_SYMBOLS_FILE = ${PROJECT_DIR}/../../app/App_Resources/iOS/exportedSymbols.txt

到目前为止,这在我的 iOS 模拟器和设备测试中都有效。