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

130 lines
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 的引用
- 禁用字符串目录生成符号
## 修复后的配置
### 主应用目标
```swift
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
```
### 测试目标
```swift
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 语法