Cordova & CocoaPods

CI/CDのためのモダンiOSビルド戦略
依存関係管理とコード署名の完全自動化ガイド

Agenda

  1. 課題: なぜCordovaのビルドは複雑なのか?
  2. 解決策: CordovaとCocoaPodsの連携アーキテクチャ
  3. 実践: 依存関係管理とコード署名の完全自動化
  4. 結論: 目指すべき未来のビルドパイプライン

ハイブリッドアプリ開発の「見えざる壁」

Web技術だけでは、ネイティブSDKの高度な利用や複雑なビルド設定が大きな障壁となります。

Web技術

HTML, CSS, JS

見えざる壁
手動設定, 依存エラー
複雑な署名プロセス

ネイティブ機能

高度なSDK, パフォーマンス

2つのコア技術

Apache Cordova

Web技術とネイティブ機能の架け橋となるフレームワーク。一度書けば、iOSやAndroidなど複数のプラットフォームで動作します。

CocoaPods

iOSネイティブライブラリの依存関係を管理するデファクトスタンダード。膨大なライブラリ資産を活用可能にします。

「橋の上の橋」- The Synergy

cordova-plugin-cocoapod-support がCordovaとCocoaPodsを繋ぎ、ネイティブSDKの統合を自動化します。

Web App

Cordova

Native Container

Plugin

CocoaPods Libs

成功の土台:ツールチェーン

開発を始める前に、これらのツールのバージョン互換性を確認することが不可欠です。

Node.js

Ruby

Xcode

CocoaPods

ios-deploy

How to Manage Dependencies?

再利用するなら plugin.xml に、プロジェクト固有の依存は config.xml に記述します。

plugin.xml

再利用可能なプラグイン用

<plugin ...>
  ...
  <platform name="ios">
    <!-- このプラグインが依存するPodを宣言 -->
    <pod name="AFNetworking" spec="~> 3.0" />
  </platform>
</plugin>

config.xml

プロジェクト固有・バージョン固定用

<widget ...>
  ...
  <platform name="ios">
    <!-- 競合解決やバージョン固定のために宣言 -->
    <pod name="Alamofire" version="5.4.0" />
  </platform>
</widget>

さよなら、Xcodeの手動署名

build.json を使えば、コマンドラインからビルドする際に必要な署名情報をCLIに提供し、完全な自動化を実現します。

Before: 手動作業

Xcodeを開き、証明書やプロファイルを手で設定。CI/CDの妨げとなり、エラーの温床に。

After: 自動化

cordova build --buildConfig コマンド一発で完了。高速かつ誰が実行しても同じ結果に。

build.json の構成要素

3つの重要な情報(codeSignIdentity, developmentTeam, provisioningProfile)を特定し、ファイルに記述します。

キー 説明 値の取得方法
codeSignIdentity 署名証明書の名前 security find-identity ... コマンドで確認
developmentTeam 10桁のチームID Apple Developerポータルで確認
provisioningProfile プロファイルの36桁UUID .mobileprovision ファイルをテキストエディタで開いて確認

再現性のジレンマ: platforms をコミットすべきか?

CocoaPodsを多用するプロジェクトでは、ビルドの再現性のためにコミットが強く推奨されます。

非推奨: Ignore platforms/

pod installが環境毎に実行され、依存バージョンがズレる危険性。ビルド失敗の原因となります。

推奨: Commit platforms/

Podfile.lockがバージョン管理され、チーム全員でビルドの一貫性と再現性を保証します。

依存関係地獄の処方箋

Podのバージョン競合が発生した際の、体系的な解決ステップ。

  • 1. エラー分析: まずはエラーメッセージを読み、競合原因を特定する。
  • 2. config.xmlで上書き: プロジェクト全体でバージョンを明示的に固定する、最も効果的な解決策。
  • 3. クリーン&リビルド: platforms, node_modules 等を削除し、再構築する。
  • 4. プラグインのFork: 問題のあるプラグインをフォークし、plugin.xmlを直接修正する最終手段。

The Goal: One-Command Build

本戦略で、信頼性が高く、誰が実行しても同じ結果になるビルドパイプラインを構築できます。

$ cordova build ios --release --device --buildConfig=build.json

宣言的 (Declarative)

再現性 (Reproducible)

自動化 (Automated)

Thank You

Build, Automate, and Innovate.