AppStore IPv6-only审核被拒原因分析及解决方案-a
Apple关于IPV6规定
日前,苹果公司向开发者发出提醒,公司将会修改应用商店App Store的相关规定,所有IOS应用必须包含对IPv6-only标准的支持。据悉,该规定在6月1日生效,所有提交至苹果App Store的应用申请必须要兼容面向硬件识别和网络路由的最新互联网协议--IPv6-only标准。而苹果的这一举措也将有助于IPv6的加速普及。
1.只需要在苹果最新的系统上保证IPV6的兼容性即可。
2.NSURLConnection CFNetWork NSURLSession都是支持IPV6的在iOS9设备上。
3.AFNetworking,由于历史原因,应用代码基本上都深度引用了AFHTTPRequestOperation类,所以目前API网络请求均需要通过NSURLConnection发送出去,经过测试NSURLConnection在最新的iOS9系统上是支持IPV6的。
4.Reachability在程序中被大量应用判断网络状态,但是在里面却使用了IPV4专用的API,经过测试,在iOS9以上系统IPV4和IPV6网络环境均可使用,但在iOS8上IPV4和IPV6切换的时候无法监测网络状态的改变,可能是因为苹果在iOS8上还没有对IPV6进行相关的支持相关,但是这仍然满足苹果要求在最新系统版本上支持IPV6的需求,其实苹果在iOS9以上对zero Address进行了处理,Reachability在iOS9上可以支持IPV6和IPV4,但在iOS9一下存在bug,监测网络会有问题。
避免被拒的措施
- 使用网络通讯框架;
也就是是说推荐你使用 iOS SDK 自带的,构建于 socket 上层的网络通讯框架,或是第三方的网络通讯框架。这样,使用网络通讯框架的话,上面的第 2 条大体上是不用操心的。如果你使用的是第三方的网络通讯框架的话,一定记得询问该框架的开发商:“你们支持 IPv6 吗?”
作为网络通讯框架其中之一的 ProudNet™ 是支持 IPv6 的哟。自 2015 年 12 月的更新版本开始支持。ProudNet 的使用者如果要想支援 IPv6 的话,应该使用 2015 年 12 月版本,或更高的版本。
- 避免使用 IPv4 专用的 API;
如果你亲自编程 socket 层的话,记得不能使用 IPv4 专用 API。比如说,你不能使用如下这些 API (光是使用这些函数本身,是否会成为苹果方面拒绝通过应用审核的事由,目前还不清楚。反正 ProudNet 目前是全然不使用这些函数的)。
inet_addr()
inet_aton()
inet_lnaof()
inet_makeaddr()
inet_netof()
inet_network()
inet_ntoa()
inet_ntoa_r()
bindresvport()
getipv4sourcefilter()
setipv4sourcefilter()
如果要测试在 IPv6 的环境下是否运转正常,你需要构建 IPv6 only 的网络环境。方法有很多种。我们使用的是通过 Mac 机器的方法。避免使用硬编码地址(IP地址)
苹果使用的是“硬编码地址”这样的术语。不过这大体上只是对大众友好的简化说法。正确的学名其实应该叫 IP literal。比方说形如 “11.22.33.44” 这种啦。
另一方面,我们通常所说的 “hostname”,比方说“server1.mygame.com”这种,学名叫 FQDN (fully qualified domain name)。
你问,通过“硬编码地址”,也就是我们所说的 IP literal 连入服务器的话会有什么样的后果呢?一些 IPv6 网络下的客户端会连不上 IPv4 网络下的服务器(虽说 iOS 9.2 以后这个问题会部分解决,但是没法保证在所有 IPv6 网络下都没问题)。
反之亦然—客户端在 IPv4 下,服务器 IPv6。
至于连不上的原因吗,要从 NAT64 / DNS64 的联动关系说起。因为内容有点长,这里就不赘述了。
那么应该肿么办呢?乖乖地听从苹果大人所“指示”(?)的。通过 FQDN 而不是 IPv4 literal 的连入的情况下,服务器要能够接收。客户端连接服务器时则要使用 FQDN。举例说明上面的内容:
- 11.22.33.44 ==> 苹果会屏蔽你
- server.mygame.com ==> Ok
- 11:22:33:44:55:66:77:88 ==> 苹果会屏蔽你关于IPV6
随着互联网的迅速发展,各种联网设备总数的不断增加,传统的IPv4地址耗尽已经是可以预见的未来,因此,用于替代现行版本IP协议(IPv4)的下一代IP协议,IPv6技术已成为未来的主流IP技术。
据苹果在开发者网站发布的消息称,现有的很多应用已经兼容IPv6-only协议了,因为该协议已经得到NSURLSession和CFNetwork API的支持。使用IPv4 API或硬件编码IP地址的开发者需要修改应用代码才能兼容这项新政策。
除了苹果之外,整个行业也在慢慢接受IPv6-only协议,尤其是提供手机网络服务的运营商。随着各种连网设备总数的增加,以及新手机推出的速度越来越快,IPv4地址将迅速耗尽。作为后续技术,IPv6将在不远的将来完全取代IPv4。
AppStore IPv6-only审核被拒原因分析及解决方案-a的更多相关文章
- AppStore IPv6-only审核被拒原因分析及解决方案-b
自2016年6月1日起,苹果要求所有提交App Store的iOS应用必须支持IPv6-only环境,背景也是众所周知的,IPv4地址已基本分配完毕,同时IPv6比IPv4也更加高效,向IPv6过渡是 ...
- Oracle包被锁定的原因分析及解决方案
http://blog.csdn.net/jojo52013145/article/details/7470812 在数据库的开发过程中,经常碰到包.存储过程.函数无法编译或编译时会导致PL/SQL ...
- CMMI5级——原因分析及解决方案(Causal Analysis and Resolution)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010825142/article/details/15338085 聪明的人在出现问题的时候,除了 ...
- SQL查询速度慢的原因分析和解决方案
SQL查询速度慢的原因分析和解决方案 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建 ...
- IP访问频率限制不能用数组循环插入多个限制条件原因分析及解决方案
14.IP频率限制不能用数组循环插入多个限制条件原因分析及解决方案: define("RATE_LIMITING_ARR", array('3' => 3, '6' => ...
- hive on spark:return code 30041 Failed to create Spark client for Spark session原因分析及解决方案探寻
最近在Hive中使用Spark引擎进行执行时(set hive.execution.engine=spark),经常遇到return code 30041的报错,为了深入探究其原因,阅读了官方issu ...
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
转自:http://www.jianshu.com/p/89687f618837 原因分析 当我们在Android依赖库中使用switch-case语句访问资源ID时会报如下图所示的错误,报的错误 ...
- Beforeunload打点丢失原因分析及解决方案
淘宝的鱼相在 2012 年 8 月份发表了一篇文章,里面讲述了他们通过一个月的数据采集试验,得到的结果是:如果在浏览器的本页面刷新之前发送打点请求,各浏览器都有不同程度的点击丢失情况,具体点击丢失率统 ...
- 关于JVM内存溢出的原因分析及解决方案探讨
前言:JVM中除了程序计数器,其他的区域都有可能会发生内存溢出. 0.什么是内存溢出 当程序需要申请内存的时候,由于没有足够的内存,此时就会抛出OutOfMemoryError,这就是内存溢出. 1. ...
随机推荐
- monkey-----停止正在测试的monkey
第一步:adb shell ps | grep monkey:查找到正在测试的monkey包名 第二步:kill pid:删除查找出的monkey进程 以上完美的停止monkey测试
- 【转】AB实验设计思路及实验落地
这篇文章会讨论: 在什么情况下需要做 AB 实验 从产品/交互角度,如何设计一个实验 前端工程师如何打点 如何统计数据,并保证数据准确可信 如何分析实验数据,有哪些数据需要重点关注 附:如何搭建前端实 ...
- 神奇的Scala Macro之旅(二)- 一个实例
优化的日志方式 package macros_demo import scala.language.experimental.macrosimport org.slf4j._import scala. ...
- 最近面试 Java 后端开发的感受!
阅读本文大概需要 4.3 分钟. 首发:cnblogs.com/JavaArchitect/p/10011253.html 上周,密集面试了若干位Java后端候选人,工作经验在3到5年间.我的标准其实 ...
- numpy C语言源代码调试(三)
鉴于ddd过于简陋,希望找一个新一些的调试工具,看到有很多人推荐gdbgui,这是一个非常新的调试工具,前端使用浏览器,现在采用这一架构的软件越来越多,可以完全不必依赖庞大的gui类库,安装使用比较方 ...
- python接口自动化(二十三)--unittest断言——上(详解)
简介 在测试用例中,执行完测试用例后,最后一步是判断测试结果是 pass 还是 fail,自动化测试脚本里面一般把这种生成测试结果的方法称为断言(assert).用 unittest 组件测试用例的时 ...
- 为自己搭建一个分布式 IM(即时通讯) 系统
前言 大家新年快乐! 新的一年第一篇技术文章希望开个好头,所以元旦三天我也没怎么闲着,希望给大家带来一篇比较感兴趣的干货内容. 老读者应该还记得我在去年国庆节前分享过一篇<设计一个百万级的消息推 ...
- 适配器模式(Adapter Pattern)
适配器模式概述 定义:将一个类的接口转化成客户希望的另一个接口,适配器模式让那些接口不兼容的类可以一起工作.别名(包装器[Wrapper]模式) 它属于创建型模式的成员,何为创建型模式:就是关注如何将 ...
- css公共库——清除浮动
清除浮动是css的基础,但有时候会忘了一些最简单的东西 浮动因为在文档流之外,所以会造成父元素的坍塌.父元素之后的元素排版就会乱. 常用的方法是在浮动父元素中添加cf类,然后定义cf样式,并将其放在公 ...
- python+selenium 自动化测试实战
一.前言: 之前的文章说过, 要写一篇自动化实战的文章, 这段时间比较忙再加回家过11一直没有更新博客,今天整理一下实战项目的代码共大家学习.(注:项目是针对我们公司内部系统的测试,只能内部网络访问, ...