4 votos

iPadOS: Creación de archivos en un recurso compartido SMB

Me ha surgido un nuevo problema, posiblemente desde el lanzamiento de iPadOS 14 (la semana pasada al momento de escribir este artículo), pero no estoy seguro de que no haya existido por más tiempo ya que han pasado algunas semanas desde la última vez que intenté hacer esto y funcionó. El problema es específicamente con crear archivos en un recurso compartido SMB.

La barra lateral de Archivos de mi iPad tiene un recurso compartido SMB (aburridamente llamado Shared y se encuentra en la máquina Linux en ~/Compartido ) exportado por Samba desde una estación de trabajo Ubuntu Linux en mi red doméstica, la misma red en la que está mi iPad.

Funciona bien para la edición de archivos, es decir, si abro un archivo desde una aplicación que admita la selección de archivos, o uso la propia aplicación de archivos para invocar una aplicación mediante una pulsación larga en un archivo en Compartido Puedo modificarlo, y esos cambios se propagan al almacenamiento de mi máquina Linux sin problemas.

También funciona para eliminar archivos mediante la aplicación Archivos, manteniendo pulsado el archivo en Compartido y seleccionando Borrar ahora .

El problema surge sólo cuando intento crear un nuevo archivo. Si copio un archivo en él por lo que considero el "método clásico de Windows" -buscando su ubicación original, pulsando prolongadamente para Copiar Navegando hacia Compartido y haciendo Pegar me sale: A cropped screenshot showing an error panel reading, “The operation couldn’t be completed. Operation canceled // Operation canceled // OK”

que es una lectura del panel de error,

La operación no pudo completarse. Operación cancelada
Operación cancelada
OK

Lo mismo ocurre si intento mover un archivo allí arrastrándolo.

Si intento guardar un archivo en Compartido directamente desde la hoja de exportación de una aplicación, obtengo lo mismo: A fullscreen screenshot from the Export panel of Vectornator showing an error panel reading, “The operation couldn’t be completed. Operation canceled // Operation canceled // OK”

He probado a reiniciar la máquina Linux y a expulsar y volver a montar el recurso compartido SMB en el iPad.

Una posible pista adicional: pensé que tal vez haciendo touch ~/Shared/two-boxes.svg en Linux antes de intentar la creación podría funcionar, ya que la edición de los archivos existentes funciona. Hice esto y luego traté de pegar el dos-cajas.svg archivo, y me salió el cuadro de advertencia de sobrescribir el archivo vacío:

A “Replace Existing Items?” dialog

que dice,

Sustitución de artículos existentes
El archivo "two-boxes" ya existe en esta ubicación. ¿Quiere sustituirlo por el que está copiando?
Sustituir
Mantener ambos
Stop

Curiosamente, si selecciono Sustituir Me aparece el mismo error "Operación cancelada", pero luego no two-boxes.svg archivo en absoluto se queda atrás. Por otro lado, si selecciono Mantener ambos No obtengo ningún error, pero tampoco ocurre nada: el archivo antiguo permanece y no se crea ningún archivo nuevo.

Una última pista posible: si entro en Compartido en la aplicación Files e intento crear un nuevo directorio, la propia aplicación Files se bloquea inmediatamente (me envía a la pantalla de inicio y cuando reinicio Files, reinicia su estado). Pero, curiosamente, aunque se cuelgue, ha funcionado: ¡el directorio se ha creado y es visible en Linux!

2voto

Trey Puntos 300

En respuesta a un comentario de Marian Rainer-Harbach En este sentido, quería sugerir una respuesta que no es 100% firme, pero que refleja mi mayor familiaridad con el iPadOS adquirida en los últimos ocho meses. Creo que la respuesta a mi pregunta es un firme "no": las aplicaciones de iOS y iPadOS (incluida la aplicación Archivos) no puede crear archivos en un recurso compartido externo, excepto en casos muy circunscritos.¹

La cuestión aquí es con sandboxing de aplicaciones :

Por lo general, las aplicaciones están restringidas a acceder a los archivos dentro de su propia caja de arena, es decir, los archivos y directorios con los que se instalaron. Aparte de los archivos temporales de la caché, este es el sólo forma en que las aplicaciones pueden dirigirse a los archivos simplemente por el nombre .

