Xcode 5.1 - Brak architektur do kompilacji (ONLY_ACTIVE_ARCH = YES, active arch = x86_64, VALID_ARCHS = i386)

168

Po aktualizacji do Xcode 5.1 nie mogę już skompilować projektu dla symulatora 64-bitowego, otrzymując ten błąd:

 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).

Oto moje docelowe ustawienia kompilacji:

Ustawienia kompilacji docelowej Xcode

Próbowałem zmienić „Build Active Architecture” na No, a także dodać „i386” do „Valid Architectures”, niestety żaden z nich nie zadziałał. Dzięki za wszelkie sugestie!

ebi
źródło
4
Widziałem sporo podobnych pytań po najnowszej aktualizacji iOS 7.1 i rozwiązaniem było pominięcie arm64. Wprawdzie nie rozwiązuje to twojego konkretnego problemu, ale jest powód, by sądzić, że Apple coś zawiodło.
dandan78
Dzięki, to ma sens, myślę, że nie użyję wersji 64-bitowej, dopóki Apple nie wyda aktualizacji do tego.
ebi
Ten sam problem na Xcode 6.1, wypróbowałem wszystkie rozwiązania podane poniżej, nie działają. W swoim projekcie mam CocoaPods. Wszelkie rozwiązania, jak to naprawić w Xcode 6.1
Vinayaka Karjigi

Odpowiedzi:

102

Po aktualizacji do XCode 5.1 pojawił się ten sam komunikat o błędzie. Czy używasz CocoaPods? Jeśli tak, powinno to rozwiązać problem:

  1. Usuń projekt „Pods” z obszaru roboczego w lewym panelu Xcode i zamknij Xcode.
  2. Uruchom „pod install” z wiersza poleceń, aby odtworzyć projekt „Pods”.
  3. Ponownie otwórz Xcode i upewnij się, że opcja „Build Active Architecture Only” jest ustawiona na „No” w ustawieniach kompilacji zarówno projektu „Pods”, jak i Twojego własnego projektu.
  4. Oczyść i zbuduj.
Mike Onorato
źródło
1
Naprawiono przez usunięcie arm64 z architektur Podów.
ebi
Rozwiązałem ten sam problem w projekcie Cordova / PhoneGap dla mnie. Dzięki
Rocco
182

Co trzeba zrobić, to po prostu ustawić ONLY_ACTIVE_ARCHsię NO(przynajmniej u mnie działa). Poniżej znajduje się zrzut ekranu:


EDYTOWAĆ:

O ile wiem ( proszę zwrócić go, czy coś jest nie tak, dziękuję ), jeśli ustawisz ONLY_ACTIVE_ARCHsię YES, oznacza to, że Xcode będzie budować tylko dla aktywnego architektury (co odnosi się do urządzenia, które jest aktywne w Xcode obecnie). Wygląda na to, że domyślne ustawienie Xcode to Debuguj YES, więc nie będzie budować plików binarnych dla innych architektur, gdy chcesz budować tylko dla specjalnego urządzenia podłączonego do komputera Mac.

Przyczyną niepowodzenia kompilacji może być to, że projekt nie obsługuje architektury podłączonego urządzenia. Dlatego najlepszym rozwiązaniem jest dodanie odpowiedniej architektury dla Twojego urządzenia. Poniżej znajduje się lista architektur i urządzeń, które obsługują:

  • ARMv8 / ARM64: iPhone 6, iPhone 5s, iPad Air,Retina iPad Mini
  • ARMv7s: iPhone 5, iPhone 5c,iPad 4
  • ARMv7: iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3,iPad Mini
  • ARMv6: iPhone, iPhone 3G,iPod 1G/2G

Więc dlaczego „ustawić ONLY_ACTIVE_ARCHna NO pracach? Ponieważ urządzenie nadal może uruchomić plik binarny, który został zbudowany dla wszystkich dodanych architektur (zaliczenie kompilacji), ale straci część wydajności. To tylko szybkie rozwiązanie, ale nie najlepsze.


Uwaga : im więcej dodałeś architektur, tym większy plik binarny zostanie wygenerowany. Dlatego dobrze jest wybrać odpowiednią architekturę do swojego projektu. ;)

