这里每天分享一个 iOS 的新知识,快来关注我吧
前言
这周的 iOS 推荐又来了!说实话这周淘到的东西还挺不错的,有些老牌 UI 组件,还有 Apple 自家出的代码生成工具,整体质量都还行吧。
一共 7 个项目,4 个库 3 个工具。库这边有进度提示、服务端框架、天气 API 还有个处理异常的;工具嘛就是 API 代码生成、Markdown 编辑器、还有个模拟器自动化的东西。新手老手应该都能找到点有用的。
行,直接开整。
开发库推荐
MBProgressHUD - 这玩意儿应该没人没用过吧
GitHub:jdg/MBProgressHUD[1]
讲真,这库估计 iOS 开发者没几个没用过的。绝对是进度提示组件的老大哥。虽然是 OC 写的,但用了这么多年了,稳定性没得说。
核心功能就是各种加载状态:菊花转、进度条、成功失败提示啥的,基本你能想到的场景它都有。用起来也简单:
// 显示加载中
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.label.text = @"加载中...";
// 模拟请求完了隐藏掉
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[hud hideAnimated:YES];
});
// 带进度的
MBProgressHUD *progressHUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
progressHUD.mode = MBProgressHUDModeDeterminate;
progressHUD.progress = 0.5f;登录、网络请求、下载啥的都能用,基本是个 App 就用得上。
15K+ stars,十几年打磨下来 API 很成熟了。你要是还在用那些乱七八糟的加载框,建议换这个,省心。
Vapor - 想用 Swift 写后端就选它
GitHub:vapor/vapor[2]
Swift 开发者想搞后端的话,Vapor 真的是首选。虽然主要是服务端用,但跟 iOS 应用配合起来特别顺。
写过 Node.js 的应该挺熟悉这种写法,路由中间件 ORM 都有:
import Vapor
let app = try Application(.detect())
defer { app.shutdown() }
app.get("hello") { req -> String in
return "Hello, World!"
}
app.get("users", ":id") { req -> String in
guard let userId = req.parameters.get("id") else {
throw Abort(.badRequest)
}
return "User ID: \(userId)"
}
try app.run()想用 Swift 写后端、或者给 App 快速搭个配套服务的,可以考虑。前后端都 Swift,代码能复用,类型也安全。
26K+ stars,社区挺活跃,文档也全。能实现全栈 Swift 开发这点还是挺香的。
Open-Meteo - 免费天气 API,不要钱那种
GitHub:open-meteo/open-meteo[3]
做天气 App 的有福了。Open-Meteo 免费开源的天气 API,后端还是 Swift 写的。不用申请 Key 直接就能调,真的香。
调用很简单,HTTP 请求就完事了:
import Foundation
let latitude = 39.9042
let longitude = 116.4074
let urlString = "https://api.open-meteo.com/v1/forecast?latitude=\(latitude)&longitude=\(longitude)¤t_weather=true"
if let url = URL(string: urlString) {
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data else { return }
if let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
let currentWeather = json["current_weather"] as? [String: Any] {
print("当前温度: \(currentWeather["temperature"] ?? "")°C")
}
}.resume()
}天气 App、户外运动、旅游类应用都能用。免费额度个人开发者完全够。
4.9K+ stars,还在活跃维护。比那些收费的 API 对独立开发者友好太多了。
Try - 混编项目处理异常用这个
GitHub:Weebly/Try[4]
项目里 OC 和 Swift 都有的话,异常处理真的头疼。Try 就是专门解决 OC 异常和 Swift 错误系统桥接问题的。
在 Swift 里调用可能抛 OC 异常的代码时特别好使:
import Try
do {
try Try.catch {
let array = NSArray()
_ = array.object(at: 100) // 越界了,会抛异常
}
} catch {
print("捕获到异常: \(error)")
}
// 也能拿返回值
let result: String? = try? Try.catch {
return someObjCMethod()
}混编项目、调第三方 OC 库或者系统 API 的时候挺有用。
这库比较小众,stars 不多,但问题解决得很实在。被 OC 异常坑过的话这个能救命。
开发工具推荐
Swift OpenAPI Generator - Apple 官方出的,靠谱
GitHub:apple/swift-openapi-generator[5]
Apple 官方的 OpenAPI 代码生成器。后端给了 OpenAPI 文档的话,用这个自动生成 Swift 客户端代码,手写网络请求的时间省老多了。
通过 SPM 插件用,配好 Package.swift 之后根据 OpenAPI 文档自动生成模型和 API 调用代码:
dependencies: [
.package(url: "https://github.com/apple/swift-openapi-generator", from: "1.0.0"),
.package(url: "https://github.com/apple/swift-openapi-runtime", from: "1.0.0"),
],
plugins: [
.plugin(name: "OpenAPIGenerator", package: "swift-openapi-generator"),
]文档放指定位置,编译自动生成。生成的代码类型安全,async/await 也配合得很好。
API 接口多的项目特别推荐,手写太累了。官方维护,和 Swift 生态集成得很深。用过之后真不想再手写 API 代码了。
MarkEdit - 原生 Markdown 编辑器,不是 Electron 套壳
GitHub:MarkEdit-app/MarkEdit[6]
写文档写博客写 README 都要用 Markdown 嘛。MarkEdit 是 Swift + SwiftUI 写的 macOS 原生编辑器,启动快,界面干净。
主要特点:
原生开发,不是 Electron 秒开,真的快 语法高亮、实时预览 支持 Vim 模式 免费开源
受够臃肿的 Electron 编辑器的话,这个真的清爽。源码也值得学,SwiftUI 实际项目案例。
写 Markdown、技术博客、README 啥的都好用。轻量,打开就能写。
3.8K+ stars,还在活跃维护。我现在基本就用这个写博客,挺舒服的。
AXe - iOS 模拟器自动化
GitHub:cameroncooke/AXe[7]
做 UI 自动化测试的都知道,iOS 模拟器自动化一直不太好搞。AXe 是个命令行工具,专门给 iOS Simulator 用的,通过 Apple 私有 API 操作模拟器。
能做的事:启动关闭模拟器、装卸应用、模拟触摸滑动、截图、获取 UI 元素信息。
axe list
axe boot "iPhone 15 Pro"
axe install /path/to/app.app
axe tap 100 200
axe screenshot ~/Desktop/screenshot.pngCI/CD 跑自动化测试、批量操作模拟器的场景挺合适。比手动操作效率高多了。
工具比较新,stars 不多,但解决的问题很实际。搞 iOS 自动化测试的可以关注下。
总结
这些库工具你用过哪个?有啥好用的 iOS 开发工具想推荐的?评论区聊聊呗。
引用链接
[1] jdg/MBProgressHUD: https://github.com/jdg/MBProgressHUD
[2] vapor/vapor: https://github.com/vapor/vapor
[3] open-meteo/open-meteo: https://github.com/open-meteo/open-meteo
[4] Weebly/Try: https://github.com/Weebly/Try
[5] apple/swift-openapi-generator: https://github.com/apple/swift-openapi-generator
[6] MarkEdit-app/MarkEdit: https://github.com/MarkEdit-app/MarkEdit
[7] cameroncooke/AXe: https://github.com/cameroncooke/AXe
这里每天分享一个 iOS 的新知识,快来关注我吧
夜雨聆风