Archiwizacja projektu w Xcode powoduje niepoprawne utworzenie pakietu wielu aplikacji

170

Archiwizacja mojego projektu w Xcode to tworzenie pakietu z wieloma aplikacjami, zamiast grupowania mojego głównego celu do wydania, a tego właśnie chcę. W szczególności, kiedy sprawdzam moje archiwum w Organizatorze, wyświetla mi się komunikat:

„[nazwa projektu] nie zawiera aplikacji w jednym pakiecie lub zawiera wiele produktów. Wybierz inne archiwum lub dostosuj schemat, aby utworzyć aplikację w jednym pakiecie”.

Wygląda na to, że w schemacie jest jakieś ustawienie, które należy dostosować, ale nie mogę dowiedzieć się, co powoduje uwzględnienie innych celów.

Nawiasem mówiąc, używam Xcode 4.0.

Jared Friedman
źródło

Odpowiedzi:

251

OK, odpowiadając na moje własne pytanie. Okazuje się, że jest to problem z projektami zależnymi w XCode 4. Jeśli tak się stanie, przejdź przez ustawienia kompilacji dla wszystkich projektów zależnych (np. Bibliotek statycznych) i upewnij się, że opcja „Pomiń instalację” w obszarze „Wdrażanie” jest ustawiona na TAK.

Więcej szczegółów tutaj: http://flakasoft.com/developer-tips/xcode-4-bug-solution-for-archiving-build-with-static-library/

