Glossário

Arquivos, downloads e transferência

Quase tudo o que parece arbitrário sobre arquivos num iPhone decorre de uma única regra de isolamento, e quase tudo o que torna downloads confiáveis decorre de um único recurso do HTTP. Aqui estão os dois, mais as formas de um arquivo ir de um aparelho a outro.

Sandbox

A regra de que cada app só pode ver o próprio armazenamento. É por isso que um app não abre os downloads de outro, e por que “o arquivo está do lado do vídeo” não é uma coisa que exista no iOS.

Cada app recebe um diretório privado e nenhuma visão do de mais ninguém. Os arquivos passam de um app para outro apenas por atos deliberados — um menu de compartilhamento, um seletor de documentos, um arraste — e cada um deles é uma decisão que a pessoa tomou, não algo que o app se serviu por conta própria.

O custo aparece em detalhes pequenos. Players de computador encontram filme.srt do lado de filme.mkv automaticamente; no iOS não existe “do lado”, então um arquivo de legenda tem que ser entregue de propósito e o app tem que ser quem lembra desse vínculo.

Veja também: Grupo de appsMarcador com escopo de segurança

Grupo de apps

Um contêiner compartilhado que dois apps do mesmo desenvolvedor podem abrir — a única fresta autorizada na sandbox. É assim que uma extensão de compartilhamento entrega um arquivo ao app a que ele pertence.

Uma extensão de compartilhamento é um programa separado do app do qual ela parece fazer parte, com sandbox própria e uma vida muito curta. Ela não consegue escrever no armazenamento do app principal.

Então ela escreve num contêiner que os dois têm permissão de ver, e o app esvazia esse contêiner na próxima vez que abre. Nada atravessa a fronteira entre desenvolvedores, e nada atravessa sem um toque explícito.

Veja também: Sandbox

Marcador com escopo de segurança

Um token que guarda a permissão de acesso a uma pasta fora da sandbox — um disco externo, uma pasta no iCloud — para que o app possa reabri-la depois sem pedir de novo.

Quando você escolhe um local pelo seletor de arquivos do sistema, a permissão concedida vale para aquele momento. Um marcador preserva isso entre inicializações, e o app tem que começar e terminar explicitamente o uso do acesso que ele representa.

É o que torna possível navegar num SSD externo sem copiar nada para dentro, e o escopo é exatamente o que você escolheu — um marcador para uma pasta não concede nada sobre a pasta vizinha.

Veja também: Sandbox

Range request

Pedir a um servidor um trecho específico de um arquivo — dos bytes 5.000.000 a 5.999.999 — em vez do arquivo inteiro. É o que torna um download retomável e o que permite a várias conexões buscarem um arquivo ao mesmo tempo.

Um servidor que suporta faixas responde com 206 Partial Content e o trecho pedido. Um que não suporta responde 200 e manda tudo desde o começo, e essa é a diferença entre retomar um download e reiniciá-lo.

Tudo o que é interessante num motor de download se apoia nesse único recurso do HTTP. Sem ele não existe retomada depois de uma conexão caída, nem retomada depois de um reinício, nem jeito de usar mais de uma conexão.

Veja também: Download retomávelConexões paralelas

Download retomável

Uma transferência que continua exatamente de onde parou em vez de começar de novo, registrando quantos bytes foram confirmados e pedindo o resto.

A exigência é que o número registrado nunca seja otimista. Um byte contado como escrito mas que ainda está num buffer se torna um buraco no arquivo quando o app é encerrado — e um buraco no meio de um vídeo é uma corrupção que só aparece uma hora depois de você começar a assistir.

É por isso que a contagem tem que acompanhar a escrita no disco em vez da leitura da rede, e por que toda passagem de bastão entre transferência em primeiro e em segundo plano tem que concordar num único número.

Veja também: Range requestTransferência em segundo plano

Conexões paralelas

multiconexão, download em pedaços

Dividir um arquivo em faixas e buscar várias ao mesmo tempo. Ajuda quando uma conexão sozinha está sendo limitada, e não faz nada quando o gargalo é a sua própria linha.

