# 困ったこと
kivy-iosで作成したプロジェクトファイルが、XcodeでビルドしようとするとCommand PhaseScriptExecution failed with a nonzero exit code
というエラーを出して止まる。
環境情報
MacOS: Big Sur 11.5.1
XCode: 12.5.1
kivy-ios(toolchain): 1.2.1
Python: 3.9.4
フォルダ構造:
~/working_dir/
└ MyApp/
├ main.py
├ main.kv
└ resources/
エラーが出た方法
※ 事前準備として、Xcodeのインストールと、2021.8.6時点の公式readmeに従って、「Installation & requirements」セクションまで終わらせた。
cd ~/working_dir/MyApp/ #すべての元凶
toolchain build python3 kivy # recipeのビルド
toolchain create toshoapp /Users/MyName/working_dir/MyApp/
open toshoapp-ios/toshoapp.xcodeproj
以上を行うと、XCodeが立ち上がる。ビルド(左上の▶︎)すると、10-30分後ぐらいにエラーで止まる。
(さらにエラー内容が表示されるまでに異常に時間がかかる・・・)
そして実際に発生したエラーがこちら↓↓↓↓
rsyncのエラーに見える。
この時のディレクトリ構造が以下
~/working_dir/
└ MyApp/
├ main.py
├ main.kv
├ resources/
├ build/ # ここから下が増えた
├ dist/
└ toshoapp-ios/
├ toshoapp/
├ YourApp/
├ LaunchImages/
├ toshoapp/
├ resources/
├ toshoapp.xcodeproj
└ 雑多なファイル類
試した右往左往
色々試した。
- main.pyが
toolchain create
の第二引数のフォルダに入っているか確かめる - 同時に発生していたWARNING(recipeで導入したpip内のフォーマット演算子が欠損しているみたいなエラーを修正
- createの第二引数が悪いのかと再度チェック(https://github.com/kivy/kivy-ios/issues/381)
- google, google, google...
結局、解決策
ここで議論されていた。issue探しまくった・・・
書いてある問題の原因を転記する。自分が書いたソースコードのディレクトリ(main.pyが含まれるディレクトリとその配下)でtoolchain build
やtoolchain create
を行うと、toolchainが作ったフォルダをXcodeが誤って参照しエラーが起こるらしい。
具体的には以下のようにした。
①まずrecipeを使用したライブラリのコンパイル
cd ~/working_dir/
mkdir ./for_link/ # toolchain用の別のフォルダを作成
cd for_link
toolchain build python, kivy # 新しく作ったフォルダ内でtoolchainを利用
↓①の結果
~/working_dir/
├ MyApp/
│ ├ main.py
│ ├ main.kv
│ └ resources/
└ for_link/ #ここから下が増えた
├ build/
└ dist/
②次に、Xcodeプロジェクトの生成
toolchain create toshoapp /Users/MyName/working_dir/MyApp/
cd ~/working_dir/
mkdir ./prdct/
mv ./MyApp/toshoapp-ios ./prdct/
cd ./prdct
open toshoapp-ios/toshoapp.xcodeproj
↓②の結果
~/working_dir/
├ MyApp/
│ ├ main.py
│ ├ main.kv
│ └ resources/
├ for_link/
│ ├ build/
│ └ dist/
├ prdct/ #ここから下が増えた
└ toshoapp-ios/
├ toshoapp/
├ YourApp/
├ LaunchImages/
├ toshoapp/
├ toshoapp.xcodeproj
└ 雑多なファイル類
以上のようにフォルダを分けることで、動かすことができました〜!
学び
公式のりーどみーの書き方に騙されたが、常識的に考えてビルドするのに使う作業ディレクトリはソースコードのディレクトリと分けた方が良かった。
まさかカレントディレクトリを汚すとは思わなかったが・・・・