2015-03-31 18 views
8

Wir haben eine Anwendung geschrieben, Screensaver Ninja, die einen Bildschirmschoner für den Benutzer installiert, indem Sie es in ~/Library/Screen Savers kopieren. Das funktioniert gut in meiner Maschine und der anderen Entwickler-Maschine, aber in einem Testgerät, das ich habe, ist die Datei vorhanden, wenn ich den Bildschirmschoner aktivieren lasse, wählt er es aus, aber es erscheint nicht in der Liste:Warum zeigt ein neuer Mac meinen Bildschirmschoner nicht an?

enter image description here

Dies ist der Code, den wir es installieren verwenden:

func install() { 
    var err: NSError? 
    fileManager.copyItemAtURL(saverPackageUrl!, toURL: screensaversUrl!.URLByAppendingPathComponent("Ninja.saver"), error: &err) 
    if err != nil { 
     NSLog("Error installing Screensaver Ninja: \(err)") 
    } 
} 

und das ist, wie wir es als Standard auswählen:

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") 
} 

Dies ist, wie es aussieht, ist in meine eigene Maschine (was ich erwartet hatte) nach, dass Code ausgeführt wird:

enter image description here

Irgendwelche Ideen, warum wäre es nicht an einem unberührten Mac?

+0

Wo wird in dieser Frage programmiert? – riodoro1

+0

@ riodoro1 wir haben die App geschrieben, die Ninja.saver installiert, indem man sie in ~/Library/Screen Savers kopiert. Wir untersuchen, welche weiteren Aktionen wir ausführen müssen, um einen Bildschirmschoner auf MacOSX (auf einer fehlerfreien Maschine) zu installieren. – Pablo

+1

@ riodoro1 Ich kann den Code kopieren und einfügen, den wir verwenden, um die Datei zu kopieren, wenn das glücklich macht, aber ein sehr trivialer Code ist. – Pablo

Antwort

1

Was sind die Berechtigungen für den Test-Benutzer (könnten sie nicht-Admin sein?) Vs die für Sie und andere Entwickler (ich wette Admin oder root)?

Verwenden Sie chmod 777 Dateiname könnte es beheben.

+0

... auch nach GateKeeper-Unterschieden suchen. – Tommy