【個人開発】App Store審査奮闘記：Macユーザ向けのWinCalendarアプリ開発の波乱万丈物語

本記事では、Macユーザーとしての日常ニーズを元に開発したアプリの背景から、App Storeの厳格な審査過程に至るまでの経験を共有します。特に、App Storeの審査に焦点を当てて詳述しています。

# 背景

３ヶ月前のことですが、ゴールデンウィークを迎えた時、外出の予定が特になく、普段仕事に忙しいですので、新しい技術の学習を怠っていることに気づきました。私はiOSアプリ開発の世界にObjective-C時代から足を踏み入れ、Swiftも利用してきました。しかし、画面デザインに関しては、これまで主にStoryboardを使用してきたため、SwiftUIに関する経験は持ち合わせていませんでした。

技術の学習方法として、私はただ本を読むだけでは物足りなく感じています。公式ドキュメントを参考にしつつ、実際のアプリやツールを作成するアプローチが最も効果的だと考えています。

そんな折、私としては一つのニーズが浮かび上がりました。Macユーザーとして、Windowsのようにタスクバーからワンクリックで簡易的なカレンダーを確認したいという思いが強くありました。特に、会議中の日程調整など、さっと日付を確認したい場面が多いのですが、毎回CalendarやOutlookを開くのは煩わしいことこの上ない。また、他者に自分のスケジュールをさらけ出すことも避けたいですね。Windowsのタスクバーからのカレンダー表示には、祝日が表示されないという問題点も感じていました。

そこで、App Storeで検索しましたが、私の要求を満たすようなアプリは見当たらなかったため、自らの手でこれを作成する決意をしました。そして、このプロジェクトの目的を以下のように定めました。

**目標：** SwiftUIの学習を深めると共に、MacOSのステータスバーに常駐し、ワンクリックで表示可能な、祝日も備えたカレンダーアプリを開発する。



# 機能

Windowsのようなカレンダー機能を求めていたので、アプリの名前をWinCalendarに決めました。アプリの主な機能は以下の通りです。

1. 標準的なカレンダー表示。
2. MacOSのタスクバーに常駐し、ワンクリックで迅速に起動。
3. 日本を始めとする各国の祝日表示。
4. 法律の変更に伴う祝日の変動がある場合に対応し、サーバーから最新の祝日情報をダウンロードして更新。
5. 世界各国の日付表現への対応。



