Movendo arquivos para uma pasta real no Xcode

177

Quando iniciei meu projeto, fiquei feliz em usar os Grupos no Xcode em vez de em pastas literais: Como estou usando o navegador no Xcode para acessar tudo, as coisas estavam bem organizadas e fiquei feliz.

No entanto, agora que o projeto está prestes a ser compartilhado para controle de versão, a própria pasta do projeto é um programa de terror para quem tenta digitalizá-lo por um terminal, com cerca de 300 arquivos, dos quais mais da metade são gráficos.

Agora estou tentando reorganizar as coisas, criando pastas reais e importando-as para o Xcode. Infelizmente, o Xcode não me permite trabalhar com eles da mesma forma que com grupos. Por exemplo, se eu clicar com o botão direito do mouse em uma pasta adicionada real (azul, não amarela) e optar por adicionar arquivos existentes, ele não os colocará nessa pasta, mas na raiz.

Da mesma forma, não consigo mover um arquivo de uma pasta falsa (um grupo) para uma pasta real: o Xcode não considera as pastas reais como locais válidos para onde mover coisas.

o que estou perdendo? Como convencer o Xcode a me permitir usar as pastas da maneira que uso grupos? Há uma resposta aqui para uma pergunta um pouco semelhante , mas na verdade não resolve o meu problema, pois estou trabalhando com arquivos existentes.

Matthew Frederick
fonte

Respostas:

176

Uma abordagem moderna (e absolutamente simples!) Para 2017 (Xcode 6, 7, 8 e às vezes 9, já que faz isso automagicamente algumas vezes):

Se você estiver movendo vários arquivos para uma nova pasta e mantendo a hierarquia filho, é muito mais fácil do que mover cada arquivo individualmente:

  1. Crie novos grupos na árvore de pastas do Xcode e organize seus arquivos neles da maneira que desejar.
  2. Crie uma árvore de pastas físicas correspondente no Finder e organize seus arquivos físicos para corresponder ao que você fez na etapa 1.
  3. Todas as referências no Xcode agora devem estar vermelhas (tudo bem!).
  4. No gerenciador Identidade e Tipo, selecione o Grupo no Xcode que você deseja realocar e clique no ícone da pasta no painel de informações:

  5. Na caixa de diálogo de seleção do Finder, localize a nova pasta equivalente que você criou para este grupo na etapa 2. Todos os arquivos dentro desse grupo agora serão redescobertos automaticamente!

Isso não é legal? No máximo, você terá que repetir essas 5 etapas uma vez para cada novo grupo criado (o que é melhor do que relocar cada arquivo individualmente!)

Pontos bônus!

Digamos que você estragou tudo acidentalmente e agora vários arquivos estão vermelhos e não podem ser encontrados: selecione vários arquivos quebrados e, usando o mesmo ícone de pasta na captura de tela da etapa 4, encontre a pasta correta que os contém arquivos e eles resolverão automaticamente os caminhos ausentes.

brandonscript
fonte
3
Fazer isso, no entanto, torna os arquivos não rastreados no Git. Claro que sempre posso ler o arquivo, mas estou perdendo alguma coisa?
SleepNot
2
@ jeraldo não sei qual o sabor do git que você está usando, mas nunca tive esse problema. Você pode, no entanto, facilmente git add ..
Brandoncript # 14/15
Estou sentindo falta de algo e não tenho certeza do que é. Talvez eu não esteja entendendo o significado das palavras "organize seus arquivos neles ..." na etapa (1)? Suponho que isso significa "Adicione os arquivos ao grupo arrastando e soltando ou o que for". Mas se eu fizer isso, é claro que o Xcode reconhece os arquivos e não os mostra em vermelho, como é indicado na etapa (3). Alguma idéia do que estou fazendo de errado?
Hkatz
Você moveu os arquivos físicos como na etapa 2?
brandonscript
1
Ah, eu descobri! O passo (2) foi um pouco enigmático para mim. Se eu estivesse reescrevendo, diria algo como "Criar uma árvore de pastas físicas correspondente, use o comando Mostrar no Localizador do Xcode para localizar os arquivos que você adicionou ao novo Grupo na Etapa (1) e mover fisicamente esses arquivos na pasta que você acabou de criar. " Algo assim ...
hkatz 10/12/16
119

