Перемещение файлов в настоящую папку в Xcode


177

Когда я начинал свой проект, я был рад использовать группы в Xcode, а не в буквальных папках: поскольку я использую браузер в Xcode для доступа ко всему, все было хорошо организовано, и я был счастлив.

Тем не менее, теперь, когда проект готов к совместному использованию для контроля версий, сама папка проекта представляет собой ужасное шоу для тех, кто пытается сканировать ее через терминал, около 300 файлов, более половины из которых - графические.

Сейчас я пытаюсь реорганизовать вещи, создавая реальные папки и импортируя их в Xcode. К сожалению, Xcode не позволяет мне работать с ними так, как с группами. Например, если я щелкаю правой кнопкой мыши по фактической добавленной папке (синей, а не желтой) и выбираю добавить существующие файлы, она фактически не помещает их в эту папку, а помещает их в корень.

Точно так же я не могу переместить файл из поддельной папки (группы) в настоящую папку: Xcode не считает настоящие папки допустимыми местами для перемещения материалов.

Чего мне не хватает? Как я могу убедить Xcode позволить мне использовать папки так же, как я использую группы? Здесь есть ответ на несколько похожий вопрос , но он фактически не решает мою проблему, так как я работаю с существующими файлами.

Ответы:


176

Современный (и очень простой!) Подход на 2017 год (Xcode 6, 7, 8, а иногда и 9, поскольку он делает это автоматически иногда):

Если вы перемещаете группу файлов в новую папку и сохраняете дочернюю иерархию, на самом деле это намного проще, чем перемещать каждый файл по отдельности:

  1. Создайте новые группы в дереве папок XCode и организуйте свои файлы в них, как вам нравится
  2. Создайте в Finder соответствующее дерево физических папок и упорядочьте в них ваши физические файлы в соответствии с тем, что вы делали на шаге 1.
  3. Все ссылки в Xcode теперь должны быть красными (это нормально!).
  4. От менеджера Идентичности и Типа выберите Группу в XCode, которую вы хотите переместить, затем щелкните значок папки на информационной панели:

  5. В диалоговом окне выбора Finder найдите эквивалентную новую папку, созданную для этой группы на шаге 2. Теперь все файлы в этой группе будут автоматически обнаружены!

Разве это не мило? Самое большее, вам придется повторить эти 5 шагов один раз для каждой новой группы, которую вы создали (что превосходит перемещение каждого файла в отдельности!)

Бонусные очки!

Скажем, вы случайно испортили ход, и теперь куча ваших файлов красного цвета, и их невозможно найти: выберите несколько поврежденных файлов и, используя один и тот же значок папки на снимке экрана с шага 4, найдите правильную папку, содержащую эти файлы, и они автоматически разрешат пропущенные пути.


3
Однако при этом файлы не отслеживаются в Git. Конечно, я всегда могу прочитать файл, но я что-то упустил?
SleepNot

2
@jeraldo не уверен, какой вкус у тебя мерзавца, но у меня никогда не было этой проблемы. Вы можете, однако, легко сделать git add ..
brandonscript

Я что-то упустил, и я не уверен, что это такое. Может быть, я не понимаю значения слов "организовать ваши файлы в них ..." в шаге (1) ?? Я предполагаю, что это означает «Добавить файлы в группу путем перетаскивания или что-то еще». Но если я сделаю это, то, конечно, Xcode распознает файлы и не покажет их красным, как указано в шаге (3). Есть идеи, что я делаю не так?
hkatz

Вы переместили физические файлы, как на шаге 2?
brandonscript

1
Ах, я понял это! Шаг (2) был слишком загадочным для меня. Если бы я переписывал его, я бы сказал что-то вроде «Создайте соответствующее физическое дерево папок, а затем используйте команду Xcode Show in Finder, чтобы найти файлы, которые вы добавили в новую группу на шаге (1), и физически переместить эти файлы. в папку, которую вы только что создали. " Как-то так ...
hkatz

119

ДАЛЬНЕЙШЕЕ ИЗДАНИЕ ИЮНЯ 2017: Xcode 9 делает это автоматически, без особых усилий. Этот ответ и ответ Брэндона относятся только к Xcode 8 и более ранним версиям.

РЕДАКЦИЯ ДЕКАБРЯ 2016: Ответ Брэндона ниже - лучшее решение. Когда этот ответ был создан в 2010 году, это был единственный вариант, который я смог найти. Теперь я предлагаю ответ Брэндона ниже.


Оказывается, что перемещение файлов в реальные папки, безусловно, возможно, хотя и не так просто, как должно быть.

Я получил основную информацию от вопроса здесь, Xcode, организующего файлы и папки (основные объекты модели данных - iPhone) , но изучил важные вещи по пути.

Процесс

