Swift

Swift と SwiftUI で実現するマルチプラットフォーム開発ガイド

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

Swift と SwiftUI のマルチプラットフォーム対応概要

Swift と SwiftUI は、Apple が公式に提供する「単一コードベースで iOS・macOS・watchOS・tvOS へ展開できる」フレームワークです。近年はオープンソース化が進み、コミュニティ主導のツールを使って Android 向けバイナリを生成する試みも見られます。本節では、公式サポート範囲と 2026 年時点で実務的に利用できる手段を整理し、全体像を把握できるようにします。

Apple が提供する公式ガイドの要点

Apple の開発者向けサイト(Swift – Get Started)では、以下が強調されています。

  • 共通言語としての Swift:同一言語で iOS・macOS・watchOS・tvOS にコードを流用できることが公式に保証されています。
  • SwiftUI の宣言的 UIView プロトコルと @State 系プロパティラッパーにより、プラットフォーム固有の差分を最小限に抑えた UI 開発が可能です。
  • Catalyst の位置付け:iPad アプリを macOS に移植する公式手段としてサポートされています。一方、Android 向けの「Swift for Android」については Apple が正式に提供しているわけではなく、オープンソースコミュニティが実験的に取り組んでいる領域です【※1】。

ポイント:Swift と SwiftUI を使うことで多くのロジックを共有できますが、実際に共有できるコード量はプロジェクトの構造や使用 API に依存し、一般的には 50 %〜70 % 程度と評価されています【※2】。


Xcode 15 以降でのマルチターゲットプロジェクト作成手順

Xcode 15 からは「Supports Multiple Platforms」オプションが標準化され、1つのワークスペースで iOS と macOS(さらには watchOS・tvOS)を同時に管理できます。このセクションでは、新規プロジェクト作成から共有コード配置までの実務フローを具体的に示します。

新規プロジェクトの設定

まず Xcode を起動し、File > New > Project を選択します。テンプレートは App (SwiftUI) を選び、以下の項目を入力してください。

  1. Product Name:例 MultiPlatformDemo
  2. Interface:SwiftUI
  3. Life Cycle:SwiftUI App
  4. Language:Swift
  5. Supports Multiple Platforms にチェック(iOS と macOS が自動で追加されます)

ポイント:この設定だけで iOS 用と macOS 用の 2 つのターゲットが生成され、@main エントリは共通化されたままビルドできます。

プラットフォーム別ターゲットと共有コードディレクトリの構築

次にプロジェクト構造を整理します。推奨するフォルダ構成は以下の通りです(※ディレクトリ名は任意で変更可能)。

  • Packages/SharedPackage.swift を作成し、.target(name: "Shared", path: "Sources") のように設定すれば、Swift Package Manager 経由で両ターゲットから参照可能です。
  • 各プラットフォーム固有のリソース(画像や Info.plist 等)は iOSOnly / macOSOnly に配置し、Xcode の「Target Membership」チェックボックスで対象を限定します。

ポイント:共有ロジックを SPM パッケージ化すると、他プロジェクトでも再利用が容易になるだけでなく、CI でのビルドキャッシュも有効活用できます。


共通コードとプラットフォーム固有コードの分離方法

Swift の条件コンパイルディレクティブ #if os(...) を活用すると、同一ファイル内で OS 毎の実装差分を明示的に管理できます。ここではベストプラクティスと具体例を紹介します。

#if os(iOS) / #if os(macOS) での条件コンパイル

以下は UI コンポーネントの差分を扱う典型的なコードです。

  • #if ブロックはコンパイル時に除外されるため、実行ファイルサイズの無駄な増大を防げます。
  • 条件分岐が多数になる場合は ファイルレベルで分割 し、iOSOnly/Views/...swiftmacOSOnly/Views/...swift に配置すると可読性が向上します。

ディレクトリ構成例:Shared、iOSOnly、macOSOnly

ディレクトリ 主な内容
Packages/Shared ビジネスロジック、データモデル、プラットフォーム非依存の View
iOSOnly #if os(iOS) が不要な純粋 iOS 実装(例:WidgetKit、ARKit)
macOSOnly macOS 固有 API(例:AppKit ラッパー、メニューバー拡張)

ポイント:共通ロジックは必ず Shared に置き、プラットフォーム固有の UI やネイティブ API は条件コンパイルまたは別ファイルで分離することで、リファクタリング時の影響範囲を瞬時に把握できます。


Swift を Android に展開する – コミュニティツールチェーンの概要

Apple が公式に Android 向けサポートを提供しているわけではありませんが、Swift のオープンソース化に伴い Scade(正式名称:Scade – Swift‑to‑Android toolchain)というコミュニティベースのツールチェーンが注目されています。以下は 2026 年時点で確認できた情報をもとに、インストールから Xcode プロジェクトへの組み込み手順をまとめたものです【※3】。

Scade の公式情報とインストール方法

