AppiumでiOSアプリの起動しない時にやったこと+おまけ

環境

Appium 1.12.1
Ruby 2.6.3
iOS 12.1)

一通りの環境構築は済み、appiumリポジトリで公開されている TestApp.app.zip は起動することを確認できた。
あとは目的のアプリに差し替えるのみだったが、そこから予想外の苦戦を強いられた。(私の理解不足)
問題は、アプリ起動直後にクラッシュしてしまうこと。

Appiumのエラーログ

[Xcode] 2019-05-14 12:14:14.305381+0900 WebDriverAgentRunner-Runner[54539:1740041] Enqueue Failure: Failed to launch {package name}: The operation couldn’t be completed. (FBSOpenApplicationErrorDomain error 1.) /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/WebDriverAgentRunner/UITestingUITests.m 37 1


https://github.com/facebookarchive/WebDriverAgent/blob/master/WebDriverAgentRunner/UITestingUITests.m

iOS Simulator か .app の Architecture に問題があるとはすぐにわかったが、
勘違いから解決するまでの道のりが少々長かった。

結論から言うと、Archive する必要はありません。iOS Simulator でデバッグ実行した .app を使うか、 xcodebuild コマンドでビルドした .app を使えば動きます。ただそれだけ。

ハマった内容として、Archive 後に Distribute App を行い Export した ipa ファイルが arm64になっていて、iOS Simulator で実行出来ない。
どうやって x86_64 を Archive 時に含めようか Build Config を試行錯誤して消耗してしまっていた。
そもそも、x86_64 アーキテクチャを AppStore で配布は出来ないので、Archive の段階で、Unsupported Architecture を言われます。

Unsupported Architecture が出たときの対応方法として、 lipo コマンドを駆使して x86_64 を除いた実行ファイルを作る回答があって、まったく真逆のことをしていたことになる。
https://stackoverflow.com/questions/30547283/submit-to-app-store-issues-unsupported-architecture-x86

勘違いした理由は、Appiumの理解が浅かったから。

iOS Simulator で動くアプリを用意する

# 利用できるSDKの中から、iphonesimulatorを探す。
$ xcodebuild -showsdks           
2019-05-15 00:29:08.697 xcodebuild[9847:2715491] [MT] DVTPlugInManager: Required plug-in compatibility UUID D7881182-AD00-4C36-A94D-F45FC9B0CF85 for GraphQL.ideplugin (com.apollographql.xcode.graphql) not present
iOS SDKs:
        iOS 12.1                        -sdk iphoneos12.1

iOS Simulator SDKs:
        Simulator - iOS 12.1            -sdk iphonesimulator12.1

macOS SDKs:
        macOS 10.14                     -sdk macosx10.14

tvOS SDKs:
        tvOS 12.1                       -sdk appletvos12.1

tvOS Simulator SDKs:
        Simulator - tvOS 12.1           -sdk appletvsimulator12.1

watchOS SDKs:
        watchOS 5.1                     -sdk watchos5.1

watchOS Simulator SDKs:
        Simulator - watchOS 5.1         -sdk watchsimulator5.1

# iOS Simulator向けにビルドする
$ xcodebuild -arch x86_64 -sdk iphonesimulator12.1 -workspace xxxx.xcworkspace -scheme xxxxx

ビルドに成功すると、DerivedDataフォルダに出力されるので、それを Appium 使えば良いです。

...
CodeSign /Users/yukitamazawa/Library/Developer/Xcode/DerivedData/xxxxx-aanbtbipxyjnexeibvxbsgaqyiqx/Build/Products/Debug-iphonesimulator/brooklyn.app
...
** BUILD SUCCEEDED ** [299.993 sec]

無駄に遠回りしてしまったのでした。

参考リンク

調査に協力してくれた @daidongon 、ありがとう!

おまけ:Xcode 関連のキャッシュをごっそり消すシェル

何度もTry & Error を繰り返す中で、 MacBook Pro の容量が逼迫することが何度もあったので、1発でごっそりキャッシュを消せるシェルを用意しました。
https://github.com/srea/dotFiles/blob/master/clear_cache.sh

# Xcode

echo "Xcode"
rm -rf ~/Library/Caches/com.apple.dt.Xcode/
rm -rf ~/Library/Developer/Xcode/DerivedData/
xcrun --kill-cache
rm -rf ~/Library/Developer/Xcode/iOS\ DeviceSupport/*/Symbols/System/Library/Caches 
rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache"
rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang.$(whoami)/ModuleCache"
rm -rf ~/Library/Caches/SwiftLint
pod cache clean --all
rm -rf ~/Library/Caches/org.carthage.CarthageKit
rm -rf ~/Library/Caches/carthage

# Homebrew

echo "Homebrew"
rm -rf $(brew --cache)