2016-09-27 11 views
6

Aplikacja działa poprawnie po skompilowaniu z xcode 7 na iOS od 8 do 10, ale po kompilacji z xcode 8, aplikacja działa normalnie tylko w systemie iOS 9 i 10 na iOS 8, aplikacja rozbija się niespójnie . Czasami będzie to przystanek na losowej elementu interfejsu użytkownika, takie jak:EXC_BAD_ACCESS tylko na xcode 8 z systemem iOS 8

enter image description here

ale częściej to po prostu upaść na główny:

enter image description here

* thread #1: tid = 0x11d655, 0x35deaf56 libobjc.A.dylib`objc_msgSend + 22, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xf632d5c1) 
frame #0: 0x35deaf56 libobjc.A.dylib`objc_msgSend + 22 
frame #1: 0x2db167ea CoreUI`-[CUINamedImage initWithName:usingRenditionKey:fromTheme:] + 98 
frame #2: 0x2db21d48 CoreUI`-[CUICatalog imageWithName:scaleFactor:deviceIdiom:deviceSubtype:sizeClassHorizontal:sizeClassVertical:] + 128 
frame #3: 0x2b8aee98 UIKit`__98-[_UIAssetManager imageNamed:scale:idiom:subtype:cachingOptions:sizeClassPair:attachCatalogImage:]_block_invoke + 240 
frame #4: 0x2b8aecea UIKit`-[_UIAssetManager imageNamed:scale:idiom:subtype:cachingOptions:sizeClassPair:attachCatalogImage:] + 230 
frame #5: 0x2b95df86 UIKit`-[UIImageAsset imageWithTraitCollection:] + 474 
frame #6: 0x2b58d9d2 UIKit`-[UIImageView _resolveImageForTrait:] + 286 
frame #7: 0x2b58d690 UIKit`-[UIImageView _didMoveFromWindow:toWindow:] + 156 
frame #8: 0x2b28aef4 UIKit`-[UIView(Internal) _didMoveFromWindow:toWindow:] + 656 
frame #9: 0x2b300d50 UIKit`-[UIControl _didMoveFromWindow:toWindow:] + 44 
frame #10: 0x2b28aef4 UIKit`-[UIView(Internal) _didMoveFromWindow:toWindow:] + 656 
frame #11: 0x2b28aef4 UIKit`-[UIView(Internal) _didMoveFromWindow:toWindow:] + 656 
frame #12: 0x2b28aef4 UIKit`-[UIView(Internal) _didMoveFromWindow:toWindow:] + 656 
frame #13: 0x2b28a804 UIKit`__45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 112 
frame #14: 0x2b28a720 UIKit`-[UIView(Hierarchy) _postMovedFromSuperview:] + 428 
frame #15: 0x2b294bce UIKit`-[UIView(Internal) _addSubview:positioned:relativeTo:] + 1462 
frame #16: 0x2b29460e UIKit`-[UIView(Hierarchy) addSubview:] + 30 
frame #17: 0x2b459eae UIKit`__53-[_UINavigationParallaxTransition animateTransition:]_block_invoke + 1262 
frame #18: 0x2b29ada4 UIKit`+[UIView(Animation) performWithoutAnimation:] + 72 
frame #19: 0x2b45977c UIKit`-[_UINavigationParallaxTransition animateTransition:] + 812 
frame #20: 0x2b417cfc UIKit`-[UINavigationController _startCustomTransition:] + 2860 
frame #21: 0x2b337026 UIKit`-[UINavigationController _startDeferredTransitionIfNeeded:] + 422 
frame #22: 0x2b336e2c UIKit`-[UINavigationController __viewWillLayoutSubviews] + 44 
frame #23: 0x2b336dc0 UIKit`-[UILayoutContainerView layoutSubviews] + 184 
frame #24: 0x2b28b7fe UIKit`-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 514 
frame #25: 0x2acb1834 QuartzCore`-[CALayer layoutSublayers] + 136 
frame #26: 0x2acad20c QuartzCore`CA::Layer::layout_if_needed(CA::Transaction*) + 360 
frame #27: 0x2acad094 QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 16 
frame #28: 0x2acaca70 QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 224 
frame #29: 0x2acac874 QuartzCore`CA::Transaction::commit() + 324 
frame #30: 0x2aca674c QuartzCore`CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 56 
frame #31: 0x27d37ffc CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20 
frame #32: 0x27d356ba CoreFoundation`__CFRunLoopDoObservers + 278 
frame #33: 0x27d35ac2 CoreFoundation`__CFRunLoopRun + 914 
frame #34: 0x27c833b0 CoreFoundation`CFRunLoopRunSpecific + 476 
frame #35: 0x27c831c2 CoreFoundation`CFRunLoopRunInMode + 106 
frame #36: 0x2f1f2200 GraphicsServices`GSEventRunModal + 136 
frame #37: 0x2b2ed43c UIKit`UIApplicationMain + 1440 
* frame #38: 0x0017bf62 Dev`main(argc=1, argv=0x01549a28) + 106 at main.m:14 
frame #39: 0x3636aaae libdyld.dylib`start + 2 

