LoginSignup
19

More than 5 years have passed since last update.

新しいCircleCIの機能で、iOSアプリをTestFlightに上げる

Last updated at Posted at 2016-05-15

基本的には、 https://circleci.com/docs/ios-code-signing/ の通りです。

設定が完了したものは https://github.com/noboru-i/kyouen-ios にあります。
(ほとんどは https://github.com/noboru-i/kyouen-ios/pull/29 のPRで行いました)

事前準備

CircleCiでiOSのビルドをするためには、Pricing and Plan Information - CircleCIにあるように、最低でも$39/月の課金が必要です。
また、GitHubとの連携設定や、fastlaneの利用のためのGemfileなどが必要です。

.p12ファイルをアップロード

今回はTestFlightで配信するため、"iOS Distribution"の証明書を発行しておき、CircleCIにアップロードします。
一度アップロードすると、ダウンロードすることは出来ないっぽいので、パスワード無しでも良いかと。

ここに登録しておくだけで、MACHINEセクションの"Install Code Signing Credentials"のタイミングで読み込まれます。

provisioning profileをリポジトリに格納

.mobileprovisionを"Certificates, Identifiers & Profiles"からダウンロードし、リポジトリに格納しておきます。
おそらく、どこに置いておいても良さそうですが、今回はfastlane/cert/*.mobileprovisionに置きました。
これも、置いておくだけで自動的に読み込まれるようになっています。

GYM_CODE_SIGNING_IDENTITYの設定

環境変数として、証明書の名前(?)が必要なようです。
circle.ymlに下記のように追加します。

circle.yml
machine:
  environment:
    GYM_CODE_SIGNING_IDENTITY: "iPhone Distribution: NOBORU ISHIKURA (56W5SXE4HE)"

CircleCIに環境変数を設定

FASTLANE_USER / FASTLANE_PASSWORD という変数で、TestFlightにアップロードするためのApple IDを設定します。

fastlaneの設定

以前までは、Fastfileの中でkeychainの作成や、そこへの証明書の登録などを行っていました。
ただ、CircleCIのアップデートにより、そのへんは不要になったようです。

全体はこちらのFastfileにあります。

  • plistのbuild numberを、CircleCIのビルド番号に置き換えています。
    これは、TestFlightにアップロードする際、前回よりも増えていないといけないためです。
  • ipaファイルの生成を行います。
  • TestFlightにアップロードします。

といった内容を下記のlaneでやっています。

Fastfile
  desc 'Submit a new Release Build to TestFlight'
  lane :release do
    set_info_plist_value(
      path: plist_file_path,
      key: 'CFBundleVersion',
      value: ENV['CIRCLE_BUILD_NUM']
    )

    gym(
      scheme: scheme_name_store,
      configuration: "Release",
      use_legacy_build_api: true
    )

    pilot(skip_submission: true)
  end

circle.ymlの設定

上記のrelease laneを、deploymentセクションで実行します。

circle.yml
deployment:
  release:
    branch: release
    commands:
      - bundle exec fastlane release

この状態で、releaseブランチに変更が行われると、CircleCIが動き、TestFlightにipaをアップロードしてくれます。

iTunes Connectの設定

上記までで、TestFlightにipaは存在するので、それとテスターを紐付けます。

対象のアプリページにある、"TestFlight"から、"内部テスト"を選択し、"テストするバージョンを選択"からアップロードしたバージョンを選択します。
ただ、ipaをアップロードしてからTestFlight側の処理に時間がかかるようで、10分〜多い時では30分程度かかって、選択可能になることがありました。

次に、テスターを追加します。
ここで選択できるのは、iTunesConnect上で設定されているロールを持つアカウントのみのようです。
選択できない場合は、"ユーザと役割"から、"iTunes Connect ユーザ"を追加しておく必要があります。

まとめ

ここまで1度設定しておけば、releaseブランチを変更すると、iOS端末にPUSH通知が届き、インストールが出来るようになります。
便利ですね。

詰まったことメモ

アプリは配信されるが、インストール時に "Could not install App"みたいな表示が出て、インストール出来ない

たしか、GYM_CODE_SIGNING_IDENTITYを設定することで直りました。
いろいろ調べてみると、おそらく違う証明書とかで何故かipaが作れちゃって、それが飛んでたのではないかと。
証明書・Provisioning Profile(内部のUDID登録など)を見直すと、うまくいくかも?
また、問題の切り分けのために、手元でXcodeからアップロードしてみる、ってのも良いかもしれません。

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
19