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
而不是项目文件。
经过一天的调查,我终于可以正常工作了。这是它所花费的。
导航到 /platforms/iOS/Pods/GoogleMaps/Maps/Frameworks/GoogleMaps.framework/
运行 nm --defined-only GoogleMaps | grep " T " | cut -f 3 -d' ' | egrep -v '^$|GoogleMaps'
注意符号的名称。在我的例子中,我需要的每一个都是函数名,前缀为下划线
在 /app/App_Resources/iOS
中创建文件 exportedSymbols.txt
将符号添加到文件中。在我的例子中,内容是:
_GMSGeometryDistance
_GMSGeometryHeading
_GMSGeometryInterpolate
编辑文件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 模拟器和设备测试中都有效。
我在 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
而不是项目文件。
经过一天的调查,我终于可以正常工作了。这是它所花费的。
导航到
/platforms/iOS/Pods/GoogleMaps/Maps/Frameworks/GoogleMaps.framework/
运行
nm --defined-only GoogleMaps | grep " T " | cut -f 3 -d' ' | egrep -v '^$|GoogleMaps'
注意符号的名称。在我的例子中,我需要的每一个都是函数名,前缀为下划线
在
中创建文件/app/App_Resources/iOS
exportedSymbols.txt
将符号添加到文件中。在我的例子中,内容是:
_GMSGeometryDistance
_GMSGeometryHeading
_GMSGeometryInterpolate
编辑文件
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 模拟器和设备测试中都有效。