2016-09-27 78 views
6

該應用程序從xcode的7至10進行編譯時爲iOS 8但從xcode的8編譯時運行良好,該應用僅正常工作在iOS 9和10上的iOS 8,應用程序崩潰不一致。有時它會在一個隨機的UI元素停止,如:EXC_BAD_ACCESS 8

enter image description here

但更多的時候它只會崩潰在主:

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 

我已經啓用NSZombies和我沒有得到新的信息。我也曾嘗試打開該地址消毒劑,它也將崩潰斷斷續續,但通常也是在main方法:

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" 
} 

再從Xcode的7或Xcode的8專爲當應用程序工作正常iOS 9或10.這隻發生在從iOS 8的Xcode 8構建時。任何想法?

回答

10

對球隊其他的一些人找到了答案。虛假。

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

和Xcode 8 GM,這個錯誤會發生,如果您在一個應用程序提交iOS版針對之前版本的iOS,然後9.3 16位或P3 資產。如果您的應用需要廣泛的顏色功能,您必須將您的部署目標更改爲iOS 9.3或更高版本。如果您的應用不 需要寬廣的色功能,並希望將其部署到舊的 IOS版本,那麼你應該更換所有16位或P3資產 8位的sRGB資產。您可以通過從 iTunes Connect中的錯誤信息中提及的資產目錄運行 「assetutil」找到16位或P3資產。以下步驟概述了該過程:

  1. 創建Inspectable .ipa文件。在Xcode的組織者(Xcode->窗口 - >管理),選擇一個檔案進行檢查,單擊 「導出...「,然後選擇‘導出爲企業或特設部署’。 這將創建一個本地副本爲您的應用程序的.ipa文件。
  2. 找到.ipa文件,並更改其擴展爲.zip。
  3. 展開.zip文件。這將產生一個有效載荷文件夾包含您的.app捆綁。
  4. 打開終端並將工作目錄更改爲.app軟件包的頂層cd路徑/ to/Payload/your.app

  5. 使用查找工具找到Assets.c .app包中的ar文件,如下所示:find。 -name'Assets.car'

  6. 使用assetutil工具在您的應用程序的每個Assets.car中查找任何16位或P3資產,如下所示。 :須藤xcrun --sdk 的iPhoneOS assetutil --info /path/to/a/Assets.car> /tmp/Assets.json

  7. 檢查所得/tmp/Assets.json並查找包含任何內容「 DisplayGamut「:」P3「及其關聯的」名稱「。這將是 是包含一個或多個16位或P3 資產的圖像集的名稱。

  8. 用8位/ sRGB資產替換這些資產,然後重建您的應用程序。更新:如果您的部署目標設置爲8.3或8.4 ,並且您擁有資產目錄,則即使您實際上沒有16位或P3資產,也會收到相同的錯誤 消息。在 這種情況下,您需要將部署目標降至8.2, 或將其升至9.x.

更新:如果您的部署目標被設置爲8.3或8.4和你有一個資產類別,那麼你將收到此相同的錯誤消息,即使你實際上並不具備16位或P3資產。在這種情況下,您需要將您的部署目標降至8.2,或將其移至9.x.

+0

非常感謝,把目標降到8.2解決了我的情況! –

+0

謝謝,這幫了我很多! 8.2也爲我工作。 – floschliep

+0

幫助我!要從http://stackoverflow.com/a/39570973上的答案借用,您可以運行'sips -m ...'命令來修復您的資產。 –