Swift通过SPM集成Firebase后出现"Access level on imports require '-enable-experimental-feature AccessLevelOnImport'"编译错误的求助
Swift通过SPM集成Firebase后出现"Access level on imports require '-enable-experimental-feature AccessLevelOnImport'"编译错误的求助
我之前也碰到过一模一样的问题,折腾了好一会儿才解决,给你几个亲测有效的方案试试:
1. 直接添加实验性编译标志
既然错误提示明确要求启用这个实验特性,那我们手动把标志加上就好,步骤很简单:
- 打开Xcode,选中项目导航栏最顶部的项目文件
- 切换到Build Settings标签,在搜索框输入Other Swift Flags
- 给项目本身以及所有关联的Target(包括测试Target)都添加这个编译标志:
-enable-experimental-feature AccessLevelOnImport
别漏了任何一个需要编译的Target,不然可能还会有残留的错误。
2. 彻底锁定Firebase到兼容版本并清理缓存
你试过降级到11.0.0,但可能SPM还是偷偷拉了新的依赖?可以试试更彻底的版本锁定:
- 进入Xcode的Package Dependencies界面,找到Firebase依赖
- 把版本选择从范围改成Exact Version,直接输入
11.0.0 - 执行
Product > Clean Build Folder(快捷键是Shift+Cmd+K)清空构建缓存 - 再通过
File > Packages > Reset Package Caches重置SPM的依赖缓存 - 最后重新Build项目,大概率能解决
3. 检查并强制指定依赖库版本
这个错误大概率是Firebase的依赖(比如GoogleUtilities)引入的,你可以手动锁定这个依赖的兼容版本:
- 在Package Dependencies里展开Firebase的依赖树,查看GoogleUtilities的版本
- 如果它的版本是11.x及以上,直接把GoogleUtilities也添加到你的Package依赖中,指定一个和Firebase 11.0.0兼容的版本(比如
7.11.0,这个是Firebase 11.0.0默认依赖的稳定版) - 这样能强制SPM拉取兼容的依赖,避免自动升级到带实验特性的版本
4. 彻底重置SPM依赖
如果上面的方法都没用,那就来个“一刀切”:
- 从Package Dependencies里移除所有和Firebase相关的依赖
- 清理Build Folder和Package Caches(步骤和上面一样)
- 重新添加Firebase,直接选择Exact Version 11.0.0,等依赖下载完成后再Build
补充一句:这个问题主要是Firebase 11.0.0之后的版本里,部分依赖库开始使用了Swift的实验性导入语法,而Xcode默认没有开启这个特性,所以才会触发错误。如果你不想用实验性标志,锁定到11.0.0这种稳定版本是更稳妥的选择。
内容来源于stack exchange
相关产品推荐
相关产品推荐

