You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用iOS模拟器调用HealthKit时无法解决错误代码4问题

求助:iOS模拟器上HealthKit提交正念数据时出现Code=4错误

我在macOS Ventura beta系统上用Xcode beta开发跨平台应用,想通过HealthKit提交正念分钟数据,但一直运行异常。已经创建了仅包含核心功能的极简应用,问题依然存在。

应用核心代码(ContentView)

import SwiftUI
import HealthKit

struct ContentView: View {

// You need only a single HealthKit store per app. These are long-lived objects; you create the store once, and keep a reference for later use.
let myHealthStore = HKHealthStore()
let typestoRead = Set([HKObjectType.categoryType(forIdentifier: HKCategoryTypeIdentifier.mindfulSession)!])
let mindfulType = HKObjectType.categoryType(forIdentifier: .mindfulSession)

@State var message: String?

var body: some View {
    NavigationView {
        if HKHealthStore.isHealthDataAvailable() {
            Text("Health Data Available")
        } else {
            Text("Health Data NOT Available")
        }
        Button(action: {
            print("Setting 1 minute Mindfulness")
            let startTime = Date()
            let endTime = startTime.addingTimeInterval(2.0 * 60.0)
            print("From \(startTime) until \(endTime).")
            
            // Create a mindful session with the given start and end time
            let mindfullSample = HKCategorySample(type:mindfulType!, value: 0, start: startTime, end: endTime)

            // Save it to the health store
            myHealthStore.save(mindfullSample, withCompletion: { (success, error) -> Void in
                print("in completion")
                if error != nil {
                    print("error: \(error!)")
                    message = "Failure: \(error!)"
                    return
                }
                
                print("New data was saved in HealthKit: \(success)")
                message = "Success: \(success)"
            })
        }, label: {
            Text("Set 1 Minute Mindfulness")
        })
        .buttonStyle(.bordered)
        Divider()
        Text(message ?? "No Message.... yet")
    }
    .onAppear() {
        print("ContentView appears")
        myHealthStore.requestAuthorization(toShare: [], read: typestoRead) { (success, error) -> Void in
            if(success){
                // Read or write the HealthKit data
                print("success: \(success)")
            }
            else{
                // Authorization failure
                print("error: \(error!)")
            }
        }
    }
}
}

已完成的配置

  • Info.plist中添加了以下权限描述:
    • Privacy - Health Records Usage Description
    • Privacy - Health Update Usage Description
    • Privacy - Health Share Usage Description
  • Target>Signing & Capabilities中添加了HealthKit,并勾选了Background Delivery

当前错误情况

  • 在iPad或Mac上运行时,出现错误代码1:Health data is unavailable on this device,属于正常情况
  • 在iOS模拟器上运行时,出现错误代码4:
    Error Domain=com.apple.healthkit Code=4 "Missing application-identifier entitlement" UserInfo={NSLocalizedDescription=Missing application-identifier entitlement}
    

已经尝试过卸载重装模拟器应用、更换模拟器、创建全新极简应用,问题依旧。请问遗漏了哪些配置?有哪些解决HealthKit访问问题的建议?


解决方案

1. 检查Apple Developer后台的App ID配置

登录Apple Developer后台,找到对应App ID,确认HealthKit已启用。部分情况下Xcode自动同步Capabilities会出现延迟,手动确认后重新同步能解决权限验证问题。

2. 修复项目Entitlements文件

  • 确保项目中存在*.entitlements文件,且已关联到Target的Signing & Capabilities模块
  • 在entitlements文件中添加application-identifier字段,值设为$(TeamIdentifierPrefix)$(CFBundleIdentifier),保持和Xcode自动生成的一致
  • 确认healthkit字段已设为true,同时添加com.apple.developer.healthkit.write数组,包含HKCategoryTypeIdentifier.mindfulSession(写入数据需要明确权限)

3. 修正授权请求逻辑

当前代码中requestAuthorization的toShare参数为空,但写入正念数据需要将对应类型加入共享集合:

let typesToShare = Set([mindfulType!])
myHealthStore.requestAuthorization(toShare: typesToShare, read: typestoRead) { (success, error) -> Void in
    // 原有逻辑不变
}

空的共享集合会触发权限验证异常,也是导致Code=4错误的常见原因。

4. 清理缓存并重新签名

  • 执行Cmd+Shift+K清理项目缓存,再执行Cmd+Option+Shift+K清理构建文件夹
  • 重启Xcode和模拟器,重新构建运行
  • 若问题仍存在,删除Xcode的Derived Data:前往~/Library/Developer/Xcode/DerivedData,删除对应项目的文件夹

5. 注意Beta版本兼容性

由于使用的是macOS Ventura beta和Xcode beta,工具或系统的bug可能引发此类问题:

  • 更新到最新的Xcode beta版本
  • 优先在真实iOS设备上测试(模拟器对HealthKit的支持有限,部分功能仅真机可用)

内容的提问来源于stack exchange,提问作者Kyra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:50:26