Sto scrivendo una semplice applicazione Mac progettata per essere eseguita in background ed eseguire determinate azioni ogni volta che l'utente fa clic sul pulsante del mouse. L'app è scritta in Python usando PyObjC. Sto usando addGlobalMonitorForEventsMatchingMask
guardare per NSLeftMouseDown
eventi:Monitoraggio degli eventi globali NSEvent in background
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSLeftMouseDownMask, handler)
Questo codice funziona perfettamente quando si esegue nel terminale. Tuttavia, quando lo aggrego come app standalone (usando py2app) e poi lo avvio, l'app non riceve alcun evento all'inizio. (O almeno, se lo fa, non esegue il codice nel mio metodo handler.) Solo quando faccio clic sull'app nel Dock inizia a ricevere eventi e, successivamente, continua a ricevere eventi anche dopo di esso ritorna in background. Ma non riceve nulla finché non viene attivato una volta.
La mia domanda è: come posso fare in modo che la mia app inizi a ricevere eventi non appena viene avviata, senza dover essere attivata prima facendo clic sull'icona del Dock? Si tratta di una stranezza nota di NSEvents
o forse c'è qualcosa di sbagliato nel mio ciclo di esecuzione in PyObjC?
Qualsiasi aiuto o guida è molto apprezzato!
Modifica: dopo ulteriori test, sembra che, in effetti, la mia app inizi a ricevere notifiche spontanee circa dieci secondi dopo il lancio, indipendentemente dal fatto che l'abbia attivata. Che è leggermente fastidioso, ma va bene.
Tuttavia, se corro l'applicazione sia con LSUIElement = true
o LSBackgroundOnly = true
nei miei notifiche Info.plist
(che in ultima analisi, voglio fare, dal momento che questa applicazione deve essere eseguito solo in background e non appaiono mai nel Dock), non ho mai ricevere. Quindi sono ancora bloccato.
Sei sicuro che questa riga venga eseguita all'avvio dell'app? – akaRem
Puoi pubblicare un [esempio minimo, completo, valido] (http://stackoverflow.com/help/mcve) che altri possono utilizzare per riprodurre e forse eseguire il debug del problema? – abarnert
controlla se soddisfa le linee guida di AppStore. ma se è per uso personale, provalo con Xcode. vuoi un esempio? –