BitriseでiTunesConnectに自動でipaファイルをビルド&iOSリリース手順

iOSアプリのリリース準備をする際のBitriseを用いた手順が見つからなかったので、
iTunesConnectに自動でipaファイルをビルドするための手順をまとめてみました（・ω・）
でもってリリース準備をする際にこれさえあれば問題ないという自分メモ。

# 0.前提
## ■Bitriseとは？
https://www.bitrise.io
![d9a1d9c8-7a0b-ac02-4794-3c6efd683964.jpeg](https://qiita-image-store.s3.amazonaws.com/0/146629/706b11ba-ef97-5c9c-f236-0b1e4b94bb50.jpeg)

「Bitrise - iOS Continuous Integration and Delivery」
を謳っていますが、iOS/Androidに特化したCIツールです。

基本的な使用メリットとしては、

- workflow形式で設定ができるので楽
- 月のビルド回数等に制限がありますが個人で使う分には無料枠で十分
- リリース、テスト準備が楽＆確実になる
- 成功失敗の通知をslackに送る等も可能

など。
## ■ゴール
iTunesConnectにipaファイルを上げてslackに通知を送る（・ω・）
## ■準備するもの
- Bitriseアカウント
- AppleDeveloperアカウント
- Xcode
- Github(またはBitBucket)（プライベートリポジトリも可能）

# 1.事前準備
## ■Identifier&ProvisioningProfileの作成
リリース用のIdentifierとProvisioningProfileを作成する。

* Identifier
BundleIDはxcode上のgeneral>bundleidentiferを設定
<img width="700" alt="ff890620-2825-4ff7-bea5-d7662d6db67f.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/386ad374-0f1a-94ab-33c1-d05fc1ab72d8.png">
　

* ProvisioningProfile
リリースの場合はDistribution
AppIDは先ほどのIdentifierを指定
作成したらダウンロードする
（**Xcode>preference>Accounts>ViewDetails..**からでもDL可能）
<img width="700" alt="ba1f7dfc-7608-4bb7-be51-6737ae777b33.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/fb65c513-51f7-5477-4e80-c1d7ae4fdd48.png">


## ■プロジェクトの準備
リリースするプロジェクトの準備をする。

* 先ほどのProvisioningProfileを下記に設定
<img width="700" alt="0323715f-4955-4a29-8daa-6e4e83a64d62.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/affb5a17-f102-73a8-62d2-63796b9eeb6c.png">
　

* Version,Buildの設定
<img width="700" alt="b6c8d27f-024d-4939-95f9-254ef3710a16.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/6daa84be-9638-2af3-7a09-ac634faa36bf.png">


## ■iTunesConnectの準備
* iTunesConnectで新規Appを作成  
(自分でプロジェクト消せないのはいつ改善されるのだろう...(ボソッ))  
<img width="200" alt="480986d8-1067-db32-5898-a7516aaa7b19.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/14219e8c-2d49-5ebf-1a24-9a46ff23cef3.png">
　

バンドルIDはxcode上のgeneral>bundleidentiferを、
SKUはXcodeのプロジェクト名をそれぞれ入力する。
<img width="700" alt="37801461-6af1-0618-8162-1ab865d98ef1.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/d62bf4cf-d19a-be83-f559-19be7a70e753.png">
　

* 今回作るアプリバージョンを追加  
　※バージョンはxcode上のgeneral>Versionを入力
<img width="700" alt="6e28c271-6a12-46c1-a387-b3716b17e12b-1920x964r.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/5f4e7c20-2348-55e8-3335-419a9d6eff96.png">


# 2.Githubの準備
* プロジェクトのリポジトリを準備(今回はprivateで作成)  
リリースしたいバージョンをmasterにマージする
<img width="700" alt="d7c46275-ebfb-46e0-b0c7-247fcd100a78-1920x1357r.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/af02a352-0bbd-c079-8530-e245dc6a3d3d.png">


# 3.Bitriseの設定
Bitriseを色々設定していきます（・ω・）

## ■プロジェクトの作成＆リポジトリの設定
* 「+Add(+Addfirstapp)」
* リポジトリを設定する
　※privateの場合は、other/Manualを選択
　※また、privateリポジトリの場合はurlではなくSSHで入力
<img width="700" alt="5f6ea3e7-cb65-4b54-9b7c-67df1f454973-1920x571r.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/aa6ca1f6-01a4-0617-121b-e572f1ff9766.png">
　

* 表示されるsshkeyをGithub側に登録する
<img width="700" alt="ccc09d89-c33d-4a15-9fdf-9c48f7e33de6-1920x960r.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/0058ed02-88b7-82ca-5204-6ce322447003.png">
　

* 「Next」を押すとBitriseが試しにGithubからデータを持ってこようとする
<img width="700" alt="e9c49980-9f03-4a9a-9d66-fb08c42f9aac.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/21f6a4f8-c7b6-dfcb-79e6-0d223ef542cc.png">

　  

おぅふ、Warning（；ω；）
<img width="700" alt="3da8aa1f-dc24-4387-b5ac-325cfe820838-1920x1068r.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/040b75a9-1c9d-86dd-cf0a-f4b2949ed796.png">

****
調べてみるとこの場合の対処法としては、

xcodeprojを開いて、Product>Scheme>ManageSchemes
<img width="700" alt="cece82af-6229-463c-8416-a0eb6a93d3cd.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/7d2e6f80-f193-43a8-8bb7-26657417cbce.png">


で、ここの、sharedにチェックを入れる。
<img width="700" alt="cece82af-6229-463c-8416-a0eb6a93d3cd.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/61cb358a-41cd-c5cf-52f5-7bcd3b9ae8b2.png">


warningになった理由は、
xcshareddataとxcuserdataというファイルはそれぞれ、
xcshareddata：みんなで共有できるもの
xcuserdata：ユーザー(他の人の環境では表示されない)
<img width="700" alt="4581a7c1-ec7e-4a5f-aac8-1788ab057134-1920x407r.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/e94f45f7-4875-50fb-405c-b64573ec8834.png">


なので、xcshareddataファイルはsharedにチェックを入れないと生成されない。
つまり、
Bitriseちゃん「xcschememanagement.plistが見れない（；；）」
って怒ってた為。
個人開発の場合は特に忘れやすいので注意！！

*****
設定し直してリビルド。
<img width="700" alt="294d8ece-6cf0-43fa-87b1-4e1b3273bf87.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/4a9cfcd5-ceda-f393-3360-03a0fd20c35b.png">



gitの準備はOK。

## ■ProvisioningProfileの登録
先ほどのProvisioningProfileを登録する。
<img width="700" alt="059f91e3-5f69-4b73-8f37-e68f68a1ce38.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/8b22605b-a90e-4652-5611-ceaea0bc3f06.png">
## ■Workflowの設定
**Github→iTunesConnect**のだけの流れであれば、
以下の順でWorkflowediterからフローstepを追加、並び替える。
＋ボタンをポチポチしていくだけです。簡単素敵。

* Activate SSH key (RSA private key) 
* Git Clone Repository 
* Certificate and profile installer 
* Set Xcode Project Build Number 
* Xcode: Create Archive 
* Deploy to iTunes Connect / TestFlight (with Deliver) 
* あとは必要であればSend a Slack messageなど

<img width="700" alt="24a43839-58f5-40b9-94b9-933397a4b140.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/c2fd3084-ae32-8283-7899-a1553c94fd6a.png">




## ■各Workflowのstepの設定
基本的には自動設定のままで大丈夫だったりで設定自体は割と簡単です。
全部説明すると長くなってしまうので、ちょっと手こずった部分＆コツを紹介。
### ■Set Xcode Project Build Number
<img width="200" alt="スクリーンショット 2016-12-10 18.47.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/61198011-58c0-4912-9d7d-54c42377b783.png">
　

* Info.plist file path  
→xcode内のplistの場所のパス
<img width="700" alt="2a067f65-8c29-4b7a-ad57-63c230c348c9.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/4d8a018a-bd05-4c51-4009-01f4af3155ac.png">

こういうこと言ってる方もおりますがこれだと上手くいかない可能性があるので、プロジェクトのファイルに入ったとこからのスタートのパスを記載がベターです。
```
BitriseTest/Info.plist
```
こんな感じ。
　

* Build Number、Version Number  
→ビルドバージョンの設定  
それぞれプロジェクトと同じ設定を毎回直書きでもよいのですがせっかくなので変数を使用。  
※Bitrise内で環境変数を作ることが可能。
<img width="700" alt="3c9bfe73-6d29-4894-ac78-188143fcf5d7.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/afd0a572-bdd9-8ebb-602f-eb28111f135a.png">

　

それを設定する。
<img width="700" alt="63075583-6875-4e27-a958-377b87960111.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/6dbcdcdd-88e4-3e64-541e-cbd3e715d95a.png">

　

こんな感じ。
リリースするたびにここを書き換えるだけ。

### ■Deploy to iTunes Connect / TestFlight (with Deliver)
<img width="200" alt="スクリーンショット 2016-12-10 19.02.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/8954afcf-a3c7-be4e-a79b-68984ed0d0c7.png">

* iTunes Connect: User Apple ID (email)
* iTunes Connect: Password
* iTunes Connect: App Apple ID  
これらも変数を作って設定。
<img width="700" alt="2fabc547-9297-467b-935c-0f0826b08f1d.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/a52c76f4-9d56-3199-ec85-8764c13abfc3.png">
　

それを設定する。
<img width="700" alt="faeeb398-aedd-490a-9b9c-74a8578e2d69.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/117556be-61b3-fd54-6356-0289cfdc91a5.png">

　

こんな感じ。


#### ※変数の設定について
AppleIDを
もしログ上で変数の中身を表示したくない場合は、
**Secret Environment Variables**
特に気にしない場合は、
**App Environment Variables**
で変数を設定する。
今回はAppleIDとパスワードはsecretに設定してみました。

# 4.実行
一通り設定し終えたのでBitrise上でビルド
　※cloneがmasterに向いてるか最後に確認
<img width="350" alt="5de6dd6d-0ed4-4cec-9453-504c9c41eb76.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/cf7b6cde-a995-1ae1-42cb-f87465f01509.png">

　
成功したらslackにこのような感じで通知が届く
<img width="350" alt="ab9c7199-94ec-4ce9-80c2-8c22b3b5e438.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/01b6b23f-9d9b-712e-8ce4-16e47fb4ea42.png">
　

Bitriseのログの方を確認、success。
<img width="700" alt="bd5a64f0-57b9-401a-b5a1-10cffa1ddc91.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/83a00761-f823-ceea-9611-083159096c75.png">


最後にiTunesConnectで確認
　※アップされるまで15-30分ほどかかるので待つ
<img width="700" alt="dec1b1f1-115f-40a5-bce3-a04187e54e26.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/132ed542-94e3-9f76-11ba-41ebd93f45c9.png">

<img width="700" alt="0e405441-537a-4b6c-91d0-711581800d10.png" src="https://qiita-image-store.s3.amazonaws.com/0/146629/3835e9cc-3ae7-a505-87a6-dd63968e8dba.png">


👍👍👍👍

# ■まとめ
* リモートリポジトリの方と連携しているのでどの環境でも同じようにビルドすることができる
* slackに通知が来るのでBitriseでビルドスタートさせればあとは待ちなので非常に楽
* 何よりもworkflowが便利すぎる
* hockyAppとの連携も可能なのでTestFlightはちょっと..という場合でも対応可能
    * （TestFlightは端末数制限があるので...）