Un motor compartido.
Interfaces nativas.
ATorrent persigue una experiencia coherente entre sistemas. Eso no significa que todas sus versiones deban tener la misma interfaz ni el mismo ciclo de vida.
ATorrent combina un motor de transferencia común con interfaces adaptadas a Android, macOS e iOS/iPadOS. Windows está en desarrollo.
Compartir el motor, adaptar la experiencia
La parte más especializada es el motor de transferencia. ATorrent utiliza libtorrent para gestionar sesiones BitTorrent, metadatos, peers y eventos de descarga. La interfaz y el almacenamiento se adaptan a cada plataforma.
En lugar de hacer que una sola capa visual cubra todos los dispositivos, el proyecto utiliza SwiftUI en Apple y Jetpack Compose en Android. El objetivo es aprovechar las convenciones y las herramientas propias de cada sistema.
Android: el servicio forma parte del diseño
En Android, mostrar progreso en pantalla es solo una parte del trabajo. La transferencia necesita coordinarse con el ciclo de vida de la app. El proyecto separa la interfaz Compose, el ViewModel, el repositorio Room y el motor BitTorrent.
Un Foreground Service mantiene la sesión de transferencia y muestra una notificación de progreso. Room conserva los datos de las transferencias, mientras los datos de reanudación permiten recuperar el estado del motor.
macOS: módulos con responsabilidades claras
En escritorio, el proyecto se organiza en paquetes. TorrentCore contiene los modelos y contratos del dominio; TorrentPersistence se ocupa del almacenamiento; y TorrentEngineBridge integra Swift con libtorrent.
La app SwiftUI consume estos módulos mediante una arquitectura MVVM. Esto permite trabajar en el motor, la persistencia o la interfaz sin mezclar sus responsabilidades.
iOS y iPadOS: límites distintos
El motor nativo está empaquetado para dispositivos y simuladores. La integración se expone a Swift a través de un bridge C/C++ y un XCFramework. SwiftData y los datos de reanudación conservan la información necesaria para recuperar transferencias.
El almacenamiento vive en el sandbox de la app. Esa diferencia importa: una función de escritorio no se puede trasladar automáticamente al móvil esperando el mismo acceso a archivos o el mismo comportamiento en segundo plano.
Coherencia no significa uniformidad
Las acciones principales —añadir, pausar, reanudar y eliminar— pueden mantener una lógica común. Los detalles de ejecución requieren decisiones propias: un servicio Android, paquetes en macOS o el espacio de almacenamiento de iOS.
Compartir el motor permite mantener una lógica de transferencia común y aprovechar las capacidades de cada sistema.
Explorar la documentación técnica