Przenoszenie plików do rzeczywistego folderu w Xcode

177

Kiedy zaczynałem projekt, z przyjemnością korzystałem z grup w Xcode, a nie z dosłownych folderów: ponieważ używam przeglądarki w Xcode, aby uzyskać dostęp do wszystkiego, wszystko było ładnie zorganizowane i byłem szczęśliwy.

Jednak teraz, gdy projekt ma zostać udostępniony w celu kontroli wersji, sam folder projektu jest horrorem dla tych, którzy próbują go przeskanować przez terminal, około 300 plików, z których ponad połowa to grafika.

Próbuję teraz uporządkować rzeczy, tworząc prawdziwe foldery i importując je do Xcode. Niestety Xcode nie pozwala mi pracować z nimi tak, jak robi to z grupami. Na przykład, jeśli kliknę prawym przyciskiem myszy faktycznie dodany folder (niebieski, a nie żółty) i zdecyduję się dodać istniejące pliki, w rzeczywistości nie umieszcza ich w tym folderze, ale umieszcza je w swoim katalogu głównym.

Podobnie, nie mogę przenieść pliku z fałszywego folderu (grupy) do prawdziwego folderu: Xcode nie uważa prawdziwych folderów za prawidłowe miejsca do przenoszenia rzeczy.

czego mi brakuje? Jak przekonać Xcode, aby pozwolił mi używać folderów tak, jak używam grup? Jest tutaj odpowiedź na nieco podobne pytanie , ale tak naprawdę nie rozwiązuje ona mojego problemu, ponieważ pracuję z istniejącymi plikami.

Matthew Frederick
źródło

Odpowiedzi:

176

Nowoczesne (i śmiertelnie proste!) Podejście do 2017 roku (Xcode 6, 7, 8, a czasem 9, ponieważ czasami robi to automagicznie):

Jeśli przenosisz kilka plików do nowego folderu i zachowujesz hierarchię podrzędną, jest to o wiele łatwiejsze niż przenoszenie każdego pliku osobno:

  1. Twórz nowe grupy w drzewie folderów Xcode i organizuj w nich pliki w dowolny sposób.
  2. Utwórz pasujące drzewo folderów fizycznych w Finderze i uporządkuj w nich swoje pliki fizyczne, aby były zgodne z tym, co zrobiłeś w kroku 1.
  3. Wszystkie odwołania w Xcode powinny być teraz czerwone (to OK!).
  4. W menedżerze tożsamości i typów wybierz grupę w Xcode, którą chcesz przenieść, a następnie kliknij ikonę folderu w okienku informacyjnym:

  5. W oknie dialogowym Finder znajdź odpowiadający mu nowy folder utworzony dla tej grupy w kroku 2. Wszystkie pliki w tej grupie zostaną teraz automatycznie odkryte na nowo!

Czy to nie miłe? Co najwyżej będziesz musiał powtórzyć te 5 kroków raz dla każdej nowej utworzonej grupy (co jest lepsze niż przenoszenie każdego pliku indywidualnie!)

Punkty bonusowe!

Powiedzmy, że przypadkowo schrzaniłeś ruch i teraz kilka plików jest czerwonych i nie można ich znaleźć: wybierz wiele zepsutych plików i używając tej samej ikony folderu na zrzucie ekranu z kroku 4, znajdź właściwy folder, który je zawiera pliki i automatycznie naprawią brakujące ścieżki.

brandonscript
źródło
3
Takie postępowanie powoduje jednak, że pliki nie są śledzone w Git. Oczywiście zawsze mogę odczytać plik, ale czy czegoś mi brakuje?
SleepNot
2
@jeraldo nie jestem pewien, jakiego smaku gita używasz, ale nigdy nie miałem tego problemu. Możesz jednak łatwo to zrobić git add ..
brandonscript
Coś mi brakuje i nie jestem pewien, co to jest. Może nie rozumiem znaczenia słów „uporządkuj w nich swoje pliki ...” w kroku (1)? Zakładam, że oznacza to „Dodaj pliki do grupy przez przeciąganie i upuszczanie lub cokolwiek”. Ale jeśli to zrobię, to oczywiście Xcode rozpoznaje pliki i nie wyświetla ich na czerwono, jak opisano w kroku (3). Masz pojęcie, co robię źle?
hkatz
Czy przeniesiono fizyczne pliki tak jak w kroku 2?
brandonscript
1
Ach, wymyśliłem to! Krok (2) był dla mnie trochę zbyt tajemniczy. Gdybym go przepisał, powiedziałbym coś w efekcie „Utwórz pasujące fizyczne drzewo folderów, a następnie użyj polecenia Xcode Pokaż w Finderze, aby zlokalizować pliki dodane do nowej grupy w kroku (1) i fizycznie przenieść te pliki do folderu, który właśnie utworzyłeś ”. Coś w tym stylu ...
hkatz
119

