kivy-iosで作ったプロジェクトがXcodeでビルドできない(Command PhaseScriptExecution failed with a nonzero exit code)


 困ったこと

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
       └ 雑多なファイル類

試した右往左往

色々試した。

結局、解決策

ここで議論されていた。issue探しまくった・・・
書いてあることを一応転記する。自分が書いたソースコードのディレクトリ(main.pyが含まれるディレクトリとその配下)でtoolchain buildtoolchain createを行うと、前者が作ったフォルダをXcodeがあやまって参照して、エラーが起こるらしい。

具体的には以下のようにした。
①まずrecipeを使用したライブラリのコンパイル

cd ~/working_dir/
mkdir ./for_link/
cd for_link
toolchain build python, kivy

↓①の結果

~/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
       └ 雑多なファイル類

以上のようにフォルダを分けることで、動かすことができました〜!

学び

公式のりーどみーの書き方に騙されたが、常識的に考えてビルドするのに使う作業ディレクトリはソースコードのディレクトリと分けた方が良かった。
まさかカレントディレクトリを汚すとは思わなかった・・・・