Skip to main content

iOS

Overview

iOSのアーキテクチャをまとめたセクション。

Xcodeで設定を行える。

  1. Xcode でプロジェクトを開く
  2. 左ペインのプロジェクト名をクリックして、プロジェクト設定(TARGETS)を開く
  3. General タブの中の「Identity」セクションにある Bundle Identifier を変更
    例: com.example.myapp → com.example.myapp.dev
caution

Apple Developer アカウントに登録する必要がある。
新しい Bundle ID は Apple の Developer Portal に登録されていないとリリースできないので、テスト・配信前に必ず登録する。

tip

App ID は単なるアプリの識別子ではなく、そのアプリが どのAppleの機能(サービス)を使うかの宣言 を行うもの。
有効にしないと、プロビジョニングプロファイルにその権限が含まれず、ビルドや実行時に機能が動作しない可能性がある。

  • App ID 作成時に「使いたいAppleサービス」を選んでおくのが基本
  • 変更可能だが、プロビジョニングプロファイルの再作成・再適用が必要
  • 一部の機能は あとから有効にする手順が複雑なので注意

Bundle ID

caution

「バンドルID」と「アプリID」は厳密には違うID

「バンドルID」はアプリ実行に必要なプログラム、アセット等を固めてできた成果物に振られるID。
iOSはこのIDの違いで同じアプリかを判断している。
例えば開発用と本番用に分けたい場合、本番用にはApp Storeで配布する時に使うIDと同じものを使用する。
そうではない場合、別のIDを使うという方法を取れる。

アプリID

「アプリID」はプロビジョニングプロファイル内で識別されるIDです。
公式ドキュメントにある「2つのパーツからなる文字列」は、チームID (Team ID) とバンドルID (Bundle ID) のことを指します。

チームID

チームIDはAppleが自動生成するIDです。全10文字で構成されています。 チームIDは Apple Developer アカウントの「メンバーシップの詳細」で確認できます。

バンドルIDはアプリIDと紐づく

ビルド後の成果物をApp Store Connectへアップロードすると、成果物のバンドルIDを見て同一のアプリページを用意してくれる。
App Store側からすれば、このIDは「アプリID」(英語では App ID) として扱われる。

このアプリIDは全世界レベルで唯一である必要がある。
そのため App Storeへのアプリアップロード後、バンドルIDやアプリIDを変更できない

バンドルIDの命名規則

英数字 (A–Z, a–z, 0–9)、ハイフン (-)、ピリオド (.) を組み合わせた文字列です。

通常、DNS (Domain Name System)で使用している、組織のドメイン名を反転した名前を持ってきます。これは「Organization identifier」と呼ばれます。

例えば「www.example.com」というドメイン名を使っていて、アプリのIDを「hoge」であれば、「com.example.hoge」という接頭文字をつけます。

Creating an Xcode project for an app | Apple Developer Documentation Preparing your app for distribution | Apple Developer Documentation

明示的なアプリIDと、ワイルドカードアプリID

アプリIDは、アプリを配布する前にApple Developerで登録する必要があります。

このIDには2種類あります。1つが単一のアプリで使用される「明示的なアプリID(Explict App ID)」、もう1つは複数のアプリで使用可能な「ワイルドカードアプリID(Whildcard App ID)」です。

明示的なアプリIDは、唯一のアプリに対するプロビジョニングプロファイルを生成できます。 アプリ内課金や、Apple Push Notification Service (APNs)を使用できます。

