{"id":34636721,"url":"https://github.com/entertech/enter-native-sdk-ios","last_synced_at":"2026-05-25T08:36:44.505Z","repository":{"id":207141612,"uuid":"706056533","full_name":"Entertech/Enter-Native-SDK-iOS","owner":"Entertech","description":"Native Affective Algorithm For iOS","archived":false,"fork":false,"pushed_at":"2025-06-17T02:04:31.000Z","size":28902,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-17T03:19:32.758Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Entertech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-10-17T08:14:26.000Z","updated_at":"2025-06-17T02:04:36.000Z","dependencies_parsed_at":"2024-03-06T10:55:27.223Z","dependency_job_id":null,"html_url":"https://github.com/Entertech/Enter-Native-SDK-iOS","commit_stats":null,"previous_names":["entertech/enter-native-sdk-ios"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Entertech/Enter-Native-SDK-iOS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Entertech%2FEnter-Native-SDK-iOS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Entertech%2FEnter-Native-SDK-iOS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Entertech%2FEnter-Native-SDK-iOS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Entertech%2FEnter-Native-SDK-iOS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Entertech","download_url":"https://codeload.github.com/Entertech/Enter-Native-SDK-iOS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Entertech%2FEnter-Native-SDK-iOS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28005408,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-12-24T17:02:27.753Z","updated_at":"2025-12-24T17:03:40.609Z","avatar_url":"https://github.com/Entertech.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 回车科技iOS情感计算本地算法SDK\n\n- [回车科技iOS情感计算本地算法SDK](#回车科技ios情感计算本地算法sdk)\n  - [版本需求](#版本需求)\n  - [安装](#安装)\n    - [Swift Package Manager](#swift-package-manager)\n  - [使用](#使用)\n    - [使用流程](#使用流程)\n    - [头文件引用](#头文件引用)\n    - [接口头文件查看](#接口头文件查看)\n    - [初始化SDK](#初始化sdk)\n    - [设置授权信息](#设置授权信息)\n      - [授权失败](#授权失败)\n    - [实时数据计算](#实时数据计算)\n      - [数据转化](#数据转化)\n      - [心率计算](#心率计算)\n      - [双通道脑电计算](#双通道脑电计算)\n      - [单通道脑电计算](#单通道脑电计算)\n      - [压电压阻计算](#压电压阻计算)\n    - [报表获取](#报表获取)\n      - [心率报表](#心率报表)\n      - [双通道脑电报表](#双通道脑电报表)\n      - [单通道脑电报表](#单通道脑电报表)\n      - [压电压阻报表](#压电压阻报表)\n      - [睡眠报表](#睡眠报表)\n      - [放松度报表](#放松度报表)\n      - [注意力报表](#注意力报表)\n      - [压力报表](#压力报表)\n      - [心流报表](#心流报表)\n      - [和谐度报表](#和谐度报表)\n      - [愉悦度报表](#愉悦度报表)\n      - [激活度报表](#激活度报表)\n  - [注意事项](#注意事项)\n\n\n回车情感计算根据回车产品采集的脑电、心率以及压电压阻进行数据分析，同时能给出包括：放松度、注意力、愉悦值，压力值、激动度（内测）在内的多种情绪情感值。详情请查看[官网](https://www.entertech.cn/)。\n\n在开始开发前，请先查看回车[开发文档](https://docs.affectivecloud.com/)，了解情感计算算法所能提供的服务具体说明，确定好你的应用中所需要的服务。你还需要联系管理员获取算法授权文件，然后再进行开发。\n\n为了方便你进行 iOS 平台的快速开发，我们提供了情感云快速开发 SDK，通过本 SDK 你可以快速地将情感云的能力集成到你的 app 中。\n\n## 版本需求\n- iOS 14 及以上（不支持模拟器）\n- Xcode 13 及以上\n- Swift 5.5 及以上\n\n## 安装\n### Swift Package Manager\n\nPackage添加下面这行到你的 Package.swift：\n```\n.package(name: \"Enter-Native-SDK-iOS\", url: \"https://github.com/Entertech/Enter-Native-SDK-iOS.git\", from: \"1.0.1\")\n```\n\nProject添加下面的链接到你的 Package Dependencies 中：\n```\nhttps://github.com/Entertech/Enter-Native-SDK-iOS.git\n```\n\n## 使用\n\n### 使用流程\nSDK在使用过程中，按照 初始化-\u003e进行授权-\u003e实时数据计算-\u003e获取报表-\u003e释放（ARC自动释放） 的流程进行。\n\n### 头文件引用\nXCODE 13版本及以上创建的工程可以直接添加以下头文件：\n```\nimport AffectiveAlgorithmSDK_iOS\n```\n早期版本工程可以在Bridge-Header.h中添加以下头文件：\n```\n#import \u003cAffectiveAlgorithmSDK_iOS/AffectiveWrapper.h\u003e\n```\n\n### 接口头文件查看\n所有用到的接口和封装对象都在[AffectiveWrapper.h](https://github.com/Entertech/Enter-Native-SDK-iOS/blob/main/Sources/AffectiveAlgorithmSDK_iOS.framework/Headers/AffectiveWrapper.h)中。\n\n### 初始化SDK\n`AffectiveHandler` 是整个 SDK 的入口类，你需要先初始化 `AffectiveHandler`。\n```swift\nclass Demo {\n    var handler: AffectiveHandler?\n    \n    init {\n        handler = AffectiveHandler()\n    }\n    \n    ......\n}\n\n```\n\n### 设置授权信息\n如果你获得了回车科技的授权，会得到一个授权文件`ENTERTECH_NATIVE_SDK_LICENSE.txt`，你需要将该文件加入工程，然后在初始化 SDK 之前设置授权信息：\n```swift\n    // 获取授权文件路径\n    guard let path = Bundle.main.path(forResource: \"ENTERTECH_NATIVE_SDK_LICENSE\", ofType: \"txt\") else {\n        return false\n    }\n    // 验证授权\n    guard let auth = handler?.auth(fromBundle: path), auth else {\n        //验证失败\n        return false\n    }\n\n```\n\n#### 授权失败\n- 无法找到path\n    - 如果加入了文件还是无法找到path，请检查是否添加了`Copy items if needed`和`Add to targets`。\n- auth 返回false\n    - 确认授权文件是否有改动。\n    \n### 实时数据计算\n将蓝牙数据的回调`Data`类型数据传入，关于蓝牙部分请参考[回车蓝牙SDK](https://github.com/Entertech/Enter-Biomodule-BLE-iOS-SDK.git)\n\n#### 数据转化\n因为算法用Objective-C封装，需要对蓝牙传过来的`Data`类型转化才可使用，此处data为蓝牙回调数据。\n```swift\n    // 心率转化, 心率只有首个字节是有效数据\n    let mutableArray = NSMutableArray()\n    if let hr = data.first {\n        mutableArray.add(NSNumber(value: hr))\n    }\n    \n    // 脑波，压电压阻转化\n    let mutableArray = NSMutableArray()\n    data.forEach { byte in\n        mutableArray.add(NSNumber(value: byte))\n    }\n\n\n```\n\n#### 心率计算\n心率累计3组数据数据进行一次计算并返回结果，不计算时返回nil。\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let hrEnable = handler?.getHREnable(), hrEnable else {\n        return\n    }\n    if let result = handler?.appendHR(mutableArray) {\n        // 此处对 result 进行处理, result 类型`HRAffectiveResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 双通道脑电计算\n双通道脑电累计50组数据进行一次计算并返回结果，不计算时返回nil。\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let eegEnable = handler?.getEEGEnable(), eegEnable else {\n        return\n    }\n    if let result = handler?.appendEEG(mutableArray, isEar: false) {\n        // 此处对 result 进行处理, result 类型`EEGAffectiveResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 单通道脑电计算\n单通道脑电累计30组数据进行一次计算并返回结果，不计算时返回nil。\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let sceegEnable = handler?.getSCEEGEnable(), sceegEnable else {\n        return\n    }\n    if let result = handler?.appendSCEEG(mutableArray, isEar: false) {\n        // 此处对 result 进行处理, result 类型`SCEEGAffectiveResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 压电压阻计算\n压电压阻累计15组数据进行一次计算并返回结果，不计算时返回nil。\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let peprEnable = handler?.getPEPREnable(), peprEnable else {\n        return\n    }\n    if let result = handler?.appendPEPR(mutableArray) {\n        // 此处对 result 进行处理, result 类型`PEPRAffectiveResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n### 报表获取\n完成数据计算后可以获取报表，不进行计算直接获取报表，会得到空报表。\n\n#### 心率报表\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let hrEnable = handler?.getHREnable(), hrEnable else {\n        return\n    }\n    if let report = handler?.getHRReport() {\n        // 此处对 report 进行处理, report 类型`HRReportResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 双通道脑电报表\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let eegEnable = handler?.getEEGEnable(), eegEnable else {\n        return\n    }\n    if let report = handler?.getEEGReport() {\n        // 此处对 report 进行处理, report 类型`EEGReprotResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 单通道脑电报表\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let sceegEnable = handler?.getSCEEGEnable(), sceegEnable else {\n        return\n    }\n    if let report = handler?.getSCEEGReport() {\n        // 此处对 report 进行处理, report 类型`SCEEGReportResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 压电压阻报表\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let peprEnable = handler?.getPEPREnable(), peprEnable else {\n        return\n    }\n    if let report = handler?.getPEPRReport() {\n        // 此处对 report 进行处理, report 类型`PEPRReportResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 睡眠报表\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let sleepEnable = handler?.getSleepEnable(), sleepEnable else {\n        return\n    }\n    if let report = handler?.getSleepReport() {\n        // 此处对 report 进行处理, report 类型`SleepReportResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 放松度报表\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let relaxEnable = handler?.getRelaxationEnable(), relaxEnable else {\n        return\n    }\n    if let report = handler?.getRelaxationReport() {\n        // 此处对 report 进行处理, report 类型`RelaxationReportResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 注意力报表\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let attentionEnable = handler?.getAttentionEnable(), attentionEnable else {\n        return\n    }\n    if let report = handler?.getAttentionReport() {\n        // 此处对 report 进行处理, report 类型`AttentionReportResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 压力报表\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let pressureEnable = handler?.getPressureEnable(), pressureEnable else {\n        return\n    }\n    if let report = handler?.getPressureReport() {\n        // 此处对 report 进行处理, report 类型`PressureReportResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 心流报表\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let flowEnable = handler?.getFlowEnable(), flowEnable else {\n        return\n    }\n    if let report = handler?.getFlowReport() {\n        // 此处对 report 进行处理, report 类型`FlowReportResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 和谐度报表\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let coherenceEnable = handler?.getCoherenceEnable(), coherenceEnable else {\n        return\n    }\n    if let report = handler?.getCoherenceReport() {\n        // 此处对 report 进行处理, report 类型`CoherenceReportResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 愉悦度报表\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let pleasureEnable = handler?.getPleasureEnable(), pleasureEnable else {\n        return\n    }\n    if let report = handler?.getPleasureReport() {\n        // 此处对 report 进行处理, report 类型`PleasureReportResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n\n#### 激活度报表\n```swift\n    // 先判断是否可用， 未通过授权是不可用状态\n    guard let arousalEnable = handler?.getArousalEnable(), arousalEnable else {\n        return\n    }\n    if let report = handler?.getArousalReport() {\n        // 此处对 report 进行处理, report 类型`ArousalReportResOC` 在上方`接口头文件查看`可找到查看入口\n    }\n```\n## 注意事项\n- 注意循环引用等问题引起内存无法释放，会导致内存溢出。\n- 计算过程中释放可能会导致内存错误，请确保没有数据后（大约停止蓝牙给数据1秒后）再进行释放\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fentertech%2Fenter-native-sdk-ios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fentertech%2Fenter-native-sdk-ios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fentertech%2Fenter-native-sdk-ios/lists"}