2015-04-27 18 views
7

Mam problem po aktualizacji frameworka crashlytics w moim projekcie, poprzez aplikację Fabric oczywiście, jest to błąd linkera, loguj poniżej.Niezdefiniowane symbole po aktualizacji crashlytics

Ld /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Products/Debug-iphonesimulator/InternalApp.app/InternalApp normal x86_64 
cd /Users/losiennik/temp/InternalApp-ios-fork_DONOTREMOVE 
export IPHONEOS_DEPLOYMENT_TARGET=7.0 
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.3.sdk -L/Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Products/Debug-iphonesimulator -F/Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Products/Debug-iphonesimulator -F/Users/losiennik/temp/InternalApp-ios-fork_DONOTREMOVE -filelist /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Intermediates/InternalApp.build/Debug-iphonesimulator/InternalApp.build/Objects-normal/x86_64/InternalApp.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -ObjC -lPods-AFNetworking -lPods-ActivateYourSalon -lPods-CocoaLumberjack -lPods-Foursquare-API-v2 -lPods-GZIP -lPods-MBProgressHUD -lPods-MLPAutoCompleteTextField -lPods-MTDates -lPods-UICKeyChainStore -lPods-UIResponder+KeyboardCache -lPods-WYPopoverController -lPods-zipzap -lc++ -lz -framework CoreGraphics -framework Foundation -framework MobileCoreServices -framework QuartzCore -framework Security -framework SystemConfiguration -framework UIKit -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -stdlib=libc++ -mios-simulator-version-min=7.0 -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Intermediates/InternalApp.build/Debug-iphonesimulator/InternalApp.build/InternalApp.app.xcent -framework EventKit -framework MessageUI -framework Crashlytics -framework QuartzCore -framework MapKit -framework CoreLocation -framework CoreGraphics -framework UIKit -framework Foundation -lPods -framework Fabric -Xlinker -dependency_info -Xlinker /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Intermediates/InternalApp.build/Debug-iphonesimulator/InternalApp.build/Objects-normal/x86_64/InternalApp_dependency_info.dat -o /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Products/Debug-iphonesimulator/InternalApp.app/InternalApp 

Undefined symbols for architecture x86_64: 
    "_CLSLog", referenced from: 
     -[IAPSyncManager processSuccessfulHTTPRequest] in IAPSyncManager.o 
     -[IAPLogService writeContentsOfURL:toStream:] in IAPLogService.o 
     -[IAPServerObjectMapping serializedPrimaryKeyToJSONStringFrom:forObject:] in IAPServerObjectMapping.o 
    "_CLSNSLog", referenced from: 
     ___65-[IAPWeekDashboardViewController asyncInternalAppFetchSuccess:failure:]_block_invoke in IAPWeekDashboardViewController.o 
     -[IAPSyncManager prepareForSynchronizationInForeground:] in IAPSyncManager.o 
     ___50-[IAPSyncManager reenableIdleTimerAfterTwoMinutes]_block_invoke in IAPSyncManager.o 
     -[IAPSyncManager reenableIdleTimer] in IAPSyncManager.o 
     -[IAPJSONValidator validateJSONWithError:] in IAPJSONValidator.o 
     -[IAPSynchronisationRelationship stringWithID:] in IAPSynchronisationRelationship.o 
     _POSTDataDictionary in IAPSyncConstants.o 
     ... 
    "_OBJC_CLASS_$_Crashlytics", referenced from: 
     objc-class-ref in IAPSyncManager.o 
     objc-class-ref in Crashlytics+Utilities.o 
     l_OBJC_$_CATEGORY_Crashlytics_$_Utilities in Crashlytics+Utilities.o 
     objc-class-ref in IAPAppDelegate.o 
    (maybe you meant: _OBJC_CLASS_$_CrashlyticsPlaceholderStatic) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Próbowałem to naprawić na wiele sposobów, ale nie mogę. Sposoby próbowałem:

  • Xcode Clean działań w projekcie
  • usuwanie zawartości /Users/losiennik/Library/Developer/Xcode/DerivedData
  • usuwanie i dodawanie ponownie Crashlytics.framework i Fabric.framework w Xcode 6.3.1 cel Build Phases z Link Binary from Libraries
  • usunięcie tych plików ramowe z projektu fizycznie i dodawanie ich ponownie z innego projektu, w którym zainstalowałem frameworki od podstaw
  • usuwanie /var/folders treść

