2014-11-06 11 views
5

Sto costruendo un'app mac che voglio distribuire nell'app store mac. Ho bisogno di questa app per avere una funzione di blocco schermo.Blocca lo schermo del MacBook da un'app sandbox

Ho 2 approcci diversi che funzionano, il problema è che, non appena abilito il sandboxing per l'app (che è richiesto per l'app store mac), nessuno di questi approcci funzionerà.

Sapete quale diritto devo richiedere? O conosci un terzo approccio che funzionerà con il sandboxing?

Grazie

Approccio 1, utilizzando CGSession (SWIFT):

var arguments = ["-suspend"] 
var task = NSTask() 
task.arguments = arguments 
task.launchPath = "/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession" 
task.launch() 

Approccio 2, utilizzando IORequestIdle (SWIFT):

var r = IORegistryEntryFromPath(kIOMasterPortDefault, "IOService:/IOResources/IODisplayWrangler") 
if (r > 0) { 
    IORegistryEntrySetCFProperty(r, "IORequestIdle", kCFBooleanTrue) 
    IOObjectRelease(r) 
} 
+0

Sono felice con una soluzione Objective-C dal modo in cui – saintmac

+0

Qual è la necessità di blocco schermo? Trattamento dei dati personali? Protezione dati? Perché bloccare l'intero Mac e non solo la tua applicazione? Per bloccare l'intero Mac, chiedere all'utente di attivare Preferenze di Sistema> Sicurezza> "Richiedi password ... dopo il sonno o lo screen saver" e impostare un angolo attivo per inserire la sospensione dello schermo/salvaschermo. Dubito che questo possa essere fatto a livello di programmazione in quanto comporta diritti di amministratore. –

+0

Perché l'obiettivo è bloccare il mac. Non l'app. L'obiettivo è quello di offrire un "pulsante di blocco", non un tutorial su come bloccare il mac (che stiamo già facendo nel frattempo) Può essere fatto a livello di programmazione perché lo abbiamo già fatto con l'app fuori da Sandbox modalità. La domanda è su come farlo in modalità sandbox (per distribuire l'app) – saintmac

risposta

0

dispiace dire che non si può fare . Lo scopo del sandboxing è impedire che un'app possa prendere l'intero computer.

Si potrebbe provare a ottenere un'eccezione temporanea attraverso i canali documentati nella guida sandboxing.