Delphi iOS IPv6 App Store拒绝

问题描述:

我们使用RAD Studio 10.0 Seattle来构建一个通过Web服务获取数据的iOS应用程序。由于苹果要求所有应用程序从2016年6月1日起支持IPv6,因此我们的应用更新已被拒绝。Delphi iOS IPv6 App Store拒绝

我们使用WSDL导入程序在RAD Studio中创建Web服务类,然后调用Web服务。当应用程序连接到IPv6网络时,会抛出一个Socket Error #51 Network is unreachable...

有谁知道我们如何解决这个问题?

+3

没有XE10。你在使用10.0西雅图还是10.1柏林?无论如何,您应该联系Embarcadero寻求帮助,他们可能需要提供IPv6支持的修复。否则,您可能不得不停止使用他们的WebService框架并从头开始编写自己的WebService,例如使用支持IPv6的Indy的“TIdHTTPServer”。 –

+1

@Remy我甚至不得不纠正QuickReports的作者,因为他们已经在全国各地广泛使用“XE10”发布了他们的最新版本。另外,据我们所知,10.1柏林可能已经引入了一个不在10.0西雅图的补丁。 –

+0

感谢@RemyLebeau的更正。我正在使用10.0西雅图。我们将尝试联系Embarcadero,看看他们是否有解决办法。 – Cheez

尝试使用本功能:

function GetHost(Host: String): Boolean; 
begin 
    result := ''; 
    try 
    GStack.ResolveHost(Host, TIdIPVersion.Id_IPv6); 
    result := '[' + Host + ']'; 
    except 
    GStack.ResolveHost(Host, TIdIPVersion.Id_IPv4); 
    result := Host; 
    end; 
end; 

添加用途 “IdStack” 和 “IdGlobal”

你必须通过你的主机(www.google.com为例)和func返回一个有或没有'['的结果。

现在,你必须只使用它...的 'http://' +和getHost( 'www.google.com')

如果你在IPV6网络,最后一个字符串会(http://[www.google.com]

使用以前的答案,我想出了这个代码,这对我很有用。我可以输入完整的肥皂URL并返回IPV6 URL的正确IPV4。在使用部分包含'idURI'。

class function TPortalTools.GetRealUrl(Url: string): string; 
var 
    IdURI: TIdURI; 
begin 
    TIdStack.IncUsage; 
    IdURI := TIdURI.Create(Url); 
    try 
    try 
     GStack.ResolveHost(IdURI.Host, TIdIPVersion.Id_IPv6); 
     IdURI.IPVersion := TIdIPVersion.Id_IPv6; 
    except 
     IdURI.IPVersion := TIdIPVersion.Id_IPv4; // Just in case. 
    end; 

    // Put it back together. 
    Result := IdURI.GetFullURI([]); 
    finally 
    FreeAndNil(IdURI); 
    TIdStack.DecUsage; 
    end; 
end;