EDITADO EM JUNHO DE 2017: Xcode 9 faz isso automaticamente, não sendo necessário nenhum esforço especial. Esta resposta e a Brandon se aplicam apenas ao Xcode 8 e versões anteriores.

EDITADO EM DEZEMBRO DE 2016: A resposta de Brandon abaixo é uma solução melhor agora. Quando essa resposta foi criada em 2010, essa era a única opção que eu poderia encontrar. Agora sugiro a resposta de Brandon , abaixo.


Acontece que mover arquivos para pastas reais certamente é possível, embora não seja tão simples quanto deveria ser.

Eu obtive as informações básicas de uma pergunta aqui, Xcode organizando arquivos e pastas (objetos principais do modelo de dados - iPhone) , mas aprendi coisas importantes ao longo do caminho.

O processo

Mover os arquivos é um processo de duas etapas com várias subetapas:

  1. Diga ao Xcode onde você deseja que os arquivos estejam :

    • Clique com o botão direito do mouse / clique com a tecla Control pressionada no arquivo ou grupo de arquivos que você deseja mover e escolha Obter informações no menu contextual exibido. A janela Informações do grupo ou Informações do arquivo é exibida.

    • Clique no botão Escolher no lado direito da janela na área Caminho . Uma caixa de diálogo é exibida.

    • Navegue até a pasta para a qual você deseja mover os arquivos. Crie uma nova pasta, se necessário. Clique no botão Escolher no canto inferior direito da caixa de diálogo e feche a janela Informações do grupo / Informações do arquivo .

    • Os nomes dos arquivos no grupo ficarão vermelhos para indicar que o Xcode não pode encontrá-los no local especificado.

  2. Mover os arquivos reais

    • No Finder (ou Git), mova os arquivos selecionados na etapa 1 para as pastas reais em que você deseja.

    • Volte para o Xcode. Os arquivos / grupos devem ter ficado pretos novamente. Se algum ainda estiver vermelho, você esqueceu de mover algo para a pasta correta.

Dicas

Aprendi algumas coisas importantes ao ajustar os ~ 300 arquivos neste projeto:

  • Alguns arquivos se recusam a se mover dessa maneira; ou seja, quando você navega para o novo destino, o botão Escolher é desativado, assim como o botão Nova Pasta . A solução, embora eu não saiba por que isso faz diferença, é primeiro usar o Xcode para colocar esses arquivos em um grupo (clique com o botão direito do mouse nos arquivos e escolha Grupo e dê um nome ao grupo) e mova o grupo para o novo local. Depois de mover os arquivos no Finder, você pode removê-los do grupo (arrastando-os para o novo grupo / pasta pai e excluindo o grupo).

  • Pare e crie a cada poucos minutos, após concluir a etapa 2 para vários arquivos. A compilação informará se você estragou alguma coisa até agora, facilitando o retorno e a correção antes de causar muito dano.

  • Se os arquivos não forem movidos para onde você deseja - passei um tempo demorado movendo alguns arquivos que foram criados desde o início na pasta Classes - você pode simplesmente arrastá-los para fora do antigo local no localizador para em algum lugar útil como a área de trabalho, exclua as referências a elas no Xcode e importe-as novamente com a tecla direito / controle, clique na opção Adicionar arquivos existentes .

  • Se no passado você usou o Xcode para excluir referências a arquivos sem movê-las para a lixeira neste projeto, você encontrará arquivos que não precisam ser movidos, mas apenas sentados lá. Tenha cuidado para não fazer o que eu fiz, confundindo os nomes de um grupo atual de arquivos que eu estava movendo e os arquivos mais antigos, que não estão mais vinculados, insistindo que o Xcode os importe porque você achou que estava sendo denso.

