乐于分享
好东西不私藏

GitHub 又被我翻到宝了!11 个 iOS 神器,第 5 个好强

GitHub 又被我翻到宝了!11 个 iOS 神器,第 5 个好强

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

写在前面

又到了周更时间,这周翻 GitHub 又翻出不少好东西,赶紧整理一下分享出来。说真的,最近沉迷淘项目,一刷就是俩小时哈哈。

行了,废话不多说,开整。

库篇

GRDB.swift —— Swift 操作 SQLite 的最优解

GitHub:groue/GRDB.swift[1]

不夸张地讲,GRDB 是我目前用过最舒服的 Swift SQLite 库。FMDB 用过、Core Data 折腾过、Realm 也试了一阵,最后还是回到了 GRDB。API 写得相当 Swifty,类型安全做得到位,性能也猛——之前一个项目导入十几万条数据,GRDB 几乎没让我等。

最香的是它的数据库观察机制,数据一变 UI 自动跟着刷,跟 Combine、SwiftUI 配合那叫一个丝滑:

// 定义模型
struct Player: Codable, FetchableRecord, PersistableRecord {
    var idInt64
    var nameString
    var scoreInt
}

// 观察数据库变化
let observation = ValueObservation.tracking { db in
    try Player.order(Column("score").desc).fetchAll(db)
}

// 配合 SwiftUI 使用
let cancellable = observation.start(in: dbQueue) { error in
    // 处理错误
} onChange: { players in
    // 数据变化自动回调
    print("玩家列表更新:\(players.count)")
}

适用场景:要做本地持久化的 Swift 项目,尤其那种对性能、响应式有要求的。

目前 7.4k+ Star,更新挺勤,文档也写得细,不管你是新手还是老鸟,都建议试试。

SDWebImageWebPCoder —— WebP 加载就靠它

GitHub:SDWebImage/SDWebImageWebPCoder[2]

用过 SDWebImage 的都懂,这玩意儿基本是后端走 WebP 时的标配。现在不少公司为了省带宽,图片一律 WebP,体积能砍掉差不多 30%,但 iOS 原生对 WebP 的支持……怎么说呢,不太行,所以这个插件就特别有用了。

接入也简单,几行的事:

import SDWebImage
import SDWebImageWebPCoder

// 在 AppDelegate 里注册一下
let webPCoder = SDImageWebPCoder.shared
SDImageCodersManager.shared.addCoder(webPCoder)

// 然后正常使用就行
imageView.sd_setImage(with: URL(string: "https://example.com/image.webp"))

适用场景:后端图片是 WebP 的项目,或者想给图片加载瘦身的 App。

SDWebImageSVGCoder —— SVG 福音

GitHub:SDWebImage/SDWebImageSVGCoder[3]

跟上面那个是一家人,专治 SVG 加载。SVG 在 iOS 上一直挺尴尬的,原生支持半残不残,第三方方案乱七八糟,这个插件直接调 Apple 自家的 CoreSVG,性能、兼容性都过关。

import SDWebImage
import SDWebImageSVGCoder

// 注册 SVG 解码器
let SVGCoder = SDImageSVGCoder.shared
SDImageCodersManager.shared.addCoder(SVGCoder)

// 加载 SVG 图标
imageView.sd_setImage(with: URL(string: "https://example.com/icon.svg"),
                     placeholderImage: nil,
                     context: [.imageThumbnailPixelSize: CGSize(width: 100, height: 100)])

适用场景:要展示矢量图标、Logo 的项目,特别是图标量大、要适配各种分辨率的那种。

SocketRocket —— 老牌 WebSocket 客户端

GitHub:facebookincubator/SocketRocket[4]

Facebook 出品的 Objective-C WebSocket 客户端。虽说现在 Apple 自己有了 URLSessionWebSocketTask,但很多老项目里 SocketRocket 还顶在第一线。稳定性是真的没话说,毕竟扛过这么多年的生产环境,兼容性也比新 API 强(iOS 13 以下照样跑)。

SRWebSocket *webSocket = [[SRWebSocket alloc] initWithURL:
    [NSURL URLWithString:@"wss://echo.websocket.org"]];
webSocket.delegate = self;
[webSocket open];

// 实现代理方法
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message {
    NSLog(@"收到消息:%@", message);
}

适用场景:要兼容低版本系统的、维护老项目的,IM、推送、直播弹幕都能用。

9.6k+ Star,老牌项目了,更新不算频繁,但稳得很。

TrustKit —— SSL Pinning 一把梭

GitHub:datatheorem/TrustKit[5]

讲到 App 安全,SSL Pinning 基本是金融、支付类 App 的标配。我之前自己手撸过一版 Pinning 逻辑,踩坑踩到怀疑人生……后来换了 TrustKit,配置一下 Info.plist 就完事,连代码都不用写,舒服。

