关于Local Network(本地网络)权限审核被拒的解决方案

问题:

前几天提交的新包审核被拒。原因是iOS 14系统,新增的本地网络权限
具体如下(图片是盗用):

image.png
至于为什么新增了这个权限,以及这个权限带给用户的意义,这个文章写的很好。传送门:https://sspai.com/post/61223

解决方案:

  • 添加对应的描述文案
    在项目对应的info.plist文件中添加权限为NSLocalNetworkUsageDescription的描述:
    image.png
  • 列举具体使用的服务列表
    有些开发者已经遇到这个坑点了。只添加权限描述并不会通过审核。
    需要在info.plist文件中添加服务列表:
    image.png

Xcode12可能不一样,因为我自己并未升级,所以上面的只是我自己的项目配置。
下面是我盗的Xcode12的图:


image.png

解决坑点:

哪里用到了这个服务,怎么列举服务列表?

很多开发表示,我自己并未使用这个什么网络服务,这个提示莫名其妙。
根据我这边的项目情况猜测,这个权限应该是机器扫描到的。因为我的项目里只是存在对应的代码,但是并没有去使用。

要列举服务列表,就需要去项目里搜索对应的代码。
可以在Xcode里搜索关键词:._tcp._udp
也可以通过检查项目里哪些地方使用到了: NSNetService (这个类一般都是用来创建服务的),着重去看一下。

下面是我项目里用到的地方:

image.png

如果引入的地方是静态库怎么办?怎么搜索?

我这边项目还好,用到的地方正好是通过pod源码引入的。如果不幸你用到的是.a库,那就只能通过命令行来搜索了。
具体方式可以如下:
grep -r _tcp .
或者
find . -type f | grep -e ".a" -e ".framework" | xargs grep -s _tcp

更新

最近在删除项目里无用的代码,发现删除了上面说的那个库后仍然出现了本地网络权限弹窗。最终定位到,是因为使用了旧版本的高德SDK导致的。更新高德SDK即可。

通过这个印证了上面的说法有错误。这个权限不是被机器扫到的。虽然上面的解决方式是正确的。但是服务列表里的内容写的其实不对,只能说是用不太正确的方式侥幸解决了问题。

你可能感兴趣的:(关于Local Network(本地网络)权限审核被拒的解决方案)