MonacaのリモートビルドでbuildFlagを設定する方法
Monacaチームの小田川です。
Cordovaプラグインでは、ビルドの際にbuildFlag
の設定が必要 になるケースがあります。Monacaで提供しているリモートビルドでは、ビルドサーバ側がCordovaのcordova build
コマンドを発行しているため、利用者側からcordova buildコマンドに対してbuildFlagを設定することができません。
Cordovaでは、ビルド構成ファイル(build.json
)をプロジェクトに配置することで、ビルドの際にbuildFlagを設定できるようになっています。build.jsonについては、こちらを参照してください。
今回は、例としてwikitude-cordova-pluginを使用してbuild.jsonのbuildFlag設定を確認してみたいと思います。
今回の対象は、Cordova 9.0用のMonacaプロジェクトになります。
wikitude-cordova-plugin
wikitude-cordova-pluginプラグインは、アプリでARの機能を提供する際に使用されているCordovaプラグインです。記事掲載時の最新版(v9.2.0)では、armv7/armv7s
がサポートされていないため、iOSビルドを行った場合、下記のようなエラーが発生します。
エラー内容:
ld: warning: Could not find or use auto-linked framework 'WikitudeSDK'
Undefined symbols for architecture armv7:
"_kWTUnauthorizedAppleiOSSDKAPIsKey", referenced from:
+[WTWikitudePlugin composeFailingAPIAuthorizationMessageFromError:] in WTWikitudePlugin.o
___34-[WTWikitudePlugin requestAccess:]_block_invoke in WTWikitudePlugin.o
"_OBJC_CLASS_$_WTArchitectView", referenced from:
objc-class-ref in WTWikitudePlugin.o
objc-class-ref in WTARViewController.o
(maybe you meant: _OBJC_CLASS_$_WTArchitectViewController)
"_kWTScreenshotSaveModeKey", referenced from:
-[WTWikitudePlugin didReceiveDidCapturedScreenNotification:] in WTWikitudePlugin.o
"_kWTScreenshotBundleDirectoryKey", referenced from:
-[WTWikitudePlugin captureScreen:] in WTWikitudePlugin.o
-[WTWikitudePlugin didReceiveDidCapturedScreenNotification:] in WTWikitudePlugin.o
"_OBJC_CLASS_$_WTArchitectStartupConfiguration", referenced from:
objc-class-ref in WTWikitudePlugin.o
objc-class-ref in WTARViewController.o
"_OBJC_CLASS_$_WTAuthorizationRequestManager", referenced from:
objc-class-ref in WTWikitudePlugin.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
この問題は、Wikitude Supportにも寄せられていて、解決方法としてcordova buildコマンドでbuildFlagを設定する回答が行われています。
回答の抜粋:
cordova build ios --device --developmentTeam=********** --buildFlag="ONLY_ACTIVE_ARCH=NO" --buildFlag="ARCHS=ARCHS_STANDARD_64_BIT"
build.jsonの作成
build.jsonをMonacaプロジェクトで使用する場合は、Monacaプロジェクトのルートにbuild.jsonを配置します。ファイルの作成は、MonacaクラウドIDEのメニューにあるファイル > 新規ファイル
から作成することができます。プロジェクトのルートにファイルを作成する場合は、フォルダ項目に「/」を設定します。
build.jsonにbuildFlagを設定する
build.jsonに
--buildFlag="ONLY_ACTIVE_ARCH=NO" --buildFlag="ARCHS=ARCHS_STANDARD_64_BIT"
を設 定する場合は、下記のようになります。
{
"ios": {
"debug": {
"buildFlag": [
"ONLY_ACTIVE_ARCH=NO",
"ARCHS=ARCHS_STANDARD_64_BIT"
]
},
"release": {
"buildFlag": [
"ONLY_ACTIVE_ARCH=NO",
"ARCHS=ARCHS_STANDARD_64_BIT"
]
}
}
}
build.jsonでは、デバッグビルド用の設定とリリースビルド用の設定を個別に行うため、debug
とrelease
に対して、buildFlagを設定しています。build.jsonについては、こちらを参照してください。
Monacaプロジェクトのルートに上記の設定をしたbuild.jsonを作成することで、iOSビルドが成功するようになります。ビルドログを確認すると、下記のように設定が反映されていることが分かります。
Reading build config file: /private/tmp/download/build.json
Building project: /private/tmp/download/platforms/ios/wikitude.xcworkspace
Configuration: Debug
Platform: device
Target:
Adding xcodebuildArg: ONLY_ACTIVE_ARCH=NO
Adding xcodebuildArg: ARCHS=ARCHS_STANDARD_64_BIT
Running command: xcodebuild -workspace wikitude.xcworkspace -scheme wikitude -configuration Debug -destination generic/platform=iOS -archivePath wikitude.xcarchive archive CONFIGURATION_BUILD_DIR=/private/tmp/download/platforms/ios/build/device SHARED_PRECOMPS_DIR=/private/tmp/download/platforms/ios/build/sharedpch ONLY_ACTIVE_ARCH=NO ARCHS=ARCHS_STANDARD_64_BIT
User defaults from command line:
IDEArchivePathOverride = /private/tmp/download/platforms/ios/wikitude.xcarchive
Build settings from command line:
ARCHS = ARCHS_STANDARD_64_BIT
CONFIGURATION_BUILD_DIR = /private/tmp/download/platforms/ios/build/device
ONLY_ACTIVE_ARCH = NO
SHARED_PRECOMPS_DIR = /private/tmp/download/platforms/ios/build/sharedpch
wikitude-cordova-pluginでは、プラグイン内にあるWikitudePlugin.js
にSDK Key
を設定する必要があります。ビルドが成功してもwikitude-cordova-pluginが動作しない場合は、SDK Keyの設定を確認してみてください。wikitude-cordova-pluginの詳しい利用方法は、Wikitude SDK Cordovaのドキュメントを参照してください。
おわりに
今回は、wikitude-cordova-pluginを例にbuild.jsonにbuildFlagを設定してみました。この他にもビルドの際にbuildFlagの設定が必要になった場合は、一度、build.jsonのbuildFlagを試してみてください。