xcode 5.1: libCordova.a problemy z architekturą

81

Wczoraj (10.03.14), kiedy wydano iOS 7.1, zaktualizowałem również do Xcode 5.1 i stwierdziłem, że mój projekt PhoneGap / Cordova nie będzie już kompilować się do mojego iPhone'a 5s. Zaktualizowałem również Cordovę do najnowszej wersji: v 3.4.0-0.1.3.

Przeczytałem wiele różnych rozwiązań na SO, które dotyczą tak zmieniających się aktywnych architektur i budujących tylko aktywne architektury, i żadne z nich nie działa. Oto co próbowałem i błędy, które otrzymuję. Początkowo otrzymałem błąd:

missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64

Więc spróbowałem następujących rzeczy. W moim projekcie wybrałem podprojekt CordovaLib i zarówno w projekcie, jak i celu, przeszedłem do Ustawień kompilacji w obszarze Architektury i upewniłem się, że arm64nie został uwzględniony w żadnej z architektur debugowania lub wydania. W tej chwili opcja Build Active Architecture Only jest ustawiona na „Yes”. Spowodowało to następujący błąd:

file was built for archive which is not the architecture being linked (armv7): 
<long file path omitted> libCordova.a
Undefined symbols for architecture armv7

Po ustawieniu opcji Build Active Architecture Only na „Nie” błąd ponownie wygląda następująco:

missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64

Nie wiem, czego jeszcze spróbować. Ustawienia architektury projektu obejmują tylko klucz „Base SDK”, który jest ustawiony na iOS 7.1. Cel projektu nie ma ustawień architektury. W każdym razie jestem prawie pewien, że problem leży w osadzonym podprojekcie CordovaLib. Co mogę zrobić, aby pomyślnie skompilować to na moim urządzeniu?

Aktualizacja: ten sam problem w Jira Apache: https://issues.apache.org/jira/browse/CB-6223

nieorganik
źródło
2
Mam dokładnie ten sam problem. iOS 7.1 i Xcode 5.1 są dostępne dla programistów od jakiegoś czasu, więc rozczarowuje fakt, że zespół Cordova nie wydał przynajmniej ostrzeżenia o tym przed ich wydaniem.
Ade
Tak. Stworzyłem zupełnie nowy projekt „Hello World” Cordova z zainstalowaną najnowszą wersją Cordova i nie udało mi się go skompilować.
nieorganik
Czy można zdobyć i ponownie zainstalować pakiet SDK systemu iOS 7.0?
Ade
Mam go do skompilowania przy użyciu tych ustawień, ale kiedy przechodzę do Sprawdź poprawność archiwum, pojawia się błąd: ** Ten pakiet jest nieprawidłowy. Aplikacje zawierające architekturę armv7s muszą zawierać architekturę armv7. Co jest dziwne, ponieważ wygląda na to, że uwzględniłem oba.
Ade,
3
Napraw kroki w problemie Apache Cordova JIRA: Issues.apache.org/jira/browse/CB-6223 .
Shazron,

Odpowiedzi:

86

@Shazron opublikował poprawkę na Apache JIRA - zauważa, że ​​poprawka zostanie wydana w ramach Cordova 3.5:

  1. Wybierz ikonę projektu
  2. Wybierz Ustawienia kompilacji.
  3. W polu „Architektury” wybierz $ ARCHS_STANDARD - Standardowe architektury (armv7, armv7s, arm64)
  4. W polu „Prawidłowe architektury” dodaj „arm64”
  5. Wybierz ikonę CordovaLib.xcodeproj
  6. W ustawieniach kompilacji dla projektu (nie docelowej) usuń ustawienia architektury warunkowej (najedź kursorem, aby zobaczyć znak minus)
  7. W polu „Architektury” wybierz $ ARCHS_STANDARD - Standardowe architektury (armv7, armv7s, arm64)
  8. W polu „Prawidłowe architektury” dodaj „arm64”
  9. Idź do 6, ale teraz zrób to dla „Celu”

Oto link do pełnego opisu tego problemu przez Shazron: http://shazronatadobe.wordpress.com/2014/03/12/xcode-5-1-and-cordova-ios/

Jest już wydany, a krótka wersja tego, co należy zrobić, to:

Został wydany Cordova CLI 3.4.1-0.1.0, który obejmuje Cordova iOS 3.4.1, który zawiera wszystkie poprawki wymienione w tym poście na blogu. Zaktualizuj swój CLI Cordova, a jeśli masz już projekt, zrób „cordova platform update ios”.

nieorganik
źródło
10
Świetny. Czy w kroku 6 mam rację sądząc, że powinienem usunąć WSZYSTKIE z poniższych: SCREENSHOT ?
Ade
1
Na początku wydaje się to w porządku : aplikacja archiwizuje się i sprawdza. Ale po wyeksportowaniu jako dystrybucja ad hoc nie będzie działać na iPhonie 5S.
Ade,
7
Tak, ta odpowiedź powoduje, że aplikacja skompiluje się i zainstaluje na 5S, ale kiedy zaczyna działać, generuje błąd lldb i ulega awarii (lub zatrzymuje się, jeśli używasz urządzenia podłączonego do komputera Mac podczas uruchamiania Xcode).
Jough Dempsey,
5
Oto link do postu @Shazron. Obejmuje 3 numery: shazronatadobe.wordpress.com/2014/03/12/…
stefbach
Potwierdzam, że to działa. Nie zapomnij o punkcie 9, który usuwa wszelkie ustawienia architektury warunkowej dla celu „Cordova Lib”. Powinieneś mieć zarówno projekt „CordovaLib”, jak i cele „CordovaLib”. Ustawienia architektury powinny wyglądać następująco: - Debugowanie: Architektura standardowa (...) - Wydanie: Architektura standardowa (...)
stefbach
11

