R. *_*Lin 6 xcode objective-c ios xcode8
当从xcode 7 for iOS 8到10编译时,应用程序运行正常,但是当从xcode 8编译时,应用程序仅在iOS 8上正常工作,iOS 8上的应用程序崩溃,应用程序崩溃不一致.有时它会停在一个随机的UI元素,例如:
但更常见的是它会在主要时崩溃:
* 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
Run Code Online (Sandbox Code Playgroud)
我已经启用了NSZombies,但我没有获得任何新信息.我也尝试打开地址消毒剂,它也会偶尔崩溃,但通常也会在主要方法:
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"
}
Run Code Online (Sandbox Code Playgroud)
再次,当从Xcode 7或Xcode 8为iOS 9或10构建时,应用程序工作正常.这只发生在从iOS 8的Xcode 8构建时.任何想法?
R. *_*Lin 10
团队中的其他人找到了答案.虚假.
https://forums.developer.apple.com/thread/60919
使用Xcode 8 GM,如果您在针对iOS版本早于iOS 9.3的应用提交中包含16位或P3资源,则会出现此错误.如果您的应用需要广泛的颜色功能,则必须将部署目标更改为iOS 9.3或更高版本.如果您的应用程序不需要广泛的颜色功能,并且您希望将其部署到较旧的iOS版本,那么您应该用8位sRGB资产替换所有16位或P3资产.您可以通过在iTunes Connect的错误消息中指定的资产目录上运行"assetutil"来查找16位或P3资产.以下步骤概述了该过程:
- 创建一个Inspectable .ipa文件.在Xcode Organizer(Xcode-> Window-> Organizer)中,选择要检查的存档,单击"Export ...",然后选择"Export for Enterprise或Ad-Hoc Deployment".这将创建一个本地副本.适用于您的应用的ipa文件.
- 找到.ipa文件并将其扩展名更改为.zip.
- 展开.zip文件.这将生成一个包含.app包的Payload文件夹.
打开终端并将工作目录更改为.app包cd路径/到/ Payload/your.app的顶层
使用find工具在.app包中找到Assets.car文件,如下所示:find.-name'Assets.car'
使用assetutil工具在应用程序的每个Assets.car中查找任何16位或P3资产,如下所示.:sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car> /tmp/Assets.json
检查生成的/tmp/Assets.json并查找包含"DisplayGamut"的任何内容:"P3"及其关联的"名称".这将是包含一个或多个16位或P3资产的图像集的名称.
用8位/ sRGB资产替换这些资产,然后重建您的应用程序.更新:如果您的部署目标设置为8.3或8.4并且您有资产目录,那么即使您实际上没有16位或P3资产,也会收到相同的错误消息.在这种情况下,您需要将部署目标降低到8.2,或将其移动到9.x.
更新: 如果您的部署目标设置为8.3或8.4并且您有资产目录,那么即使您实际上没有16位或P3资产,也会收到相同的错误消息.在这种情况下,您需要将部署目标降低到8.2,或将其移动到9.x.
| 归档时间: |
|
| 查看次数: |
2693 次 |
| 最近记录: |