2013-05-21 8 views
6

Devo aggiungere la pianificazione alla mia app. In modo che la mia app si avvii automaticamente ad una data e ora specificata. L'ho fatto facendo riferimento allo Scheduling Timed Jobs. Ho inserito il file Plist per la pianificazione in /Users/username/Library/LaunchAgents. Funziona bene nell'app non in modalità sandbox, ma non funziona in un'app sandbox. Non riesco ad aggiungere il file di pianificazione al percorso /Users/username/Library/LaunchAgents. Mi dà l'erroreCome aggiungere la pianificazione in un'app Sandboxed?

Error Domain=NSCocoaErrorDomain Code=513 "“com.sample.schedule.plist” couldn’t be copied because you don’t have permission to access “LaunchAgents”." UserInfo=0x100114f10 {NSSourceFilePathErrorKey=/Users/username/Library/Developer/Xcode/DerivedData/SchedulingInSandbox-cernhnigkuqhehbndryxlekpiiiu/Build/Products/Debug/SchedulingInSandbox.app/Contents/Resources/com.sample.schedule.plist, NSUserStringVariant=(
    Copy 
), NSDestinationFilePath=/Users/username/Library/LaunchAgents/com.sample.schedule.plist, NSFilePath=/Users/username/Library/Developer/Xcode/DerivedData/SchedulingInSandbox-cernhnigkuqhehbndryxlekpiiiu/Build/Products/Debug/SchedulingInSandbox.app/Contents/Resources/com.sample.schedule.plist, NSUnderlyingError=0x1001132d0 "The operation couldn’t be completed. Operation not permitted"} 

ho aggiunto il Sentiero LaunchAgents in Entitlements troppo.

<key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key> 
<array> 
    <string>/Library/LaunchAgents/</string> 
</array> 

Tuttavia, non riesco ancora ad aggiungere il plistaggio di scansione nella directory LaunchAgents. Se sto facendo correttamente o c'è un altro modo per fare la pianificazione in app sandbox.

EDIT 1:
Se creo manualmente la cartella in /Library/Containers/LaunchAgents e mettere il plist ci sto ottenendo questo errore:

Could not open job overrides database at: /private/var/db/launchd.db/com.apple.launchd.peruser.501/overrides.plist: 1: Operation not permitted 
launch_msg(): Socket is not connected 

risposta

1

prova a mettere il vostro plist lavoro in

/Users/<username>/Library/Containers/<my app identifier>/Data/Library/LaunchAgents/<my app identifier>.<somename>.plist 

Questo sarebbe il contenitore di dati per la tua app sandbox.

Guardando al mio Mac, vedo che FaceTime ha due elenchi di lavoro pianificati, che probabilmente è possibile utilizzare come esempio.

+0

Ma nei contenitori non è presente la directory LaunchAgents. Se devo crearlo da solo? – Aravindhan

+0

Una volta eseguito il sandbox, la maggior parte delle API di ricerca del percorso dovrebbero fornire i percorsi relativi appropriati (https://developer.apple.com/library/mac/#documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html). Ad esempio se si utilizza [NSHomeDirectory] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/ NSHomeDirectory) ti posizionerà nel contenitore per l'app. Quindi puoi semplicemente copiare o creare il tuo plist. – macshome

+0

Ho creato la directory e l'ho messa lì. Si prega di consultare la domanda aggiornata. – Aravindhan

Problemi correlati