美文网首页
swift 升级引起的CocoaAsyncSocket 无法co

swift 升级引起的CocoaAsyncSocket 无法co

作者: developer_cp3 | 来源:发表于2019-10-21 11:03 被阅读0次

    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设置正确,问题解决.

    相关文章

      网友评论

          本文标题:swift 升级引起的CocoaAsyncSocket 无法co

          本文链接:https://www.haomeiwen.com/subject/slgzmctx.html