-
Descubra os Assets em segundo plano hospedados pela Apple
Com base nos Assets em segundo plano, esta sessão apresentará o novo recurso para baixar pacotes de assets de conteúdo para jogos e outros apps. Saiba como a Apple pode hospedar esses pacotes de assets para você ou como gerenciar opções de hospedagem própria. Vamos nos aprofundar na integração com a API nativa e nas implementações correspondentes na App Store, fornecendo as ferramentas para aprimorar a entrega de conteúdo e a experiência dos usuários do seu app.
Capítulos
- 0:00 - Introdução
- 1:01 - Novidades dos Assets em segundo plano
- 7:32 - Desenvolvimento de um app de exemplo
- 17:24 - Teste beta e distribuição
Recursos
Vídeos relacionados
WWDC25
- Automatize seu processo de desenvolvimento com a API do App Store Connect
- Novidades do App Store Connect
WWDC23
-
Buscar neste vídeo...
-
-
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 - Introdução
Conheça os Assets em segundo plano, uma nova forma de distribuir assets de apps na App Store. Revise as tecnologias de entrega de assets, conheça as APIs em Swift e Objective-C e saiba como integrar esses recursos no iOS, iPadOS, macOS, tvOS e visionOS. A hospedagem de assets pela Apple, incluindo a preparação para testes Beta e a distribuição pela App Store, também é abordada.
- 1:01 - Novidades dos Assets em segundo plano
Os Assets em segundo plano melhoram a inicialização do app ao permitir que você baixe e atualize os assets do app separadamente do app principal. Essa abordagem permite que o app seja usado imediatamente, enquanto o conteúdo adicional é baixado em segundo plano. Há três políticas de download para os pacotes de assets: Essential, Prefetch e On-demand. Hospede seus pacotes de assets em seus próprios servidores ou utilize o novo serviço Apple Hosted Background Assets, que oferece 200 GB incluídos na sua assinatura do Apple Developer Program. Os Assets Gerenciados em Segundo Plano (Managed Background Assets) substitui a tecnologia descontinuada Recursos sob demanda (On-Demand Resources). Ele oferece mais controle e flexibilidade, otimizando o desempenho do app e o engajamento dos usuários. O sistema gerencia os downloads, atualizações e compactação, facilitando a implementação.
- 7:32 - Desenvolvimento de um app de exemplo
Para usar os Assets Gerenciados em Segundo Plano em um app, crie pacotes de assets com uma ferramenta de empacotamento para macOS, Linux e Windows. A ferramenta cria um arquivo de manifesto JSON para definir o ID do pacote, política de download, plataformas compatíveis e arquivos incluídos via seletores. Configure a política de download para que os assets estejam disponíveis antes da inicialização do app e limite os downloads às primeiras instalações. Após preencher o manifesto, a ferramenta de empacotamento gera um arquivo compactado. Para integrar o pacote de assets ao app, adicione uma extensão de download no Xcode, que agenda o download dos pacotes em segundo plano. O sistema oferece uma extensão de download completa, que dá suporte a downloads e atualizações automáticos. Acesse os arquivos baixados no app principal usando o 'AssetPackManager', garantindo a disponibilidade local e aguardando atualizações de status, para oferecer uma experiência contínua com gerenciamento de assets otimizado. Para usar o framework Assets em segundo plano, o protocolo delegado deve ser atribuído à propriedade delegate do gerenciador do pacote de assets compartilhado. As atualizações de status de download oferecem estruturas de progresso para cancelar os downloads, se necessário. Quando um pacote de assets estiver pronto para uso, indicado pelo retorno de ensureLocalAvailability(of:) sem erro, os arquivos poderão ser acessados usando 'contents(at:searchingInAssetPackWithID:options:)' ou 'descriptor(for:searchingInAssetPackWithID:)'. O sistema gerencia as atualizações e o armazenamento dos pacotes de assets, mas é recomendável remover os pacotes não usados para liberar espaço. Para permitir a coordenação entre o app principal e a extensão de download, adicione-os ao mesmo grupo de apps e configure chaves específicas no Info.plist. Para testes, é fornecido um servidor fictício que requer um certificado SSL. Insira o URL base do servidor fictício em Substituições de desenvolvimento nos dispositivos de teste. Uma vez configurado, o app baixa os pacotes de assets do servidor fictício durante os testes.
- 17:24 - Teste beta e distribuição
Para preparar um app para testes Beta no TestFlight e distribuição na App Store, envie o binário do app e os pacotes de assets para o App Store Connect. Envie os pacotes de assets usando vários métodos, incluindo o app Transporter para macOS, que oferece uma interface de arrastar e soltar, ou as APIs REST do App Store Connect para controle e automação. O uso das APIs envolve três etapas principais: criar um registro do pacote de assets, criar um registro de versão e enviar o arquivo compactado. Após o processamento do pacote de assets, envie-o para testes internos ou externos no TestFlight. Após o teste bem-sucedido, envie a versão do pacote de assets para a App Review para distribuição na App Store. Monitore o progresso e o status dos uploads, envios e revisões pelo App Store Connect ou pelas APIs.