Espero que isso ajude alguma pessoa futura. Estou surpreso que tenha sido tão difícil e, ocasionalmente, complicado como era.

Matthew Frederick
fonte
2
Ter todos os arquivos no mesmo diretório estava realmente me incomodando. Obrigado por isso!
Curtis Shipley
você também pode: reorganizar a estrutura de diretórios à vontade no Finder, remover todos os "arquivos vermelhos" no projeto, e depois adicioná-los todos de volta para o projeto usando o "grupo em pastas" opção
bshirley
@ bshirley Muito verdadeiro, e se todos os arquivos no diretório principal precisarem estar no projeto, isso poderá economizar muito tempo. Infelizmente, com projetos que envolvem várias pessoas ou que tiveram muitos lançamentos ao longo do tempo, pode haver vários arquivos que não devem ser adicionados ao projeto. Nesse caso, você precisaria rastrear quais foram removidas para restaurá-las ou algo semelhante.
Matthew Frederick
11
no xcode 4, tive que fazer algo diferente - não vi nenhum link contextual de 'obter informações' ao clicar com o botão direito. em vez disso, tive que exibir a identidade e o tipo de exibição (provavelmente um nome para isso que não conheço). é o botão mais à direita nas opções de exibição na barra de cabeçalho xcode4. movo o arquivo no sistema de arquivos primeiro e, em seguida, clique no ícone estranho ao lado do caminho e digo ao xcode onde está o novo arquivo.
Evan Pon
6
O problema com a movimentação de arquivos é que, quando ele já está sob controle do SVN, é necessário usar um aplicativo como Versions ou Cornerstone para mover os arquivos ... Ou você terá problemas terríveis de controle de versão! Desejo a Apple só iria lançar a ideia "grupos" de distância e tem tudo em pastas reais, a-la Eclipse ...
jowie
104

No Xcode 5 ou Xcode 6:

  1. Crie as pastas que são mapeadas para seus grupos no Finder
  2. Mova os arquivos para essas pastas no Finder
  3. Selecione cada arquivo em vermelho na barra lateral do Xcode, à esquerda
  4. Clique no botão "Mostrar / ocultar utilitários" para exibir a barra lateral direita (veja a figura)
  5. Em "Identidade e tipo", clique no botão minúsculo e selecione o local do arquivo (veja a figura)

insira a descrição da imagem aqui

Felicidades.

reinaldoluckman
fonte
1
Observe para alguns usuários, se você estiver recebendo um erro de que as alterações foram feitas depois que as informações do cabeçalho foram pré-compiladas, basta fazer uma Limpeza do produto e tudo vai dar certo!
quantum
Eu segui essa abordagem no Xcode 5.1.1 para mover um arquivo de cabeçalho para uma pasta física. Eu sou capaz de mover o arquivo. Mas o Xcode diz "arquivo não encontrado" durante a criação do projeto. Poderia ajudar por favor.
Rashmi Ranjan mallick
22

Encontrei a maneira mais confiável de contornar o design assustador do XCode aqui é organizar TODOS os seus arquivos no Finder, por dois motivos:

  1. O Finder não comete "erros", ao contrário da GUI do XCode
  2. Depois que as coisas são organizadas no Finder, você pode arrastar / soltar pastas inteiras do Finder no XCode e ... faz exatamente o que você queria, sem nenhum esforço

Mesmo ao mover arquivos XCode existentes, é mais rápido fazer isso:

  1. Selecione os arquivos no Finder
  2. Crie uma pasta no Finder para eles
  3. Arraste / solte-os na pasta (os move automaticamente)
  4. Arraste / solte a pasta Finder no Xcode (automaticamente: cria a pasta Xcode, adiciona todos os arquivos na pasta Finder)
  5. cmd-selecione todos os arquivos "vermelhos" que você vê agora no Xcode (porque você os moveu) e pressione a tecla Delete

