2014-10-02 4 views
2

실제로 Apple의 샘플 코드를 신속하게 변환하려고합니다.HealthKit을 사용하여 Xcode6.0.1에서 iOS8 앱이 작동을 멈 춥니 다.

devcenter에 앱과 APPID를 만들었습니다. 건강 키트 (IAP & GC에 대한 자격이 회색으로 표시되고 자동으로 검사 됨)에 대한 자격을 확인했습니다.

내가 생성 한 프로비저닝 프로파일을 Xcode로 다운로드 한 후 Xcode의 환경 설정으로 이동하여 내 계정의 프로비저닝 프로파일을 보면 프로필 이름과 만료일을 볼 수 있으며 권한 부여를위한 아이콘이 표시됩니다 . 하지만 HealthKit로 만든 프로비저닝 프로파일이 그것을 위해 어떤 아이콘, 바로이 기본 사람을 나던하면이 정상입니다 :

xcode preferences

때문에 어떤 이유로이 오류와 함께 승인을 요청시 응용 프로그램 충돌에 대한 :

2014-10-02 12 : 16 : 13.241 SwimFit [549 : 8824] - [__ NSCFConstantString _allowAuthorizationForSharingWithEntitlements :] : 인식 할 수없는 선택자가 인스턴스 0x107dc1ce0에 전송되었습니다. 2014-10-02 12 : 16 : 13.251 SwimFit [549 : 8824] ** * 캐치되지 않은 예외 'NSInvalidArgumentException'으로 인해 앱 종료 중, 이유 : '- [__ NSCFConstantString _allowAuthorizationForSharingWithEntitlements :] 내가 만든

on device

:

  1. APPID 내 응용 프로그램
  2. 을 위해 : 나는이 얻을 장치에서 실행하려고하면 인식 할 수없는 선택기 인스턴스 0x107dc1ce0 '

    로 전송

  3. HealthKit의 해당 AppID가 활성화 됨
  4. 해당 AppID에 대해 작성된 Dev 프로비저닝 프로파일
  5. 일반
  6. 활성화 HealthKit 기능 나는 entitlements.plist가 com.apple.developer.healthkit로 만들어 볼
  7. = 예
  8. 의 Info.plist 필요한 기능

의 healthkit 값을 가지고 내가이 시간에했던 이상한 일과 내가 다른 애플 리케이션을 위해 다르게 사용했던 것은 내가 build/run을 클릭했을 때 Xcode가 AppID를 생성하게하고 devcenter에서 이것을 얻도록했다는 것이다. 나는 이미지를 업로드 할 수 없다. 기본적으로 내 모든 이전 AppID는 앱 이름을 따서 지정됩니다. 이것은 xcode로 만들어 졌기 때문에 다음과 같습니다. Xcode iOS App ID com santiapps SwimFit하지만 번들 식별자는 com.santiapps.SwimFit에서 정확합니다. dev 프로필도 마찬가지입니다. iOS 팀 프로비저닝 프로필 : com.santiapps.SwimFit 및 빌드 설정의 프로필입니다. 원래는 SwimFit이 앱의 이름 이었기 때문에 Xcode가 ProvProfile과 함께 자동 AppID를 만들었습니다. 나는 아마도 appID와 provprofile을 만들어서 수동으로 만들어서 SwimFit2라고 부르려고했다고 생각했다. 둘 다 같은 오류가 발생합니다.

내가 누락 될 수있는 다른 방법이 있습니까?

답변

4

http://youtu.be/BBagkNTpfQA 내가 어제 같은 충돌을했다 :

여기
//1. Add healthstore property 

    var healthStore: HKHealthStore? //error if not optionally unwrapped 
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     //2. Ask for permissions 

     if (HKHealthStore.isHealthDataAvailable() == true) { 
      self.healthStore = HKHealthStore() //needs to be var for it to work? 
      var writeDataTypes = self.dataTypesToWrite() 
      var readDataTypes = self.dataTypesToRead() 
      self.healthStore!.requestAuthorizationToShareTypes(writeDataTypes, readTypes: readDataTypes, completion: { (success: Bool, error: NSError!) -> Void in 
       if (!success) { 
         NSLog("You didn't allow HealthKit to access these read/write data types. In your app, try to handle this error gracefully when a user decides not to provide access. The error was: %@. If you're using a simulator, try it on a device.", error) 
        return 
        } else { 
         NSLog("success") 
        } 
       // Handle success in your app here. 
       self.setupHealthStoreForTabBarControllers() 
      }) 
     } 
     return true 
    } 

에 화면 캡처 링크입니다 : 여기

는 코드입니다. 문제는 데이터 형식에 대해 잘못된 데이터 형식 ( NSString)을 메서드에 넣었습니다.

requestAuthorizationToShareTypes 방법은 내 경우 HKQuantityType 객체에 HKBaseType 개체의 집합을 전달할 수 있어야합니다.

그래서 대신 :

[_healthStore requestAuthorizationToShareTypes:[NSSet setWithObject:HKQuantityTypeIdentifierBodyMassIndex] 
              readTypes:[NSSet setWithArray:inputDataTypes] 
              completion: 

사용이 하나

HKQuantityType* type = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMassIndex]; 
[_healthStore requestAuthorizationToShareTypes:[NSSet setWithObject:type] 
              readTypes:[NSSet setWithArray:inputDataTypes] 
              completion: 
관련 문제