Ustawienie Xcode 7 i ENABLE_BITCODE = YES nie działa

96

Śledziłem kilka wątków wokół nowego ustawienia ENABLE_BITCODE w Xcode, próbowałem też tyle, ile mogłem (przyznał, że nie jestem xcode pro), ale nadal nie mogę skompilować projektu do użytku na moim telefonie testowym?

Moja aplikacja działa dobrze na symulatorze, ale nie mogę jej wdrożyć na moim iPhonie w celu przetestowania. Na drugim właśnie zainstalowałem iOS 9 beta.

Oto otrzymany komunikat o błędzie. Wygląda na to, że ustawienie nie ma wpływu na bibliotekę PARSE.com, która jest częścią mojego projektu? Jak mogę uruchomić mój projekt na moim telefonie? Dzięki za każdą radę.

    Ld /Users/xxxxxx/Library/Developer/Xcode/DerivedData/graffiti-  bnmizxueojwiqcbbnsvilljhosrw/Build/Products/Debug-iphoneos/Pods/Parse.framework/Parse normal armv7
cd /Users/xxxxxx/Documents/DigitalTempusDev/graffiti/Pods
export IPHONEOS_DEPLOYMENT_TARGET=8.0
export PATH="/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode-beta.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7 -dynamiclib -isysroot /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk -L/Users/xxxxxx/Library/Developer/Xcode/DerivedData/graffiti-bnmizxueojwiqcbbnsvilljhosrw/Build/Products/Debug-iphoneos/Pods -L/Users/xxxxxx/Documents/DigitalTempusDev/graffiti/Pods/Parse -F/Users/xxxxxx/Library/Developer/Xcode/DerivedData/graffiti-bnmizxueojwiqcbbnsvilljhosrw/Build/Products/Debug-iphoneos/Pods -filelist /Users/xxxxxx/Library/Developer/Xcode/DerivedData/graffiti-bnmizxueojwiqcbbnsvilljhosrw/Build/Intermediates/Pods.build/Debug-iphoneos/Pods-Parse.build/Objects-normal/armv7/Parse.LinkFileList -install_name @rpath/Parse.framework/Parse -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -miphoneos-version-min=8.0 -dead_strip -fembed-bitcode-marker -ObjC -lParseLib -lz -framework AudioToolbox -framework CFNetwork -framework CoreGraphics -framework CoreLocation -framework QuartzCore -framework Security -framework StoreKit -framework SystemConfiguration -weak_framework Accounts -weak_framework Social -ObjC -fobjc-arc -fobjc-link-runtime -framework AudioToolbox -framework Bolts -framework CFNetwork -framework CoreGraphics -framework CoreLocation -framework Foundation -framework QuartzCore -framework Security -framework StoreKit -framework SystemConfiguration -single_module -compatibility_version 1 -current_version 1 -Xlinker -dependency_info -Xlinker /Users/xxxxxx/Library/Developer/Xcode/DerivedData/graffiti-bnmizxueojwiqcbbnsvilljhosrw/Build/Intermediates/Pods.build/Debug-iphoneos/Pods-Parse.build/Objects-normal/armv7/Parse_dependency_info.dat -o /Users/xxxxxx/Library/Developer/Xcode/DerivedData/graffiti-bnmizxueojwiqcbbnsvilljhosrw/Build/Products/Debug-iphoneos/Pods/Parse.framework/Parse

---
ld: warning: -weak_framework is treated as -framework when used with -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES). Weak linking may still happen based on availability mark-up in headers
ld: warning: -weak_framework is treated as -framework when used with -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES). Weak linking may still happen based on availability mark-up in headers
ld: '/Users/xxxxxx/Documents/DigitalTempusDev/graffiti/Pods/Parse/libParseLib.a(PFSQLiteDatabase.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
DirkLX
źródło
1
Czy jesteś pewien, że wybrałeś Enable Bitcodesię NOprzeciwko budowie config używasz (np DEBUG)? Możesz to sprawdzić w project-> target-> build settings-> search enable bitcode-> set NOin DEBUG (warto pamiętać, aby spróbować zaktualizować biblioteki przed wydaniem testowym, być może będzie już zawierał bitcode). Następnie Edit Scheme-> Run-> sprawdź, czy masz DEBUGconfig atm.
Vive
1
DOBRZE! tak i nie. Nie ustawiłem tego na cele POD, to był mój przeocz. Twoja wskazówka mnie tam doprowadziła. Dzięki
DirkLX
Wspaniale to słyszeć :) zamieści to jako odpowiedź, ponieważ może być przydatne dla innych osób.
Vive
Dlaczego musimy zmienić Bitcode? Wcześniej nie musieliśmy aktualizować jego wartości. Jakiś logiczny powód? Dzięki
msmq
Zrobiłem to wszystko, ale nadal aplikacja uległa awarii na urządzeniu z tym samym błędem. Używam iOS 9.1. Proszę pomóż!
Md Rais,

