我们编写了一个应用程序Screensaver Ninja,它通过将屏幕保护程序复制到〜/ Library / Screen Savers来为用户安装屏幕保护程序。这在我的机器和其他开发人员的机器上运行良好,但在我拥有的测试机器中,文件在那里,如果我让屏幕保护程序激活,它会选择它,但它不会出现在列表中:
这是我们用来安装它的代码:
func install() {
var err: NSError?
fileManager.copyItemAtURL(saverPackageUrl!, toURL: screensaversUrl!.URLByAppendingPathComponent("Ninja.saver"), error: &err)
if err != nil {
NSLog("Error installing Screensaver Ninja: \(err)")
}
}
这就是我们选择它作为默认值的方式:
func setAsDefault() {
var mutable: NSMutableDictionary
if let moduleDict = CFPreferencesCopyAppValue("moduleDict", "com.apple.screensaver") as? NSDictionary {
mutable = moduleDict.mutableCopy() as NSMutableDictionary
} else {
mutable = NSMutableDictionary()
}
mutable.removeObjectForKey("displayName")
mutable["moduleName"] = "Ninja"
mutable["path"] = saverPath
mutable["type"] = 0
CFPreferencesSetValue("moduleDict", mutable as CFPropertyList, "com.apple.screensaver", kCFPreferencesCurrentUser, kCFPreferencesCurrentHost)
CFPreferencesAppSynchronize("com.apple.screensaver")
}
这是在运行该代码后它在我自己的机器中看起来的样子(我的预期):
为什么它不会在原始mac上工作的任何想法?
答案 0 :(得分:1)
对于您和其他开发者(我打赌管理员或root用户),测试用户(可能是非管理员?)的权限是什么?
使用chmod 777文件名可能会修复它。