5

Просто немного истории. Я долгое время являлся разработчиком Windows, C #, и для нового проекта для моего работодателя мне пришлось перейти на OSX и начать изучать разработку под iOS. Другими словами, я все еще довольно новичок в среде Mac/OSX.

Ранее сегодня я решил, что я закрою XCode и реорганизую свой проект по тестированию и обучению, а также проекты, которые я создал в XCode и которые содержат активы, которые мне, скорее всего, потребуется повторно использовать. Когда я снова запустил XCode, я с удивлением увидел, что все мои недавние проекты все еще были в списке «Последние», и они указывали на новое местоположение файла! Милая!

Как XCode узнал, где находятся мои проекты? Является ли функция операционной системы, файловой системы или XCode имеет какую-то форму интеллекта, встроенную в систему для обнаружения вопросов такого типа?

2 ответа2

4

Эта функциональность доступна практически из любого меню « Файл» Открыть недавнее приложение, предоставляемого вспомогательными методами в LaunchServices/LSSharedFilesList.h (который также является именем plist файлов, хранящих эту информацию, например, ~/Library/Preferences/com.apple.Preview.LSSharedFilesList.plist).

Эти записи содержат сериализованные NSData (предположительно), которые вы можете скопировать и записать в файл, например, с помощью шестнадцатеричного редактора. Они содержат полный путь к файлу, имя тома, на котором находится файл, UUID и некоторую дополнительную информацию, которую я в настоящее время не могу понять, если. Я предполагаю, что UUID используется для разрешения ссылки на файл, если это необходимо.


NSURL могут быть преобразованы в ссылки на файлы, которые могут быть разрешены позже, даже когда файл был перемещен. Этот ответ на StackOverflow содержит больше технической информации.


Я не уверен, но HFS+ имеет inode, которые однозначно идентифицируют файл. Функциональность NSURL возможно реализована поверх этого. Наблюдаемое поведение, по-видимому, указывает на это: если вы перемещаете файл в другую файловую систему, он удаляется из списка файлов « Открыть недавно» , возможно потому, что он больше не может быть разрешен.

3

Я не знаю, как это делает XCode, но вот общий ответ.

В дополнение к путям объекты файловой системы могут иметь другие идентификаторы, такие как номер индекса в файловых системах Unix или идентификатор объекта в Windows NTFS, которые часто можно использовать для поиска всех путей к файлу с известным идентификатором. Этот идентификатор или номер всегда остаются неизменными до тех пор, пока сам объект остается в той же файловой системе, независимо от того, в какой каталог вы его перемещаете.

У объектов также есть другие, более видимые, но менее надежные метаданные, такие как имя, дата создания или размер. Если идентификатор объекта неизвестен или нигде не найден, программа может искать во всех файловых системах любой объект с таким же именем, типом и размером или с использованием других критериев. Это то , что Mac OS X Псевдонимы и окно Ярлыки делают , когда их первоначальной цель отсутствует (хотя ярлыки работают только в оболочке Windows, в то время как псевдонимы более интегрированы с Mac OS).

Может случиться так, что XCode просто использует те же функции, которые используются для разрешения неверных псевдонимов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .