问题标签 [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.
cocoa - Lion Sandboxing 崩溃报告位置
我刚刚将我的 Lion 应用程序沙箱化,并注意到崩溃报告仍在发送到 ~/Library/Logs/CrashReporter。有没有办法将它们保存在 Container Logs 目录中?
objective-c - 如何在沙盒应用程序中获取用户主目录?
NSHomeDirectory()
正在重新调整我的沙箱根目录,而不是我的主目录。[@"~" stringByExpandingTildeInPath]
正在做同样的事情。
这/Users/username/Library/Containers/appID/Data
就是被退回的东西。我怎么得到/Users/username/
?
macos - CFMessagePort 和沙盒
我正在调整 MacOS 应用程序以使用沙盒。当我尝试在控制台中使用“拒绝 mach-lookup”消息调用 CFMessagePortCreateRemote 时,它使用了一个帮助应用程序(同一包中的一个 exe),该应用程序失败。
我可以看到com.apple.security.temporary-exception.mach-lookup.global-name
授权密钥可以解决这个问题,但这只是暂时的。
有没有办法在沙盒应用程序中使用 mach 端口实现两个应用程序之间的通信?
错误:
*** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', 端口 = 0x14807, name = 'XXXYYYZZZZ.MyAppGroupName'
objective-c - OS X 沙盒:LSOpenFromURLSpec() 返回 -10827
我们正在使用一个小助手应用程序在登录后启动我们的主应用程序。但是我们无法启动我们的主应用程序,因为 LSOpenFromURLSpec() 返回错误代码 -10827。
我们是否正在使用并不重要:
或者:
它每次都返回错误。我们怎样才能解决这个问题?
objective-c - 创建安全范围的书签时遇到问题
我正在将我的 Lion 应用程序转换为使用应用程序沙盒。我正在尝试利用 10.7.3 中引入的安全范围书签功能来允许对文件夹进行持久访问。我在下面的代码返回一个 nil 书签,并产生以下日志消息:XPC couldn't look up the Mach service for scoped bookmarks agent
.
我将User Selected File Access
权利设置为Read/Write Access
,并尝试使用和不使用周围的..AccessingSecurityScopedResource
调用。
我认为我根据文档做的一切都是正确的,所以我会很感激任何指示。在我开始对应用程序进行沙盒处理之前,该代码正在检索一个纯 URL。
更新 (x3)
现在我让它工作了,我可以验证在上面的代码中调用-startAccessingSecurityScopedResource
and-stopAccessingSecurityScopedResource
是不必要的,因为 Powerbox 在用户在NSOpenPanel
.
如果您从另一个安全范围的 URL 创建书签,例如从另一个应用会话中创建的应用范围的书签创建文档范围的书签,那么您需要首先访问该文件。
macos - 我应该担心“范围内的书签代理连接中断”日志消息吗?
我正在对我的 Mac 应用程序进行沙盒处理,并且正在使用 OS X 10.7.3 的安全范围书签功能来保留对应用程序沙箱之外文件的引用。我的所有代码似乎都可以正常运行,但最终我在应用程序的输出中重复了数百次以下消息(对于相对简短的操作)。
这是一个问题吗?这让我觉得我做错了事,但我不确定那可能是什么。
objective-c - 沙盒打开了,是否有更多的 Objective-C 方式来打开一个 com 端口?
现在我得到了以下课程,但它不起作用。它在open
通话中失败。我认为这是因为沙盒,但我不确定如何前进。这看起来也像 C 一样,有没有更好的 Objective-C (IOKIT?) 方法来解决这个问题?
设备本身是一个 USB 串行端口。
给出的错误:
打开设备失败:不允许操作
当前代码:
当前权利:
objective-c - 应用沙盒:文档范围的书签无法解析;不返回任何错误
我正在对我的应用程序进行沙箱处理,并尝试允许导入/导出多个文件,使用 XML 文件来引用它们。为了允许我的应用程序(或其他沙盒应用程序)访问 XML 中列出的文件,我还包括一个序列化的安全范围书签。我正在按照这个答案中的描述对其进行序列化,并且我的单元测试(不是沙盒)可以毫无问题地写入和读取 XML 数据。当我的应用程序解析书签时,NSURL
返回为零,NSError
参考也是。既然我不认为应该是这样,为什么会这样?我可以通过提示用户选择带有 . 的文件/目录来解决这个问题NSOpenPanel
,但我仍然希望书签能够正常工作。
在测试项目中重现
要在家中重现,请在 Xcode 中创建一个新的 Cocoa 应用程序,并为项目中的文件使用以下 Gist:https ://gist.github.com/2582589 (使用正确的 next-view 循环更新)
然后,按照Apple 的说明对项目进行代码签名。您可以通过按顺序单击按钮来重现问题(我以rdar://11369377的形式提交给 Apple)。您选择磁盘上的任何文件(在应用程序容器之外),然后选择要导出到的 XML,然后要导入相同的 XML。
希望你们能够帮助我弄清楚我做错了什么。要么我做错了,框架错误地保持自己的状态,要么我做对了,但它完全坏了。我尽量不怪框架,那是什么?还是有另一种可能?
示例代码
将 XML 导出到docURL
:
从以下位置导入 XML docURL
:
我尝试用 包围这个调用[docURL ..AccessingSecurityScopedResource]
,这没有任何区别(正如预期的那样,因为在打开面板中选择 docURL 后,它已经在范围内
另外,我在我的app.entitlements
文件中指定了以下内容:
如上所述,第二步(解析书签)完成了,但两者都为error
空result
。由于我一直在实施沙盒,所以我犯的大多数错误都导致NSError
返回,这帮助我解决了这个错误。但是现在没有错误,也没有解析 URL。
其他故障排除步骤
我尝试将 XML 文件放入我的应用程序的沙箱中,但没有任何区别,因此访问 XML 文件不是问题
该应用程序使用 ARC,但单元测试也是如此,它成功了。我也尝试使用 alloc/init 而不是 autoreleased 类方法(以防万一)
我在创建书签后立即粘贴了 URL 解析代码,它运行良好,生成了一个安全范围的 URL
我
po
在最初创建的书签(序列化之前)上做了一个,然后在反序列化后的书签上做了一个,它们匹配 100%。序列化不是问题我用 替换了分辨率调用
CFURLCreateByResolvingBookmarkData(..)
,没有任何变化。如果它是一个错误,它存在于 Core Foundation API 以及 Cocoa 层中指定值
bookmarkDataIsStale:
无效如果我指定
0
foroptions:
,那么我会返回一个有效的 NSURL,但它没有安全范围,因此后续读取文件的调用仍然失败换句话说,反序列化的书签似乎是有效的。如果书签数据已损坏,我怀疑 NSURL 是否可以用它做任何事情
NSURL.h
没有包含任何有用的评论来指出我做错了什么
是否有其他人在沙盒应用程序中成功使用安全范围的文档书签?如果是这样,你在做什么和我不一样?
操作系统版本请求
可以访问 Mountain Lion 测试版的人可以验证我的示例项目是否显示相同(缺少)错误?如果是 Lion 之后修复的 bug,我就不用担心了。我还没有加入开发者计划,所以没有访问权限。我不确定回答这个问题是否会违反 NDA,但我希望不会。
cocoa - 从沙盒应用程序启动助手
我有一个沙盒应用程序。每次启动时,我都需要它来启动一个帮助应用程序(从主应用程序的包中)。但是,这失败了:
错误是:
应用程序“Helper”无法启动,因为它已损坏。,NSUnderlyingError=0x10214c700“操作无法完成。(OSStatus 错误 -10827。)”}
现在,该错误具有误导性,因为如果我禁用沙盒权利,应用程序将正常启动。显然这是一个错误,如此处所报告。
我的问题是:有解决方法吗?
我可以使用SMLoginItemSetEnabled
,如此处所述:
通过
true
立即启动助手应用程序并指示每次用户登录时都应启动它。通过false
终止助手应用程序并指示用户登录时不应再启动它。
但是,由于 App Store Review Guideline 2.26,我不能在不先询问用户的情况下使用这个 API:
未经用户同意设置为自动启动或在启动或登录时自动运行其他代码的应用程序将被拒绝
因此,使用此解决方法意味着询问用户“每次登录时启动帮助程序是否可以?如果不是,您将无法使用此应用程序!” 显然,这并不理想...
cocoa - Mac App Store 中是否允许绕过系统打印对话框的应用程序?
当您想通过 Mac App Store 发布应用程序时,是否允许(也考虑沙盒)让您的应用程序绕过系统打印对话框并直接与打印机对话?
我知道您应该尽可能使用系统打印对话框。不过,这适用于具有特殊色彩管理要求的特殊应用程序。