以前写过一篇文章,使用快捷指令实现将健身记录同步到博客的个人状态中。
但是实际上用下来感觉非常的难受,一方面由于快捷指令太长了,一旦需要对其中部分的信息进行调整,操作会非常非常的麻烦;另一方面,苹果的自动化并没有固定时间自动执行的选项,为了覆盖一整天的定时同步,需要创建五六个自动化任务。整体显得非常笨重且繁琐。所以在过年的这段时间写了一个应用,使用 HKObserverQuery + 小组件定时任务来实现数据的后台自动推送。



但由于我使用的是免费的苹果开发者账户,只能将应用手动打包为 ipa 文件,然后通过 SideStore 进行安装。导致即使声明了 HealthKit entitlements,安装后也不会弹出健康数据授权页面,也就无法访问任何健康数据。网上找了一圈也没什么好的解决方案,一度以为只能每周连接 Xcode 重新构建到手机来给应用续命了。
后面无意中翻到 Reddit 的这个 帖子 ,评论区里有人提到一个思路:通过修改应用的 Bundle ID,让它使用另一个已经存在 App ID 来通过替身的方式绕开 App ID 未过期导致无法安装新应用的问题。
经过尝试,这个方法也适用于解决通过 SideStore 安装的应用无法弹出健康数据授权的问题。具体做法是:通过将 Xcode 项目里的 Bundle ID 改成与最初通过 SideStore 安装该应用时相同的 App ID,然后在 Xcode 里连接真机运行一次,让 Xcode 给这个 App ID 注册 HealthKit capability ,这时候打开应用就可以正常弹出健康数据授权页面并且完成数据的授权。
最后将应用重新构建为 ipa,再用 SideStore 安装后,就能在已授权状态下访问到 HealthKit 数据。这种方法可以在一定程度上绕开苹果免费开发者账户侧载应用不弹授权页面的限制。
当然通过这种方式完成的授权能否长期保持还有待进一步观察。如果后续有新的结果,我会再更新。 该方法确认可以长期使用。