乐于分享
好东西不私藏

iOS 老鸟私藏的 7 个开发利器

iOS 老鸟私藏的 7 个开发利器

这里每天分享一个 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)&current_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.png

CI/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 的新知识,快来关注我吧