Back to Easydict

Swift 迁移进度追踪

MIGRATION_PROGRESS.md

2.18.113.2 KB
Original Source

Swift 迁移进度追踪

📋 迁移政策

核心原则

  • ✅ 所有新功能使用 Swift/SwiftUI 实现
  • 绝对禁止添加新的 Objective-C 文件
  • 🔄 修改现有 Objective-C 代码前,必须先迁移到 Swift
  • ⚡ 重写 Objective-C 代码必须使用 Swift
  • 🚫 任何形式的 Objective-C 代码扩展都被禁止

强制要求

  • Swift/SwiftUI 是项目未来的唯一技术栈
  • Objective-C 代码仅允许 bug 修复
  • 所有贡献者必须遵守此政策
  • 违反此政策的 PR 将被拒绝

项目概述

Easydict 是一个 macOS 翻译和词典应用,正在进行从 Objective-C 到 Swift + SwiftUI 的逐步迁移。

✅ 已完成迁移

2024-2025 年迁移记录

翻译服务层 (Translation Services)

服务名称原文件名新文件名完成时间提交记录
Google 翻译EZGoogleTranslateGoogleService2024-12refactor(objc-to-swift): migrate EZGoogleTranslate to Swift
Bing 翻译EZBingServiceBingService2024-12refactor(objc-to-swift): migrate EZBingService to Swift
有道翻译EZYoudaoTranslateYoudaoService2024-12refactor(objc-to-swift): migrate EZYoudaoTranslate to Swift
NiuTrans 翻译EZNiuTransTranslateNiuTransService2024-12refactor(objc-to-swift): migrate EZNiuTransTranslate to Swift
DeepL 翻译EZDeepLTranslateDeepLService2024-12refactor(objc-to-swift): migrate EZDeepLTranslate to Swift
苹果词典EZAppleDictionaryAppleDictionary2025-01refactor(objc-to-swift): migrate EZAppleDictionary to Swift
百度翻译EZBaiduTranslateBaiduService2025-03refactor(objc-to-swift): migrate EZBaiduTranslate to Swift

核心基类 (Service Base)

名称原文件名新文件名完成时间提交记录
查询服务基类EZQueryServiceQueryService2025-03refactor(objc-to-swift): migrate EZQueryService to Swift

字符串处理层 (String Processing)

组件名称原文件名新文件名完成时间备注
文本分割NSString+EZSplitString+Split2025-01-29分割驼峰和下划线文本
输入文本处理NSString+EZHandleInputTextString+HandleInputText2025-01-29完整的输入文本处理功能
字符串便利NSString+EZConvenienceString+Convenience2025-02-17URL 编码、剪贴板、XML 转义、MD5 等

AI 服务层 (AI Services)

服务名称状态备注
OpenAIGPT-4 集成
DeepSeekDeepSeek API
GeminiGoogle Gemini
Ollama本地模型支持
Volcano火山翻译
月之暗面Kimi API
零一万物Yi API
智谱清言ChatGLM
通义千问阿里云大模型
腾讯混元腾讯大模型
百度文心百度大模型
Coze字节跳动 AI
阿里通义已完成
MiniMax海螺 AI

基础设施层 (Infrastructure)

组件名称原文件名新文件名状态
有序字典MMOrderedDictionaryMMOrderedDictionary
AppleScript-AppleScriptIntegration
文本选择AXUITextSelection
离线翻译-OfflineTranslation
SwiftPM-Package.swift
暗色模式DarkModeManager/NSObject+DarkMode/SingletonDarkModeManager.swift + Extensions
服务信息EZServiceInfoEZServiceInfo.swift
本地存储EZLocalStorageEZLocalStorage.swift
应用模型EZAppModelEZAppModel.swift
服务类型EZServiceTypesServiceTypes.swift

工具扩展层 (Utilities)

扩展名称原文件名新文件名状态
字符串布局-String+Layout
颜色扩展NSColor+...NSColor+...
LoggingEZLogEZLog.swift
Device InfoEZDeviceSystemInfoEZDeviceSystemInfo.swift

📊 迁移统计

  • 翻译服务: 6/13 已完成 (46%)
  • AI 服务: 14/14 已完成 (100%)
  • 基础设施: 10/10 已完成 (100%)
  • 工具扩展: 5/15 已完成 (33%)

✅ 已完成迁移

2025-01-29:NSString+EZHandleInputText

  • 目标: 成功创建 String+HandleInputText.swift
  • 状态: ✅ 完成
  • 实际时间: 1 天
  • 成果:
    • 创建了 String+Split.swift 依赖文件
    • 创建了 String+HandleInputText.swift 主要实现
    • 创建了 String+HandleInputTextTests.swift 完整测试
    • 更新了 bridging header 移除旧 import
    • 修复了 AppleDictionary.swift 中的调用
    • 修复了所有 SwiftLint 违规和编译错误
    • 通过了所有 SwiftLint 检查 (0 violations)

2025-01-30:DarkMode 模块重构

  • 目标: 使用 Swift 完全重写 DarkMode 模块
  • 状态: ✅ 完成
  • 实际时间: 1 天
  • 成果:
    • 创建了 DarkModeManager.swift 统一的暗色模式管理器
    • 创建了 DarkModeProtocol.swift 提供响应式暗色模式协议
    • 创建了 NSObject+DarkMode.swiftNSView+DarkMode.swift 扩展
    • 使用 Combine 替代 ReactiveObjC,移除额外依赖
    • 更新了 AppDelegate.mConfiguration.swift 的调用
    • 移除了 4 个 Objective-C 文件和整个 DarkMode 目录
    • 更新了 PrefixHeader.pch 移除旧导入
    • 更新了 MIGRATION_PROGRESS.md 记录迁移进度

2025-02-17:NSString+EZConvenience

  • 目标: 使用 Swift 重写 NSString+EZConvenience
  • 状态: ✅ 完成
  • 成果:
    • 新增 String+Convenience.swift,覆盖 URL 编码/解码、剪贴板操作、XML 转义、MD5、段落拆分等方法
    • 删除旧的 Objective-C 分类,更新 PCH、Bridging Header 和 Xcode 工程引用

2025-12-17:存储层重构

  • 目标: 迁移存储相关类到 Swift
  • 状态: ✅ 完成
  • 成果:
    • 迁移 EZServiceInfo 到 Swift,添加 Codable 支持
    • 迁移 EZLocalStorage 到 Swift,使用现代属性访问器
    • 保持 @objcMembers 注解以兼容 Objective-C 代码
    • 更新 bridging header 移除不再需要的导入

2025-12-17:应用模型迁移

  • 目标: 迁移 EZAppModel 到 Swift
  • 状态: ✅ 完成
  • 成果:
    • 从 objc/Legacy/ 迁移到 Swift/Model/
    • 添加全面的文档注释
    • 实现 NSSecureCoding 协议
    • 添加便捷的字典转换方法
    • 移除 MJExtension/KVC 依赖

2025-12-16:服务类型注册

  • 目标: 迁移 EZServiceTypes 到 Swift
  • 状态: ✅ 完成
  • 成果:
    • 使用 ServiceTypes.swift 替换 EZServiceTypes.h/.m
    • 保持 API 兼容性,使用 @objc 属性
    • 保留单例模式和所有公共方法
    • 更新代码库中的所有导入语句

2025-12-18:类名规范化

  • 目标: 重命名类以符合更清晰的命名约定
  • 状态: ✅ 完成
  • 成果:
    • 统一命名规范,提高代码可读性
    • 更新相关引用和文档

2025-12-17:DeepL API 清理

  • 目标: 移除未使用的 DeepL API 枚举和相关代码
  • 状态: ✅ 完成
  • 成果:
    • 删除 EZDeepLTranslationAPI 枚举
    • 清理冗余代码,简化架构

2025-12-20: EZQueryResult Migration

  • Goal: Migrate EZQueryResult and related word result models to Swift.
  • Status: ✅ Completed
  • Outcome:
    • Added Swift implementation in Swift/Service/Model/EZQueryResult.swift.
    • Removed Objective-C EZQueryResult.h/.m and updated ObjC headers to forward declarations.
    • Updated project references to use the Swift implementation.

2025-12-22: EZLog and EZDeviceSystemInfo Migration

  • Goal: Migrate EZLog and EZDeviceSystemInfo to Swift utilities.
  • Status: ✅ Completed
  • Outcome:
    • Added Swift/Utility/Logging/EZLog.swift and Swift/Utility/DeviceInfo/EZDeviceSystemInfo.swift.
    • Updated ObjC call sites to import Easydict-Swift.h.
    • Removed legacy ObjC sources from the build phase.

2026-01-06: EZDetectManager Migration

  • Goal: Migrate EZDetectManager to Swift for text detection and OCR functionality.
  • Status: ✅ Completed
  • Outcome:
    • Added Swift/Service/Model/DetectManager.swift with complete implementation.
    • Used @objc(EZDetectManager) and @objcMembers for Objective-C compatibility.
    • Added async/await versions of methods for Swift code.
    • Updated EZBaseQueryViewController.m to import Easydict-Swift.h.
    • Updated Easydict-Bridging-Header.h to comment out old Objective-C import.

📋 待迁移列表

⚠️ 重要提醒:以下所有 Objective-C 组件修改时必须先迁移到 Swift,禁止直接修改!

