LoginSignup
82
83

More than 5 years have passed since last update.

JenkinsでiOSのビルドを行う時にハマるポイントとその解決法・1

Last updated at Posted at 2013-08-28

とても便利なJenkinsですが、 たまによくしっかり ハマるので、その辺のポイントと私なりの解決法を共有します。

XCodeのプロジェクトが他のstatic libraryプロジェクトを含んでいる場合

まず、普通にXCode GUIを使っていてもこの辺は最初ハマることもあるかと思います。

特に static library側の Headerファイルが見つからない! というビルドエラーは結構悩まされます。
しかしこれをXCode GUIで解決するまではFAQのようで、ググると色々出てきます。
例) http://www.cocoanetics.com/2012/01/helping-xcode-find-library-headers/

ポイントは

  • static library 側
    • Header を public にする
    • Public Headers Folder Path を工夫する (Library名とかにするとか)
  • 利用する側
    • Header Search Paths に 下記を追加しておく
      • $(CONFIGURATION_BUILD_DIR)
      • "$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts"

などでしょうか。
他にも色々あるとは思いますが。

本題は、XCode GUIで Build や Archiveはできるのに、jenkinsなどで xcodebuildするときにもう一度ハマるところです。。

Jenkinsでビルド(xcodebuild)すると static library プロジェクトの Headerファイルが見つからない!

結論から言うと、ビルドの引数に原因があります。

target を使わずに、 workspace と schema を使う

Jenkins の Xcode Pluginを使っていると大抵 フォーム上の「Target」 (xcodebuild オプションの -target )を使うことが多いのではないか(?)と思いますが、これだと上手くいかないようです。

Jenkinsフォーム上で「Xcode Workspace File (-workspace)」「Xcode Schema File(-schema)」を指定して、Targetを 指定しない ようにすればおそらく解決すると思います。

ここで注意点は、workspaceの指定の仕方で、
ファイルシステム上では my-app/my-app.xcodeproj/project.xcworkspace となっている場合、フォーム上では my-app/my-app.xcodeproj/project末尾の.xcworkspaceを削除しないといけない という点です(勝手に付けるようです)。

schemaの定義は 一度 xcodeを起動しないと生成されない?

もう一つ、xcodebuild が schemaを探す時に
my-app.xcodeproj/project.xcworkspace/xcuserdata/<username>.xcuserdatad
をみるようなのですが、それが一度Xcodeを起動しないと生成されない(?)点です。

jenkinsの実行ユーザで一度 Xcodeでそのプロジェクトを起動しておくか、適当に実行ユーザ名でxcuserdatadを作成してリポジトリにCommitしておくかしないと、新規に Cloneした場合などで失敗してしまうでしょう。
私の場合は、リポジトリにCommitしておくようにしました(そう頻繁には変わらないと思うので)。

ipaファイルが作成されない!?

ビルドの後に、ipaファイルを作成することもよくあると思いますが、
こんな感じでエラーになることがあると思います。

** BUILD SUCCEEDED **

Cannot remove *.ipa files from a non-existing directory:
 /Users/leon/Work/projects/wearehive/flatstr/build/Flatstr/dev/jenkins/workspace/Snug-debuOLD/build/Debug-iphoneos

 Packaging IPA
 FATAL: null
 java.lang.NullPointerException

その場合、下記にもありますが、
http://stackoverflow.com/questions/10738624/trying-to-compile-an-xcode-project-with-a-workspace-on-jenkins-slave

SYMROOT${workspace}/build/[app name]/Build/Products などと書いておくと治ります。

(おまけ)Jenkinsで生成したipaファイルをWebからDLしてInstallする方法

XCodeビルドの後に「 シェルの実行 」を追加して、下記のようなスクリプトを貼り付けます。

PACKAGE_NAME, BUNDLE_IDENTIFIER, MASTER_JENKINS, LOGO_IMG_URL は適切に設定してください。

最後に、ビルド後の処理で「 成果物の保存 」を追加して、build/**/*.ipa,build/* と書いておきます。

これで、ビルドが成功したら HTMLとplistとipaが生成され、JENKINSのJOBページの生成したHTMLからDLしてInstallできるようになると思います。

※ ここではProvisioningファイルなどの設定は割愛していますが、もちろん適切にしておく必要があります。

82
83
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
82
83