iOS 上的 Cordova 地理围栏和 iBeacon 插件冲突

Posted

技术标签:

【中文标题】iOS 上的 Cordova 地理围栏和 iBeacon 插件冲突【英文标题】:Cordova Geofencing and iBeacon plugin conflict on iOS 【发布时间】:2015-11-23 23:27:03 【问题描述】:

我有一个在 Cordova 中构建的应用程序,运行 iBeacon 插件 (https://github.com/petermetz/cordova-plugin-ibeacon)。

我也在尝试让地理围栏工作(使用这个插件:https://github.com/cowbell/cordova-plugin-geofence)

ios (9.1) 中,如果我使用地理围栏或 iBeacons,该应用程序将正常工作,但如果我尝试同时使用这两者,当 iBeacon 插件开始监视某个区域时,它会崩溃。日志显示:

Process 736 stopped
* thread #1: tid = 0x8d0cf, 0x391ecc84 libsystem_kernel.dylib`__pthread_kill + 8, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
    frame #0: 0x391ecc84 libsystem_kernel.dylib`__pthread_kill + 8
libsystem_kernel.dylib`__pthread_kill:
->  0x391ecc84 <+8>:  blo    0x391ecc9c                ; <+32>
    0x391ecc88 <+12>: ldr    r12, [pc, #0x4]           ; <+24>
    0x391ecc8c <+16>: ldr    r12, [pc, r12]
    0x391ecc90 <+20>: b      0x391ecc98                ; <+28>

我什至不知道从哪里开始解决这个问题。有什么想法吗?

谢谢!

更新:

当我在 xCode 中运行而不是从命令行安装时,错误的日志输出显示如下:

无法将“CLBeaconRegion”(0x3bfc3fc4) 类型的值转换为“CLCircularRegion”(0x3bfc3f9c)。

这发生在 GeoFence 插件 (GeofencePlugin.swif) 的这个方法中:

    func locationManager(manager: CLLocationManager, didStartMonitoringForRegion region: CLRegion) 
        let lat = (region as! CLCircularRegion).center.latitude
        let lng = (region as! CLCircularRegion).center.longitude
        let radius = (region as! CLCircularRegion).radius

        log("Starting monitoring for region \(region) lat \(lat) lng \(lng) of radius \(radius)")
    

【问题讨论】:

嗨@Edward,我也有同样的问题。我想知道您是否找到了解决方案。谢谢! 【参考方案1】:

正如标题中提到的,这是由于两个库之间的冲突。我已经为 this issue with 打开了一个 pull request 修复程序,但该存储库上没有太多活动,

您也可以my fork for this plugin 来避免这个问题。

【讨论】:

以上是关于iOS 上的 Cordova 地理围栏和 iBeacon 插件冲突的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap (Cordova 2.9.0) iOS 上的地理定位

IOS 11上的Cordova插件地理位置超时

iOS 7.1 地理围栏和 iBeacons 停止工作

地理围栏和 iOS:检查我们是不是在一个区域内

关闭应用程序时的 iOS 7.1 CoreLocation 和地理围栏

地理围栏转换 PendingIntent 被 Android Oreo 上的操作系统阻止