iOS/Android から Mac へ、ブラウザ経由でファイルを転送できる macOS アプリを作った
はじめに
アプリ開発中にデバッグで気になった画面をスクショに撮って Mac に送りたい場面が頻繁にあります。iPhone なら AirDrop でなんとかなりますが、Android 端末はそうもいきません。最近の Pixel は AirDrop 相当の機能が使えるようになってきたそうですが、ニッチな端末だとまだ難しいことも多いです。
USB ケーブルを使う方法もありますが、手元にないと詰みます。クラウドストレージ経由だとアップロードとダウンロードの 2 ステップが発生します。iOS でも Android でも同じ操作でファイルを Mac に送れる仕組みが欲しくて作ったのが FluffDrop なので紹介したいと思います。
仕組み
Mac 側で HTTP サーバーを立て、そのアドレスを QR コードにします。スマホのカメラで読み取るとブラウザが開き、そこからファイルを選んで送信するだけです。送信側に専用アプリのインストールは不要で、OS 標準のカメラとブラウザだけで完結します。
Mac 側は SwiftUI の MenuBarExtra を使ったメニューバーアプリとして常駐させています。HTTP サーバーは Swift Concurrency ネイティブの FlyingFox を使いました。QR コードは CoreImage でオフライン生成し、サーバー起動と同時に表示します。
仕上がり
Mac 側のポップオーバーはこんな見た目です。サーバーが動いている間、QR コードと IP アドレスが表示されます。
iPhone でカメラアプリを開いて QR を読み取ると、そのままブラウザでアップロード画面が開きます。
ファイルを選んで送信するだけです。テキストを直接入力して .txt ファイルとして送ることもできます。
まとめ
以前 Mimicry を作った際に、同一サブネット上の Mac でプロキシサーバーを立て、デバイスの通信を中継してモックレスポンスを返すアプローチに触れていたことが、今回の着眼点につながった気がします。
HTTP サーバーと QR コードを組み合わせることで、送信側をプラットフォーム非依存にできました。同一サブネットにさえいれば iPhone でも Android でも PC でも送れます。業務でもいかしていきたいと思います。