licencia desarrollador apple ios swift xcode ios11

ios - desarrollador - portal apple



El acceso a la biblioteca de fotos iOS11 es posible incluso si la configuraciĆ³n se establece en "nunca" (4)

De acuerdo, puedes juntar todo esto a partir de respuestas y comentarios, pero para intentar contar una historia más completa ...

En iOS 11, UIImagePickerController ejecuta como un proceso separado de su aplicación. Eso significa:

  1. Su aplicación no puede ver la biblioteca completa de fotos del usuario: obtiene acceso de solo lectura para los recursos que el usuario elija en el selector de imágenes.
  2. Debido a (1), su aplicación no necesita la autorización de privacidad estándar para acceder a la biblioteca de fotos. El usuario elige explícitamente un activo específico (o múltiple) para su uso en su aplicación, lo que significa que el usuario le otorga permiso a su aplicación para leer el (los) activo (s) en cuestión.

Puedes ver más sobre esto en la charla de WWDC17 en PhotoKit .

(Por cierto, este modelo coincide con lo que ha visto en el marco de Contactos desde iOS 9; si muestra el selector de contactos, su aplicación solo recibe una sola vez la información de contacto de los contactos que el usuario seleccionó, no acceso de lectura / escritura en curso a la base de datos de Contactos, por lo que el selector de contactos no requiere un permiso de privacidad especial.)

PHPhotoLibrary y su estado de autorización reflejan el permiso global de lectura / escritura para el acceso a las fotos que los usuarios pueden controlar desde Configuración> Privacidad. (Ese es el lugar en el que su Info.plist necesita NSPhotoLibraryUsageDescription ). Cualquier uso de la API PHPhotoLibrary requiere este permiso, independientemente de si el uso de esa aplicación de la API es solo para escribir o para leer. Esto ha sido cierto desde que PhotoKit se introdujo en iOS 8.

Si no está utilizando PHPhotoLibrary , PHAsset , etc., hay opciones de permisos más estrechos que son nuevas en iOS 11 (y no son parte de la API Photos.framework):

  • Como se indicó anteriormente, UIImagePickerController no necesita un permiso de configuración de privacidad general porque cada uso otorga acceso de lectura por única vez para los activos específicos elegidos.
  • Si solo necesita agregar nuevos activos a la biblioteca de fotos, use UIImageWriteToSavedPhotosAlbum o UISaveVideoAtPathToSavedPhotosAlbum . Con esos, puede poner NSPhotoLibraryAddUsageDescription en su lista de información. Luego, la Configuración de privacidad del sistema dejará en claro al usuario que no está dando su permiso para ver o modificar los activos existentes, solo para agregar nuevos.

    Si el usuario otorga el permiso de agregar solo, se aplica solo a esas funciones de UIKit; el intento de usar PHPhotoLibrary aún solicitará (y requerirá la clave de Lista de información para) el acceso de lectura / escritura.

    Vea esta parte de la charla sobre WWDC17 para obtener más información sobre la configuración de privacidad de solo agregar.

if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { let imagePicker = UIImagePickerController() imagePicker.sourceType = .photoLibrary imagePicker.allowsEditing = true self.present(imagePicker, animated: true, completion: { }) }

Incluso si configuro el acceso a Fotos en Configuración en "Nunca" con el código anterior, todavía puedo presentar el selector de imágenes y mostrar fotos. Verificaré PHPhotoLibrary.authorizationStatus() antes de mostrarlo, pero me gustaría saber si es este comportamiento esperado.


Este (nuevo) comportamiento me suena lógico, he aquí por qué. Al usar UIImagePickerController tu aplicación no obtiene acceso a ninguna foto. Solo ve el que su usuario ha elegido, cuando eso sucede; y si el usuario pulsa Cancelar en el selector, ninguno de ellos estará disponible para la aplicación.

PHPhotoLibrary es parte de un marco separado, Photos , donde puedes hacer muchas cosas con la biblioteca de fotos del usuario y, por lo tanto, necesitas permiso.

Por lo tanto, si solo está utilizando UIImagePickerController , sugeriría no mezclar cosas de Photos.

Descargo de responsabilidad: no he oído hablar de ninguna declaración oficial de la gente de Apple. Este hilo del foro parece relevante, tal vez obtengamos una respuesta allí.

Además, si eres lo suficientemente malo, teóricamente puedes UIImagePickerController con la jerarquía de vistas de UIImagePickerController en el tiempo de ejecución y examinar lo que el usuario ve allí. Pero eso es otra vez para Apple con quien lidiar, deberíamos ser agradables :-)


UIImagePickerController y PHPhotoLibrary responsables de diferentes áreas.

Debe verificar tanto el estado de autenticación como la disponibilidad de la fuente.

Estado de autorizacion

Información sobre la autorización de su aplicación para acceder a la biblioteca de fotos del usuario.

isSourceTypeAvailable

Discusión

Debido a que es posible que una fuente de medios no esté presente o no esté disponible , es posible que los dispositivos no siempre admitan todos los tipos de fuentes.

Por ejemplo , si intenta seleccionar una imagen de la biblioteca del usuario y la biblioteca está vacía, este método devuelve falso. De manera similar, si la cámara ya está en uso, este método devuelve falso.


¿Es este el comportamiento esperado? - si

De los documentos: https://developer.apple.com/documentation/uikit/uiimagepickercontroller/1619144-issourcetypeavailable

true si el dispositivo admite el tipo de fuente especificado; Falso si el tipo de fuente especificado no está disponible.

Le informa si el dispositivo es compatible con el tipo de fuente y no si la aplicación tiene permiso para acceder a él.

Como ya mencionó en la pregunta, PHPhotoLibrary.authorizationStatus() sería la forma correcta de verificar esto.