はじめに
みなさんSkipというツールはご存知でしょうか。
SwiftのコードをKotlinにトランスパイルして、Androidのアプリも同時に作れるツールです。
Github
この記事ではSkipの導入から簡単なアプリを作成し、iOS/Androidのシュミレーターでビルドするところまでをご紹介します。
注意
Skipをインストールしてから14日間の試用期間は無料です。
それ以降は下記の通りの費用がかかります。
- Small Bussinessはこちらが当てはまるようです
- 認定教育機関
- 登録された非営利団体
- 前年度と当年度のそれぞれで総収入が250,000米ドルを超えていない企業および団体
- 総収入が、前年度と当年度それぞれで250,000米ドルを超えない個人
価格ページ
Skipを使うにはXcode15とAndroidStudio2023が必要になります!
本題
インストール
まずはHomebrewを使用しSkipのインストールを行います。
brew install skiptools/skip/skip
この画像が表示されるとインストールが完了です。
そしてこのコードで開発前提条件が満たされていることを確認します。
skip checkup
試用期間後にライセンスキーが必要になるので、こちらのコードで取得します。
skip hostid
このコマンドを叩くと「AAAAAAAAAAAA」のようなIDが帰ってくるのでこれを~/.skiptools/skipkey.env
に保存します。
SKIPKEY: AAAAAAAAAAAA
アプリの作成&立ち上げ
作成するアプリの名前と版フォルID、作成するディレクトリを入力して、プロジェクトを作成します。
(このコードではプロジェクトを作成し立ち上げまで実行します)
skip init --open-xcode --appid={バンドルID} {ファイル名} {AppName}
(例:SkipSampleというアプリをskip-sampleというフォルダに作成する)
skip init --open-xcode --appid=com.hoge.SkipSample skip-sample SkipSample
すぐに開かずにアプリだけ作る場合はこちらでできます!
skip init --appid={バンドルID} project-name {AppName}
例: skip init --appid=com.hoge.SkipSample skip-sample SkipSample
実行
いよいよ実行です!
Xcode上で「⌘+R」で実行をする前に、 Androidのシュミレーターを立ち上げる必要があります!
(Androidのシュミレーターは「emulator」と呼ぶらしい)
AndroidStudioを開いたら出てくるこの画面のOpenの下にある「MoreActions」をタップし、
「Virtual Device Manager」を選択肢します。
こんな画面になると思うので、ここで実行ボタンを押します!
そして⌘+Rで実行すると、iOS/Androidの両方で、Skipのデフォの画面が表示されたと思います!
使ってみての所感
Swiftのコードは{AppName}/{AppName-Package}/Sources/{AppName}
に入っているのでここをいじれば普段通りにアプリの作成ができそうです。
少し触ってみて思ったのは、
普段VStack(spacing: 0) {}
とかで書けるところが、Skipを使用するとThe integer literal does not conform to the expected type Double?
というエラー出て、型推論や暗黙的な型変換が効いてない感じです。
なのでVStack(spacing: 0.0) {}
や.frame(width: 100.0)
のように書かないとコンパイルが通りません。
あとImage(systemName:)
の使用には注意が必要です。
SwiftUIの何がSkipによってサポートされているのかはSupported SwiftUIに詳しく書いてありますが、SFImageもその一つです!全てがサポートされているわけではないので確認してから使用してください。
またAndroid側ではMaterialDesignSystemIconsを参照しているので、少しデザインが変わります!
例えばImage(systemName: "pencil")
をやるとこうなります。
Android | iOS |
---|---|
そして、ローカルに保存した写真を使用する際に、iOSだけなら
Image("Hoge")
でいけますが、現在SkipではAsyncImage
を使ってBundle.module.url
から写真のデータを取得する必要がある点も注意です。
AsyncImage(url: Bundle.module.url(forResource: "Hoge", withExtension: "png"))
まだ少ししか触れていないので、他に気になることがあったら逐一追記していきます!
最後に
最後までお読みいただきありがとうございました!
SwiftでAndroidのアプリも作れちゃうのは、個人的にはとても嬉しいのでSkipのこれからに期待したいなと思います!
Skipでアプリ作ってリリースしてみた!とか出したい...