Um servidor que limita a velocidade de cada conexão muitas vezes pode ser convencido a entregar mais no total ao longo de várias. É aqui que o download multiconexão ganha a reputação dele.

Não é mágica e é frequentemente mal entendido. Se a sua conexão já está saturada, mais conexões dividem a mesma capacidade em pedaços menores e acrescentam sobrecarga. Alguns servidores também recusam ou limitam várias requisições vindas de um mesmo endereço.

Veja também: Range requestDownload retomável

Transferência em segundo plano

Um download entregue ao sistema operacional para que ele continue depois de o app ser fechado. O sistema decide o momento, e essa é a troca que você faz para que ele continue.

Um app de iOS para de rodar pouco depois de você sair dele. Uma transferência entregue ao serviço de segundo plano do sistema sobrevive a isso, sobrevive ao app ser encerrado e retoma depois de um reinício.

O que ela abre mão é do controle. O sistema agrupa essas transferências de acordo com a visão dele sobre energia e condições de rede, então um download em segundo plano pode pausar e retomar de jeitos que um dentro do app não faria — e ele vai terminar.

Veja também: Download retomávelSandbox

WebDAV

Uma extensão do HTTP que transforma um servidor web num servidor de arquivos: listar, ler, escrever, mover, apagar. É o que o Nextcloud e o ownCloud falam, e o que a maioria dos NAS oferece.

Como por baixo é HTTP, o WebDAV funciona pela mesma infraestrutura de qualquer outra coisa na web — sem portas especiais, sem protocolo de cliente especial — e é por isso que ele sobreviveu enquanto protocolos de arquivo mais elaborados não sobreviveram.

Para quem preferiria não colocar arquivos na nuvem de uma empresa, é a alternativa prática: seu próprio servidor, suas próprias credenciais, padrões comuns.

Veja também: Armazenamento na nuvem

Armazenamento na nuvem

Arquivos guardados no servidor de outra pessoa, acessados pela API daquela empresa — Dropbox, OneDrive, Box, pCloud. Cada um tem a própria interface, e é por isso que os apps suportam um de cada vez.

Não existe protocolo universal de nuvem. Cada provedor desenhou a própria API e o próprio fluxo de login, então acrescentar um provedor a um app é trabalho de verdade, não uma linha de configuração.

O login normalmente é OAuth, o que significa que o app nunca vê a senha: o provedor autentica a pessoa e devolve um token que pode ser revogado nas configurações do próprio provedor a qualquer momento.

Veja também: WebDAV

WebRTC

Um padrão para conectar dois aparelhos diretamente, sem servidor entre eles depois que a conexão existe. É o que a transferência entre dispositivos usa para mover um arquivo de um lado a outro da sala.

Um pequeno servidor de sinalização apresenta os dois aparelhos um ao outro — é para isso que serve o código de seis dígitos — e depois se retira. O arquivo viaja diretamente entre os aparelhos e não fica guardado em lugar nenhum no meio do caminho.

Na mesma rede, é tão rápido quanto aquela rede permite. Pela internet, depende de os dois lados poderem ser alcançados diretamente, e é aí que as conexões de vez em quando falham por razões que nenhum dos dois aparelhos consegue ver.

Veja também: Servidor HTTP local

Servidor HTTP local

Um app respondendo a requisições web na sua própria rede, para que um navegador da web no seu computador possa abrir uma página servida pelo seu celular. É assim que a Transferência por Wi-Fi funciona, sem cabo e sem conta.

O celular mostra um endereço; o computador abre; a página que ele recebe é servida pelo próprio celular. Os arquivos se movem diretamente pela rede local e nunca saem dela.

Como qualquer pessoa na mesma rede pode alcançar esse endereço, ele precisa de uma tranca — um código para digitar, permissões concedidas por operação, e as destrutivas desligadas a não ser que sejam ligadas de propósito.

Veja também: WebRTC

Os outros assuntos