This document is also available in English: CHANGELOG.md
Todos los cambios notables en ImagePickerKMP serán documentados en este archivo.
El formato está basado en Keep a Changelog, y este proyecto sigue Semantic Versioning.
-
Enum
CameraScaleType— tipo de escala configurable para la vista previa de la cámara (Android)- Nuevo enum
CameraScaleType:FILL_CENTER,FILL_START,FILL_END,FIT_CENTER,FIT_START,FIT_END - Controla cómo se escala la vista previa de la cámara dentro de su viewport en Android
- Los valores
FILL_*rellenan el viewport completamente, recortando el feed de la cámara para que encaje - Los valores
FIT_*muestran todo el feed con letterbox — el encuadre del visor coincide exactamente con la imagen capturada - Actualmente aplicado solo en Android; iOS usa la UI de cámara del sistema
- Nuevo
CameraCaptureConfig.cameraScaleType: CameraScaleType— por defectoCameraScaleType.FILL_CENTER(mantiene comportamiento anterior)
- Nuevo enum
-
PermissionAndConfirmationConfig.confirmationImageContentScale— escala configurable en pantalla de confirmación- Nuevo parámetro
confirmationImageContentScale: ContentScaleenPermissionAndConfirmationConfig - Controla cómo se escala la foto capturada en la pantalla de confirmación post-captura (Android)
- Acepta cualquier valor de
ContentScalede Compose:Crop,Fit,FillWidth,FillHeight,FillBounds,Inside,None - Por defecto
ContentScale.Crop(mantiene comportamiento anterior)
- Nuevo parámetro
- Todos los comentarios en español dentro del código fuente traducidos al inglés
- Nueva extensión
PhotoResult.absolutePathpara acceso directo a rutas del sistema de archivosPhotoResult.absolutePath: String?— retorna la ruta absoluta del sistema de archivos como String (implementación específica por plataforma)- Implementaciones por plataforma:
- Android: Usa ContentResolver para resolver URIs content:// a rutas de archivo reales
- iOS: Usa URL.path para extraer la ruta del sistema de archivos
- Desktop/Web: Extracción directa de ruta desde URIs file://
- Permite acceso directo al sistema de archivos sin parseo manual de URI
- Complementa la extensión existente
toPath()para compatibilidad con kotlinx-io
- Mejoras internas menores y optimizaciones
- Android — La vista previa de la cámara ahora se muestra correctamente en Android 7–11 (API 24–30)
- Causa raíz:
PreviewViewestaba hardcodeado aImplementationMode.PERFORMANCE(SurfaceView), que no se renderiza dentro de Jetpack Compose en Android ≤ API 30, resultando en una vista previa de cámara negra/en blanco - Solución:
PreviewViewahora usaImplementationMode.COMPATIBLE(TextureView) en Android ≤ API 30, asegurando renderizado correcto en todas las versiones soportadas de Android - Archivos modificados:
HighPerformanceConfig.requiresCompatibilityMode()ahora retornatrueparaSDK_INT <= 30(antes soloSDK_INT == 29)CameraCapturePreview.ktahora estableceimplementationModecondicionalmente según la versión de AndroidsetLayerType(LAYER_TYPE_HARDWARE)ya no se aplica en Android ≤ API 30, eliminando el conflicto con TextureView- El delay de inicialización de cámara en
CameraController.ktahora se aplica a Android 7–11 (antes solo Android 10), previniendo errores de surface-not-ready en dispositivos antiguos
- Causa raíz:
- Nueva extensión
PhotoResult.toPath()para operaciones de archivo multiplataformaPhotoResult.toPath(): Path?— convierte el URI de la foto a unkotlinx.io.files.Pathpara operaciones de archivo multiplataforma (Android, iOS, Desktop, Web)- Permite manipulación de archivos multiplataforma usando APIs de kotlinx-io
- Retorna
nullsi la conversión falla - Requiere dependencia
kotlinx-io
- Kotlin actualizado a
2.3.20 - Compose Multiplatform actualizado a
1.10.3 - Android Gradle Plugin actualizado a
8.13.2 - Mejoras menores de estabilidad
- Documentación mejorada para las extensiones disponibles de
PhotoResult - Ejemplos corregidos en README para uso de rutas de archivo
ImagePickerLauncher— marcado con@Deprecated(level = WARNING). La función sigue compilando y ejecutándose normalmente, pero el compilador emite una advertencia de migración apuntando arememberImagePickerKMP. Será eliminada en una versión mayor futura.- Migración: Reemplaza
ImagePickerLauncher(config = ImagePickerConfig(...))conval picker = rememberImagePickerKMP(...)+picker.launchCamera()
- Migración: Reemplaza
GalleryPickerLauncher— marcado con@Deprecated(level = WARNING)por el mismo motivo.- Migración: Reemplaza
GalleryPickerLauncher(...)conval picker = rememberImagePickerKMP(...)+picker.launchGallery()
- Migración: Reemplaza
Nota — decisión arquitectónica:
rememberImagePickerKMPllama internamente aImagePickerLauncher/GalleryPickerLauncher(son la capa de renderizado específica de cada plataforma). El punto de llamada interno está anotado con@Suppress("DEPRECATION")para que los usuarios de la nueva API no vean advertencias. Solo los desarrolladores que llaman directamente a la API heredada ven la advertencia de migración.
- BREAKING: La versión mínima de Kotlin es ahora 2.3.20
- Esta librería está compilada con Kotlin 2.3.20. La ABI de KMP de Kotlin no es compatible hacia atrás entre versiones mayores.
- Los proyectos que usen Kotlin < 2.3.x fallarán en compilación con un error como
ABI version X.Y.Z is incompatible with current Kotlin compiler. - Migración: Actualiza la versión de Kotlin de tu proyecto a
2.3.20o superior. - Si necesitas quedarte en Kotlin 2.1.x, usa la versión anterior de esta librería.
- Kotlin actualizado de
2.1.21→2.3.20 - Compose Multiplatform actualizado de
1.9.1→1.10.3(requiere Kotlin 2.3.x) - Plugin Compose Compiler actualizado de
2.0.21→2.3.20(debe coincidir exactamente con la versión de Kotlin) - Ktor actualizado de
3.0.2→3.4.1(compilado con Kotlin 2.3.x, requiere consumidor Kotlin 2.3.x) - Lifecycle Runtime Compose actualizado de
2.9.0→2.10.0 - Activity Compose actualizado de
1.11.0→1.13.0 - AndroidX Compose UI actualizado de
1.9.4→1.10.5 - CameraX (
camera-core,camera-camera2,camera-lifecycle,camera-view) actualizado de1.5.1→1.5.3 - ZXing Core actualizado de
3.5.3→3.5.4 - Android Gradle Plugin actualizado de
8.13.0→8.13.2 ByteArray.encodeBase64()deprecado (util de Ktor) reemplazado porBase64.Default.encode()de la stdlib de Kotlin
- Corregidos Metadatos de Imagen Recortada (Android): Resuelto problema donde
GalleryPhotoResultdespués del recorte retornaba metadatos incorrectosfileNameahora refleja el nombre del archivo recortado en lugar del originalfileSizeahora contiene el tamaño real de la imagen recortada en bytes en lugar del originalmimeTypeahora muestra correctamente "image/png" para imágenes recortadas en lugar del formato original- Afecta tanto a
GalleryPickerLaunchercomo a vistas de confirmación personalizadas con recorte habilitado - Solo los datos
exifse preservan de la imagen original (como se espera)
- BREAKING:
fileSizeahora retorna bytes en lugar de KB:PhotoResult.fileSizeyGalleryPhotoResult.fileSizeahora retornan el tamaño exacto del archivo en bytes en lugar de KB- Mejor Precisión: Elimina errores de redondeo que ocurrían con la conversión a KB
- Compatibilidad con S3: Corrige problemas con URLs pre-firmadas de S3 que requieren Content-Length exacto en bytes
- Compatibilidad con APIs: Útil para cualquier servicio que requiera valores precisos en bytes
- Guía de Migración: Para obtener KB desde bytes, dividir por 1024:
val fileSizeKB = (result.fileSize ?: 0) / 1024.0 - Documentación Actualizada: Todos los ejemplos y documentación actualizados para reflejar tamaños basados en bytes
-
🗜️ Compresión Automática de Imágenes: Sistema completo de compresión para cámara y galería
- Niveles de Compresión Configurables: LOW (95% calidad, 2560px), MEDIUM (75% calidad, 1920px), HIGH (50% calidad, 1280px)
- Soporte Multi-formato: Compresión JPEG, PNG, HEIC, HEIF, WebP, GIF, BMP
- Procesamiento Asíncrono: UI no bloqueante con integración de Kotlin Coroutines
- Optimización Inteligente: Combina escalado de dimensiones + compresión de calidad
- Eficiencia de Memoria: Reciclaje automático de bitmaps y limpieza
- API Unificada: Misma lógica de compresión para captura de cámara y selección de galería
- Multiplataforma: Funciona en Android e iOS
- Optimizado para Rendimiento: Procesamiento en segundo plano con manejo adecuado de hilos
-
🔄 Gestión Automática de Contexto: La función
applyCropahora maneja automáticamente la gestión de contexto de Android- Integración @Composable: La función ahora es
@Composabley usaLocalContext.currentinternamente - API Simplificada: Los desarrolladores ya no necesitan proporcionar manualmente el contexto de Android
- Consistencia Multiplataforma: Misma signatura de API para implementaciones de Android e iOS
- Integración @Composable: La función ahora es
-
🎯 Selector Inteligente de Galería vs Explorador de Archivos (Android): Sistema automático de detección que determina qué tipo de selector abrir
- Detección Automática de MIME Types: La librería analiza los tipos MIME solicitados y elige el picker apropiado
- Solo Imágenes (
image/*): UsaIntent.ACTION_PICK+MediaStorepara abrir la galería nativa de Android - PDFs (
application/pdf): UsaActivityResultContracts.GetContent()para acceder al explorador de archivos - Tipos Mixtos: Automáticamente usa el explorador de archivos para máxima compatibilidad
- Solo Imágenes (
- Nuevos Contratos Personalizados:
PickImageFromGallery: Contrato específico para galería usando MediaStorePickMultipleImagesFromGallery: Versión múltiple del selector de galería
- Configuración Flexible:
AndroidGalleryConfigpermite override manual si es necesario - Compatibilidad Retroactiva: Todo el código existente continúa funcionando sin cambios
- Detección Automática de MIME Types: La librería analiza los tipos MIME solicitados y elige el picker apropiado
-
️ Configuración AndroidGalleryConfig: Nueva clase de configuración para controlar el comportamiento del picker en Android
forceGalleryOnly: Boolean: Fuerza el uso de galería vs explorador de archivoslocalOnly: Boolean: Incluye solo imágenes locales (no almacenamiento en la nube)- Métodos de conveniencia:
forMimeTypes()yforMimeTypeStrings()para configuración automática
-
🔧 Lógica de MIME Type Inteligente: El procesador de archivos ahora maneja mejor la determinación del tipo de picker
- Análisis automático de tipos MIME para determinar la estrategia óptima del picker
- Mejor experiencia de usuario con selectores más apropiados para cada tipo de contenido
- Manejo consistente entre selección única y múltiple
-
📱 Experiencia de Usuario Optimizada en Android:
- Para Imágenes: Los usuarios ven directamente la galería nativa de fotos
- Para Documentos: Los usuarios acceden al explorador de archivos para navegación completa
- Comportamiento Predecible: La interfaz que se abre corresponde al tipo de contenido esperado
-
🔄 Procesamiento de Archivos Mejorado:
GalleryFileProcessorahora maneja mejor diferentes tipos de archivos- Soporte mejorado para PDFs en el pipeline de procesamiento
- Mejor detección y manejo de tipos MIME
- Procesamiento más robusto de metadatos
- Corregida lógica de compresión invertida (HIGH compresión ahora produce archivos más pequeños como se esperaba)
- Corregido algoritmo de escalado de imagen para calidad consistente entre niveles de compresión
- Resueltas fallas de pruebas CompressionConfig excluyendo comodín IMAGE_ALL de formatos soportados
- 🖼️ Corregidos Cálculos de Coordenadas de Crop en iOS: Resueltos problemas de recorte de imagen en iOS donde las imágenes recortadas aparecían incorrectamente centradas
- Comportamiento Multiplataforma Consistente: iOS ahora usa la misma lógica de cálculo de coordenadas que Android
- Posicionamiento Preciso de Imagen: Corregidos cálculos de
displayedImageSizeeimageOffsetpara escalado y centrado adecuado de imagen - Mapeo Corregido de Rectángulo de Crop: Implementado cálculo adecuado de
adjustedCropRectcon factores de escalado precisos
- 🎯 Corregidos Conflictos de Z-Index en Layout: Resueltos problemas donde los controles de crop aparecían en orden de capa incorrecto
- Eliminado zIndex Problemático: Eliminados modificadores
zIndexque causaban que el área de crop apareciera debajo de los controles del header - Mejor Apilamiento de Componentes: El flujo natural de layout ahora maneja correctamente la disposición en capas de componentes
- Mejor Soporte para Relación de Aspecto 9:16: El rectángulo de crop ahora se ajusta correctamente dentro del espacio disponible del canvas para relaciones de aspecto verticales
- Eliminado zIndex Problemático: Eliminados modificadores
- 📱 Corregidos Problemas de Superposición de Zoom: Resuelto problema donde las imágenes con zoom aparecían sobre los controles del header de crop
- Agregado Recorte de Límites: Implementado
clipToBounds()para contener contenido con zoom dentro del área designada - Mantenida Jerarquía de UI: La funcionalidad de zoom ahora respeta los límites del layout y no interfiere con los controles del header
- Experiencia de Usuario Mejorada: Los controles de crop permanecen accesibles y visibles durante las operaciones de zoom
- Agregado Recorte de Límites: Implementado
- 📁 Problema de Galería vs Explorador de Archivos: Resuelto el problema donde
GalleryPickerLauncherabría la carpeta de descargas en lugar de la galería en Android- Implementados contratos personalizados que garantizan el uso de la galería para imágenes
- La experiencia del usuario ahora es consistente y predecible
- Los desarrolladores no necesitan hacer cambios en su código existente
- Composables de Diálogos de Permisos Personalizados: Nuevos parámetros
customDeniedDialogycustomSettingsDialogenPermissionAndConfirmationConfigcustomDeniedDialog: Composable personalizado para cuando se deniega el permiso (permite reintentar)customSettingsDialog: Composable personalizado para cuando el permiso es denegado permanentemente (abre configuración)
- Control Completo de UI: Personalización total de diálogos de permisos con tus propios composables
- Soporte Multiplataforma: Los diálogos de permisos personalizados funcionan en Android e iOS
- Experiencia de Desarrollador Mejorada: API fácil de usar para personalización de diálogos de permisos
- Actualizada la clase de datos
PermissionAndConfirmationConfigcon nuevos parámetros opcionales - Mejorado el flujo de manejo de permisos para soportar diálogos composables personalizados
- Mejorada la documentación con ejemplos completos de diálogos de permisos personalizados
- El flujo de diálogos de permisos ahora maneja correctamente composables personalizados en ambas plataformas
- Diálogos de permisos personalizados
- Vistas de confirmación personalizadas
- Opción de captura de fotos de alta calidad
- Mejoras en optimización de memoria
- Mejor manejo de errores y recuperación
- Soporte para selección de galería en Android e iOS
- Textos de diálogo personalizables para iOS y Android
- Mejoras de accesibilidad: contentDescription y tamaños de botones configurables
- Configuración de calidad de compresión JPEG para procesamiento de imágenes
- Interfaz Logger para logging configurable
- Test unitario para PhotoResult
- Configuración de linter y análisis estático (ktlint, detekt)
- Ejemplo y documentación para internacionalización
- Badges de CI y cobertura en README
- Soporte para internacionalización (i18n): Sistema completo multi-idioma con recursos de strings type-safe
- Detección automática de idioma: Los strings se adaptan automáticamente al idioma del dispositivo
- Soporte para inglés, español y francés: Traducciones listas para usar para los tres idiomas
- Sistema de idiomas extensible: Fácil añadir nuevos idiomas sin dependencias externas
- Traducciones automáticas: Los diálogos de permisos y textos de UI ahora se traducen automáticamente por defecto
- Corrección de orientación de cámara frontal: Corrección automática de la orientación de imágenes de cámara frontal para arreglar fotos espejadas/rotadas
- Manejo automático de permisos de galería:
GalleryPickerLauncherahora gestiona los permisos de galería automáticamente en Android e iOS, sin necesidad de solicitud manual. - Diálogo personalizado de permisos de galería (Android): Se añadió un diálogo específico y localizable para permisos de galería, separado del de cámara.
- Selección múltiple de imágenes en iOS: Implementada usando
PHPickerViewController(iOS 14+), reemplazando el picker antiguo de una sola imagen. - Nuevos tests instrumentados y unitarios: Se añadieron y reactivaron pruebas para cubrir los nuevos flujos de permisos y selección múltiple.
- Mejoras de localización: Nuevos textos y traducciones para los diálogos de permisos de galería.
- Límite de selección configurable para el picker de galería: Se añadió el parámetro
selectionLimitaGalleryConfigpara controlar el número máximo de imágenes que se pueden seleccionar en el picker de galería. El límite se aplica en tiempo de compilación con un valor máximo de 30 imágenes para prevenir problemas de rendimiento y crashes al seleccionar demasiadas imágenes en iOS.
- Mejorado el flujo de manejo de permisos
- Componentes de UI mejorados
- Mejor compatibilidad multiplataforma
- La imagen de preview en confirmación ahora usa FIT_CENTER para evitar zoom en imágenes de galería
- Procesamiento de imágenes mejorado con corrección automática de orientación para fotos de cámara frontal
- Flujo de permisos en iOS: Ahora el permiso de galería se solicita directamente desde el sistema, sin diálogos previos personalizados, siguiendo el comportamiento nativo.
- Refactor de lógica de permisos: El manejo de permisos de galería y cámara ahora es más consistente y multiplataforma.
- Límite de selección de galería: Cambiado de selección ilimitada (0) a límite configurable con máximo de 30 imágenes para prevenir problemas de rendimiento y crashes en iOS al seleccionar demasiadas imágenes.
- Flujo de denegación de permisos en iOS
- Problemas de inicialización de cámara en Android
- Memory leaks en procesamiento de fotos
- Problemas de visualización de diálogos de permisos
- Disparador (botón de captura) siempre centrado, botón de galería no lo empuja
- Fotos de cámara frontal apareciendo espejadas o incorrectamente orientadas
- Errores de texto en diálogos: El diálogo de galería ya no muestra textos de cámara.
- Bugs de selección múltiple: Corregidos errores de rendimiento y crashes al seleccionar muchas imágenes en iOS.
- Errores de threading y casting: Solucionados problemas de concurrencia y conversiones de tipos en la selección de imágenes.
- Problemas de rendimiento en galería de iOS: Corregidos crashes y degradación de rendimiento al seleccionar más de 30 imágenes implementando un límite de selección configurable con validación en tiempo de compilación.
- Actualización exhaustiva de todos los archivos de documentación en Markdown para asegurar que todos los ejemplos de uso de
ImagePickerLauncher,GalleryPickerLaunchery componentes relacionados reflejen la API real y actual. - Se reemplazaron todos los ejemplos obsoletos que usaban la API antigua (callbacks y handlers como parámetros sueltos) por el patrón correcto: toda la configuración y handlers ahora se muestran anidados dentro de
config = ImagePickerConfig(...), con handlers personalizados anidados según corresponda. - Se garantizó que toda la documentación, tanto en inglés como en español, esté completamente sincronizada y sea precisa.
- Todos los ejemplos y guías actualizados para reflejar el nuevo manejo automático de permisos y la selección múltiple en iOS.
- Notas añadidas sobre diferencias de plataforma en el comportamiento de permisos y selección (Android vs iOS).
- Documentación actualizada: Se añadieron ejemplos y documentación para el nuevo parámetro
selectionLimitenGalleryConfig, incluyendo casos de uso para límites de selección y optimización de rendimiento.
- Lanzamiento inicial de ImagePickerKMP
- Integración de cámara multiplataforma
- Funcionalidad básica de captura de fotos
- Manejo de permisos para Android e iOS
- Componentes de UI simples
- Manejo de errores y excepciones
- Clase de datos PhotoResult
- Preferencias de captura (FAST, BALANCED, HIGH_QUALITY)
- Soporte para Android: Integración completa de cámara usando CameraX
- Soporte para iOS: Integración nativa de cámara usando AVFoundation
- Gestión de Permisos: Manejo inteligente de permisos para ambas plataformas
- Captura de Fotos: Captura de fotos de alta calidad con preview
- Manejo de Errores: Manejo completo de errores y feedback del usuario
- Personalización: Opciones básicas de personalización para UI y comportamiento
- SDK Mínimo: Android API 21+, iOS 12.0+
- Versión de Kotlin: 1.8+
- Compose Multiplatform: Soporte completo
- Dependencias: Dependencias externas mínimas
- Lanzamiento beta para testing
- Funcionalidad core de cámara
- Manejo básico de permisos
- Captura y preview de fotos
- Framework de manejo de errores
- Flujo de permisos de iOS incompleto
- Optimización de memoria necesaria
- Opciones de personalización limitadas
- Lanzamiento alpha
- Integración básica de cámara
- Manejo de solicitud de permisos
- Funcionalidad de captura de fotos
- Solo Android
- UI básica
- Manejo de errores limitado
- Lanzamiento inicial de desarrollo
- Configuración de estructura del proyecto
- Funcionalidad básica de cámara
- Manejo de permisos
- Fecha de Lanzamiento: 15 de Enero, 2024
- Estado: Estable
- Características Clave:
- Integración de cámara multiplataforma
- Manejo inteligente de permisos
- Captura de fotos de alta calidad
- Manejo completo de errores
- Componentes de UI personalizables
- Fecha de Lanzamiento: 10 de Enero, 2024
- Estado: Beta
- Características Clave:
- Funcionalidad core completa
- Manejo básico de permisos
- Captura y preview de fotos
- Framework de manejo de errores
- Fecha de Lanzamiento: 5 de Enero, 2024
- Estado: Alpha
- Características Clave:
- Integración básica de cámara
- Manejo de solicitud de permisos
- Funcionalidad de captura de fotos
- Fecha de Lanzamiento: 1 de Enero, 2024
- Estado: Desarrollo
- Características Clave:
- Configuración de estructura del proyecto
- Funcionalidad básica de cámara
- Manejo de permisos
- API de manejo de permisos actualizada
- Estructura de manejo de errores cambiada
- Clase de datos PhotoResult modificada
-
Actualizar Dependencias
// Antiguo implementation("io.github.ismoy:imagepickerkmp:0.9.0") // Nuevo implementation("io.github.ismoy:imagepickerkmp:1.0.22")
-
Actualizar Manejo de Permisos
// Antiguo RequestCameraPermission( onPermissionGranted = { /* ... */ }, onPermissionDenied = { /* ... */ } ) // Nuevo RequestCameraPermission( onPermissionPermanentlyDenied = { /* ... */ }, onResult = { granted -> /* ... */ } )
-
Actualizar Manejo de Errores
// Antiguo onError = { error -> // Manejar error genérico } // Nuevo onError = { exception -> when (exception) { is CameraPermissionException -> { /* ... */ } is PhotoCaptureException -> { /* ... */ } else -> { /* ... */ } } }
- Añadido soporte para iOS
- Estructura de API actualizada
- Manejo de permisos cambiado
-
Actualizar Soporte de Plataforma
// Antiguo (solo Android) ImagePickerLauncher( context = LocalContext.current, // ... ) // Nuevo (Multiplataforma) ImagePickerLauncher( context = LocalContext.current, // null para iOS // ... )
-
Actualizar Manejo de Permisos
// Antiguo requestCameraPermission() // Nuevo RequestCameraPermission( onPermissionGranted = { /* ... */ }, onPermissionDenied = { /* ... */ } )
- No hay características deprecadas en la versión actual
- Las características deprecadas serán eliminadas en la próxima versión mayor
- Los usuarios serán notificados 6 meses antes de la eliminación
- Se proporcionarán guías de migración
| Versión | Android API | Versión iOS | Versión Kotlin | Versión Compose |
|---|---|---|---|---|
| 1.0.1 | 21+ | 12.0+ | 1.8+ | 1.4+ |
| 0.9.0 | 21+ | 12.0+ | 1.8+ | 1.4+ |
| 0.8.0 | 21+ | N/A | 1.8+ | 1.4+ |
| 0.7.0 | 21+ | N/A | 1.8+ | 1.4+ |
-
Problema: Uso de memoria alto con fotos grandes
- Estado: Arreglado en la próxima versión
- Solución temporal: Usar compresión de imagen
-
Problema: Diálogo de permisos de iOS a veces no se muestra
- Estado: Arreglado en la próxima versión
- Solución temporal: Usar manejador de permisos personalizado
- Problema: Inicialización de cámara lenta en algunos dispositivos
- Estado: Arreglado en 1.0.1
- Solución temporal: Usar preferencia de captura FAST
- Problema: Manejo de permisos incompleto
- Estado: Arreglado en 0.9.0
- Solución temporal: Manejo manual de permisos
-
Características:
- Temas de UI personalizados
- Soporte para captura de video
- Filtros y efectos de imagen
- Captura de fotos en lote
- Características:
- Integración de cámara AR
- Filtros en tiempo real
- Compartir en redes sociales
- Integración con almacenamiento en la nube
- Herramientas de edición avanzadas
- Características:
- Rediseño completo de UI
- Personalización avanzada
- Sistema de plugins
- Optimizaciones de rendimiento
- Soporte de plataforma extendido
- Haz fork del repositorio
- Crea una rama de feature
- Haz tus cambios
- Añade tests
- Envía un pull request
# Clonar el repositorio
git clone https://github.com/ismoy/ImagePickerKMP.git
# Navegar al directorio del proyecto
cd ImagePickerKMP
# Construir el proyecto
./gradlew build
# Ejecutar tests
./gradlew test- Bump de Versión: Actualizar versión en
build.gradle.kts - Changelog: Actualizar este changelog
- Tests: Ejecutar todos los tests
- Documentación: Actualizar documentación
- Lanzamiento: Crear lanzamiento de GitHub
- Publicar: Publicar en Maven Central
- Documentación: README.es.md
- Issues: GitHub Issues
- Discusiones: GitHub Discussions
- Email: belizairesmoy72@gmail.com
Al reportar problemas, por favor incluye:
- Número de versión
- Plataforma (Android/iOS)
- Información del dispositivo
- Pasos para reproducir
- Comportamiento esperado vs actual
- Logs (si aplica)
Para solicitudes de características, por favor:
- Revisa issues existentes primero
- Proporciona descripción detallada
- Incluye ejemplos de casos de uso
- Considera la complejidad de implementación
Nota: Este changelog es mantenido por el equipo de ImagePickerKMP. Para preguntas o sugerencias, por favor contáctanos.