roblema específico do iOS 12: corrupção de dados binários do armazenamento externo de dados principais

Passei a maior parte de um dia de trabalho tentando resolver iss

Fund

Tenho um modelo de dados básico simples, com livros e sessões de leitura. Os livros têm capas (imagens) que são armazenadas como dados binários com "Permite armazenamento externo".

No iOS 11.4 e abaixo, tudo funciona bem o tempo todo. Quando eu salvo uma nova sessão, tudo é atualizado corretament

Problem

esde o iOS 12, quando crio uma nova sessão de leitura e a vinculo ao livro, sobre cadasegund time, os dados principais geram uma instrução SQL que também atualiza o campo da capa do livro, algumas vezes resultando em uma referência incorreta (para arquivo no disco), que geralmente resulta na capa sendonad ao reiniciar o aplicativo e quase sempre cria uma cópia duplicada da capa no disco (como pode ser visto em @ do Simulat_EXTERNAL_DATA pasta)

O contexto e os objetos na memória permanecem corretos (e, portanto, tudo na interface do usuário está OK), até que o aplicativo seja reiniciado, a capa geralmente énad.

iOS 12 específico

No iOS 12, posso reproduzir de forma determinística o erro no simulador, em dispositivos físicos, e os usuários também relataram o erro. Não consigo reproduzir o erro no iOS 11.4 e nenhum usuário relatou o erro anterior ao iOS 12.

Steps taken

Eu ativei "-com.apple.CoreData.ConcurrencyDebug 1 ", portanto, não deveria estar acessando nada da fila errada. Também habilitei"-com.apple.CoreData.SQLDebug 3 "para que eu possa ver exatamente o que foi escrito.

Verifiquei se a instância do livro (e, portanto, a capa) não é modificada pelo meu código antes da associação com a nova sessão, marcandohasChanges, pouco antes de eu fazernewSession.book = book econtext.save().

Para ter 100% de certeza de que não estou tocando a propriedade cover em nenhum segmento, coloquei um curto-circuito em meus getters e setters para essa propriedade. Nenhuma melhoria.

Eu tentei usarobjectID para solicitar uma instância do livro imediatamente antes da associação e salvar. Nenhuma melhoria.

Eu até tentei a opção em que o contexto mantém fortes referências a todos os objetos, apenas para garantir que não houvesse algum tipo de problema de gerenciamento de memória. Nenhuma melhoria.

Questã

Alguma idéia para os próximos passos?

Atualização de statu

Este é um defeito no iOS 12. Consulte a resposta aceita abaixo para obter uma descrição detalhada de uma solução alternativa razoáve