You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Xcode 13后SwiftUI生命周期项目出现编译错误如何解决

问题解决方案

第一步:解决文件不可编辑问题

这些报错文件属于你通过包管理工具引入的第三方依赖,不属于项目本地源码,因此无法直接在Xcode中修改,按依赖类型处理即可:

  • 如果是CocoaPods引入:优先将对应依赖升级到已兼容Xcode13的正式版本;如果依赖不再维护,可以fork原仓库修改后在Podfile中指向你的fork地址,或使用post_install钩子在依赖安装时自动注入修改代码
  • 如果是SPM/Carthage引入:同样优先升级依赖到官方兼容Xcode13的版本,或修改依赖源为你调整后的兼容分支

第二步:修复Missing argument for parameter 'rootView' in call报错

Xcode13升级后,SwiftUI的UIHostingController移除了无参数默认构造器,必须显式传入rootView参数,修改逻辑如下:

  1. 在_AppKitOrUIKitViewControllerLifecycleEventView结构体中新增存储属性接收rootView:
let rootView: Content
  1. 补充结构体的自定义构造方法,接收外部传入的Content实例
  2. 修改makeUIViewController方法中的初始化代码:
func makeUIViewController(context: Context) -> UIViewControllerType {
    UIViewControllerType(rootView: rootView)
}

第三步:修复Contextual closure type '(type1,type2) -> RowContent' expects 2 arguments, but 1 was used in closure body报错

Xcode13中SwiftUI原生List的多选初始化方法签名发生变更,对应的rowContent闭包现在默认传入2个参数,你只需显式忽略第二个未使用的参数即可,两处报错的初始化代码修改如下:
第一处:

self.init(data, selection: selection, rowContent: { element, _ in 
    rowContent(element, selection.wrappedValue.contains(element.id))
})

第二处:

self.init(data, selection: selection, rowContent: { element, _ in 
    rowContent(element, selection.wrappedValue.contains(element))
})

第四步:修复Command CompileSwift failed with a nonzero exit code报错

该报错属于前面语法错误引发的连锁编译失败,完成上述修改后执行以下操作即可:

  • 按Shift + Command + K清空Xcode构建缓存
  • 手动删除~/Library/Developer/Xcode/DerivedData路径下的对应项目缓存文件夹
  • 重启Xcode后重新编译项目

内容的提问来源于stack exchange,提问作者nickcoding2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:06:03