Kjuly
źródło
@EmilMarashliev to tylko cel kompilacji. Zobaczysz to po wybraniu projektu głównego (z niebieską ikoną).
Kjuly
@Praveen nie jest pewien, wydaje się, że ta opcja została zmieniona w Xcode 5.1.
Kjuly
To jest poprawna odpowiedź, uratowałeś mi tutaj życie, dzięki :)
Bikramjit Singh
2
To najbardziej jasna i kompletna odpowiedź. Zdecydowanie powinien być zatwierdzony !!! Dziękuję
MeV
1
to było bardzo pomocne. odpowiedź byłaby kompletna, gdybyś mógł dodać, jak pobrać potrzebną architekturę.
Kalpesh Popat
29

Dodaj arm64do celu valid architectures. Wygląda na to, że dodaje x86-64architekturę do prawidłowych architektur symulatora.

xardas
źródło
27

Jeśli używasz CocoaPods, najbardziej prawdopodobnym problemem jest to, że ustawienia kompilacji projektu Pods dla budowania tylko aktywnej architektury są ustawione na Tak dla debugowania.

Rozwiązanie jest proste. Zmień to na Nie .

Podobnie, zmień na Nie dla projektu aplikacji.

samwize
źródło
12

Miałem podobny problem. Rozwiązałem ten problem, zmieniając „Architektura” na „ $ (ARCHS_STANDARD_32_BIT) ” w ustawieniach kompilacji dla projektu.

Teraz musisz wybrać architekturę standardową (armv7, arm64) - $ (ARCHS_STANDARD), ponieważ firma Apple zaleca tworzenie aplikacji w architekturze 64-bitowej. Kliknij: dokument Apple

Jayprakash Dubey
źródło
@JayprakashDubey, co z tym? $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang,
Powinienem użyć $(ARCHS_STANDARD_32_BIT)lub $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang,
@hagile: Idź z $ (ARCHS_STANDARD_INCLUDING_64_BIT)
Jayprakash Dubey
10

Dodaj: Architektury: $ (ARCHS_STANDARD_INCLUDING_64_BIT)

Prawidłowe architektury: arm64 armv7 armv7s

AntonijoDev
źródło
Hmm, czy próbowałeś zresetować wszystko, zawartość symulatora, symulator, wyczyścić projekt, zrestartować xCode i Maca, bo mam xCode5.1 i mój symulator działa dobrze
AntonijoDev
Czy używasz aplikacji / symulatora na 4-calowym 64-bitowym telefonie iPhone?
ebi
5

Na wszelki wypadek, dla każdego, kto nadal napotyka problem pomimo wykonania powyższego, sprawdź, czy używany symulator jest również obsługiwany. Mój został określony jako arm7 i arm7s, ale próbowałem uruchomić aplikację na symulatorze 64-bitowym.

irs8925
źródło
+1 Tak, to jest ten! Po sprawdzeniu i ponownym sprawdzeniu i potrójnym sprawdzeniu, że wszystko jest w porządku, to był problem!
JOM
1
Łał. Czy muszę podłączyć urządzenie, dla którego chcę zbudować, aby uzyskać skompilowany odpowiedni kod docelowy? Po prostu zwymiotowałem trochę w usta. Twój post rozwiązał ten problem, dzięki.
5

Aby uniknąć resetowania „instalacji poda” only_active_arch do debugowania przy każdym uruchomieniu, możesz dodać następujące elementy do pliku pod

# Append to your Podfile
post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
        end
    end
end
Jake Hall
źródło
3

Po prostu dodaj arm64 w prawidłowej architekturze. Mam nadzieję, że będzie działać dla Ciebie.

Shauket Sheikh
źródło
3

Mój problem polegał na tym, że projekt Pods był ukierunkowany na OS X, mimo że mój Podfile miał platform :ios. Używam cocoapods 0.35.0.rc2.

Aby to naprawić, wybierz projekt Pods w nawigatorze projektu i sprawdź, czy węzeł PROJECT Pods (pamiętaj, a nie cel) jest przeznaczony dla systemu iOS. Oznacza to, że ustawienia budowania architektur powinny być następujące:

  • Architektury: $(ARCHS_STANDARD)
  • Podstawowy SDK: iOS 8.1
  • Obsługiwane platformy: iOS
  • Prawidłowe architektury: $(ARCHS_STANDARD)

