CodexBar插件开发教程:创建自定义数据处理器

【免费下载链接】CodexBar Show usage stats for OpenAI Codex and Claude Code, without having to login. 【免费下载链接】CodexBar 项目地址: https://gitcode.com/GitHub_Trending/co/CodexBar

CodexBar是一款强大的开源工具,能够帮助开发者无需登录即可查看OpenAI Codex和Claude Code的使用统计数据。本文将详细介绍如何为CodexBar开发自定义数据处理器插件,让你轻松扩展其功能,满足个性化需求。

CodexBar界面展示 图:CodexBar主界面展示,显示各类AI服务的使用统计数据

准备开发环境

在开始开发之前,需要先准备好开发环境。首先克隆CodexBar仓库:

git clone https://gitcode.com/GitHub_Trending/co/CodexBar

然后打开项目文件:

cd CodexBar
open Package.swift

确保你的开发环境满足以下要求:

  • Swift 5.7+
  • Xcode 14.0+
  • macOS 12.0+

了解数据处理器架构

CodexBar的数据处理核心基于Provider模式,每个AI服务都有对应的Provider实现。查看Sources/CodexBar/Providers/Shared/ProviderImplementation.swift文件,你会看到ProviderImplementation协议定义了数据处理器的基本接口。

主要包含以下关键方法:

  • isAvailable(context:) - 检查处理器是否可用
  • detectVersion(context:) - 检测服务版本
  • makeRuntime() - 创建运行时实例
  • settingsToggles(context:) - 提供设置选项

创建自定义数据处理器步骤

步骤1:创建处理器实现类

Sources/CodexBar/Providers目录下创建新的处理器目录,例如MyCustomProvider,并创建MyCustomProviderImplementation.swift文件:

import CodexBarCore
import Foundation

@ProviderImplementationRegistration
struct MyCustomProviderImplementation: ProviderImplementation {
    var id: UsageProvider { .mycustom }
    
    func detectVersion(context: ProviderVersionContext) async -> String? {
        // 实现版本检测逻辑
        return "1.0.0"
    }
    
    func makeRuntime() -> (any ProviderRuntime)? {
        MyCustomProviderRuntime()
    }
    
    // 实现其他必要方法...
}

步骤2:实现数据获取逻辑

创建运行时类MyCustomProviderRuntime.swift,实现数据获取和处理逻辑:

import CodexBarCore
import Foundation

class MyCustomProviderRuntime: ProviderRuntime {
    func fetchUsage() async throws -> UsageSnapshot {
        // 实现数据获取逻辑
        let data = try await fetchDataFromAPI()
        let processedData = processRawData(data)
        return processedData
    }
    
    private func fetchDataFromAPI() async throws -> Data {
        // API调用实现
    }
    
    private func processRawData(_ data: Data) -> UsageSnapshot {
        // 数据处理和转换
    }
}

步骤3:注册处理器

Sources/CodexBar/Providers/Shared/ProviderImplementationRegistry.swift中注册你的处理器:

case .mycustom: MyCustomProviderImplementation()

步骤4:添加设置界面

实现设置界面描述符,让用户可以配置你的处理器:

@MainActor
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
    [
        .init(
            id: "api_key",
            type: .password,
            name: "API Key",
            placeholder: "Enter your API key",
            binding: context.settings.myCustomAPIKey
        )
    ]
}

实现数据解析与处理

CodexBar提供了强大的数据分析工具,你可以使用Sources/CodexBarCore/Vendored/CostUsage/CostUsageScanner.swift中的CostUsageScanner类来解析和处理使用数据。

例如,实现一个自定义扫描器:

extension CostUsageScanner {
    static func scanMyCustomData(_ data: Data) throws -> [CostUsage] {
        let json = try JSONSerialization.jsonObject(with: data) as! [String: Any]
        return json["usage"] as! [[String: Any]].compactMap { item in
            guard let tokens = item["tokens"] as? Int,
                  let cost = item["cost"] as? Double,
                  let timestamp = item["timestamp"] as? TimeInterval else {
                return nil
            }
            return CostUsage(
                timestamp: Date(timeIntervalSince1970: timestamp),
                tokens: tokens,
                cost: cost,
                model: item["model"] as? String ?? "unknown"
            )
        }
    }
}

测试你的数据处理器

创建测试文件Tests/CodexBarTests/MyCustomProviderTests.swift,编写单元测试:

import XCTest
@testable import CodexBar

class MyCustomProviderTests: XCTestCase {
    func testFetchUsage() async throws {
        let implementation = MyCustomProviderImplementation()
        guard let runtime = implementation.makeRuntime() as? MyCustomProviderRuntime else {
            XCTFail("Runtime should be MyCustomProviderRuntime")
            return
        }
        
        let usage = try await runtime.fetchUsage()
        XCTAssertNotNil(usage)
        XCTAssertGreaterThan(usage.tokens, 0)
    }
}

处理权限与安全

如果你的处理器需要访问敏感数据,需要配置钥匙串访问权限。参考docs/keychain-allow.png设置适当的权限。

钥匙串访问设置 图:配置钥匙串访问权限,确保安全存储敏感数据

打包与分发

完成开发后,使用以下命令构建插件:

./Scripts/package_app.sh

生成的插件将位于build/Release目录下。你可以将其分享给其他CodexBar用户,或提交PR将你的处理器合并到主项目中。

总结

通过本文介绍的步骤,你可以轻松创建自定义数据处理器,扩展CodexBar的功能。无论是集成新的AI服务,还是优化现有数据处理逻辑,CodexBar的插件架构都能满足你的需求。开始动手开发吧,为CodexBar生态系统贡献自己的力量!

【免费下载链接】CodexBar Show usage stats for OpenAI Codex and Claude Code, without having to login. 【免费下载链接】CodexBar 项目地址: https://gitcode.com/GitHub_Trending/co/CodexBar

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