ja już włączona NSZombies i ja nie otrzymałem nowych informacji. Próbowałem również włączenie adres odkażającego i będzie to również awarię sporadycznie ale zazwyczaj również w głównym sposobem:

enter image description here

thread #1: tid = 0x11d992, 0x020fce9e libclang_rt.asan_ios_dynamic.dylib`__asan::AsanDie(), queue = 'com.apple.main-thread', stop reason = Attempt to free a non-allocated address 
{ 
"access_size" : 0, 
    "access_type" : 0, 
    "address" : 103442256, 
    "description" : "Attempt to free a non-allocated address", 
    "instrumentation_class" : "AddressSanitizer", 
    "pc" : 0, 
    "stop_type" : "fatal_error" 
} 

Ponownie aplikacja działa poprawnie, gdy zbudowany z Xcode 7 lub z Xcode 8 do iOS 9 lub 10. Dzieje się tak tylko wtedy, gdy jest zbudowany z Xcode 8 dla systemu iOS 8. Jakieś pomysły?

Odpowiedz

10

Jakiś inny facet w drużynie znalazł odpowiedź. Podrobiony.

https://forums.developer.apple.com/thread/60919

z Xcode 8 GM, ten błąd będzie występować, jeśli zawierają 16-bitową lub P3 aktywa składania aplikacji w iOS kierowania komunikatów wcześniej niż iOS 9.3. Jeśli Twoja aplikacja wymaga szerokiej funkcjonalności, musisz zmienić cel wdrożenia na system iOS 9.3 lub nowszy. Jeśli Twoja aplikacja nie wymaga szerokiej funkcjonalności kolorystycznej i chcesz ją wdrożyć w starszych wersjach iOS , powinieneś wymienić wszystkie 16-bitowe lub P3 zasoby na 8-bitowe zasoby sRGB . Możesz znaleźć zasoby 16-bitowe lub P3, uruchamiając "assetutil" w katalogu zasobów wymienionym w komunikacie o błędzie z iTunes Connect. Poniższe kroki opisują proces:

  1. Utwórz sprawdzalny plik .ipa. W Xcode Organizer (Xcode-> Okno-> Organizator), wybierz archiwum do sprawdzenia, kliknij "Eksportuj ..." i wybierz "Eksportuj do Enterprise lub Ad-Hoc Deployment". Spowoduje to utworzenie lokalnej kopii plik .ipa dla swojej aplikacji.
  2. Zlokalizuj ten plik .ipa i zmień jego rozszerzenie na .zip.
  3. Rozwiń plik .zip. To będzie produkować folder Payload zawierające swoją .app paczkę.
  4. Otwórz terminal i zmień katalog roboczy na najwyższy poziom ścieżki CD pliku .app/na/Payload/your.app

  5. Użyj narzędzia znajdowania, aby zlokalizować plik Assets.c ar pliki w pakiecie .app, jak pokazano poniżej: znajdź. -name "Assets.car"

  6. Użyj narzędzia assetutil, aby znaleźć jakiekolwiek 16-bitowe lub P3 zasoby, w każdym Assets.car, którego aplikacja ma, jak pokazano poniżej. : Sudo xcrun --sdk iPhoneOS assetutil --info /path/to/a/Assets.car> /tmp/Assets.json

  7. Zbadać wynikowy /tmp/Assets.json i szukać jakichkolwiek treści zawierających „ DisplayGamut ":" P3 "i związane z nim" Nazwa ".To będzie być nazwą twojego zestawu obrazów zawierającego jeden lub więcej zasobów 16-bitowych lub P3 .

  8. Wymień te zasoby na zasoby 8-bitowe/sRGB, a następnie przebuduj aplikację. Aktualizacja: jeśli Twój cel wdrożenia jest ustawiony na 8.3 lub 8.4 , a masz katalog zasobów, otrzymasz ten sam komunikat o błędzie , nawet jeśli nie masz zasobów 16-bitowych ani P3. W tym przypadku musisz zmniejszyć cel wdrożenia do 8.2, lub przenieść go do 9.x.

Aktualizacja: Jeśli docelowa Wdrożenie jest ustawiony na 8.3 lub 8.4 i masz katalog aktywów następnie otrzymasz ten sam komunikat o błędzie, nawet jeśli w rzeczywistości nie mają 16-bitowe lub P3 aktywów . W takim przypadku konieczne będzie obniżenie celu wdrożenia do wersji 8.2 lub przeniesienie go do poziomu 9.x.

+0

Dziękuję bardzo za to, obniżenie celu do 8.2 rozwiązało to w moim przypadku! –

+0

Dzięki, to mi bardzo pomogło! 8.2 również dla mnie działało. – floschliep

+0

Pomógł mi też! Aby wypożyczyć odpowiedź z adresu http://stackoverflow.com/a/39570973, możesz po prostu uruchomić polecenie 'sips -m ...', aby naprawić swoje zasoby. –