【ISSUE】Flutter - iOSアプリでライセンスplistを半自動で生成して設定画面に表示できるライブラリを作りました
2024年12月23日 17:28
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の設定画面から対象アプリを選択すると、「謝辞」セクションが表示されるようになるので、謝辞セクションから下記画面へ遷移することができるようになります。
ライブラリのライセンス一覧 | 各ライブラリのライセンスページ |
---|---|
dartコマンドを使って dart_license_plist
を有効化します。
※ すでにSettings.bundleが作成されている場合には、実行不要です。
ライセンス一覧生成前に、iOSでは設定画面に謝辞セクションを表示させるために必要な、Settings.bundle
ファイルを作成します。このファイルはXcodeから作成する必要があります。
Flutterプロジェクトのios
フォルダにあるRunner.xcworkspace
を開き、ios/Runner
フォルダにSettings.bundleを作成します。
File → New → File... → Select Settings.bundle
Settings.bundleを作成すると、bundle内にRoot.plist
というファイルが存在しますが、デフォルト状態だとテンプレートが記入されているので、以下のように書き換えておきます。
dart_license_plist
はFlutterプロジェクトのプロジェクト直下で実行します。
このコマンドを実行すると、上記で生成したSettings.bundle
内にファイルを生成したりします。
設定画面に「謝辞」セクションを表示するために、Root.plist
を編集する処理も含まれています。
実行するとプロジェクト直下にあるpubspec.lock
を元に使用しているライブラリを取得して、ライセンスデータを取得しに行きます。 Generate Finished
が表示されたらplist生成の完了です。
取得に失敗したパッケージに関しては、最後にエラーとしてパッケージ名が一覧で表示されます。
実行後のSettings.bundle
内の構成は以下のようになっているかと思います。
Flutterアプリを再Buildして端末にインストールすると、設定画面から謝辞およびライセンスを確認することができます。
実行時のオプションとして指定できるのは、以下の項目になります。
option | value | description |
---|---|---|
--version, -v | - | dart_license_plistのversionを確認できます。 最新バージョンが存在した場合には、updateを行うこともできます。 |
--verbose | - | デフォルトはINFO, ERRORのログのみですが、 verboseオプションを使うことで、DEBUGログも表示できるようになります。 |
--custom-license-yaml=value | yaml path (string) | plist生成時の設定および、カスタムライセンスの設定等を記述したyamlファイルのパスを指定できます。 |
custom-license-yamlで設定できる項目として、現状ではライセンス一覧に表示しないパッケージを指定できるexclude
と、カスタムライブラリを設定できるpackages
の2つになります。
yamlファイルのテンプレートはこんな感じになります。
設定ファイルが読み込まれている場合、コマンド実行時に読み込んでいるデータが表示されます。
excludeとpackagesに同じパッケージが設定されていると、エラーが表示されますので確認して修正してください。
excludeには、ライセンスデータのフェッチをスキップするパッケージ名を指定します。
設定されているパッケージのライセンスデータを取得する際に、スキップされるようになります。
packagesでは、パッケージとして使っていないがライセンスとして載せたい場合に設定すれば、ライセンス一覧に表示できるようになります。
flutterはpub.devにライセンス情報はなく、Githubのライセンスを掲載する必要があります。
※ 本当はここらへんも自動でできるようになればいいんですが、実装できていません🙇♂
ここで設定されているライセンス情報は、pub.devとかから取得したライセンス情報よりも優先して利用されます。
[cv:issue_marketplace_engineer]
診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。