Como excluir uma versão do modelo de dados antiga / não usada no Xcode

163

Como posso excluir um modelo de dados antigo no Xcode? A opção está desativada no menu. (Os modelos que desejo excluir não foram divulgados ao público - são modelos de desenvolvimento intermediários.)

SAHM
fonte
Você quer dizer que a opção "Excluir" no menu "Editar" está desativada (enquanto o arquivo antigo do Modelo de dados está selecionado no Inspetor de arquivos)? Ou você quer dizer algo completamente diferente?
Michael Dautermann 10/10
Sim, a opção de exclusão no menu Editar e também no menu de controle com o botão direito do mouse (e qualquer menu que eu possa encontrar) está desativada. Eu sei que algumas pessoas estão indo para um xcode anterior para excluir versões antigas / não utilizadas, mas não tenho uma instalada.
SAHM 10/10
Michael, você é capaz de fazer isso no xCode 4?
SAHM
sim ... nunca vi a opção de menu "excluir" desabilitada para nenhum dos meus projetos do XCode 4.
Michael Dautermann 11/11
Sepcifically para o xcdatamodel? Outros tiveram o mesmo problema com a exclusão do xcdatamodels XCode 4. Eu simplesmente não vi uma solução publicada.
SAHM

Respostas:

374

É um truque, mas funcionou para mim:

  1. Defina a versão atual do modelo no Xcode como aquela que você deseja manter
  2. Remova o arquivo .xcdatamodeld do seu projeto (clique com o botão direito do mouse -> Excluir -> Remover somente referência ).
  3. Mostrar o conteúdo do pacote .xcdatamodeld no Finder (Clique com o botão direito do mouse -> Mostrar Conteúdo do Pacote)
  4. Exclua os arquivos .xcdatamodel que você não deseja mais
  5. Adicione novamente o arquivo .xcdatamodeld ao seu projeto

Isso elimina a necessidade de modificar manualmente qualquer um dos arquivos de metadados do projeto.

David Avendasora
fonte
2
Tentei essa técnica e descobri que, devido à maneira como as versões do meu modelo foram nomeadas, a versão do modelo foi reorganizada incorretamente e a versão padrão incorreta foi selecionada quando adicionei novamente o arquivo xcdatamodel ao projeto. Talvez eu tenha até 38 versões de modelo e não alterei o nome da versão padrão, portanto, as versões são nomeadas "MY_APP 37.xcdatamodel". Eu queria excluir 38. Na importação, ele foi puxado em ordem lexical, significando que "MY_APP 10.xcdatamodel" foi o primeiro e selecionado como padrão. Não é o ideal no meu caso.
1655 Mike
1
Mike - mesmo problema para mim, embora eu tenha sido capaz de reordenar no project.pbxproj em um editor de texto sem nenhum drama importante. Ainda não é o ideal.
22613 Ian Kershaw
1
Isso não está funcionando com o Xcode 5.1.1. Anteriormente, com muitas alterações pequenas no modelo e números de versão incrementados, a migração automática leve funcionava corretamente. No entanto, depois de tentar remover todos os modelos "somente de desenvolvimento" estranhos usando essa abordagem, recebo o erro: "Erro: não é possível localizar ou inferir automaticamente o modelo de mapeamento para migração".
Dalmazio 12/09
1
na 6.4, não há opção para remover referências. Apenas foi excluído. O restante das etapas parecia funcionar
noobsmcgoobs
1
Isso parece funcionar no Xcode 10.2.1. Minha migração foi feita com algumas alterações no nome do atributo, portanto nada importante.
Gavin
35

Acabei de encontrar a necessidade de fazer isso. Eu criei uma nova versão do modelo e percebi que não precisava dela, afinal. Fiquei surpreso ao descobrir que não havia como excluí-lo (que eu poderia encontrar) do Xcode. Ainda assim, para removê-lo, fiz o seguinte:

Primeiro, verifiquei que não era minha versão atual do modelo. Depois fui ao Finder e encontrei meu arquivo * .xcdatamodeld. Clique com o botão direito e em Mostrar Conteúdo do Pacote. Lá você encontrará o arquivo de modelo real e poderá excluí-lo.

Isso ainda não o remove do Xcode e será exibido em vermelho nos Arquivos e Grupos. Para impedir que isso aconteça, volte ao Finder e Mostrar conteúdo do pacote no seu arquivo principal * .xcodeproj (você pode ter certeza de ter um backup disso primeiro). Lá, abra e edite project.pbxproj, faça uma busca no nome da versão do seu modelo, no meu caso "interval 8". Para mim, apareceu em duas linhas separadas. Eu removi essas linhas e agora está completamente removido do Xcode.

Daniel Wood
fonte
1
@ Daniel_Wood, sim, eu também tinha encontrado como fazê-lo manualmente, mas cuidado. Isso pode causar alguns problemas na linha ... Eu tive que refazer isso várias vezes, mas também acabou alterando as versões ativas e não ativas algumas vezes; quando você redefine a versão correta, ela não é movida para o topo da lista (às vezes), o que causa mais problemas! Muito obrigado pela contribuição. Parece bizarro que eles tenham removido esse recurso - nunca devemos ter que entrar no arquivo .xcodeproj!
SAHM
2

Isso funcionou para mim no XCode 10.3 sem que ocorra o problema de pedidos ao remover o modelo inteiro e adicioná-lo novamente:

  1. Selecione qualquer versão do modelo que não seja a que você deseja excluir.
  2. No XCode, clique com o botão direito do mouse no arquivo .xcdatamodeld e selecione 'Show in Finder'.
  3. Feche o XCode.
  4. No localizador, clique com o botão direito do mouse no mesmo arquivo e selecione 'Mostrar conteúdo do pacote'.
  5. Anote o nome do modelo que você deseja remover e, no Finder, exclua-o.
  6. Ainda no Finder, navegue até o arquivo do projeto (.xcodeproj).
  7. Clique com o botão direito e abra com Atom ou qualquer outro editor.
  8. No painel 'Projeto', abra o arquivo project.pbxproj.
  9. Remova todas as linhas que contêm o nome do modelo que você removeu (exemplo: "ABC 17.xcdatamodel"). Você encontrará duas linhas semelhantes à seguinte:

    9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * / = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; caminho = " ABC 17.xcdatamodel "; sourceTree = ""; };

    9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * /,

    Observe que se você encontrar uma terceira linha, será algo como:

    currentVersion = 9D88880323C545B800A789B9 / * ABC 17.xcdatamodel * /;

    Isso significa que é o modelo atualmente selecionado. Nunca exclua esta linha. Apenas mude o texto para outra versão do modelo.

  10. Abra novamente o XCode.

Tony
fonte
-4

Minha resposta não é específica ao problema, mas é rápida e funciona. Para aqueles que usam git. Você pode apenas descartar as alterações não organizadas.

git stash save --keep-index

Então você pode soltar esse esconderijo com um git stash dropcomando, se quiser.

RaffAl
fonte