Esto es algo que he aprendido utilizando aplicaciones como la Blink ssh/mosh shell Pythonista, iVim, Termius y otras aplicaciones que pueden proporcionar un acceso similar al de la shell de Unix u otras formas de especificar archivos por nombre de ruta. He complementado este aprendizaje por experiencia con algo de investigación en los documentos de Apple Developer, pero no pretendo ser un experto en el desarrollo de aplicaciones.

Así, las aplicaciones de iPadOS pueden acceder a los archivos contenidos en su directorio sandbox, como /private/var/mobile/Containers/Data/Application/$appID o sus subdirectorios, por nombre (en modo lectura-escritura si así lo desean), pero en el exterior ese directorio (en supercarpetas o hermanos), sólo tienen acceso por nombre a los recursos de componentes compartidos de forma segura (casi siempre sólo en modo de lectura), y generalmente tienen ninguna visibilidad en las cajas de arena de otras aplicaciones.

Aún así, las aplicaciones de iPadOS puede Obviamente, acceder a los archivos en otro lugar en al menos dos circunstancias:

  1. Un directorio de Documentos de iCloud creado para la aplicación; y
  2. Archivos compartidos con la aplicación a través de una hoja Share.

El directorio de iCloud es creado por el desarrollador de la aplicación utilizando CloudKit, y tiene una convención de nomenclatura específica: en el shell de Blink, por ejemplo, los archivos que puedo encontrar en la aplicación Files bajo Parpadeo de iCloud Drive están disponibles en el shell Blink bajo el enlace simbólico ~/iCloud .

Si leo ese enlace simbólico, puedo encontrar:

blink> ls -l iCloud
lrwxr-xr-x  1 mobile  mobile  91 Mar 17 14:53 iCloud -> \
/private/var/mobile/Library/Mobile Documents\
/iCloud~com~carloscabanero~blinkshell/Documents

Así, las aplicaciones que utilizan CloudKit pueden "salir de su caja de arena", pero sólo hasta alcanzar lo que equivale a un segundo sandbox de iCloud, limitado a sus propios datos de Documentos de iCloud.

Por eso, desde la introducción de iPadOS (iOS > v13) y de la aplicación Files, algunas aplicaciones del iPad presentan una pantalla de apertura de archivos muy parecida a la de la aplicación Files; a través del UIDocumentBrowserViewController ofrecen al usuario la posibilidad de utilizar una interfaz similar a la de Finder para gestionar los archivos de una aplicación.

Sin embargo, por muy similares que parezcan ( así que similar, de hecho, que podría ser perdonado por pensar que era simplemente Files siendo utilizado como una aplicación de ayuda), hay una diferencia clave entre esto UIDocumentBrowserViewController y la aplicación Archivos: al pulsar iCloud Drive en la aplicación Archivos, encontrará un directorio que enumera todas las diversas aplicaciones compatibles con CloudKit que ha instalado, cada una de ellas como subdirectorios por los que puede navegar. Pero cuando se pulsa iCloud Drive en una aplicación utilizando el UIDocumentBrowserViewController se accede inmediatamente al subdirectorio Documentos de iCloud para esa aplicación ; no puedes "escapar" y mirar los documentos de otras aplicaciones de iCloud.

Compartir hojas son la otra forma en que las aplicaciones pueden acceder potencialmente a los archivos fuera de su caja de arena. Sin embargo, esto es iniciado por el usuario (a través de una operación de Compartir), y el objeto tipo archivo que la aplicación recibe es no accesible simplemente por el nombre de la ruta. No encontrarás una aplicación que incluya una lista de "Recientes" con los archivos compartidos a través de la hoja de Share, porque una vez que una aplicación ha perdido la referencia a un objeto de archivo que se le ha dado por handoff de la hoja de Share, ya no tiene forma de acceder a él de nuevo (a diferencia de los archivos en su propio sandbox, a los que puede acceder en cualquier momento por nombre).

Normalmente, eso significa que la aplicación que se está compartiendo no tiene la capacidad de crear un archivo - eso sería meterse en el sandbox de otra aplicación por su nombre y no está permitido.

