1

我只想使用“webinpectord”(爱好项目)与 Mobile Safari 通信。我的目标是在 Mobile Safari 上显示一个警报“嗨”。我知道我可以使用 Safari 的调试控制台来做到这一点。目前我所知道的是 Mobile Safari ('webinpectord') 使用 IPV6 协议侦听 localhost 上的端口 27753。从这个页面我了解了与 Mobile Safari 通信的顺序。我仔细阅读了已经在运行的程序,例如remote-debugnode-iosdriveriOS-webkitproxy。然后我尝试用 C 语言编写一个连接到 localhost:27753 的程序,然后发送和接收命令。我的问题是我可以连接并发送命令到端口 27753,但没有从该端口得到任何响应。

我试图发送

{ __argument: { WIRConnectionIdentifierKey: '17858421-36EF-4752-89F7-7A13ED5782C5' },
   __selector: '_rpc_reportIdentifier:' }

根据这篇文章,Mobile Safari 必须发回响应,例如

{ __selector: '_rpc_reportSetup:',
 __argument: 
   { WIRSimulatorNameKey: 'iPhone Simulator',
     WIRSimulatorBuildKey: '10A403' } }


{ __selector: '_rpc_reportConnectedApplicationList:',
 __argument: 
     { WIRApplicationDictionaryKey: 
        { 'com.apple.mobilesafari': 
           { WIRApplicationIdentifierKey: 'com.apple.mobilesafari',
              WIRApplicationNameKey: 'Safari',
              WIRIsApplicationProxyKey: false } } } }

但我没有得到 Mobile Safari 的任何回应。我只能向那里发送命令。

让我们假设我的程序有问题!

所以我试着用'telnet'做实验。在这里,我也可以连接到 localhost:27753 并且可以发送命令但没有得到任何响应。我附上屏幕截图。

发送连接标识符密钥 在此处输入图像描述

你可以看到我尝试了很多组合,比如

  { "__argument": { "WIRConnectionIdentifierKey": "17858421-36EF-4752-89F7-7A13ED5782C5" }, "__selector": "_rpc_reportIdentifier: " }


  {\"__argument\": { \"WIRConnectionIdentifierKey\": \"17858421-36EF-4752-89F7-7A13ED5782C5\" }, \"__selector\": \"_rpc_reportIdentifier: \"}


  "{ "__argument": { "WIRConnectionIdentifierKey": "17858421-36EF-4752-89F7-7A13ED5782C5" }, "__selector": "_rpc_reportIdentifier: " }"

但没有任何效果。

最后我尝试 curl 发送数据。那也失败了!

在此处输入图像描述

谁能告诉我我该怎么做才能得到回应

  { __selector: '_rpc_reportSetup:',
 __argument: 
   { WIRSimulatorNameKey: 'iPhone Simulator',
     WIRSimulatorBuildKey: '10A403' } }


{ __selector: '_rpc_reportConnectedApplicationList:',
 __argument: 
     { WIRApplicationDictionaryKey: 
        { 'com.apple.mobilesafari': 
           { WIRApplicationIdentifierKey: 'com.apple.mobilesafari',
              WIRApplicationNameKey: 'Safari',
              WIRIsApplicationProxyKey: false } } } }

发送请求时

  { __argument: { WIRConnectionIdentifierKey: '17858421-36EF-4752-89F7-7A13ED5782C5' },
   __selector: '_rpc_reportIdentifier:' }

使用 'telnet' 或 'curl' 到 localhost:27753。

我以不同的方式尝试了两天(写了 C 程序、python 程序,最后尝试了 telnet 和 curl),但没有成功。所以请帮忙!

4

1 回答 1

0
  1. Mobile Safari 使用自定义的二进制协议(二进制属性列表,请参见bplist-creator)与 Safari 调试模式进行通信。
  2. 此 JSON 命令的正确格式应为:

    {"__argument":{"WIRConnectionIdentifierKey":"990cc163-d8b2-4d22-8d1c-644e100a5a07"},"__selector":"_rpc_reportIdentifier:"}
    

请注意,每个“键”都应该用双引号引起来。

详情可以参考appium

于 2014-02-19T06:35:07.820 回答