iOS 开发中常用的第三方库 / 框架列表

一、各库功能分类与用途说明

我将这些库按照功能模块进行分类,并简要说明每个库的核心用途,方便你理解和使用:

1. 网络请求
  • Alamofire:Swift 编写的网络请求库,是 iOS 开发中最主流的 HTTP 网络工具,封装了 URLSession,提供简洁易用的 API。
  • Moya:基于 Alamofire 的更高层封装,采用面向协议的方式管理网络请求,让接口定义更清晰、可测试。
  • Moya-ObjectMapper:Moya 与 ObjectMapper 的结合库,方便将网络请求返回的 JSON 数据直接解析为模型对象。
  • Apollo:用于 GraphQL 网络请求的客户端库,适配 iOS 平台,处理 GraphQL 接口的请求、解析等逻辑。
2. 响应式编程
  • RxSwift:Swift 版的响应式编程框架,核心是通过可观察序列(Observable)处理异步事件流。
  • RxCocoa:RxSwift 针对 Cocoa/CocoaTouch 框架的扩展,适配 UIKit 控件(如按钮点击、输入框文本变化)的响应式处理。
  • RxRelay:RxSwift 的扩展,提供可变的、无错误的 Observable(如 BehaviorRelay、PublishRelay)。
  • RxBlocking:RxSwift 的测试工具,支持同步阻塞获取 Observable 的结果,方便单元测试。
  • RxAtomic:RxSwift 底层的原子操作库,保障多线程下的数据安全。
  • RxDataSources:基于 RxSwift 的数据源封装,简化 UITableView/UICollectionView 的数据绑定,支持差分更新。
  • RxGesture:RxSwift 封装的手势识别库,支持以响应式方式处理手势事件。
  • RxOptional:RxSwift 扩展,处理可选类型(Optional)的事件流,避免频繁解包。
  • RxSwiftExt:RxSwift 的扩展工具库,提供更多实用的操作符和工具函数。
  • RxTheme:基于 RxSwift 的主题切换库,支持响应式的界面主题配置。
  • RxViewController:RxSwift 对 UIViewController 生命周期的封装,方便响应式处理页面生命周期事件。
  • NSObject+Rx:为 NSObject 扩展 RxSwift 关联对象,方便管理 Rx 订阅的生命周期。
3. 数据解析 / 模型转换
  • ObjectMapper:Swift 轻量级的 JSON 与模型互转库,通过映射规则实现数据解析。
  • Differentiator:提供数据差分计算能力,常与 RxDataSources 配合,高效更新列表数据。
4. UI 组件 / 界面相关
  • DGCharts:图表绘制库(原 Charts),支持折线图、柱状图、饼图等多种图表类型。
  • DZNEmptyDataSet:为 UITableView/UICollectionView 提供空数据页面的封装,简化空状态展示。
  • DropDown:轻量级的下拉菜单组件,支持自定义样式和交互。
  • FloatingPanel:可悬浮的面板组件,支持拖拽、停靠等交互,常用于地图、播放器等场景。
  • HMSegmentedControl:分段选择器组件,替代系统 UISegmentedControl,支持更多自定义样式。
  • Hero:页面转场动画库,支持自定义、流畅的转场效果,简化页面切换动画开发。
  • ImageSlideshow:图片轮播组件,支持自动播放、分页、图片加载等功能。
  • InputBarAccessoryView:聊天输入框组件,适配表情、附件、语音等输入场景,常与 MessageKit 配合。
  • MessageKit:聊天界面开发库,封装了聊天气泡、消息列表、输入框等核心组件,快速搭建聊天界面。
  • MultiProgressView:多进度条组件,支持同时展示多个进度条,适用于多任务进度展示。
  • RAMAnimatedTabBarController:带动画效果的 TabBar 组件,支持自定义 TabBarItem 的切换动画。
  • SVProgressHUD:轻量级的加载提示框,替代系统 UIActivityIndicatorView,支持文字、加载动画等。
  • Toast-Swift:轻量级的提示框组件,支持在屏幕底部 / 中间显示临时提示信息(Toast)。
  • WhatsNewKit:展示 App 新版本功能的引导组件,方便向用户介绍新特性。
  • IQKeyboardManagerSwift:自动处理键盘遮挡输入框的问题,无需手动调整视图布局,包含核心库(IQKeyboardCore)、通知扩展(IQKeyboardNotification)、输入视图通知(IQTextInputViewNotification)等子组件。