DALSZA EDYCJA, CZERWIEC 2017: Xcode 9 robi to automatycznie, bez specjalnego wysiłku. Ta odpowiedź i Brandon dotyczą tylko Xcode 8 i wcześniejszych.

EDYTOWANO GRUDZIEŃ 2016: Poniższa odpowiedź Brandona jest teraz lepszym rozwiązaniem. Kiedy ta odpowiedź została utworzona w 2010 roku, była to jedyna opcja, jaką mogłem znaleźć. Proponuję teraz odpowiedź Brandona poniżej.


Okazuje się, że przenoszenie plików do prawdziwych folderów jest z pewnością możliwe, choć nie jest tak proste, jak powinno.

Otrzymałem podstawowe informacje z pytania, które Xcode organizuje pliki i foldery (podstawowe obiekty modelu danych - iPhone) , ale po drodze nauczyłem się ważnych rzeczy.

Proces

Przenoszenie plików jest procesem dwuetapowym z wieloma krokami podrzędnymi:

  1. Powiedz Xcode, gdzie mają się znajdować pliki :

    • Kliknij prawym przyciskiem myszy / z wciśniętym klawiszem Control plik lub grupę plików, które chcesz przenieść, i wybierz Pobierz informacje z menu kontekstowego, które się pojawi. Do grupy Informacje lub Informacje o pliku pojawi się okno.

    • Kliknij przycisk Wybierz znajdujący się po prawej stronie okna w obszarze Ścieżka . Pojawi się okno dialogowe.

    • Przejdź do folderu, do którego chcesz przenieść pliki. W razie potrzeby utwórz nowy folder . Kliknij przycisk Wybierz w prawym dolnym rogu okna dialogowego, a następnie zamknij okno Informacje o grupie / Informacje o pliku .

    • Nazwy plików / plików w grupie zmienią kolor na czerwony, aby wskazać, że Xcode nie może ich znaleźć w określonym miejscu.

  2. Przenieś rzeczywiste pliki

    • W Finderze (lub Git) przenieś pliki wybrane w kroku 1 do rzeczywistych folderów, w których mają się znajdować.

    • Wróć do Xcode. Pliki / grupy powinny znów stać się czarne. Jeśli któryś z nich jest nadal czerwony, oznacza to, że nie udało Ci się przenieść czegoś do odpowiedniego folderu.

Porady

Dowiedziałem się kilku ważnych rzeczy podczas dostosowywania ~ 300 plików w tym projekcie:

  • Niektóre pliki nie chcą przenieść się w ten sposób; to znaczy, gdy nawigujesz do nowego miejsca docelowego, przycisk Wybierz jest nieaktywny, podobnie jak przycisk Nowy folder . Rozwiązaniem, choć nie wiem, dlaczego ma to znaczenie, jest najpierw użycie Xcode do umieszczenia tych plików w grupie (kliknij pliki prawym przyciskiem myszy / Ctrl-klik i wybierz opcję Grupa i nadaj grupie nazwę), a następnie przenieś grupę do nowej lokalizacji. Po przeniesieniu plików w Finderze możesz usunąć je z grupy (przeciągając je do nowej grupy / folderu nadrzędnego i usuwając grupę).

  • Zatrzymaj się i buduj co kilka minut, po wykonaniu kroku 2 dla wielu plików. Kompilacja powie ci, czy coś schrzaniłeś do tej pory, dzięki czemu łatwiej będzie wrócić i naprawić to, zanim zrobisz zbyt duże obrażenia.

  • Jeśli pliki nie zostaną przeniesione tam, gdzie chcesz - miałem diabelnie czas przenosząc niektóre pliki, które zostały utworzone wcześnie w folderze Classes - możesz po prostu przeciągnąć je ze starego miejsca w wyszukiwarce do w jakimś poręcznym miejscu, takim jak pulpit, usuń odniesienia do nich w Xcode, a następnie zaimportuj je ponownie, klikając prawym przyciskiem myszy / Ctrl-kliknij opcję Dodaj istniejące pliki .

  • Jeśli w przeszłości używałeś Xcode do usuwania odniesień do plików bez przenoszenia ich do kosza w tym projekcie, znajdziesz pliki, które nie muszą być przenoszone, ale po prostu tam siedzisz. Uważaj, aby nie robić tego, co ja, myląc nazwy bieżącej grupy plików, które przenosiłem, ze starszymi, już nie połączonymi plikami, nalegając, aby Xcode je zaimportował, ponieważ myślałeś, że jest gęsty.

