世界を動かす技術を、日本語で。

AndroidにおけるSwift: 完全なネイティブアプリ開発が可能に

概要

  • SwiftAndroidアプリ 開発が可能な新しい環境
  • Droid framework による 宣言的UI構築 のサポート
  • AndroidXMaterial Design などの豊富なコンポーネント提供
  • JNIレイヤー を完全に抽象化した高レベルAPI
  • ドキュメントは 随時更新中、404や誤字の可能性あり

SwiftでAndroidアプリ開発を始める最適な場所

  • Swift言語Androidアプリ 開発が現実となった新環境

  • ConstraintLayoutVStack など、SwiftUIライクな宣言的構文でUI構築

  • 例:

    ConstraintLayout {
      VStack {
        TextView("Hello from Swift!")
          .width(.matchParent)
          .height(.wrapContent)
          .textColor(.green)
          .marginBottom(16)
        MaterialButton("Tap Me")
          .onClick { print("Button tapped!") }
      }
      .centerVertical()
      .leftToParent()
      .rightToParent()
    }
    

    直感的なコード記述

  • SwiftUI のような構文で ネイティブなAndroid UI を作成可能

  • ユーザーインターフェースユーザー体験 を両立した設計

Droid frameworkの特徴

  • Droid frameworkAndroidアプリ開発 のための基盤
  • AndroidXFlexboxMaterial Design などの 充実したコンポーネント を提供
  • 宣言的構文 でUIやロジックを簡潔に記述
  • JNIレイヤー (Java Native Interface)を完全に隠蔽
    • Swift開発者Android固有の複雑さ を意識せずに開発可能
    • 高レベルAPI により、 生産性向上保守性向上 を実現

ドキュメントと今後の展望

  • 公式ドキュメント は現在も 積極的に開発中
  • 404エラー誤字脱字 が発生する場合あり
  • 新しいコンテンツ が日々追加されている状況
  • ユーザーのフィードバック を歓迎する姿勢
  • 今後のアップデート に期待

Hackerたちの意見

Swift Stream IDE v1.17.0をリリースしたよ!これで、完全にSwiftだけでネイティブなAndroidアプリ開発ができるようになった。XMLやJava、Kotlinに触れずにアプリが作れるんだ。内部では、SwifDroidっていうフレームワークが動いてて、Androidアプリのライフサイクルやアクティビティ、フラグメント、UIウィジェット(Android、AndroidX、Material、Flexbox)を管理しつつ、Gradleの依存関係も自動で管理してくれる。IDEはSwiftをコンパイルして、Android Studio用のフルAndroidプロジェクトを生成するよ。これが初の公開リリースだ。ツールとフレームワークはオープンソースで、MITライセンスだよ。

おめでとう!Swiftで集中できるのをずっと探してたから、すごく嬉しい。いい仕事だね!

Swiftにとって便利なのは、C/C++ライブラリとのネイティブな相互運用性だね。これらはよくSwiftPMやBazelの依存関係として提示されるけど、SwiftPMの依存関係はどう扱ってるの?

面白いね。Java/KotlinのコードをSwiftにバインディングするのはどうやってるの?(私たちはSwiftの代わりにRustで似たようなことをしようとしてるんだ)

まずはクロスオーバーの話だね。Swift開発者にはどれくらいのAndroid開発経験が必要で、Android/Kotlin開発者にはどれくらいのSwift経験が必要なの?「XML、Java、Kotlinに触れずに」というのは、Android経験がないSwift開発者でも成功できるってことを暗に示してるの?それなら、KotlinやFlutterのアプリのうち、どれくらいがSwiftで書けると思う?今と来年ではどう?

Android StudioやIntellijに触れなくていいのは、すでに大きな改善だね。素晴らしい仕事だよ!

それとGradleは?Gradleをスキップして、あの依存関係管理の悪夢を回避できるの?

Xcodeを触るのは、Androidを避けるために濃縮塩酸に触るようなもんだね。

なんかこれについては聞いたことがなかったな。SwiftCrossUIと比べてどうなの?Skipもすごく魅力的だよね(実際にSwiftUIをネイティブに動かして、Composeに変換するから)。なるほど、SwiftCrossUIやSkipと比べると、これはAndroid専用のSwiftUIっぽいね。他の二つはSwiftUIやSwiftUIっぽいものを書けて、AppleのプラットフォームとAndroid(または他の場所)で動かせるんだ。

目的が違うアプローチだね。SwifDroidはSwiftでのネイティブAndroid開発についてだよ。クロスプラットフォームのUIを書くんじゃなくて、Android特有のUIをSwiftで書いて、AndroidのビューシステムやAPIを直接使うんだ。目標は、JavaやKotlin、XMLに触れずに、活動やフラグメント、AndroidX、Materialを含む完全なAndroidアプリをSwiftだけで作ること。ほかのは「一度UIを書けばどこでも動く」っていうけど、UXに妥協があることが多いから、SwifDroidはAndroidにネイティブで書いて、Swiftから完全にコントロールできることに焦点を当ててるんだ。

プラットフォーム間で共通の言語を使うのは、SwiftでもKotlinでも表面的には素晴らしいけど、実際には期待される効率は得られないと思うんだ。結局、チームは二つのコードベースを持つことになるだろうし、違いがたくさんあって、結局KotlinやSwiftを使う必要があるなら、楽しんで使った方がいいと思う。二つの言語を知るのはそんなに悪くないよ。ほとんどの開発者はキャリアの中で多くの言語を学んで、気にせずに切り替えてるからね。あくまで私の意見だけど、これは良いプロジェクトだと思うよ。

二つ以上の言語を知ってるって、ちょっと解放感があるよね。みんなキラキラしたものが好きだけど、今回は近道はないよ。それに、あんな大企業にもっと依存するなんて考えたくもないし。仮にそれを脇に置いたとしても、Swiftは使うのが辛い言語だし、強制されてない場所でも使わなきゃいけないのは自分を痛めつけるようなもんだよね。

Hacker Newsで議論の続きを見る