iCloud Drive é o armazenamento de arquivos em nuvem da Apple integrado ao iOS, macOS e iPadOS para sincronizar documentos entre os dispositivos do usuário. De acordo com a Apple, 2024, o iCloud Drive usa o CloudKit como backend para armazenar arquivos e sincronização automática: as alterações feitas no iPhone são refletidas instantaneamente no Mac e no iPad sem qualquer ação do usuário. Os desenvolvedores podem integrar o iCloud Drive em aplicativos por meio do NSDocumentPickerViewController e da API Ubiquity.
Principais pontos
iCloud Drive é o serviço de arquivos em nuvem da Apple que fornece um armazenamento unificado de documentos para todos os dispositivos do usuário autorizados com o mesmo Apple ID. O serviço foi lançado em 2014 junto com o iOS 8 e o OS X Yosemite como substituto do iCloud Documents.
O iCloud Drive difere de outros serviços de armazenamento em nuvem (Google Drive, Dropbox) por sua profunda integração com o sistema operacional: os arquivos aparecem diretamente no Finder no macOS e no aplicativo Arquivos no iOS, sem necessidade de instalar um aplicativo adicional. O sistema sincroniza automaticamente o conteúdo em segundo plano, alternando entre redes Wi-Fi e celular.
De acordo com o Apple Platform Overview, 2024, o iCloud Drive suporta versionamento de arquivos por até 30 dias, compartilhamento de pastas via iCloud Sharing e integração com a pesquisa do sistema Spotlight. Os desenvolvedores acessam o armazenamento por meio da API NSFileCoordinator e dos contêineres Ubiquity.
Ubiquity é um termo da Apple que significa a capacidade dos dados de estarem “presentes em todos os lugares.” No contexto do iCloud Drive, este é um mecanismo que permite que os arquivos sejam sincronizados automaticamente em todos os dispositivos do usuário por meio do backend em nuvem CloudKit.
| Componente | Descrição | Função |
|---|---|---|
| Contêiner Ubiquity | Diretório especial do aplicativo | Armazena arquivos para sincronização |
| CloudKit | Serviço backend da Apple | Fornece armazenamento e sincronização |
| NSMetadataQuery | Consulta do sistema | Rastreia o status de arquivos Ubiquity |
| NSFileVersion | Gerenciamento de versões | Resolve conflitos de alterações |
O contêiner Ubiquity é um diretório dentro do Sandbox do aplicativo marcado para sincronização. Os arquivos colocados neste diretório são automaticamente enviados para o iCloud Drive e distribuídos para outros dispositivos. O acesso ao contêiner é configurado por meio de Capabilities no Xcode.
O sistema rastreia o status de cada arquivo por meio do NSMetadataQuery: um arquivo pode ser local (baixado no dispositivo), remoto (apenas na nuvem) ou estar sendo baixado. O desenvolvedor pode solicitar programaticamente o download do arquivo ou verificar sua disponibilidade antes de abri-lo.
A integração do iCloud Drive começa adicionando a capacidade iCloud no Xcode e habilitando o serviço iCloud Documents. Depois disso, o aplicativo obtém acesso ao contêiner Ubiquity, um diretório especial cujo caminho é retornado por meio do FileManager.
import UIKit
class DocumentManager {
func ubiquityURL() -> URL? {
return FileManager.default
.url(forUbiquityContainer: nil)
}
func saveToICloud(data: Data, filename: String) {
guard let containerURL = ubiquityURL() else { return }
let fileURL = containerURL
.appendingPathComponent(filename)
do {
try data.write(to: fileURL)
Logger.storage.info(
"Saved \(filename) to iCloud Drive"
)
} catch {
Logger.storage.error(
"Save failed: \(error.localizedDescription)"
)
}
}
func listICloudFiles() {
let query = NSMetadataQuery()
query.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]
query.start()
}
}
NSDocumentPickerViewController fornece uma interface do usuário do sistema para selecionar e importar arquivos do iCloud Drive. O usuário vê um navegador de arquivos padrão com suporte para pesquisa, classificação e seleção múltipla. Após a seleção do arquivo, o aplicativo recebe sua URL e pode trabalhar com ele por meio do NSFileCoordinator.
Regra importante: ao trabalhar com arquivos do iCloud Drive, você deve usar o NSFileCoordinator para leitura e escrita. Isso garante que o arquivo não seja modificado por outro processo (por exemplo, sincronização) durante a operação. Negligenciar a coordenação pode levar à corrupção de dados.
Conflitos de versão ocorrem quando um arquivo é modificado em dois dispositivos simultaneamente antes que a sincronização seja concluída. O iOS detecta automaticamente essas situações por meio do NSFileVersion e cria versões conflitantes que o usuário ou aplicativo deve resolver.
func resolveConflicts(for fileURL: URL) {
let conflictVersions = NSFileVersion
.unresolvedConflictVersionsOfItem(at: fileURL) ?? []
for version in conflictVersions {
do {
let conflictData = try Data(contentsOf: version.url)
let resolved = mergeData(
original: try Data(contentsOf: fileURL),
conflict: conflictData
)
try resolved.write(to: fileURL)
version.remove()
} catch {
Logger.sync.error(
"Conflict resolution failed: \(error)"
)
}
}
}
O NSFileVersion armazena o histórico de alterações do arquivo por até 30 dias. Cada versão contém uma URL, data de criação e identificador do dispositivo que criou a versão. O sistema marca automaticamente as versões como conflitantes quando dois dispositivos enviam alterações com o mesmo identificador base.
Estratégias de resolução: o aplicativo pode mesclar alterações automaticamente (para formatos suportados), mostrar ao usuário uma escolha de versão ou usar uma estratégia de último a escrever” (last-writer-wins). A Apple recomenda a mesclagem automática para dados de texto e estruturados, e mostrar versões conflitantes ao usuário para formatos binários.
O armazenamento gratuito do iCloud é de 5 GB, distribuído entre todos os serviços do usuário: backups, fotos, e-mail e iCloud Drive. Os planos pagos começam em 50 GB e vão até 12 TB. Para aplicativos com troca intensiva de arquivos, é fundamental considerar esses limites.
Otimização de armazenamento: o iOS fornece um mecanismo de expulsão de arquivos—quando o espaço local acaba, o sistema pode remover cópias em cache de arquivos do iCloud Drive, deixando apenas metadados. Ao tentar abrir esse arquivo, o sistema o baixa automaticamente da nuvem. O desenvolvedor pode controlar esse processo por meio do NSFileCoordinator e verificar o status do arquivo via NSMetadataUbiquitousItemDownloadingStatusKey.
De acordo com a WWDC 2022, a Apple recomenda as seguintes práticas para otimizar o iCloud Drive: armazenar apenas documentos do usuário no contêiner Ubiquity, não o cache do aplicativo; usar download assíncrono com indicação de progresso; fornecer ao usuário informações sobre o tamanho do arquivo antes do download; implementar suporte para retomar downloads de arquivos grandes.
Nuance importante: excluir um arquivo do contêiner Ubiquity o remove de todos os dispositivos do usuário. Para arquivos temporários, use o diretório local Documents em vez do contêiner Ubiquity. Observe também que a sincronização não é instantânea—o atraso pode variar de alguns segundos a minutos, dependendo do tamanho do arquivo e da rede.
Perguntas frequentes
iCloud Drive é o armazenamento de arquivos em nuvem da Apple que sincroniza documentos entre iPhone, iPad, Mac e PC. Ele está integrado ao Finder e ao aplicativo Arquivos, permitindo trabalhar com documentos sem aplicativos adicionais.
A sincronização funciona por meio do CloudKit: os arquivos do contêiner Ubiquity do aplicativo são enviados automaticamente para a nuvem e distribuídos para outros dispositivos do usuário. O sistema usa NSMetadataQuery para rastrear o status e NSFileCoordinator para acesso seguro.
Adicione a capacidade iCloud no Xcode, habilite o serviço iCloud Documents e use FileManager.url(forUbiquityContainer:) para obter o caminho para o diretório sincronizado. Use NSDocumentPickerViewController para seleção de arquivos.
O iOS cria versões conflitantes por meio do NSFileVersion. O desenvolvedor pode mesclar alterações automaticamente ou mostrar ao usuário uma escolha. O sistema armazena versões por até 30 dias e marca automaticamente conflitos quando ocorrem alterações simultâneas de dispositivos diferentes.
O armazenamento gratuito é de 5 GB em todos os serviços do iCloud. Planos pagos: 50 GB, 200 GB, 2 TB, 6 TB e 12 TB. Para arquivos grandes, implemente suporte para retomar downloads e verifique o espaço disponível antes de escrever.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também