iOS 适配ipv6
2016-08-08 本文已影响1253人
ShawnDu
博客地址已迁移到:https://devthinking.com
在App中适配
- 在传nodename的时候不要用ip地址,用域名;
- 检查工程中有没有用到以下api,这些只是针对ipv4处理的,有的话就删了:
inet_addr()
inet_aton()
inet_lnaof()
inet_makeaddr()
inet_netof()
inet_network()
inet_ntoa()
inet_ntoa_r()
bindresvport()
getipv4sourcefilter()
setipv4sourcefilter()
- 如果用到了以下ipv4的api,相应的ipv6也需要做处理:
AF_INET
PF_INET
struct in_addr
struct sockaddr_in
kDNSServiceProtocol_IPv4
- 在App中,如果用了AFN3.0以上,都支持了ipv6,但是有一点在AFNetworkReachabilityManager中,在manager的初始化方法中,判断的手机是否是大于9.0的系统,有些不对,原来代码是这样:
+ (instancetype)manager
{
#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
上面的代码应该改成这样,才会生效:
#if (TARGET_OS_IPHONE && NSFoundationVersionNumber > 1240) || (TARGET_OS_MAC && NSFoundationVersionNumber >= 1252)
服务器适配
如果你说在App端都适配了ipv6,并且自己用mac本搭建了ipv6热点测试通过,为什么应用审核还是被拒呢?看下面的解答。
- 用mac创建的热点和苹果review时用的真实的ipv6网络是不一样的;
- 需要检查服务器域名4A的支持。详细的问题,请看apple论坛IPv6 and App Review
, 检查4A的支持可以用google的toolbox dig. - 有关AAAA的文档,可以看wikipedia.