Bitrise から App Store へアプリをデプロイする

![5eb2a34d4cee6c264f61c34a_og-image-default.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/d5a930e1-2ad1-2409-97b4-6a41ff4f2fa2.png)

# ０．はじめに

iOS アプリを提供するにあたって、[Bitrise](https://www.bitrise.io/) を使って、[App Store](https://www.apple.com/jp/app-store/) へデプロイする手順を試してみました。

Git リポジトリは、[GitHub](https://github.com/issues/assigned) を利用。

- [Bitrise の接続先を、AWS CodeCommit から GitHub に変更する \- Qiita](https://qiita.com/kusokamayarou/items/74b1d387e31170615437)

# １．Worlflows

- Activate SSH key (RSA private key) : ※デフォルト
- Git Clone Repository : ※デフォルト
- Bitrise.io Cache:Pull : ※デフォルト
- File Downloader
- Replaces Xcode's project PRODUCT_BUNDLE_IDENTIFIER
- Set Xcode Project Build Number
- Set Xcode Plist Value (〜)
- Script
- Certificate and profile installer : ※デフォルト
- Recreate User Schemes
- Run CocoaPods install
- Xcode Archive & Export for iOS
- Deploy to Bitrise.io - Apps, Logs, Artifacts : ※デフォルト
- Bitrise.io Cache:Push : ※デフォルト
- Deploy to iTunes Connect - Application Loader

![FireShot Capture 924 - Bitrise Workflow editor - app.bitrise.io.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/40ee2705-c13e-0835-af9b-fd82263e2732.png)

## File Downloader

- Input variables
    - Download source url
        - [ダウンロードファイルパス]
    - Download destination path
        - [ダウンロード保存先ファイルパス]

## Replaces Xcode's project PRODUCT_BUNDLE_IDENTIFIER

- Input variables
    - Xcode project path
        - `$BITRISE_SOURCE_DIR/$BITRISE_XCODEPROJ_PATH`
    - New bundle identifier
        - `$BUNDLE_IDENTIFIER`

![FireShot Capture 930 - Bitrise Workflow editor - app.bitrise.io.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/e83d2065-355f-b523-0be2-6371ac096353.png)

## Set Xcode Project Build Number

- Input variables
    - Info.plist file path
        - `$BITRISE_SOURCE_DIR/$BITRISE_SCHEME/$BITRISE_SCHEME/Info.plist`
    - Version Number
        - `$CFBundleShortVersionString`

![FireShot Capture 931 - Bitrise Workflow editor - app.bitrise.io.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/d03a304c-d4a3-a436-adf4-28785526aca0.png)

## Set Xcode Plist Value

- Input variables
    - Info.plist file path
        - `$BITRISE_SOURCE_DIR/$BITRISE_SCHEME/$BITRISE_SCHEME/Info.plist`
    - Plist key
        - [Info.plist の置換するキー]
    - Plist value
        - [Info.plist の置換するキーの値]

![FireShot Capture 932 - Bitrise Workflow editor - app.bitrise.io.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/ad113692-9788-b9f5-58ce-27d2064eb4cf.png)

## Script

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3136313933392f37316362666464362d653130652d363666302d623562622d6539653036366235333838382e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/72a5a1cc-f85c-f8b5-034e-abaca8d8d1f0.png)

```bash
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x

# write your script here
echo "Hello World!"

ls -la

ls -la ${BITRISE_SCHEME}

ls -la ${BITRISE_XCODEPROJ_PATH}

# Code Signing (project.pbxproj)
export PROJECT_PBXPROJ_PATH=${BITRISE_XCODEPROJ_PATH}/project.pbxproj
sed -i -e 's|DEVELOPMENT_TEAM .*;|DEVELOPMENT_TEAM = [Apple Developers Team ID];|g' ${PROJECT_PBXPROJ_PATH}
sed -i -e 's|CODE_SIGN_IDENTITY .*;||g' ${PROJECT_PBXPROJ_PATH}
sed -i -e 's|PROVISIONING_PROFILE .*;||g' ${PROJECT_PBXPROJ_PATH}
sed -i -e 's|PROVISIONING_PROFILE_SPECIFIER .*;||g' ${PROJECT_PBXPROJ_PATH}
sed -i -e 's|CODE_SIGN_STYLE .*;|CODE_SIGN_STYLE = Manual;CODE_SIGN_IDENTITY = "iPhone Distribution";PROVISIONING_PROFILE_SPECIFIER = [Code Signing に登録したプロビジョニングファイルの名称];|g' ${PROJECT_PBXPROJ_PATH}
cat ${PROJECT_PBXPROJ_PATH}

# Info.plist
cat ${BITRISE_APP_PATH}/Info.plist

cat ${BITRISE_APP_PATH}/GoogleService-Info.plist

# Pods Deintegrate & Cache Clean
cd ${BITRISE_SCHEME}
gem install cocoapods --pre
pod deintegrate
pod cache clean --all
rm -f Podfile.lock
ls -la

# or run a script from your repository, like:
# bash ./path/to/script.sh
# not just bash, e.g.:
# ruby ./path/to/script.rb
```

### Code Signing (project.pbxproj)

Code Signing を自動ではなく、指定のプロビジョニングファイルで行う為の設定。

```bash
# Code Signing (project.pbxproj)
export PROJECT_PBXPROJ_PATH=${BITRISE_XCODEPROJ_PATH}/project.pbxproj
sed -i -e 's|DEVELOPMENT_TEAM .*;|DEVELOPMENT_TEAM = [Apple Developers Team ID];|g' ${PROJECT_PBXPROJ_PATH}
sed -i -e 's|CODE_SIGN_IDENTITY .*;||g' ${PROJECT_PBXPROJ_PATH}
sed -i -e 's|PROVISIONING_PROFILE .*;||g' ${PROJECT_PBXPROJ_PATH}
sed -i -e 's|PROVISIONING_PROFILE_SPECIFIER .*;||g' ${PROJECT_PBXPROJ_PATH}
sed -i -e 's|CODE_SIGN_STYLE .*;|CODE_SIGN_STYLE = Manual;CODE_SIGN_IDENTITY = "iPhone Distribution";PROVISIONING_PROFILE_SPECIFIER = [Code Signing に登録したプロビジョニングファイルの名称];|g' ${PROJECT_PBXPROJ_PATH}
cat ${PROJECT_PBXPROJ_PATH}
```

### Pods Deintegrate & Cache Clean

CocoaPods をクリーンする。

```bash
# Pods Deintegrate & Cache Clean
cd ${BITRISE_SCHEME}
gem install cocoapods --pre
pod deintegrate
pod cache clean --all
rm -f Podfile.lock
```

## Recreate User Schemes

- Input variables
    - Project or Workspace path
        - `$BITRISE_PROJECT_PATH`

![FireShot Capture 935 - Bitrise Workflow editor - app.bitrise.io.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/34365b6c-81cc-c21a-2022-6d9a5ce56e55.png)

## Run CocoaPods install

- Input variables
    - Podfile path
        - [Podfile のパス] ※例 : `$BITRISE_SCHEME/Podfile`

![FireShot Capture 936 - Bitrise Workflow editor - app.bitrise.io.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/707fdca5-b55d-4773-0f1d-028edc60e821.png)

## Xcode Archive & Export for iOS

- Input variables
    - Select method for export
        - `app-store`
- Debug
    - Do a clean Xcode build before the archive?
        - `yes`

![FireShot Capture 937 - Bitrise Workflow editor - app.bitrise.io.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/fd0aa936-df9f-7911-ab1b-449b571a9f67.png)

## Deploy to iTunes Connect - Application Loader

- Input variables
    - Apple ID: Email
        - `$APPLE_ID`
    - Apple ID: Password
        - `$APPLE_PASSWORD`
    - Apple ID: Application-specific password
        - `$APPLE_APPLICATION_SPECIFIC_PASSWORD`

![FireShot Capture 943 - Bitrise Workflow editor - app.bitrise.io.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/e621dcde-6294-4b2a-2f75-eda1ae8f5573.png)

# ２．Code Signing

## PROVISIONING PROFILE

必要なプロビジョニングファイルを登録します。

## CODE SIGNING CERTIFICATES

必要な証明書(*.p12)を登録します。

## GENERIC FILE STORAGE

今回は、アプリに [Firebase](https://firebase.google.com/) ライブラリを利用しているので、構成ファイル(GoogleService-Info.plist)を登録しています。

![FireShot Capture 944 - Bitrise Workflow editor - app.bitrise.io.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/b63659ca-77af-1c83-8368-cfeb5ec6efeb.png)

# ３．Secrets

- Secret Environment Variables
    - APPLE_ID
        - App Store へのデプロイに使用される Apple ID
    - APPLE_PASSWORD
        - App Store へのデプロイに使用される Apple ID
    - APPLE_APP_ID
        - アプリ ID
    - APPLE_APPLICATION_SPECIFIC_PASSWORD
        - App Store へのデプロイに使用されるアプリ用のパスワード
        - [App 用パスワードを使う \- Apple サポート \(日本\)](https://support.apple.com/ja-jp/HT204397)

![FireShot Capture 945 - Bitrise Workflow editor - app.bitrise.io.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/919cc2f0-f702-2809-c90f-997264d12d7f.png)


# ４．Env Vars

- App Environment Variables
    - BITRISE_PROJECT_PATH
        - ワークスペースファイル (*.xcworkspace) のパス
    - BITRISE_PROJECT_PATH
        - プロジェクトファイル (*.xcodeproj) のパス
    - BITRISE_APP_PATH
        - アプリのベースフォルダのパス
    - BITRISE_SCHEME
        - アプリのリソース名称
    - BUNDLE_IDENTIFIER
        - アプリのバンドルID(Bundle identifier)
    - CFBundleShortVersionString
        - アプリのバージョン　※例 : 1.0.0

![FireShot Capture 946 - Bitrise Workflow editor - app.bitrise.io.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/fc7159ad-32c2-b572-6f61-6dafa35fa233.png)

# ５．App Store

確か、こんな感じだった気がする…

- [【2020年度版】 iOSアプリをApp Storeに公開する手順を簡潔に解説 \- Qiita](https://qiita.com/Labi/items/3b71b8f5ef065904c1de)

# ９９．ハマりポイント

* うーん。覚えてないなぁー

# ＸＸ．まとめ

以前、こちらの記事を書いたんですが、iOS アプリも記事を書こうと思いつつ…

だいぶ時間が空きましたが、記事を書くことが出来て良かったです！

[Bitrise から Google Play へアプリをデプロイする \- Qiita](https://qiita.com/kusokamayarou/items/87c0219dfb11e291e3ec)

では♪

* ※参考 :
    * 参考にさせて頂いたサイトがたくさんあったと思うんですが…、すいません、忘れてしまいました…。