You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.7 KiB
3.7 KiB
Xcode 16 兼容性修复说明
问题分析
项目在 Xcode 26 中能正常运行,但在 Xcode 16 中无法运行,主要原因是:
1. iOS 部署目标不一致
- 项目配置中混合使用了 iOS 26.0 和 15.6 作为部署目标
- Xcode 16 不支持 iOS 26.0 作为部署目标
2. Swift 并发特性不兼容
SWIFT_APPROACHABLE_CONCURRENCY = YES
- Xcode 16 不支持SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor
- Xcode 16 不支持SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES
- Xcode 16 不支持
3. 资源目录编译问题(Xcode 16 已知问题)
- 模拟器运行时版本与 SDK 版本不匹配
- 错误:
No simulator runtime version from ["21F79", "23A5297i"] available to use with iphonesimulator SDK version 22F76
已修复内容
1. 统一部署目标
- 将所有目标的
IPHONEOS_DEPLOYMENT_TARGET
设置为15.6
- 包括主应用、测试目标和 UI 测试目标
2. 移除不兼容的 Swift 特性
- 移除
SWIFT_APPROACHABLE_CONCURRENCY
- 移除
SWIFT_DEFAULT_ACTOR_ISOLATION
- 移除
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY
3. 优化资源目录配置
- 移除 App Icon 和 Accent Color 的引用
- 禁用字符串目录生成符号
修复后的配置
主应用目标
IPHONEOS_DEPLOYMENT_TARGET = 15.6
SWIFT_EMIT_LOC_STRINGS = YES
SWIFT_VERSION = 5.0
ASSETCATALOG_COMPILER_APPICON_NAME = ""
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = ""
STRING_CATALOG_GENERATE_SYMBOLS = NO
测试目标
IPHONEOS_DEPLOYMENT_TARGET = 15.6
SWIFT_EMIT_LOC_STRINGS = NO
SWIFT_VERSION = 5.0
当前状态
✅ 已修复:
- iOS 部署目标统一为 15.6
- Swift 并发特性已移除
- 项目配置已优化
❌ 仍需解决:
- 资源目录编译问题(Xcode 16 已知问题)
解决方案
方案 1:使用 Xcode 15.4 或更早版本
- 这是最直接的解决方案
- 避免 Xcode 16 的资源目录编译问题
方案 2:等待 Xcode 16 更新
- Apple 可能会在后续版本中修复这个问题
- 关注 Xcode 16 的更新日志
方案 3:临时移除资源目录
- 将
Assets.xcassets
从项目中移除 - 在代码中直接使用图片资源
- 注意:这会影响应用的视觉效果
方案 4:使用真机调试
- 跳过模拟器,直接在真机上运行
- 避免模拟器运行时版本问题
验证步骤
- 在 Xcode 16 中打开项目
- 清理构建文件夹 (Product → Clean Build Folder)
- 选择真机作为运行目标
- 重新构建项目
注意事项
- 项目现在最低支持 iOS 15.6
- 所有 SwiftUI 功能在 iOS 15.6+ 上正常工作
- 如果遇到其他编译错误,可能需要进一步调整代码
- 资源目录问题可能需要等待 Apple 修复
依赖包兼容性
- QRCode 包版本 27.11.0 - 兼容 iOS 15.6+
- Facebook iOS SDK 版本 18.0.0 - 兼容 iOS 15.6+
- VasKit 本地包 - 需要确认兼容性
后续建议
- 考虑降级到 Xcode 15.4 进行开发
- 定期检查 Xcode 16 的更新
- 在开发新功能时考虑 Xcode 16 的兼容性
- 使用条件编译来处理不同 iOS 版本的差异
- 建立 CI/CD 流程,在多个 Xcode 版本上测试
技术细节
模拟器运行时版本问题
Xcode 16 SDK 版本: 22F76
可用模拟器运行时: ["21F79", "23A5297i"]
问题: 版本不匹配导致资源目录编译失败
已移除的 Swift 特性
SWIFT_APPROACHABLE_CONCURRENCY
- iOS 17+ 特性SWIFT_DEFAULT_ACTOR_ISOLATION
- iOS 17+ 特性SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY
- 实验性特性
保留的兼容特性
@StateObject
- iOS 14+ 支持@MainActor
- iOS 14+ 支持SWIFT_EMIT_LOC_STRINGS
- 本地化支持SWIFT_VERSION = 5.0
- Swift 5.0 语法