Mam nadzieję, że to pomoże jakiejś przyszłej osobie. Dziwię się, że było to równie trudne i czasami trudne, jak było.

Matthew Frederick
źródło
2
Posiadanie wszystkich plików w tym samym katalogu naprawdę mnie niepokoiło. Dziękuję Ci za to!
Curtis Shipley
możesz także: dowolnie zmieniać strukturę katalogów w Finderze, usunąć wszystkie "czerwone pliki" w projekcie, a następnie dodać je wszystkie z powrotem do projektu za pomocą opcji "
grupuj
@bshirley To prawda, a jeśli wszystkie pliki w katalogu głównym muszą znajdować się w projekcie, można zaoszczędzić dużo czasu. Niestety w przypadku projektów z udziałem wielu osób lub projektów, które z biegiem czasu wydały wiele wersji, może tam być dowolna liczba plików, których nie należy dodawać do projektu. W takim przypadku musiałbyś śledzić, które z nich zostały usunięte, aby je przywrócić, lub coś podobnego.
Matthew Frederick,
11
w xcode 4 musiałem zrobić coś innego - nie widziałem żadnych kontekstowych linków „pobierz informacje” po kliknięciu prawym przyciskiem myszy. zamiast tego musiałem wyświetlić tożsamość i widok typu (prawdopodobnie nazwa tego, której nie znam). jest to najbardziej prawy przycisk w opcjach widoku na pasku nagłówka xcode4. Najpierw przenoszę plik w systemie plików, a następnie klikam dziwną ikonę obok ścieżki i mówię xcode, gdzie jest nowy plik.
Evan Pon
6
Problem z przenoszeniem plików polega na tym, że kiedy jest już pod kontrolą SVN, musisz upewnić się, że używasz aplikacji, takiej jak Wersje lub Kamień węgielny, do przenoszenia plików ... W przeciwnym razie skończysz z okropnymi problemami z kontrolą wersji! Chciałbym, żeby firma Apple po prostu
odrzuciła
104

W Xcode 5 lub Xcode 6:

  1. Utwórz foldery odpowiadające Twoim grupom w Finderze
  2. Przenieś pliki do tych folderów w Finderze
  3. Zaznacz każdy czerwony plik na pasku bocznym Xcode po lewej stronie
  4. Kliknij przycisk „Pokaż / ukryj narzędzia”, aby wyświetlić prawy pasek boczny (patrz rysunek)
  5. W „Tożsamość i typ” kliknij mały przycisk i wybierz lokalizację pliku (patrz rysunek)

wprowadź opis obrazu tutaj

Twoje zdrowie.

reinaldoluckman
źródło
1
Uwaga dla niektórych użytkowników, jeśli otrzymujesz błąd informujący, że zmiany zostały wprowadzone po prekompilacji informacji w nagłówku, po prostu wyczyść produkt i wszystko się ułoży!
kwant
Zastosowałem to podejście w Xcode 5.1.1, aby przenieść plik nagłówkowy do folderu fizycznego. Jestem w stanie przenieść plik. Ale Xcode mówi „nie znaleziono pliku” podczas tworzenia projektu. Czy mógłbyś mi pomóc.
Rashmi Ranjan Mallick
22

Znalazłem najbardziej niezawodny sposób obejścia przerażającego projektu XCode tutaj, aby uporządkować WSZYSTKIE pliki w Finderze z dwóch powodów:

  1. Finder nie popełnia "błędów", w przeciwieństwie do GUI XCode
  2. Po uporządkowaniu rzeczy w Finderze możesz przeciągać / upuszczać całe foldery Findera do XCode i ... robi dokładnie to, czego chciałeś, bez wysiłku

Nawet przenosząc istniejące pliki XCode, można to zrobić szybciej:

  1. Wybierz pliki w Finderze
  2. Utwórz dla nich folder w Finderze
  3. Przeciągnij / upuść je do folderu (automatycznie je przenosi)
  4. Przeciągnij / upuść folder Finder do Xcode (automatycznie: tworzy folder Xcode, dodaje każdy plik w folderze Finder)
  5. cmd - wybierz każdy „czerwony” plik, który widzisz teraz w Xcode (ponieważ je przeniosłeś) i naciśnij klawisz Delete

