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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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 语法