.NET MAUI製アプリをApp Storeで公開するのにMacは必要か？

[.NET MAUI Advent Calendar](https://qiita.com/advent-calendar/2024/dotnetmaui) 2024 23日目の記事です。

## はじめに
つい先日、.NET MAUIで作ったアプリをApp Storeで公開しました

https://apps.apple.com/jp/app/formula-store/id6737732990  

アプリの使い方は、下記リンク先にまとめています。

https://tomato-propeller-formula-store.netlify.app/

なぜiOSアプリで.NET MAUIを採用したのかというと、所有しているMacが古くなり、Xcodeが重たくて開発しづらかったからです。(Mac Book Air 13-inch 2019を使っています。CPUはIntelのものです。)
後述しますが、.NET MAUIでは開発のほとんどの作業をWindowsマシンで可能でした。
.NET MAUIの他にもクロスプラットフォームフレームワークがありますが、Visual Studio1つで開発環境を簡単に作ることができる.NET MAUIは良い選択肢になるのではないかと感じました。

当記事のタイトルにしている問「.NET MAUI製アプリをApp Storeで公開するのにMacは必要か？」の答えとしては、.NET MAUI製アプリをApp Storeで公開するのにMacは必要です。
.NET MAUIで作ったアプリをApp Storeで公開する方法について、Microsoft公式のドキュメントを参考にしました。

https://learn.microsoft.com/ja-jp/dotnet/maui/ios/deployment/publish-app-store?view=net-maui-9.0

アプリの開発自体は、WindowsのVisual Studioでできたのですが、下記3つの手順でMacが必要となりました。
1. プロビジョニングファイルの作成
2. アプリの発行(.ipaファイルの作成)
3. App Store Connectへアプリをアップロード

以下詳細を説明します。
## 1. プロビジョニングプロファイルの作成
プロビジョニングプロファイルは、iOSデバイスにアプリをインストールするために必要となるものです。
App Store配布のためのプロビジョニングファイルには、配布証明書とアプリIDを含みます。
配布証明書を作成してMacに登録するには、下記手順を行いました。
1. macOSのキーチェーンアクセスで、CSRを作成する
2. Apple DevelopperでCertificateの+をクリック > Apple Distributionを選択して、「1.」で作成したCSRをアップロードして配布証明書を作成する
3. Macに中間証明書をダウンロードし、キーチェーンに登録する
4. 「2.」で作成した配布証明書をMacにダウンロードし、キーチェーンに登録する

次にアプリIDを作成します。
アプリIDはApple Developperで作成します。
下記リンク先の「アプリ ID を作成する」の手順を実施しました。

https://learn.microsoft.com/ja-jp/dotnet/maui/ios/deployment/publish-app-store?view=net-maui-9.0#create-an-app-id

これで、配布証明書とアプリIDが揃ったので、プロビジョニングプロファイルを作成します。
こちらもApple Developperで作成します。
下記リンク先の「プロビジョニング プロファイルを作成する」の手順を実施しました。

https://learn.microsoft.com/ja-jp/dotnet/maui/ios/deployment/publish-app-store?view=net-maui-9.0#create-a-provisioning-profile

作成したプロビジョニングプロファイルを、WindowsマシンのVisual Studioに登録するには、下記リンク先の「プロビジョニング プロファイルを Visual Studio にダウンロードする」の手順を実施しました。

https://learn.microsoft.com/ja-jp/dotnet/maui/ios/deployment/publish-app-store?view=net-maui-9.0#download-provisioning-profiles-in-visual-studio

## 2. アプリの発行(.ipaファイルの作成)
アプリを発行する(.ipaファイルを作成する)には、WindowsマシンとMacをペアリングする必要があります。
Macとのペアリングの手順は、下記リンク先を参考にしました。

https://learn.microsoft.com/ja-jp/dotnet/maui/ios/pair-to-mac?view=net-maui-9.0

Macとのペアリングを含めたアプリの発行の手順は、下記リンク先を参考にしました。

https://learn.microsoft.com/ja-jp/dotnet/maui/ios/deployment/publish-app-store?view=net-maui-9.0#publish-the-app

上記リンク先には、Visual Studioから直接ストアにアップロードする方法が書かれていますが、私の環境ではうまくアップロードできなかったので、[名前をつけて保存する]を選択し、.ipaファイルとしてWindowsマシンのローカルストレージに保存しました。

## 3. App Store Connectへアプリをアップロード
前述の手順でWindowsマシンのローカルストレージに保存した.ipaファイルを適当な方法でMacに移動させ、Transporterでストアにアップロードしました。

https://apps.apple.com/us/app/transporter/id1450874784?mt=12

## その他、アプリ審査でリジェクトされた際に修正した内容
### スプラッシュスクリーンが表示された後に、アプリがクラッシュする
デバッグ実行やアドホックで発行した場合には発生しなかったのですが、App Store用に発行すると、スプラッシュスクリーンが表示された後にアプリがクラッシュする事象が発生しました。
ウェブで調べてみると、同様の事象が見つかりました。

https://stackoverflow.com/questions/78193866/deployed-version-of-maui-app-crashes-after-splash-screen

また、同様の内容がMicrosoft公式のドキュメントにも書かれていました。

https://learn.microsoft.com/ja-jp/dotnet/maui/macios/interpreter?view=net-maui-8.0#enable-the-interpreter

プロジェクトファイルに下記3行を追加することで回避できました。
```
<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
	  <UseInterpreter>true</UseInterpreter>
</PropertyGroup>
```

### iPadのスクリーンショットに関するご指摘があった
App Store Connectにて、App Storeに掲載するスクリーンショットを設定する項目があるのですが、iPhone用に作成したスクリーンの寸法をiPadの寸法に変更して提出したところ、iPad用のスクリーンショットを提出するようご指摘をいただきました。
スクリーンショットの寸法だけではなく、スクリーンショットの内容まで確認されていることがわかりました。

また、スクリーンショットは、素のスクリーンショットでなくても、寸法に合わせてかっこよく加工してもOKです。
私は、下記リンク先を参考にしFigmaでスクリーンショットとして提出する画像を作成しました。

https://zenn.dev/kazuki23/articles/4c814b1f722669

ただし、Figmaで画像をエクスポートしたところ、α値が残ってしまい、App Store Connectにアップロードできませんでした。
なので、Pythonで簡単なプログラムを作成して画像からα値を削除した上でアップロードしました。
```
from PIL import Image

img_pil = Image.open("./img/input.png")
img_pil = img_pil.convert("RGB")

img_pil.save("./img/output.png")

```

## 最後に
App Storeで公開するには、上記の3つの手順のみをMacで行うことで実現できました。
Macを全く使わないことは無理でしたが、コーディング自体はすべてWindowマシン上でできたので、Macは持っているけどスペックが低い、または古くてXcodeが重たくて開発しづらい人は、.NET MAUIを使ってWindowsマシンでアプリ開発をするのはいかがでしょうか？

今回の記事に書ききらなかったこともあるので、「〇〇の部分を詳しく知りたい」などご要望があればぜひ教えて下さい。

最後まで読んでいただき、ありがとうございました。
.NET MAUIが人気になると嬉しいです！