核心服务 (High Priority)

  1. EZDetectManager ✅ - 文本检测管理器
    • 位置: Swift/Service/Model/DetectManager.swift
    • 影响: 语言检测和 OCR 功能
    • 优先级: 高
    • ✅ 已完成迁移到 Swift
    • 状态: ✅ 完成
    • 实际时间: 2026-01-06
    • 成果:
      • 创建了 Swift/Service/Model/DetectManager.swift 完整的 Swift 实现
      • 使用 @objc(EZDetectManager)@objcMembers 保持 Objective-C 兼容性
      • 添加了 async/await 版本的方法支持 Swift 代码调用
      • 更新了 EZBaseQueryViewController.m 导入 Easydict-Swift.h
      • 更新了 Easydict-Bridging-Header.h 注释掉旧的 Objective-C 导入

应用架构 (Medium Priority)

  1. AppDelegate - 应用代理

    • 位置: objc/AppDelegate.h/.m
    • 影响: 应用生命周期管理
    • 优先级: 中高
    • ⚠️ 重写时必须使用 Swift
  2. EZWindowManager - 窗口管理器

    • 位置: objc/ViewController/Window/EZWindowManager.h/.m
    • 影响: 所有窗口功能
    • 优先级: 中高
    • ⚠️ 禁止修改,必须迁移到 Swift
  3. EZLocalStorage - 本地存储 ✅

    • 已于 2025-12-17 迁移到 Swift
    • 新位置: objc/ViewController/Storage/EZLocalStorage.swift

UI 和交互 (Medium Priority)

  1. EZBaseQueryViewController - 基础查询控制器
    • 位置: objc/ViewController/Window/BaseQueryWindow/EZBaseQueryViewController.m
    • 行数: ~1700 行
    • 影响: 核心用户界面
    • 优先级: 中
    • ⚠️ 禁止修改,必须迁移到 Swift

工具类 (Low Priority)

  1. NSString+EZChineseText - 中文文本处理
    • ⚠️ 禁止修改,必须迁移到 Swift
  2. NSString+EZUtils - 字符串工具
    • ⚠️ 禁止修改,必须迁移到 Swift
  3. NSString+EZSplit - 文本分割
    • ⚠️ 禁止修改,必须迁移到 Swift
  4. NSColor+MyColors - 颜色扩展
    • ⚠️ 重写时必须使用 Swift
  5. EZLanguageManager - 语言管理
    • ⚠️ 重写时必须使用 Swift
  6. EZEventMonitor - 事件监控
    • ⚠️ 重写时必须使用 Swift
  7. EZLog - 日志工具
    • ⚠️ 重写时必须使用 Swift
  8. DarkModeManager - 深色模式
    • ⚠️ 重写时必须使用 Swift
  9. MMLog - 日志框架
    • ⚠️ 重写时必须使用 Swift
  10. MMCrash - 崩溃处理
    • ⚠️ 重写时必须使用 Swift

🚀 迁移计划

🚨 重要约束:禁止添加新的 Objective-C 代码,所有重写必须使用 Swift

第一阶段:核心功能 (Q1 2025)

  • Apple Dictionary
  • EZQueryService (基类) - 已迁移至 Swift
  • EZBaiduTranslate - 已迁移至 Swift
  • EZDetectManager - 必须使用 Swift

第二阶段:应用架构 (Q2 2025)

  • EZLocalStorage - ✅ 已完成 (2025-12-17)
  • AppDelegate - 必须使用 Swift
  • EZWindowManager - 禁止修改,必须迁移到 Swift
  • EZLanguageManager - 必须使用 Swift

第三阶段:用户界面 (Q3 2025)

  • EZBaseQueryViewController - 禁止修改,必须迁移到 Swift
  • 其他 ViewController - 必须使用 Swift

第四阶段:工具和优化 (Q4 2025)

  • 所有 NSString 扩展 - 禁止修改,必须迁移到 Swift
  • 日志和监控 - 必须使用 Swift
  • 性能优化 - 必须使用 Swift
  • 完全移除 Objective-C

📈 质量保证

代码质量

  • ✅ SwiftLint 检查通过
  • ✅ 单元测试覆盖
  • ✅ 代码审查
  • ✅ 性能测试

功能验证

  • ✅ 所有原有功能保持不变
  • ✅ 新增功能符合设计
  • ✅ 兼容性测试
  • ✅ 用户反馈收集

🚨 Objective-C 代码冻结政策

  • 绝对禁止添加新的 Objective-C 文件
  • 🔍 代码审查:拒绝任何新的 Objective-C 代码
  • 🚫 Objective-C 代码仅允许 bug 修复
  • 📈 Swift/SwiftUI 作为未来的唯一技术栈
  • 🛡️ CI 检查:防止新的 .m/.h 文件提交

🎯 里程碑

  • 2024年12月: 完成主要翻译服务迁移
  • 2025年1月: 完成 Apple Dictionary 和 AI 服务
  • 2025年3月: 完成核心服务层
  • 2025年6月: 完成应用架构层
  • 2025年9月: 完成 UI 层
  • 2025年12月: 完全 Swift 化

🔗 相关资源


最后更新: 2025-12-22