5. 工具类 / 辅助库
  • BonMot:富文本处理库,简化 NSAttributedString 的创建和样式管理。
  • DateToolsSwift:日期处理工具库,封装了日期计算、格式化、比较等常用功能。
  • Highlightr:代码语法高亮库,支持多种编程语言的语法高亮展示。
  • KafkaRefresh:下拉刷新 / 上拉加载组件,支持自定义刷新动画,适配 UITableView/UICollectionView。
  • KeychainAccess:Keychain 钥匙串封装库,简化安全存储(如用户令牌、密码)的操作。
  • Kingfisher:图片加载缓存库,支持网络图片下载、缓存、预处理等,替代 SDWebImage(Swift 版)。
  • Localize-Swift:轻量级的国际化 / 本地化库,简化多语言适配开发。
  • R.swift:资源管理工具,通过代码生成的方式管理图片、字符串、xib 等资源,避免硬编码,支持编译期检查。
  • SnapKit:自动布局框架(Swift 版),替代 Masonry,以链式语法简化 AutoLayout 开发。
  • SwiftDate:日期时间处理库,提供更便捷的日期解析、计算、格式化 API。
  • SwifterSwift:Swift 扩展工具库,为系统类(如 String、UIView、Date 等)扩展大量实用方法,提升开发效率。
6. 日志 / 调试 / 异常处理
  • CocoaLumberjack:iOS 主流的日志框架,支持多级别日志、多输出目标(控制台、文件、网络),性能优异。
  • CwlCatchException:异常捕获库,包含核心捕获逻辑(CwlCatchException)、支持组件(CwlCatchExceptionSupport)、Mach 异常处理(CwlMachBadInstructionHandler)、POSIX 预条件测试(CwlPosixPreconditionTesting)、预条件测试核心(CwlPreconditionTesting),用于捕获和处理崩溃级异常。
  • FLEX:调试工具库,支持在 App 内查看 / 修改 UI 层级、网络请求、沙盒文件、用户默认设置等,方便线上 / 测试环境调试。
  • SwiftLint:Swift 代码规范检查工具,基于规则扫描代码,提示不规范写法,保障代码风格统一。
7. 统计 / 分析 / 广告
  • Firebase 系列 :Google 提供的移动开发套件,包含:
    • FirebaseAnalytics:用户行为统计分析;
    • FirebaseCore/FirebaseCoreExtension/FirebaseCoreInternal:Firebase 核心组件;
    • FirebaseCrashlytics:崩溃统计分析,捕获并上报 App 崩溃信息;
    • FirebaseInstallations:设备安装信息管理;
    • FirebaseRemoteConfigInterop:远程配置交互层;
    • FirebaseSessions:会话数据收集。
  • Mixpanel-swift:用户行为分析库,支持精细化的事件统计、用户分群等功能。
  • Google-Mobile-Ads-SDK:Google 广告 SDK,支持集成谷歌广告(如横幅、插屏、原生广告)。
  • GoogleAppMeasurement:Google 数据测量库,为 FirebaseAnalytics、Google 广告等提供数据统计能力。
  • GoogleDataTransport:Google 数据传输库,负责将统计数据上报到 Google 服务器。
  • GoogleUserMessagingPlatform:Google 用户消息平台,处理广告相关的用户授权、提示等。
  • GoogleUtilities:Google 基础工具库,为 Firebase、Google 广告等提供底层支持。
8. 测试相关
  • Quick:Swift 编写的行为驱动开发(BDD)测试框架,类似 Ruby 的 RSpec,简化测试用例编写。
  • Nimble :与 Quick 配合的断言库,提供更自然、易读的断言语法(如 expect(xxx).to(equal(yyy)))。
9. 其他底层 / 依赖库
  • PromisesObjC/PromisesSwift:苹果官方的 Promise 库,支持 Objective-C/Swift,简化异步任务链式调用。
  • nanopb:轻量级的 Protocol Buffers(Protobuf)解析库,适用于嵌入式 / 移动端,占用资源少。
  • AcknowList:开源库致谢列表生成工具,自动收集项目中使用的开源库信息,生成致谢页面。

