Как вы дублируете файл в XCode?
Кто-нибудь знает хорошее решение?
До сих пор я не нашел лучшего способа, чем использовать File > New file, а затем скопировать содержимое из старого файла в новый.
Возможно, вы можете дублировать в Finder и повторно импортировать, но это почти такой же объем работы: переход на поиск, дублирование, импорт новых файлов.
Выполнение этого с одним классом не так сложно, но что делать, если вам нужно сгенерировать 10+ подобных классов на основе суперкласса.
В Eclipse вы выбираете файл, а затем копируете/вставляете его в ту же папку. В Finder там Duplicate.
Там меню Edit > Duplicate. Но он ВСЕГДА отключен. Я попытался выбрать различные файлы, классы, методы. Он по-прежнему отключен.
Ответы
Ответ 1
"Duplicate" включен для целей в XCode (почти ничего, что я знаю).
Если у вас есть значительное количество подклассов с одинаковой начальной точкой для репликации, почему бы не сделать из него шаблон шаблона? Затем вы можете просто использовать file- > New для создания новых экземпляров. Это довольно быстро сделать.
Это, наверное, самый простой пример:
http://www.macresearch.org/custom_xcode_templates
В противном случае я бы просто дублировал файлы в Finder столько раз, сколько вам нужно, назовите их и перетащите их в XCode en-masse.
Ответ 2
В XCode 4.2 (я знаю, что это старый вопрос) в меню "Файл" есть Duplicate.
Выберите файл (вы можете выбрать несколько файлов, но он ничего не может сделать полезным) в Навигаторе проектов, а затем File- > Duplicate. Ура!
Ответ 3
В Xcode 4.5 мы можем дублировать, используя File- > Duplicate или cmd + shift + S
Ответ 4
Вы можете использовать "Сохранить как..."; вам все равно придется вернуться и снова добавить исходные файлы в проект.
Не было бы такого плохого способа сделать кучу связанных классов, хотя: редактировать файл, Сохранить как "класс2", редактировать файл, Сохранить как "класс3" и т.д., затем "Добавить существующие файлы" и повторно добавьте все файлы, но последний в ваш проект.
Ответ 5
Я использую следующий perl script для дублирования пары файлов в терминале. Вы даете ему базовое имя оригинального и нового файла и копирует файл заголовка и реализации (c/cpp/m/mm), затем заменяет все события базового имени новым именем, а затем добавляет их в подрывную. Вам все равно придется добавлять новые файлы в Xcode и корректировать дату создания в комментарии (у меня есть макрос Maestro для клавиатуры), но это быстрее, чем делать много шагов вручную. Я работаю с окном терминала и четырьмя вкладками, предварительно установленными в каталог Project, Source, Resources и English.lproj, который дает быстрый доступ для большого количества операций.
#!/usr/bin/perl
use lib "$ENV{HOME}/perl";
use warnings;
use strict;
our $cp = '/bin/cp';
our $svn = '/usr/bin/svn';
our $perl = '/usr/bin/perl';
our $source = shift;
our $add = 1;
if ( $source =~ m!^-! ) {
if ( $source eq '-a' || $source eq '--add' ) {
$add = 1;
$source = shift;
} elsif ( $source eq '-A' || $source eq '--noadd' ) {
$add = undef;
$source = shift;
} else {
die "Bad arg $source";
}
}
our $dest = shift;
die "Bad source $source" unless $source =~ m!^(.*/)?[A-Za-z0-9]+$!;
die "Bad dest $dest" unless $dest =~ m!^(.*/)?[A-Za-z0-9]+$!;
my $cpp;
$cpp = 'c' if ( -e "$source.c" );
$cpp = 'cpp' if ( -e "$source.cpp" );
$cpp = 'mm' if ( -e "$source.mm" );
$cpp = 'm' if ( -e "$source.m" );
die "Missing source $source" unless -e "$source.h" && -e "$source.$cpp";
die "Existing dest $dest" if -e "$dest.h" && -e "$dest.$cpp";
our $sourcename = $source; $sourcename =~ s!.*/!!;
our $destname = $dest; $destname =~ s!.*/!!;
print "cp $source.h $dest.h\n";
system( $cp, "$source.h", "$dest.h" );
print "s/$sourcename/$destname in $dest.h\n";
system( $perl, '-p', '-i', '-e', "s/$sourcename/$destname/g", "$dest.h" );
print "cp $source.$cpp $dest.$cpp\n";
system( $cp, "$source.$cpp", "$dest.$cpp" );
print "s/$sourcename/$destname in $dest.$cpp\n";
system( $perl, '-p', '-i', '-e', "s/$sourcename/$destname/g", "$dest.$cpp" );
if ( $add ) {
print "svn add $dest.$cpp $dest.h\n";
system( $svn, 'add', "$dest.$cpp", "$dest.h" );
}
Ответ 6
Осторожно!
Когда вы используете duplicate
(CMD + Shift + S), у Xcode возникают проблемы с заголовками индексирования.
Также, когда вы хотите сделать рефакторинг, это может быть следующее окно ошибки:
![Не является частью фазы сборки любых целей в проектах Xcode 3 в этой рабочей области и поэтому нельзя реорганизовать]()
Итак, есть несколько способов сделать, чтобы исправить это.
- Удалить
derived data
из меню Window > Projects
. Перезапустите Xcode.
- Продукт > Очистка