iOS异常弹窗溯源
业务接入我们的框架后,反馈一个问题:iOS首次安装启动时,会在业务的协议弹窗前触发一个系统弹窗(访问本地网络的权限)。即:如果有 App 要连接到本地网络上的设备 - 官方 Apple 支持 (中国)。
不太熟悉iOS,一开始看info.plist,以为是某个配置导致的。有些文章提到这个"Privacy - Local Network Usage Description",其实这个是自定义弹窗内容用的。
看到这篇文章:一个iOS系统弹窗引发的探索 - 掘金有所启发。并发现Tracy有一个sendto方法调用:
$ grep -rI "sendto"
./third_party/tracy/common/TracySocket.cpp: return sendto( m_sock, (const char*)data, len, MSG_NOSIGNAL, (sockaddr*)&addr, sizeof( addr ) );
Tracy由于涉及调试,确实会使用Socket。这里的问题是接入的同学对于构建脚本的设计有问题,Release时Tracy也会构建并由一个static变量触发初始化。
结果就是App首次启动时,在任何业务逻辑之前,先初始化Tracy,进而触发系统弹窗。
话说回来,这个玩意应该也会影响启动速度。开发流程还是太粗放了。。。。
这里有一个技巧,我并没有去看业务代码,而是试了下框架在iOS平台的Example,发现可以复现,就锁定是我们的问题。
一开始,并没有怀疑到框架上,因为从功能逻辑的角度,我们确实没必要访问本地网络。
如果不借助这个技巧,仅凭直觉,可能又推回业务的同学云排查了,不仅没有结果,而且浪费时间。