【Mac不要】.NET MAUI 製 iOS アプリを iPhone に手軽にデバッグ配備する手順

# 前提

この記事は、以下に当てはまる人向けの iPhone/iPad アプリを開発する手順を紹介します。

* iPhone / iPad を使っている
* 開発機はWindowsだ
* Macを持っていない
* C#.NET言語で開発したい。
* Apple Developer Programに既に登録している、または年間で99米ドル(約14,500円)を支払えるクレジットカードまたはデビットカードを持っていて、支払い後に最大48時間待ってやるのも悪くない。※1
※1: 2023/12/02現在。

# はじめに

私はその前提に当てはまっていて、・・・こんな記事も書いていました。

* [【Mac不要】.NET製iOSアプリをiPhone実機配備する手順 (2020年)](https://qiita.com/kami_teru/items/58b6b5e4fd835248bf7a "【Mac不要】.NET製iOSアプリをiPhone実機配備する手順")

その記事で私は、 Xamarin.Forms で開発し [App Center](https://appcenter.ms/) でiOSビルドを行う手順を紹介していました。

その後 MAUI がリリースされましたが、Macを持たない私たちには次の障害がありました。
* 😭 App Center が MAUI の Build をサポートしていない (2023/12/02 現在) 参考: [[Git hub] App Center .NET Maui Support #3333](https://github.com/dotnet/maui/discussions/3333)
* 😭 個人の Apple Developer Program アカウントだと Windows に iPhone/iPad を直結しても Visual Studio の iOS ローカルデバイス を指定してのビルドが上手くいかない...

ところが！既に後者の問題は解決されており、手順が公開されていました。

* [ホット 再起動を使用して iOS アプリをデプロイする](https://learn.microsoft.com/ja-jp/dotnet/maui/ios/hot-restart?view=net-maui-8.0#setup)

あくまで開発中のMAUIアプリをMacを必要とせずに実機デバッグする手順なのですが...開発者である私たちなら十分に遊べそうです。
* Macが無くとも、C#しか使えなくとも、iOSアプリを作る体験ができる！
* デプロイしたアプリは、その後も実機上で単体起動できるので、自作アプリとして使える！
* 動作する機能に[制限](https://learn.microsoft.com/ja-jp/dotnet/maui/ios/hot-restart?view=net-maui-8.0#limitations)はあるけど、.NETのフレームワークで作る範囲なら問題なさそう

ということで早速、手順を始めましょう。

# 1. 下準備

## Apple Developer Programに登録する

もし、まだApple Developer Programに登録していなければ、先に登録し、支払いを済ませておきましょう。

[Apple Developer Program](https://developer.apple.com/)

※途中から英語のサイトに切り替わりますが、最初の日本語の説明は丁寧でわかりやすく、私は特に詰まることなく登録することができました。

## VisualStudio をインストールする

本記事の内容は、Visual Studio 2022 (version 17.8.2)で検証しました。
Visual Studio Installerでは、以下のワークロードを選択してインストールしてください。

* .NET マルチプラットフォーム アプリの UI 開発

# 2. .NET MAUI アプリのプロジェクトを開発

プロジェクトを作成する際は、「.NET MAUI アプリ」のテンプレートを選択します。

プロジェクトの作成を終えて Visual Studio に読み込まれると、既定では Windows Machene で実行される設定になっています。
![スクリーンショット 2023-12-02 122738.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/2e0d2657-667b-80b2-a956-947b816c3afa.png)

このまま実行すると、MAUI のサンプルアプリが Windows アプリとして動作することが確認できます。

でも私たちが作りたいのは iOSアプリ。そのためには次の公式の手順通りに進めるだけです。早速やってみましょう！

* [ホット 再起動を使用して iOS アプリをデプロイする](https://learn.microsoft.com/ja-jp/dotnet/maui/ios/hot-restart?view=net-maui-8.0#setup)

以下、詰まった時にヒントになりそうなポイントをいくつか挙げておきます。

### 😥 Apple Developler Program のアカウント設定で問題が起きた

Visual Studio のメニューバーから ツール > オプション を開き、 "Apple アカウント" という設定を探します。この設定ページから Apple Developler Program のアカウント設定をやり直すことができるので、うまくいかない時は試してみてください。

![スクリーンショット 2023-12-02 123759.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/718174c3-7519-9161-ff77-b362f4cd389d.png)

### 😥 初期セットアップはうまくいったが、iPhone/iPad を Windows に USB 接続しても iOS ローカルデバイスにリストされない

まずは接続した iPhone/iPad のロックが解除されていることを確認しましょう。次に「このコンピューターを信頼しますか」というダイアログが表示されて、「信頼する」を選択したことを確認しましょう。

また一度は iPhone/iPad を接続し直してみましょう。ちなみにその USB ケーブルは 100均の「充電専用」ケーブルではありませんよね？

それでもダメな時は、 iPhone/iPad の iOS のバージョンが古いのかもしれません。私が検証した iOSバージョンを記載しておきます。
* iPhone SE 1Gen - iOS 15.8
* iPhone SE 2Gen - iOS 17.1.1
* iPad Pro 2Gen - iOS 17.1.1

### 😥 iOS ローカルデバイス から直結しているiPhone/iPadを選択して実行したが、iPhone/iPadでアプリが起動してこない

まずは、ビルドエラーが起きていないことを確認しましょう。次に、アプリは自動的には起動しない仕様のようです。

公式の手順 [ホット 再起動を使用したデプロイとデバッグ](iPhone/iPadでアプリが起動しない) にもありますが、デバッグ接続のダイアログが表示されていたら、iPhone/iPad にインストールされたアプリを見つけてタップしてあげましょう。するとVisual Studioからのデバッグが可能になります。

### 😥 iPhone/iPadアプリが起動途中で終了してしまう

もし MAUI テンプレートアプリをそのまま実行しているとしたら・・・残念なお知らせがあります。公式の手順 [トラブルシューティング](https://learn.microsoft.com/ja-jp/dotnet/maui/ios/hot-restart?view=net-maui-8.0#troubleshoot) に書かれている、ウォッチドッグにやられた可能性があります。

私の場合、実は以下のデバイスで検証したところ、ほぼ確実にウォッチドッグにやられました。
* iPhone SE 1Gen - iOS 15.8

つまりそのiOSデバイスには MAUI アプリの起動の重さをカバーできるだけの性能が無い...ということになります。しかし Visual Studio を介さず iPhone から直接起動すると起動に成功することもあるので、その時はデバッグは Windows Machine で行うと割り切って、そこはマルチプラットフォームの利点を生かす時なのかもしれません。

# 3. .NET MAUI アプリの UI デザインのホットリロードを試す

※公式の「ホット 再起動」は「Hot Reload」の機械翻訳のようです

ホットリロードは、ソースコードの変更を動作中のアプリに即時反映することができる機能ですが、MAUI の場合は UI デザイン、つまり XAML ソースの変更のみサポートされているようです。(※1)

これを有効にするためには、公式の手順 [ホット 再起動を有効にする](https://learn.microsoft.com/ja-jp/dotnet/maui/ios/hot-restart?view=net-maui-8.0#enable-hot-restart) の他にも設定がありますので、確認しておきましょう。

![スクリーンショット 2023-12-02 105706.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/4eccced1-da50-b562-e023-4ead7b69c17f.png)

※1 私は MainPage.xaml.csファイルを修正して保存したが、反映されなかったので...
関係しそうな設定は当たってみたのですが。
![スクリーンショット 2023-12-02 132740.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/8b872c79-8e82-e858-eb48-2a7275e4e950.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109362/786818fe-2960-ff18-2409-9f50e26478a9.png)


# 最後に

Macを持っていなくても、C# で iOS アプリを自作できる手順をお伝えしました。

他の人にアプリを配付したり、iOS固有の機能を必要とする場合はやはりMacが必要ですが、プロトタイプ的にいろいろやってみたいという段階においては、Macを購入する前にこの記事の方法で開発してみるのも、ひとつの手ではないでしょうか。

この記事が、C# を愛する同志にとって iOS アプリ開発に踏み出す第一歩の助けになれば、幸いです。