问题标签 [appstore-sandbox]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - 在沙盒应用程序中使用 NSFileManager 访问 NSApplicationScriptsDirectory
我在使用此代码访问应用程序脚本的默认文件夹时遇到了一些麻烦(我认为这是正确的做法):
问题是两个 NSLog 都调用 print (null)
,这意味着我什么也没得到。我究竟做错了什么?
objective-c - NSUserScriptTask:取消任务?
有什么办法可以取消正在运行的 NSUserScriptTask?想到的唯一方法是通过 NSTask 启动一个单独的进程(命令行工具),其唯一目的是运行 NSUserScriptTask,然后在必要时通过 NSTask 终止命令行工具。然而,这似乎有点牵强,而且不是很优化......有什么想法吗?
objective-c - NSUserScriptTask:接受的文件类型?
我正在使用 NSUserScriptTask 运行用户放置在 Application Scripts 目录中的脚本。但是,我发现很难找出 NSUserScriptTask 接受哪些已知类型的脚本,并且文档也没有多大帮助......有什么想法吗?
到目前为止,我已经尝试过这些:
- .sh
- .applescript
- .scpt
- .scptd
- 。文本
并且无法让它们中的任何一个工作(该initWithURL:error:
方法返回 nil)
编辑: 我忘了包括错误!傻我...这是打印在日志上的内容:
cocoa - Apple 沙箱:禁用 NSDocument 对 Document-scoped 书签的原子保存
我已经在 Apple 的开发者论坛上发布了这个问题,一周后没有收到任何回复,所以我希望我能在这里有更好的运气。
我创建了一个标准的基于文档的应用程序(使用 NSDocument,保存简单的 XML 文件),现在我需要扩展它以将文档范围的书签保存到用户选择的外部文件中。
一切正常,除了文档范围的书签在我从文件中读回它们后无法解析之外,事实证明这是由于 NSDocument 以原子方式写入文件。
背景
因为我发现通过 Apple 的开发者论坛或网络搜索很难找到有关报告错误的信息,所以我将快速记录我发现的内容,以防它对同一条船上的其他人有所帮助。
失败尝试返回的错误是:
错误域 = NSCocoaErrorDomain 代码 = 256 “无法打开文件“somefile.xml”。”
其中,令人困惑的是,somefile.xml 是(文件名组件)在下面的代码块中作为“relativeToURL:”传递的绝对 URL。
有App Sandbox:document-scoped bookmark notsolving等报告;启用原子文件保存时,不返回任何表明沙盒/书签存在问题的错误。
这个问题之前的报告没有给出同样的错误(他们通常指的是没有错误信息的失败),但是我创建了一个单独的测试应用程序(不使用 NSDocument)来测试这个,发现我能够重现写入文件时使用以下代码与上述相同的错误消息:
将最后一行更改为“atomically:NO”时,书签会正确解析,并且一切都按预期工作。
NSDocument 和原子写作
由于 NSDocument 的默认和推荐设置使用原子写入,并且这不适用于 Sandbox 的核心功能之一,我正在寻找一种方法使文档范围的书签和 NSDocument 一起工作,我认为这意味着找到一种方法来使 NSDocument 直接而不是原子地写入文件。
我还没有找到解决 Apple 框架故障的任何有效解决方案(在这些论坛上或更广泛的搜索中)。
我可以覆盖其中之一
- writeSafelyToURL:ofType:forSaveOperation:error:
- writeToURL:ofType:forSaveOperation:错误:
- saveToURL:ofType:forSaveOperation:completionHandler:
但在每种情况下,文档都说“如果您覆盖此方法,请务必调用超类实现”,这可能会继续以原子方式保存文件。
我的目标是以一种我可以继续支持 Apple 推动开发人员(无论好坏)的其他用户体验期望的方式来做到这一点 - 例如。autosavesInPlace、版本等。但我愿意牺牲这些细节,以便有一个可以发布到 AppStore 的工作沙盒应用程序。
objective-c - NSUserScriptTask 困难
我一直在尝试使用最近的 NSUserScriptTask 类及其子类来解决(参见this和this ),到目前为止,我已经解决了一些问题,但还有一些问题有待解决。从文档中可以看出,NSUserScriptTask 不允许取消任务。因此,我决定创建一个简单的可执行文件,它将脚本路径作为参数并运行脚本。这样,我可以使用 NSTask 从我的主应用程序启动帮助程序,并[task terminate]
在必要时调用。但是,我要求:
- 从它启动的助手接收输出和错误的主应用程序
- 助手仅在 NSUserScriptTask 完成时终止
主应用程序的代码很简单:只需使用正确的信息启动一个 NSTask。这是我现在所拥有的(为了简单起见,我忽略了安全范围书签等的代码,这些都没有问题。但不要忘记这是运行沙盒):
请记住,我需要终止处理程序仅在以下情况下运行:(a)任务被取消(b)任务因脚本完成运行而自行终止。
现在,在助手方面,事情开始变得棘手,至少对我来说是这样。为了简单起见,让我们假设脚本是一个 AppleScript 文件(所以我使用 NSUserAppleScriptTask 子类 - 在现实世界中,我必须适应这三种类型的任务)。这是我到目前为止得到的:
现在,我有三个问题(这是我想通过这个 SO 条目提出的问题)。首先,“已完成的任务”永远不会被打印出来(块永远不会被调用),因为任务甚至永远不会开始执行。相反,我在控制台上得到了这个:
我尝试从主应用程序运行完全相同的代码,并且它毫不费力地完成(但从主应用程序我失去了取消脚本的能力)。
其次,我只想在return 0;
调用完成处理程序后到达 main() 的末尾。但我不知道该怎么做。
第三,每当助手出现错误或输出时,我想将该错误/输出发送回应用程序,应用程序将通过 errorPipe/outputPipe 接收它们。类似的东西fprintf(stderr/stdout, "string")
可以解决问题,但我不确定这是否是正确的方法。
因此,简而言之,感谢有关第一个和第二个问题的任何帮助。第三个我只是想确保我应该这样做。
谢谢
iphone - 应用内购买沙盒测试服务器延迟
在测试我的应用内购买时,我在连接到沙盒环境时遇到了一些问题。问题如下:
1-在xcode的ios模拟器中..连接沙箱服务器需要很长时间。但是,一旦它完成并且我购买了附加组件,一切都会从那里顺利进行。这里的问题是连接苹果服务器并确认购买需要很长时间。所需时间约为 2 到 3 分钟。
2-我在我的iphone上上传了二进制文件来测试它,在iphone上连接服务器也需要几分钟。但问题是,在苹果要求我确认购买后,我说是的。什么都没发生。我永远无法输入我的测试用户苹果凭据并购买附加组件。
有没有人遇到过类似的问题?反正有没有测试为什么要花这么长时间?还有什么方法可以查看我在 iphone 上运行应用程序时是否收到任何错误?
谢谢你的帮助。
ios - 目前不允许 iTunes 沙盒购买
我正在开发具有应用内购买功能的应用,但出现此错误:
您目前无权在 Sandbox 中购买此 InApp。
我确信我已经正确设置了一切。我已经为购买物品创建了沙盒帐户。我的代码完好无损(感谢Ray Wenderlich),我很确定其他一切都井井有条。但一定有什么不对。
什么可能导致此错误?
编辑:
我正在研究 Xcode 模拟器。
nsurl - 安全范围书签的当前内核资源限制是什么?
状态的文档-[NSURL startAccessingSecurityScopedResource]
:
您必须平衡对 startAccessingSecurityScopedResource 方法的每次调用与对 stopAccessingSecurityScopedResource 方法的相应调用。如果您在不再需要文件系统资源时未能放弃访问权限,则您的应用程序会泄漏内核资源。如果泄漏了足够的内核资源,您的应用程序将失去将文件系统位置添加到其沙箱的能力,例如通过 Powerbox 或安全范围的书签,直到重新启动。
任何人都可以了解内核资源的实际限制是什么吗?
我不希望我的应用程序达到这些确切的限制,只是知道一个大概的数字会有所帮助,这样我就可以判断代码是否曾经做过任何危险/愚蠢的事情。
objective-c - 使用 Scripting Bridge 和 Sandboxing 编写 iTunes 脚本
我有一个应用程序告诉 iTunes 使用 ScriptingBridge 框架播放音乐。该应用程序要么告诉 iTunes 播放播放列表或某个曲目。该应用程序也是沙盒的。
要播放播放列表,这就是我所拥有的:
要播放曲目,也很简单:
由于我的应用程序是沙盒化的,因此我的权利文件中有以下几行:
我已经在没有应用沙盒的情况下进行了测试,并且代码运行良好。使用沙盒虽然播放列表代码可以正常工作,但播放曲目不起作用。我检查了控制台应用程序,似乎没有记录与沙盒和我的应用程序有关的任何内容。
起初我认为我可能access-group
在我的权利文件中遗漏了一些内容,但后来我认为这没有意义,因为我已经拥有了playback
。而且我在网上找不到 iTunes 的任何访问组列表(我什至尝试使用 sdef 从 iTunes 获取属性列表并搜索“访问组”但什么也没找到——它不存在)所以我不能确认我是否需要更多。
总而言之,为什么沙盒会阻止它工作?
ios - 目标 C:多次下载
我正在尝试制作一个从在线服务器下载 pdf 文件的应用程序。我所做的是创建了 3 个具有 3 个不同 URL 的按钮,并将其保存到应用程序的沙箱并在 iBooks 中打开它。
但它使应用程序崩溃,我有这个错误说......
这是我的代码:点击按钮:
打开文件:
我希望我能找到答案。