2022年2月2日この記事ですが、昔のXcodeの話です。現在のXcodeにはリモートデバッグ機能はありません。Xcodeではリモートデバッグの機能が入っています。Xcodeのヘルプでも解説されています。ヘルプに書かれている方法ですと、デバッグするプログラムを動かすマシンとデバッガを動かすマシンの両方からアクセスできる、共有フォルダをサーバーに用意する必要があり面倒です。サーバーのOSによっては、Xcodeの中間ファイルを作成できないことがあります。共有フォルダを用意しない場合は、ビルドしたバイナリをデバッグするプログラムを走らせるマシンにコピーするとなっています。これはもっと面倒です。調べてみると、共有の場所にあることは必須条件ではなく、デバッグするプログラムが動作するマシンとデバッガを動かすマシン上のどちらからみても、デバッグするプログラムとプロジェクトファイルやソースファイルのファイルパスが一致していればよいということのようです。それなれば、次のような方法でもできるはずと考えました。デバッグするプログラムを動かすマシンはヘルプ通りにSSHでログインできるようにするプロジェクトファイルとソースファイル一式がある、デバッガを動かすマシンは「ファイル共有」を有効にするデバッグするプログラムを動かすマシン上でデバッガを動かすマシンに「ファイル共有」で接続する「ファイル共有」で接続したら、「シンボリックリンク」を「ファイル共有」で接続したマシンに張るようにして、ファイルパスが一致するようにするヘルプ通りにリモートデバッグを行う試してみると、予想通りにうまく動きました。この記事では、防備録も兼ねて上記手順について詳しく記述します。SSHの準備ヘルプに従って行います。デバッガを動かすマシン上でターミナルを開き、次のように入力して、SSHのキーを生成します。dsa画面の指示に従って、秘密鍵と公開鍵を作成します。デフォルトのままであれば、ホームディレクトリに「.ssh」というディレクトリが作成され、その中に秘密鍵(「id_dsa」ファイル)と公開鍵(「id_dsa.pub」ファイル)が作成されます。Xのバージョンによっては、「dsa」タイプの鍵では動作しないことがあります。その場合は、次のように「rsa」タイプの鍵を作成して使用します。rsa次に公開鍵をログインするマシン(デバッグするプログラムを動かすマシン)にコピーします。デフォルト状態で作成される「.ssh」フォルダは不可視フォルダなのでFinderの「移動」メニューから「フォルダへ移動...」を選択し、フォルダパスに「~/.ssh」と入力します。「.ssh」フォルダに移動するはずですので、公開鍵ファイルをコピーします。ログインするマシン上では、公開鍵ファイルは「authorized_keys」というファイルに格納します。コピーした公開鍵ファイルをテキストエディタで開き、ログインするマシン上のログインするときに使用するユーザーのホームディレクトリ内の「.ssh」フォルダ内の「authorized_keys」ファイル内にペーストします。このファイルはログインできるユーザーの公開鍵を入れるファイルです。1行に1公開鍵という形で記述します。無ければ、作成してもかまいません。「.ssh」フォルダも無ければ作成してください。mkdir」コマンドで行います。~/.ssh次に、ログインするマシンの「システム環境設定」から「共有」を開き、「リモートログイン」を有効にします。ここまでできたら、一度、デバッガを動かすマシンから、SSHで接続してみてください。SSHで接続するには、ターミナルで次のように入力します。ユーザー名@IPアドレス(もしくはホスト名)IPアドレスはMac通しであれば、「マシン名.local」でも大丈夫です。社内システムの設定があれば、それを使ってください。ログインするときには、「known_hosts」ファイルに登録してもよいか、聞いてきますので、「yes」と入力します。次にパスワードを入力するようにプロンプトが出ますので、鍵生成の時に使用したパスワードを入力します。このときプロンプトに鍵ファイルのファイルパスが表示されれば、鍵の登録に成功しています。ファイル共有を有効にするデバッガを動かすマシンの「ファイル共有」を有効にします。「システム環境設定」から「共有」を開き「ファイル共有」を有効にします。次に、デバッグするプログラムを動かすマシンからデバッガを動かすマシンにファイル共有で接続します。接続したら、シンボリックリンクを張ります。「/Users/Someone/Documents/MyProject」というフォルダにソースファイル、プロジェクトファイルなど一式が格納され、ビルドされたプログラムも「/Users/Someone/Documents/MyProject/build」以下に保存されるとします。「ファイル共有」でマウントしているボリューム名が「Someone」だとします。(ルートディレクトリをマウントした場合は「MacintoshHD」など、起動ディスクのボリューム名です)この場合であれば、デバッグするプログラムを動かすマシン上で、ターミナルを開き、次のように入力します。/Users/Someone/Documents/MyProjectただし、デバッグするプログラムを動かすマシン上に、「/Users/Someone/Documents」フォルダがない場合は、シンボリックリンクを作成する前にこのフォルダを作成しておきます。Xcodeでの設定Xcodeでの設定はヘルプ通りです。Xcodeの「グループとファイル」で「実行可能ファイル」の中にある、プログラムをダブルクリックして設定を開き、「デバッグ」タブの「sshを使って実行可能ファイルをリモートデバッグする」にチェックを入れます。接続先には、先ほどSSHのテストに使ったのと同じものを使用します。入力する構文も同じで次のようにします。ユーザー名@IPアドレス(もしくは、ホスト名)自動的に「使用する標準入出力」が「パイプ」になりますが、そのままにしておきます。後は普通にデバッグ実行すると、SSHでログインされる先のマシン上でプログラムが起動します。実行するときは、SSHのアカウントを入力するように表示されますので、ユーザー名とパスワードを入力します。OSのバージョンが違っても大丈夫か?GDBさえ入っていれば、OSのバージョンが違っても大丈夫です。GDBはXcodeと一緒にインストールされます。今のところ、私が試したことのある組み合わせは次のようなものです。10.6.1ソースを修正して再ビルドしたら起動しなくなった場合分けはよくわからないのですが、ソースを修正して再ビルドすると「dyld」まわりのエラーが出て起動しなくなることがあります。その場合は、実行ファイルをビルドするターゲットだけ「クリーン」を実行してからビルドすると動くようになります。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逆引きハンドブック」を執筆しました。発刊)という本を執筆しました。