【ISSUE】Flutter - iOSアプリでライセンスplistを半自動で生成して設定画面に表示できるライブラリを作りました

0

2024年12月23日 17:28

Dart, Flutterで車輪の再開発をしてみました

Swiftでは @mono0926 さんが作った LicensePlist がありますが、Flutterを使ったiOSアプリでは同等のライブラリが存在しなかったので、Dartで作成してみました。

@mono0926 さんの該当記事はこちら

https://qiita.com/mono0926/items/973752b69c881e00c507#comment-3060a817c4ba199567b9

今回作成したライブラリの置き場所はこちらです。
今回はiOSのみの対応でAndroidは対応できてないです。今後対応する予定はありますが、いい感じの実装方法が思い浮かんでないので、誰か助言を...。

https://github.com/nomunomu0504/dart_license_plist

https://pub.dev/packages/dart_license_plist


動作結果としては、LicensePlistとほぼ同じになるように寄せました。
(このレイアウトが一番しっくり来てて他のレイアウトがしっくり来なかったので🥺)

iOSの設定画面から対象アプリを選択すると、「謝辞」セクションが表示されるようになるので、謝辞セクションから下記画面へ遷移することができるようになります。

ライブラリのライセンス一覧各ライブラリのライセンスページ
163102442-bb08d148-625e-439a-86c2-b3f433e11c2f.png163102488-b39bf74f-ea6f-4b2f-86ee-018996dbbb59.png

使い方 / Usage

dart_license_plistの有効化

dartコマンドを使って dart_license_plist を有効化します。
img

Settings.bundleファイルの作成

※ すでにSettings.bundleが作成されている場合には、実行不要です。

ライセンス一覧生成前に、iOSでは設定画面に謝辞セクションを表示させるために必要な、Settings.bundle ファイルを作成します。このファイルはXcodeから作成する必要があります。

FlutterプロジェクトのiosフォルダにあるRunner.xcworkspaceを開き、ios/RunnerフォルダにSettings.bundleを作成します。

FileNewFile... → Select Settings.bundle

Settings.bundleを作成すると、bundle内にRoot.plistというファイルが存在しますが、デフォルト状態だとテンプレートが記入されているので、以下のように書き換えておきます。

img

ライセンスPlistの生成

dart_license_plistはFlutterプロジェクトのプロジェクト直下で実行します。
このコマンドを実行すると、上記で生成したSettings.bundle内にファイルを生成したりします。

設定画面に「謝辞」セクションを表示するために、Root.plistを編集する処理も含まれています。

img

実行するとプロジェクト直下にあるpubspec.lockを元に使用しているライブラリを取得して、ライセンスデータを取得しに行きます。 Generate Finishedが表示されたらplist生成の完了です。

取得に失敗したパッケージに関しては、最後にエラーとしてパッケージ名が一覧で表示されます。

img

実行後のSettings.bundle内の構成は以下のようになっているかと思います。
img

Flutterアプリを再Buildして端末にインストールすると、設定画面から謝辞およびライセンスを確認することができます。

実行時のオプション

実行時のオプションとして指定できるのは、以下の項目になります。

optionvaluedescription
--version, -v-dart_license_plistのversionを確認できます。
最新バージョンが存在した場合には、updateを行うこともできます。
--verbose-デフォルトはINFO, ERRORのログのみですが、
verboseオプションを使うことで、DEBUGログも表示できるようになります。
--custom-license-yaml=valueyaml path (string)plist生成時の設定および、カスタムライセンスの設定等を記述したyamlファイルのパスを指定できます。

--custom-license-yamlオプション

custom-license-yamlで設定できる項目として、現状ではライセンス一覧に表示しないパッケージを指定できるexcludeと、カスタムライブラリを設定できるpackagesの2つになります。

yamlファイルのテンプレートはこんな感じになります。
img

設定ファイルが読み込まれている場合、コマンド実行時に読み込んでいるデータが表示されます。
img

excludeとpackagesに同じパッケージが設定されていると、エラーが表示されますので確認して修正してください。

exclude

excludeには、ライセンスデータのフェッチをスキップするパッケージ名を指定します。
img

設定されているパッケージのライセンスデータを取得する際に、スキップされるようになります。
img

packages

packagesでは、パッケージとして使っていないがライセンスとして載せたい場合に設定すれば、ライセンス一覧に表示できるようになります。
flutterはpub.devにライセンス情報はなく、Githubのライセンスを掲載する必要があります。
※ 本当はここらへんも自動でできるようになればいいんですが、実装できていません🙇‍♂

ここで設定されているライセンス情報は、pub.devとかから取得したライセンス情報よりも優先して利用されます。
img
[cv:issue_marketplace_engineer]

0

診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。