Como posso partilhar loja NSURLCache do Safari?
-
19-09-2019 - |
Pergunta
Fundo
-
Eu estou construindo um aplicativo que as ligações recentes páginas da web que você visitou juntos.
-
Para fazer isso, eu preciso para obter o código HTML para URLs recentes usando cacau.
-
Agora, eu estou usando um invisível WebView para fazer isso.
-
Pelo que entendi, se a URL não é no cache para meu aplicativo, este é bater servidores web.
O que eu quero
As chances são altas de que a URL Eu estou agarrando já foi armazenado em cache pelo Safari como a página já foi visitada.
Eu quero meu aplicativo para verificar o cache do Safari para o URL em primeiro lugar. Se ele está lá, ele deve apenas utilizar esses dados. Se não, ele deve bater o servidor web e armazenar a página em cache do meu aplicativo.
Eu realmente não quero ter que analisar o arquivo cache.db do Safari usando sqlite3 - Não tenho a menor idéia se este formato permanecerá o mesmo. Estou atrás de algo nível mais simples e mais alta.
O que eu tentei
Eu sei que você pode criar o seu próprio NSURLCache usando o initWithMemoryCapacity:diskCapacity:diskPath:
método, mas eu não quero tentar apontar isso para o cache do Safari no caso de parafusos até Safari escrevendo para ele.
Existe uma maneira fácil, alto nível de compartilhar o cache Safari?
Atualizar
Aha. Acabei de perceber que pode haver uma maneira de fazer isso eu estive ausente.
Eu poderia fazer uma nova instância do NSURLCache
com initWithMemoryCapacity:diskCapacity:diskPath:
, apontá-lo para o cache do Safari, em seguida, especificar uma política de cache de NSURLRequestReturnCacheDataDontLoad
para a solicitação de URL ao carregar a página.
Quando isso falhar, eu poderia apenas tentar carregar a página como normal. Vou tentar fazer isso e atualizar a questão quando eu sei mais.
Solução
Para ser honesto, você simplesmente não pode fazer isso.
Em primeiro lugar, estou certo de -[NSURLCache initWithMemoryCapacity:diskCapacity:diskPath:]
não vai funcionar como você espera. Ele, ao contrário, soprar o arquivo de cache de idade para criar o seu próprio; potencialmente muito perturbar Safari.
Em segundo lugar NSURLCache
é uma composta ??em> cache. Ou seja, ele armazena dados em primeiro lugar na memória e, em seguida, move-lo para o disco em algum ponto. Assim, mesmo se você pudesse adequadamente o acesso ao arquivo de cache do Safari (que você não pode) você só será capaz de acessar os dados armazenados em cache mais velhos; não é o mais recente.