小结

  1. 这份列表覆盖了 iOS 开发的核心场景:网络请求、响应式编程、UI 组件、数据处理、调试测试、统计分析等,是典型的中大型 iOS 项目常用依赖。
  2. 响应式编程(RxSwift 生态)、网络(Alamofire/Moya)、UI 组件(DGCharts/MessageKit 等)、工具类(SnapKit/Kingfisher 等)是其中的核心模块,也是 iOS 开发的高频使用库。
  3. Firebase 系列和 Google 广告 SDK 主要用于商业化项目的统计、崩溃监控和广告集成,而 FLEX/CocoaLumberjack 则是调试和日志的核心工具。

二、网络请求类

1. Alamofire

  • 核心用途:Swift 首选 HTTP 网络库,封装 URLSession,支持请求 / 响应拦截、参数编码、进度监听、证书验证等。

  • 最新稳定版:5.10.0(兼容 Swift 5.9+,iOS 13.0+)

  • 核心使用方法

    swift

    复制代码
    import Alamofire
    
    // 基础 GET 请求
    AF.request("https://api.example.com/data", method: .get)
        .validate() // 验证 HTTP 状态码(200-299)
        .responseJSON { response in
            switch response.result {
            case .success(let value):
                print("请求成功:\(value)")
            case .failure(let error):
                print("请求失败:\(error)")
            }
        }
    
    // POST 请求(带参数)
    let parameters: [String: Any] = ["name": "iOSDev", "age": 30]
    AF.request("https://api.example.com/post", method: .post, parameters: parameters)
        .responseData { response in
            if let data = response.data {
                print("响应数据:\(String(data: data, encoding: .utf8)!)")
            }
        }

2. Moya

  • 核心用途:Alamofire 上层封装,以「面向协议」方式管理接口,解耦请求逻辑,简化测试和维护。

  • 最新稳定版:15.0.0(兼容 Swift 5.9+,iOS 13.0+)

  • 核心使用方法

    swift

    复制代码
    import Moya
    
    // 1. 定义接口枚举
    enum APIService {
        case getUser(id: Int)
        case updateUser(name: String)
    }
    
    // 2. 实现 TargetType 协议
    extension APIService: TargetType {
        var baseURL: URL { URL(string: "https://api.example.com")! }
        var path: String {
            switch self {
            case .getUser(let id): return "/users/\(id)"
            case .updateUser: return "/users/update"
            }
        }
        var method: Moya.Method {
            switch self {
            case .getUser: return .get
            case .updateUser: return .post
            }
        }
        var task: Task {
            switch self {
            case .getUser: return .requestPlain
            case .updateUser(let name):
                return .requestParameters(parameters: ["name": name], encoding: JSONEncoding.default)
            }
        }
        var headers: [String: String]? { ["Content-Type": "application/json"] }
    }
    
    // 3. 发起请求
    let provider = MoyaProvider<APIService>()
    provider.request(.getUser(id: 1)) { result in
        switch result {
        case .success(let response):
            let data = response.data // 响应数据
        case .failure(let error):
            print("请求失败:\(error)")
        }
    }

3. Moya-ObjectMapper

  • 核心用途:Moya 与 ObjectMapper 联动,直接将响应数据解析为 Swift 模型。

  • 最新稳定版:9.0.0(兼容 Moya 15.x,ObjectMapper 4.x)

  • 核心使用方法

    swift

    复制代码
    // 1. 定义模型(遵守 Mappable)
    struct User: Mappable {
        var id: Int?
        var name: String?
        
        init?(map: Map) {}
        mutating func mapping(map: Map) {
            id <- map["id"]
            name <- map["name"]
        }
    }
    
    // 2. 解析请求结果
    provider.request(.getUser(id: 1)) { result in
        if let response = try? result.get() {
            let user = try? response.map(User.self) // 直接解析为模型
            print("用户名:\(user?.name ?? "未知")")
        }
    }

