最近苹果爸爸又推了一项规范,没法只能跟着走,记录一下步骤以及遇到的问题,仅针对Quick3.3.
-
替换curl静态库文件,直接替换
external/
下面的curl
文件夹即可,注意在里面的prebuilt/ios下
,多了2个文件:libssl.a
,libcryto.a
,这2个文件也需要拖进工程里引用. -
在iOS工程下移除
quick-src/extra/crypto/md5
这个文件夹的引用 -
将lua代码中的
framework/cc/net/SocketTCP.lua
文件修改,将self.tcp = socket.tcp()
修改为如下代码:local isipv6_only = false local addrinfo, err = socket.dns.getaddrinfo(self.host); for i,v in ipairs(addrinfo) do if v.family == "inet6" then isipv6_only = true; break; end end if isipv6_only then self.tcp = socket.tcp6() else self.tcp = socket.tcp() end
如果是个纯净工程的话,完成上述步骤,应该是已经支持ipv6 only了.
不过正常的游戏工程中,通常还会接入一些第三方sdk,需要保证这些sdk也支持ipv6 only,同时还有些sdk可能会对更新过的静态库产生影响,比如我遇到的,某语音sdk,在更换了引擎的curl库之后,竟然会导致curl库在请求一开始就crash(现在想想,估计是他们的sdk也打包了curl造成的.),完全是后面一步步重新从新工程接入时才逐步排查到这个错误,浪费了大量时间,特此笔记.
2016.09.16 Update:
前阵子提交的包又因为ipv6的问题被拒绝回来了,初步分析推测,估计是苹果总部升级了网络设备导致的,举个栗子,之前苹果的审核人员,应该是和我们本地测试一样,通过电脑网线分享出一个NAT64
的网络,然后用手机连接这个WIFI进行测试,这样的做法.**如果本地路由器不支持ipv6的话,实际通过路由器发出去的请求,还是个正常的ipv4的请求.然而如果是个支持ipv6的路由器,会直接请求ipv6的地址,当DNS服务器解析不了ipv6地址,即没有AAAA记录时,将导致这个请求失败.**换言之,苹果文档里提供的方法,其实只能用来测试手机使用的那些网络请求库,是否支持ipv6.解决方法也很简单,暂时我们的解决方案就是在服务器开启ipv6,获取到ipv6地址,然后在DNS解析服务上,将该地址添加为AAAA记录.