Cordova環境でAPPX0108証明書の有効期限切れでビルドが通らない

わぴさびサンプルソース

Cordova環境でAPPX0108証明書の有効期限切れでビルドが通らない

Visual Studio 2015 + Cordova環境の証明書の有効期限は1年間となります。有効期限が切れた証明書を利用するとビルド時に 以下のようにAPPX0108のエラーが発生して失敗します。

APPX0108

1>------ ビルド開始: プロジェクト:CalendarMaker, 構成:Release Windows-x86 ------
1>  ------ ソース パッケージ ディレクトリからパッケージが正しくグローバルにインストールされていることを確認しています: C:¥Program Files (x86)¥Microsoft Visual Studio 14.0¥Common7¥IDE¥Extensions¥ApacheCordovaTools¥packages¥vs-tac
1>  ------ ソースの package.json の名前: vs-tac
1>  ------ ソースの package.json のバージョン: 1.0.42
1>  ------ パッケージは既に正しいバージョンでグローバルにインストールされています。
1>  ------ Cordova ツール 6.4.0 は既にインストールされています。
1>  ------ Build Settings:
1>  ------ Build Settings:
1>  ------    platformConfigurationBldDir: -:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥bld¥Windows-x86¥Release
1>  ------    platformConfigurationBinDir: -:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥bin¥Windows-x86¥Release
1>  ------    buildCommand: build
1>  ------    platform: Windows-x86
1>  ------    cordovaPlatform: windows
1>  ------    configuration: Release
1>  ------    cordovaConfiguration: Release
1>  ------    projectName: CalendarMaker
1>  ------    projectSourceDir: -:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker
1>  ------    npmInstallDir: C:¥Users¥hogehoge¥AppData¥Roaming¥npm
1>  ------    buildTarget: LocalMachine
1>  ------    language: ja-JP
1>  ------ プラットフォーム windows は既に存在しています
1>  ------ ネイティブ ファイルを -:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥res¥native¥windows から platforms¥windows にコピーしています
1>  ------ -:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥res¥native¥windows¥CordovaApp.pfx を platforms¥windows¥CordovaApp.pfx にコピーしました
1>  ------ -:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥res¥native¥windows¥Package.StoreAssociation.xml を platforms¥windows¥Package.StoreAssociation.xml にコピーしました
1>  ------ platforms¥windows へのネイティブ ファイルのコピーが完了しました
1>  ------ プラグインを更新しています
1>  ------ 現在インストールされているプラグイン:
1>  ------ 現在インストールされている依存プラグイン:
1>  ------ 現在構成されているプラグイン:
1>  ------ 準備中のプラットフォーム: windows
1>  No scripts found for hook "before_build".
1>  No scripts found for hook "before_prepare".
1>  Checking config.xml for saved platforms that haven't been added to the project
1>  Checking for any plugins added to the project that have not been installed in windows platform
1>  No differences found between plugins added to project and installed in windows platform. Continuing...
1>  Generating platform-specific config.xml from defaults for windows at -:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥platforms¥windows¥config.xml
1>  Merging project's config.xml into platform-specific windows config.xml
1>  Found "merges/windows" folder. Copying its contents into the windows project.
1>  Merging and updating files from [www, platforms¥windows¥platform_www, merges¥windows] to platforms¥windows¥www
1>    copy  platforms¥windows¥platform_www¥cordova-js-src¥confighelper.js platforms¥windows¥www¥cordova-js-src¥confighelper.js (updated file)
1>    copy  platforms¥windows¥platform_www¥cordova-js-src¥exec.js platforms¥windows¥www¥cordova-js-src¥exec.js (updated file)
1>    copy  platforms¥windows¥platform_www¥cordova-js-src¥platform.js platforms¥windows¥www¥cordova-js-src¥platform.js (updated file)
1>    copy  www¥index.html platforms¥windows¥www¥index.html (updated file)
1>    copy  www¥lib¥angular¥angular-csp.css platforms¥windows¥www¥lib¥angular¥angular-csp.css (updated file)
1>    copy  www¥lib¥angular¥angular.js platforms¥windows¥www¥lib¥angular¥angular.js (updated file)
1>    copy  www¥lib¥angular¥angular.min.js platforms¥windows¥www¥lib¥angular¥angular.min.js (updated file)
1>    copy  www¥lib¥onsen¥css¥font_awesome¥css¥font-awesome.css platforms¥windows¥www¥lib¥onsen¥css¥font_awesome¥css¥font-awesome.css (updated file)
1>    copy  www¥lib¥onsen¥css¥font_awesome¥css¥font-awesome.min.css platforms¥windows¥www¥lib¥onsen¥css¥font_awesome¥css¥font-awesome.min.css (updated file)
1>    copy  www¥lib¥onsen¥css¥ionicons¥css¥ionicons.css platforms¥windows¥www¥lib¥onsen¥css¥ionicons¥css¥ionicons.css (updated file)
1>    copy  www¥lib¥onsen¥css¥ionicons¥css¥ionicons.min.css platforms¥windows¥www¥lib¥onsen¥css¥ionicons¥css¥ionicons.min.css (updated file)
1>    copy  www¥lib¥onsen¥css¥onsen-css-components-blue-basic-theme.css platforms¥windows¥www¥lib¥onsen¥css¥onsen-css-components-blue-basic-theme.css (updated file)
1>    copy  www¥lib¥onsen¥css¥onsen-css-components-blue-theme.css platforms¥windows¥www¥lib¥onsen¥css¥onsen-css-components-blue-theme.css (updated file)
1>    copy  www¥lib¥onsen¥css¥onsen-css-components-dark-theme.css platforms¥windows¥www¥lib¥onsen¥css¥onsen-css-components-dark-theme.css (updated file)
1>    copy  www¥lib¥onsen¥css¥onsen-css-components-default.css platforms¥windows¥www¥lib¥onsen¥css¥onsen-css-components-default.css (updated file)
1>    copy  www¥lib¥onsen¥css¥onsen-css-components-purple-theme.css platforms¥windows¥www¥lib¥onsen¥css¥onsen-css-components-purple-theme.css (updated file)
1>    copy  www¥lib¥onsen¥css¥onsen-css-components-sunshine-theme.css platforms¥windows¥www¥lib¥onsen¥css¥onsen-css-components-sunshine-theme.css (updated file)
1>    copy  www¥lib¥onsen¥css¥onsen-css-components.css platforms¥windows¥www¥lib¥onsen¥css¥onsen-css-components.css (updated file)
1>    copy  www¥lib¥onsen¥css¥onsenui.css platforms¥windows¥www¥lib¥onsen¥css¥onsenui.css (updated file)
1>    copy  www¥lib¥onsen¥js¥onsenui.js platforms¥windows¥www¥lib¥onsen¥js¥onsenui.js (updated file)
1>    copy  www¥lib¥onsen¥js¥onsenui.min.js platforms¥windows¥www¥lib¥onsen¥js¥onsenui.min.js (updated file)
1>    copy  www¥scripts¥FileSaver.min.js platforms¥windows¥www¥scripts¥FileSaver.min.js (updated file)
1>    copy  www¥scripts¥_wabi_calendar.js platforms¥windows¥www¥scripts¥_wabi_calendar.js (updated file)
1>    copy  www¥scripts¥canvas-toBlob.js platforms¥windows¥www¥scripts¥canvas-toBlob.js (updated file)
1>    copy  www¥scripts¥index.js platforms¥windows¥www¥scripts¥index.js (updated file)
1>    copy  www¥scripts¥main.js platforms¥windows¥www¥scripts¥main.js (updated file)
1>    copy  merges¥windows¥scripts¥platformOverrides.js platforms¥windows¥www¥scripts¥platformOverrides.js (updated file)
1>    copy  www¥scripts¥wabi_calendar.js platforms¥windows¥www¥scripts¥wabi_calendar.js (updated file)
1>    copy  www¥scripts¥wabi_image_controler.js platforms¥windows¥www¥scripts¥wabi_image_controler.js (updated file)
1>    copy  www¥scripts¥wabi_popup.js platforms¥windows¥www¥scripts¥wabi_popup.js (updated file)
1>    copy  merges¥windows¥scripts¥winstore-jscompat.js platforms¥windows¥www¥scripts¥winstore-jscompat.js (updated file)
1>  Updating icons and splash screens at platforms¥windows¥images
1>  Prepared windows project successfully
1>  No scripts found for hook "pre_package".
1>  No scripts found for hook "after_prepare".
1>  Checking config.xml for saved plugins that haven't been added to the project
1>  ------ -:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥bin¥Windows-x86¥Release¥Microsoft.AppxPackage.Metadata.Overrides.props を platforms¥windows¥Microsoft.AppxPackage.Metadata.Overrides.props にコピーしました
1>  ------ ビルド中のプラットフォーム: windows
1>  Release
1>  ------ ビルドの構成オプション: --release
1>  No scripts found for hook "before_compile".
1>  Reading build config file: -:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥build.json
1>  Searching for available MSBuild versions...
1>  Running command: C:¥WINDOWS¥system32¥reg.exe query HKLM¥SOFTWARE¥Microsoft¥MSBuild¥ToolsVersions¥15.0 /v MSBuildToolsPath
1>  Running command: C:¥WINDOWS¥system32¥reg.exe query HKLM¥SOFTWARE¥Microsoft¥MSBuild¥ToolsVersions¥14.0 /v MSBuildToolsPath
1>  Running command: C:¥WINDOWS¥system32¥reg.exe query HKLM¥SOFTWARE¥Microsoft¥MSBuild¥ToolsVersions¥12.0 /v MSBuildToolsPath
1>  Running command: C:¥WINDOWS¥system32¥reg.exe query HKLM¥SOFTWARE¥Microsoft¥MSBuild¥ToolsVersions¥4.0 /v MSBuildToolsPath
1>  Command finished with error code 0: C:¥WINDOWS¥system32¥reg.exe query,HKLM¥SOFTWARE¥Microsoft¥MSBuild¥ToolsVersions¥12.0,/v,MSBuildToolsPath
1>  Found MSBuild v12.0 at C:¥Program Files (x86)¥MSBuild¥12.0¥bin¥
1>  Command finished with error code 0: C:¥WINDOWS¥system32¥reg.exe query,HKLM¥SOFTWARE¥Microsoft¥MSBuild¥ToolsVersions¥14.0,/v,MSBuildToolsPath
1>  Found MSBuild v14.0 at C:¥Program Files (x86)¥MSBuild¥14.0¥bin¥
1>  Command finished with error code 1: C:¥WINDOWS¥system32¥reg.exe query,HKLM¥SOFTWARE¥Microsoft¥MSBuild¥ToolsVersions¥15.0,/v,MSBuildToolsPath
1>  Command finished with error code 0: C:¥WINDOWS¥system32¥reg.exe query,HKLM¥SOFTWARE¥Microsoft¥MSBuild¥ToolsVersions¥4.0,/v,MSBuildToolsPath
1>  Found MSBuild v4.0 at C:¥Windows¥Microsoft.NET¥Framework¥v4.0.30319¥
1>  Building project: -:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥platforms¥windows¥CordovaApp.Windows10.jsproj
1>  	Configuration : release
1>  	Platform      : arm
1>  Running command: C:¥WINDOWS¥system32¥reg.exe query "HKLM¥SOFTWARE¥Microsoft¥Microsoft SDKs¥Windows" /s /v InstallationFolder /reg:32
1>  Command finished with error code 0: C:¥WINDOWS¥system32¥reg.exe query,HKLM¥SOFTWARE¥Microsoft¥Microsoft SDKs¥Windows,/s,/v,InstallationFolder,/reg:32
1>  Running command: "C:¥Program Files (x86)¥MSBuild¥14.0¥bin¥msbuild.exe" -:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥platforms¥windows¥CordovaApp.Windows10.jsproj /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo /p:Configuration=release /p:Platform=arm /p:CordovaBundlePlatforms=arm
1>    Patching 10 in prebuild event...
1>    Injected base.js reference to the /www/index.html
1>    Removing /( *)(<script¥s+(?:type="text¥/javascript"¥s+)?src="//Microsoft.WinJS.2.0/js/base.js">¥s*<¥/script>)(¥s*)/ from /www/index.html
1>    Removing /( *)(<script¥s+(?:type="text¥/javascript"¥s+)?src="//Microsoft.Phone.WinJS.2.1/js/base.js">¥s*<¥/script>)(¥s*)/ from /www/index.html
1>C:¥Program Files (x86)¥MSBuild¥Microsoft¥VisualStudio¥v14.0¥AppxPackage¥Microsoft.AppXPackage.Targets(1930,5): warning APPX0108: �w�肳�ꂽ�ؖ����͗L���������؂�Ă��܂��B�ؖ����̍X�V�̏ڍׂɂ‚��ẮAhttp://go.microsoft.com/fwlink/?LinkID=241478 ��Q�Ƃ��Ă��������B [-:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥platforms¥windows¥CordovaApp.Windows10.jsproj]
1>C:¥Program Files (x86)¥MSBuild¥Microsoft¥VisualStudio¥v14.0¥AppxPackage¥Microsoft.AppXPackage.Targets(3522,5): error APPX0108: �w�肳�ꂽ�ؖ����͗L���������؂�Ă��܂��B�ؖ����̍X�V�̏ڍׂɂ‚��ẮAhttp://go.microsoft.com/fwlink/?LinkID=241478 ��Q�Ƃ��Ă��������B [-:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥platforms¥windows¥CordovaApp.Windows10.jsproj]
1>  Command finished with error code 1: C:¥Program Files (x86)¥MSBuild¥14.0¥bin¥msbuild.exe -:¥---¥-------¥-------------¥CalendarMaker3¥CalendarMaker¥platforms¥windows¥CordovaApp.Windows10.jsproj,/clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal,/nologo,/p:Configuration=release,/p:Platform=arm,/p:CordovaBundlePlatforms=arm
1>MSBUILD : cordova-build error : Error: C:¥Program Files (x86)¥MSBuild¥14.0¥bin¥msbuild.exe: Command failed with exit code 1
1>MDAVSCLI : error C: ¥Program Files (x86)¥MSBuild¥14.0¥bin¥msbuild.exe: Command failed with exit code 1
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

更新が必要な証明書

APPX0108を回避するには、以下の3つの証明書を更新する必要があります。

  • プロジェクト名/ソリューション名/platforms/windows/CordovaApp.pfx
  • プロジェクト名/ソリューション名/platforms/windows/CordovaApp_TemporaryKey.pfx
  • プロジェクト名/ソリューション名/res/native/windows/CordovaApp.pfx

一般的な証明書の更新方法

証明書を更新する為には、「アプリ マニフェスト デザイナー」で更新するのが一般的のようですが、Cordova環境は 普通のmanifestファイルとは内容が異なるようで、「アプリ マニフェスト デザイナー」は起動してくれません。 「アプリ マニフェスト デザイナー」が使えないので、別の方法で証明書を更新してやる必要があります。

「アプリ マニフェスト デザイナー」を使わないで証明書を更新

新規でCordovaを利用するプロジェクトを作成して、そのプロジェクトから新規で作成された証明書を 有効期限の切れたプロジェクトにコピーしてもってきます。そうする事で、そのプロジェクトの証明書は1年間有効なので、APPX0108を 回避してビルドを正常に通す事ができます。

新規プロジェクトで証明書を作成する方法

「新規作成」の「プロジェクト」を選択します

プロジェクトの新規作成

「空のアプリ(Apache Cordova)」を選択します

空のアプリ(Apache Cordova)を選択

プロジェクトの名前、作成先、ソリューション名を適当に決めて、「インストール済み」→「テンプレート」→「JavaScript」→「Apache Cordova Apps」→「空のアプリ(Apache Cordova)」を選択します。 「OK」を押下すると新規プロジェクトが作成されます。

新規プロジェクトが作成されました

新規プロジェクト作成

「アプリパッケージの作成」を選択

アプリパッケージの作成を選択

ビルドの構成は、「Release」「Windows-AnyCP」「ローカルコンピュータ」を選択しておきます。 そして、「プロジェクト名」上で右クリック→「ストア」→「アプリパッケージの作成」を選択します

「いいえ」を選択

「いいえ」を選択

Windowsストアにアップロードするパッケージを作成するかを聞かれますので「いいえ」を選択してください。 「いいえ」を選択したら「次へ」を選択します。

「作成」を選択

「作成」を選択

そのままで良いので、「作成」を選択します。 ビルドが開始され、パッケージが作成されます。この過程で新しい証明書が作成されます。

「閉じる」を選択

「閉じる」を選択

パッケージの作成が完了します。「Windows アプリ認証キット」での検証 は必要ありませんので、「閉じる」を選択します。

この時点で証明書は新規作成されていますので、証明書の作成作業は完了です。

APPX0108が発生しているプロジェクトへ証明書を上書きします。

APPX0108が発生しているプロジェクトの以下の証明書を先ほど新しく作成したプロジェクトからコピーしてきます。(フォルダ構成は同じです)

  • プロジェクト名/ソリューション名/platforms/windows/CordovaApp.pfx
  • プロジェクト名/ソリューション名/platforms/windows/CordovaApp_TemporaryKey.pfx
  • プロジェクト名/ソリューション名/res/native/windows/CordovaApp.pfx

コピーが完了したら、証明書の更新作業が完了です。

証明書を更新した、ビルドが通らなかったプロジェクトをビルドします

「閉じる」を選択

APPX0108は発生しなくなり、問題無くビルドが正常終了するようになりました。

証明書の更新作業はこれで完了です。

お疲れさまでした。







Cordova環境でAPPX0108証明書の有効期限切れでビルドが通らない

わぴさびサンプルソース