openURL本地文件或强制UIDocumentInteractionController使用特定的应用程序

我希望打开一个文件(本地存储在我的应用程序)与另一个应用程序。

目前,我正在使用openURL(有一个专门的urlscheme),它工作正常,如果我使用托pipe在互联网上的文件,但我想使用本地文件,所以:a)离线工作b)很多我的用户的时间超出了小区覆盖范围,或漫游国际

我到目前为止所尝试的:我没有任何运气告诉openURL使用本地文件,我已经尝试了一些方法,但他们都是这样的

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"ext"]; NSURL *fileURL = [NSURL fileURLWithPath:filePath]; [[UIApplication sharedApplication] openURL:fileURL]; 

  NSURL *fileURL = [[NSBundle mainBundle] URLForResource: @"test" withExtension:@"ext"]; [[UIApplication sharedApplication] openURL:fileURL]; 

还要手动使用不同版本的localhost /和file://和var / mobile等path的string

没有任何工作(反正我)

所以,我环顾四周,并遇到UIDocumentInteractionController

我可以使用UIDocumentInteractionController让用户打开我的本地文件与其他应用程序 – 但它总是提供其他应用程序使用的多个选项,例如,其中一个应用程序可以是“Dropbox”。

我不想让用户以其他方式下载(或在技术上上传)我的文件的副本。 它包含我不希望如此容易获得的数据。

当我的应用程序打开文件(不是由我btw),它不允许任何forms的保存或访问原始数据。

我意识到,通过在我的应用程序中包含文件,任何认真的获得它的人都可以,我只是不想闪动一个大的菜单,说'这是如果你想要你自己的副本做衍生工作'

理想情况下,我可以使用openURL,但我认为这是因为“沙盒”,其他应用程序没有响应 – 在Android中,我使用mode_world_readable来声明该文件可以被其他应用程序读取(因此放置在沙箱外)不允许其他应用程序写入,只是阅读) – 是否有与iOS一样的做法?

否则,如果我可以强制UIDocumentInteractionController使用特定的应用程序,而不是呈现菜单 – 这也可以。

前一个类似的问题

对于长阅读抱歉,任何帮助表示赞赏。

编辑:我刚刚收到来自苹果技术支持的答案,他们告诉我,目前这是不可能的(就在iOS 6发布后)

是的,由于iOS上严格的沙盒,你受到了限制。 这是一些想法。

您可以通过替代子类化QLPreviewController来覆盖UIDocumentInteractionController的function。 然后,您可以replace显示“打开在”菜单中的标准栏button项目。 看看这个职位的一个解决scheme的子类化QLPreviewController: QLPreviewController删除或添加UIBarButtonItems

当然,我相信应用程序之间共享的方式很大程度上不在您的手中。 如果一个应用程序已经注册了能够处理某种types的文件,它将显示为“打开”列表中的一个选项,无论您是否愿意。 我不相信你可以过滤哪些应用程序显示在列表中。

这里有两个我曾经想过的实验性的想法,但从未尝试过:

  • 你可以base64对你想传递的文件中的数据进行编码(只是将二进制文件转换为文本),然后把它作为用来启动其他应用程序的自定义URL的一部分。 然后另一个应用程序可以base64解码相同的数据回到二进制。 缺点是URL的长度有限制,这意味着您发送的“文件”必须非常小。

  • 接下来,我甚至不知道这是否可行,但是我想知道是否可以使用一些隐写algorithm将文档数据embedded到图像中,然后将其交给相机胶卷。 然后,另一个应用程序可以打开相机胶卷,并再次将图像解码回数据。 …是的 我知道……晦涩难懂,但尝试实施可能很有趣。 😉

不知道是否有任何帮助,但你确实说“任何帮助表示赞赏”。 😉

最好的祝福。