swift 升級引起的CocoaAsyncSocket 無法connect問題

background:

? ? ? ?最近公司代碼要求從swift3升級到swift5,語法問題so easy,問題是CocoaAsyncSocket 無法connect 的問題。

? ? ? ? server 端一切正常,連接到設定的address和port,client connect server 時,server 一直收不到connect 的回調,而client disconnect 回調, error info 是:

Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted" UserInfo={NSLocalizedDescription=Operation not permitted, NSLocalizedFailureReason=Error in connect() function}

網上找了半天,找不到合適的,直到一個帖子說了可能是entitlements設置引起的,于是我仔細關注了project里面entitlements的修改內容。

通過git 對比查看修改的內容,發現工程文件里,自動刪除了一下代碼:

CODE_SIGN_ENTITLEMENTS = xxxx.entitlements;

CODE_SIGN_IDENTITY = "Mac Developer";

CODE_SIGN_STYLE = Automatic;

COMBINE_HIDPI_IMAGES = YES;

DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";

DEVELOPMENT_TEAM = xxxxxxxxx;

關鍵在第一行,刪除了client 的entitlements,而這個文件是用于和其他外部工程或者其他target 溝通的文件,刪除了這個文件,可不就找不到外部target 了嗎

但是我并沒有手動改這個文件配置啊,但是明確是我就是改了entitleMents啊,所以我仔細對比這塊兒

這是以前的:


發現改之后也還是這樣,release client 的,debug 是client 對應finder 的entitlements,理論上這是不對的,理論上,debug socket 也是連不通的,但是卻找到了,可能是Xcode9的bug ,也可能是優化。

而用Xcode 10,升級到swift5之后,配置沒有改,但是peoject文件的修改內容就嚴格按照這個配置來了,所以dubug 就找不到client 的entitlements了,所以socekt連接不上。

修改方式是什么呢,是將bug 修改成和release 一致,這樣debug 也能找到entitlements,連接上socket了:


總結一下:

Xcode 9 雖然entitlements debug 下設置錯誤,但是內部不知道做了什么處理,找到了正確的entitlements。

升級到Xcode10.3 ,swift3 ? 升級到swift5, Xcode10 完全按照setting 來,所以刪除了debug下對應的entitlements設置,所以connect連接不上。解決辦法就是將debug 下entitlements設置正確,問題解決.

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容