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.
MyQRCode/XCODE_16_COMPATIBILITY_FIX.md

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使用真机调试

  • 跳过模拟器,直接在真机上运行
  • 避免模拟器运行时版本问题

验证步骤

  1. 在 Xcode 16 中打开项目
  2. 清理构建文件夹 (Product → Clean Build Folder)
  3. 选择真机作为运行目标
  4. 重新构建项目

注意事项

  • 项目现在最低支持 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 本地包 - 需要确认兼容性

后续建议

  1. 考虑降级到 Xcode 15.4 进行开发
  2. 定期检查 Xcode 16 的更新
  3. 在开发新功能时考虑 Xcode 16 的兼容性
  4. 使用条件编译来处理不同 iOS 版本的差异
  5. 建立 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 语法