Inne podejście, które działa:

  1. Kliknij swój projekt u góry nawigatora projektów (nie podprojekt Cordova.lib).
  2. W okienku edytora wybierz projekt (nie cel), wybierz kartę edytora Ustawienia kompilacji i kliknij przyciski Wszystkie i Poziomy.
  3. W razie potrzeby rozwiń grupę Architektury i znajdź pod nią wiersz Architektury.
  4. Pierwsza (rozwiązana) i trzecia (domyślna iOS) kolumna w wierszu Architektura będzie zawierać tekst Standard; druga kolumna (projekt) będzie pusta.
  5. Kliknij pustą drugą kolumnę, aby wyświetlić okno zawierające jedną linię: „$ (ARCHS_STANDARD)”.
  6. Kliknij dwukrotnie tę linię, aby umożliwić edycję, a następnie zmień ją na „$ (ARCHS_STANDARD_32_BIT)”.
  7. Kliknij poza polem, aby potwierdzić zmianę. Teraz pierwsze i drugie pudełko będzie zawierało tylko $.
  8. Teraz powinieneś być w stanie budować.
Neil Faiman
źródło
10

Downgrade Xcode 5.1 do 5.0.2 działał dla mnie, nie mogłem się doczekać oficjalnej wersji Cordova 3.5 z poprawką.

Możesz pobrać kopię poprzedniej wersji tutaj: https://developer.apple.com/downloads/index.action

AlexLopezIT
źródło
3
To działa - jedynym zastrzeżeniem jest to, że nie można testować bezpośrednio w XCode na telefonie iPhone z systemem iOS 7.1. Tutaj z pomocą przychodzi symulator. Skompilowana aplikacja może działać na iOS 7.1 (potwierdzone zarówno na iPhonie 5, jak i 5S), więc obniżenie wersji do wydania Cordova 3.5 wydaje się najlepszą opcją.
Ade,
U mnie to działa najlepiej teraz. Pobrałem Xcode 5.02 i skopiowałem go (nazywając go najpierw XCode_502) do aplikacji, co umożliwiło mi uruchomienie go obok Xcode 5.1.
EeKay
Ade Przeniosłem się do wersji 5.0.2 i testowałem moją aplikację na iPhonie 5 i iPadzie 2, oba z iOS 7.1, bez żadnych problemów, bez żadnych problemów przesłałem również aplikację do iTunes Connect.
AlexLopezIT
8

Właśnie wydali nową wersję 3.4.1, która rozwiązuje ten problem.

Dlatego aktualizuję pojedynczy plik, aby wskazywał na TAG 3.4.1:

/usr/local/lib/node_modules/cordova/platforms.js

wiersz 24 z:

version: '3.4.0'

do:

version: '3.4.1'

Następnie usuwasz folder iOS w swoim projekcie i uruchamiasz:

cordova platform add ios

Spowoduje to pobranie nowego szablonu opartego na 3.4.1 ze wszystkimi poprawkami.

Fabrizio Giordano
źródło
@JPRichardson Dzięki, będę teraz aktualizować :)
dk123
1
npm update cordova -g, następnie cordova aktualizacja platformy ios
sepulturkey
5

Postępuj zgodnie z instrukcjami na tym filmie: https://www.youtube.com/watch?v=EIkJAKcz8DE

Po prostu dodaj arm64 do swoich projektów, poprawne architektury i usuń całą architekturę warunkową projektu Cordova.

podróżnik
źródło
Uratowałeś mi bardzo dużo bólu głowy. Ten film naprawił problem, z którym borykałem się przez kilka godzin.
Bullyen
To zadziałało dla mnie. Dziękuję za nakręcenie filmu - było bardzo jasne.
John Q
3

Udało mi się zmusić moją aplikację do kompilacji w XCode 5.1, najpierw budując projekt CordovaLib oddzielnie z poziomu XCode, a następnie budując mój projekt.

Wayferer
źródło
To zadziałało również dla mnie. Idealnie, ponieważ obniżenie Xcode (i brak możliwości testowania na urządzeniach iOS7.1) nie jest dla mnie opcją. Dzięki!
Adam Tuttle
2

Musisz tylko dodać architekturę arm64 do każdego oświadczenia i ustawienia budynku, to znaczy do bieżącego projektu i projektu cordova.

W Twoim projekcie:

  • Architektury
  • Prawidłowe architektury

na Cordovie:

  • Architektury
  • odpluskwić
  • wydanie
  • Dowolny zestaw SDK dla systemu iOS

I CO NAJWAŻNIEJSZE

-Poprawne architektury w ustawieniach kompilacji Cordova

Ta konfiguracja generuje wiele ostrzeżeń, ale wystarczy zmienić „% d” na „% ld” we wszystkich wierszach, o których mówi ostrzeżenie.

Felipe Quirós
źródło