个人知识分享

主要用于分享本人在学习、工作中积累的知识与经验,记录个人学习心得及技术笔记

最新文章

iOS 开发中 SwiftUI 与 UIKit 的混合使用实践

在实际项目中,SwiftUI 和 UIKit 往往需要共存。本文总结了在项目开发中如何优雅地将两者结合,包括 UIViewRepresentable 的使用技巧、数据传递方式以及常见坑点。

在实际项目中,SwiftUI 和 UIKit 往往需要共存。本文总结了在项目开发中如何优雅地将两者结合,包括 UIViewRepresentable 的使用技巧、数据传递方式以及常见坑点。

UIViewRepresentable 是 SwiftUI 提供的协议,允许我们将 UIKit 视图嵌入 SwiftUI 层级中。实现时需要注意 makeUIView 和 updateUIView 的职责划分:前者只负责创建,后者负责状态同步。

数据传递方面,推荐使用 Coordinator 模式处理 UIKit 的 delegate 回调,通过 @Binding 将数据回传给 SwiftUI。避免在 updateUIView 中做重复配置,可以通过比较新旧值来优化性能。

常见坑点包括:布局约束冲突、手势识别冲突、以及生命周期不一致导致的内存泄漏。建议在 dismantleUIView 中做好清理工作。

收起 ▲

StoreKit 2 自动续期订阅接入全流程

详细记录 StoreKit 2 自动续期订阅的接入流程,包括商品配置、购买实现、服务端验证、恢复购买以及订阅状态管理等关键环节。

详细记录 StoreKit 2 自动续期订阅的接入流程,包括商品配置、购买实现、服务端验证、恢复购买以及订阅状态管理等关键环节。

商品配置:在 App Store Connect 中创建订阅群组和订阅商品,设置价格、时长等信息。注意订阅群组内的升降级关系会影响用户的订阅体验。

购买实现:StoreKit 2 使用 async/await 语法,通过 Product.purchase() 发起购买。需要处理 .success、.userCancelled 和 .pending 三种结果,并在 success 中验证 Transaction 的 JWS 签名。

服务端验证:将 Transaction 的 originalID 和 JWS 发送到服务端,服务端通过 App Store Server API 验证订阅状态。建议使用 App Store Server Notifications V2 实现实时状态同步。

恢复购买:调用 AppStore.sync() 刷新用户的交易记录,遍历 Transaction.currentEntitlements 收集有效凭证并上传服务端同步。

收起 ▲

CocoaPods 在 Xcode 26 中的兼容性问题与解决方案

Xcode 26 带来了一些构建系统变化,导致部分 CocoaPods 项目出现链接错误。本文记录了遇到的问题及对应的 workaround。

Xcode 26 带来了一些构建系统变化,导致部分 CocoaPods 项目出现链接错误。本文记录了遇到的问题及对应的 workaround。

主要问题:当项目名称包含中文字符时,CocoaPods 生成的 umbrella framework 的 PRODUCT_NAME 会包含中文,导致链接器找不到对应的 .framework 文件。

解决方案:在 Podfile 的 post_install 钩子中,遍历所有 target,将包含中文的 PRODUCT_NAME 替换为纯 ASCII 名称。这样链接器就能正确找到 framework。

另外还需注意 ENABLE_USER_SCRIPT_SANDBOXING 设置,CocoaPods 的脚本需要关闭沙箱才能正常运行。每次执行 pod install 后需确认该设置未被重置。

收起 ▲

Git 工作流最佳实践:从个人项目到团队协作

总结个人在使用 Git 过程中积累的经验,包括分支管理策略、Commit 规范、Code Review 流程,以及如何避免常见的协作冲突。

总结个人在使用 Git 过程中积累的经验,包括分支管理策略、Commit 规范、Code Review 流程,以及如何避免常见的协作冲突。

分支管理:推荐 Git Flow 或简化版的 GitHub Flow。个人项目可以直接在 main 分支开发,团队项目建议 feature 分支 + PR 合并的模式。

Commit 规范:采用 Conventional Commits 格式,如 feat:、fix:、docs: 等前缀。保持每个 commit 原子性,一个 commit 只做一件事,便于回溯和 cherry-pick。

Code Review:关注代码逻辑正确性、边界条件处理、命名可读性。避免在 review 中纠结代码风格问题,这些应该交给 linter 自动处理。

冲突避免:及时 rebase 主分支、避免长期未合并的分支、团队内约定文件修改范围,都能有效减少冲突发生。

收起 ▲

Python 数据处理常用技巧备忘录

记录日常工作中常用的 Python 数据处理方法,涵盖 Pandas 数据清洗、NumPy 数组操作、文件批量处理等实用技巧。

记录日常工作中常用的 Python 数据处理方法,涵盖 Pandas 数据清洗、NumPy 数组操作、文件批量处理等实用技巧。

Pandas 数据清洗:使用 dropna() 处理缺失值,apply() 进行列变换,groupby() 实现分组聚合。处理大文件时用 chunksize 参数分块读取,避免内存溢出。

NumPy 数组操作:掌握广播机制可以大幅简化代码。向量化操作比 for 循环快几个数量级,尽量避免逐元素遍历。

文件批量处理:使用 pathlib 模块管理文件路径,比 os.path 更直观。配合 glob 模式匹配,可以方便地批量处理特定格式的文件。

实用技巧:利用 tqdm 显示进度条、使用 joblib 进行并行处理、用 pickle 缓存中间结果加速重复运算。

收起 ▲

关于本站

欢迎来到我的个人知识分享站。

本站主要用于分享我在学习和工作中积累的知识与经验,记录个人学习心得及技术笔记。内容涵盖移动端开发、后端技术、工程化实践等方向。

希望这些记录不仅能帮助自己回顾与整理,也能对有同样需求的朋友提供一些参考。

联系方式