Scade は GitHub 上のリポジトリ(github.com/scade-io/scade)で公開されており、Homebrew からインストール可能です。Mac と Linux の両環境で動作します。

  • 必須環境:Java Development Kit (JDK) と Android SDK。
    bash
    brew install openjdk@17 # JDK 17 をインストール
    export JAVA_HOME=$(brew --prefix openjdk@17)/libexec/openjdk.jdk/Contents/Home

# Android SDK は Android Studio の「SDK Manager」から Command line tools と Platform‑Tools を導入
export ANDROID_SDK_ROOT=$HOME/Library/Android/sdk

注意:Scade は実験的なツールであり、すべての Swift 標準ライブラリが Android 上で動作するわけではありません。商用リリース前には必ず対象デバイスで包括的にテストしてください。

Xcode と Scade の連携例(Qiita 実装例へのリンク)

2026 年版 Qiita 記事「Swift でマルチプラットフォーム開発をしよう! #iOS」では、Scade を利用したビルドフローが具体的に示されています。主な手順は次の通りです。

  1. プロジェクト構成SwiftApp/ 配下に android/ ディレクトリを作り、Scade が生成した .aar パッケージ(例 libMyApp.aar)を配置。
  2. Xcode 側設定Build Phases → Run Script に以下のスクリプトを追加し、ビルド時に Scade を呼び出す。

bash
#!/bin/bash
set -e
SC_PATH=$(which scade)
$SC_PATH build --target android --output ./android/libMyApp.aar

  1. Android Studio 側settings.gradle にローカル .aar をインポートし、Kotlin/Java から Swift のエクスポート関数を呼び出すブリッジコードを作成。

ポイント:Scade は LLVM バックエンドを利用するため、Apple Silicon(M1/M2)環境でも高速ビルドが期待できます。ただし、Android API 33 以上での実機テストは必須です。


CI/CD とデバッグ・テスト戦略

マルチプラットフォームアプリは自動化されたパイプラインで品質を担保することが重要です。ここでは GitHub Actions を用いた macOS/Linux ビルドと、実機・エミュレータでの検証フローを示します。

GitHub Actions で macOS と Linux ビルドを自動化

以下は公式サンプルに基づくワークフローファイル(.github/workflows/multi.yml)です。

  • キャッシュactions/cache@v3 を利用すれば、Swift パッケージや Gradle の依存関係を永続化できます。
  • コード署名:iOS/macOS ビルドでは PROVISIONING_PROFILE_SPECIFIERCODE_SIGN_IDENTITY を GitHub Secrets に登録し、環境変数で渡す必要があります。

実機・エミュレータでのデバッグとベータ配布

作業 ツール 主なポイント
iOS デバッグ Xcode Simulator Cmd+Shift+K でクリーン後、対象デバイスを選択し実行。SwiftUI のプレビューは Option+Cmd+P でライブ更新可能。
Android デバッグ Android Emulator (AVD) API 33+ の仮想デバイスを作成し、adb install ./app-debug.apk でデプロイ。Scade が生成した .aar は Android Studio にインポートして使用。
ベータ配布(iOS) TestFlight + fastlane GitHub Actions に fastlane pilot upload ステップを追加し、.ipa を自動アップロード。
ベータ配布(Android) Google Play Console (Internal testing) + fastlane gradle bundleRelease で .aab を作成し、fastlane supply で内部テストトラックへ自動投入。

ポイント:CI 上でシミュレータ/エミュレータを起動できないケースでは、ユニットテストと UI テストだけを実行し、実機テストはプルリクエストマージ後に手動で行うフローが安全です。


次のステップ

本稿で紹介した Swift と SwiftUI の基本的なマルチプラットフォーム戦略Xcode 15 のマルチターゲット設定条件コンパイルによるコード分離コミュニティツール Scade を用いた Android 展開、そして GitHub Actions による CI/CD 構築 の順番で実装すれば、iOS・macOS・Android 向けの単一リポジトリが完成します。以下の手順で早速体験してください。

  1. 公式テンプレートリポジトリ(例 github.com/example/MultiPlatformDemo)をクローン
  2. Xcode でプロジェクトを開き、Supports Multiple Platforms が有効か確認
  3. Packages/Shared に簡単なビジネスロジックを書き、iOS と macOS の両方で動作することを確かめる
  4. Scade をインストールし、android/libMyApp.aar を生成して Android Studio へ取り込む
  5. GitHub Actions に上記 workflow ファイルを配置し、プッシュごとにビルドが走ることを確認

このサイクルを回すことで、コードの再利用性とデリバリー速度が大幅に向上します。疑問点や環境依存の問題は、公式フォーラム(Apple Developer Forums, Scade GitHub Issues)で質問すると迅速な回答が得られます。


参考文献・リンク

  1. 【※1】「Swift for Android」については Apple の公式ドキュメントに記載なし。コミュニティ情報は https://github.com/scade-io/scade を参照。
  2. 【※2】実際のコード共有率はプロジェクト規模・使用 API に依存する旨、2025 年の開発者調査(Swift.org Survey 2025)を基にした概算。
  3. 【※3】Scade の公式リポジトリと README(2026‑04 時点)。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Swift