如何使用http / ftp上传文件到iphone / ipad? (如ifile,goodreader)

有什么好的build议上传文件到设备? 我见过很多应用程序在80或8080上创build一个HTTP服务器来上传文件。 这是否意味着我也必须实现一台服务器?

有没有第三方库? (最好是开源和非GPL)

编辑:我打算升级在公司环境中的特定设备的应用程序中的文件,所以从中央服务器的iPad拉文件也是一种替代scheme。 但是我不得不发送消息到这些ipad来告诉他们去获取这些文件。

我假设你想要的是一种自动更新 。 一个应用程序按顺序从服务器执行某些操作,而无需用户手动操

我不知道iOS的企业许可证特定function。 但我相信没有这样的企业特定的API。 而据我所知, 自动更新几乎是不可能的。 因为,

  1. 没有对自动更新的系统级支持。 (然而?)
  2. 所以消息和获取function应该在应用程序中实现。
  3. 但是没有应用程序保证长时间在后台运行。
  4. 而且用户也可以随时closures任何应用程序。
  5. 没有办法发送消息到未运行的应用程序。
  6. 即使你可以发送,也无法解决每个客户端构成服务器的问题。

如果你的应用程序正在运行,发送消息或命令他们获取或做任何事情只是一个简单的工作。 问题是没有固定的办法来迫使他们永远活着。 即使在操作系统重启或exception终止的情况下。

然而,还有一个select。 只需将应用程序注册为Skype等VOIP应用程序即可。 操作系统不会让应用程序也运行,但会监视特定的套接字端口,并会在套接字收到一些消息时唤醒您的应用程序。 有关更多详细信息,请参阅此处: http : //developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH5-SW15

在AppStore中,使用VOIP作为自动更新等其他用途的应用程序将不会被传递,但您无需担心。

和其他方式发送消息到设备没有运行应用程序是推送通知 。 这是系统级支持的function。 但这不是为了指挥应用程序。 这是旨在发送文字信息。 所以如果你的应用程序没有运行,消息将显示给用户。 但是,您可以通过发送推送通知来指导用户启动应用程序。

作为最后的select,您可以向企业环境要求Apple的某些function。 如果您的公司足够大以获得企业许可证,苹果将认真考虑您的function要求。


如果您决定使用VOIP方式,我很抱歉无法再帮助您。 我没有实施这种应用程序的经验。 但不应该这么难。

然而困难的部分是服务器。 它绝对需要定制的服务器程序,保持TCP / IP连接。 普通的HTTP服务器不能使用。 由于HTTP本身被devise为不保持TCP / IP连接。 你必须从头开始构build这种服务器。 您将不得不处理较低级别的TCP / IP传输。

这种服务器有一些解决scheme(免费/商业),但没有一种stream行,因为这种服务器经常需要完全定制。 所以没有什么可以重复使用或分享。

不过,我相信这是您的应用程序最适合的实施。


如果只有在应用程序运行时才能满足自动更新,则可以通过定期从客户端轮询服务器状态来对其进行存档。

这很容易实现,因为您可以使用常规的HTTP服务器。 客户端定期连接并从中央服务器下载最新的更新。 如果有新的更新,只要抓取并做你想做的。 而应用程序启动,只是首先检查更新。 防止所有操作,直到更新应用。

这是常规的方式。 大多数应用程序都是用这种方法构build的。 在这种情况下,你不需要实现服务器或硬件。

然而,更新的速度取决于轮询周期。


(编辑)

我可以不关心私人API。 因为你的app不适合AppStore,所以你可以自由的使用私有API。 (这与监狱破坏是不同的, 隐藏的function太多了)我不知道私有API,但可能有一些API支持应用程序的保持活动。 但是,这种逆向工程是非常痛苦的,除非你天生就是黑客。

但是我不得不发送消息到这些ipad来告诉他们去获取这些文件。

推送通知编程指南

或者用自定义URLscheme发送邮件来启动你的应用程序。

iOS应用程序编程指南 – 实现自定义URLscheme

您可以尝试在您的项目中使用以下开源代码:

http://code.google.com/p/cocoahttpserver/

https://github.com/robin/cocoa-web-resource/wiki

苹果在他们的网站上有一些示例代码,详细说明了你要找的东西:

http://developer.apple.com/library/mac/samplecode/CocoaHTTPServer/CocoaHTTPServer.zip

所以你有几个select:

  1. 您可以在您的组织内无线分发您的应用程序,并将新内容作为应用程序更新推出。 苹果公司向他们的企业开发者提供了这个选项

    无线应用分发

    iPhone使企业能够通过Wi-Fi和3G安全地主持和无线分发内部应用程序给员工。 应用程序可以更新,而不需要用户连接到他们的电脑。 内部应用程序可以托pipe在任何可供用户访问的Web服务器上。 用户只需点击一个URL即可无线安装应用程序,而无需连接到他们的电脑。

  2. 另一种方法是将应用程序configuration为获取更新的数据。 您描述了向iOS设备添加HTTP服务器,但是当应用程序不运行时服务器无法接收数据。 考虑到你的需求,它可能会更好地embedded在你的应用程序的Web客户端。

    如果我在你的鞋子(和选项#1没有工作),我会使用ASIHTTPRequest检查服务器在启动/每天。 如果有新的更新,则应用程序可以提示用户有新的数据文件要下载,或者可以静默地在后台线程中下载。

    更新:也许我应该更清楚如何做#2。 您可以configuration下载,使其在用户退出应用程序时不会中断(您不需要执行Voip破解)。 在iOS编程指南的背景部分查看完成有限长度任务 。

有来自Apple和开源社区的http服务器示例代码 ,如cocoahttpserver TouchHTTPD。 你可以上传文件到http服务器上。

这里有一个关于运行cocoahttpserver和上传文件到iPhone的博客和屏幕截图。

Python CGIHTTPServer允许您在0行代码中创build一个服务器:

 jcomeau@intrepid:~/rentacoder/bin2txt$ python -m CGIHTTPServer Serving HTTP on 0.0.0.0 port 8000 ... 

实际上实现脚本来parsinginput并保存文件需要花费更多的精力。

[稍后]好的,所以忘了这一点,苹果不允许它。 至less请参阅iPad上的本地服务器 。