乐于分享
好东西不私藏

挖到宝了!10 个 iOS 神器让我直呼"还能这么玩",第 7 个太野了!

挖到宝了!10 个 iOS 神器让我直呼"还能这么玩",第 7 个太野了!

这里每天分享一个 iOS 的新知识,快来关注我吧

前言

这周写 iOS 项目正好把数据库和日志模块重构了一轮,翻 GitHub 挖到几个压箱底的库和工具,整理出来给你们参考。

开发库推荐

GRDB.swift —— Swift 圈的 SQLite 之王

GitHub:groue/GRDB.swift[1]

一提到 iOS 本地数据库,大部分人条件反射就是 Realm、Core Data。但说真的,GRDB 是被严重低估的一个。我自己好几个项目都在用,那种"Swift 原生 API 用着爽,想写 SQL 也随时能写"的感觉,没别的库比得上。

它专门为 App 开发做的 SQLite 工具包,支持数据库观察、SQL 构建器、类型安全的记录映射,Combine 和 async/await 也都能配着用。举个例子:

// 定义一个 Record
struct Player: Codable, FetchableRecord, PersistableRecord {
    var idInt64
    var nameString
    var scoreInt
}
// 读取数据(类型推断自动到位,真的很爽)
let players = try await dbQueue.read { db in
    try Player.filter(Column("score"> 1000).fetchAll(db)
}
// 观察数据变化,UI 自动刷
let observation = ValueObservation.tracking { db in
    try Player.order(Column("score").desc).fetchAll(db)
}

如果本地数据结构稍微复杂点,又不想被 Core Data 那套 API 折磨,选它准没错。

Star 8.5k+,维护活跃,属于"用过就回不去"那种。

CocoaLumberjack —— 日志框架里的老前辈

GitHub:CocoaLumberjack/CocoaLumberjack[2]

这个就不用我多说了吧,iOS 圈子基本人手一份。快速、简单、灵活的日志框架,macOS、iOS、tvOS、watchOS、visionOS 全都支持。

printNSLog 一比,优势就出来了:异步写入不卡主线程、多输出目标(控制台、文件、你自己搞的都行)、日志分级、按天滚动文件……用起来大概长这个样子:

// 初始化
DDLog.add(DDOSLogger.sharedInstance) // 控制台
let fileLogger = DDFileLogger()
fileLogger.rollingFrequency = 60 * 60 * 24 // 每天滚一次
DDLog.add(fileLogger)
// 打日志
DDLogVerbose("详细日志")
DDLogInfo("普通信息")
DDLogWarn("警告")
DDLogError("错误日志")

只要项目稍微正经点,日志系统我都建议直接上它。特别是要收线上日志的场景,文件输出配着简直是标准动作。

Star 13.3k+,本周还在更,闭眼选就行

Amplitude-iOS —— 用户行为分析 SDK

GitHub:amplitude/Amplitude-iOS[3]

要做用户行为分析的话,Amplitude 是绕不开的一个选项。这是它家官方的 iOS/tvOS/macOS 原生 SDK,接入就几行代码的事。

比起自己搭一套埋点,Amplitude 好就好在开箱即用,后台那套可视化分析还挺能打。漏斗、留存、事件流啥的都不用自己写。

// 初始化
Amplitude.instance().initializeApiKey("YOUR_API_KEY")
// 埋点
Amplitude.instance().logEvent("Button Clicked", withEventProperties: [
    "button_name""checkout",
    "page""cart"
])
// 用户属性
let identify = AMPIdentify().set("plan", value: "premium" as NSObject)
Amplitude.instance().identify(identify)

中小团队想快速搭个数据分析体系,用它省事多了。

Star 300+,官方 SDK 星数不算高但很稳。不过要提醒一下:这个仓库最近 4 个月没新提交了,官方现在主推的是新一代 amplitude-swift。新项目直接上新的,老仓库更多是给已经集成过的人维护用。

TrustKit —— SSL Pinning 一把梭

GitHub:datatheorem/TrustKit[4]

做金融、支付类 App 的同学,对 SSL Pinning(证书固定)肯定不陌生,用来防中间人攻击的那套东西。自己撸这块逻辑真的很容易翻车,TrustKit 就是来帮你把这些脏活干了的。

iOS、macOS、tvOS、watchOS 都支持,配置也简单,一个字典就完事:

let trustKitConfig: [StringAny] = [
    kTSKSwizzleNetworkDelegates: false,
    kTSKPinnedDomains: [
        "api.example.com": [
            kTSKPublicKeyHashes: [
                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
                "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB="
            ],
            kTSKEnforcePinning: true
        ]
    ]
]
TrustKit.initSharedInstance(withConfiguration: trustKitConfig)

对安全要求高的项目——尤其是碰用户敏感数据的——直接用它就完了。

Star 2.1k+,维护活跃,本周还有更新。

iOS Snapshot Test Case —— UI 快照测试神器

GitHub:uber/ios-snapshot-test-case[5]

Uber 家的 UI 快照测试框架。做过 UI 回归测试的都知道,手动截图一张张比对简直是噩梦,这库就是来救命的。

原理挺朴素:第一次跑测试存一张参考图,之后每次都渲染当前 UI 去和参考图比,像素级有差异就 fail。

class MyViewTests: FBSnapshotTestCase {
    override func setUp() {
        super.setUp()
        // recordMode = true // 第一次跑打开这个,生成参考图
    }
    func testLoginView() {
        let view = LoginView()
        view.frame = CGRect(x: 0, y: 0, width: 375, height: 667)
        FBSnapshotVerifyView(view)
    }
}

组件库、设计系统类的项目特别适合,每次改动都能保证视觉不出岔子。

Star 1.8k+。不过得提一嘴,这仓库最近 8 个月没提交了,维护有点慢,Uber 内部估计换方案了。新项目慎选,老项目维护用还行。

开发工具推荐

SwiftLint —— Swift 代码规范的定海神针

GitHub:realm/SwiftLint[6]

这个工具,iOS/Swift 开发必备,没有之一。团队里代码风格不统一,简直是灾难现场,SwiftLint 就是那个让所有人老老实实听话的裁判。

基于 Swift AST 做静态分析,内置几百条规则,命名、行长度、强制解包警告、复杂结构检查全都覆盖了。塞进 Xcode 的 Build Phase,编译时自动跑:

# 安装
brew install swiftlint
# 项目根目录跑一下
swiftlint
# 能自动修的就修了
swiftlint --fix

再配一份 .swiftlint.yml,团队规范直接落地,新人来了照着改就完事。项目大小无所谓,都能用。

Star 19.6k+,本周还在更,Realm 官方出品,品质有保障。

vphone-cli —— Lakr233 出品的命令行小工具

GitHub:Lakr233/vphone-cli[7]

Lakr233 大佬这回又整活了。Swift 写的命令行工具,Apple 生态里挺有意思的一个项目。Lakr233 出品基本就等于质量保证,之前那些独立小工具都挺惊艳的。

具体功能就不剧透了,感兴趣直接去仓库看 README,作者的项目一向文档清晰、上手快。Swift 写 CLI 其实挺有搞头——性能好、类型安全,可读性甩 Shell 脚本几条街。

想学 Swift 命令行开发的、或者喜欢折腾工具链的,都可以看看。

Star 7.5k+,本周还在更,维护活跃。

LiveContainer —— 不安装就能跑 iOS 应用

GitHub:LiveContainer/LiveContainer[8]

这项目就有点意思了——不实际安装,直接跑 iOS 应用。听着像黑魔法,但它真做到了。原理是搞了个容器 App 来加载并运行别的 IPA,绕开系统的一些限制。

对开发者来说,最大用处是测试和调试,比如想快速试一下别人的 IPA、或者绕开企业证书那烦人的 7 天限制,都能派上用场。当然涉及签名、越狱环境什么的,具体用法得自己摸索。

搞逆向、做工具的、或者就是纯粹想折腾 iOS 内部机制的技术控,可以看看。

Star 10.6k+,本周还在更,热度很高。

OmniWM —— macOS 平铺窗口管理器

GitHub:BarutSRB/OmniWM[9]

用惯了 Linux 上的 Niri、Hyprland 那种平铺 WM,一到 macOS 是不是觉得窗口管理原始得不行?OmniWM 就是来解决这个痛点的——Swift 原生写的 macOS 平铺窗口管理器

对比 yabai、Amethyst 那些老家伙,OmniWM 定位更现代,灵感来自 Niri 和 Hyprland,追求流畅的动画和更符合直觉的交互。而且作者做了签名和公证,企业环境也能放心用。

追求键盘流、多屏高效办公的人,别错过。

Star 2.3k+,本周还在提交,维护得很好。

remux —— iOS 上的原生 tmux 客户端

GitHub:h3nock/remux[10]

作为一个经常 SSH 到服务器的开发者,在 iPad 上舒服地用 tmux 一直是我的刚需。remux 就是这么个东西——SwiftUI 写的原生 iOS tmux 客户端。

它不是那种普通的终端模拟器,而是深度集成了 tmux 的会话管理,能直接连远程服务器上的 tmux 工作区。配上 iPad 键盘和分屏,出门在外简直是移动办公神器。SwiftUI 的界面也挺现代化。

经常在 iPad 上做远程开发、运维、写代码的,值得试试。

Star 400+,本周还在更,作者维护挺勤快的。

最后

这些你用过几个?评论区聊聊你压箱底的好东西~

参考资料

[1]groue/GRDB.swift: https://github.com/groue/GRDB.swift
[2]CocoaLumberjack/CocoaLumberjack: https://github.com/CocoaLumberjack/CocoaLumberjack
[3]amplitude/Amplitude-iOS: https://github.com/amplitude/Amplitude-iOS
[4]datatheorem/TrustKit: https://github.com/datatheorem/TrustKit
[5]uber/ios-snapshot-test-case: https://github.com/uber/ios-snapshot-test-case
[6]realm/SwiftLint: https://github.com/realm/SwiftLint
[7]Lakr233/vphone-cli: https://github.com/Lakr233/vphone-cli
[8]LiveContainer/LiveContainer: https://github.com/LiveContainer/LiveContainer
[9]BarutSRB/OmniWM: https://github.com/BarutSRB/OmniWM
[10]h3nock/remux: https://github.com/h3nock/remux

这里每天分享一个 iOS 的新知识,快来关注我吧