はじめに
本記事は以下を参考にXCodeでプロジェクトを作るところから初めて
実際に起動するまでの手順の備忘録です
フォルダ構成
LiveViewNativeがPhoenixのProjectの配下にnativeディレクトリを作成してそこに各OSのPJおいてたのでそれに合わせる
こんな感じになる
basic/native/basic
iOS PJを作る
xcode new project phoenix pj/native/ に作成
- ZIPFoundation
- liberlang
- native-lib.cpp
- native-lib.hpp
をXcodeの画面同士でサンプルからコピー
Bridge-Headerを作るかを訊かれるのでOK
ヘッダーに以下を追加
#import "native-lib.hpp"
Carthage まわり
ライブラリのインストールだったりビルドをしてくれます
Cartfileのファイルを作成
github "weichsel/ZIPFoundation" ~> 0.9
以下を実行
carthage update --use-xcframeworks
XcodeでliberlangとZIPFoundation を embed & sign にする
アプリの中身のコードを作成
TodoApp.swiftの中身をコピー
import SwiftUI
@main
struct BasicApp: App {
@Environment(\.scenePhase) var scenePhase
var content = ContentView()
var body: some Scene {
WindowGroup {
self.content
}
.onChange(of: scenePhase) { phase in
switch phase {
case .background:
print(".background")
case .active:
print(".active")
if let bridge = Bridge.instance {
bridge.reinit()
}
default: break
}
}
}
}
以下はXCode同士でファイルコピー
- Bridge.swift
- ContentView.swift
- WebView.swift
- WebViewController.swift
ビルド設定
run_mixをVSCode経由でコピー(実行権限とかがめんどくさいので)
パスがいつものと違うのでそこを注意
#!/bin/bash
set -e
# Setting up the PATH environment
[ -s /opt/homebrew/bin/brew ] && eval $(/opt/homebrew/bin/brew shellenv)
[ -s /usr/local/bin/brew ] && eval $(/usr/local/bin/brew shellenv)
# This loads nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# This loads asdf
if [ -s "$HOMEBREW_PREFIX/opt/asdf/libexec/asdf.sh" ]; then
\. "$HOMEBREW_PREFIX/opt/asdf/libexec/asdf.sh"
elif [ -s "$HOME/.asdf/asdf.sh" ]; then
\. "$HOME/.asdf/asdf.sh"
fi
BASE=`pwd`
export MIX_ENV=prod
export MIX_TARGET=ios
mix local.hex --force --if-missing
mix local.rebar --force --if-missing
# Phoenix PJまでのパスに変更
cd ../../
if [ ! -d "deps/desktop" ]; then
mix deps.get
fi
if [ ! -d "assets/node_modules" ]; then
cd assets && npm i && cd ..
fi
# xcodeで作成したプロジェクト名に変更
if [ -f "$BASE/basic/app.zip" ]; then
rm "$BASE/basic/app.zip"
fi
mix assets.deploy && \
mix release --overwrite && \
cd _build/ios_prod/rel/basic && \ # phoenix PJ名
zip -9r "$BASE/basic/app.zip" lib/ releases/ --exclude "*.so"
# ↑ここも忘れずに
Build PhaseにRun Scriptを追加
以下のように設定
#!/bin/bash
set -e
./run_mix
- run_mixを実行
- output fileに app.zipを追加
build時にrun_mixを実行できるようにProjectの設定で User Script SandboxをNoにする
ビルド実行!
動いた!
最後に
これでアプリ名の変更とかめんどくさい処理をしなくてもアプリ作れるので提出が楽になるといいなぁ