48
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Qiitaの人気記事を見られるiOS用Widgetアプリリリースしました🤖

Posted at

はじめに

この度、「WidgetQiita」というQiitaの記事をWidgetで見れるアプリをリリースしました :tada:
Widgetに表示された記事をタップするとSafariなどのデフォルトのブラウザでタップした記事を見ることができます。
また、Widgetからタップした記事は閲覧履歴として後から確認することも可能です。

Widget 閲覧履歴 よく見るユーザーとタグ 
IMG_0BF4F84AFAF3-1.jpeg IMG_0027.PNG IMG_0028.PNG

iOSのWidgetのサイズはsystemSmall, systemMedium, systemLargeの3種類です。

systemSmall systemMedium systemLarge 
IMG_0029.PNG IMG_0030.PNG IMG_0031.PNG

iPadOS15.0以降なら上記に追加でextraLargeにも対応しています。
(今年発売のiPad mini可愛すぎませんか?)
IMG_0369.PNG

気になった方、勉強になると思った方はこちらからインストールしてみてください🙏🏻

Download on the App Store

本題

実はWidgetQiitaがリリースするまでに2年以上の歳月がかかっております。
WidgetはiOS14からの機能でして2年前には存在していない機能です。
どうしてWidgetをメインにしたアプリになったのかappleのレビュワーとの二年間に及ぶ戦いの日々を書き連ねていきたいと思います。

なぜ作ろうと思ったのか

iOSエンジニア歴が半年もない状態で新卒として配属されたチームでの開発体制は"テスト駆動開発"で"ペアプログラミング"を実施しており、アーキテクチャは"Clearn Architecture" + "AppCoordinator"パターンという当時の自分は触ったことも聞いたこともないといった状況でした。

学生の頃、Unityでクソゲーを量産してきた経験?から、自分は何事も手を動かさないと身につけることができないということを理解していたのでとりあえず愚直に
「TDDでCleanArchitectureで個人アプリを作ろう!」
となりました。
そこでどんなアプリにしようかと悩んでたところ、Qiita APIができる機能が多くドキュメントが日本語のためハードルが低く、かつ実際にAPIを使って記事を書いている人が多いためQiitaのクライアントアプリを作ろうと決めました!

以下のように機能をホワイトボードに書き出して毎日仕事から帰ってきたら

1回目のリジェクト :tada:

そんなわけで、毎日仕事終わりにコツコツ作り3ヶ月ぐらいで以下の全ての要件を実装し終わり、

2019/9/22 に1回目の申請をしました。

ここで1回目のリジェクトをくらいました。

理由は、appleストアに同じようなアプリが既にあるためダメです的なものでした...orz
しかも、何回も同じようなアプリを提出してきたらスパムとみなします、的な文言まで添えられていてかなりビビりました :sweat_drops:
そこで既にストアにあるアプリとの差別化を図るためにメモ機能の追加や細かい機能の追加を行いました。

2回目のリジェクト :tada:

なんとか実装を加えてリリースしました。
しかし、またしても同じ理由でリジェクトされてしまいました。
UIKitよりSwiftUIの開発にハマっていた自分は、このアプリをリリースすることを諦めてしまいました :sweat_smile:

3回目のリジェクト :tada:

2020年の12月ごろ、たまたま自分が作っていたQiitaアプリの話をしたことをきっかけにもう一回申請頑張ってみようかなと考えまして、記事の閲覧数によって自分のステータスがアップするミニゲーム要素をくわえることにしました。

これなら似たようなアプリはあるまいと意気込み申請しました。

そしてリジェクトです。

2020年6月末からログイン機能を提供しているすべてのiOSアプリでApple Sign Inが必須になりました。
Apple Sign Inというのは、AppleIDでアプリやサイトに登録できるようなるというユーザーにとってはとても親切な機能です。

しかしQiitaにはApple Sign In機能がないため、華麗にリジェクトを食らいました。

Qiita APIはログインしていないと、APIの叩ける回数やLGTMやストック、コメント、フォローなどできなくなるので絶望的です。
なんとかレビュワーの方に、頼みましたが儚く終わりました... orz

4回目のリジェクト :tada:

3回目のリジェクトのあたりから、副業をするようになり個人アプリ開発の優先順位が下がってきておりました。

