woshidan's loose leaf

ぼんやり勉強しています

iOSアプリをxcodebuildでビルドする(途中)

Appiumの前段階として、Simulatorなどにインストールするビルド済みのAppファイル*1*2が必要です。

メモ

そういうわけで、ターミナルから xcodebuild を使って Appファイル の作成を試します。

$ xcodebuild
xcodebuild: error: The directory /Users/woshidan/path/ios-project/root/ does not contain an Xcode project.

$ cd path/to/XcodeProject

$ ls
TestApp         TestApp.xcodeproj       TestAppUITests          build

まずは、 XCodeで作成したプロジェクトのあるところ( .xcodeproj ファイルのあるディレクトリ ) へ移動します。

依存しているライブラリのクラスのヘッダが見つからない ...

xcworkspace など依存ライブラリの設定が入ったファイルを、 -workspace で指定しましょう。その際、 schema も指定が必要です。

// # CocoaPodsを使っていてxcworkspaceを指定してビルドする
$ xcodebuild -workspace ../../Test/TestLib.xcworkspace -scheme TestApp

CompileStoryboard TestApp/Base.lproj/Main.storyboard というメッセージが出てStoryBoardがビルドできない

Xcode のバージョンによっては、特定の設定がないとビルドができないものがあります。そう、古い設定は新しいXCodeのバージョンが出るたびにビルドできなくなる可能性があるのです*3

というわけでそういう場合は、xcodebuildで利用するXCodeのパスを古いものに xcode-select で切り替えます。

# xcode-select -s /Applications/__oldXcode.app/Contents/Developer

シミュレータでビルドしてもらうよう指定する

-sdk iphonesimulator オプションを追加してビルドします。

$ xcodebuild -workspace ../../Test/TestLib.xcworkspace -scheme TestApp -sdk iphonesimulator

のはずなんですが、めっちゃいっぱい ❌ /Applications/__oldXcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/include/sys/_types.h:76:9: unknown type name '__uint32_t'; did you mean '__uint128_t'?

が出てつらいんで解決したらまたなんか書こう...。

*1:.appファイルはXCodeでビルドが完了すると $(PROJECT_DIR)/build/Release-iphoneos/xxxxx.app のようなパスに作成され、これを Payload フォルダに入れて圧縮 -> 拡張子を変更したものが .ipa ファイル https://developer.apple.com/jp/documentation/IDEs/Conceptual/AppDistributionGuide/TestingYouriOSApp/TestingYouriOSApp.html http://lain.heavy.jp/lain/2012/01/13/462 参照

*2:appiumのcapsファイルに指定するファイルは .ipa でも .app でもよさそう...?

*3:若干、いいすぎですが、メジャーバージョンが2~3離れたりしたら厳しい