针对苹果最新审核要求为应用兼容IPv6
在WWDC2015上苹果宣布iOS9将支持纯IPv6的网络服务。2016年初开始所有提交到App Store的应用必须支持IPv6。为确保现有的应用是兼容的,我们需要注意下面几点。
不建议使用底层的网络API
下图展示的蓝色部分的这些API都是不存在兼容性问题的,而我们平时自己用的包括那些第三方的网络库大部分都是用的这些API。
![](http://upload-images.jianshu.io/upload_images/841355-727c46f180e5dd23.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
大部分情况下,我们用高级的API完全能够实现我们的需求,而且高级API封装的很便于使用,很多底层的像适配IPv6的工作都已经帮我们做好了。而用底层API会有大量的工作要我们自己来做,更容易产生bug。但你如果确实需要用底层的POSIX socket API, 请参照这个RFC4038: Application Aspects of IPv6 Transition的指导。
不要用IP地址
比如下面这个API,nodename这个参数不要传IP地址,而应该用域名
![](http://upload-images.jianshu.io/upload_images/841355-70334bd00b2787ef.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这个方法在著名的Reachability中是用到的,我们常用的网络库AFNetworking就用了这个。所以用到的同学得好好查一下了,另外这个项目的作者几天前刚刚就这个问题有一个新的提交,不过最新的release版本中还没有加进去,可以点下面链接先去看看他都改了哪些地方。
Added support for IPv6 to Reachability #3174
检查不兼容IPv6的代码
搜一下工程里有没有下面的这些API,这些都是只针对IPv4做处理的,有的话就删了。
inet_addr()
inet_aton()
inet_lnaof()
inet_makeaddr()
inet_netof()
inet_network()
inet_ntoa()
inet_ntoa_r()
bindresvport()
getipv4sourcefilter()
setipv4sourcefilter()
如果用到了下面左边的这些IPv4的类型,那么它们相应的IPv6类型也需要做处理
![](http://upload-images.jianshu.io/upload_images/841355-dd37905d642ca9bd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
本地搭建IPv6测试环境
最后我们来搭一个IPv6的测试环境吧,你所需要的就是一台用非Wi-Fi的方式上网的Mac电脑。
我们的要做的其实就是用Mac做一个热点,然后用iPhone连接这个Wi-Fi,听起来很容易,我相信大家在公司就是这么干的吧。
区别是这次我们产生的是一个本地的IPv6 DNS64/NAT64网络,这项功能是OS X 10.11新加的。和我们以前开启热点方式不一样的地方在于,我们在“System Preferences”界面选中“Sharing”的同时,要按住“Option”键。
![](http://upload-images.jianshu.io/upload_images/841355-bd2a25d779153e4c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
之后在“Sharing”界面中,我们会看到和之前不一样的地方,就是红框所标的地方,多了一个叫“Create NAT64 Network”的选框,选中它。
![](http://upload-images.jianshu.io/upload_images/841355-8e5aa1eac3c24a8d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
之后就是按照正常的创建热点的流程走完就行了。
现在我们用iPhone连接上这个刚创建好的热点就可以测试了,注意此时要把iPhone设成飞行模式,以保证只用Wi-Fi上网。
原文链接:http://www.jianshu.com/p/69ed4489762c
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关文章
- 解决“只能通过Chrome网上应用商店安装该程序”的方法
- 非官方谷歌地图 iOS 应用遭苹果下架
- Electron,可以将web网页程序包装成桌面应用
- 苹果开发——Xcode证书生成、设置及应用
- 设计模式的C语言应用-非典型模式-第十章
- 深度学习 | 如何开发、部署 Serverless 应用?
- 数据挖掘时功能和一个聚类分析应用案例
- maven配置jib-maven-plugin插件构建java应用docker镜像
- 【BSP视频教程】STM32H7视频教程第9期:STM32H7的GPIO专题,通过驱动源码,参考手册,数据手册应用笔记系统学习GPIO知识点(2022-03-06)
- 苹果应用 Windows 申请 普通证书 和Push 证书 Hbuilder 个推
- 关于 SAP Spartacus Shell App 客户应用的调试
- 如何调试SAP CRM产品主数据应用后台ABAP端抛出的错误消息
- 在 SAPGUI 里使用 ABAP 报表上传 SAP UI5 应用到 ABAP 服务器试读版
- SAP UI5 应用开发教程之七十六 - 如何实现 SAP UI5 的 Lazy Loading(延迟加载,懒加载)试读版
- SAP CRM Fiori应用My Task的前台优化
- DL之VGGNet:VGGNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- Repractise基础篇:Web应用开发七日谈
- 《TPM原理及应用指南》学习 —— 平台配置寄存器0
- Python - Opencv应用实例之头发自动分割、计数、特征统计智能分析系统