Перемещение файлов представляет собой двухэтапный процесс с несколькими подэтапами:

  1. Скажите Xcode, где вы хотите, чтобы файлы были :

    • Щелкните правой кнопкой мыши, удерживая клавишу «Control», по файлу или группе файлов, которые вы хотите переместить, и выберите « Информация» в появившемся контекстном меню. Появится окно « Информация о группе» или « Информация о файле» .

    • Нажмите кнопку « Выбрать» в правой части окна в области « Путь» . Откроется диалоговое окно.

    • Перейдите в папку, в которую вы хотите переместить файлы. Создайте новую папку, если это необходимо. Нажмите кнопку « Выбрать» в правом нижнем углу диалогового окна, затем закройте окно « Информация о группе» / «Информация о файле» .

    • Имена файлов / файлов в группе станут красными, чтобы указать, что XCode не может найти их в указанном вами месте.

  2. Переместить фактические файлы

    • В Finder (или Git) переместите файлы, выбранные на шаге 1, в те папки, в которых вы хотите их разместить.

    • Вернитесь к Xcode. Файлы / группы должны снова стать черными. Если они все еще красные, то вы пропустили перемещение чего-либо в нужную папку.

подсказки

Я изучил пару важных вещей, настраивая ~ 300 файлов в этом проекте:

  • Некоторые файлы отказываются двигаться таким образом; то есть при переходе к новому назначению кнопка « Выбрать» отключается, как и кнопка « Новая папка» . Решение, хотя я не знаю, почему это имеет значение, состоит в том, чтобы сначала использовать Xcode, чтобы поместить эти файлы в группу (щелкните файлы правой кнопкой мыши и удерживая клавишу Control, выберите « Группа» и дайте группе имя), а затем переместите группа на новое место. После того, как вы фактически переместили файлы в Finder, вы можете удалить их из группы (перетащив их в новую родительскую группу / папку и удалив группу).

  • Остановитесь и выполните сборку каждые несколько минут после выполнения шага 2 для нескольких файлов. Сборка покажет вам, если вы что-то напортачили, чтобы вам было легче вернуться и исправить это, прежде чем вы нанесли слишком много урона.

  • Если файлы не будут перемещены туда, куда вы хотите, - у меня было чертовски много времени, перемещая некоторые файлы, которые были созданы ранее в папке Classes - вы можете просто перетащить их из старого места в Finder, чтобы где-нибудь под рукой, например на рабочем столе, удалите ссылки на них в XCode, а затем повторно импортируйте их с помощью правой кнопки мыши, удерживая нажатой клавишу « Control», добавив « Существующие файлы» .

  • Если в прошлом вы использовали XCode для удаления ссылок на файлы, не перемещая их в корзину в этом проекте, вы найдете файлы, которые не нужно перемещать, а просто сидеть там. Будьте осторожны, чтобы вы не делали то, что я делал, путая имена текущей группы файлов, которые я перемещал, и старые файлы, которые больше не были связаны, настаивая на том, чтобы Xcode импортировал их, потому что вы думали, что они плотные.

Надеюсь, это поможет будущему человеку. Я удивлен, что это было так же сложно, а иногда и сложно, как это было.


2
Наличие всех файлов в одном каталоге действительно доставляло мне неприятности. Спасибо тебе за это!
Кертис Шипли

Вы также можете: по желанию переставить структуру каталогов в Finder, удалить все «красные файлы» в проекте, а затем добавить их обратно в проект с помощью опции «группа в папках»
bshirley,

@bshirley Очень верно, и если все файлы в главном каталоге должны быть в проекте, это может сэкономить много времени. К сожалению, с проектами, в которых участвуют несколько человек или у которых было много релизов с течением времени, там может быть любое количество файлов, которые не следует добавлять в проект. В этом случае вам придется отслеживать, какие из них вы удалили, чтобы восстановить их, или что-то подобное.
Мэтью Фредерик

11
в xcode 4 мне пришлось сделать что-то другое - не было контекстных ссылок «получить информацию» при щелчке правой кнопкой мыши. вместо этого мне пришлось отображать вид и тип ввода (вероятно, имя для этого я не знаю). это самая правая кнопка в настройках просмотра в строке заголовка xcode4. сначала я перемещаю файл в файловой системе, а затем нажимаю странный значок рядом с путем и сообщаю xcode, где находится новый файл.
Эван Пон

6
Проблема с перемещением файлов заключается в том, что, когда он уже находится под контролем SVN, вам необходимо убедиться, что вы используете приложение, такое как Версии или Cornerstone, для перемещения файлов ... Или вы столкнетесь с ужасными проблемами контроля версий! Я бы хотел, чтобы Apple просто выбросила идею «групп» и имела все в реальных папках, а-ля Eclipse ...
Джоуи

104

В Xcode 5 или Xcode 6:

  1. Создайте папки, которые соответствуют вашим группам в Finder
  2. Переместите файлы в эти папки в Finder
  3. Выберите каждый файл, который красный на боковой панели XCode слева
  4. Нажмите кнопку «Показать / Скрыть утилиты», чтобы открыть правую боковую панель (см. Рисунок)
  5. В «Идентичность и тип» нажмите крошечную кнопку и выберите местоположение файла (см. Рисунок).

