iOS模拟器拒绝连接到本地。主机名

问题描述 投票:0回答:2

我正在开发一个连接到网络服务的 iOS 应用程序。为了进行开发和测试,我们使用 Bonjour 查找本地网络上的服务器,并在登录期间应用程序提供连接到其中之一而不是生产站点的服务。

自从升级到 El Capitan 以来,我无法从模拟器连接到同一台 Mac 上运行的 Web 服务器。我能够使用模拟移动 Safari 和 OS X 中的 Python 附带的 Web 服务器来重现此问题。

  1. 打开终端,启动网络服务器:
    python -m SimpleHTTPServer 8000
  2. 在模拟器中打开 Safari,输入 URL:
    http://my-computer-name.local.:8000/

模拟移动 Safari 显示“Safari 无法打开页面,因为它无法连接到服务器。”

此外,每次我尝试加载 URL 时,控制台中都会出现以下消息:

assertiond[____]: assertion failed: 15A284 13A340: assertiond + 13207 [28CC4371-F3F9-3578-9436-310B23A2C638]: 0x1  

其他可能相关的事实:

  • 桌面 Safari 能够使用 URL 进行连接
    http://my-computer-name.local.:8000/
  • Real Mobile Safari(在同一网络上的 iOS 设备上)能够使用 URL 进行连接
    http://my-computer-name.local.:8000/
  • 模拟的 Mobile Safari 能够使用 URL
    http://127.0.0.1:8000/
    进行连接(不过,我需要它与 Bonjour 提供的主机名一起使用)。
  • 模拟的 Mobile Safari 能够通过类似
    http://other-computer.local.:8000/
  • 的 URL 连接到另一台计算机
  • 我正在使用模拟器版本 9.0 (SimulatorApp-620 CoreSimulator-179)
  • OS X El Capitan 10.11 (15A284)
  • 有趣的是,在网络上搜索 UUID 28CC4371-F3F9-3578-9436-310B23A2C638 只能得到少量的工作职位。 (你可以赚 15 美元来修复这个错误!)
  • 这似乎与应用程序传输安全无关。当 ATS 禁用时,我的应用程序会出现这种行为。

你能重现这个问题吗?我是不是错过了什么?

ios-simulator local bonjour
2个回答
4
投票

我通过向本地 OSX /etc/hosts 文件添加一个条目来解决这个问题:

在“localhost”后附加您的 FQDN:

127.0.0.1 本地主机 mymachine.mydomain.local


0
投票

可能导致此问题的一个问题是,在某些时候,macOS 和 Safari 似乎开始默认使用 ipv6,因此,如果您尝试导航到

my-computer-name.local
,它将尝试访问
::1
而不是
127.0.0.1
。但是
python -m SimpleHTTPServer
仅侦听所有 ipv4 接口,使用
0.0.0.0
:

$ python -m SimpleHTTPServer 8000
Serving HTTP on 0.0.0.0 port 8000 ...

因此这可能会导致连接问题。

这在 python3 中已修复(至少是 3.10.6),所以这应该工作得更好:

$ python3 -V
Python 3.10.6
$ python3 -m http.server 8000
Serving HTTP on :: port 8000 (http://[::]:8000/) ...

ipv6 的一个很好的功能似乎是,如果您使用

::
监听所有接口,您也 监听所有 ipv4 接口,所以例如
curl 127.0.0.1:8000
也有效。

© www.soinside.com 2019 - 2024. All rights reserved.