ios14.5 使用 GCDAsyncUdpSocket 發(fā)送組播消息報錯"No route to host"的解決

純手工打,記錄解決問題的方案

蘋果手機升級到ios14.5系統(tǒng)后,使用GCDAsyncUdpSocke發(fā)送組播消息的時候,發(fā)現(xiàn)報錯了,

Error Domain=NSPOSIXErrorDomain Code=65 "No route to host" UserInfo={NSLocalizedDescription=No route to host, NSLocalizedFailureReason=Error in send() function.}

網(wǎng)上也找過No route to host的解決方案,有別的人也遇到了相同的問題,也有很少一部分斷斷續(xù)續(xù)的解決方案,但是本人對socket理解有限,基本看不怎么懂,所以只能自己一邊采坑一邊到處找,經(jīng)過一段時間的摸索,終于成功解決了問題,為了能給用樣在采坑的朋友一些經(jīng)驗,所以用最通俗的語言做一下記錄。

說明:以下的操作也許會有遺漏一些邊角的配置(因為不知道,僅僅是個人理解),但是至少能解決問題了。

一. 問題產(chǎn)生原因:

ios14開始對權限增加了控制,對socket的組播也在設備端增加了權限,然后延遲了幾個版本,在ios14.5(可能14.4.1就開始了)開始正式使用這個權限了,所以之前沒做過處理的app,在14.5開始就報錯了。

這里要區(qū)別對待,對于socket單播,點對點發(fā)送消息的app,是沒有影響的,能正常發(fā)消息,接收消息。

對于socket組播,如果要發(fā)送udp組播消息,在發(fā)送消息的時候 send() 調(diào)用的時候,直接報錯,并且調(diào)用socketClose的方法

多以要解決的就是發(fā)送組播的時候的問題

二.解決方案

1.向蘋果申請組播權限:https://developer.apple.com/contact/request/networking-multicast

大概需要3天左右,成功后會有郵件返回

2.申請成功后,在開發(fā)者賬號中,對appid進行編輯,拉倒最下面會多一個Additional Capabilities的選項,將 Multicast Networking 打鉤

截屏2021-06-02 下午4.03.22.png

3.在你app的的xxxx.entitlements配置文件中添加com.apple.developer.networking.multicast的布爾值為yes

截屏2021-06-02 下午4.05.03.png

然后,真機運行,ok不報錯了,能收發(fā)組播消息了

另外:不要忘記ios14.0就需要添加本地網(wǎng)絡的權限 Privacy - Local Network Usage Description

參考:https://developer.apple.com/forums/thread/663271

里面的終端運行2個命令,不知道怎么搞,沒弄,但是卻不影響結果,不知道不弄命令有沒有影響。

有幫助的話就點贊吧,哈哈

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容