iOS開発環境セットアップ@会社 ～配布用ipa作成まで

Android開発に比べて、iOS開発はビルド時の権限周りがややこしいと思いました。
会社でチームとして開発している場合、稟議で申請などをちゃんとやっている会社とかは大変だと思います。まともに開発できるまでかなりかかってしまいました。
ましてやMacの使い方にも慣れていない中、大変すぎました。。
会社でiOS開発をやることになった場合、ご覧いただければ幸いです。

# AppleIDを登録
- 開発用にAppleIDを登録する
  - Apple Developerになるには2ファクタ認証が必要
  - iPhoneに設定する

# Apple Developer Programに招待してもらう
- ↑で登録したAppleIDのメールアドレスで招待していただく
- 付与いただく権限は、開発のみであれば一旦 `Developer` で問題ないと思います。
- アプリの申請やリリースを行う場合はAdmin, App Managerの権限が必要とのことです。
  - 必要な権限の確認 → https://developer.apple.com/jp/support/roles/
  - 後で記載する AdhocやiTunes Storeへの配布用ipa作成の権限はAdminが必要みたいだが記載がない。。
 
# 招待メールからログイン
- 招待されるとメールが届くので、「Accept invitation」からリンクを開く
  - (macでブラウザはサファリが望ましいということ)
- 2ファクタ認証して表示された確認コードを入力してWelcomeページが表示されればOK
- https://developer.apple.com/jp/

# Xcodeでソースをチェックアウト
※ チェックアウト済みであればskip

- Xcodeを開いて、「Clone an existing project」を選択
- repository URLにgitのリモートサービスのURLを入力(GitHubの場合、「https://github.com」)
- ログインして、リポジトリを選択
- ローカルの保存ディレクトリを選んでCloneを押下して完了

# Provisionig Profileへのアクセスを許可してもらい、ビルド
- TARGETS -> プロジェクト名 -> Signing -> Automatically manage signingにチェックが入っていることを確認
- Teamに自分の参加している会社名などを設定可能なことを確認
- Provisionin Profileにアクセスできないと↑の選択項目が出てこず、設定できないと思われます。
- 権限について https://developer.apple.com/jp/support/roles/
- Teamを設定できない場合、Provisioning Profileへの権限をAccount Holderなど上位権限を持っている方に付与してもらう  
   - アカウント設定の「Certificates,Identifiers（証明書、ID,プロファイル）へのアクセス」へチェックを入れてもらう
- iPhoneなどのiOS端末をPCにつないで、Xcode左上の▶からビルドを実行して実機でデバッグ実行可能なことを確認する

# 配布用ipaの作成
以下２段階で行う。  
## .xcarchiveの作成
- Organizer(Archives, Crashes, Energyタブが表示されている画面)が開いている場合は閉じてから行う
- Xcode -> Product -> archive で .xcarchiveファイルを作成する

## ipaのビルド
- .xcarchive作成が完了したらOrganizerが開くので、作成されたxcarchiveを選択しDistribute App を押す
- 「iOS App Store」「Ad Hoc」「Enterprise」「Development」から選択し、Next(Role権限がDeveloperだとDevelopmentしかipa作成が成功しない)
- Development distribution optionsはデフォルトのままでNext、
- Automatically manage signingのままでNext押下でビルドが始まる
- ビルド完了したらExport押下し、保存先ディレクトリを選択、Export押下で完了
- 指定したディレクトリに拡張子が.ipaのファイルが出来ていることを確認する

# 「Ad Hoc」,「iOS App Store」配布用にビルドする
RoleがDeveloperのままで配布用ipaを作成しようとすると以下エラーになってしまった。
> Role is Member, but at least Admin is required

権限周りの以下２つの処理が必要

## 配布用証明書(.p12形式のcertification)ファイルを受け取る
- 権限を持っている方に、.p12形式の証明書(certificates)をexportしてもらい、自分のMacにimportする必要がある  
  - 参考) https://stackoverflow.com/questions/31678028/can-an-apple-team-member-export-from-xcode-for-ios-distribution
- .p12をexportする側
   - Xcode -> Preferences -> Accounts -> Manage Certificats -> ダイアログ右下の＋ -> iOS Distribution
   - パスワードを設定して、.p12ファイルをexportする
- .p12をimportする側
   - ↑でexportされた.p12ファイルを受取り、ダブルクリックなどで開きパスワードを教えてもらって開く。

## Admin権限を付与してもらう
- エラーメッセージからもAdmin権限が必要とのことなので権限を持っている方に付与していただく。
   - 権限の確認 https://appstoreconnect.apple.com/access/users
- 設定してもらったら、Xcode -> Preferences -> Accounts -> Apple ID の Roleが Adminとなっている事を確認する

> With great power comes great responsibility.

Admin権限は他のユーザーの権限を編集できたり、いろいろなことができてしまう、強力な権限を持っています。
気をつけましょう。

# トラブルシュート
### XcodeのバージョンはTeamで使っているものと同じで正しいか
- Xcode -> About Xcodeで確認
- 私の会社のTeamの場合、最新のVersion 10.1 を使用(2019/03時点)

### ビルドエラー 「Code Sign error : Command /usr/bin/codesign failed with exit code 1」
- キーチェーンのアクセスを許可しているか
- 一旦、Finder -> ユーティリティー -> キーチェーンアクセス -> ログインを右クリック -> キーチェーン”ログイン”をロック する
- Xcodeの Product -> Clean Build Folder でクリーン後、再度ビルド、「"codesign"がキーチェーン”ログイン"を使おうとしています。」と出るのでパスワードを入力
   - 続けて何回も出たら「常に許可」を選択する

### 必要な設定をしても配布用ipaのビルドでエラーになる場合
- 証明書(.p12がimportされているか)
- Xcode -> Preferences -> Accounts -> Apple ID -> Manage Certificates.. -> iOS Distribution Certificates の欄に項目が設定されているか
- アカウント権限
   - 再ログインしてみる
- プロビジョビングプロファイルを削除
   - 古い証明書と紐づいたプロビジョニングを使用しているかも
   - ローカルのプロビジョニングファイルを削除し、Automatically manage signingのチェックをいったん外 して、再度つけたりする
   - 以下場所に作成されるのでいったん全て削除

```console
hige-mac:~ hige$ cd ~/Library/MobileDevice/Provisioning\ Profiles
hige-mac:Provisioning Profiles hige$ ls *.mobileprovision
xxxxx-xxxxxxxx-xxxxxxxxxx.mobileprovision
zzzzz-zzzzzzzz-zzzzzzzzzz.mobileprovision
yyyyy-yyyyyyyy-yyyyyyyyyy.mobileprovision
hige-mac:Provisioning Profiles hige$ rm -f *.mobileprovision
```
### それでもダメな場合、PC自体を再起動します。
   - これで成功しました。