Odpowiedzi:

133

Czy jesteś pewien, że wybrałeś Enable Bitcodesię NOprzeciwko budowie config używasz (np DEBUG)? Możesz to sprawdzić w projekt-> cel-> ustawienia kompilacji-> wyszukiwanie enable bitcode-> zestawNO in DEBUG(warto pamiętać, aby spróbować zaktualizować biblioteki przed wydaniem testowym, być może będzie już zawierał bitcode). Następnie Edytuj schemat -> Uruchom -> sprawdź, czy masz DEBUGkonfigurację atm.

wprowadź opis obrazu tutaj

Vive
źródło
1
@Zorayr Po dodaniu obrazu do mojego postu: najpierw sprawdź ustawienia kompilacji aplikacji i zmień tę flagę w ustawieniach kompilacji aplikacji. Tylko jeśli to nie pomoże, zrób to samo z Podami.
Vive
3
Czy aplikacja zostanie zaakceptowana w App Store, jeśli Enable Bitcodejest ustawiona na NO?
JAK
@NeAS Yes. Obecnie nie ma wymogu włączania bitcode.
Vive
Powinieneś wyłączyć bitcode dla wszystkich swoich podów
Vadim Kurochkin
53

Pamiętaj, że w przypadku projektów korzystających z CocoaPods powinieneś ustawić ENABLE_BITCODE = NO cele projektu i kontenera Pods.

Ten błąd

Ld /Users/maximveksler/Library/Developer/Xcode/DerivedData/ParseUI-gwtgmlgbpobjfjfjgkiwdahqveos/Build/Products/Debug-iphoneos/ParseTwitterUtils.framework/ParseTwitterUtils normal arm64
    cd /Users/maximveksler/Developer/ParseUI-iOS/Pods
    export IPHONEOS_DEPLOYMENT_TARGET=9.0
    export PATH="/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode-beta.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch arm64 -dynamiclib -isysroot /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk -L/Users/maximveksler/Library/Developer/Xcode/DerivedData/ParseUI-gwtgmlgbpobjfjfjgkiwdahqveos/Build/Products/Debug-iphoneos -L/Users/maximveksler/Developer/ParseUI-iOS/Pods/ParseTwitterUtils -F/Users/maximveksler/Library/Developer/Xcode/DerivedData/ParseUI-gwtgmlgbpobjfjfjgkiwdahqveos/Build/Products/Debug-iphoneos -filelist /Users/maximveksler/Library/Developer/Xcode/DerivedData/ParseUI-gwtgmlgbpobjfjfjgkiwdahqveos/Build/Intermediates/Pods.build/Debug-iphoneos/ParseTwitterUtils.build/Objects-normal/arm64/ParseTwitterUtils.LinkFileList -install_name @rpath/ParseTwitterUtils.framework/ParseTwitterUtils -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -miphoneos-version-min=9.0 -dead_strip -fembed-bitcode-marker -ObjC -lParseTwitterUtilsLib -lsqlite3 -lz -framework AudioToolbox -framework CFNetwork -framework CoreGraphics -framework CoreLocation -framework QuartzCore -framework Security -framework StoreKit -framework SystemConfiguration -weak_framework Accounts -weak_framework Social -fobjc-arc -fobjc-link-runtime -framework AudioToolbox -framework Bolts -framework CFNetwork -framework CoreGraphics -framework CoreLocation -framework Foundation -framework Parse -framework QuartzCore -framework Security -framework StoreKit -framework SystemConfiguration -single_module -compatibility_version 1 -current_version 1.8.1 -Xlinker -dependency_info -Xlinker /Users/maximveksler/Library/Developer/Xcode/DerivedData/ParseUI-gwtgmlgbpobjfjfjgkiwdahqveos/Build/Intermediates/Pods.build/Debug-iphoneos/ParseTwitterUtils.build/Objects-normal/arm64/ParseTwitterUtils_dependency_info.dat -o /Users/maximveksler/Library/Developer/Xcode/DerivedData/ParseUI-gwtgmlgbpobjfjfjgkiwdahqveos/Build/Products/Debug-iphoneos/ParseTwitterUtils.framework/ParseTwitterUtils

ld: '/Users/maximveksler/Developer/ParseUI-iOS/Pods/ParseTwitterUtils/libParseTwitterUtilsLib.a(PFTwitterAuthenticationProvider.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

został rozwiązany przez:

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

