BETA

接触確認アプリをSwiftに移植する その2

投稿日:2020-07-10
最終更新:2020-07-10

厚生労働省が公開した接触確認アプリのベースであるCovid19RadarをSwiftへ移植してみます。

前回はUIの移植まで実施したので、裏側のロジック部分を実装しました。Xamarin版をフォークした以下のブランチにコミットしてあります。

https://github.com/watanabetoshinori/Covid19Radar/tree/NativeSwift

実装内容をXamarin版と比較して検証できるようにするため、基本方針としてはXamarin版と同じクラス構成、関数構成になることを意識して移植しています。ただし、本アプリの規模と機能に対してプロジェクトのファイル数が多すぎるように感じたため、ロジックを持たないViewModelやあまり必要性を感じないServiceについては省略しています。また、手元の環境ではAPIサーバーを稼働させることができていないため、サーバー連携箇所についてはダミー実装となっています。

AppleとGoogleが共同開発したCOVID-19のExposure Notification(暴露通知)フレームワークはXamarin版ではXamarin Componentとしてラップされています。そのため、アプリからは直接 Exposure Notificationフレームワークを操作する必要がありません。Swiftへの移植では前述の基本方針に従いXamarin版と同じ構成にするため、 Xamarin Component内で実装されている機能まで移植する必要がありました。async/await/クロージャーが組み合わされた箇所もあったため、Swiftとしては処理の流れを把握しづらい実装となってしまいました。

Exposure Notificationフレームワークについては開発や使用する際にはAppleへの申請が必要というハードルもあります。許可された組織や開発者しかフレームワークを使用できないため、Xamarin版ではフラグによりExposure NotificationをラップしているクラスのAPIをモック化することで対応されていました。

// For debug mode, set the mock api provider to interact  
// with some fake data  
Xamarin.ExposureNotifications.ExposureNotification.OverrideNativeImplementation(new Services.TestNativeImplementation());  

Swift版ではラップしているクラスではなく、ExposureNotificationフレームワーク自体のモッククラスを作成することで対応しています。

今回はXamarin版を意識しましたが、もしもゼロベースでSwift実装するのであればExposure Notificationに関連する処理はAppleのサンプルアプリを流用できそうです。Exposure Notificationに関連する処理を除くと、あとはほとんど機能を持たない画面で構成されているので、Swiftでのアプリ開発経験があれば難なく実装できるはずです。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

⭐オススメ技術ブログ⭐

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう