之前有个项目,在Xcode8.3上编译直接闪退,是编译器闪退了,一直没有找到原因,下面是Xcode错误报告,一直没有找到解决原因,开始以为是项目中用到了和系统冲突的类,因为我刚升级到Xcode8.3 , 之前在8.1上没有任何问题。
部分Xcode崩溃日志
Time Awake Since Boot: 3600 seconds
System Integrity Protection: enabled
Crashed Thread: 17 Dispatch queue: shared-compile-command-queue :: NSOperation 0x7fe3d4ac3210 (QOS: DEFAULT)
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Application Specific Information:
ProductBuildVersion: 8E3004b
ASSERTION FAILURE in /Library/Caches/com.apple.xbs/Sources/IDEFrameworks/IDEFrameworks-12175.1/IDEFoundation/Diagnostic/IDEDiagnosticActivityLogMessage.m:298
Details: (fixItString) should not be nil.
Object: <IDEDiagnosticFixItItem: 0x7fe3d47a4f30>
Method: -initWithFixItString:replacementLocation:
Thread: <NSThread: 0x7fe3d4815e80>{number = 47, name = (null)}
Hints:
Backtrace:
0 -[IDEAssertionHandler handleFailureInMethod:object:fileName:lineNumber:assertionSignature:messageFormat:arguments:] (in IDEKit)
1 _DVTAssertionHandler (in DVTFoundation)
2 _DVTAssertionFailureHandler (in DVTFoundation)
3 -[IDEDiagnosticFixItItem initWithFixItString:replacementLocation:] (in IDEFoundation)
4 -[IDEClangDiagnosticActivityLogMessage initWithDiagnostic:timestamp:pathMap:workingDirectory:documentURL:] (in IDEFoundation)
5 -[IDEClangDiagnosticActivityLogMessage initWithDiagnostic:timestamp:pathMap:workingDirectory:] (in IDEFoundation)
6 _XCMessageForDiagnostic (in DevToolsCore)
7 XCGenerateDiagnosticsFromFile (in DevToolsCore)
8 -[XCClangResultsPostprocessor generateDiagnosticsFromFile:logSectionRecorder:] (in DevToolsCore)
9 -[XCClangResultsPostprocessor postprocessResultsForCommandInvocation:] (in DevToolsCore)
10 -[XCWorkQueueCommandSubprocessInvocation handleEndOfOutput] (in DevToolsCore)
11 -[XCWorkQueueCommandLocalSubprocessInvocation handleEndOfOutput] (in DevToolsCore)
解决思路:
1.看报错信息中有提到 IDEDiagnosticActivityLogMessage.m 这个类,于是全局搜了一下,没有结果,是系统私有类。
2:google 百度搜了一下,有类似的内容,但是没有提到有用的解决方案。
3:考虑是项目中第三方引起的,第三方都是用cocoapods,于是一个一个的第三方移除,崩溃依旧 , 所以不是第三方库引起的。
就这样,一直没有找到解决方案,还好项目在Xcode8.1上没有问题,所以一直在想是不是Xcode本身的问题,因为项目在其他电脑上Xcode8.2或8.3以上都是在编译就会造成编译器闪退,
今天周末,想想得好好研究一下这个原因了,于是 思考在编译阶段就能造成闪退,并且和第三方库没有关系,那么有可能是项目的配置或者某个类的头文件里面有问题,于是首先想到了 PrefixHeader.h 文件,因为我的某些头文件声明就是放这里面的,于是去看了一下Build Settings里面pch配置。
.......果然发现了问题:
3682F837-4019-4C2D-8AFE-99324B39C930.png项目文件夹:Other 是大写的 , 在路径中写成了小写,(⊙﹏⊙) , 更改之后果然解决了问题。
C600196B-8C5A-4544-9146-0A21BC05DA96.png问题很简单,但是确困扰了几周,主要是在Xcode8.1运行没问题,但是在8.2以上运行就闪退 ,这点很大程度误导了我 , 一直以为是Xcode出了问题。现在依然不知道为啥在Xcode8.1上大小写没有影响呢?
网友评论