【OSS ライブラリ】よくある「アプリについての画面」を一瞬で作れるように iOS アプリ用ライブラリを作った話
こんにちは。kamimiです。
いきなりですが、先月の1ヶ月間個人開発でクソアプリを5つほど作っていました。(よければこちらをご覧ください。🙇🏻)
本業もある中、乏しいアイディア力とデザインセンスを駆使して数日で作ったアプリですので、お粗末なものばかりですが、自分が欲しいものを自分で作ることができたので後悔はありません。
・・・とそれは置いておいて、この5つにはモバイルアプリによくあるとある画面がありませんでした。それが、「アプリの情報についての画面」です。
アプリの情報といっても人によって思いつく情報はさまざまだと思いますが、この記事では以下のような情報を含んだ画面を「アプリについての画面」と呼んでいます。
- レビューを書く
- 開発者の情報
- アプリを共有する
- 利用規約
- プライバシー・ポリシー
- ライセンス
- バージョン
よくある項目なのではないでしょうか。
そして少なくとも私の個人開発アプリに関しては、この項目から変更する必要はなく、どれも同じで問題ありませんでした。ただ5つもある・・・面倒くさい・・・
なので、ライブラリにすることで速攻で実装が完了するようにしました!
この画面にある情報はどれも App Store を見れば全部わかる情報ではあるので、必ず必要かと言われるとそうではないかもしれません。ですが本業で関わった中でこれがないアプリはないですしねー。そもそもエンドユーザーさん、インストールするとき以外 App Store 見ないものねー。開発者の私ですら見ない。。(もしかしてそれはアウト。。? 😂)
あったほうが親切なのは認識しつつ主要機能じゃないところに時間かけたくないと思ったので、ライブラリにしました。
前置きが長くなりましたがまとめると、この記事で言いたいことは
「アプリについての画面を5つの個人開発アプリに速攻で実装できるよう、画面自体を OSS ライブラリにしました。その紹介をします。使いたい人がいたら使ってね。✌🏻」
ということです。
名前はAppInfoList
といいます。はじめまして。🐣
できること
アプリについての画面を簡単に実装することができます。
それぞれ各ボタンを押下した時の挙動と必要なデータは以下のようになっており、現時点では押下時の挙動をカスタマイズすることはできません。🙇🏻
項目 | 押下時の挙動 | 必要なデータ |
---|---|---|
レビューを書く | App Store のアプリのレビュー画面に遷移する | App Store ID |
開発者について知る | デフォルトブラウザに遷移する | 開発者についての URL |
アプリを共有する | 共有シートを表示する | 共有したい内容(e.g. アプリの URL など) |
利用規約 | デフォルトブラウザに遷移する | 利用規約についての URL |
プライバシーポリシー | デフォルトブラウザに遷移する | プライバシーポリシーについての URL |
ライセンス | プッシュ遷移でライセンスの一覧を表示 | LisenceList で使用する plist の URL (※後述します) |
バージョン | 押下不可 | 不要 |
使い方
このライブラリは、Swift Package Manager での利用のみに対応しています。
導入は以下の通りです。
- AppInfoList をプロジェクトに追加する(
https://github.com/kamimi01/AppInfoList.git
を入力) - LicenseList のセットアップを行う(詳細はこちらのブログを参照ください)
導入したら、以下のようにそれぞれの項目についての情報をView
に渡して初期化して使います。
渡せるデータは前述の通りで、データを渡さなかった場合、その項目は非表示になります。
let info = AppInfo(
termOfUseURL: URL(string: "https://kamimi01.github.io/PomodoroCounter/privacy_policy/ja.html")!,
appURL: URL(string: "https://apps.apple.com/jp/app/ez-pomo/id1668609447?l=ja")!,
developerInfoURL: URL(string: "https://twitter.com/kamimi_01")!,
appStoreID: "1668609447"
)
AppInfoListView(
info: info,
licenseFileURL: Bundle.main.url(forResource: "license-list", withExtension: "plist")!
)
カスタマイズできること
そこまでカスタマイズ性は高くないのですが、いくつかできることがあるので紹介させてください。🙏🏻
とても簡単な作りなので、ソースコードを見ていただいても構いません。
タイトルを変更する
デフォルトのままでも違和感がない文言にはしているつもりですが、アプリによって変えたい場合もあるかと思ったので変えられるようにしました。
AppInfoAppearance
のcellTitles
に値を渡すことで変更することができます。
let appearance = AppInfoAppearance(
cellTitles: CellTitles(
termsOfUse: "Terms of Use"
)
)
AppInfoListView(
appearance: appearance,
・・・
)
私の場合は、利用規約とプライバシーポリシーのページが同じURLになるので、こんな感じで使っています。
let appearance = AppInfoAppearance(
cellTitles: CellTitles(termsOfUse: "利用規約・プライバシーポリシー") // タイトルを変更する
)
let info = AppInfo(
termOfUseURL: URL(string: "https://kamimi01.github.io/PomodoroCounter/privacy_policy/ja.html")!, // 利用規約用の引数に URL を渡す
appURL: URL(string: "https://apps.apple.com/jp/app/ez-pomo/id1668609447?l=ja")!,
developerInfoURL: URL(string: "https://twitter.com/kamimi_01")!,
appStoreID: "1668609447"
)
AppInfoListView(
appearance: appearance,
info: info,
licenseFileURL: Bundle.main.url(forResource: "license-list", withExtension: "plist")!
)
セルの色を変更する
各セルの色を変えることができます。
変数は2つで、セルのタイトル(ここでは「レビューを書く」や「利用規約」のようなテキストのことを指す)と、バージョンの右側のテキストの色を変えることができます。
let appearance = AppInfoAppearance(
cellTextColor: .red,
versionTextColor: .green,
)
AppInfoListView(
appearance: appearance,
・・・
)
制作過程
とても単純な作りではあるのですが、一応紹介します。
使用した技術
- SwiftUI
- Swift Package Manager
- ライブラリ
実装
SwiftUI で View を実装しているだけというシンプルな作りなので、特筆すべきことはあまりないかもしれません。
ただ一つ、このライブラリではライセンスの一覧を表示するために、Cybozu さん作成の LisenceList というライブラリに依存しています。
ブログによると、license-list.plist
というファイルを作成して、プロジェクトに追加し、Build Phases の Run Script にスクリプトを書いてビルドする必要があります。
詳細は以下のリポジトリやブログをご確認いただければと思います。とても簡単に実装できたので感謝しかありません。。。!!🥺
ここから先は別に特筆することではないと思うのですが、自分の記録のために残しておきます。
そもそも Swift Package を作ったり、それを OSS にすること自体初めてでした。
Package の作り方は、以下を参考にさせていただきました。ありがとうございます!!
また、OSS にするためにどうすればいいかは、以下を参考にさせていただきました。ありがとうございます!!
おわりに
以上がピヨピヨ開発者の OSS ライブラリ開発入門でした。(タイトル変わってる...w)
今までライブラリは完全に使う側でそれを自分で作るなんて考えたこともありませんでした。
ですが今回クズみたいなアプリとはいえ5つもアプリ開発を行ったことにより、「この作りたいライブラリを作りたい!」というモチベーションが湧き、先人たちの素晴らしいライブラリや記事のおかげで、思ったよりも簡単に作ることができました。
前述したようにこのライブラリ自体はあまりカスタマイズ性が高くなく使いにくい点もまだまだ多いと思っていますが、自分が OSS 開発に踏み出す確実な一歩となりました。
つまり作っていて楽しかったし、公開できて嬉しかったです!笑
ということでこの記事はこれでおわりとしたいと思います。ここまで読んでくださった方がいたなら、ありがとうございます。🙏🏻
Discussion