(Hay una excepción para los "paquetes" -objetos en MacOS/iOS/iPadOS como aplicaciones que aparece en MacOS puedes hacer clic con el botón derecho en una aplicación en el Finder y elegir "Abrir paquete" para ver esto. Cuando los paquetes se comparten con los permisos adecuados, la aplicación compartida puede crear archivos dentro del paquete.

Si bien no responde completamente a todas mis preguntas, creo que estos antecedentes al menos explican el problema: excepto para los paquetes compartidos, las aplicaciones simplemente no pueden crear archivos en cualquier lugar, excepto dentro de su propia caja de arena. Mientras que la aplicación de archivos-como una utilidad del sistema-tiene un mayor acceso que otras aplicaciones de iPadOS/iOS para navegar por el árbol de archivos (incluyendo montajes de unidades de red), todavía no tiene el derecho de crear archivos fuera de su propia caja de arena por el nombre, que es lo que sería necesario para permitir la funcionalidad que estaba preguntando.

Mientras que el sandboxing de aplicaciones existe en MacOS -para todas las aplicaciones instaladas desde la tienda, y también para muchas otras aplicaciones, ya que Apple ha presionado a los desarrolladores para que implementen el sandboxing de aplicaciones en sus aplicaciones de MacOS- es una medida de seguridad siempre presente en iOS y iPadOS que, a diferencia de MacOS, no puede ser ignorado por los desarrolladores ordinarios, ni siquiera con la coöperación de los usuarios (suponiendo que no hayan hecho jailbreak a sus dispositivos).

El Finder es una aplicación de MacOS que no está sujeta a las reglas de sandboxing. La aplicación Archivos de iPadOS parece Finder, por lo que en su primera introducción era quizás razonable que los usuarios esperaran que trabajar como Finder, también. Pero como aplicación de iOS/iPadOS, aunque tenga acceso especial, Files tiene que seguir (la mayoría de) las reglas, es decir, no crear archivos en lugares aleatorios de la jerarquía del sistema de archivos.


¹ Esta discusión no se refiere realmente al almacenamiento Secure Enclave, que tiene su propio conjunto de requisitos, totalmente separado. Pero debería ser obvio que los conceptos de "almacenamiento seguro en enclave" y "almacenamiento en red" no pueden solaparse.

Por eso estoy publicando esta respuesta a mi propia pregunta, pero no la acepto a menos que reciba un número de votos positivos que sugieran que es, de hecho, la respuesta correcta; tal vez los comentaristas tengan correcciones o sugerencias.

También hay una excepción cuando una aplicación comparte un subdirectorio propio con otra aplicación; en el intérprete de comandos Blink, por ejemplo, se puede utilizar el comando open para dar, por ejemplo, acceso a un editor a los archivos de texto dentro de un subdirectorio de documentos de Blink. Pero incluso en este caso, esto sólo permite a la otra aplicación abrir y exportar a los archivos en el directorio extranjero; no obtiene acceso completo de lectura y escritura.

1voto

gyre Puntos 11

Habiendo sufrido el mismo problema desde ios/ipados 14.5, me cambié al uso de la app secure shellfish que no parece estar afectada por estos problemas en particular. Me pregunto si el autor de esa app, Anders, que también es el autor de Working Copy podría tener alguna idea.

Creo que una solución como ésta es mejor que luchar contra las cajas de arena.

0voto

RichBos Puntos 1

Yo también empecé a experimentar este problema (a un recurso compartido SMB en mi servidor de medios Ubuntu 20), más frustrante de hecho y fui a través de todas las rutas mencionadas aquí para volver a crear el recurso compartido smb, comprobar los permisos del servidor, etc.

Crear nuevos archivos/carpetas o editar los existentes (archivos/carpetas) directamente en el recurso compartido está absolutamente bien, pero copiar/mover archivos/carpetas del almacenamiento local del iPad o de iCloud no iría en absoluto.

Después de un tiempo trabajando con varias aplicaciones y métodos descubrí que si optaba por 'Compartir' el archivo desde https://skyjos.com/fileexplorer/ y elija la ubicación de la cuota del servidor requerido desde la ventana de opciones, entonces se copió. No estoy seguro de cómo/si 'Compartir' (a diferencia de copiar/mover) podría utilizar un conjunto diferente de propiedades, pero lo que está pasando detrás de las escenas que funcionó para mí.

Tengo la versión completa del Explorador de archivos, así que no estoy seguro de si el método de compartir también funciona en la versión gratuita.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X