如何在iOS中编辑其他应用程序的文本

3

我正在编写一个应用程序,其中包含一组嵌入式lua脚本。 我想在iPad上编辑这些脚本 - 这可能吗?

我考虑的工作流程是:

  1. 启动我的应用程序并进行测试;
  2. 转到iPad上的文本编辑器并更改lua脚本;
  3. 关闭我的应用程序;
  4. 重新启动我的应用程序以重新加载脚本;
  5. 返回第1步。

编辑:我可以添加“打开”选项到我的应用程序,并按照此问题中的说明打开文本文件,但我这样做后,文本编辑器是否会将文件保存回它来自哪里的位置?还是只使用副本?这假设我可以找到一个能够打开lua文件的文本编辑器,我想肯定有这样一个编辑器存在。


2
应用程序是沙盒化的,因此您放置在文档文件夹中的任何内容都无法被其他应用程序访问。我建议将一个简单的文本编辑器集成到您的应用程序中。 - danielbeard
1
刚刚发现了 UIPasteboard,它可能会帮助您实现您想要做的事情 - http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIPasteboard_Class/Reference.html - danielbeard
这是一个非常好的想法,我可以将它粘贴回我的应用程序并保存。谢谢! - daven11
我在技术实现方面完全不懂,但你所寻找的似乎是“打开”工作流程,就像在打开邮件附件或Safari下载时实现的那样。你的应用程序需要实现发送到其他已注册为文本编辑器的应用程序。它们会得到一个副本,可以在其沙盒中进行编辑,如果它们自己实现了“打开”,并且你的应用程序注册为.lua文件的编辑器,它们可以将副本发送回你的应用程序沙盒 - 在那里你可以自由地让它覆盖原始文件。iOS SDK文档应该在LaunchServices下有详细说明... - kopischke
这是个好主意,只需要找到一个能够打开lua文件的文本编辑器并在它们之间切换即可。你想把这变成一个答案吗,这样我就可以把它标记为解决方案了? - daven11
显示剩余4条评论
3个回答

1

正如@danielbeard所说,由于iOS沙盒模型的限制,这在桌面(或更宽松的移动)操作系统上不会像预期的那样直截了当地工作。虽然值得注意的是,问题并不是沙盒本身,因为新版本的OS X中也存在沙盒,而是iOS没有提供统一的文件系统层,可以镜像到应用程序的沙盒中。您可以通过在Lion的TextEdit中编辑桌面上的文本文档来清楚地看到这一点。TextEdit将文档视为位于其沙盒中 - 〜/ Library / Containers / com.apple.TextEdit / Data / Desktop,但同时也明确保存在您的桌面上〜/ Desktop - 两个目录对于沙盒的目的而言是一个。

Sandbox me once, edit me twice

iOS 中不存在跨应用程序文件层。这意味着在 iOS 中,无法在多个应用程序中编辑同一物理副本的文件,因为每个应用程序都需要其自己沙盒中的一个副本。但是可以通过 iOS 3.2 以后支持的“打开方式”机制(在其他应用程序中打开邮件附件时看到)将文件从应用程序沙盒传递到应用程序沙盒中(严格来说:复制它们)。

Open me up

如果您的应用程序通过此机制实现了转发其.lua文档的功能,则任何识别文件类型的文本编辑器都可以将副本接收到其自己的沙盒中。我对实现细节有些模糊,因为我不是iOS开发人员,但如果来自OS X的UTI声明规则和我在使用我的iDevices时观察到的一些东西是正确的,您甚至可以将文件类型插入到您自己的应用程序中的public.text UTI层次结构中,这将为设备上的所有文本编辑器添加支持。
如果接收编辑器也实现了“打开”,并且您的应用程序已注册为能够编辑.lua文件,则编辑器稍后可以将编辑后的文件复制回您的应用程序沙盒中。在那里发生的事情(去重、版本控制、覆盖是否需要提示)取决于您,在iOS SDK所施加的限制范围内,而我对此一无所知。
以下Apple Developer文档可能提供一个有用的起点:

0

如果您越狱并安装了OpenSSH,您可以做所有这些甚至更多。

我使用Moai进行开发,这是一款最近被Double Fine采用的用于编写Lua游戏的SDK。我可以通过SSH会话直接在iPad上使用我选择的编辑器(Vim)进行编码,将其映射到本地主机(使用Prompt,一款iOS SSH客户端)。我映射了一个热键来重新启动应用程序。配合蓝牙键盘,iPad就像一台笔记本电脑一样。

您还可以使用类似ExpandDrive的工具将iPad的文件系统映射到桌面文件系统中。然后,您可以像在桌面计算机上一样浏览和编辑文件,完全无线。您可以在编辑器中映射一个键以通过SSH重新启动应用程序,因此工作流程变为:

  1. 编辑Lua脚本
  2. 按下键以重新启动应用程序并查看更改。

听起来很诱人 - 我的一个朋友也建议这样做。也许这就是正确的方式。 - daven11

0
在iOS中,如果没有越狱,你无法从一个应用程序的沙盒访问另一个应用程序的沙盒。

你不能进入另一个应用程序的沙盒,这一点是正确的。但是有一种有序的方式可以通过 iOS 的 LaunchServices 来将数据从一个沙盒发送到另一个沙盒:"打开方式"。请参阅我的答案 - kopischke

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