Pregunta La aplicación Mac Sandbox pierde permisos de archivos para otras aplicaciones


Estoy desarrollando una aplicación que actualmente está en la zona de pruebas. Actúa como un editor de texto básico. Recientemente, quería probar lo que sucede cuando abro un archivo en mi aplicación y en otra aplicación al mismo tiempo, hago una actualización en una aplicación y luego la actualizo en la otra. Estoy usando Coda o BBEdit como mis editores alternativos. Si desactivo sandboxing, entonces este problema no existe. Sin embargo, dado que se requiere que las aplicaciones estén en la zona de pruebas desde el 1 de marzo, preferiría implementar una solución en lugar de esperar y ver.

Cuando abro ambos archivos y hago una edición en mi aplicación y luego cambio a la otra aplicación, los cambios se reflejan para que esos editores tengan la versión que acaba de guardar de mi aplicación. Sin embargo, si realizo el recuento de guardar desde su aplicación y luego pasar a la mía, no hay alegría. Sin realizar ninguna acción, la consola informa dos errores específicos: deny file-issue-extension y deny file-write-data. Parece que la aplicación está perdiendo privilegios para editar el documento, ya que fue modificado por un editor externo después de que se abrió el documento en mi aplicación. Si trato de guardar el archivo en mi aplicación, solicita duplicar el documento porque ha perdido el acceso al documento original. Esto no sucede al revés porque esas aplicaciones no se han incluido en la zona de pruebas y, por lo tanto, tienen permisos que mi aplicación no tiene. Tampoco parece que pueda evitar que la otra aplicación realice los cambios si no desea este comportamiento.

La documentación en developer.apple.com no menciona nada de este tipo de situación. No estoy seguro si este es el comportamiento previsto. Si es así, puedo decirle a mi usuario que los permisos del documento se han perdido y que debe guardar una nueva versión o volver a abrir el archivo. Si NO es el comportamiento previsto, ¿qué método de la API de NSDocument otorgará permiso al archivo una vez que se haya perdido? Supongo que la respuesta es la primera, que esto es intencionado, pero ¿alguien puede confirmar y hay documentación?


32
2018-01-12 16:14


origen


Respuestas:


Sin realizar ninguna acción, la consola informa dos errores específicos: deny file-issue-extension y deny file-write-data. Parece que la aplicación está perdiendo privilegios para editar el documento, ya que fue modificado por un editor externo después de que se abrió el documento en mi aplicación. Si intento guardar el archivo en mi aplicación, solicita duplicar el documento porque ha perdido el acceso al documento original

El comportamiento correcto en una situación como esta es no sobrescribir el archivo, sino indicarle al usuario si desea volver a cargar el documento, si es así, vuelva a cargarlo y luego escríbalo.

El sistema operativo está haciendo lo correcto al no permitir que una persona ciega escriba sobre un archivo que ha cambiado.

Ver NSFilePresenter - (void) presentedItemDidChange para ver si cambió. Vuelva a leer el archivo y luego vea si puede guardarlo. No dice que se le ha denegado una lectura en el archivo.

Además, como no has publicado ningún código, puede ser útil mostrar qué código estás usando para acceder al archivo y guardarlo. NSDocument ha integrado el manejo para algunos tipos de cambios de archivos en el entorno limitado.


1
2017-08-08 03:55



Llamemos a su aplicación ScottEdit y a su competidor como StackEdit

Podría haber varias cosas pasando. NSDocument tiene un método lockDocument. StackEdit puede haber bloqueado el documento y NO lo desbloqueó después de guardarlo. Si sale de la aplicación, el archivo debe estar desbloqueado y disponible para su aplicación. Si este es el caso, deberá crear una notificación para cuando los atributos del archivo cambien usando kqueue u otro.

Si la otra aplicación está "bloqueando" el acceso a tu aplicación. Puede enviar un correo electrónico a ese desarrollador y pedirle que actualice su aplicación para que desbloquee el documento después de guardarlo. Este último paso es adicional a la configuración de notificaciones porque otro desarrollador puede aparecer y hacer lo mismo (rompiendo su aplicación).


0
2017-08-03 14:16