Ответ 1
Я предлагаю хранить все ваши файлы .m,.h и .xib в одной папке, потому что упрощает локализацию строк при запуске ibtool для извлечения всех ссылок NSLocalizedString, а также упрощает перемещение файлов вокруг виртуального в структуре Xcode при реорганизации проекта.
Храните сторонние библиотеки или фреймворки в отдельной папке, чтобы не смешивать их со своим собственным кодом.
Внутри самого Xcode я группирую эти файлы классов в отдельные виртуальные папки под названием Views, Controllers, Model и Nibs (и библиотеки для сторонних вещей). Если это большой проект, я разбиваю его на папки для каждого компонента, а затем разбиваю их на представления, контроллеры и т.д., Но опять же, что только виртуальные папки, а не физические.
Сохранение ресурсов в отдельной физической папке - хорошая идея, чтобы упростить просмотр их на диске. Это может иметь смысл разделить их на изображения, звуки, xml и т.д. В Xcode вы можете разбить их на виртуальные подпапки по компоненту или категории (интерфейс, контент и т.д.), Но я бы не предложил делать это на диске как это затрудняет реорганизацию структуры папок по мере роста вашего проекта.
Это действительно хорошая идея, чтобы сохранить все ваши изображения в одной папке, потому что это позволяет избежать случайного нажатия двух изображений с тем же именем. Xcode не будет предупреждать вас, если вы импортируете два изображения с тем же именем из разных мест, но когда он будет создавать приложение, вы получите только один или другой, выбранный случайным образом.
Вам не нужно сохранять Default.png и Icon.png в корневом каталоге (или даже вызывать их Default.png и Icon.png), но иногда Xcode путается, если стандартные файлы не там, где он ожидает.
И да, что бы вы ни делали, не пытайтесь использовать ссылки на синюю папку при импорте изображений, иначе вы не сможете получить к ним доступ из вашего кода с помощью imageNamed: или в Interface Builder. Вместо этого используйте желтые ссылки на виртуальные папки. В основном синие папки копируются в пакет приложений как фактические папки при создании приложения, тогда как желтые папки игнорируются, а их содержимое переходит непосредственно в корневой каталог приложения. Чтобы получить доступ к содержимому в синих папках, вам нужно будет указать имена синих папок в пути при их загрузке, например.
NSString *path = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png" inDirectory:@"nameOfBlueFolderInXcode"];
UIImage *image = [UIImage imageWithContentsOfFile:path];