Xamarin iOS IPv6 App Store拒绝

我们一直在构建一个关于Client – Server App的iOS应用程序。 我们在iOS应用程序中使用Xamarin的SQL连接和WCF Web服务。

SQL连接代码:

String ips = "10.0.0.1" ; //Example. SqlConnection con = new SqlConnection(@"Data Source=" + ips + "; initial Catalog="x";user id =y;password = z;"); 

Apple决定在iOS9上只使用ipv6,因此他们发布了一份关于IPv6兼容性的文档–IPv6文档

Xamarin也发布了一篇关于此问题的博客文章 – 让您的iOS应用程序支持IPv6

我阅读了所有这些文件,但我无法摆脱这种“商店拒绝”问题。

我想告诉你我的最后一次尝试: (ipv4 to ipv6)

 string input = "10.0.0.1"; string ips = ""; IPAddress address; if (IPAddress.TryParse(deviceIP, out address)) { switch (address.AddressFamily) { case System.Net.Sockets.AddressFamily.InterNetwork: // we have IPv4 ips = input; break; case System.Net.Sockets.AddressFamily.InterNetworkV6: // we have IPv6 IPAddress ip = IPAddress.Parse(input).MapToIPv6(); ips = "[" + ip.ToString() + "]"; break; default: // break; } } 

我使用了Xamarin博客文章中描述的MapToIPv6()函数,但我的应用程序再次被Apple拒绝。

我们的应用程序在IPv4上运行良好(Apple也这样说)。 当Apple工程师关闭ipv4并且只使用ipv6时,我们的应用程序无法访问主机。

请帮我解决这个问题。

平台:在Windows 10 + Mac OS X El-Capitan上使用Xamarin的Visual Studio 2015

服务器:仅限ON IPv4。

评论中已经有一些有用的东西,但我认为你的主要问题是你有相反的IPv4到IPv6映射。 您将原样保留IPv4地址并将IPv6地址映射到IPv6。

看一下固定版本:

 string input = "10.0.0.0"; string ips = ""; IPAddress address; if (IPAddress.TryParse(input, out address)) { switch (address.AddressFamily) { case System.Net.Sockets.AddressFamily.InterNetwork: // we have IPv4, map it to IPv6 IPAddress ip = IPAddress.Parse(input).MapToIPv6(); ips = ip.ToString(); break; case System.Net.Sockets.AddressFamily.InterNetworkV6: // we have IPv6, leave it as is ips = input; break; } } 

要亲眼看看,您可以查看参考源 。 从那里你可以看到,在你的例子中, AddressFamilyInterNetworkV6所以MapToIPv6方法只返回IPAddress不变,因为没有什么可以改变。

 public IPAddress MapToIPv6() { if (AddressFamily == AddressFamily.InterNetworkV6) { return this; } // ... } 

将您的服务器IP:10.0.0.0更改为域名,例如db.test.com,这是Apple推荐的方法。

 string input = "db.test.com"; IPAddress[] ads = Dns.GetHostAddresses (input); string ips = ads[0]; 

它解决了吗? 你不应该关心设备的AddressFamily,只关心远程ip AddressFamily。 IPAddress ip = IPAddress.Parse(input); Socket s = new Socket (ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 我用它,它的工作原理。