以前に、ショートカットを使ってフィットネス記録をブログの個人ステータスに同期する記事を書いたことがある。
しかし実際に使ってみるととても使いづらかった。一方でショートカットが長すぎて、一部の情報を調整する際の操作が非常に面倒だった;もう一方で、Appleの自動化には固定時刻で自動実行するオプションがなく、一日中の定時同期をカバーするために5〜6個の自動化タスクを作成する必要があった。全体として非常に重く繁雑に感じられた。そこで、正月の期間にアプリを書いて、HKObserverQuery + ウィジェットの定期タスクを使ってデータのバックグラウンド自動プッシュを実現した。



しかし、私は無料のApple開発者アカウントを使っているため、アプリを手動でipaファイルにパッケージングし、SideStoreを通じてインストールするしかなかった。そのため、HealthKitのentitlementsを宣言していても、インストール後にヘルスデータの認可画面が表示されず、どんなヘルスデータにもアクセスできなかった。ネットで調べても良い解決策は見つからず、週に一度Xcodeで再ビルドしてiPhoneに入れ直すしかないと思い込んでいた。
その後、Redditのこの投稿を偶然見つけた。コメント欄で誰かがアイデアを挙げていた:アプリのBundle IDを変更して、既存の別のApp IDを使うことで、App IDの有効期限が切れていないために新しいアプリがインストールできない問題を回避する、というものだった。
試してみると、この方法はSideStoreでインストールしたアプリでヘルスデータ認可画面が出ない問題の解決にも使えた。具体的な手順は:XcodeプロジェクトのBundle IDを、最初にSideStoreでそのアプリをインストールしたときのApp IDと同じものに変更し、Xcodeで実機を接続して一度実行し、そのApp IDにHealthKit capabilityを登録させる。これでアプリを開くと正常にヘルスデータ認可画面が表示され、データの認可を完了できる。
最後にアプリを再びipaとしてビルドし、SideStoreでインストールすると、認可済みの状態でHealthKitデータにアクセスできる。この方法は、無料のApple開発者アカウントでサイドロードしたアプリが認可画面を出さない制限をある程度回避できる。
もちろん、この方法で完了した認可が長期間維持できるかはまだ観察が必要だ。今後新しい結果が出たら、また更新する予定だ。 この方法は長期間使用できることが確認された。