Xcode 14 Beta中SwiftUI的.searchable()修饰符在旧项目输入文本自动消失
旧项目SwiftUI .searchable()输入异常的排查方案
十有八九是旧项目的配置与Xcode14 Beta的SwiftUI 4.0不兼容导致的,毕竟相同代码在新项目中能正常运行。下面是几个重点排查方向:
1. 部署目标版本不匹配
旧项目由Xcode11创建,初始部署版本可能低于iOS/iPadOS 16——你使用的NavigationStack和新版.searchable()都是SwiftUI 4.0的特性,要求系统版本≥16才能正常工作。Xcode Beta对低版本部署目标的兼容处理容易出现bug,进而导致输入字符自动被清除。
排查步骤:
- 选中项目target,进入「General」标签页
- 查看「Deployment Info」中的系统版本,修改为iOS 16.0或更高
- 同步检查
Info.plist里的MinimumOSVersion值是否与上述设置一致
2. Swift编译配置存在遗留
旧项目可能保留了Xcode11时期的Swift编译设置,与Xcode14的Swift 5.6/5.7版本存在冲突:
- 进入「Build Settings」搜索「Swift Language Version」,确保设置为Swift 5.6及以上
- 查看「Other Swift Flags」中是否存在旧版本标记(如
-swift-version 5.1),删除这类无关标记
3. Info.plist缺失必要配置
新项目默认会包含SwiftUI 4.0所需的配置项,旧项目可能存在遗漏:
- 打开
Info.plist,检查是否有NSUserActivityTypes配置,或是iPadOS项目的「Supports multiple windows」是否开启——部分SwiftUI导航组件依赖这些配置才能正常运行 - 可将新项目
Info.plist中的关键配置项同步到旧项目中,对比测试排查问题
4. 清理项目缓存
Xcode Beta版本的缓存经常会引发奇怪的兼容性问题:
- 按下
Command+Shift+K清理项目缓存,再按Command+Option+Shift+K清理构建文件夹 - 关闭Xcode,删除项目对应的
DerivedData文件夹(路径:~/Library/Developer/Xcode/DerivedData/中对应项目的文件夹) - 重启Xcode后重新构建运行
复现问题用于Apple反馈的技巧
如果需要向Apple提交反馈,可尝试以下操作强制复现:
- 先将旧项目的部署目标改回低版本(如iOS 15),运行后再改回iOS 16,重复操作看是否能触发异常
- 将旧项目的
Info.plist和Build Settings配置逐步复制到新项目中,逐个排查是哪项配置导致的问题
内容的提问来源于stack exchange,提问作者AlbertUI
相关产品推荐
相关产品推荐

