Monaca
ノウハウ・TIPS

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では、デバッグビルド用の設定とリリースビルド用の設定を個別に行うため、debugreleaseに対して、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.jsSDK Keyを設定する必要があります。ビルドが成功してもwikitude-cordova-pluginが動作しない場合は、SDK Keyの設定を確認してみてください。wikitude-cordova-pluginの詳しい利用方法は、Wikitude SDK Cordovaのドキュメントを参照してください。

おわりに

今回は、wikitude-cordova-pluginを例にbuild.jsonにbuildFlagを設定してみました。この他にもビルドの際にbuildFlagの設定が必要になった場合は、一度、build.jsonのbuildFlagを試してみてください。

author img for keiji_asial

keiji_asial

前の記事へ

次の記事へ

一覧へ戻る
PAGE TOP