ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Eureka 5.5.0 版本演进史:从 Swift 3 迁移到 Apple 隐私合规的 iOS 表单框架 CHANGELOG 全解析

Eureka 5.5.0 版本演进史:从 Swift 3 迁移到 Apple 隐私合规的 iOS 表单框架 CHANGELOG 全解析 Eureka 5.5.0 版本演进史从 Swift 3 迁移到 Apple 隐私合规的 iOS 表单框架 CHANGELOG 全解析【免费下载链接】EurekaElegant iOS form builder in Swift项目地址: https://gitcode.com/gh_mirrors/eur/EurekaEureka 是一款基于 Swift 的优雅 iOS 表单构建框架其 CHANGELOG.md 完整记录了从 2015 年 1.0.0 首发到 5.5.0 的每一个里程碑既有 Swift 3/4/5 大版本迁移与 API 重命名配合 Eureka 2.0 Migration Guide也有验证系统、Swipe Actions、Multivalued Sections、Result Builders 等核心能力的引入更包含 Xcode 13、iOS 14、M1 模拟器等现代开发环境的兼容性修复。读完本文你将掌握 Eureka 各版本的能力边界、关键 API 的演变脉络以及如何依据 CHANGELOG 判断某个特性在当前仓库中的落地位置。一、版本总览从 1.0.0 到 5.5.0 的演进主线当前仓库以 Eureka.podspec 声明的版本号5.5.0为最新稳定版s.version 5.5.0并满足swift-tools-version:5.0见 Package.swift。CHANGELOG 记录了 5 个大版本的完整演进大版本核心主题里程碑要点1.x表单框架成型PickerRow、StepperRow、PostalAddressRow、List Sections、键盘导航2.0Swift 3 内置验证全面适配 Swift API Design Guidelines引入 Rules / ValidationOptions / Swipe Actions3.0–3.1稳定性与验证增强RuleEqualsToRow、精确长度验证、按需验证、PickerInputRow4.0–4.3Swift 4 现代化Swift Package Manager、暗黑模式、Xcode 10/11/12 兼容、Multivalued 增强5.x隐私与工具链适配PrivacyInfo 文件、Xcode 13 / M1 模拟器 / Mac Catalyst 兼容、键盘与滚动优化从发布节奏看CHANGELOG 还透露了支持范围的变化2.0.0 要求 Xcode 8 与 Swift 3、最低 iOS 8.05.0.0 将最低版本提高到 iOS 9.3当前仓库的 Package.swift 声明platforms: [.iOS(.v9)]Eureka.podspec 同样声明s.ios.deployment_target 9.0即现版本最低支持 iOS 9。二、2.0 大版本Swift 3 迁移与验证体系诞生2.1 Swift 3 API 重命名对照表Eureka 2.0.0 是分水岭版本它彻底拥抱 Swift 3遵循新版 API Design Guidelines大量方法被重命名。官方在 Eureka 2.0 Migration Guide 中给出了新旧 API 对照表CHANGELOG 则指出大多数改动 Xcode 会自动建议修复。核心对照如下旧 API新 APIfunc rowByTagT: Equatable(_: String) - RowOfT?func rowByT: Equatable(tag: String) - RowOfT?func rowByTagRow: RowType(_: String) - Row?func rowByRow: RowType(tag: String) - Row?func sectionByTag(_: String) - Section?func sectionBy(tag: String) - Section?func rowValueHasBeenChanged(_:oldValue:newValue:)func valueHasBeenChanged(for:oldValue:newValue:)public final func indexPath() - IndexPath?public final var indexPath: IndexPath?func prepareForSegue(_ segue: UIStoryboardSegue)func prepare(for segue: UIStoryboardSegue)func presentViewController(_:row:presentingViewController:)func present(_:row:presentingViewController:)func createController() - VCType?func makeController() - VCType?以当前源码为例新版rowBy(tag:)就落地在 Form.swift 中成为读取行值的标准入口见下文三、核心能力。2.2 2.0 的删除与新增被删除的 APIPostalAddressRow与ImageRow被移出主仓库转入 EurekaCommunity 社区组织Row.highlightCell()、Row.unhighlightCell()、Cell.highlight()、Cell.unhighlight()、Cell.didSelect()被移除改用row.isHighlighted属性在 cell update 时判断高亮状态。新增的能力行与表单的validate()、add(rule:)、remove(ruleWithIdentifier:)、RuleSetT、ValidationOptions、RuleType协议、ValidationError类型以及onCellHighlightChanged/onRowValidationChanged回调。这套验证体系至今仍是核心ValidationError、RuleType、ValidationOptions、RuleSet的完整定义都保留在 Validation.swift 中。三、核心能力速查验证、Swipe 与 MultivaluedCHANGELOG 反复提及的三项核心能力在 README.md 中有完整用法在源码中有确切实现是理解 Eureka 技术架构的关键。3.1 内置验证规则ValidationsEureka 2.0 引入内置验证后CHANGELOG 在 3.0 继续补齐RuleEqualsToRow、精确长度验证5.0.1 则修正了RuleMinLength等规则对 nil 与空字符串的处理。当前仓库 Source/Validations 目录下共有 9 个规则文件规则文件说明RuleRequired.swift必填RuleEmail.swift邮箱格式RuleURL.swiftURL 格式4.1.0 修复正则以支持 query 与 location 参数RuleLength.swift最小/最大/精确长度RuleRange.swift数值范围GreaterThan 等RuleRegExp.swift正则3.0 起支持允许空值且类访问级别为 openRuleEqualsToRow.swift与其他行值相等3.0 新增RuleClosure.swift自定义闭包规则RuleEqualsToRow.swift参见上行通过add(rule:)挂载规则通过validationOptions决定求值时机。ValidationOptions在 Validation.swift 中被定义为 OptionSet四个取值均可独立或组合使用.validatesOnDemand1 0手动调用validate()时求值.validatesOnChange1 1行值变化即求值.validatesOnBlur1 2默认值失去焦点时求值.validatesOnChangeAfterBlurred1 3失焦后值变化才求值.validatesAlways[.validatesOnChange, .validatesOnBlur]的组合便捷值。验证错误的承载结构ValidationError仅含msg: String由RuleType.isValid(value:)返回这与 Validation.swift 的定义一一对应。3.2 Swipe Actions滑动手势操作4.1.0 引入 Swipe Actions 后5.2.0 修复了 iOS 13 下 destructive 滑动删除不再自动移除行的问题需要 completion handler 中自行移除。滑动操作与表单编辑模式互斥——Swipe Actions 要求tableView.isEditing false而 MultivaluedSection 会自动开启编辑模式两者并存时需手动设置isEditing。核心实现位于 SwipeActions.swiftSwipeAction支持style.destructive/.normal、title、image、actionBackgroundColor其中 iOS 11 以上映射为UIContextualActioniOS 13 起由框架负责在 completion 后移除行。3.3 Multivalued Sections多值分区Multivalued 能力在 3.1 修复了 ImageRow 图片不显示的问题5.2.0 新增GenericMultivaluedSection以支持自定义添加按钮类型。选项集合MultivaluedOptions定义在 Section.swift.Insert、.Delete、.Reorder、.None可自由组合GenericMultivaluedSectionAddButtonTypeSection.swift允许用任意RowType作为添加按钮例如用LabelRow替换默认的ButtonRow。四、5.x 时代隐私合规与工具链适配5.x 系列的主题是适配现代 Apple 生态各修复点几乎都可以在当前仓库中找到对应文件版本修复/特性仓库落地证据5.5.0创建 PrivacyInfo 文件#2255PrivacyInfo.xcprivacy 声明仅收集App Functionality用途、不跟踪、不关联的数据类型5.4.0重命名与私有 ObjC 方法冲突的方法名#2231消除 App Store 上传警告5.3.6修复键盘 done 按钮问题#2213对应 NavigationAccessoryView.swift 键盘附件视图逻辑5.3.5Xcode 13 编译修复、CI 迁移至 GitHub Actions、外部键盘 Tab 键崩溃修复Example.xcodeproj / Eureka.xcodeproj 工程配置5.3.4中文输入问题、邮箱用户名允许特殊字符、SliderRow 渲染修复RuleEmail.swift 正则放宽、SliderRow.swift5.3.3键盘出现时的 ScrollPosition 行为可配置、移除 EXCLUDED_ARCHS 以支持 M1 模拟器、replace/removeAll方法replaceSubrange与removeAll实现在 Form.swift 与 Section.swift5.3.2tableViewStyle公开、修复 CountDown 崩溃、Carthage Xcode 12 构建FormViewController.swift 中的表格样式属性5.3.1Mac Catalyst 构建修复、datePickerStyle修复、PasswordRow 字体调整DateFieldRow.swift5.2.1废弃tableView:editActionsForRowAt、iOS 13.4 崩溃修复对应 Swipe Actions 体系5.2.0Swift Package Manager 支持、GenericMultivaluedSection、修复引用循环、允许 section header/footer 为 nilPackage.swift 声明swift-tools-version:5.0与platforms: [.iOS(.v9)]5.1.0Xcode 11 / iOS 13 支持、暗黑模式Example/Controllers 示例工程5.0.xquietly参数非 UI 验证、验证规则对 nil/空串放行Validation.swift 相关求值路径4.1 从 CHANGELOG 到源码的追溯方法以 5.3.3 的Add replace method for all sections为例CHANGELOG 只给出一行描述但在源码中可定位到 Section.swift 的replaceSubrange(_:with:)与 Form.swift 的replaceSubrangeInAllSections印证该能力同时覆盖了 Section 与 Form 两个层级。类似的Addinsert(row: after:)4.3.0与isExpanded/isCollapsed3.0也分别能在 Section.swift 与 InlineRowType.swift 中找到对应实现。五、1.x 时代沉淀的经典能力虽然 1.x 已是历史版本但 CHANGELOG 记录的能力大多沿袭至今且仍在 Source/Rows 目录中PickerRow / PickerInlineRow1.2.04.2.0 扩展为 2/3 组件→ PickerRow.swift、PickerInlineRow.swiftStepperRow1.5.0→ StepperRow.swift3.0 起其值展示统一走displayValueForList SectionsSelectableSection1.3.0→ SelectableSection.swift支持单选/多选与分组3.0 修复了禁用行仍可被选中的问题键盘 Next 按钮1.3.0→ NavigationAccessoryView.swift1.6.0 起inputAccessoryViewForRow可从 FormViewController 中重写TextAreaRow 自动高度1.6.0→ TextAreaRow.swift4.2.0 又增加了只读readOnly特性。5.1 2.0 迁移中的自定义 Row 写法变化CHANGELOG 2.0.0 提到自定义 Row 的泛型写法发生变化官方迁移文档给出了前后对照// 2.0 之前显式声明 Value 类型 public final class WeekDayRow: RowSetWeekDay, WeekDayCell, RowType // 2.0 之后Value 类型由 Cell 推断 public final class WeekDayRow: RowWeekDayCell, RowType这一改动与Row 不再直接指定值类型、由 Cell 推断的设计一致迁移文档还提醒SelectorRow从 1.4.1 起要求泛型包含 Cell例如SelectorRowCLLocation, MapViewController, PushSelectorCellCLLocation。六、升级与维护建议API 命名以当前版本为准即使看到旧教程中的rowByTag/prepareForSegue也应替换为 Form.swift 中现行的rowBy(tag:)/prepare(for:)2.0 迁移文档中罗列的重命名清单Eureka 2.0 Migration Guide至今仍有参考价值。Swift 版本与部署目标当前仓库要求 Swift 5swift_version 5.0见 Eureka.podspec、iOS 9Package.swift。验证行为差异若从 5.0 之前升级注意RuleMinLength等规则对 nil / 空字符串的判定在 5.0.1 已放宽现有表单的校验结果可能随之变化建议结合validationOptionsValidation.swift重新审视各行的求值时机。滑动与编辑模式冲突MultivaluedSection 与 Swipe Actions 并存时tableView.isEditing需按业务手动控制SwipeActions.swift。七、结语Eureka 的 CHANGELOG 本身就是一部浓缩的 iOS 表单框架发展史从 Swift 3 的 API 大清洗、内置验证体系落地到 Swift Package Manager、暗黑模式、隐私合规与 M1/Xcode 13 兼容每一次版本跃迁都对应着明确的源码变更。对开发者而言CHANGELOG 不仅是升级手册更是定位源码能力的索引——当你在版本记录中看到某个特性或修复时沿着本文给出的文件路径就能在 Source 目录中直接找到它的实现与使用方式。【免费下载链接】EurekaElegant iOS form builder in Swift项目地址: https://gitcode.com/gh_mirrors/eur/Eureka创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进