求助:创建Objective-C版Notification Service Extension构建失败,Swift正常且报LLVM 9.0错误
解决Objective-C Notification Service Extension构建失败(LLVM 9.0错误:no such file or directory: '[-Wunknown-warning-option]')
这个问题我之前碰到过好几次,核心原因基本都是Objective-C扩展目标的编译警告参数配置出了问题——Swift目标因为默认配置更简洁,所以没触发这个错误。下面是一步步的排查和解决方法:
1. 定位到Extension目标的Build Settings
打开Xcode,在左侧项目导航栏里选中你的Objective-C版「Notification Service Extension」目标,然后切换到顶部的「Build Settings」标签(记得切换到「All」视图,别用「Basic」)。
2. 检查并修复错误的编译参数
在搜索框里输入「Other C Flags」和「Other Warning Flags」,分别查看这两个选项:
- 你大概率会看到
[-Wunknown-warning-option]这种带方括号的参数——这是格式错误!LLVM编译器不识别带方括号的参数,正确写法是-Wunknown-warning-option(直接去掉方括号)。 - 如果这个参数不是必须的,直接删掉即可;如果需要保留,修改成正确的单参数格式。
- 同时检查有没有其他从主工程继承来的、LLVM 9.0不支持的警告开关(比如高版本编译器才有的新警告参数),有就删掉或者替换成兼容的参数。
3. 阻断主工程参数的无效继承
有时候主工程的复杂编译参数会被Extension自动继承,但Objective-C Extension根本不需要这些配置:
- 点击「Other C Flags」和「Other Warning Flags」旁边的小箭头(显示「Inherited」的那个),勾选「Override」选项,清空里面的内容,只保留Extension必要的编译参数(通常默认空着就能正常构建)。
4. 核对编译器版本一致性
如果主工程用的是比LLVM 9.0更高的编译器版本,而Extension目标的编译器版本被单独设置成了LLVM 9.0,也会出现参数不兼容:
- 在Build Settings里搜索「Compiler for C/C++/Objective-C」,确保Extension目标的编译器版本和主工程一致(比如都选「Default Compiler (Apple Clang)」)。
5. 清理项目后重建
做完上面的修改后:
- 按下
Cmd+Shift+K清理项目缓存; - 再按下
Cmd+B重新构建Extension目标; - 如果还是报错,试试删除Derived Data:Xcode菜单 → Preferences → Locations → Derived Data,点击箭头打开文件夹,删除当前项目的Derived Data文件夹,再重新构建。
额外排查点:Pods配置影响
如果你的项目用了CocoaPods,检查Podfile里是否给Extension目标添加了不必要的依赖,或者Pod的配置里带了不兼容的编译参数。可以尝试在Podfile里给Extension目标单独设置编译参数,或者更新Pods到兼容LLVM 9.0的版本。
内容的提问来源于stack exchange,提问作者Albert
相关产品推荐
相关产品推荐

