Mam problem z wygenerowaniem archiwum aplikacji iOS z aplikacji. Aplikacja dobrze się kompiluje i działa nawet w symulatorze. Teraz chciałem przeprowadzić testy ad hoc i nie mogę wygenerować archiwum aplikacji iOS. Kiedy klikam Produkt -> Archiwum, generuje ogólne archiwum xcode. Czy ktoś może mi pomóc. Powinienem wspomnieć, że wygenerowałem już archiwum aplikacji iOS tej aplikacji. Właśnie z jakiegoś powodu przestał generować archiwum iOS. Wielkie dzięki.
175
xcodebuild
. Rozwiązaniem jest określenie miejsca docelowego:xcodebuild -destination generic/platform=iOS
Odpowiedzi:
Sprawdź ustawienia kompilacji:
źródło
/usr/local/include
. Jeśli budujesz bibliotekę statyczną, nagłówki muszą być publiczne, więc bardziej poprawne jest, jeśli # 3 ma zmienić ścieżkę folderu nagłówków publicznych na coś bardziej sensownegoinclude/$(TARGET_NAME)
. @CopperCash zauważa to w odpowiedzi poniżej.Może się to zdarzyć, jeśli dodałeś framework / bibliotekę ... musisz edytować Target-> Build Settings tej biblioteki i ustawić ustawienie „Skip Install” na „Yes”. Podczas ponownej archiwizacji XCode powinien ponownie zacząć tworzyć „Archiwum aplikacji iOS” zamiast „ogólnego archiwum xcode”.
źródło
Oprócz opcji Pomiń instalację na tak, a jeśli otworzyłeś inny projekt lib / framwork w projekcie aplikacji, musisz przenieść nagłówki (jeśli istnieją) z publicznego do projektu w fazie budowy / kopiowaniu nagłówków .
źródło
Wykonałem następujące czynności, aby to zadziałało:
Absolute path
naproducts directory
. Uwaga: zobacz poniższą wskazówkę, aby zawęzić wyszukiwanie i znaleźć bibliotekę powodującą ten błąd.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:
usr/local/include
zidentyfikuje 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 (lub nawet pliki, o których zapomniałeś ustawić opcję pomiń instalację na tak). ale ten katalog (tj. usr / local / include) różni się w zależności od struktury katalogów sublibrary. W wielu przypadkach ... zobaczysz wszystkie pliki wymienione w sekcji Kopiuj pliki w kroku 3 powyżej. Jeśli znajdziesz je tutaj, masz definitywną odpowiedź na temat przyczyny twojego problemu.aktualizacja do podpowiedzi: aby życie było jeszcze prostsze ... jakiekolwiek pliki, które pojawiają się w kroku 4 w podpowiedzi powyżej ... po prostu wyszukaj je w globalnym wyszukiwaniu xcode ... i powinieneś otrzymać natychmiastowe wyniki dla tego, co chcesz ... na przykład, to była zawartość mojego folderu (postępując zgodnie z instrukcją powyżej):
Mogę więc powiedzieć, że ma to coś wspólnego z bibliotekami kryptograficznymi i ssl ... szukaniem ich:
uświadomił mi, że zapomniałem ustawić pominięcie instalacji na tak.
źródło
./usr/local/include
.Jeśli eksportujesz archiwum, otwórz je i zobacz
/urs/local/include
w produktach, wypróbuj tę sugestię :Pracował dla mnie po uaktualnieniu mojej aplikacji React Native do
0.11.0
Xcode7
i CocoaPods0.39.0.beta.4
.źródło
Jeśli używasz CocoaPods, a także WatchKit lub rozszerzenia Today, w repozytorium CocoaPods jest otwarty problem wyjaśniający, jaki może być Twój problem.
Rozwiązaniem dla mnie było, aby usunąć
Copy Pod Resources
fazę z WatchKit Extension i dziś Extension skierowany podBuild Phases
. Gdy to zrobiłem, projekt został skompilowany i zarchiwizowany zgodnie z oczekiwaniami.Mam nadzieję, że to komuś pomogło, przez cały dzień byłem zaskoczony!
źródło
Jeśli którakolwiek z powyższych odpowiedzi nie działa, prawdopodobnie problem dotyczy
cocoaPods
. Najnowsza aktualizacja0.38.1
zepsuła mi sprawę, ale potem obniżyłem poziom0.37.1
i wszystko wróciło do normy. Za pomocąXcode 6.3.1
Późniejsza edycja: aktualizacja do
0.38.2
również to naprawi. Więcej informacji na temat przyczyny tego problemu znajdziesz tutaj: Cocoapods 0.38.1 nie utworzył prawidłowego archiwumźródło
0.38.2
i nadal mam problemy. Czy korzystasz z Xcode 7?/Library/Frameworks
. Myślę, że może to mieć coś wspólnego z tym, że strąki kakaowe Google nie są budowane jako dynamiczna struktura. Brzmi podobnie do github.com/CocoaPods/CocoaPods/issues/3889Chociaż używam Xcode5 i to, co dla mnie załatwiło, to edycja schematu kompilacji - wypróbowanie wszystkich powyższych sugestii, które miały zastosowanie, nie pomogło w moim przypadku.
Miałem dwa cele, powiedzmy „App” i „App FREE”. Moje problemy z archiwum ogólnym wystąpiły, gdy próbowałem zarchiwizować wersję DARMOWĄ, którą dodałem po „normalnej” wersji aplikacji. W moim przypadku, kiedy wybrałem jego Schemat na pasku narzędzi i wybrałem Edytuj Schemat ... Zobaczyłem, że sekcja Build ma dwa cele, a mianowicie App i App FREE.
Odznacziłem wszystkie kolumny aplikacji, pozostawiając zaznaczone tylko kolumny App FREE i kliknąłem OK. Następnym razem, gdy wybrałem Produkt> Archiwum, otrzymałem moją aplikację ZA DARMO zamiast Archiwum ogólnego. :)
źródło
Jeśli masz tylko jeden projekt, może to rozwiązanie się przyda. Ten problem pojawił się, kiedy zduplikowałem cel. W rezultacie miałem zbudowane równolegle dwa cele. To powodowało problem. Zbudowano ogólne archiwum IOS.
Aby wyłączyć wbudowaną równoległość, przejdź do
źródło
Miałem ten problem po aktualizacji do iOS 9 i Xcode 7. Rozwiązanie Josha H działało dla mnie:
Zrobiłem również skrypt poinstalacyjny dla mojego Podfile, aby zrobić to automatycznie!
Po prostu dodaj go na dole swojego pliku Podfile i uruchom
pod install
źródło
Mam wiele projektów w moim obszarze roboczym (GTL, Pods i mój główny projekt) i oto, co zadziałało dla mnie:
Wybierz projekt, będą tam 2 typy, jest projekt i są cele .
W przypadku projektów, które nie są Twoim głównym polubieniem
GTL
lubPODS
:Projektowanie:
Cele:
W przypadku głównego projektu (który zwykle nosi taką samą nazwę jak nazwa produktu):
Projektowanie:
Cele:
Sprawdź cel wdrożenia ios w każdym projekcie i celu, aby upewnić się, że wszystkie są takie same.
źródło
Miałem ten problem. W moim przypadku było to spowodowane utrzymywaniem celu aplikacji Mac jako zależności aplikacji na iOS.
Powodem, dla którego tak skonfigurowano, było to, że aplikacja Mac była narzędziem używanym do generowania niektórych danych dla aplikacji na iOS, które zostały następnie zawarte w pakiecie.
Musiałem usunąć tę zależność i osobno skompilować narzędzie przed utworzeniem samej aplikacji na iOS.
źródło
W moim scenariuszu otrzymywałem błędne „Archiwum ogólne” dopiero po tym, jak zacząłem włączać kod Swift do mojego projektu opartego głównie na Objective-C. Po wielu rozwiązywaniu problemów i sprawdzaniu pliku archiwum, który wypluwał Xcode, zauważyłem, że
SwiftSupport
folder (z wymaganymi dylibami dla środowiska uruchomieniowego Swift) znajdował się w innym miejscu w moim archiwum niż w zupełnie nowym archiwum aplikacji projektu Swift .Znalazłem
Installation Directory
ustawienie kompilacji i zauważyłem, że zostało ustawione na niestandardową ścieżkę w moim projekcie. Po prostu go usunąłem (ustawiając ogólną wartość/Applications
), a następna kompilacja -> Archiwum działała zgodnie z oczekiwaniami i dałem mi odpowiednie archiwum aplikacji na iOS.TL; DR: upewnij się, że
Installation Directory
ustawienie kompilacji jest ustawione na wartość domyślną,/Applications
gdy dołączasz kod Swift do aplikacji, zwłaszcza jeśli zaczynasz od starszego pliku projektu, który może mieć nieoczekiwane starsze ustawienia kompilacji.źródło
Zostawiając to tutaj, aby uratować innych z tej samej podróży.
Zauważyłem, że muszę usunąć tę samą fazę kompilacji Copy Pod Resources z docelowej biblioteki statycznej w moim obszarze roboczym.
źródło
Dodatek do odpowiedzi Alexa L.
Punkt 3. Zmień „Ustawienia kompilacji” -> „Ścieżka do folderu nagłówka publicznego” na „dołącz / xxx”.
źródło
Jeśli żadne z powyższych nie pomogło ... po długim czasie .......
Usunąłem wartość z Info.plist dla wersji pakietu, ponieważ byłem wystarczająco zadowolony tylko z krótkiej wersji pakietu 1.0.Zły. Nie rób tego.
* Uwaga: Zrobiłem to, edytując go w interfejsie użytkownika po prawej stronie, nie zdając sobie sprawy, że umieści pusty klucz w pliku Info.plist. Myślę, że to czyni go nieważnym. Mój pakiet pojawił się podczas archiwizacji jako inne elementy i nie miał ikony, i nie mogłem przesłać go w inne miejsce.
Sprowadza się to do nieprawidłowych wartości w Info.plist. Jeśli nie jest to prawidłowe archiwum, spróbuj rozpakować stare archiwum i wrzucić / nadpisać bieżące i sprawdzić, czy to naprawi to podczas odbudowywania archiwum.
źródło
Przejdź do ustawień kompilacji i dodaj
yourAppName / Resources / dist.plist do uprawnień do podpisywania kodu
Naciśnij cmd + B z urządzeniem iOS lub rzeczywistym urządzeniem wybranym jako cel kompilacji
Po zakończeniu -> przewiń do folderu „Produkty” i kliknij prawym przyciskiem myszy yourAppName.app
Wybierz „Pokaż w Finderze”
Utwórz folder z nazwą ładunku ( duże „P” )
Skopiuj yourAppName do folderu ładunku
Utwórz plik zip z folderu ładunku
Zmień nazwę pliku ZIP na yourAppName.ipa
GOTOWE
źródło
Po wypróbowaniu prawie wszystkiego:
Następnie zauważyłem, że na mojej partycji rozruchowej brakuje wolnego miejsca na dysku ... około 1 GB. Zrestartowałem, a potem dostałem około 18 GB za darmo.
Następnie otworzyłem Xcode i projekt, wykonałem Archiwum ... i, co zaskakujące (po godzinie próby zbudowania Archiwum) w końcu otrzymałem archiwum inne niż Generic.
Nie mam pojęcia, czy jest to problem z wolnym dyskiem, który go naprawił, czy ponowne uruchomienie systemu macOS, który go naprawił, ale zadziałał dla mnie.
źródło
Jeśli masz jakieś pliki .xcodeproj w Project> Targets> Build Phases> target zależności, usuń je stamtąd, a następnie skompiluj swój ipa. Mi to pasuje. Twoje zdrowie
Możesz uzyskać odpowiedź tutaj: xcode tworzy ogólne archiwum xcode zamiast iOS App Archive
źródło
W moim przypadku musiałem przenieść zarówno FMDB, jak i BlocksKit do bibliotek statycznych. Wcześniej były budowane jako podprojekty. Pamiętaj, że możesz używać lipo do tworzenia uniwersalnych bibliotek. Podczas budowania produktów końcowych kod symulatora zostanie automatycznie usunięty.
źródło
Innym możliwym powodem jest posiadanie odniesień w „Zależnościach docelowych” do projektów dla innej platformy. W moim przypadku pracowałem nad projektem, który udostępnia kod dla OSX i iOS. W jednym z celów iOS przypadkowo dodałem cel OSX jako zależność.
źródło
Aby być dokładnym, zamieszczam moje rozwiązanie.
Doświadczyłem dokładnie tego samego problemu, próbując zbudować archiwum projektu iOS w Xcode 5.1.1 (5B1008). Żadna z powyższych sugestii nie rozwiązała problemu, a większość z nich była nieistotna (nie dodałem żadnych ram i nie miałem żadnych wpisów publicznych w sekcji Kopiuj nagłówki w moich fazach kompilacji).
W moim przypadku naprawienie problemu polegało po prostu na zamknięciu mojego projektu, usunięciu wszelkich archiwów, które wcześniej utworzyłem, przejściu do Preferencji> Konta, usunięciu mojego konta programisty, zamknięciu Xcode, ponownym uruchomieniu, ponownym dodaniu mojego konta programisty, rozpoczęciu procesu archiwizacji jeszcze raz. To natychmiast rozwiązało mój problem.
źródło
Jeszcze jedno rozwiązanie, ponieważ wszystko powyższe nie zadziałało ...
Zmieniono
User Header Search Paths
(przypuszczam,Header Search Paths
że działałoby równie elegancko) na"$(BUILT_PRODUCTS_DIR)/BlocksKit"
.Tło :
W BlockKit programiści ustrukturyzowali nagłówki w głównym projekcie inaczej niż struktura podczas wdrażania. Dlatego nie możesz odwoływać się do nagłówków w projekcie i musisz odwoływać się do nagłówków skopiowanych do katalogu kompilacji.
źródło
Sposób, w jaki to zadziałało w (Xcode 5), miałem 2 cele i kiedy edytowałem schemat, w lewym panelu edytora schematów zobaczysz [BUILD, RUN, TEST, PROFILE XXX.APP, ANALYZE, ARCHIVE ] w okienku BUILD, zobaczysz cele projektu na liście. Po prawej stronie zobaczysz opcje ARCHIWUM, upewnij się, że tylko jeden cel jest wybrany do archiwizacji.
W projekcie miałem wybrane 2 cele, sprawdziłem tylko cel, który chciałem w produkcie i zadziałało!
źródło
Rozwiązałem ten błąd, otwierając wyłącznie projekt aplikacji w XCode, tj. nie otwierać obszaru roboczego zawierającego aplikację i inne projekty / biblioteki / frameworki.
Mając 2 oddzielne projekty, platformę lub bibliotekę współdzieloną i aplikację na iOS, musiałem otworzyć 2 różne okna XCode, każde bezpośrednio otwierając plik .xcodeproj zamiast wspólnego obszaru .xcworkspace , aby dobrze je zbudować.
Miły efekt uboczny XCode nie odbudowuje już każdego celu każdego projektu po wyczyszczeniu , co powoduje skrócenie czasu kompilacji.
Tło: tworzę SDK typu open source oraz aplikację demonstracyjną na iOS. Otworzyłem oba w jednym miejscu. Ustawienie opcji Pomiń instalację na TAK w celach SDK uniemożliwiłoby komukolwiek utworzenie archiwum, ponieważ byłoby ono puste, więc nie było to możliwe. Użycie programu Project zamiast publicznych nagłówków prowadziłoby do archiwum, w którym brakuje plików nagłówkowych, które powinny być dystrybuowane, więc nie było to również możliwe.
źródło
To dlatego, że pracowałem w miejscu pracy. Projekt został zarchiwizowany, ale nie będzie wyświetlany w oknie organizatora. Sam zamknąłem obszar roboczy i otworzyłem projekt. Archiwum zostało otwarte w organizatorze ... mam nadzieję, że to pomoże.
źródło
W moim przypadku miałem niestandardowy skrypt, który kopiował niektóre pliki tymczasowe do:
Oznaczało to, że po zbadaniu archiwum w celu sprawdzenia jego zawartości znalazłem tuż obok pliku .app folder myTempDir. Po zmodyfikowaniu skryptu, aby zapisać gdzie indziej, rzeczy zostały posortowane.
źródło
Spróbuj ustawić nagłówki $ (PROJECT_NAME) w ścieżce folderu nagłówków publicznych programu Framework projektt. Musisz przejść do ustawień budowania elementu docelowego biblioteki, a następnie edytować ścieżkę folderu nagłówków publicznych jako nagłówki $ (PROJECT_NAME).
źródło
Jeśli używasz Xcode 7 z cocoapods v.0.38.2 . Spróbuj usunąć
copy pod resources
z dzisiejszego celu rozszerzenia.źródło
Napotkałem ten problem po dodaniu narzędzia wiersza poleceń OS X do projektu mojej aplikacji na iOS, a opcja Pomiń instalację była domyślnie ustawiona na NIE dla celu narzędzia wiersza poleceń. Ponieważ oczywiście nie można zainstalować pliku binarnego OS X na urządzeniu z systemem iOS, archiwizacja została domyślnie ustawiona na ogólne archiwum Xcode. Ustawienie opcji Pomiń instalację na TAK dla tego celu rozwiązało problem.
źródło