введите описание изображения здесь

Приветствия.


1
Примечание для некоторых пользователей: если вы получаете сообщение об ошибке, что изменения были внесены после того, как информация заголовка была предварительно скомпилирована, просто выполните Очистку продукта, и все получится!
квант

Я следовал этому подходу в Xcode 5.1.1, чтобы переместить файл заголовка в физическую папку. Я могу переместить файл. Но Xcode говорит «файл не найден» при сборке проекта. Не могли бы вы помочь.
Рашми Ранджан Маллик

22

Я нашел самый надежный способ обойти ужасающий дизайн XCode здесь - это организовать ВСЕ ваши файлы в Finder по двум причинам:

  1. Finder не делает «ошибок», в отличие от графического интерфейса XCode
  2. После того, как все организовано в Finder, вы можете перетаскивать целые папки Finder в XCode, и ... он делает то, что вам нужно, без усилий

Даже при перемещении существующих файлов XCode это сделать быстрее:

  1. Выберите файлы в Finder
  2. Создайте для них папку в Finder
  3. Перетащите их в папку (автоматически перемещает их)
  4. Перетащите папку Finder в Xcode (автоматически: создает папку Xcode, добавляет каждый файл в папку Finder)
  5. cmd-выберите каждый «красный» файл, который вы сейчас видите в XCode (потому что вы их переместили) и нажмите клавишу удаления

NB: я никогда не использую опцию «создавать перетаскиваемые папки с подгруппами», потому что в XCode 3 это часто безнадежно глючило и могло испортить проекты. Apple явно (ИМХО) НЕ использует эту функцию для внутреннего использования, иначе никогда бы не допустили такой ошибки; если Apple не использует что-либо, обычно это тоже небезопасно - они не очень хороши в тестировании :)


2
Я попробую это завтра ... это было простое решение, которое я искал. Почему они сделали это так сложно? Если бы он просто отражал файловую систему, это было бы гораздо менее запутанным. Спасибо!
delux247,

Это было четвертое решение, которое я попробовал, и единственное, которое я смог получить для работы с xcode 5.1.1. Кроме того, по некоторым причинам это не будет работать ни для одной из моих категорий. Мне пришлось буквально переместить их в корзину, вытащить их обратно из корзины, а затем снова добавить их в xcode, и, наконец, это сработало.
user3344977

21

Существует простой в установке и использовании инструмент командной строки - «synx», доступный в github, который делает именно то, что здесь необходимо.

Он реорганизует папку проекта XCode в поиске, чтобы соответствовать группам XCode в проекте.

Вы можете найти его здесь: https://github.com/venmo/synx

ОБНОВЛЕНИЕ: XCode 9 поддерживает эту функцию по умолчанию. Таким образом, больше не нужно использовать другие инструменты!


Отличный инструмент, но он работает очень медленно в больших проектах (может потребоваться несколько минут, чтобы завершить работу) и, похоже, больше не поддерживается.
Лукаш

6

Xcode 9

Кажется, Xcode 9 теперь поддерживает его по умолчанию. При перемещении файлов из группы в другую, файл также будет перемещен из старой папки в новую папку. Об этом было объявлено в WWDC 2017.



2

Я обычно перемещаю файлы в каталог прямо в Finder, затем исправляю файлы с красными именами в XCode в их диалоге «Get Info»: нажмите кнопку «Choose ...» и выберите новое местоположение файла. Это первый ответ, когда я хочу переместить файлы в XCode, и это работает.


1

Начиная с Xcode 4.5, когда вы перетаскиваете структуру папок, она автоматически превращается во вложенные группы в Навигаторе проекта. Затем, если вы посмотрите на диск (например, щелкните правой кнопкой мыши и выберите «Показать в Finder»), структура папок будет сохранена.

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


1

Для перемещения папки в xcode 4.5 я просто ...

  1. Удалите файлы / группы из xcode и выберите «Удалить ссылку».
  2. Зайдите в искатель и переместите папку / файлы по мере необходимости.
  3. После этого я возвращаюсь в Xcode и выбираю File-> Add Files to {ProjectName}.
  4. Убедитесь, что установлен флажок «Копировать элементы в папку целевой группы (при необходимости)»
  5. Убедитесь, что «Создать группу для любой добавленной папки» отмечен
  6. Убедитесь, что «Добавить в цель» отмечен для вашего проекта

1

Самый простой метод для XCode 8 ....

Предположим, у вас есть файлы A, B, C в логической группе, но вы хотите, чтобы они были перемещены в папку на вашем жестком диске.

  1. Создать папку назначения через Finder
  2. Добавьте папку в XCode (Файл -> Добавить файлы), используя панель параметров, чтобы выбрать ссылку на папку (не группу).
  3. Перетащите файлы A, B, C из (старой) группы в (новую) ссылку на папку в навигаторе проекта. XCode переместит файлы в папку, как в проекте, так и на диске.

Готово.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.