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

lif*_*ood 6 iphone openurl ipad ios

我希望用另一个应用程序打开一个文件(存储在我的应用程序中).

目前,我正在使用openURL(有一个专用的url方案),如果我使用托管在互联网上的文件,它工作正常,但我想使用本地文件,因此:a)它可以脱机工作b)很多用户离开小区覆盖范围或国际漫游的时间

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

      NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"ext"];
      NSURL *fileURL = [NSURL fileURLWithPath:filePath];
      [[UIApplication sharedApplication] openURL:fileURL];
Run Code Online (Sandbox Code Playgroud)

      NSURL *fileURL = [[NSBundle mainBundle] URLForResource: @"test" withExtension:@"ext"];
      [[UIApplication sharedApplication] openURL:fileURL];
Run Code Online (Sandbox Code Playgroud)

还可以手动使用具有localhost /和file://以及var/mobile等路径的不同变体的字符串

什么都行不通(对我来说无论如何)

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

我可以使用UIDocumentInteractionController让用户使用其他应用程序打开我的本地文件 - 但是它总是提供其他应用程序的多个选项,例如,其他应用程序之一可以是"Dropbox".

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

当我的目标应用程序打开文件(不是我的btw)时,它不允许任何类型的保存或访问原始数据.

我意识到,通过在我的应用程序中包含该文件,任何认真获取它的人都可以,我只是不想闪现一个大菜单,说'如果你想让自己的副本从中进行衍生作品,那就是'

理想情况下,我可以使用openURL,但我认为这是因为其他应用程序没有响应的"沙箱" - 在Android中我使用mode_world_readable将文件声明为其他应用程序可读(因此将其放在沙箱之外,并且它不允许其他应用程序写入它,只是阅读) - 无论如何在iOS上做同样的事情?

否则,如果我可以强制UIDocumentInteractionController使用特定的应用程序而不显示菜单 - 那也没关系.

刚才有类似的问题

对于长时间阅读感到抱歉,任何帮助表示赞赏.

编辑:我刚收到Apple Tech支持人员的回复,他们告诉我目前这不可能(就在iOS 6发布之后)

Mat*_*ong 0

是的,由于 iOS 上严格的沙箱,您会受到限制。以下是一些想法。

您可以通过子类化 QLPreviewController 来覆盖 UIDocumentInteractionController 的功能。然后,您可以替换显示“打开方式”菜单的标准栏按钮项目。查看这篇文章,了解子类化 QLPreviewController 的一个解决方案:QLPreviewController 删除或添加 UIBarButtonItems

当然,我相信应用程序间共享的工作方式很大程度上不由您掌控。如果某个应用程序已注册为能够处理某种类型的文件,则无论您是否愿意,它都将显示为“打开方式”列表中的选项之一。我不相信您可以过滤该列表中显示的应用程序。

以下是我考虑过但从未尝试过的两个实验想法:

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

  • 接下来,我什至不知道这是否可能,但我想知道您是否可以使用某种隐写算法将文档数据嵌入图像中,然后将其交给相机胶卷。然后,另一个应用程序可以打开相机胶卷并将图像再次解码回数据。... 是的。我知道……晦涩难懂,但尝试实施可能会很有趣。;-)

不确定这是否有帮助,但你确实说过“任何帮助都值得赞赏”。;-)

此致。