Jared Friedman
źródło
1
Ty, panie, jesteś moim bohaterem! Nie trafiłbym tak łatwo: P
Andrew Natoli
6
Zmieniono go na „TAK” ... nadal nie działa. :(
Joe D'Andrea
8
Pomiń instalację należy ustawić na Tak tylko w bibliotece statycznej, a nie w projekcie lub miejscu docelowym. Ten wpis na blogu dotyczący dystrybucji ad hoc dotyczy w równym stopniu wersji sklepu z aplikacjami i zawiera sekcję Pomiń instalację: musicalgeometry.com/?p=1237
jj0b
8
Niektóre biblioteki (takie jak CorePlot) wymagają również zmiany sekcji Kopiuj nagłówki w fazie kompilacji. Więc upewnij się, że spojrzysz także na odpowiedź Ryana.
Tim Swast
2
Muszę również przenieść wszystkie pliki nagłówkowe (biblioteki statycznej) w docelowej „Fazy budowania”, w „Kopiuj nagłówki” przeniosłem je z „Publicznego” do „Projektu”.
Hlung
151

Aby rozwiązać ten problem, w podprojektach trzeba było naprawić dwie rzeczy:

  1. Jak odkrył Jared, w ustawieniach kompilacji ustaw opcję „Pomiń instalację” na „Tak”
  2. W obszarze Fazy kompilacji zapoznaj się z sekcją Kopiuj nagłówki. Jeśli są jakieś pliki nagłówkowe wymienione jako prywatne lub publiczne, przeciągnij je w dół do sekcji Projekt.
Ryan Grimm
źródło
7
Naprawdę cię kocham, stary! : D
arielcamus
5
Naprawiłem wszystkie ustawienia „Pomiń instalację”, ale brakowało mi sekcji Kopiuj nagłówek. Dzięki!
Thomas Einwaller
2
Używam three20. Ten projekt ma pliki nagłówkowe wymienione jako prywatne lub publiczne, ale jeśli przeniosę je w sekcji projektu, nie zostaną skompilowane. Jakieś sugestie?
Breezeight
19
Przestań używać Three20, nawet jeśli uda ci się rozwiązać ten problem z Xcode. Jestem całkowicie poważny!
Adam Eberbach
2
Jeśli masz wiele projektów bibliotecznych, tak jak my, i masz problem ze zrozumieniem, która biblioteka Pomiń instalację jest ustawiona na Nie lub które pliki nagłówkowe powodują problem, spróbuj wykonać następujące czynności: Wybierz archiwum i kliknij przycisk Rozpowszechnij. Wybierz opcję „Zapisz zbudowane produkty”. Kliknij Dalej i Zapisz. Przeglądaj utworzony katalog w Finderze. Podkatalog „Libraries” zidentyfikuje biblioteki, dla których należy ustawić opcję Pomiń instalację na Tak. Usr / local / include zidentyfikuje pliki nagłówkowe winowajców, które musisz przenieść z publicznego do projektu.
Sunil Gowda,
10

Wykonałem następujące czynności, aby to zadziałało:

  1. dla biblioteki three20 statycznej, użyłem cocoapods zawierać pliki w ramach głównego projektu .. to po prostu pozbył się wszystkich kłopotów three20 dawał mi (i są dużo ..) btw Próbowałem zastępując three20 z Nimbus .. ale Nimbus brakowało niektórych funkcji, dla których mój projekt używał Three20 ... więc Nimbus nie był pomocny.
  2. ustaw pominięcie instalacji na tak w ustawieniach kompilacji dla wszystkich innych podprojektów / bibliotek statycznych i przełączono nagłówki kopii z publicznych na projekt w fazie kompilacji
  3. najważniejsze: w bibliotekach podrzędnych .. w fazach budowania upewniłem się, że miejsce docelowe kopiowania plików zostało zmienione z Absolute pathna products directory.

i to było to!

wskazówka: aby zorientować się, jakie pliki powodują, że Twoje archiwum tworzy plik archiwum, a nie ipa, wykonaj następujące czynności:

  1. Wybierz archiwum i kliknij przycisk Rozpowszechnij.
  2. Wybierz opcję „Zapisz zbudowane produkty”.
  3. Kliknij Dalej i Zapisz.
  4. Przeglądaj utworzony katalog w Finderze.
  5. Podkatalog „Libraries” zidentyfikuje biblioteki, dla których należy ustawić opcję Pomiń instalację na Tak.
  6. w niektórych przypadkach usr/local/includezidentyfikuje pliki nagłówkowe winowajców, które musisz przenieść z publicznego do projektu lub pliki, które musisz zmienić ze ścieżki bezwzględnej do katalogu produktów. ale ten katalog (tj. usr / local / include) różni się w zależności od struktury katalogów sublibrary
abbood
źródło
Dałbym Ci 10 gwiazdek, liczbę rozwiązań, które przeczytałem, aż do znalezienia tego, które pomogło. Po prostu kliknąłem pliki, które znalazłem w kroku 6 i oznaczyłem je w docelowym obszarze członkostwa od publicznego do projektu, bez potrzeby niczego.
Cristi Băluță
cieszę się, że mogłem pomóc! powodem, dla którego to napisałem, było to, że b / ci przeszedłem przez to, co zrobiłeś .. przeczytałem może 20 odpowiedzi, zanim zacząłem rozumieć, co się dzieje .. :)
abbood
Czy ktoś może wyjaśnić krok 6? Nie rozumiem, co oznacza „usr / local / include zidentyfikuje pliki nagłówkowe winowajcy” i gdzie / jak powinienem sprawdzić te pliki
Andrei F
@ CristiBăluță Jak dokładnie znalazłeś pliki i gdzie w ustawieniach / menu? Mam ten sam problem z XCode 11.2.1 i nie mam dużego doświadczenia z xcode. Dziękuję Ci.
Andrei F
Odkryłem, że / usr / local / include to folder wewnątrz archiwum (wraz z folderem bibliotek), ale moje ogólne archiwum nie ma żadnego z nich
Andrei F
1

Miałem fazę tworzenia kopii plików, o której zapomniałem (skopiowałem niektóre czcionki do ~ / Library / Fonts). Po usunięciu tej fazy kompilacji działało dobrze.

Jeśli żadna z powyższych odpowiedzi nie rozwiązuje problemu, zalecamy wyeksportowanie archiwum do wyszukiwarki i sprawdzenie, co znajduje się poza pakietem .app.

Edycja: zobacz https://github.com/RestKit/RestKit/wiki/Xcode-4-Archiving-Issue:--'Does-not-contain-a-single-bundle '

auco
źródło
0

Miałem również ten sam problem „[nazwa projektu] nie zawiera aplikacji z jednym pakietem lub zawiera wiele produktów. Wybierz inne archiwum lub dostosuj schemat, aby utworzyć aplikację z jednym pakietem”. po aktualizacji do xcode5.

problem polegał na tym, że kilka pól w moich ustawieniach kompilacji dla „wydania” było pustych. Myślę, że xcode4 automatycznie przełączył się na ustawienie debugowania.

anwyays - moją poprawką było znalezienie wszystkich tych ustawień „wydania”, które były puste, i ustawienie ich na ustawienia debugowania. W szczególności było to ustawienie pliku Info.plist.

roocell
źródło