アプリの完成イメージとしては、AppStoreで「[WinCalendar](https://apps.apple.com/app/wincalendar/id6449167242)」としてダウンロード可能となります。

1. アイコン
![screenshot1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103400/7b762f81-bec6-0db9-14f4-59af996b5d37.png)


2. メイン画面

   - タスクバーから押下すると、カレンダーが表示される。

   - 年、月を押下すると、年月の選択は可能です。

   - 矢印を押下すると、月が変わる。

   - ◯ボタンを押下すると、本日に戻る

   - マウスを祝日に移動すると、祝日の内容が表示される。
![screenshot2-ja.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103400/83ee39e1-ed39-9796-b8ad-98f1ce7e95c2.png)


3. 設定画面
   - 自動起動設定
   - ダークモード設定
   - 祝日表示要否設定
   - カラー設定
   - 週の開始曜日設定
   - 国（地域）設定：設定された国の祝日が表示される
   - 選択された国の祝日更新
   - アプリ終了

![screenshot3-ja.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103400/b3f72c34-1884-d116-86c4-fdeab49b852e.png)


# 審査

ここから本題に入ります。

SwiftUIに関する学習を始めるにあたり、最初は公式ドキュメントを何時間じっくりと読み込みました。そして、その知識を元に開発を開始。ようやくアプリが問題なく動作するようになりました。次なるステップとしてApp Storeへのアップロードを考えました。しかし、ここで思わぬ問題に直面します。App Storeの審査プロセスは、想像以上の難関でした。以下に、審査員とのやり取りを再現し、その経験を皆さんと共有したいと思います。ご参考できれば幸いです。

結論から言いますと、

1. **審査員も神ではありません。** 

   アプリの動作や特性が審査員にとって不明瞭な場合、明確に説明することが必要です。

2. **App Storeのガイドラインは絶対。** 

   必ずガイドラインに準拠し、それに基づいてアプリを作成、修正すること。

3. **落ち込むことはありません。** 

   審査員からの指摘やフィードバックは、アプリをより良くするためのもの。それを受け止め、適切に対応しましょう。



## Round1

申請提出後翌日、次のような却下メッセージが届きました。

```
We noticed that your app provides the same feature set as other apps submitted to the App Store; it simply varies in content or language, which is considered a form of spam.

The next submission of this app may require a longer review time.
```

ほかのアプリと似てるという指摘でした、確かにAppStoreには類似なアプリがありますが、祝日付きのカレンダーがないと思います、念のため、もう一度AppStoreを検索しましたが、やっぱり見当たらなかったです。アプリの特徴を説明しつつ、具体的にどのアプリと類似しているのかを問い返しました。



## Round2

翌日、以下の返答を受け取りました。

```
Thank you for your reply. Just as we would not share information from your Apple Developer Program account with another developer, we do not share the details of apps submitted under other Apple Developer Program accounts. 
```

要は、似ているアプリの詳細を教えてはくれないとのこと。アプリは全部AppStoreで共有されていますので、アプリ名を教えていただければ、類似機能を削除したら良いかと思いました。教えてもらわないですので、何を修正すればよいのかわからないです。仕方がなく、AppStoreの公開に諦めました。



## Round3

２ヶ月後のある週末、またこの件を思い出しました、せっかく作ったのに、AppStoreで公開しないともったいないと思って、ソースコードをもう一度整理して再度提出しました。時間が経ったので、審査員が変わったかもしれませんが、今度は２つの指摘がありました。

```
Guideline 2.3 - Performance - Accurate Metadata

We noticed that your app's metadata includes the following information, which is not relevant to the app's content and functionality:

For Windows users, the ability to display a calendar from the taskbar is highly convenient and frequently utilized. However, there is a challenge of lacking holiday display.


Guideline 4.0 - Design

We noticed issues with your app's user interface that contribute to a lower-quality user experience than App Store users expect:

- The app does not include any way for the user to quit the app.
```

一つ目は、Windows風のポップカレンダーはMacOSにもできるというアピール内容は、アプリと無関係と指摘されました。仕方がなく、即時削除しました。

次に、アプリを終了できないと指摘されました。実際はアイコンを右クリックすると、メニューが表示されます。そこからアプリを終了することが可能です。この操作手順を丁寧に説明し、再提出しました。



## Round4

その後、以下のメッセージを受け取りました。

```
Guideline 4.0 - Design

- The app requires users right-click the menu bar extra to access quit options. This is not an expected behavior. It would be appropriate to allow the user to quit your application in a more obvious manner.
```

右クリックはダメということでした。もっとわかりやすくしないといけないことです。カレンダー画面の右上に設定ボタンを追加しました。正直これは妥協したくなかったです。カレンダー画面に設定ボタンを追加したら、邪魔になると思います。



## Round5

再度の修正とビルドを経て、提出。しかし、次のような指摘がありました。

```
Thank you for your efforts to follow our guidelines. There are still some issues that need your attention.

Guideline 2.4.5(i) - Performance

In order to continue reviewing your app, we require additional information.

Your app uses one or more entitlements which do not appear to have matching functionality within the app. Please reply to this message in App Store Connect and describe how and where the app uses the following entitlements. You will not need to upload a new binary to provide this information.

Apps should have only the minimum set of entitlements necessary for the app to function properly. If there are entitlements that are not needed, please remove them and submit an updated binary. You will need to Developer Reject the app to upload an updated version.

---
com.apple.security.network.server
---
```

これは確か私の勉強不足です。サーバーにアクセスする機能がありますので、com.apple.security.network.serverが必要だと勝手に思ってチェックを入れましたが、公式ドキュメントを調べると、サーバーからクライアントへの接続用の設定のようですので、特に不要です。このentitlementsを削除して再度ビルドして提出を続けました。



## Round6

今度は次の指摘です。

```
Guideline 2.4.5(iii) - Performance

Your app sets itself to auto-launch at startup without express consent from the user.
```

こんなアプリは最初から自動起動すると、ユーザにとって絶対便利だと思いましたので、デフォルトは自動起動にしましたが、まだどれぐらいの指摘が来るのかわかりませんので、一旦自動起動のデフォルト値をオフにしまして、再提出！



３ヶ月経って、やっと承認されました。審査員の皆様、ありがとうございました。



興味の持っている方はAppStoreで「[WinCalendar](https://apps.apple.com/app/wincalendar/id6449167242)」検索またはリンクからダウンロードしてみてください。