とりあえずやってみればいいじゃん

とりあえずやってみればいいじゃん

エンジニア関連のことについてつらつら書くブログ

3/2 Swift on Android #tryswiftconf

try!Swiftのセッションまとめシリーズです。Eric Wingさんの「Swift on Android」についての記事になります。

資料

スライド共有サービスには上がっていないようです。try!Swift2017のslackの#slideには上がっているので、そちらをご参照ください。

内容

  • クロスプラットフォームの有用性をわかっているはず
  • 背景
  • これからの話は比喩を考えることによって理解が深まると思う
  • Cによって全ては可能になる
    • 特殊なプロパティがいっぱいある
    • あらゆる全ての言語がCとのやりとりができる
  • 言語とライブラリの間を区別することが重要

    • UIKitはライブラリであり、androidに移植されることはない
    • swiftのコアのみが重要
  • AndroidApp

    • AndroidSDKを使わなければいけない
    • ダイナミックなものはCで書けるようになった
  • Android NDK(Native Development Kit)

    • NDKはC,C++に向けだった
    • お粗末なものだった
    • googleはNDKに2人しかリソースを割いてない
    • 公で批判するというのが我々にできること
  • Lua

    • 組み込み可能な言語
  • Androidはダイナミックライブラリの挙動で不安定なところがある
  • ライブラリデベロッパーは減っている
  • NDKの問題
    • 様々なNDK versionが混在している
    • Androidはネームバーションを指定していないため、衝突してしまう
  • Android NDKはほとんど提供していないのでノウハウを必要とする
  • libICU
    • 自分のライブラリと一緒にロードしようとすると、何事もなかったかのように動かない
    • すでにロードされているとみなされる
    • ラッキーでもクラッシュが起こる
  • どうやってAndroid上でSwiftを使うか
    • JavaからスタートしてCを渡ってSwiftを動かす
  • 作り方
    • Activetyをスタートさせる
    • Cocoaのイニットのようなもの
    • 順番が重要で、依存を全て解決してからSwift部分をロードする
    • @_cdeclを付けるとC言語から呼び出せるようになる
    • イベントループをブロックしてはいけない
    • Swiftをアプリの中でどのように使いたいか書いておく必要がある
  • 注意点
    • グローバル変数が初期化されなかったりする
    • ビルドシステムの違いにびっくりする
    • Swift Package Managerは使えなさそう
    • →CMake
  • SwiftでのAndroidアプリの書き方
  • GUI
    • どのようなプラットフォームでも画面は同じ
    • 依存度はゼロで、プロジェクトに入れることも可能
    • particle デザイン
      • 携帯端末では理想的ではない
      • デザインに関しては各々考えてください
    • cocoaを再コンパイルして他に使えたらいいのに
      • 難しいので夢半ばになっている
    • ネイティブツールキットは少ないし、Swiftとなるともっと少ない
    • IUPはお気に入り
  • ダイアログ
    • macなら新しいウィンドウ、iOSならナビゲーション遷移、Androidならアクティビティ遷移
    • Windowsでも動かせる
  • Blurrr SDKを使った
    • ビルドのシステムチャレンジを解決してくれる
    • プリビルドのライブラリができる
    • まだ作り途中でみなさんの支援が必要
  • 友人について

Q&A

  • Appleがこのへんに関してどれくらい悪いのか

    • かなりいいと思う
    • Androidの方が4-10倍難しい
  • 例えばSwift Androidのプラットフォームの違い、メモリ管理の違いは?

    • Swiftの場合はNDKを使っている
    • AndroidJava)はメモリのリミットを課している
    • Androidは多くのramを入れているはず

その他このトークに関する情報源

togetter

Swift on Android #tryswiftconf - Togetterまとめ