let trustKitConfig = [
    kTSKSwizzleNetworkDelegates: false,
    kTSKPinnedDomains: [
        "yourdomain.com": [
            kTSKPublicKeyHashes: [
                "公钥哈希1",
                "公钥哈希2"  // 备用 Pin
            ]
        ]
    ]
as [String : Any]

TrustKit.initSharedInstance(withConfiguration: trustKitConfig)

适用场景:对网络安全有要求的 App,银行、电商、企业级的基本都得上。

2.7k+ Star,文档清楚,配置无脑,强烈安利。

microsoft-authentication-library-common-for-objc —— 微软官方认证库

GitHub:AzureAD/microsoft-authentication-library-common-for-objc[6]

这个是微软官方的 ADAL/MSAL 公共代码库,主要服务于 Azure AD、Microsoft 365 这种企业级账号体系。做 To B 业务、要对接微软那一套生态的话,这个库基本绕不开。

普通开发者一般用不到它,更多是通过 MSAL 间接调用。但要是你想做点深度定制,比如改 Token 缓存策略、搞 SSO 共享,那就得直接动它了。

适用场景:企业级 App、对接 Office 365、Azure AD、Outlook 那一票微软服务的项目。

100+ Star,比较小众,不过在 To B 圈口碑挺好。

工具篇

Whisky —— 在 Mac 上跑 Windows 游戏

GitHub:Whisky-App/Whisky[7]

这个我必须吹一波,SwiftUI 写的 Wine 包装器,让 Mac 跑 Windows 游戏变得贼简单。以前要么花钱买 CrossOver,要么自己折腾 Wine 命令行,劝退一大片。Whisky 直接图形化点点点搞定,体验也很 Mac。

底层用的是 Apple 自家的 Game Porting Toolkit,DirectX 11/12 兼容性还行,《赛博朋克 2077》《艾尔登法环》这种我都跑起来过,虽然帧率不能跟原生比,但能玩。

适用场景:Mac 用户偶尔想搓两把 Steam 上的 Windows 游戏,或者跑点 Windows 小工具。

14k+ Star,可惜已经不更新了。

LiveContainer —— 不装也能跑 iOS App

GitHub:LiveContainer/LiveContainer[8]

光看名字就知道这是个狠活——LiveContainer 能让你不真正"安装"IPA,就把 App 跑起来。原理类似容器化,把运行环境隔离开。对开发者测多版本 App、或者证书名额不够用的同学来说,简直是救星。

它解决了一个老大难:免费证书一次只能装 3 个 App,有了 LiveContainer,一个"容器 App"里能跑 N 个应用,相当于变相扩容。

适用场景:开发者测试、沙盒研究、免签证书不够用。

6k+ Star,技术含量挺高,源码值得啃。

CopilotForXcode —— Xcode 终于有 Copilot 了

GitHub:github/CopilotForXcode[9]

终于!GitHub 官方亲自下场做 Xcode 版 Copilot 了! 以前看 VSCode 用户用 Copilot 写得飞起,咱们 Xcode 这边只能干瞪眼,那叫一个酸。现在好了,体验直接拉满。

补全、聊天、解释代码、生成测试,能想到的 AI 编程功能基本都有。我自己用下来,写 SwiftUI 的时候提升最明显,写一半剩下的它就猜出来了,效率至少快了三成。

# 安装很简单,直接 Mac App Store 搜
# 或者 brew install --cask github-copilot-for-xcode

适用场景:所有 iOS/Mac 开发者,写代码效率起飞。

Swiftfin —— 最好用的 Jellyfin 客户端

GitHub:jellyfin/Swiftfin[10]

家里有 Jellyfin 媒体服务器的朋友(追剧党狂喜),Swiftfin 大概率是你能在 iOS/tvOS 上找到的最好的客户端。纯 SwiftUI 写的,UI 干净,操作流畅,比官方 Web 端好用一万倍。

iPhone、iPad、Apple TV 都支持,画质切换、字幕、章节跳转该有的都有,4K 大文件播放也稳。

适用场景:NAS 党、Jellyfin 玩家、想从 Infuse 出坑的同学。

4k+ Star,开源免费,顺便还能拿来当 SwiftUI 项目结构的学习样本。

TrollStore —— 越狱圈的扛把子

GitHub:opa334/TrollStore[11]

压轴的来了,TrollStore,越狱圈无人不知。利用 iOS 系统漏洞,可以永久安装任意 IPA,不用 7 天一签,不用开发者账号,装上就一直能用,舒服得不行。

支持的 iOS 版本主要是 14.0 ~ 16.6.1(具体看设备),新系统漏洞修了就没法用了。能装的应用相当猛,不少需要特殊权限的工具类 App 都能跑起来。

适用场景:玩机党、研究 iOS 系统的、想跑各种第三方 App 的。

21k+ Star,热度炸裂。

最后

这些库和工具你用过几个?踩过什么坑、有啥小技巧?评论区聊聊呗!

参考资料

[1]groue/GRDB.swift: https://github.com/groue/GRDB.swift
[2]SDWebImage/SDWebImageWebPCoder: https://github.com/SDWebImage/SDWebImageWebPCoder
[3]SDWebImage/SDWebImageSVGCoder: https://github.com/SDWebImage/SDWebImageSVGCoder
[4]facebookincubator/SocketRocket: https://github.com/facebookincubator/SocketRocket
[5]datatheorem/TrustKit: https://github.com/datatheorem/TrustKit
[6]AzureAD/microsoft-authentication-library-common-for-objc: https://github.com/AzureAD/microsoft-authentication-library-common-for-objc
[7]Whisky-App/Whisky: https://github.com/Whisky-App/Whisky
[8]LiveContainer/LiveContainer: https://github.com/LiveContainer/LiveContainer
[9]github/CopilotForXcode: https://github.com/github/CopilotForXcode
[10]jellyfin/Swiftfin: https://github.com/jellyfin/Swiftfin
[11]opa334/TrollStore: https://github.com/opa334/TrollStore

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