如何使用C#访问iOS应用程序的文档文件夹

3
我想从Windows(c#)推送一个文件到iPad,并在以后取回它。由于没有网络连接,因此需要通过USB电缆完成此操作。 我找到了Manzana,但似乎不支持iTunes文件共享。 有什么提示吗?我谷歌了很多,但没找到有用的东西。 有一些函数类似于“AMDeviceStartHouseArrest”,但我不知道如何使用它们来获取我的文件。
2个回答

5

有一种方法可以完成这个任务。

多亏了Simon的博客文章(http://blog.victornet.de/2011/04/10/c-manzana-iphoneipad-hausarrest/)和一些邮件交流,最终我成功了。

现在我正在使用Manzana,并且采用了Simon的扩展:

MobileDevice.AMDeviceStartHouseArrestService(iPhoneHandle,      
MobileDevice.CFStringMakeConstantString(bundleIdentifier), null, ref hService, 0);

通过指定应用程序的bundleIdentifier启动“Housearrest”可以使其“/文档”文件夹可以通过默认的Manzana方法访问。因此,无需越狱iDevice。最终,我能够将文件推送到iDevice并读取它们。

再次感谢Simon的大力支持!


如果你还在的话,我在尝试使用你的解决方案时遇到了问题。我已经定义了这个方法:public static extern unsafe int AMDeviceStartHouseArrestService(void* device, void* identifier, void* unknown, ref void* handle, uint what); 但是当我请求目录列表时,它表现得好像我在Media/而不是Documents/中。你有什么建议吗? - David
我快速查看了一下代码,使用了以下方法将路径为“targetPath”的文件写入设备文档文件夹,并命名为“somefilename.ext”。希望您可以复制它(太累了不想标记),并且回答您的问题。如有任何疑问,请随时跟进。string pathOnDevice = @"/Documents/somefilename.ext"; ... public bool readFromDevice(string targetPath) { if (_myIP.ReConnect("com.bundle.identifier")) Console.WriteLine("## Some debug output"); else return false; _myIP.getFile(_myIP, pathOnDevice, targetPath); return true; } - phhe
1
感谢您的回复。为了记录,我在GitHub上fork了该库,并发布了一个示例,使用house arrest服务将目录推送到应用程序沙盒(而不是媒体文件夹)。https://github.com/ImagineLearning-Public/MobileDevice - David

0

我不太确定你在问什么。如果你想访问iPad上的标准文件,它可以被设置为USB大容量存储设备。我相信标准IO方法(System.IO)将能够读写设备,如果你传入正确的路径。如果你是在谈论访问应用程序文件,由于iOS的安全问题,我不认为这是可能的(至少不是以标准、非越狱的方式)。


我在谈论一种符合SDK的方式:iTunes文件共享,以访问应用程序的文档文件夹。我在itunesmobiledevice.dll上找到了一些有希望的信息和提到的“HouseArrest”,这似乎是这个文件共享服务的内部名称。我会尽快回来,一旦我有更多的信息... - phhe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,