Build a great Lock Screen camera capture experienceを見て。メモ:

目覚まし時計破壊衝動
·
公開:2024/6/30

正式名称は、

Locked Camera Capture Frame work

Locked camera capture extension

  • カメラ撮影の良い体験

  • capture extensionのライフサイクル

カメラの起動動線:

  • この拡張機能は、コントロールセンターのコントロール、アクションボタンに割り当てられたコントロール、またはロック画面のコントロールから起動できます。

  • カメラで撮影した写真は、どこへ行くのか?

    • 写真やビデオのアセットを直接フォトライブラリに追加するか、ファイルシステム上の提供されたディレクトリにキャプチャを表すデータを保存できます。

    • 特定のディレクトリにデータを保存することができる。

    • 一旦、保存だけっぽいが、サーバーへのデータ送信はどのように行うのか?

  • カメラで撮影後は?

    • データを保持したまま、アプリを開くことができると思うので、そのままanyレシちゃれ送信画面まで持っていくことはできそうかも。

    • そのタイミングで、OCRをチェックするなども可能かも?

  • 拡張機能を使用する場合に、カメラが表示されない場合は、アプリが自動で終了する

    • 📝 カメラを必ず使わせ、不本意な使用方法を使われないようにしているのかな?

  • AVCaptureEventInteractionを使用して、ハードウェアボタンで撮影できるようにするといい

    • 📝現状のレシチャレは、できるようになっていないため、お手隙でしれっと導入してもいいかも?

  • できないこと

    • ネットワークのアクセスは制限される

      • 📝API通信は、もちろんできない感じ?

    • 他の拡張機能のグループコンテナにはアクセスできない

      • 📝ウィジェットにアクセスできないってことかな?

  • キャプチャー機能のコンテナの中に、他のデータを保持するのは非推奨

    • コンテナが破棄されるタイミングが、予想できないため、データが消えてしまう恐れがある。

  • セッションディレクトリに保存されたデータは、アプリ側からそのデータを削除することができるっぽい

    • 📝わざわざ、アプリケーションコードから削除しないと、影響が強く出る?

    • 📝自動で消してくれないのか?

  • テンプレートが、すでにXcode上で用意されている

  • アプリケーションのカメラのアクセス権限が許可されていないと、ロック画面から使用することはできず、即座にロック解除が求められる。

  • 写真を撮影した後、openApplication(for:) を使用することで、アプリケーションを開くことができる。

    • ネットワーク通信を行うためには、アプリを開かないといけないので、この関数を呼ぶのはマストになりそう。

  • コントロールセンターからアクセスできるようにするためには、別途、WidgetExtensionでUIを作成する必要がある。

  • CameraCaptureIntentという機能を利用して、現状ロック状態か否かを判断して、拡張機能を利用するか、アプリケーションを直接起動するかを判断できるようになる

    • 📝確かに、ロック解除状態なのに、制限付きの状態でアプリを開くのは、意味がわからないので、確実にやる必要がありそう。

    • 📝要は、拡張機能とアプリの橋渡しも行ってくれるところ

  • このインテントで拡張機能またはアプリケーションを起動できるようにするには、CameraCaptureIntentをウィジェット拡張機能、コントロールで使用できるようにするためのインテント、拡張機能、アプリケーションの3つのターゲットすべてに含める必要があります。

    • 以下の三つってこと?

      • ウィジェット

      • 拡張機能のインテント

      • アプリケーション

  • CameraCaptureIntentで、アプリと拡張機能間で設定などを共有することもできるが、データの制限があるので注意すること

    • 🤔何か、データを受け渡すことで実現できるものはあるか、そもそもどこまでできる?

    • 📝データ量を増やすと、スムーズなキャプチャ体験に悪影響が出るので、注意すること

  • ClownTownCaputureIntent.appContextから、アプリコンテキストの設定を持ってきて、ClownTownUiState.shared.adding,,,,に対して、値を反映している

  • これは多分、UIに最新のappContextの値を反映しているやつ

  • 🤔AppContextが、拡張機能、アプリ両方から見ることができる値のはず

  • ざっくり、導入するためにやること

    • アプリにウィジェット拡張を追加し、コントロールを定義します。

    • それに加えて、カメラキャプチャインテントを実装し、コントロールに提供します。

    • また、アプリと拡張機能のターゲットに含めます

  • この辺り、実践する

  • https://developer.apple.com/tutorials/swiftui-concepts/creating-a-custom-input-control-that-binds-to-a-value

    • キャプチャ起動をするコントロールの作りかたについて

  • https://www.youtube.com/watch?v=REGJcedvheE

    • AppIntentについて

  • 使用するためには、カメラ使用の説明を追加する必要がある。

  • 拡張機能からアプリケーションを開く際には、NSUserActivity につっこんだ値を持っていくことができる

  • アプリケーション側からは、LockedCameraCaptureManagerのsessionContentURLsを通じて、拡張機能でキャプチャされたデータの保存コンテナのURLを取得することができる。

まとめたリンク

https://www.notion.so/6e7c386402774b7291e834027525c525