Xcode 13.1分发App时崩溃,集成Charts.framework 3.3.0旧版运行正常
Xcode 13.1 分发App时崩溃
- 应用集成了
Charts.framework 3.3.0版本,集成状态截图如下:
- 问题出现在分发流程环节:同一个Archive归档文件在Xcode 12.3中可以正常完成分发操作,但在Xcode 13.1中分发时Xcode直接崩溃。
- 已排除Xcode 13.1本身的通用缺陷:其他项目在相同版本Xcode中可以正常打包分发。
相关报错截图如下:

以下是Xcode 13.1分发App时的崩溃日志:
> Xcode 13.1 分发App崩溃日志 进程: Xcode [65781] 路径: /Applications/Xcode.app/Contents/MacOS/Xcode 标识符: com.apple.dt.Xcode 版本: 13.1 (19466) 构建信息: IDEFrameworks-19466000000000000~20 (13A1030d) App 项目ID: 497799835 App 外部ID: 844664792 代码类型: X86-64 (原生) 父进程: ??? [1] 负责进程: Xcode [65781] 用户ID: 501 日期/时间: 2021-11-19 09:24:46.378 +0800 操作系统版本: macOS 11.6 (20G165) 报告版本: 12 匿名UUID: 52F5D246-FDF9-90E0-35EB-5556BDC2CE93 睡眠/唤醒UUID: 8D6D2E2A-D856-4FEE-8AA1-A72352EEC604 启动后运行时长: 23000秒 唤醒后运行时长: 970秒 系统完整性保护: 已启用 崩溃线程: 13 调度队列: ConcurrentQueue: -[IDEDistributionSummaryStepViewController viewDidLoad]_block_invoke 异常类型: EXC_CRASH (SIGABRT) 异常代码: 0x0000000000000000, 0x0000000000000000 异常备注: EXC_CORPSE_NOTIFY 应用特定信息: 可能的2021-11-19 01:24:45 +0000的过时失败提示: 0: 调用以下代码提供的block: 0 DVTDispatchAsync (in DVTFoundation) 1 -[IDEDistributionSummaryStepViewController viewDidLoad] (in IDEKit) 2 -[NSViewController _sendViewDidLoad] (in AppKit) 3 -[NSViewController _loadViewIfRequired] (in AppKit) 4 -[NSViewController view] (in AppKit) 5 -[DVTViewController view] (in DVTViewControllerKit) 6 -[IDEDistributionAssistantWindowController setDistributionStepViewController:] (in IDEKit) 7 -[NSObject(NSKeyValueObservingPrivate) _changeValueForKeys:count:maybeOldValuesDict:maybeNewValuesDict:usingBlock:] (in Foundation) 8 -[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:key:key:usingBlock:] (in Foundation) 9 _NSSetObjectValueAndNotify (in Foundation) 10 -[IDEDistributionAssistantWindowController next:] (in IDEKit) 11 -[IDEDistributionPackagingStepViewController _pipelineSucceeded] (in IDEKit) 12 __58-[IDEDistributionPackagingStepViewController _runPipeline]_block_invoke.70 (in IDEKit) 13 __DVT_CALLING_CLIENT_BLOCK__ (in DVTFoundation) 14 ___DVTAsyncPerformBlockOnMainRunLoop_block_invoke (in DVTFoundation) 15 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ (in CoreFoundation) 16 __CFRunLoopDoBlocks (in CoreFoundation) 17 __CFRunLoopRun (in CoreFoundation) 18 CFRunLoopRunSpecific (in CoreFoundation) 19 RunCurrentEventLoopInMode (in HIToolbox) 20 ReceiveNextEventCommon (in HIToolbox) 21 _BlockUntilNextEventMatchingListInModeWithFilter (in HIToolbox) 22 _DPSNextEvent (in AppKit) 23 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] (in AppKit) 24 -[DVTApplication nextEventMatchingMask:untilDate:inMode:dequeue:] (in DVTKit) 25 -[NSApplication run] (in AppKit) 26 -[DVTApplication run] (in DVTKit) 27 NSApplicationMain (in AppKit) 28 start (in libdyld.dylib) 产品构建版本: 13A1030d 未捕获异常 (NSInvalidArgumentException): *-[__NSCFNumber dvt_isNonEmpty]: 未识别的选择器发送到实例 0xad7b3702d3d226f1* 用户信息: (null) 打开的文件描述符: 54/9472 提示: 0: 调用以下代码提供的block: 0 DVTDispatchAsync (in DVTFoundation) 1 -[IDEDistributionSummaryStepViewController viewDidLoad] (in IDEKit) 2 -[NSViewController _sendViewDidLoad] (in AppKit) 3 -[NSViewController _loadViewIfRequired] (in AppKit) 4 -[NSViewController view] (in AppKit) 5 -[DVTViewController view] (in DVTViewControllerKit) 6 -[IDEDistributionAssistantWindowController setDistributionStepViewController:] (in IDEKit) 7 -[NSObject(NSKeyValueObservingPrivate) _changeValueForKeys:count:maybeOldValuesDict:maybeNewValuesDict:usingBlock:] (in Foundation) 8 -[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:key:key:usingBlock:] (in Foundation) 9 _NSSetObjectValueAndNotify (in Foundation)
问题原因与解决方案
核心问题是Xcode 13.x的DVT框架和Charts 3.3.0版本存在分类方法命名冲突:Xcode内置的DVT框架存在dvt_isNonEmpty分类方法,而Charts 3.3.0也为NSNumber添加了同名分类方法,Xcode分发时调用该方法触发了运行时冲突,直接导致崩溃。
可选择以下任意一种方案解决:
- 升级Charts到4.0及以上版本,官方已在后续版本修复了该命名冲突问题
- 暂时无法升级Charts的情况下,使用命令行工具跳过Xcode UI流程导出ipa:
xcodebuild -exportArchive -archivePath 你的归档文件路径.xcarchive -exportPath 导出路径 -exportOptionsPlist 导出配置.plist
- 临时使用Xcode 12.3版本完成分发操作
内容的提问来源于stack exchange,提问作者Steven Gardner
相关产品推荐
相关产品推荐