4. Apollo

  • 核心用途:GraphQL 客户端库,支持请求缓存、批量请求、订阅(Subscription)、类型安全的 GraphQL 操作。

  • 最新稳定版:1.11.0(兼容 Swift 5.9+,iOS 13.0+)

  • 核心使用方法 (需先通过 CLI 生成模型):

    swift

    复制代码
    import Apollo
    
    // 1. 创建客户端
    let client = ApolloClient(url: URL(string: "https://api.example.com/graphql")!)
    
    // 2. 定义 GraphQL 查询(生成的模型)
    let query = GetUserQuery(id: 1)
    
    // 3. 发起查询
    client.fetch(query: query) { result in
        switch result {
        case .success(let data):
            let userName = data.data?.user?.name
            print("用户名:\(userName ?? "未知")")
        case .failure(let error):
            print("查询失败:\(error)")
        }
    }

三、响应式编程(RxSwift 生态)

1. RxSwift & RxCocoa

  • 核心用途

    • RxSwift:实现响应式编程核心(Observable/Observer/ 操作符),处理异步事件流;
    • RxCocoa:适配 UIKit/AppKit,将 UI 事件(点击、输入、滚动)转为 Observable。
  • 最新稳定版:6.7.0(兼容 Swift 5.9+,iOS 13.0+)

  • 核心使用方法

    swift

    复制代码
    import RxSwift
    import RxCocoa
    
    let disposeBag = DisposeBag() // 管理订阅生命周期
    
    // 1. 按钮点击响应式
    let button = UIButton()
    button.rx.tap
        .subscribe(onNext: {
            print("按钮被点击")
        })
        .disposed(by: disposeBag)
    
    // 2. 输入框文本实时监听
    let textField = UITextField()
    textField.rx.text
        .orEmpty // 转为非可选 String
        .debounce(.milliseconds(300), scheduler: MainScheduler.instance) // 防抖
        .subscribe(onNext: { text in
            print("输入框内容:\(text)")
        })
        .disposed(by: disposeBag)
    
    // 3. 网络请求 + Rx 封装
    let apiProvider = MoyaProvider<APIService>()
    apiProvider.rx.request(.getUser(id: 1))
        .map(User.self) // 解析为模型
        .subscribe(onNext: { user in
            print("用户ID:\(user.id ?? 0)")
        }, onError: { error in
            print("请求失败:\(error)")
        })
        .disposed(by: disposeBag)

2. RxDataSources

  • 核心用途:简化 UITableView/CollectionView 与 RxSwift 的绑定,支持差分更新(只刷新变化的单元格)。

  • 最新稳定版:5.0.0(兼容 RxSwift 6.x,iOS 13.0+)

  • 核心使用方法

    swift

    复制代码
    import RxDataSources
    
    // 1. 定义数据源模型
    struct SectionModel {
        var header: String
        var items: [String]
    }
    
    // 2. 遵守 SectionModelType 协议
    extension SectionModel: SectionModelType {
        typealias Item = String
        init(original: SectionModel, items: [String]) {
            self = original
            self.items = items
        }
    }
    
    // 3. 绑定到 UITableView
    let tableView = UITableView()
    let dataSource = RxTableViewSectionedReloadDataSource<SectionModel>(
        configureCell: { ds, tv, ip, item in
            let cell = tv.dequeueReusableCell(withIdentifier: "cell", for: ip)
            cell.textLabel?.text = item
            return cell
        },
        titleForHeaderInSection: { ds, section in
            return ds[section].header
        }
    )
    
    // 4. 数据源绑定
    let sections = [SectionModel(header: "分组1", items: ["A", "B"]),
                    SectionModel(header: "分组2", items: ["C", "D"])]
    Observable.just(sections)
        .bind(to: tableView.rx.items(dataSource: dataSource))
        .disposed(by: disposeBag)

3. 其他 Rx 扩展库

表格

