ElixirDesktop環境構築 iOS for Mac

# はじめに
この記事は Elixirアドベントカレンダーのシリーズ４の２日目の記事です


ElixirDekstopのiOSアプリの開発環境の構築について解説し、
実際に以下のサンプルアプリをシミュレーターで動かします

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

![スクリーンショット 2023-11-27 19.57.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64198/c60776c7-94b1-af1c-2161-a3e1106a1a25.png)

# 検証環境

M1 Mac(Apple M1 Max)
Mac OS Sonoma(14.1.1)
Xcode 15.0.1


# Elixirのインストール
最初にErlangとElixirのインストールを行います
Elixirのバージョンは最新でも問題なく動きますが、ElixirDesktopで使用されるErlangバイナリのバージョンが25.0.4となっているため、このバージョンのElrangでアプリケーションのビルドをしないと動かないので注意が必要です

## asdf のセットアップ
様々な言語、ライブラリの管理・切替できるasdfでErlang/Elixirをインストールしていきます

https://asdf-vm.com/guide/getting-started.html

ソースからビルドでも構いませんが、brewにあるのでそちらからインストールを行います
```
brew install asdf
```

インストールが完了いたら、環境変数に実行パスを通します、
この例はbashですので、zshを使用している方は公式のドキュメントを参考にしてください

```
echo -e "\n. \"$(brew --prefix asdf)/libexec/asdf.sh\"" >> ~/.bash_profile
echo -e "\n. \"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\"" >> ~/.bash_profile
source ~/.bash_profile
```


## asdfのプラグイン追加
asdfに各言語のプラグインを追加していきます

Erlangのプラグインはこちら
https://github.com/asdf-vm/asdf-erlang

以下のコマンドでプラグインを追加します

```
asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
```
Elixirのプラグインはこちら

https://github.com/asdf-vm/asdf-elixir

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

## Erlangのインストールに必要なライブラリを追加

Erlangのインストールの前に必要なライブラリをインストールしていきます

https://github.com/asdf-vm/asdf-erlang#osx

```
brew install carthage git openssl@1.1 npm wxwidgets openjdk　autoconf  libxslt fop
echo 'export PATH="/opt/homebrew/opt/openjdk/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
```

## ErlangとElixirのインストール
Erlangのバージョンさえ気をつければいいので、 `1.15.7-otp-25`や`1.16.0-rc.0-otp25`
でも問題なく動きます

※ Mac OS sonomaにerlangをインストールする場合は --disable-jitオプションをつけてください
```
export DED_LDFLAGS_CONFTEST="-bundle"
export KERL_CONFIGURE_OPTIONS="--without-javac --with-ssl=$(brew --prefix openssl@1.1) --disable-jit"
asdf install erlang 25.0.4
asdf install elixir 1.15.7-otp-25
```

※2023/11/27日現在 wxwidgetsを組み込んだErlangのインストールに失敗しますが、iOSのアプリケーションをビルド・実行する際には使用されないので問題なく動きます

# 動作確認
インストールが完了したらサンプルアプリを git cloneして動かしてみましょう

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

git cloneが完了したら、 carthage update で関連ライブラリをインストールします
インストールに失敗した場合はiOS,tvOS watchOSのライブラリが最新版ではないことが考えられるので、時間はかかりますがXcodeを起動してインストールを行ってください

iOSだけインストールしたい場合は
`carthage update --platform iOS` とplatformオプションをつけましょう

```
cd ios-example-app && carthage update --use-xcframeworks
```

 ライブラリのインストールが完了したら、言語のバージョンを指定している `.tool-versions`を先程インストールしたelixirに書き換えましょう

```diff:.tool-versions
erlang 25.0.4
- elixir 1.13.4-otp-25
+ elixir 1.15.7-otp-25
```

書き換えが終了したら以下のコマンドでXcodeを開きます

```
open todoapp.xcodeproj
```

Xcodeを開いたら一番上のtodoappフォルダをクリックし、
generalタブのFrameworks,Libraries, and Embedded Contentの
liberlang の Embedを Embed & Sign に変更します

![スクリーンショット 2023-11-08 0.51.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64198/34c928ca-855c-04ca-25f1-3c91133fce18.png)

xcodeの実行ボタンをクリックしてビルドが成功するとアプリが起動します

※ 2023/11/28現在 openssl由来のエラーがでていて起動はしますがアプリが、使えない状態です。制作者さんと連絡を取りながら問題を解消中です

![スクリーンショット 2023-11-28 1.34.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64198/37dcc835-a70a-c58a-3e86-f76dad32e202.png)

ビルドが失敗する場合は `./run_mix`をコンソールから実行するとビルド時のエラーが出力されるので、そちらを確認しましょう

ビルドが成功して起動してからクラッシュした場合はXcodeの方にエラーメッセージがログに出力されているのでそちらを確認しましょう

# 最後に
OSのアップデート等によりうまく動かない状態ではありますが、次のステップで作成するプロジェクトだと動くのでひとまずおいておきましょう

クロスプラットフォームなアプリ開発はこのようにすぐ環境が壊れがちなので、安定するまでくじけず頑張りましょう

本記事は以上になりますありがとうございました

次はAndroidの環境構築になります