探讨使用USB线缆与iOS App通信的小笔记
最近笔者在开发一款App 需要把数据从iOS App传输到电脑 在苦苦研究了一天以后 笔者有了两种想法
1 使用wifi网络连接 电脑端建立服务器 iOS端建立客户端 发送数据包
2 使用USB线缆 像Surge和Duet那样传输数据
在考虑到需要开发的App的特殊性,对于延时要求较高的App来说,wifi连接就显得不那么可靠。于是笔者开始研究。由于Google资源极其稀缺,笔者直接联系了Code-Level Support。(没错就是一年两次的Apple官方代码支持)
可是 回复令在下有点失望 气死我了
The type of communications which you have asked are not supported by the iOS device. There is a private API used by iTunes which allows it to communicate with the device with regards to audio and file content on the device. However, there is no public API support to facilitate communications with an iOS application running on the device. If you are looking for such interaction between the device and the desktop host, you might want to instead investigate communications across a WiFi connection.
于是我追问App Store中有些已经上架了的App有这个功能是怎么实现的,得到的答复也不尽如人意
I’m aware of the Duet application. However the mechanism employed by Duet is not a public API for either iOS or macOSX. DTS only supports and discusses public API’s. Private API’s are not supported by DTS.
于是我继续追问有没有好的建立较好数据实时传输的方案
Hello,
My response regarding WiFi was for you to implement a server client set of applications - one for the iOS device and one for the desktop system. For example, on the desktop system you could set up a web server, then implement the web client on the iOS device. Given the information you’ve provided so far, this would achieve the goal of communications between the 2 systems. However, this is unlikely to be the solution which you desire. Since you’d asked about Duet, I suspect you are looking for a more straightforward means to set up the communications.
The one means which I can think of would be to implement an MFI accessory to sit between the iOS device and the desktop system. However, DTS is here to support API level questions. I’m happy to answer direct questions about the use of an API. However, providing specific solutions to a design goal, we can only offer solutions where we are aware of them. Unfortunately, the Duet solution is not one that I can discuss. However, if you can ask a more specific API level question, I’m happy to have this incident billed to respond.
然后 就被吼了 大概意思是 你这个App还是用USB传输吧 但是这要靠你自己 不要想着换个方案用wifi他不适合你造吗
然后 我就开始研究数据传输
1 我记得有一个framework名字叫libimobiledevice
2 在下花了将近100大洋购买了Surge软件 为什么求助一下?! (克金玩家福利)
于是我得到了这样的回复
参见 libimobiledevice 这个项目
Kind regards,
Surge Networks Inc.
很棒 证明了我的想法 于是我开始从茫茫文献中寻找资料 我在libimobiledevice中找到了一份资料
libimobiledevice API : https://www.libimobiledevice.org/docs/html/files.html
接着我在Google的一个项目代理中找到了这样一张图片
ios-webkit-debug-proxy我们可以看到 底层的USB传输协议名字是usbmuxd 这份协议被包括在libimobiledevice项目中
usbmuxd: A socket daemon to multiplex connections from and to iOS devices.
在接着往下看
To developers, itmeans you can connect to any listening localhost socket on the device.
Fine 是时候开始研究了
未完待续
2018.10.15
然后我看到这么一个框架 看起来很好吃:https://github.com/rsms/peertalk
PeerTalk is an iOS and Mac Cocoa library for communicating over USB.
等待研究