Swiftで書かれたiOSアプリをTravis CIでビルドしてFabric Beta / TestFlightで配信する

Swiftで書かれたiOSアプリをTravis CIでビルドしてFabric Betaで配信するまでのポイントまとめ。

.travis.ymlのlanguageはobjective-cにする

Swiftで書かれたiOSアプリの場合は、.travis.ymlにこんな感じに書きたいところだが、

language: swift

以下のエラーが発生してしまうため、

/home/travis/build.sh: line 42: /usr/local/bin/actool: Permission denied

次のように書く必要がある。

language: objective-c

証明書や鍵やProvisioningProfileは暗号化する

これはGitリポジトリを公開している場合などに必要な作業であって、プライベートリポジトリなどでは不要。

各ファイルの暗号化や、暗号化パスワードの.travis,ymlへの埋め込み、TravisCI上での復号化については以下のページが参考になる。
Travis CI for iOS · objc.io

暗号化する前の元ファイルをGitリポジトリに追加しないように注意。

ProvisioningProfileはFabric Betaの場合はAd-Hoc、TestFlightの場合はAppStoreを使う

Fabric Betaで配信する場合はProvisioningProfileはAd-Hoc、
TestFlightで配信する場合はProvisioningProfileはAppStoreにする必要がある。

対象Schemeはsharedにする

そのまんま。Xcode上で設定する。

Travis CI上のXcodeのデフォルトのバージョンと異なる場合は.travis.ymlに明示的に指定する

osx_image: xcode7.1

Travis CI上でshを呼び出す場合は実行権限を付与する

chmod a+x xxxxxxxx.sh

Bundle InstallやCocoaPods Installが毎回実行されないようにキャッシュする

cache:
    directories:
        - vendor/bundle
        - Pods

Travisの公式サイト上で紹介されている以下のような書き方では、自分の場合はGithub->Travisに連携しなくなってしまった。

cache:
    - bundler
    - cocoapods

CocoaPodsを使用している場合はワークスペースを.travis.ymlに明示的に指定する

xcode_workspace: xxxxxxx.xcworkspace

CocoaPods 0.38.2はエクスポートエラーになるため、0.39.0を使用する。

rdar://22740827: Xcode7 (7A220): xcodebuild -exportArchive with new -exportOptionsPlist option chokes on 'method' key in plist