Como o XCode / OSX fez isso? Movido um projeto XCode para outro local. O XCode sabia automaticamente onde estava localizado

5

Apenas um pouco rápido de fundo. Eu sou um desenvolvedor de longa data do Windows, C # e para um novo projeto para o meu empregador, eu tive que fazer a transição para o OSX e começar a aprender o desenvolvimento do iOS. Em outras palavras, ainda sou novo no ambiente Mac / OSX.

Hoje cedo decidi fechar o XCode e reorganizar meu projeto de teste e aprendizado, além de projetos que criei no XCode que contêm ativos que provavelmente precisarei reutilizar. Quando demiti o XCode, fiquei surpreso ao ver que todos os meus projetos recentes ainda estavam na lista Recentes e eles estavam apontando para o novo local do arquivo! Doce!

Como o XCode sabia onde meus projetos estavam localizados? É uma função do sistema operacional, o sistema de arquivos ou XCode tem alguma forma de inteligência embutida no sistema para detectar esse tipo de perguntas?

    
por RLH 15.12.2011 / 14:58

2 respostas

4

Esta funcionalidade está disponível no menu File> Open Recent de qualquer aplicação, fornecido pelos métodos de conveniência em LaunchServices/LSSharedFilesList.h (que é também o nome dos ficheiros plist que armazenam esta informação, por ex. ~/Library/Preferences/com.apple.Preview.LSSharedFilesList.plist ).

Essas entradas contêm um NSData (presumivelmente) serializado, que você pode copiar e gravar em um arquivo, por exemplo usando um editor hexadecimal. Eles contêm o caminho completo para o arquivo, o nome do volume em que o arquivo está, um UUID e algumas informações adicionais que atualmente não posso fazer sentido se. Eu suponho que o UUID é usado para resolver a referência do arquivo, se necessário.

NSURL s pode ser convertido em referências de arquivos que podem ser resolvidas mais tarde, mesmo quando um arquivo foi movido. Esta resposta no StackOverflow tem mais informações técnicas.

Não tenho certeza, mas o HFS + tem inodes que identificam um arquivo de maneira exclusiva. A funcionalidade NSURL é possivelmente implementada em cima disso. O comportamento observável parece indicar isso: se você mover um arquivo para um sistema de arquivos diferente, ele será removido da lista de arquivos Open Recent , provavelmente porque não pode mais ser resolvido.

    
por 15.12.2011 / 15:18
3

Eu não sei como o XCode faz isso, mas aqui está uma resposta genérica.

Além dos caminhos, os objetos do sistema de arquivos podem ter outros identificadores, como o inode number em Unix filesystemes ou object ID no Windows NTFS, que podem ser usados para encontre todos os caminhos para um arquivo com ID conhecido. Este identificador ou número permanece sempre o mesmo, desde que o próprio objeto permaneça no mesmo sistema de arquivos, independentemente do diretório para o qual você o move.

Os objetos também têm outros metadados mais visíveis, mas menos confiáveis, como nome, data de criação ou tamanho. Se o ID do objeto é desconhecido ou não foi encontrado em lugar algum, o programa pode pesquisar todos os sistemas de arquivos por qualquer objeto com o mesmo nome, tipo e tamanho, ou usando outros critérios. Isto é o que o Mac OS X Aliases e Windows Shortcuts quando o destino original está faltando (embora os atalhos funcionem somente no shell do Windows, enquanto os aliases estão mais integrados ao Mac OS).

Pode ser que o XCode use as mesmas funções usadas para resolver aliases quebrados.

    
por 15.12.2011 / 15:12