2023年10月18日Macに接続するUSB機器と通信するプログラムを開発するときに、OSのバージョンによってコードやバイナリが異なるときにデバッグ環境をどうするかというお話しです。デバッグ環境の用意OSのバージョンによってデバイスと通信する方法が異なることがあります。10.11未満の対応をまだ行っているという場合には、古いバージョンの環境でビルドしたKEXTが必要というケースもあります。これらのデバッグ環境を用意する方法には次のような方法があります。複数のOSをインストールして切り替える方法は、まず、候補に挙がる方法でしょう。そのマシンが対応しているOSに限定はされますが、若干、古いマシンを用意すれば困らないでしょう。HighSierra以降は起動ディスクにAPFSが選択できるので、ボリュームを増やす・減らすも簡単ですし、ディスクの空き容量を効率的に使用できます。デメリットはデバッグ対象を切り替えるために、マシンの再起動を伴うので効率が悪いことです。複数のマシンを使い分ける方法この方法も最初の方法と並んで候補に挙がる方法でしょう。通信相手のデバイスも複数用意できれば、効率良くデバッグすることができます。デメリットはマシンを複数使用するので、物理的なスペースが多く必要になることです。対象デバイスを抜き差ししてマシンのところまで移動するという手間が、細かくデバッグするときには少し面倒になるところです。私がよく使う方法は仮想マシンを使う方法です。複数のバージョンのOSを全て仮想化しておき、仮想マシンにUSB機器を接続します。物理的なマシンは1台で間に合うので、物理的なスペースも少なくても間に合います。通信対象のデバイスも1台で間に合います。複数の仮想マシンを同時に起動しておけば、複数のOSで動作を確認するときも素早くOSを切り替えられます。デメリットは、あくまで仮想マシンなので、デバッグには使えても、最終的なテストにするには若干不安があることです。USB機器の仮想化(というよりも仮想マシンからダイレクトに通信できるか)の性能も仮想化ソフトに依存してしまうところです。仮想化ソフトはどれが良いか?macOSでmacOSをゲストOSとして仮想化できるソフトはOSSから商用まで含めて複数あります。どれが良いかというのは判断基準が使用目的によって異なるので難しいところです。Desktopがこの記事執筆時点では最も優れいていると思います。Desktopではどちらも仮想マシンの中で実機と同様に動作しました。デバイス他社の商用の仮想化ソフトではMSCデバイスは動いても、MTP/PTPデバイスは認識もされないという動作でした。17時点では問題なく動きます。14くらいのときには動いていたように思いますが、記憶が定かではありません。できるだけ新しいものを使った方が良いでしょう。Silicon版は?残念なことに、本記事を執筆している時点(2022年1月4日。Silicon版のゲストmacOSにはUSB機器を接続できません。ARKitARKitはiPhoneやiPadを使ったAR(拡張現実)アプリを作るためのフレームワークです。基礎から学ぶMetal「基礎から学ぶMetal」を執筆しました。本書はMetalを使ってGPUプログラミングを行うための最初のステップを解説するMetalの解説書です。SwiftUI」というタイトルの本を執筆しました。10.15などから使用可能になったSwiftUIの入門書です。公式ページへのリンクを追加しました。v2.1への対応方法へのリンクを追加しました。プログラミングの世界」という本を執筆しました。Objective-C逆引きハンドブック」を執筆しました。発刊)という本を執筆しました。Engineer(ソフトウェアエンジニア)アールケー開発代表。Appleプラットフォーム向けの開発を専門としているソフトウェアエンジニア。ARKitARKitはiPhoneやiPadを使ったAR(拡張現実)アプリを作るためのフレームワークです。基礎から学ぶMetal「基礎から学ぶMetal」を執筆しました。本書はMetalを使ってGPUプログラミングを行うための最初のステップを解説するMetalの解説書です。SwiftUI」というタイトルの本を執筆しました。10.15などから使用可能になったSwiftUIの入門書です。公式ページへのリンクを追加しました。v2.1への対応方法へのリンクを追加しました。プログラミングの世界」という本を執筆しました。Objective-C逆引きハンドブック」を執筆しました。発刊)という本を執筆しました。