ImagePicker を操作すると「Lost connection to device.」とだけ言い残して強制終了するの?|iOS|Flutter


Flutter で写真を取ってくるライブラリに ImagePicker 0.8.7+4 を使っているけど、Android で好調だったから iOS でも使ってみたら、カメラ撮影とギャラリーからの選択のときに「Lost connection to device.」とだけ言い残してアプリが強制終了した…何のログも無しに…どゆこと?


#権限を付与しようね?

ちゃんと公式の Installation に、しかも冒頭に書いてあった。強制終了はこれが原因。我ながら恥ずかしいな…。

Add the following keys to your Info.plist file, located in <project root>/ios/Runner/Info.plist

  • NSPhotoLibraryUsageDescription - describe why your app needs permission for the photo library.
  • NSCameraUsageDescription - describe why your app needs access to the camera.

カメラ撮影やギャラリーへのアクセスには、ちゃんと権限を付与しないといけなくて、それはスマホ上でユーザに許可を求める仕様になっているよ。


#目的は何て説明する?

で、そのときにユーザへ表示される文言(権限付与の目的)が、開発者の自由記述だから、これは悩んじゃうね。例えば、公式の実装サンプルだと、以下になっているけど。

  • <key>NSCameraUsageDescription</key>
  • <string>Used to demonstrate image picker plugin</string>
  • <key>NSPhotoLibraryUsageDescription</key>
  • <string>Used to demonstrate image picker plugin</string>

ちぇっ、これらは真似できない。だって「demonstrate(デモンストレーション)」って言っちゃっているし。


…他に調べた感じだと、英語圏では、

  • <key>NSCameraUsageDescription</key>
  • <string>Access to take a photo by camera</string>
  • <key>NSPhotoLibraryUsageDescription</key>
  • <string>Access to pick a photo</string>

~する為のアクセス」とか。で、日本語圏でやたらに多かったのが、これ、

  • <key>NSCameraUsageDescription</key>
  • <string>This app requires to add file to your camera</string>
  • <key>NSPhotoLibraryUsageDescription</key>
  • <string>This app requires to access your photo library</string>

~必要がある」なんだけど、皆、絶対に誰かのコピペして使っているよね…これさ、カメラの文言、変だよ英語。皆で間違えたのコピペしまくりじゃん。

あとは、こんなのもあった、

  • <key>NSCameraUsageDescription</key>
  • <string>Camera Library Access Warning</string>
  • <key>NSPhotoLibraryUsageDescription</key>
  • <string>Photo Library Access Warning</string>

~へのアクセスに関する警告」って、権限付与の目的を説明できてなくないかな。


#ChatGPT の出番じゃない?

こういう提案こそ ChatGPT の出番だと思うの。

  • <key>NSCameraUsageDescription</key>
  • <string>Access is required to take a photo by camera</string>
  • <key>NSPhotoLibraryUsageDescription</key>
  • <string>Access is required to pick a photo</string>

ほうほう、「~するにはアクセス権限が必要です」だってさ。これ採用!


#関連する記事


#参照した記事


#直近に読んでいて面白かった漫画

コメント

このブログの人気の投稿

Android SDK バージョン(コンパイルに使用する Android API レベル)を変更するの?|compileSdkVersion|SDK|Android|Flutter