问题:
前几天提交的新包审核被拒。原因是iOS 14系统,新增的本地网络权限。
具体如下(图片是盗用):
解决方案:
-
添加对应的描述文案
在项目对应的info.plist文件中添加权限为NSLocalNetworkUsageDescription的描述:
-
列举具体使用的服务列表
有些开发者已经遇到这个坑点了。只添加权限描述并不会通过审核。
需要在info.plist文件中添加服务列表:
Xcode12可能不一样,因为我自己并未升级,所以上面的只是我自己的项目配置。
下面是我盗的Xcode12的图:
解决坑点:
哪里用到了这个服务,怎么列举服务列表?
很多开发表示,我自己并未使用这个什么网络服务,这个提示莫名其妙。
根据我这边的项目情况猜测,这个权限应该是机器扫描到的。因为我的项目里只是存在对应的代码,但是并没有去使用。
要列举服务列表,就需要去项目里搜索对应的代码。
可以在Xcode里搜索关键词:._tcp 或 ._udp
也可以通过检查项目里哪些地方使用到了: NSNetService (这个类一般都是用来创建服务的),着重去看一下。
下面是我项目里用到的地方:
如果引入的地方是静态库怎么办?怎么搜索?
我这边项目还好,用到的地方正好是通过pod源码引入的。如果不幸你用到的是.a库,那就只能通过命令行来搜索了。
具体方式可以如下:
grep -r _tcp .
或者
find . -type f | grep -e ".a" -e ".framework" | xargs grep -s _tcp
更新
最近在删除项目里无用的代码,发现删除了上面说的那个库后仍然出现了本地网络权限弹窗。最终定位到,是因为使用了旧版本的高德SDK导致的。更新高德SDK即可。
通过这个印证了上面的说法有错误。这个权限不是被机器扫到的。虽然上面的解决方式是正确的。但是服务列表里的内容写的其实不对,只能说是用不太正确的方式侥幸解决了问题。