苹果应用商店拒绝不支援 IPv6 的应用的解决方法

新闻链接:
http://www.internetsociety.org/deploy360/blog/2015/06/apple-will-require-ipv6-support-for-all-ios-9-apps/

cocoachina上的讨论链接:
http://www.cocoachina.com/bbs/read.php?tid=458416

原文如下:
苹果应用商店拒绝不支援 IPv6 的应用的解决方法

written by: imays
translated by: coolspeed (weibo.com/coolspeed)

大家新年快乐!

话说这苹果是从新年第一天起就开始了恐怖活动啊……虽然是去年已经预告了的恐怖活动……—那就是“你们的应用必须支援 IPv6,不然的话就拒绝通过审核,嘿嘿”

直奔主题。如果不想被拒,你应该这样做才行:

  1. 使用网络通讯框架;
  2. 避免使用 IPv4 专用的 API;
  3. 避免使用硬编码地址。

来源:点击链接跳转

现在让我们来逐条展开:


  1. 使用网络通讯框架;

也就是是说推荐你使用 iOS SDK 自带的,构建于 socket 上层的网络通讯框架,或是第三方的网络通讯框架。这样,使用网络通讯框架的话,上面的第 2 条大体上是不用操心的。如果你使用的是第三方的网络通讯框架的话,一定记得询问该框架的开发商:“你们支援 IPv6 吗?”

作为网络通讯框架其中之一的 ProudNet™ 是支持 IPv6 的哟。自 2015 年 12 月的更新版本开始支持。ProudNet 的使用者如果要想支援 IPv6 的话,应该使用 2015 年 12 月版本,或更高的版本。


  1. 避免使用 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 机器的方法。


  1. 避免使用硬编码地址。

苹果使用的是“硬编码地址”这样的术语。不过这大体上只是对大众友好的简化说法。正确的学名其实应该叫 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 ==> 苹果会屏蔽你

运维人员则要对每台服务器设置 DNS 使每台机器均有 FQDN 是吧?客户端方面则要在连入服务器时使用 FQDN 而不是 IP literal 是吧。

如果现阶段对每台机器赋予 FQDN 比较困难的话,ProudNet 提供如下的的应急方案。

连入基于 ProudNet 的服务器时使用 IP literal,并额外输入另一台 IPv4 下的服务器 X 的FQDN,就行啦。服务器 X 并不会真的连入,只是作为 DNS 检索对象,所以请放心。有了这个,就可以光用 IPv4 literal 也能连入服务器啦,虽然不能保证 100% 管用 [1]。

CNetClient* nc = CNetClient::Create();
p.m_serverIP = "11.22.33.44";
p.m_publicDomainName1 = "www.nettention.com";
p.m_publicDomainName2 = "www.baidu.com";
nc->Connect(p);

(C#也是可以的,这里不再赘述)

为什么光用 IPv4 literal 也能连上呢?因为实现了 NAT64 的“地址组合算法”。这个说来也比较长,这里也是略过 ^^

不管怎么说,使用上述 API 始终只是缓兵之计,应急措施。要彻底解决的话还是要听从苹果大人“指示”(?)的那样子,“”。


番外:等到 IPv6 大量普及了以后,路由器是不是就可以消失了?

如果 IPv6 大量普及了的话,路由器“在理论上”确实可以扔进历史的回收站了。路由器本身就是用来解决互联网地址总数不够用这个问题的其中一种方法而已。

但是。作为对每个 IP 地址明码标价,作为商品出售的网络提供商来说,即使是 IPv6,奸商们也不大可能会轻轻松松送你 IP 地址的。那么设置路由器的这种事儿也就不可避免啦。对路由器这块比较强大的 ProudNet 也会继续有存在的必要性的。


那祝编程愉快~


2016.7.19
转载上面的文章时,IPV6的新规还没有正式执行,并且到目前为止,已经提交了多次审核,并且都没有发生过问题;
不过最近一次提审被苹果拒了,提示在登录时网络故障;重复提交一次,结果还是相同的问题被打回;
(这个问题很多人应该都遇见过,在本地进行IPV6环境测试,都OK的,但是送到苹果审核就连不上网络)
我的解决方法是:在被拒绝的通知下直接回回复自己测试ok的,并附上视频片段;
结果第二天还真的通过了。这说明,苹果那边还是会尽量协助开发者的。

另外,在网上收集了一些相关的讨论:

阿里云技术论坛:
https://bbs.aliyun.com/read/284699.html?spm=5176.bbsr284699.0.0.yehNue

来自cocoachina上的讨论:
http://www.cocoachina.com/bbs/read.php?tid-1684570-page-1.html

[1]: 在包括 Mac 机器在内的部分客户端 IPv6 路由器下正常工作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,123评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,031评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,723评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,357评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,412评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,760评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,904评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,672评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,118评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,456评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,599评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,264评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,857评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,731评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,956评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,286评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,465评论 2 348

推荐阅读更多精彩内容