2012-08-30 12 views
6

Necesito mi aplicación de espacio aislado para volver a abrir un archivo abierto después de que se reinicie la aplicación. Apple proporciona marcadores de ámbito de seguridad con las opciones NSURLBookmarkCreationWithSecurityScope y NSURLBookmarkResolutionWithSecurityScope en la creación de marcadores NSURL y métodos de resolución. Sin embargo, estos indicadores/opciones solo son buenos para 10.7.3 o posterior y hacen que una aplicación anterior a 10.7.3 falle.Mac App Store espacio aislado y manejo de marcadores de ámbito de seguridad anteriores a 10.7.3

¿Cómo manejo la retención/reapertura del marcador de archivo para 10.6 a 10.7.3 en una aplicación de espacio aislado?

-

SEGUIMIENTO: Por favor, vea mi respuesta a continuación. El problema no fue causado por el uso de NSURLBookmarkCreationWithSecurityScope sino mediante el uso de los métodos de inicio y detención del marcador de seguridad.

+0

Supongo que probablemente no pueda. Esta fue una deficiencia en su enfoque de sandboxing, y el mecanismo extra se agregó debido a eso. Y Apple no respalda las cosas ... – Thilo

+2

¿Estás seguro de que esa es la causa de la falla? Tengo una aplicación (en MAS) que usa '[NSURL URLByResolvingBookmarkData: opciones de marcador: NSURLBookmarkResolutionWithSecurityScope relativeToURL: nil bookmarkDataIsStale: NO error: nil];' que funciona bien en máquinas 10.6.8. – Patrick

+0

@Patrick - ¿Funciona bien en 10.7 - 10.7.2? (La zona de pruebas no está operativa en 10.6.8 y la resolución de la URL puede ignorar cualquier información de seguridad añadida por 10.7.3+, simplemente adivinar) – CRD

Respuesta

9

Resulta que usar NSURLBookmarkCreationWithSecurityScope no causa un problema con 10.7 - 10.7.2. Lo que causa la falla es llamar al -[NSURL startAccessingSecurityScopedResource]: que no es compatible con 10.7.3. Por lo tanto, debe ajustar las llamadas a este método (y el método de parada correspondiente) con una comprobación de sistema operativo o una comprobación respondsToSelector. Probé que el marcador sigue funcionando en 10.7.1 siempre que se asegure de no llamar a inicio/parada.

Éstos son algunos fragmento de código para el uso de respondsToSelector que ayudará a cualquier otro que se ejecutan en este problema:

Utilice esta opción para iniciar el uso de:

if([bookmarkFileURL respondsToSelector:@selector(startAccessingSecurityScopedResource)]) { // only supported by 10.7.3 or later 
    [bookmarkFileURL startAccessingSecurityScopedResource]; // start using bookmarked resource 
} 

Y esto para detener el uso de:

if([bookmarkFileURL respondsToSelector:@selector(stopAccessingSecurityScopedResource)]) { // only supported by 10.7.3 or later 
    [bookmarkFileURL stopAccessingSecurityScopedResource]; // stop using bookmarked resource 
} 
+1

¿Por qué no simplemente usar respondsToSelector en lugar de verificar la versión del sistema operativo? –

+0

@ Ben-Uri Tiene razón, 'respondsToSelector' es una mejor implementación que comprobar la versión del sistema operativo. Actualicé la respuesta. – spurgeon

Cuestiones relacionadas