库名 最新版本 核心用途
RxRelay 6.7.0 无错误的 Observable(BehaviorRelay/PublishRelay),替代 Variable/Subject
RxGesture 4.0.0 手势响应式封装(点击 / 长按 / 拖拽等)
RxOptional 4.0.0 处理 Optional 事件流(如 filterNil() 自动过滤 nil)
RxSwiftExt 6.2.0 扩展操作符(如 retry(with:)unwrap()

四、UI 组件类

1. SnapKit(自动布局)

  • 核心用途:Swift 版自动布局框架,链式语法替代 NSLayoutConstraint,简洁高效。

  • 最新稳定版:5.6.0(兼容 iOS 11.0+)

  • 核心使用方法

    swift

    复制代码
    import SnapKit
    
    let view = UIView()
    view.backgroundColor = .red
    self.view.addSubview(view)
    
    // 约束:距离父视图上下左右各 20pt
    view.snp.makeConstraints { make in
        make.edges.equalToSuperview().inset(20)
    }
    
    // 约束:宽 100,高 50,居中
    view.snp.makeConstraints { make in
        make.width.equalTo(100)
        make.height.equalTo(50)
        make.center.equalToSuperview()
    }

2. Kingfisher(图片加载)

  • 核心用途:Swift 图片加载 / 缓存库,支持网络图片、本地图片、GIF、渐进式加载、缓存策略自定义。

  • 最新稳定版:7.10.0(兼容 iOS 14.0+)

  • 核心使用方法

    swift

    复制代码
    import Kingfisher
    
    let imageView = UIImageView()
    // 基础加载
    imageView.kf.setImage(with: URL(string: "https://example.com/image.jpg"))
    
    // 带占位图 + 加载完成回调
    imageView.kf.setImage(
        with: URL(string: "https://example.com/image.jpg"),
        placeholder: UIImage(named: "placeholder"),
        completionHandler: { result in
            switch result {
            case .success(let value):
                print("加载成功:\(value.image)")
            case .failure(let error):
                print("加载失败:\(error)")
            }
        }
    )
    
    // 清除缓存
    KingfisherManager.shared.cache.clearMemoryCache() // 内存缓存
    KingfisherManager.shared.cache.clearDiskCache()   // 磁盘缓存

3. DGCharts(图表)

  • 核心用途:绘制折线图 / 柱状图 / 饼图 / 雷达图等,高度自定义样式(颜色、动画、标注)。

  • 最新稳定版:5.0.0(兼容 iOS 13.0+)

  • 核心使用方法 (折线图示例):

    swift

    复制代码
    import DGCharts
    
    let chartView = LineChartView()
    self.view.addSubview(chartView)
    chartView.snp.makeConstraints { make in
        make.edges.equalToSuperview().inset(20)
    }
    
    // 准备数据
    var entries = [ChartDataEntry]()
    entries.append(ChartDataEntry(x: 0, y: 10))
    entries.append(ChartDataEntry(x: 1, y: 20))
    entries.append(ChartDataEntry(x: 2, y: 15))
    
    // 设置数据集
    let dataSet = LineChartDataSet(entries: entries, label: "销量")
    dataSet.colors = [.red] // 折线颜色
    dataSet.circleColors = [.blue] // 节点颜色
    let data = LineChartData(dataSet: dataSet)
    chartView.data = data
    
    // 样式配置
    chartView.legend.enabled = false // 隐藏图例
    chartView.xAxis.labelPosition = .bottom // X 轴标签在底部

4. MessageKit + InputBarAccessoryView(聊天界面)

  • 核心用途:快速搭建聊天界面,MessageKit 负责消息列表 / 气泡,InputBarAccessoryView 负责输入框。

  • 最新稳定版

    • MessageKit:4.1.0(iOS 14.0+)
    • InputBarAccessoryView:6.0.0
  • 核心使用方法 (简化版):

    swift

    复制代码
    import MessageKit
    import InputBarAccessoryView
    
    class ChatVC: MessagesViewController {
        let messages: [MessageType] = [] // 消息数据
        let currentUser = Sender(senderId: "1", displayName: "我")
    
        override func viewDidLoad() {
            super.viewDidLoad()
            messagesCollectionView.messagesDataSource = self
            messagesCollectionView.messagesLayoutDelegate = self
            messagesCollectionView.messagesDisplayDelegate = self
            messageInputBar.delegate = self
        }
    }
    
    // 实现数据源协议
    extension ChatVC: MessagesDataSource {
        func currentSender() -> SenderType { currentUser }
        func messageForItem(at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> MessageType {
            return messages[indexPath.section]
        }
        func numberOfSections(in messagesCollectionView: MessagesCollectionView) -> Int {
            return messages.count
        }
    }
    
    // 实现布局/显示协议(略)
    extension ChatVC: MessagesLayoutDelegate, MessagesDisplayDelegate {}
    extension ChatVC: InputBarAccessoryViewDelegate {
        // 发送按钮点击
        func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
            let message = Message(sender: currentUser, messageId: UUID().uuidString, sentDate: Date(), kind: .text(text))
            messages.append(message)
            messagesCollectionView.reloadData()
            inputBar.inputTextView.text = ""
        }
    }

5. 其他常用 UI 库

表格

库名 最新版本 核心用途
SVProgressHUD 2.2.5 轻量级加载提示框(SVProgressHUD.show()/SVProgressHUD.dismiss()
Toast-Swift 5.0.1 底部提示框(view.makeToast("提示内容")
DZNEmptyDataSet 1.8.1 列表空数据页面(实现 EmptyDataSetSource/Delegate
FloatingPanel 4.5.0 可拖拽悬浮面板(如地图底部弹窗)
Hero 1.7.0 页面转场动画(hero.isEnabled = true + hero.id = "tag"

五、工具类

1. ObjectMapper(JSON 解析)

  • 核心用途:JSON 与 Swift 模型互转,支持嵌套模型、自定义映射规则。

  • 最新稳定版:4.2.0(Swift 5.9+)

  • 核心使用方法

    swift

    复制代码
    import ObjectMapper
    
    struct User: Mappable {
        var id: Int?
        var name: String?
        var address: Address? // 嵌套模型
    
        init?(map: Map) {}
        mutating func mapping(map: Map) {
            id <- map["id"]
            name <- map["name"]
            address <- map["address"] // 自动解析嵌套模型
        }
    }
    
    struct Address: Mappable {
        var city: String?
        init?(map: Map) {}
        mutating func mapping(map: Map) {
            city <- map["city"]
        }
    }
    
    // JSON 转模型
    let jsonString = """
    {"id": 1, "name": "iOSDev", "address": {"city": "Beijing"}}
    """
    if let user = User(JSONString: jsonString) {
        print(user.name ?? "", user.address?.city ?? "") // 输出:iOSDev Beijing
    }
    
    // 模型转 JSON
    let user = User()
    user.id = 2
    user.name = "SwiftDev"
    print(user.toJSONString()!) // 输出:{"id":2,"name":"SwiftDev"}

2. SwiftLint(代码规范)

  • 核心用途:强制 Swift 代码规范(基于 GitHub 官方规范),检测未使用变量、强制换行、命名规范等。
  • 最新稳定版:0.56.0(兼容 Swift 5.9+)
  • 核心使用方法
    1. 安装:brew install swiftlint

    2. 配置(项目根目录创建 .swiftlint.yml):

      yaml

      复制代码
      disabled_rules: # 禁用的规则
        - line_length
      opt_in_rules: # 启用的可选规则
        - empty_count
      included: # 检测的目录
        - Sources
      excluded: # 排除的目录
        - Sources/ThirdParty
    3. 集成到 Xcode(Build Phases 添加脚本): bash

      运行

      复制代码
      if which swiftlint >/dev/null; then
          swiftlint
      else
          echo "SwiftLint not installed, download from https://github.com/realm/SwiftLint"
      fi

3. KeychainAccess(安全存储)

  • 核心用途:封装 Keychain 操作,安全存储令牌 / 密码(比 UserDefaults 更安全)。

  • 最新稳定版:4.2.2(iOS 11.0+)

  • 核心使用方法

    swift

    复制代码
    import KeychainAccess
    
    let keychain = Keychain(service: "com.example.app")
    
    // 存储
    keychain["token"] = "abc123456"
    // 读取
    let token = keychain["token"]
    // 删除
    keychain["token"] = nil
    // 带访问控制(仅当前设备可用)
    let secureKeychain = Keychain(service: "com.example.app")
        .accessibility(.whenUnlocked, authenticationPolicy: .userPresence)
    secureKeychain["password"] = "123456"

六、测试类

1. Quick + Nimble

  • 核心用途

    • Quick:BDD 测试框架(类似 RSpec),用 describe/it/beforeEach 组织测试用例;
    • Nimble:断言库,替代 XCTest 原生断言,语法更自然。
  • 最新稳定版

    • Quick:7.0.0(Swift 5.9+)
    • Nimble:11.0.0
  • 核心使用方法

    swift

    复制代码
    import Quick
    import Nimble
    @testable import YourApp
    
    class UserTests: QuickSpec {
        override func spec() {
            describe("User 模型") {
                var user: User!
                
                beforeEach {
                    user = User(id: 1, name: "Test")
                }
                
                it("初始化后 ID 不为空") {
                    expect(user.id).to(equal(1)) // Nimble 断言
                }
                
                it("名称不为空") {
                    expect(user.name).toNot(beEmpty())
                }
            }
        }
    }

七、统计 / 崩溃监控类(Firebase 系列)

1. FirebaseCrashlytics

  • 核心用途:捕获 App 崩溃日志,定位崩溃原因(堆栈、设备信息、用户行为)。
  • 最新稳定版:10.24.0(iOS 12.0+)
  • 核心使用方法
    1. 集成:通过 CocoaPods 添加 pod 'Firebase/Crashlytics'

    2. 初始化(AppDelegate): swift

      复制代码
      import Firebase
      FirebaseApp.configure()
    3. 主动上报异常: swift

      复制代码
      import FirebaseCrashlytics
      
      // 上报自定义异常
      do {
          try someRiskyOperation()
      } catch {
          Crashlytics.crashlytics().record(error: error)
      }
      
      // 上报自定义日志
      Crashlytics.crashlytics().log("用户点击了支付按钮")
      
      // 设置用户ID(便于定位问题)
      Crashlytics.crashlytics().setUserID("123456")

2. FirebaseAnalytics

  • 核心用途:统计用户行为(页面访问、按钮点击、事件触发),支持自定义事件 / 参数。

  • 最新稳定版:10.24.0

  • 核心使用方法

    swift

    复制代码
    import FirebaseAnalytics
    
    // 统计自定义事件
    Analytics.logEvent("button_click", parameters: [
        "button_name": "pay",
        "page": "order"
    ])
    
    // 设置用户属性
    Analytics.setUserProperty("iOS", forName: "platform")

总结

  1. 核心选型优先级:网络(Alamofire/Moya)> 响应式(RxSwift/RxCocoa)> UI 基础(SnapKit/Kingfisher)> 工具类(ObjectMapper/KeychainAccess)> 测试(Quick/Nimble),是中大型 iOS 项目的标配组合。
  2. 版本兼容注意:所有库优先选择兼容 Swift 5.9+、iOS 13.0+ 的版本(覆盖 95% 以上设备),避免使用过旧版本导致兼容性问题。
  3. 使用建议
    • 网络层:Moya + RxSwift 组合可大幅提升接口维护性;
    • UI 层:SnapKit + Kingfisher 是基础,复杂 UI 组件优先选维护活跃的库(如 DGCharts/FloatingPanel);
    • 调试 / 监控:FLEX(开发环境)+ FirebaseCrashlytics(生产环境)组合,覆盖全流程问题定位。
相关推荐
2501_915921433 小时前
iOS 抓包怎么绕过 SSL Pinning 证书限制,抓取app上的包
android·网络协议·ios·小程序·uni-app·iphone·ssl
TheNextByte118 小时前
如何在 iPad/iPhone 上删除语音邮件?
ios·iphone·ipad
TheNextByte119 小时前
如何修复iPhone短信消失问题?
ios·cocoa·iphone
二流小码农20 小时前
鸿蒙开发:独立开发者的烦恼之icon图标选择
android·ios·harmonyos
智先森zhi21 小时前
实战:将 Android 多Module应用迁移到 kmp+cmp
android·ios·kotlin
TheNextByte11 天前
如何在没有iTunes的情况下重启/恢复出厂设置iPhone
ios·cocoa·iphone
芝加哥兔兔养殖场1 天前
前端/iOS开发者必备工具软件合集
前端·ios
TheNextByte11 天前
如何从 iPhone 仅传输喜爱的照片?
ios·iphone
m0_641031051 天前
iOS签名是什么?为什么苹果APP需要签名
经验分享·科技·ios·游戏程序