一方、ワイルドカードアプリIDはワイルドカード「」を用いることで、ワイルドカード部分に任意の文字列を含めたアプリを生成できます。 例えば「com.example.」というアプリIDを登録しておけば、com.example.hogeや``com.example.page`といった複数のアプリを同じプロビジョニングプロファイルで作ることができます。 一方で、アプリ内課金や、Apple Push Notification Service (APNs)といった一部のAppleのサービスを使うことはできません。

Bundle IDと検証/商用環境の設定

Firebase を使わなくても、Xcode の「複数 TARGET 構成」で検証用(dev)と商用(prod)を明確に分けることは完全に可能
Apple Store Connect のバンドルID制約を回避しながら、実践的な運用ができる。
Xcode の TARGETS を複製し、それぞれに別の Bundle ID を持たせることで、検証環境と商用環境を完全に分離できる。Firebase 不要。

  • 検証/商用の環境分離 可能 XcodeでTARGET複製し、Bundle IDを分ける
  • Apple Sign In の利用 可能 Apple DeveloperでバンドルIDごとにApp ID登録し、Sign In with Apple有効化
  • 設定の環境ごとの切り替え 可能 xcconfig / Info.plist / Build Schemeで制御

なぜこれで分けられるのか

Apple のアプリ識別は 「Bundle ID」単位。 Firebase は「プロジェクトごとに 1つの iOSアプリ(Bundle ID)」しか紐付けられないため、通常は dev/prod を Firebase 上でも分ける必要があります。

でも Firebase を使わない/Apple Auth だけを使う構成であれば

  • バンドルIDは Apple 側で自由に分けられる
  • 認証や機能の環境分離も xcconfig や UserDefaults で制御可能
  • TARGETごとに別々の設定を持てる

🎉 実現ステップ(まとめ)

  1. TARGETS → 既存ターゲットを複製
  2. 複製ターゲットの名前を MyApp-dev などに変更
  3. Signing & Capabilities → バンドルIDを com.anycolor.myapp.dev に修正
  4. ビルド設定 (xcconfig) や Info.plist も dev 専用に切り替える
  5. Firebase を使わないので、Apple Sign In や OAuth 設定をバンドルIDに合わせて構成
  6. 必要に応じて Apple Developer に dev用バンドルID を登録

🔐 Apple Sign In の補足(Firebaseなし)

Apple Sign In もバンドルIDごとに設定が必要です

  • Apple Developer → Identifiers → Sign In with Apple を有効化
  • dev/prod それぞれのバンドルIDに対して設定する必要があります(別App ID)
  • appleid.apple.com の Web Redirect URI や Client ID は共通化も可能

p12ファイル(PKCS#12ファイル)

p12は署名用の「秘密鍵+証明書」の入れ物であり、Appleアプリ開発では、CI/CDビルドに必須。

  • 拡張子: .p12
  • 別名: PKCS#12ファイル
  • 正式名: Personal Information Exchange(個人情報交換)フォーマット

p12ファイルは、以下の情報を1つのファイルにまとめたもの。

  1. 秘密鍵(Private Key)
    署名に使われる、超重要な鍵。漏洩すると大問題。
  2. 証明書(Certificate)
    誰の鍵なのかを示す情報(例:Appleが発行する「開発者証明書」など)
  3. 中間証明書などのチェーン(オプション)
    署名の信頼性を補強する中間証明書なども含められます。

💡 p12ファイルの役割(Apple開発での例)

iOSアプリ開発では、App StoreやTestFlightに提出するアプリは必ず署名されます。 ➡️ 署名に使うのが「秘密鍵」+「証明書」 ➡️ これらを1つのp12ファイルにまとめておくと、ビルドツール(Xcode, fastlane, CI/CDなど)で簡単に読み込めるようになります!

caution

漏洩したら大問題。管理は厳重にする必要がある。
なぜp12は慎重に扱う必要があるか

  • 秘密鍵が入っているから、漏洩するとその署名者になりすまされる(アプリ改ざんなどのリスク)
  • Appleの開発者アカウント管理ポータル(Apple Developer Center)で作成して、ダウンロードしたもの。

p12ファイルの作り方(iOS開発の例)

  1. Macのキーチェーンアクセスアプリで秘密鍵と証明書を探す。
  2. 右クリックして「書き出し」を選択。
  3. .p12形式を選んでエクスポート(パスワード設定も必須)。
  4. 出来たファイルをCI/CDに登録(例:GitHub SecretsにBase64化して格納)。

ipaファイル(iOS App Store Package)

ipaファイルは、iOSアプリの完成品であり、iPhoneやiPadに実際にインストールされるアプリパッケージ。
署名やビルド後に生成されTestFlightApp Store、Firebase App Distributionなどにアップロードされます。

  • 拡張子:.ipa
  • 中身:アプリのバイナリ、Info.plist、Assets、コード署名情報などを含むZIP形式
  • 作成:Xcode でアーカイブ→エクスポート、または flutter build ipa などで作成可能
  • 必要な前提:プロビジョニングプロファイルと署名済みの状態であること(p12等)

Image from Gyazo

tip

p12との関係
p12ファイル(秘密鍵+証明書)を用いて署名されたアプリの出力がipaファイル
署名がなければiOS端末はipaをインストールできないため、両者は密接に連携している

p8ファイル

p8ファイルは、Appleの各種サービス(APNs, Sign In with Apple, App Store Server APIなど)で使われる**秘密鍵ファイル(Private Key)**です。

  • 拡張子:.p8
  • 形式:PEM形式の非対称鍵(通常はES256署名に使用される)
  • 発行元:Apple Developer Portal(Keysセクション)で生成・ダウンロード
  • 特徴:
    • 一度しかダウンロードできない(再発行不可。再生成が必要)
    • JWT(JSON Web Token)署名に使われることが多い
    • APNsトークン認証方式で証明書不要のPush通知実装が可能
    • Sign In with Apple などでの認可リクエスト署名に使用

デベロッパーモード

iOS16から導入されたモード

このモードによりiOS16からは、テスト用にビルドしたiOSアプリを実機で動かすために、「デベロッパモード」を有効にする必要がある。
「デベロッパモード」を有効にしていない場合、デバッグビルドなどテスト用にビルドしたIPAファイルを端末にインストールしようとするとAppが使用できないと言われ起動できない。

App-specific passwordとは

Apple IDにApp用パスワードを設定する方法

App-specific password(アプリ用パスワード)とは、Apple ID の 2ファクタ認証(2FA)を有効にしている場合に必要となるサードパーティアプリから Apple サービスへアクセスするための一時的な専用パスワード

  • 通常の Apple ID パスワードではなく、特定の用途ごとに発行し、Transporter CLI や fastlane などで使用する。
  • 発行方法
    1. https://appleid.apple.com にログイン
    2. 「セキュリティ」セクションの「App用パスワード」を選択
    3. ラベルを入力して生成 → 生成されたパスワードを CLI に渡す
  • 安全性のため、一定期間後に無効化されることがある点にも注意
    • 再発行の手間を防ぐには?
    • App用パスワードは一度発行したらずっと使えるわけではなく、Apple IDのパスワード変更やアカウントセキュリティイベントによって突然使えなくなることがあります。
    • そのため、Transporter CLI や Fastlane でアップロードが失敗した場合に「認証エラー」が出たら、まずApp用パスワードが無効になっていないかを確認するとよい。
    • 定期的に手動で更新する運用や、CIで失敗時にSlack通知・アラートを出すなどの仕組みがあると、トラブルを早期に検知できる。
    • 新しいパスワードが必要になった場合は、既存のパスワードを削除して再発行すればOKです(古いパスワードは自動では更新されません)

Resource