🍎

M2(M1) Mac Book AirでElixir DesktopのサンプルをビルドしてiPhone13Proで動かしたメモ

2023/03/05に公開

はじめに

今回はElixir DesktopのサンプルアプリをiOS向けにビルドして動かしてみたので各種設定のメモになります。
同様の環境を使っている方の参考になれば幸いです。

https://github.com/elixir-desktop/desktop

環境

結論ですが最終的には下記のような環境で動作しています。

実行環境

  • Mac Book Air

    • OS:13.2.1
    • CPU:M2
    • MEM:24GB
  • iphone13Pro

    • OS:16.3.1

各種バージョン

・Xcode(app store)
Version 14.2

Settings > Platforms
iOS:16.2
MacOS:13.1
watchOS:9.1 ※追加インストール(これがないとSwift の依存パッケージ (ZIPFoundation)で失敗する)
tvOS:16.1 ※追加インストール(これがないとSwift の依存パッケージ (ZIPFoundation)で失敗する)

Team: personal Team
Bundle Identifier: com.example.kiyomaru ※デフォルトだとビルドが動かない

・carthage(brew管理)
/opt/homebrew/Cellar/carthage/0.39.0 (8 files, 7.2MB) *

・wxwidgets
wxwidgets: stable 3.2.2.1 (bottled), HEAD

・Elixir(asdf管理)
Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]
Elixir 1.13.4 (compiled with Erlang/OTP 25)

・Erlang カスタムOTP(asdf管理)
※RyoWakabayashiさんがForkしたOTP
ref:diode/beta

・nodejs
v19.3.0

構築手順

下記の記事を参考に構築しました。

https://qiita.com/RyoWakabayashi/items/f5d97a7e857983eac7a4

Xcodeのインストール

当時の最新をインストールしました。(14.2)

https://apps.apple.com/jp/app/xcode/id497799835?mt=12

Xcode関連の各種設定

Xcode のコマンドラインツールを明示的に指定する
sudo xcode-select -s /Applications/Xcode.app
Platformsの追加インストール

のちのち登場するSwiftの依存パッケージ(ZIPFoundation)をインストール際にこれらが不足していて失敗するためにインストールしておきます。

Settings > Platformsに移動
下記をインストール

watchOS:9.1 
tvOS:16.1

Elixir環境および周辺環境のセットアップ

asdfによる管理をしていますので下記コマンドでインストールをします。
asdfのインストールはこちら

https://asdf-vm.com/guide/getting-started.html#community-supported-download-methods

asdfでバージョン管理できるように各種プラグインをインストールします。

asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git

カスタムOTPのインストール

参考記事の執筆者のRyoWakabayashiさんがフォークしてasdfにてインストールできるようにしたカスタムOTPをインストールするように環境変数を設定します。

export OTP_GITHUB_URL="https://github.com/RyoWakabayashi/otp"

Elixir,nodejsのインストール

.tools-versionsを作ってインストールします

# .tool-versions
erlang ref:beta
elixir 1.13.4-otp-25
nodejs 19.3.0

インストール

asdf install

ElixirDesktopサンプルの実行

下記のリポジトリからcloneしてきます。

サンプルをclone

git clone https://github.com/elixir-desktop/ios-example-app.git
cd ios-example-app

asdfのバージョン指定

asdf local elixir 1.13.4-otp-25
asdf local erlang ref:beta
asdf local nodejs 19.3.0

Swiftの依存パッケージ(ZIPFoundation)をインストール

brew install carthage # asdfでインストールしたけどエラー吐いたのでとりあえずはこれはbrew管理にした
carthage update --use-xcframeworks

xcodeを起動、各種設定

open todoapp.xcodeproj #ios-example-appディレクトリ内で実行

Targets>Todoapp>General>Signningを開く
ここで下記のTeamとBundle Identifierを設定する。

Team: personal Team
Bundle Identifier: com.example.kiyomaru ※デフォルトだとビルドが動かない

とりあえずBundle Identifierはデフォルトだと動かないので下記の記事を参考にexample.comを使った。
公開予定もなくてサンプルなのでこれでいいかなと思います。

https://zenn.dev/usamaru/articles/725b759d6a9561

xcodeをはじめて触るのでまだよくわかってない。

実行環境iphone13pro側の設定

下記の記事を参考に開発者モードを有効にして信頼できるアプリ登録した。

https://qiita.com/nonkapibara/items/d14c796ca69c8a4e58d2
https://www.techgaku.com/about-developer-mode/

ビルドして実行

参考記事では環境変数だったり細かい設定を入れていますが、自分の環境では特に何もせずbuildしてその後runでアプリケーションを実行できました。

終わりに

ElixirDesktopが動きました!
構築自体は少し詰まったものの参考記事のおかげでだいぶスムーズに作ることができました。
まだ内部の動作原理はわかっていないのでこのサンプルをベースにElixirDesktopの実装を知っていこうと思います。

あと、初めてiPhoneにxcodeでビルドしたアプリに転送して動かしたのでとても楽しい気持ちです。
今回の記事が多くの方の参考になれば幸いです。

参考リンク

### 手順だったり調べる中で参考になったいろんなリンク
https://qiita.com/RyoWakabayashi/items/f5d97a7e857983eac7a4
https://github.com/RyoWakabayashi/otp/tree/beta
https://qiita.com/kinchiki/items/18001c69945dc4467e6c

elixirdesktopやそのxcodeや動作環境などの周辺知識

https://speakerdeck.com/piacerex/elixirdesktopru-men-web-sumahowo1tufalsesosude-api-hellnixian-ranaikai-fa-ti-yan-elixirimp-number-22
https://developer.apple.com/jp/news/?id=trjs0tcd
https://qiita.com/zeero/items/c03fd844b2485ec2e1e2

GitHubで編集を提案

Discussion