NB: Eu nunca uso a opção "criar pastas arrastadas com subgrupos", porque no XCode 3 isso era muitas vezes irremediavelmente buggy e poderia corromper projetos. A Apple claramente (IMHO) NÃO usa esse recurso internamente, caso contrário, nunca teria sido permitido que ele fosse tão problemático; se a Apple não usar nada, geralmente também não é seguro usá-lo - eles não são bons em testes :)

Adão
fonte
2
Eu estou tentando isso amanhã .. essa foi a solução simples que eu estava procurando. Por que eles fizeram isso tão difícil? Se apenas espelhasse o sistema de arquivos, seria muito menos confuso. Obrigado!
Delux247 28/09/12
Esta foi a quarta solução que tentei e a ÚNICA solução que consegui trabalhar com o xcode 5.1.1. Além disso, por algum motivo, isso não funcionaria em nenhuma das minhas categorias. Eu tive que literalmente movê-los para o Lixo, retirá-los do Lixo e adicioná-los novamente ao xcode e, finalmente, funcionou.
precisa saber é o seguinte
21

É simples configurar e usar a Command Line Tool - "synx" disponível no github que faz exatamente o necessário aqui.

Ele reorganiza a pasta do projeto Xcode no localizador para corresponder aos grupos Xcode no projeto.

Você pode encontrá-lo aqui: https://github.com/venmo/synx

ATUALIZAÇÃO: O XCode 9 suporta esse recurso por padrão. Portanto, não é mais necessário usar outras ferramentas!

Nitesh Borad
fonte
Ótima ferramenta, mas fica extremamente lenta em projetos maiores (pode levar alguns minutos para concluir o trabalho) e parece não ter mais suporte.
Lukasz 28/07
6

Xcode 9

Parece que o Xcode 9 agora o suporta por padrão. Quando você move arquivos de um grupo para outro, o arquivo também será movido da pasta antiga para a nova pasta. Isso foi anunciado na WWDC 2017.

Guy Daher
fonte
2

Normalmente, movo os arquivos para o diretório diretamente no Finder e, em seguida, corrijo os arquivos com nomes em cores vermelhas no XCode na caixa de diálogo "Obter informações": clique no botão "Escolher ..." e selecione o novo local do arquivo. Essa é a primeira resposta quando quero mover arquivos no XCode e funciona.

Xie Yanbo
fonte
1

A partir do Xcode 4.5, quando você arrasta em uma estrutura de pastas, ele é automaticamente transformado em grupos aninhados no Navegador de Projeto. Então, se você procurar no disco (por exemplo, clique com o botão direito do mouse e escolha Mostrar no Finder), a estrutura da pasta foi mantida.

Eu achei que tentar consertar as coisas de um projeto mais antigo era apenas uma dor. Ficou muito mais fácil excluir esses arquivos e arrastá-los novamente.

Snowcrash
fonte
1

Para mover uma pasta no xcode 4.5, apenas ...

  1. Exclua os arquivos / grupos do xcode e selecione "Remover referência".
  2. Entre no localizador e mova a pasta / arquivos, conforme necessário.
  3. Uma vez feito, volto ao Xcode e escolha Arquivo-> Adicionar arquivos ao {ProjectName}.
  4. Verifique se "Copiar itens na pasta do grupo de destino (se necessário)" está marcado
  5. Verifique se "Criar grupo para qualquer pasta adicionada" está marcado
  6. Verifique se "Adicionar ao destino" está marcado para o seu projeto
Shannon Cole
fonte
1

Técnica mais fácil para o XCode 8 ....

Supondo que você tenha os arquivos A, B, C em um grupo lógico, mas deseje que eles sejam movidos para uma pasta no seu disco rígido.

  1. Crie uma pasta de destino via Finder
  2. Adicione a pasta no XCode (Arquivo -> Adicionar arquivos) usando o painel Opções para selecionar uma referência de pasta (não um grupo)
  3. Arraste os arquivos A, B, C do grupo (antigo) para a referência da pasta (nova) no navegador do projeto. O XCode moverá os arquivos para a pasta, tanto no projeto quanto no disco.

Feito.

software evoluído
fonte