Chciałem też zbudować wszystkie architektury, więc dodałem do Podfile:

post_install do | installer |
    installer.project.build_configurations.each do |config|
        config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
end
Jano
źródło
3

Musiałem dodać następujące elementy i386i x86_64do Valid Architectures. Używam Xcode 7.2 i używam iOS 8+. I już armv7, armv7si arm64tam, i że pracował w Xcode 6.4.

timgcarlson
źródło
2

Napotkałem ten sam problem podczas uruchamiania mojej aplikacji na iPadzie przy użyciu Xcode 5.1. Zostało to rozwiązane poprzez usunięcie armv7s z „prawidłowych architektur” i ustawienie wartości „buduj tylko aktywne architektury” na Nie. Oba te pola można znaleźć w aplikacji-> cele-> ustawienia kompilacji-> architektury.

Anubha
źródło
2

Dotarłem do tego pytania z powodu problemu z budową wiersza poleceń dla symulatora w Xcode 7.2. Na wypadek, gdyby ktoś inny dotarł tutaj z tym samym problemem, podzielę się rozwiązaniem, które znalazłem:

Najwyraźniej w Xcode 7.2 jest błąd, który powoduje xcodebuildniepowodzenie podczas próby kompilacji dla symulatora. Rozwiązaniem jest podanie opcji „-destination”, np .:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' build

Aktualizacja

Powyższe przykładowe polecenie utworzy plik binarny zawierający grafikę tylko dla iPhone'a 6. Jeśli plik binarny jest uruchamiany na innych symulatorach, grafika iPhone'a 6 jest skalowana do platformy. Lepiej obejście , które zawiera wszystkie grafiki na wszystkich platformach jest określenie parametru PLATFORM_NAME=iphonesimulator, na przykład:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -arch i386 PLATFORM_NAME=iphonesimulator build
JRV
źródło
0

Spróbuj usunąć wszystkie poprzednie architektury (tj. Usuń ustawienie ARCHS_STANDARD) w tym samym czasie, gdy dodasz i386 do architektur. Powinno to zmienić aktywną architekturę na i386. Napotkałem podobny problem, gdy próbowałem domyślnie zbudować dla armv7, ale nadal próbowałem kompilować dla arm64. Zmieniłem ARCHS_STANDARD na ARCHS_STANDARD_32_BIT, co zmieniło wybraną aktywną architekturę.

halifix
źródło
0

W acrhiecture - czasami do obsługi wersji 6.0 i 7.0 wykluczamy arm64

W architekturach -> acrchitecture - wybierz standardową architekturę arm64 armv7 armv7s. Tuż poniżej w Valid acrchitecture make user arm64 armv7 armv7s jest dołączony. To zadziałało dla mnie.

Ankish Jain
źródło
0

Rozwiązałem ten problem używając odpowiedzi @ Kjuly i konkretnej linii:

„Przyczyną niepowodzenia budowy może być to, że projekt nie obsługuje architektury podłączonego urządzenia”.

Po załadowaniu Xcode automatycznie ustawia moją aplikację na iPada na iPada Air

wprowadź opis obrazu tutaj

Spowodowało to błąd analizy zależności.

Zmiana typu urządzenia natychmiast rozwiązała problem:

wprowadź opis obrazu tutaj

Nie wiem, dlaczego to działa, ale jest to bardzo szybka odpowiedź, która zaoszczędziła mi wiele majstrowania w tle i natychmiast uruchomiła aplikację do przetestowania. Nigdy bym nie pomyślał, że to może być rzecz i coś tak prostego może to naprawić, ale w tym przypadku tak się stało.

simon_smiley
źródło
0

Stwierdziłem, że konieczne było ręczne wpisanie nazw architektury:

wprowadź opis obrazu tutaj

Nie wiem, dlaczego było to konieczne, czyli dlaczego te wartości nie zostały odziedziczone z samego Xcode. Ale jak tylko to zrobiłem, problem zniknął.

matowe
źródło
0

W prawidłowych architekturach: wybierz każdy wpis (wydanie, debugowanie) i skompiluj, a następnie naciśnij klawisz Backspace. Powinno działać

Khaled Annajar
źródło