ios map:zero map Length edge on polygon boundary

ios:15.0.1
xcode:13.0

在苹果地图页面手势缩放时,会显示:

[VKDefault] Zero Length edge on polygon boundary

然后多次反复缩放,一直触发这个日志,然后系统就会提示内存泄露 memory leak,然后崩溃。

==14901==ERROR: AddressSanitizer: allocator is out of memory trying to allocate 0x110 bytes
==14901==FATAL: AddressSanitizer: internal allocator is out of memory trying to allocate 0x50 bytes
warning: could not execute support code to read Objective-C class data in the process. This may reduce the quality of type information available.
AddressSanitizer report breakpoint hit. Use 'thread info -s' to get extended information about the report.

暂时没有办法,只能等新版本再观察了,如果有解决方案的朋友希望留言,谢谢

ios15.0.1真机调试支持包

Failed to prepare device for development

这个是xcode和ios设备的版本不匹配导致。需要更新xcode的设备支持包,

以下为例子,因为系统是不断升级的,具体自己对照下:

xcode中如何抑制告警 Double-quoted include in framework header, expected angle-bracketed instead

问题

编译时会有大量类似“Double-quoted include in framework header, expected angle-bracketed instead”的告警,从内容我们理解是双引号和角括号的问题,如果我们不希望提示,该如何做?

solution

先从左侧project 栏选中项目,然后进入到 Build Settings ,然后找到 Quoted Include In Framework Header,然后选 No

beginBackgroundTaskWithExpirationHandler 告警

xcode 出现类似的 log:

Background Task 139 ("xxx"), was created over 30 seconds ago. In applications running in the background, this creates a risk of termination. Remember to call UIApplication.endBackgroundTask(_:) for your task in a timely manner to avoid this.

原因:
由于IOS sdk进行了更新,导致beginBackgroundTaskWithExpirationHandler 没有进行正确的调用,参考:

https://stackoverflow.com/questions/10319643/proper-use-of-beginbackgroundtaskwithexpirationhandler

正确调用方式参考代码:

- (void) doUpdate 
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        [self beginBackgroundUpdateTask];

        NSURLResponse * response = nil;
        NSError  * error = nil;
        NSData * responseData = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error];

        // Do something with the result

        [self endBackgroundUpdateTask];
    });
}
- (void) beginBackgroundUpdateTask
{
    self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [self endBackgroundUpdateTask];
    }];
}

- (void) endBackgroundUpdateTask
{
    [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
    self.backgroundUpdateTask = UIBackgroundTaskInvalid;
}

注意以上代码只是告诉你begin和end配对调用的使用方式,具体代码的细节问题,要根据你自己的工程进行调整。

关于IOS后台socket长连接的问题

1. 进程退到后体后,只有3-10的时间,如果没有进一步处理,处于功耗考虑,socket就会被系统关闭。 2. ios8后,允许后台,ios8之前的版本,只能通过设置后台模式 Required background modes来实现,但如果本身没有voip功能,苹果审查会遭拒。 ①打开info.plist,添加下面的键值对: Required background modes = App provides Voice over IP services ②配置XMPPStream的enableBackgroundingOnSocket属性为YES: _xmppStream.enableBackgroundingOnSocket = YES; 3. 参考 http://my.oschina.net/bankofchina/blog/281233 voip的方法,理论上定位消息也可以实现 4. 网上大段都是voip的例子,但按照苹果的审查规范,用voip实现后台keepalive 而没有实现voip是会被拒的。 综上所述,ios8以后,直接支持后台。ios8以前的,理论上gps位置信息也是可以在后台触发,从而通过策略实现长连接的,目前没有看到验证的例子,可以在这个方向下尝试下,毕竟所有的app都是需要位置服务器的,不属于伪造服务