Zrobiłem każdą możliwą kombinację tego możliwego rozwiązania, a także próbowałem z uruchomieniem i zabiciem xcode, restartując także OS. Nic nie działa.

Czy masz jakieś inne pomysły? Może ktoś wie gdzie indziej Xcode przechowuje pliki tymczasowe, które mogą być używane podczas kompilowania i łączenia procesów? Czy ktoś ma podobne doświadczenie podczas aktualizowania tego środowiska?

Odpowiedz

3

Okazało się, że przyczyna problemu była związana z innym problemem, który miałem. Ten problem spowodował, że nie mogłem zarejestrować konkretnego identyfikatora aplikacji z pomocą wtyczki fabric, która została wcześniej dodana do naszego starego konta organizacji. Usunąłem identyfikator tej aplikacji z tej starej organizacji, ale nadal nie mogłem dodać jej do nowej organizacji.

Dzięki elementowi podpierającemu tkaniny okazało się, że mój identyfikator aplikacji był w dziwnym stanie po stronie zaplecza. Kiedy to się poprawiło, mój identyfikator aplikacji pojawił się na naszym koncie organizacji, a następnie wtyczka tkaniny pobrała poprawną wersję pliku Crashlytics.framework. Potem nie mam żadnych problemów z Apple Mach-O Linker Error związanych z binariami Crashlytics.

Podsumowując, gdy tylko masz opisany powyżej problem lub problem z dodawaniem identyfikatora aplikacji, napisz bezpośrednio do obsługi tkanin i nie trać czasu.

Dzięki zespołowi z tkaniny :)!

+1

To nie ma * żadnego * sensu i nie może być problemem. Stan twojego identyfikatora aplikacji na jakimś serwerze zdalnym nie może w żaden sposób wpłynąć na linker. – trojanfoe

+0

Tak, masz rację, to też nie miało dla mnie sensu przez kilka dni. Ale w tym konkretnym przypadku wtyczka tkaniny jest odpowiedzialna za pobieranie odpowiednich frameworków (Fabric.framework i Crashlytics.framework). Podczas gdy stan identyfikatora aplikacji był nieprawidłowy, wtyczka tkaniny zaktualizowała tylko Fabric.framework bez Crashlytics.framework (nie miałem też najnowszych wersji bibliotek). Wtedy nie miałem odpowiedniej wersji plików binarnych crashlytics, powodując błąd linkera. – losiennik

+0

OK, to ma więcej sensu. – trojanfoe

0

Jeśli zdecydowałeś się nie używać CocoaPods wtedy oczywiście używany 2nd opcji, stawiając Run Script wewnątrz Build faz:

./Fabric.framework/run YourUniqueId!#[email protected]#%!#$%@#$^@$3295209582523#@%!#[email protected]%!#%235 

Skrypt run skopiuje pliki:

  • Crashlytics.framework
  • Fabric.framework

Do katalogu projektu, ale czasami to nie wystarczy i trzeba również skopiować/odwołać 2 frameworki do projektu Xcode.

Importowanie 2 frameworków jest możliwe (przed powyższą procedurą kopiowania), ale Xcode wymaga odniesienia do nich.

Powinny następnie kompilować dobrze.

0

Ten problem pojawił się, gdy zaktualizowałem Xcode. Zostało to naprawione po odinstalowaniu i zainstalowaniu nowszej wersji, a nie aktualizacji.

Powiązane problemy