MAUIプロジェクトのVS2026対応

先月Visual Studio2026が正式リリースされましたね。
弊社でも開発に使用すべく導入準備を進めております。
インストール時に2022の設定やコンポーネントなど引き継ぐ選択肢があったおかげで、
Windowsアプリのプロジェクトはすんなりと問題なく開発可能な状態にできました。
しかし、MAUIによるモバイルアプリプロジェクトの対応が難航したので、
ここに注意点などを記述しようかと思います。

1. プロジェクトの.NETバージョンは支障がなければ素直に10に上げるのが良いと思われます。
VS2026をインストールすると.NET8ではビルドできなくなります。(VS2022においてさえも!)
.NET9も試したのですが、こちらもiOSビルド時に発生するエラーを解決できず、時間を溶かしました。
他の方も.NET10に上げたら上手く行ったという報告を見かけたので、
ほぼ間違いなく.NET10が推奨だと思われます。

2. .NET10に上がったことで、iOSをビルドするXcodeのバージョンも上げる必要があります。
新しい環境でビルドが成功するまでは古いバージョンのXcodeを残しておきたいと思うのですが、
その場合はAppStoreで更新をせずにAppleのDevelopperサイトにてダウンロードしましょう。
xip形式でなので展開すればXcode.appファイルが出来上がります。
これをアプリケーションフォルダにドラッグすれば更新できるのですが、
そのままだとおそらく上書きされてしまうので、
一旦アプリケーションフォルダ内の古い方を Xcode_16.4.app などにしてドラッグしましょう。
これでXcodeのバージョンが異なるとエラーで怒られることはなくなるかと思います。
ただし、メジャーバージョンが同じもの(例えば26.0と26.2)を同居させた場合に、
新しい方をXcode.appとしていても古い方が検出されてしまいエラーが発生したので、
メジャーバージョンが異なる場合のみ同居可能なのかもしれません。
(一先ず古い方をゴミ箱送りにすれば動作しましたが、
 デフォルトパス設定をちゃんとすれば問題起きないのでしょうか、、、?)
また実機実行に必要なデバイスサポートファイルを新しいXcode内に格納する必要もあります。
 Xcode右クリック > パッケージの内容を表示 >
  ”Contents” > “Developer” > “Platforms” > “iPhoneOS.platform” > “DeviceSupport”
古いXcode内のDeviceSupportからコピーするのが楽かもしれません。

3. .NETのバージョンが切り替わった後や、global.jsonで.NETのバージョンを指定した後は、
プロジェクト直下でcmdを開き、以下の2コマンドを順に実行し、
sdkが意図したバージョンになることを確認しましょう。
dotnet workload restore → dotnet –version

4. .NETのバージョンを切り替えた後にiOSをビルドする場合は、
古いバージョンのビルド情報がMacに残っておりビルド失敗の原因になり得るので、
ローカルとMacそれぞれからXamarin関係のキャッシュを一度削除しましょう。
・ローカルでは以下の2フォルダがキャッシュなので削除
 %localappdata%\Temp\Xamarin\XMA
 %localappdata%\Xamarin\MonoTouch
・Macでは以下の2フォルダがキャッシュなので削除
 $HOME/Library/Caches/Xamarin/XMA
 $HOME/Library/Caches/maui/PairToMac
Macとのペアリングが成功しなくなった場合などもこれで解決することが多いです。

5. .NETのバージョンを上げた結果、ビルド時に以下のようなエラーが発生するようになりました。
(iOSシミュレータ実行時のもので、iOS実機時やAndroid時は対応する箇所の記述が異なります)
> 資産ファイル ‘D:\VSTS\Komatsu720623\Project\Mobile\KOM-MICS Mobile\obj\project.assets.json’ に ‘net10.0-ios/iossimulator-x64′ のターゲットがありません。
> 復元が実行されたこと、および ‘net10.0-ios’ がプロジェクトの TargetFrameworks に含まれていることを確認してください。プロジェクトの RuntimeIdentifiers に ‘iossimulator-x64′ を組み込む必要が生じる可能性もあります。
エラーメッセージの示唆に従ってRuntimeIdentifiersやRuntimeIdentifierにてターゲットを指定しても、
特定のターゲットのみ成功するようになることがあるだけで根本的に解決しません。
おそらくプロジェクトのキャッシュに前のターゲット情報が残っていることが原因なので、
以下のようにキャッシュを削除及びパッケージの依存関係の復元を行いましょう。
① Project直下のbinフォルダとobjフォルダを削除
② Project直下でcmdを開き、dotnet restore(※)
これにより、Androidならリビルド、iOSならMacとペアリング→リビルドにより
ビルド及び実行が成功するようになると思います。
※この dotnet restore は前述の dotnet workload restore よりも必ず後に実行してください。
 dotnet restore → dotnet workload restore の順だとビルド成功しません。

6. .NETのバージョン更新や、(MAUIは無関係ですが)Androidの要件変更により、
いくつかのパッケージの追加・更新を行う必要がありました。
今回はそれで解決したので良いのですが、
もしも保守されていないパッケージで問題が起こったら、、、と思うとぞっとします。
そう考えると依存するパッケージも極力メジャーで保守され続けるもののみにした方が良いですね。
モバイルアプリ開発はマルチプラットフォームの普及もあり一度リリースするまでは手軽ですが、
そこで終わりではなくリリースを保つためにOSやSDKのアップデートに追従して
保守し続けないといけないのが大変だと実感しました。。。

※12/25: 諸事情により記入途中です。後日追記します。
 →12/29: 追記完了しました。

何とかシミュレータ/実機共にデバッグ実行できるようになり、
またリリースビルドとストアへのアップロードも成功し一安心しました。

しかし、これで2026対応は終わりではありませんでした。
VSの社内拡張機能が動作しなくなったのです。
しかも2026だけでなく2022でも動作しません、、、
まだ調査中なのですが、次回はそれについて書こうと思います。

それでは皆さん良いお年をお迎えください。

AIによる環境構築自動化で開発効率を高める

製造業の現場では、システム開発や研究開発にPythonを活用するケースが増えています。データ解析やシミュレーション、品質検証など幅広い用途で使われていますが、実際の開発現場では「環境構築」に多くの時間が割かれてきました。Pythonのバージョン違いやライブラリの依存関係、さらには必要なデータファイルの準備など、開発そのものとは直接関係のない作業が意外と大きな負担になっていたのです。

最近ではAIがこの部分を大きくサポートしてくれるようになりました。AIがコードを解析し、必要なPythonバージョンを自動で切り替え、足りないライブラリをインストールし、さらには動作に必要なデータファイルまで生成してくれるのです。これにより、開発者は「環境構築」という面倒な準備作業から解放され、本来注力すべきアルゴリズム設計や品質改善に集中できるようになります。

今後は、AIによる環境自動化がさらに進化し、クラウドやオンプレミス環境を問わず、最適な構成を瞬時に整えるようになるでしょう。製造業におけるシステム開発や研究開発のスピードは、これまで以上に加速していきます。私たちシステム開発会社としても、この技術を積極的に取り入れ、製造業の現場に最適化されたソリューションを提供していきたいと考えています。