我实际上试图将 Apple 的示例代码转换为 swift。
我在开发中心为它创建了一个应用程序和一个 APPID。我检查了 HealthKit 的权利(IAP 和 GC 的权利是灰色的并自动检查)。
当我为其创建的配置文件下载到 Xcode 并进入 Xcode 中的首选项并查看我帐户的配置文件时,我可以看到配置文件的名称加上到期日期,然后有一些权利图标。但是我使用 HealthKit 创建的配置文件没有任何图标,只有 2 个默认图标,这是否正常:
因为由于某种原因,应用程序在请求授权时崩溃并出现此错误:
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:]:无法识别的选择器发送到实例 0x107dc1ce0”
如果我尝试在设备上运行它,我会得到:
我创造了:
- 我的应用的 AppId
- 为 HealthKit 激活 AppID
- 为该 AppID 创建了开发配置文件
- 一般激活的 HealthKit 功能
- 我看到 entitlements.plist 是用 com.apple.developer.healthkit = yes 创建的
- info.plist 确实具有所需功能的 healthkit 值
这次我做的唯一一件奇怪的事情是,当我点击构建/运行某个点时,我让 Xcode 创建了一个 AppID,然后我从 devcenter 获得了这个……我无法上传图像但基本上我以前所有的 AppID 都是以应用程序命名的。这个是因为它是由 xcode 制作的,所以被命名为:Xcode iOS App ID com santiapps SwimFit 但它的包标识符是正确的:com.santiapps.SwimFit。开发配置文件也是如此:iOS Team Provisioning Profile: com.santiapps.SwimFit 及其在我的构建设置中的配置文件。最初我有 SwimFit,因为那是应用程序的名称,所以 Xcode 为它创建了一个自动 AppID,并为它创建了一个 ProvProfile。然后我想也许我应该创建 appID 和 provprofile,所以我手动完成并尝试将其命名为 SwimFit2。两者都给出相同的错误。
我还能错过什么?
这是代码:
//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
}
这是一个带有屏幕截图的链接:http: //youtu.be/BBagkNTpfQA