2016-09-27 33 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 ...'命令来修复您的资产。 –