【发布时间】:2017-04-05 22:11:13
【问题描述】:
我无法将我的 iOS 应用发布到 AppStore。
Delphi 10.1.2 Berlin,iOS64,Win 8.1。
我收到了来自苹果的下一条信息:
感谢您的回复。
请确保您的应用与 IPv6 网络兼容。
测试应用程序的 IPv6 兼容性的最简单方法是在 Mac 上设置本地 IPv6 网络。然后,您可以从 iOS 设备连接到网络以测试 IPv6 兼容性。
请按照支持 IPv6 DNS64/NAT64 网络中提供的分步说明进行操作。
有关支持 IPv6 网络的更多信息,请查看支持 IPv6-only Networks。
这是连接代码。
if (FSocket<>nil) then
begin
if not FSocket.Connected then
begin
SetState(mwtrstDisConnected);
FSocket.Free;
FSocket:=nil;
end
else
exit;
end;
FSocket:=TIdTCPClient.Create(nil);
FSocket.Host:=FHost;
FSocket.Port:=FPort;
//CheckCode
{$ifdef KBMMW_USING_INDY_9_OR_NEWER}
FSocket.BoundPortMin:=FMinClientPort;
FSocket.BoundPortMax:=FMaxClientPort;
{$endif}
{$IFDEF KBMMW_USING_INDY_10}
FSocket.ReadTimeout:=RequestTimeout*1000;
FSocket.ConnectTimeout:=ConnectTimeout*1000;
{$ENDIF}
{$IFDEF KBMMW_USING_INDY_8_00_23}
FSocket.Connect;
{$ELSE}
{$IFDEF KBMMW_USING_INDY_9}
FSocket.Connect(ConnectTimeout*1000);
{$ELSE}
FSocket.Connect;
{$ENDIF}
{$ENDIF}
DoConnected(Info);
在我看来,我必须在 //CheckCode 位置插入下一个代码。
TIdStack.IncUsage;
IdURI := TIdURI.Create('195.34.x.x');
try
try
ss := GStack.ResolveHost(IdURI.Host, TIdIPVersion.Id_IPv6);
IdURI.IPVersion := TIdIPVersion.Id_IPv6;
except
IdURI.IPVersion := TIdIPVersion.Id_IPv4; // Just in case.
end;
//ShowMessage(ss);
finally
FreeAndNil(IdURI);
TIdStack.DecUsage;
end;
但此代码 (GStack.ResolveHost) 在 iOS 上不起作用。
如何解决?
【问题讨论】:
-
“在 iOS 上不起作用”不是有用的错误描述。它怎么行不通?它会给你一个错误吗?它会给你带来意想不到的结果吗?它什么都不做吗?你的应用程序崩溃了吗?您需要对此类事情进行具体说明。
-
在我看来,设置
Id.URI := TIdURI.Create('195.34.x.x');是注定要失败的,因为那是一个IPv4地址,所以它显然不能解析为IPv6。这就是你所说的不起作用吗? -
肯是对的。让
ResolveHost()(在 iOS 上工作)使用 IPv6 查找来解析 IPv4 地址是没有意义的。请注意,Indy 10 可以枚举本地分配的 IP 并报告它们是 IPv4 还是 IPv6,因此可以检测设备连接到 IPv6 网络还是 IPv4 网络。 -
是真的,{Id.URI := TIdURI.Create('195.34.x.x');} 和 {ResolveHost()} 函数有问题。以及如何检测设备是否连接到 IPv6 以及下一步(如果已连接)如何将 IPv4 地址转换为 IPv6?你能展示一些作品演示吗?
-
你为什么还要使用
TIdURI?如果您有一个 IP 地址,只需将其直接分配给Host并相应地设置IPVersion(Indy 中有几种方法可以检测字符串是 IPv4 还是 IPv6 地址,例如 @987654328 @ 班级)。要将 IPv4 地址转换为 IPv6 地址,您必须将其重新编码为 IPv4 映射的 IPv6 地址。 Indy 没有这方面的功能,但它可以像在 IPv4 地址前添加'::ffff:'一样简单('195.34.x.x'->'::ffff:195.34.x.x'),但这并不能解决您的潜在问题。
标签: ios delphi networking indy