Maxim Veksler
źródło
Czy Apple odrzuca aplikację, jeśli prześlemy ją z opcją Włącz Bitcode = NIE?
Ganesh Guturi
@ G.Ganesh proszę zadać jako osobne pytanie. Zasady są różne dla tvOS i watchOS, gdzie odpowiedź brzmi TAK. iOS odpowiedź brzmi obecnie nie, w przyszłości TAK.
Maxim Veksler
@GaneshGuturi Obecnie tak, ale prawdopodobnie Apple przerwie to w pewnym momencie w przyszłości. Więcej wyjaśnień np. Tutaj: stackoverflow.com/a/31207170/849616 .
Vive
17

Miałem też ten sam problem w Xcode7. Rozwiązanie tego problemu:

  • iść do PROJECT
  • budować Settings
  • Wybierz All Tab
  • wpisz wyszukiwanie Enable Bitcode
  • Update Flagdo No(który będzie pod Twoim projektem (druga kolumna))
Harshal Wani
źródło
15

Miałem podobny problem z biblioteką pod kakao GoogleAnalytics, a biblioteka nie kompilowała się dla iPhone'a 6 z iOS 8.

Moim rozwiązaniem było włączenie flagi NIE „Włącz Bitcode” w celu projektu aplikacji, a nie w projekcie Pods.

ArturOlszak
źródło
To właśnie powiedziałem w komentarzu do mojej odpowiedzi. Aby spróbować zrobić to na ustawieniach projektu, wtedy i tylko wtedy, gdy to nie działa, przełącz się na projekt pod.
Vive
Przełączanie celu i projektu na ustawienia kompilacji kod bitowy NIE nie działa w przypadku ARCHIWIZACJI. Znajduje pracę dla kompilacji Simów. XCODE 7.0.1
ort11
11

Jeśli Twój Bitcode nie jest wyświetlany, wybierz opcję Wszystkie. Gdy xcode wybiera opcję Basic, opcja Bitcode nie jest wyświetlana.

wprowadź opis obrazu tutaj

Po wybraniu opcji All you can see Bitcode. Następnie ustaw Nie dla konfiguracji reklam wprowadź opis obrazu tutaj

ethemsulan
źródło
10

Po prostu ustawiłem to dla mojego projektu.

MyProjectTarget -> Ustawienia kompilacji -> Włącz Bitcode = NIE

Alexander
źródło
1
Czy aplikacja zostanie odrzucona w App Store?
Ne AS
5

Jak wszyscy mówili, że odpowiedź jest ustawiony Enable Bitcodena Now ustawieniach kompilacji , ale myślę, że niektórzy z was mogą być zainteresowani w ten sposób z linii poleceń .

Mój projekt Xcode jest generowany przez Unity i nie chcę żadnej ręcznej interwencji w ustawienia projektu Xcode. Może jest lepszy sposób lub narzędzie, które może edytować ustawienia kompilacji, podobnie jak PlistBuddy pozwala aktualizować wartości w plistplikach. Nie znam żadnego narzędzia, które robi to do ustawień kompilacji, więc używam seda .

sed: Uruchamia zamienniki na podstawie wyrażeń regularnych.

Jak ustawić Enable Bitcode, abyNo z linii poleceń:

Tutaj nazwa mojego projektu jest Unity-iPhonetaka, że ​​uruchamiam następujące polecenie z katalogu głównego mojego projektu Xcode:

sed -i -e 's/ENABLE_BITCODE = YES;/ENABLE_BITCODE = NO;/g' \ 
Unity-iPhone.xcodeproj/project.pbxproj

-e - określ polecenia seda do uruchomienia.
-i - edytuj pliki na miejscu, uruchamiając skrypty oddzielnie dla każdego pliku

Usunąć -i jeśli chcesz tylko podgląd tego, co robi;)

Zauważ, że wszystkie konfiguracje kompilacji zostaną zmienione za pomocą tego polecenia, linia ENABLE_BITCODE = YES;pojawiła się 6 razy w pliku my project.pbxproj.

Teraz moje kroki kompilacji mogą być w pełni zautomatyzowane, ponieważ fastlane zajmie się resztą!

GabLeRoux
źródło
3

Jeśli nie znajdziesz flagi enable_bitcode. Kliknij kartę „Wszystkie” na górnym pasku narzędzi obok paska wyszukiwania. wprowadź opis obrazu tutaj

haroon jamil
źródło
Dodaj kod, aby lepiej wyjaśnić swoją odpowiedź.
Usman Maqbool
1

spróbuj tego polecenia w terminalu, jeśli nie możesz zmienić ustawień BITCODE w projekcie,

xcodebuild -target "target" -configuration "configuration" ENABLE_BITCODE = NO

Jaxs_ios
źródło