首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在运行EXC_BAD_ACCESS 8的xcode 8上使用iOS

仅在运行EXC_BAD_ACCESS 8的xcode 8上使用iOS
EN

Stack Overflow用户
提问于 2016-09-27 22:33:03
回答 1查看 2.8K关注 0票数 6

当从xcode 7编译iOS 8到10时,应用程序运行良好,但从xcode 8编译时,应用程序只在iOS 9上正常工作,在iOS 8上运行正常,应用程序崩溃不一致。有时,它会停在一个随机的UI元素上,例如:

但更多的情况是,它只会在main上崩溃:

代码语言:javascript
复制
* 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,而且没有新的信息。我还试过打开地址消毒剂,它也会偶尔崩溃,但通常也会在主要方法上崩溃:

代码语言:javascript
复制
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时,应用程序运行良好。只有从Xcode 8构建为iOS 8的应用程序才能正常工作。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-27 22:44:36

队里的其他人找到了答案。假的。

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

使用Xcode 8 GM时,如果在应用程序提交中包含16位或P3资产,则会发生此错误,该应用程序的目标是iOS发布版本,而不是iOS 9.3。如果应用程序需要广泛的颜色功能,则必须将部署目标更改为iOS 9.3或更高版本。如果您的应用程序不需要广泛的颜色功能,并且希望将其部署到较早的iOS版本,那么您应该将所有16位或P3资产替换为8位sRGB资产。您可以通过在P3连接的错误消息中命名的资产目录上运行“assetutil”来找到16位或iTunes资产。以下步骤概述了这一过程:

  1. 创建一个可检查的.ipa文件。在Xcode组织者(Xcode->Window->组织者)中,选择要检查的存档,单击“Export..out”,然后选择“Enterprise或Ad部署”,这将为您的应用程序创建一个.ipa文件的本地副本。
  2. 找到该.ipa文件并将其扩展名更改为.zip。
  3. 展开.zip文件。这将产生一个包含.app包的Payload文件夹。
  4. 打开终端并将工作目录更改为.app包cd路径/ to /Payload/your.app的顶层
  5. 使用find工具在您的Assets.car包中定位.app文件,如下所示:查找。-name 'Assets.car‘
  6. 使用assetutil工具查找任何16位或P3资产,在应用程序拥有的每个Assets.car中,如下所示。:sudo 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。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39735353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档