-
Descubrir activos en segundo plano alojados en Apple
Esta sesión, basada en Activos en segundo plano, introducirá la nueva capacidad de descargar paquetes de contenidos para juegos y otras apps. Descubre cómo puede Apple alojar estos paquetes de activos por ti o cómo gestionar las opciones de autohospedaje. Profundizaremos en la integración de la API nativa y las implementaciones correspondientes del App Store, y te proporcionaremos las herramientas para mejorar la entrega de contenido y la experiencia de usuario de tu app.
Capítulos
- 0:00 - Introducción
- 1:01 - Novedades de los activos en segundo plano
- 7:32 - Desarrollo de una app de muestra
- 17:24 - Pruebas y distribución beta
Recursos
Videos relacionados
WWDC25
WWDC23
-
Buscar este video…
-
-
8:26 - Fill out the manifest
{ "assetPackID": "[Asset-Pack ID]", "downloadPolicy": { "essential": { // Possible keys: “essential”, “prefetch”, or “onDemand” // Essential and prefetch download policies require a list of installation event types. For an on-demand download policy, the value for the “onDemand” key must be an empty object. "installationEventTypes": [ // Remove undesired elements from this array. "firstInstallation", "subsequentUpdate" ] } }, "fileSelectors": [ // You can add as many file and/or directory selectors as you want. { "file": "[Path to File]" }, { "directory": "[Path to Directory]" } ], "platforms": [ // Remove undesired elements from this array. "iOS", "macOS", "tvOS", "visionOS" ] } -
10:44 - Add a downloader extension
import BackgroundAssets import ExtensionFoundation import StoreKit @main struct DownloaderExtension: StoreDownloaderExtension { func shouldDownload(_ assetPack: AssetPack) -> Bool { return true } } -
11:39 - Download an asset pack
let assetPack = try await AssetPackManager.shared.assetPack(withID: "Tutorial") // Await status updates for progress information let statusUpdates = AssetPackManager.shared.statusUpdates(forAssetPackWithID: "Tutorial") Task { for await statusUpdate in statusUpdates { // … } } // Download the asset pack try await AssetPackManager.shared.ensureLocalAvailability(of: assetPack) -
12:22 - Receive download status updates in Objective-C
#import <BackgroundAssets/BackgroundAssets.h> @interface ManagedAssetPackDownloadDelegate : NSObject <BAManagedAssetPackDownloadDelegate> @end @implementation ManagedAssetPackDownloadDelegate - (void)downloadOfAssetPackBegan:(BAAssetPack *)assetPack { /* … */ } - (void)downloadOfAssetPackPaused:(BAAssetPack *)assetPack { /* … */ } - (void)downloadOfAssetPackFinished:(BAAssetPack *)assetPack { /* … */ } - (void)downloadOfAssetPack:(BAAssetPack *)assetPack hasProgress:(NSProgress *)progress { /* … */ } - (void)downloadOfAssetPack:(BAAssetPack *)assetPack failedWithError:(NSError *)error { /* … */ } @end -
12:29 - Attach the delegate in Objective-C
static void attachDelegate(ManagedAssetPackDownloadDelegate *delegate) { [[BAAssetPackManager sharedManager] setDelegate:delegate]; } -
12:33 - Cancel an asset-pack download
let statusUpdates = AssetPackManager.shared.statusUpdates(forAssetPackWithID: "Tutorial") for await statusUpdate in statusUpdates { if case .downloading(_, let progress) = statusUpdate { progress.cancel() } } -
12:41 - Use an asset pack
// Read a file into memory let videoData = try AssetPackManager.shared.contents(at: "Videos/Introduction.m4v") // Open a file descriptor let videoDescriptor = try AssetPackManager.shared.descriptor(for: "Videos/Introduction.m4v") defer { do { try videoDescriptor.close() } catch { // … } } -
13:56 - Remove an asset pack
// Remove the asset pack try await AssetPackManager.shared.remove(assetPackWithID: "Tutorial") // Redownload the asset pack let assetPack = try await AssetPackManager.shared.assetPack(withID: "Tutorial") try await AssetPackManager.shared.ensureLocalAvailability(of: assetPack) -
14:53 - Info.plist
<key>BAAppGroupID</key> <string>group.com.naturelab.thecoast</string> <key>BAHasManagedAssetPacks</key> <true/> <key>BAUsesAppleHosting</key> <true/>
-
-
- 0:00 - Introducción
Obtén más información sobre los recursos en segundo plano: una nueva forma de distribuir los recursos de la app en el App Store. Revisa las tecnologías actuales de entrega de recursos, consulta las nuevas API de Swift y Objective-C y aprende a integrar estas funciones en iOS, iPadOS, macOS, tvOS y visionOS. Se habla del alojamiento de los componentes por parte de Apple, incluida la preparación para las pruebas beta y la distribución en el App Store.
- 1:01 - Novedades de los activos en segundo plano
Los activos en segundo plano mejoran la experiencia de inicio al permitirle descargar y actualizar los componentes de la app por separado desde la app principal. Este enfoque les permite a las personas comenzar a usar la app de inmediato y descargar contenido adicional en segundo plano. Hay tres políticas principales de descarga para paquetes de activos: Esencial, previa y por solicitud. Puedes alojar tus paquetes de componentes en tus propios servidores o utilizar el nuevo servicio de Activos en segundo plano alojados de Apple, que proporciona los 200 GB incluidos en tu membresía al Apple Developer Program. Los recursos en segundo plano gestionados sustituyen a la obsoleta tecnología de recursos bajo demanda. Ofrece un mayor control y flexibilidad para que puedas optimizar el rendimiento de la app y la interacción del usuario. El sistema gestiona automáticamente las descargas, las actualizaciones y la compresión, lo que facilita su implementación.
- 7:32 - Desarrollo de una app de muestra
Para usar Activos en segundo plano gestionados en una app, debes crear paquetes de componentes con una nueva herramienta de empaquetado disponible en macOS, Linux y Windows. Esta herramienta genera un archivo de manifiesto JSON en el que se especifica el ID del paquete de elementos, la política de descarga, las plataformas compatibles y los archivos que se incluirán mediante los selectores de archivos. Puedes configurar la política de descargas para asegurarte de que los recursos esenciales estén disponibles localmente antes del inicio de la app y restringir las descargas a las primeras instalaciones. Una vez completado el archivo de manifiesto, la herramienta de empaquetado genera un archivo comprimido. Para integrar el paquete de elementos en la app, añade una extensión de descarga en Xcode, que programa los paquetes de elementos para que se descarguen en segundo plano. El sistema proporciona una extensión de descarga con todas las funciones que admite descargas y actualizaciones automáticas. Accede a los archivos descargados en la app principal usando el “AssetPackManager”, lo que garantiza la disponibilidad local y espera las actualizaciones de estado si es necesario, lo que proporciona una experiencia de usuario perfecta con una gestión de activos optimizada. Para usar la estructura de activos en segundo plano, el protocolo de delegado debe estar adjunto a la propiedad de delegado del gestor del paquete de activos compartidos. Las actualizaciones de estado de descarga proporcionan estructuras de progreso que se pueden usar para cancelar descargas si es necesario. Una vez que un paquete de elementos está listo para el uso local, indicado por el retorno sin errores de 'ensureLocalAvailability(of:)', los archivos se pueden leer usando los métodos 'contents(at:searchingInAssetPackWithID:options:)' o 'descriptor(for:searchingInAssetPackWithID:)'. El sistema gestiona automáticamente las actualizaciones y el almacenamiento de los componentes, pero se recomienda eliminar manualmente los paquetes de componentes que no se utilicen para liberar espacio. Para habilitar la coordinación entre la app principal y la extensión del descargador, debes añadirlas al mismo grupo de apps y configurar claves Info.plist específicas. Para las pruebas, se proporciona un servidor simulado, que requiere un certificado SSL. Debes introducir la URL base del servidor simulado en Anulaciones de desarrollo en los dispositivos de prueba. Una vez configurada, la app descarga los paquetes de componentes del servidor simulado durante la prueba.
- 17:24 - Pruebas y distribución beta
Para preparar una app para una prueba beta en TestFlight y distribuirla en el App Store, debes cargar los paquetes binarios y de componentes de la app en App Store Connect. Sube paquetes de componentes con varios métodos, como la app Transporter para macOS, que ofrece una interfaz de arrastrar y soltar, o las API REST de App Store Connect para un control y una automatización totales. El uso de las API implica tres pasos principales: Crear un registro de paquete de componentes, crear un registro de versión y cargar el archivo. Una vez procesado el paquete de elementos, puedes enviarlo para pruebas internas o externas en TestFlight. Después de realizar las pruebas correctamente, puedes enviar la versión del paquete de elementos a Revisión de apps para su distribución en el App Store. Supervisa el progreso y el estado de las cargas, los envíos y las reseñas a través de App Store Connect o las API.