Skip to content

About

Bmob Swift SDK - 纯 Swift 实现的 Bmob 后端云 SDK,支持 iOS/macOS 双平台,async/await 并发模型

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

12 Commits

Folders and files

Repository files navigation

BmobSwiftSDK

Swift Platform License CocoaPods

BmobSwiftSDK 是 Bmob 后端云的全新纯 Swift SDK,专为 Swift 现代并发模型设计,提供简洁、高效的云端数据管理能力。

特性

  • 纯 Swift 实现 - 无 Objective-C 桥接,完全适配 Swift 生态
  • async/await - 原生支持 Swift Concurrency,告别回调地狱
  • 模块化设计 - SPM/CocoaPods 按需集成(Core/Data/User/File/Cloud)
  • 加密传输 - 端到端 AES-128-CBC 加密,安全可靠
  • 类型安全 - BmobError 枚举 + throws 错误处理
  • 完整查询 - 条件/模糊/地理/统计/BQL 等查询能力
  • 实时数据 - WebSocket 连接 + AsyncStream 事件流

平台支持

平台 最低版本
iOS 15.0+
macOS 12.0+

安装

Swift Package Manager

在 Xcode 中,选择 File > Add Package Dependencies,输入:

https://github.com/bmob/BmobSwiftSDK

或直接在 Package.swift 中添加:

dependencies: [
    .package(url: "https://github.com/bmob/BmobSwiftSDK", from: "1.0.8")
]

CocoaPods

在 Podfile 中添加:

pod 'BmobSwiftSDK', '~> 1.0.8'

然后执行:

pod install

快速开始

1. 初始化

import BmobSDK

Bmob.initialize(appKey: "your-app-key")

2. 数据操作

// 创建对象
let gameScore = BmobObject(className: "GameScore")
gameScore["playerName"] = "Player1"
gameScore["score"] = 100

try await gameScore.save()

// 查询数据
let query = BmobQuery(className: "GameScore")
query.whereKey("playerName", equalTo: "Player1")
let results = try await query.find()

// 条件查询
let query = BmobQuery(className: "GameScore")
query.whereKey("score", greaterThan: 50)
query.order(byDescending: "score")
let topScores = try await query.find()

3. 用户认证

// 注册
let user = BmobUser()
user.username = "username"
user.password = "password"
try await user.signUp()

// 登录
let user = try await BmobUser.login(account: "username", password: "password")

// 退出登录
BmobUser.logout()

4. 文件上传

let file = BmobFile(filePath: "/path/to/image.jpg")
try await file?.upload()
print("File URL: \(file?.url ?? "")")
print("CDN: \(file?.cdn ?? "")")

5. 云函数

// 调用云函数
let result = try await BmobCloud.run(function: "helloWorld", params: ["name": "Bmob"])

// 类型安全调用
struct HelloResponse: Decodable {
    let message: String
}
let response: HelloResponse = try await BmobCloud.run(function: "helloWorld")

实时数据监听

连接分两步:先通过 HTTP/HTTPS 请求 /socket.io/1/?t=... 获取 SID, 再连接 ws:// / wss:// 的 /socket.io/1/websocket/<sid>。 协议自动对应 HTTP → WS、HTTPS → WSS;SDK 在 WebSocket 握手中附带同源 Origin,兼容旧版实时服务。

监听地址优先级:用户自定义地址 → 初始化响应的 io → http://io.codenow.cn:3010。 可在初始化前后设置;请用 await 保证设置完成后再连接:

try await Bmob.resetIODomain("https://realtime.example.com:443")
// try await Bmob.resetIODomain(nil) // 恢复使用服务端配置或默认地址

支持 http://、https://、ws://、wss:// 及 host:port(默认 HTTP)。 地址只包含协议、主机和可选端口,SDK 自动拼接握手及 WebSocket 路径。 已经建立连接时,新地址在下次连接或自动重连时生效;需立即切换可先 disconnect() 再 connect()。 disconnect() 会结束现有事件流,切换后需重新获取 eventStream()。 API 请求域名仍通过 Bmob.resetDomain 独立设置。

初始化完成后,保留 BmobEvent 实例,登记订阅并连接:

let event = BmobEvent() // 存为属性,保持生命周期
try await Bmob.initialize(appKey: "YOUR_APP_KEY")
let messages = event.eventStream()
event.listenTableChange(className: "Note") // 表更新,包含表内数据变化
event.listenRowChange(.deleteRow, tableName: "Note", objectId: "row-id")
event.connect()

for await message in messages {
    print(message.action ?? "", message.className ?? "", message.data ?? [:])
}

支持 .updateTable、.deleteTable、.updateRow、.deleteRow,分别使用 listenTableChange(_:tableName:) 或 listenRowChange(_:tableName:objectId:)。 取消订阅使用对应的 cancelListenTableChange / cancelListenRowChange 方法。

也可设置 BmobEventDelegate;回调在主队列执行。bmobEventDidConnect 表示连接建立, bmobEventCanStartListen 表示服务端允许订阅。连接前登记的订阅会在此时自动发送。 默认断线后每 5 秒重连并恢复有效订阅;可设置 autoReconnect = false。 event.disconnect() 停止连接和重连并结束所有事件流,保留订阅供下次连接使用。 重连期间事件流保持开启,但不会补发断线期间的变更;需要完整数据时请重新查询。

线上 Chat 监听测试

Tests/BmobCoreTests/BmobEventChatIntegrationTests.swift 可验证初始化 → 订阅 Chat.updateTable → REST 新增记录 → 接收并核对事件的完整流程。 测试只创建一条带唯一标记的记录,并在结束时删除该记录。默认跳过,显式开启后运行:

export BMOB_EVENT_CHAT_LIVE_TEST=1
export BMOB_EVENT_APP_KEY="YOUR_APP_KEY"
export BMOB_EVENT_REST_KEY="YOUR_REST_API_KEY"
swift test --filter BmobEventChatIntegrationTests

测试断言操作类型、表名、objectId 和新增记录字段;清理失败也会报告测试失败。请勿将真实密钥写入源码或提交到 Git。

文档

完整文档请访问:Bmob Swift SDK 文档

示例项目

coming soon...

版本历史

详见 CHANGELOG

开源协议

本项目基于 MIT 协议开源,详见 LICENSE

支持


Made with ❤️ by Bmob

About

Bmob Swift SDK - 纯 Swift 实现的 Bmob 后端云 SDK,支持 iOS/macOS 双平台,async/await 并发模型

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages