メインコンテンツまでスキップ
バージョン: v6

Capacitor 5 から Capacitor 6 へのアップデート

Capacitor 5と6の間のブレークチェンジは非常に最小限になるように設計されています。このガイドでは、プロジェクトをCapacitor 6の最新バージョンにアップデートする手順と、公式プラグインの変更点を紹介します。

NodeJS 18+

Node 16は2023年9月11日をもってサポート終了となりました。Capacitor 6にはNodeJS 18以上が必要です。(最新のLTSバージョンを推奨します)。

CLIを使って移行する

プロジェクトに latest バージョンの Capacitor CLI をインストールします:

npm i -D @capacitor/cli@latest

インストールしたら、以下を実行するだけで、CLIがマイグレーションを処理してくれます。

npx cap migrate

移行のステップのいずれかが完了できなかった場合、ターミナルの出力に追加情報が表示されます。マイグレーションを手動で行う手順を以下に示します。

VS Codeエクステンションを使って移行する

VS Codeエクステンションがインストールされている場合、エクステンションの推奨セクションをチェックするだけで、プロジェクトをCapacitor 6に移行するオプションが見つかります。

iOS

次のガイドでは、Capacitor 5 iOSプロジェクトをCapacitor 6にアップグレードする方法を説明します。

Xcodeのアップグレード

Capacitor 6にはXcode 15.0+が必要です。

SPM Support

Cocoapodsの使用からSPMへの変換はかなり大きなトピックなので、近日中に別の記事で取り上げる予定です。

Android

以下のガイドでは、Capacitor 5のAndroidプロジェクトをCapacitor 6にアップグレードする方法を説明します。

Android Studioのアップグレード

Capacitor 6はGradle 8.2を使用しているため、Android Studio Hedgehog | 2023.1.1以降が必要です。

アップデートが完了したら、Android Studioがgradle関連のアップデートやパッケージのビルドファイルへの移動をサポートしてくれます。 まず、Tools -> AGP Upgrade Assistantを実行してください。

APG Upgrade Assistant

Androidプロジェクト変数の更新

variables.gradleファイルで、以下の新しい最小値に更新します。

minSdkVersion = 22
compileSdkVersion = 34
targetSdkVersion = 34
androidxActivityVersion = '1.8.0'
androidxAppCompatVersion = '1.6.1'
androidxCoordinatorLayoutVersion = '1.2.0'
androidxCoreVersion = '1.12.0'
androidxFragmentVersion = '1.6.2'
coreSplashScreenVersion = '1.0.1'
androidxWebkitVersion = '1.9.0'
junitVersion = '4.13.2'
androidxJunitVersion = '1.1.5'
androidxEspressoCoreVersion = '3.5.1'
cordovaAndroidVersion = '10.1.1'

google services pluginのアップデート

# build.gradle

dependencies {
classpath 'com.android.tools.build:gradle:8.0.0'
- classpath 'com.google.gms:google-services:4.3.15'
+ classpath 'com.google.gms:google-services:4.4.0'

gradle plugin を 8.2.1 にアップデート

# build.gradle

dependencies {
- classpath 'com.android.tools.build:gradle:8.0.0'
+ classpath 'com.android.tools.build:gradle:8.2.1'

gradle wrapper を 8.2.1 にアップデート

# gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
- distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-all.zip
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

androidSchemeの更新

Capacitor 6では、Capacitorアプリケーションがシステムの Autofill機能 を利用できるようにするため、既存のアプリ__のandroidSchemeのデフォルト設定が https になっています。

スキームを変更することは、アプリケーションを別のドメインで出荷することに等しく、Cookieやlocalstorageなどに保存されたデータにはアクセスできなくなります。この変更によるデータ損失を避けるために、Capacitorの設定ファイルに androidScheme エントリがない場合は、スキームをhttpに設定してください。

{
server: {
androidScheme: "http"
}
}

すでに androidScheme エントリを https に設定している場合は、今すぐ安全に削除できます。

kotlin versionのアップデート

プロジェクトで kotlin を使用している場合は、kotlin_version 変数を '1.9.10' に更新してください。

プラグイン

以下のプラグイン機能が変更または削除されました。それに応じてコードを更新してください。

リスナーを持っていたすべてのプラグインについて、addListenerPromise を返すだけになりました。 await を使わずに呼び出し結果を変数に格納していた場合、そのコードはコンパイルされなくなります。

Action Sheet

  • androidxMaterialVersion 変数が 1.10.0 に更新されました。

Camera

  • Capacitor Cameraプラグインのバージョン6では、Photo Picker APIを使用するようになり、 saveToGallery: true を使用しない限り、カメラのパーミッションを宣言する必要がなくなりました。もしこれがfalseの場合、他のプラグインが以下のパーミッションを必要としなければ、AndroidManifest.xmlから削除することができます。
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • Androidで、ユーザーがギャラリーからの画像ピックをキャンセルした場合、他のプラットフォームと同様に"User cancelled photos app"というエラーが返されるようになりました。
  • androidxMaterialVersion変数が1.10.0`に更新されました。

Filesystem

  • iOSは他のプラットフォームと同じように、ctimemtimeを文字列ではなく数値で返すようになった。

Geolocation

  • NSLocationAlwaysUsageDescription (Privacy - Location Always Usage Description) は非推奨であるため、Info.plist から削除することができます。
  • playServicesLocationVersion 変数が 21.1.0 に更新されました。

Google Maps

  • iOSのネイティブライブラリが更新されたので、詳しくはこちら をチェックしてください。
  • NSLocationAlwaysUsageDescription (Privacy - Location Always Usage Description) is deprecated and can be removed from the Info.plist.
  • googleMapsPlayServicesVersion has been updated to 18.2.0.
  • googleMapsUtilsVersion has been updated to 3.8.2.
  • googleMapsKtxVersion has been updated to 5.0.0.
  • googleMapsUtilsKtxVersion has been updated to 5.0.0.
  • kotlinxCoroutinesVersion has been updated to 1.7.3.
  • androidxCoreKTXVersion has been updated to 1.12.0.
  • kotlin_version has been updated to 1.9.10.

Local Notifications

  • Android 14では、<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" /> パーミッションを使用していても、通知はデフォルトでは正確ではありません。

Push Notifications

  • firebaseMessagingVersion 変数が 23.3.1 に更新されました。

Share

  • androidxCoreVersion変数が1.12.0に更新されました。

Splash Screen

  • coreSplashScreenVersion 変数が 1.0.1 に更新されました。

Status Bar

  • androidxCoreVersion変数が1.12.0に更新されました。