像"defaults write com.blahblah key true"这样的命令是私有 API 吗?



Mac App Store指南说你不能使用私有api。

我正在玩一个应用程序,它使用终端命令设置showAllFiles为true来修改Finder设置:

defaults write com.apple.Finder AppleShowAllFiles TRUE

是否有办法能够提交这样的东西到Mac App Store?对我来说,它似乎是一个私有API。我的问题是:是否存在公共等价物?

我认为这取决于你如何执行这个命令。你使用什么C/ObjC api来执行这个?当然有一些公共api可以用来执行这个命令。

但是,需要注意的是,从2012年3月开始,苹果将要求提交到Mac App Store的应用采用他们的"沙盒"方案。文档:

http://developer.apple.com/library/mac/文档/安全/概念/AppSandboxDesignGuide/AboutAppSandbox AboutAppSandbox.html

我怀疑在沙盒应用程序中执行这个命令(即使是通过公共api)将需要你声明需要一个特殊的权限。更多关于权利的详细信息:

http://developer.apple.com/library/mac/文档/杂项/引用/EntitlementKeyReference/介绍/AboutEntitlements.html % 23//apple_ref/doc/uid/TP40011195

具体来说,我认为你可能需要这个"临时授权":

com.apple.security.temporary-exception.files.home-relative-path.read-write

,因为我认为在像Finder这样的应用程序中写入用户默认值需要写入用户home目录下的磁盘文件:

~/Library/Preferences/com.apple.finder.plist

我假设您尝试使用NSUserDefaults,发现它没有真正的能力更改其他应用程序的设置。幸运的是,CFPreferences API就是为这种目的而存在的,它可以修改任何bundle标识符下的设置。

也就是说,其他应用程序的实际设置是这些应用程序私有的实现细节;即使你没有使用未记录的工具/API,你也会对另一个进程进行更改,这可能会违反App Store规则。

最新更新