2012-11-25 2 views
7

Sembra che ci sia un problema con TOpenDialog in un'applicazione Firemonkey, che è in modalità sandbox per il Mac Appstore. Io uso XE3, ma è presente anche in XE2. in realtà ho trovato un rapporto di controllo di qualità qui, ma è ancora irrisolto:TOpenDialog/NSOpenPanel non funziona in un'app Delphi in modalità sandbox

http://qc.embarcadero.com/wc/qcmain.aspx?d=105344

Qualcuno ha avuto lo stesso problema, o tutte le idee su come lavorare intorno ad esso?

È molto facile da controllare. Basta mettere un TOpenDialog su un modulo e chiamare il metodo Execute. Iscriviti e sandbox l'applicazione in base alle istruzioni Embarcadero:

http://docwiki.embarcadero.com/RADStudio/en/Mac_OS_X_Application_Development

Quando Esegui viene chiamato c'è un ritardo, l'applicazione si blocca per un attimo, ma non appare nulla. Non ci sono eccezioni o messaggi di errore. Se l'app non è in sandbox, la finestra di dialogo funziona correttamente.

Anche questo codice non funziona, quindi il problema è probabilmente da qualche parte nel TNSOpenPanel, che viene chiamato da TOpenDialog, ma sfortunatamente non sono riuscito a trovarlo.

var 
    LOpenDir: NSOpenPanel; 
begin 
    LOpenDir := TNSOpenPanel.Wrap(TNSOpenPanel.OCClass.openPanel); 
    LOpenDir.runModal; 
    LOpenDir.release; 

ho letto nel Apple docs che con la Sandbox NSOpenPanel è derivato da classi diverse, rispetto a quella senza sandbox. Immagino che questa sia la causa del problema.

Qualsiasi idea sarebbe molto apprezzata. Non possiamo davvero pubblicare un'app che deve funzionare con i file senza finestre di dialogo Apri/Salva :)

A proposito, ho provato diverse combinazioni delle autorizzazioni in Opzioni progetto, ma non hanno avuto alcun effetto.

+0

Ho ricevuto lo stesso problema, qualche soluzione? Grazie. – RRN

+0

Purtroppo non ho ancora trovato una soluzione. L'unica cosa positiva è che il problema appare su OSX 10.7, ma non su 10.8. Finora l'unica soluzione nella mia app è stata quella di disabilitare la funzionalità 'Sfoglia' quando è stata eseguita su 10.7 e utilizzare solo le opzioni di trascinamento. – VGeorgiev

risposta

0

Quando un'applicazione è in sandbox, NSOpenPanel/NSSavePanel deve essere gestito da un modulo trasparente denominato Powerbox. I normali pannelli del framework AppKit non hanno alcun effetto. Ma per abilitare Powerbox per l'accesso al filesystem, l'elenco delle autorizzazioni dovrebbe includere

com.apple.security.files.user-selected.read-write YES 

configurazione.

+0

Sì, ho già provato ad aggiungere questo ai diritti, ma non cambia il comportamento. C'è qualcosa di specifico che dovrei chiamare OpenPanel con il modulo Powerbox? Penso di no, ma comunque ... – VGeorgiev

+0

Ciao Georgiev, proverò a scrivere qui la risposta non appena troverò una soluzione. –

+0

Ciao, sto cercando di rigenerare il tuo errore, tuttavia non sono riuscito a codificare l'applicazione. Ho ricevuto l'errore: formato file oggetto non riconosciuto, non valido o non adatto. Hai mai affrontato questa situazione e come hai potuto codificare la tua app? –