Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@yosshi4486

【bitrise】Undefined symbols for architecture x86_64が出る時に疑う事

More than 1 year has passed since last update.

自分がハマったのでtipsの共有です。

問題

bitriseで何回ビルドを行っても「Undefined symbols for architecture x86_64」というエラーが出るので困り果てていたのですが、すごく些細な理由で問題が起きていました。

原因

XcodeのSchemeで、Gather coverage forにチェックマークしていないのに、bitrseのXcode tests for iOSのステップで、Generate code coverage files?のオプションをyesにしていることが原因です。

bitriseのテストステップは内部でxcodebuildを使ってテストを実行しているのですが、これをyesにするとGCC_GENERATE_TEST_COVERAGE_FILESというオプションがYESでコマンドに渡されるようになります。

Gather coverage forをyesにすると、xcodeproj内のxcschemeのcodeCoverageEnabledというフィールドがYESになるのですが、この項目がYESではないのに GCC_GENERATE_TEST_COVERAGE_FILES=YESのオプションを渡しているためエラーが発生したようです。

xcodebuild.sh
set -o pipefail && env "NSUnbufferedIO=YES" xcodebuild "-workspace" "Some.xcworkspace" "-scheme" "Some" "build" "COMPILER_INDEX_STORE_ENABLE=NO" "test" "-destination" "id=DDD6FC97-6DB4-40D9-89AB-0B9C5541B18B" "-resultBundlePath" "/var/folders/6q/wgy6jtp12w5gzgm9lzcglpqw0000gn/T/XCUITestOutput157008135/Test.xcresult" "GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES" "GCC_GENERATE_TEST_COVERAGE_FILES=YES" | xcpretty "--color" "--report" "html" "--output" "/Users/vagrant/deploy/xcode-test-results-CanDO.html

解決

bitrseのXcode tests for iOSのステップで、Generate code coverage files?のオプションをnoに設定した発生しなくなりました。

そもそも収集していないのに生成しようとすると、タイトルのUndefined symbols for architecture x86_64というエラーが投げられるようです。

Bitriseでハマった時のデバッグ

デバッグに効果的だった方法を書き残しておきたいと思います。

  1. ローカルとCIの環境がバラバラにならないように、パッケージ管理の仕組み(Bundlerなど)を使う
  2. CIのログを読んで、ローカルで同じコマンドを実行してみる

特に2番目は大事で、CIはVM立ち上げるのが遅いのでちょっと変えて試してがやりにくくて、デバッグはし辛いです。なので、手元で同じコマンドを打って、どのようなコマンド,オプションの渡し方をすればこの問題は解決するのか。というところから逆算でCIのステップを直していくのが効果的でした。

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
yosshi4486
アプリケーション作るのが好きな人

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?