아빠 체중기록부 앱에서 보건 앱으로 체중계를 옮겨봤습니다.

14997 단어 SwiftHealthKit

개시하다


예전 아이폰4s 시대인가 봐요. 체중기록에 소프트웨어은행아버지 체중기록부이라는 앱이 발표돼 체중계로 측정한 결과를 기록했습니다.

이후 한동안 헬스키트는 블루투스 합동 체중계로 바꿔 보건 앱에 체중을 기록할 수 있었지만, 과거 기록이 있어 아버지 체중기록부를 뗄 수 없는 상황이 수년간 이어졌다.
응용 프로그램의 분리를 위해서, 나는 옮길 수 있는지 없는지를 고려했다.

내보내기


알았어. 아빠 체중기록부 앱으로 내보낼 수 있어.

파일에 저장한 후 iCloud 드라이브를 통해 맥으로 내보냅니다.

내보낸 파일 내용



database.weightlog라는 파일을 출력합니다.
plist 형식의 파일인 것 같습니다.
Aray와 Dictionary 형식으로 날짜와 weight 두 키로 수치를 저장합니다.

파일의 읽기 값 가져오기


이번에는 프로젝트 내에서 이 데이터 베이스를 사용합니다.weightlog 가져오기
우선 데이터를 저장하는 weight 등급을 만들었다.
저장할 때 날짜는 문자열에서 Date 형식으로 변환됩니다.몸무게도 문자열에서 더블 형태로 분배된다.
class weight: NSObject {
    var date:Date?
    var value:Double?

    init(date:String , value:String) {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy/MM/dd"
        formatter.locale = Locale(identifier: "ja_JP")
        self.date = formatter.date(from: date)
        self.value = Double(value)
    }
}
다음에 파일을 불러오고 저장해 보십시오.
우선 저장에 사용할 배열을 만듭니다.
    private var weightArray:[weight] = []
파일을 weight 클래스로 저장합니다.
        if let path = Bundle.main.path(forResource: "database", ofType:"weightlog" ) {
            if let dictArray = NSArray(contentsOfFile: path) {
                for item in dictArray {
                    if let dict = item as? NSDictionary {
                        let d = dict["date"] as! String
                        let w = dict["weight"] as! String
                        let value = weight(date: d, value: w)
                        weightArray.append(value)
                    }
                }
            }
        }

HealthKit에 등록


차리다


프로젝트 설정에서 HealthKit를 ON으로 설정합니다.

권한의 취득


우선 HealthKit를 사용하려면 라이센스가 필요합니다.
라이센스를 받은 이유는 Info입니다.plist에 기재합니다.

그리고 허가를 받습니다.이번에는 읽을 필요가 없지만 체중 정보를 표시하는 .bodyMass를 지정했다.

    private func requestAuthorization() {
        // 書き込みを許可する型.
        let typeOfWrites: Set<HKSampleType> = [HKSampleType.quantityType(forIdentifier: .bodyMass)!]
        // 読み込みを許可する型.
        let typeOfReads: Set<HKSampleType> = [HKSampleType.quantityType(forIdentifier: .bodyMass)!]

        //  HealthStoreへのアクセス承認をおこなう.
        myHealthStore.requestAuthorization(toShare: typeOfWrites, read: typeOfReads, completion: { (success, error) in
            if let e = error {
                print("Error: \(e.localizedDescription)")
                return
            }
            print(success ? "Success!" : " Failure!")
        })
    }

헬스키트에 몸무게 체크인


실제 내보낸 체중 정보를 등록합니다.
Aray에서 꺼내서 하나씩 등록하세요.
    @IBAction func writeButtonAction(_ sender: Any) {
        for w in weightArray {
            writeData(weight: w.value!, date: w.date!)
        }
    }
    private func writeData(weight: Double , date:Date) {
        // 体重のタイプ.
        let typeOfWeight = HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bodyMass)
        // 体重データを作成(Kg->gに変換する).
        let myWeight = HKQuantity(unit: HKUnit.gram(), doubleValue: weight * 1000)
        // StoreKit保存用データを作成.
        let myWeightData = HKQuantitySample(type: typeOfWeight!, quantity: myWeight, start: date, end: date)

        // データの保存.
        myHealthStore.save(myWeightData, withCompletion: { (success, error) in
            if let e = error {
                print("Error: \(e.localizedDescription)")
            }
            print(success ? "Success!" : " Failure!")
        })
    }

최후


나는 각양각색의 사이트를 참고하여 등록했다.
원본 데이터는 날짜만 있고 시간이 없기 때문에 당일 0:00에 등록합니다.
소스 코드 세트Github가 공개되었으니 참고하세요.
간단하지만 그게 다야.

사이트 축소판 그림


아래 사이트를 참고하게 해 주세요.감사합니다.
  • HealthStore의 체중 데이터 읽기 및 쓰기
  • plist에서 데이터를 읽는 swift3.0
  • [Swift] 데이트의 왕도 [날짜]
  • [애플워치] 30분 동안 만든 헬스 워치OS 앱.
  • 좋은 웹페이지 즐겨찾기