NB: Nigdy nie używam opcji „twórz przeciągane foldery z podgrupami”, ponieważ w XCode 3 często było to beznadziejnie błędne i mogło uszkodzić projekty. Apple najwyraźniej (IMHO) NIE używa tej funkcji wewnętrznie, w przeciwnym razie nigdy nie pozwolonoby jej być tak błędnym; jeśli Apple czegoś nie używa, generalnie nie jest to bezpieczne - nie są dobre w testowaniu :)

Adam
źródło
2
Spróbuję tego jutro… to było proste rozwiązanie, którego szukałem. Dlaczego tak to utrudnili? Gdyby tylko odzwierciedlał system plików, byłby znacznie mniej zagmatwany. Dzięki!
delux247
To było czwarte rozwiązanie, które wypróbowałem i JEDYNE, które mogłem uzyskać do pracy z xcode 5.1.1. Z jakiegoś powodu to nie zadziała w żadnej z moich kategorii. Musiałem dosłownie przenieść je do Kosza, zabrać je z powrotem z Kosza, a następnie ponownie dodać do xcode i wreszcie zadziałało.
user3344977
21

Istnieje proste w konfiguracji i obsłudze narzędzie wiersza poleceń - "synx" dostępne na githubie, które robi dokładnie to, co jest tutaj potrzebne.

Reorganizuje folder projektu Xcode w wyszukiwarce, aby dopasować grupy Xcode w projekcie.

Możesz go znaleźć tutaj: https://github.com/venmo/synx

UPDATE: XCode 9 domyślnie obsługuje tę funkcję. Nie musisz więc już używać innych narzędzi!

Nitesh Borad
źródło
Świetne narzędzie, ale działa bardzo wolno w większych projektach (może zająć kilka minut) i wydaje się, że nie jest już obsługiwane.
Łukasz
6

Xcode 9

Wygląda na to, że Xcode 9 obsługuje go teraz domyślnie. Kiedy przenosisz pliki z grupy do innej, plik zostanie również przeniesiony ze starego folderu do nowego. Zostało to ogłoszone w WWDC 2017.

Guy Daher
źródło
2

Zwykle przenoszę pliki do katalogu bezpośrednio w Finderze, a następnie poprawiam pliki z czerwonymi nazwami w XCode w ich oknie dialogowym „Pobierz informacje”: kliknij przycisk „Wybierz ...” i wybierz nową lokalizację pliku. To pierwsza odpowiedź, gdy chcę przenieść pliki w XCode i działa.

Xie Yanbo
źródło
1

Począwszy od Xcode 4.5, po przeciągnięciu struktury folderów jest ona automatycznie przekształcana w zagnieżdżone grupy w Nawigatorze projektu. Następnie, jeśli spojrzysz na dysk (np. Kliknij prawym przyciskiem myszy i wybierz Pokaż w Finderze), struktura folderów zostanie zachowana.

Odkryłem, że próba naprawienia rzeczy ze starszego projektu była po prostu uciążliwa. Okazało się, że znacznie łatwiej jest po prostu usunąć te pliki i ponownie je przeciągnąć.

Snowcrash
źródło
1

Aby przenieść folder w Xcode 4.5, po prostu ...

  1. Usuń pliki / grupy z xcode i wybierz „Usuń odniesienie”.
  2. Przejdź do wyszukiwarki i w razie potrzeby przenieś folder / pliki.
  3. Po zakończeniu wracam do Xcode i wybieram Plik-> Dodaj pliki do {ProjectName}.
  4. Upewnij się, że opcja „Kopiuj elementy do folderu grupy docelowej (w razie potrzeby)” jest zaznaczona
  5. Upewnij się, że opcja „Utwórz grupę dla każdego dodanego folderu” jest zaznaczona
  6. Upewnij się, że dla Twojego projektu jest zaznaczona opcja „Dodaj do celu”
Shannon Cole
źródło
1

Najłatwiejsza technika dla XCode 8 ....

Zakładając, że masz pliki A, B, C w logicznej grupie, ale chcesz je przenieść do folderu na dysku twardym.

  1. Utwórz folder docelowy za pomocą Findera
  2. Dodaj folder w XCode (Plik -> Dodaj pliki) za pomocą panelu Opcje, aby wybrać odniesienie do folderu (nie grupę)
  3. Przeciągnij pliki A, B, C z (starej) grupy do (nowego) odniesienia do folderu w nawigatorze projektu. XCode przeniesie pliki do folderu, zarówno w projekcie, jak i na dysku.

Gotowe.

oprogramowanie ewoluowało
źródło