Apple シリコン搭載 Mac なら iOS 向け SDK を macOS で動かせる ~ Flutter を添えて ~
はじめに
Apple Silicon 搭載の Mac では iOS アプリを動かすことができますが、Flutter アプリも例外ではないはずです。
試してみましょう。
Xcode でアプリを起動
Xcode からアプリを起動し、アタッチしていきます。
My Mac (Designed for iPad)
になっているのを確認して Run します。
いつものカウンターアプリが起動します。
Xcode のコンソールに アタッチに必要な URL が出力されるのでこちらをコピーしましょう。
VS Code の場合
Flutter: Attach to Flutter on Device
コマンドでアタッチできます。
参考: Debugging your add-to-app module | Flutter
または、.vscode/launch.json
に次のように追記しましょう。
{
"version": "0.2.0",
"configurations": [
{
"name": "attach",
"request": "attach",
"type": "dart",
"args": ["--app-id", "dev.kingu.iosAppRunOnMac"]
}
]
}
args
で--app-id
の指定は必須ではありませんが、attach
を何度も実行していると次のようなエラーが出ることがあります。
There are multiple observatory ports available.
Rerun this command with one of the following passed in as the appId:
flutter attach --app-id dev.kingu.iosAppRunOnMac
flutter attach --app-id dev.kingu.iosAppRunOnMac (2)
アプリを一旦 kill すれば回避できますが、面倒なので--app-id
を指定しておくと楽です。
Hot reload も問題ありません
では本題です
つまり、iOS アプリを macOS で実行できるので、iOS しか対応していない SDK を macOS で使えるようになります。
Google マップで屋内地図を表示したい場合、ブラウザからアクセスすれば表示することができるのはご存知かと思います。
例えば東京駅の地下 1 階 - https://goo.gl/maps/PSokGrc6hKb7NouR7
一方で屋内地図をなんらかのアプリに組み込んで利用したい場合は SDK が必要です。
これは iOS や Android ではGoogle Maps SDK を利用することで実現できますが、PC では利用できません。
PC ではMaps JavaScript APIの利用が想定されているのだと思いますが、残念なことに屋内地図は対応していません。
(Google Maps SDK で屋内地図が利用できるようになって少なくとも 5 年以上は経ったと思いますが、未だに JS 版では利用できないです...)
class MyApp extends StatelessWidget {
const MyApp({
super.key,
});
Widget build(BuildContext context) {
return const MaterialApp(
home: Scaffold(
body: GoogleMap(
initialCameraPosition: CameraPosition(
target: LatLng(35.68123837837174, 139.76700609632644), // 東京駅
zoom: 21,
),
indoorViewEnabled: true,
),
),
);
}
}
なんということでしょう。
macOS アプリで屋内地図が表示できました。
(レポジトリはこちら)
まとめ
Flutter で作った iOS アプリを macOS で実行できることが確認できました。
これにより、(全てではないでしょうが)iOS 向けの SDK を macOS で利用できるようになりました。
Discussion