しかし、iOS14から登場するWidget機能が個人的にはとてもお気に入りの機能でして、簡単なWidgetアプリをリリースして、とても満足していましたが、
心の奥底にはQiitaアプリがこちらをちらちらと見ており、Widget機能をつけてQiitaアプリをリリースしたい!
という強い思いが込み上げてきました!
(2021/06ぐらい)

そこで前回してきされたApple Sign InはQiitaのログイン機能としては提供されていないため、あきらめログインに関係しそうな機能を全て削除しました;;

そして、削除したあとに今回リリースしたアプリの元となるWidgetを作って申請しました!

そしてもちろんリジェクトです。

今回の理由はちゃんとメールが残っていました。
Guideline 5.1.1 - Legal - Privacy - Data Collection and Storageで簡単にいうと、このアプリはCOVID-19関連のアプリだから政府関係じゃないとだめだよ

的なことでした。

最初は意味がわからず混乱したのですが、レビュワーの方は親切にもアプリの検索機能を使いCOVID-19と検索し出てきた記事をスクリーンショットに貼ってくださっていました。

COVID-19の話題が上がっていると全く相手にしてもらえない様子でした。

5回目のリジェクト :tada:

COVID-19と検索されるとリジェクト対象の記事が出てきてしまうので、検索機能を消してしまえば問題ないだろうということで検索機能を消して再度申請しました。

しかしリジェクト。

レビュワー云く「検索機能を消してもこのアプリはCOVID-19関連のアプリって認識したからだめだよ」

的なことでした... orz

しかし、Widget機能だけでもちゃんとリリースしたいと強く思っていたのでどうにかしてアプリをリリースする方法を考えました。

「アプリにCOVID-19関連の情報が表示されてはいけない」

この用件を満たす解決策が現在のアプリです。

基本的には、Widgetで記事名を表示するだけなのでCOVID-19関連の情報が表示されることはありません。

また記事を閲覧するのはアプリではなく、Safariで開くようにしました。

これでいけると思い、WidgetQiitaの作成に取り掛かります!

WidgetからSafariに遷移させる方法

この記事を書いている段階では、少なくとも自分の知る範囲でWidgetから直接Safariを起動する方法がわかりませんでした。
そこで、一度本体アプリを経由してからSafariに遷移するといった方法をとっています。

仕組み的には

  1. Widgetで記事をタップ
  2. URLスキームをつけて本体アプリを開く
  3. URLスキームに付けられたパラメータをもとに記事のリンクを作成してSafariを開く

といった流れになっています。

基本的にはタップした時に、Linkをつかってアプリ本体のURLスキームを叩いて遷移させています。

.swift
struct Link<Label> where Label : View

ただし、smallサイズのWidgetにはLinkが効かないので、widgetURLメソッドを使って開くURLを指定します。

.swift
func widgetURL(_ url: URL?) -> some View

次に、アプリ側でURLスキームを開けるように設定をしておきます。
大元のViewでonOpenURLをセットしておきます。
このようにすることで、WidgetがURLスキームを開いた時のURLをonOpenURL内でキャッチすることができます。

.swift
func onOpenURL(perform action: @escaping (URL) -> ()) -> some View

なお、一度Widget側で一度URLに変更するときには、URLComponentsを使って一度URLに変更しています。

こんな感じで今のようなアプリ申請しました!

6回目のリジェクト :tada:

今回のアプリには実は課金することによって広告を非表示にすることができるという機能を入れたのですが、それ関連でリジェクトされてしました... orz

Guideline 3.1.2 - Business - Payments - Subscriptionsで、アプリの課金するページにもちゃんと利用規約とプライバシーポリシーのリンクをちゃんと置いておいてくださいてきなことだったのですぐに対応しました!

ついにリリース :tada: :tada: :tada:

こうして2年以上に及ぶ奮闘の末アプリをリリースすることができました!
大きく6回のリジェクトに分けて紹介しましたが、本当はスクリーンショットやminimum functionなど細かい理由で倍以上リジェクトは食らっていますが、あまり書くこともないので割愛しました :smile:

appleは常に時代にあった変化をし続けていくので、開発者も常に一緒に進化し続けないと行けないということがよくわかりました。

このアプリを使って、みなさんが面白い記事に出会えることを祈っています :pray_tone1:

また追加機能のご要望、バグの報告、アドバイス、感想もろもろありましたらこちらのTwitterアカウントによろしくお願いいたします :bow:

Download on the App Store

48
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?