以前、ショートカットを使ってフィットネス記録をブログの個人ステータスに同期する記事を書きました。
しかし実際に使ってみるとかなり不便で、一方でショートカットが長すぎるため、一部の情報を調整する必要がある場合、操作が非常に面倒でした。もう一方で、Appleのオートメーションには固定時間で自動実行するオプションがなく、丸一日の定時同期をカバーするには、5~6個のオートメーションタスクを作成しなければならず、全体的に非常に重くて煩雑でした。そこで、旧正月の間にアプリを作成し、HKObserverQuery + ウィジェットのタイマータスクを使ってデータのバックグラウンド自動プッシュを実現しました。



しかし、無料のApple開発者アカウントを使用しているため、アプリを手動で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 データにアクセスできます。この方法により、Appleの無料開発者アカウントによるサイドローディングで認証ページが表示されない制限をある程度回避できます。
もちろん、この方法で完了した認証が長期的に維持できるかどうかは、今後の観察が必要です。その後の結果が出れば、また更新します。 この方法が長期的に使用できることを確認しました。