PS:这是WWDC2017的新功能,iOS11以上,Xcode9这是刚性要求。
步骤:
1.先将手机连接上 Xcode ,打开 Xcode 菜单:Windows->Device and Simulators。找到连接上的设备,把Connect via network选项打勾。
2.将 iPhone 和 Mac 连接同一个 WiFi, 即连接同一个网络.
断开 iPhone 和 Mac 的连接
4.在左侧的设备列表中选中你的 iPhone 设备,右键会d出一个菜单,选择 Connect via IP Address..,如图一:
图一.png
5.在新的对话框中填写手机连接网络的 IP 地址,点击 Connect ,如图二:
图二.png
6.连接后,在你的iPhone 后面会出现一个网络的图标,表示连接成功,下面可以真机调试了.
图三.png
大功告成!!
在iOS 14系统中苹果新增加了本地网络的授权,本地网络(Local Network)是在当app使用Bonjour服务或者访问本地局域网时需要用户授权,如:Network.framework(NWBrowser,NWListener.Service)
Foundation(NetService)
MultipeerConnectivity(蓝牙)
Dnssd(发现,发布和解析局域网或广域网上的网络服务)
Bonjour主要做本地通信和智能交互的。
通常我们是通过 NSNetService 和 NSNetServiceBrowser 来使用 Bonjour 的,前者用于建立与发布 service,后者用于监听查询网络上的 service。
在我们的项目中因为使用了第三方KTVCocoaHTTPServer,在查看其中源码发现这个库中使用了NSNetService:
因此在用户第一次启动项目是会d出本地网络授权的提示。
验证环境:
iPad iOS 14
Xcode 11
通过把本地网路权限关闭去验证是否对项目有影响:
1、我们项目之所以会提示本地网络授权是因为KTVHTTPCache依赖于KTVCocoaHTTPServer,是因为KTVHTTPCache使用的音视频缓存方案:本地实现http service。
在iOS本地开启Local Server服务,然后使用播放控件请求本地Local Server服务,本地的服务再不断请求视频地址获取视频流,本地服务请求的过程中把视频缓存到本地,大体的思路是这样的。而实现loacl Service要基于Bonjour库,通过 Bonjour,一个应用程序 publish 一个网络服务 service,然后网络中的其他程序就能自动发现这个 service,从而可以向这个 service 查询其 ip 和 port,然后通过获得的 ip 和 port 建立 socket 链接进行通信。通常我们是通过 NSNetService 和 NSNetServiceBrowser 来使用 Bonjour 的,前者用于建立与发布 service,后者用于监听查询网络上的 service,因此在iOS14设备上边提示了本地网路授权。
2、为了验证关闭本地网络授权是否会对项目有所影响,先找到KTVHTTPCache库在项目中的缓存目录:tmp->KTVHTTPCache,最新安装的app并没有任何缓存,然后运行app,播放视频再次查看缓存目录下有了视频缓存,目前调研结果是关闭本地网络权限并不会对我们项目产生影响。
使用另外一种方案:
使用IOS原生API ,使用 AVAssetResourceLoader,在不改变 AVPlayer API 的情况下,对播放的音视频进行缓存。
这种方案只能是使用AVPlayer才可以,使用第三方播放器除非它也暴露出了类似于AVAssetResourceLoader这样的协议。
相关三方很多 VIMediaCache https://github.com/vitoziv/VIMediaCache
这种方案测试不会提示本地网络授权管理
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)