2009-07-07 15 views
36

Ktoś zna dobre rozwiązanie?Jak duplikować plik w XCode?

Do tej pory nie znalazłem lepszego sposobu niż użycie opcji Plik> Nowy plik, a następnie skopiowanie zawartości ze starego pliku do nowego.

Prawdopodobnie można powielić w Finderze i ponownie zaimportować, ale to prawie taka sama ilość pracy: przełączanie na wyszukiwarkę, duplikowanie, importowanie nowych plików.

Robienie tego z jedną klasą nie jest takie trudne, ale co zrobić, jeśli trzeba wygenerować 10+ podobnych klas opartych na superklasie.

W Eclipse wybierasz plik, a następnie go kopiuj/wklej w tym samym folderze. W Finderze jest Duplikat.

Istnieje menu Edycja> Duplikuj. Ale ZAWSZE jest wyłączone. Próbowałem wybrać różne pliki, klasy, metody. Jest wciąż wyłączony.

+0

Jeśli zajęcia są tak podobne, wydaje się, że podobieństwa powinno być wyodrębnione w nadrzędnej tak że podklasy zawierać tylko unikalne zachowanie. – Chuck

+4

To jest głupi komentarz. Podobieństwa to pliki włączeń dla nadklasy, konwencja nazewnictwa (w moim przypadku mam RemoteSystem, RemoteFolder, itp. Dziedziczący z RemoteObject), funkcje init z właściwym [super init ...]. Wiesz, rzeczy, które musi zdefiniować podklasa. –

+3

Tak. To był głupi komentarz. Muszę też móc duplikować plik. – Arcadian

Odpowiedz

5

"Duplikat" jest włączony dla celów w XCode (prawie nic, co znam).

Jeśli masz znaczną liczbę podklas o tym samym punkcie początkowym do replikacji, dlaczego nie utworzyć z niej szablonu klasy? Następnie możesz po prostu użyć pliku-> Nowy, aby tworzyć nowe instancje. Jest to dość szybkie.

Jest to prawdopodobnie najprostszy przykład:

http://www.macresearch.org/custom_xcode_templates

W przeciwnym razie, to bym po prostu powielać pliki w Finderze tyle razy, ile potrzeba, wymienić je, a następnie przeciągnij je do XCode en masse.

+0

co z duplikacją xib? –

+0

@AntonTropashko To jest dobra uwaga, jest to dość stara odpowiedź - chociaż Xcode może nie pozwolić ci na duplikowanie niektórych rzeczy, możesz użyć Findera, aby powielić coś jak plik xib, a następnie przeciągnąć go do projektu po zmianie nazwy i przerobić. –

+0

tak, to oczywiste, z wyjątkiem tego, że Xib jest członkiem około 30 celów. widzisz mój problem? –

1

Możesz użyć opcji "Zapisz jako ..."; musisz jednak wrócić i ponownie dodać oryginalne pliki do projektu.

Nie byłoby jednak tak źle zrobić kilka powiązanych klas: edytuj plik, Zapisz jako "class2", edytuj plik, Zapisz jako "class3" itp., A następnie "Dodaj istniejące pliki" i ponownie dodaj wszystkie pliki, ale ostatnie do swojego projektu.

1

Używam poniższego skryptu perl do powielenia pary plików w terminalu. Dajesz mu podstawową nazwę oryginalnego i nowego pliku, a on kopiuje plik nagłówka i implementacji (c/cpp/m/mm), a następnie zastępuje wszystkie wystąpienia nazwy podstawowej nową nazwą, a następnie dodaje je do subversion. Nadal musisz dodać nowe pliki do Xcode i dostosować datę utworzenia w komentarzu (mam do tego makro Keyboard Maestro), ale jest to szybsze niż wykonanie wielu kroków ręcznie. Operuję za pomocą okna Terminala i czterech zakładek wstępnie ustawionych w katalogu Projekt, Źródło, Zasoby i English.lproj, co zapewnia szybki dostęp do wielu operacji.

#!/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"); 
} 
+1

Teraz możesz po prostu nacisnąć ⌘⇧S (Command + Shift + S) – zeeshan

+0

O ile nie ma czegoś nowego w Xcode 8, Duplicate nie koryguje #imports i nazw klas jak mój skrypt. –

51

W kodzie XCode 4.2 (wiem, że to stare pytanie) w menu Plik znajduje się duplikat.

Wybierz plik (możesz wybrać wiele plików, ale wydaje się, że nic nie robi) w Nawigatorze projektu, a następnie Plik-> Duplikat. Brawo!

+0

Uważaj, jeśli używasz kontroli źródła. Z jakiegoś powodu po duplikowaniu plików nie zostały one dodane do kontrolki źródłowej. –

+0

Nie znajduje się w menu Plik w Xcode 4.2. Jest pod menu Edycja i zawsze wyłącza się po wybraniu pliku. –

+0

@Alex jest, myląco, Duplikat w menu Plik i Edycja, robiąc różne rzeczy. Plik -> Duplikowanie jest tym, czego potrzebujesz, aby powielić plik, o co pytano w oryginalnym wpisie. Zaraz po Save. – WiseOldDuck

7

w Xcode 4.5 możemy powielać za pomocą Plik-> powtórzenie lub Cmd + Shift + S

+0

cele dla nowej kopii są nieprawidłowe. Co stanowi problem, jeśli duplikowany plik ma dwa tuziny celów. –

0

ostrożny! Podczas korzystania z duplicate (CMD + Shift + S) - Xcode ma problem z indeksowaniem nagłówków. także gdy u chcą dokonać refaktoryzacji może być następne okno o błędzie:

Is not part of the build phase of any targets in the Xcode 3 projects in this workspace and so can't be refactored

więc istnieje kilka sposobów, co zrobić, aby to naprawić.

  1. Usuń z menu Window > Projects. Uruchom ponownie Xcode.
  2. produktów> Clean