monacaで「iosrtc」cordovaプラグインのビルドエラー – javascript html monaca

質問:


monacaを利用しているものですが、IOSでWebRTCを使ったアプリ作成を行いたいと思っています。
しかし内部ブラウザであるWKWebViewでは使えないことがわかり、別途cordovaプラグインを使用することにしました。
見つけたものが「iosrtc(https://github.com/BasqueVoIPMafia/cordova-plugin-iosrtc)」
というもので、プラグインをアップロード、有効化して試しにカスタムデバッカーでビルドしようとしました。
しかしここでエラーが出てしまい、先に進めない状況になってしまっています。

Remove DerivedData files...

Remove IB Support files...
Change Xcode Version to 9
Build Error: Error: Sandbox Exec Error: [ ** ARCHIVE FAILED **


The following build commands failed:
    CompileSwift normal arm64 /tmp/monaca/5bb44c3ee788859048201c66/project/platforms/ios/testcamera/Plugins/cordova-plugin-iosrtc/iosrtcPlugin.swift
    CompileSwift normal arm64 /tmp/monaca/5bb44c3ee788859048201c66/project/platforms/ios/testcamera/Plugins/cordova-plugin-iosrtc/PluginRTCTypes.swift
    CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler
(3 failures)
Error: Error code 65 for command: xcodebuild with args: -xcconfig,/private/tmp/monaca/5bb44c3ee788859048201c66/project/platforms/ios/cordova/build-debug.xcconfig,-workspace,testcamera.xcworkspace,-scheme,testcamera,-configuration,Debug,-destination,generic/platform=iOS,-archivePath,testcamera.xcarchive,archive,CONFIGURATION_BUILD_DIR=/private/tmp/monaca/5bb44c3ee788859048201c66/project/platforms/ios/build/device,SHARED_PRECOMPS_DIR=/private/tmp/monaca/5bb44c3ee788859048201c66/project/platforms/ios/build/sharedpch
 ]

swiftを使用しているようなので,config.xmlに

<platform name="ios">
  <preference name="ios-XCBuildConfiguration-SWIFT_VERSION" value="4"/>
</platform>

を追記しました。
とりあえず、「iosrtc」cordovaプラグイン無しでビルドをしてみたところ成功したため、証明書関係は問題ないようです。
(それなのにエラーコード 65 が出ているのが気になりますが…)

ご教授お願い致します。

質問者: sozo

KNaito

cordova-plugin-iosrtcのドキュメント

https://github.com/BasqueVoIPMafia/cordova-plugin-iosrtc/blob/master/docs/Building.md

を読むと書いてありますが、このプラグインはただ組み込んだだけでは動作せず、その後、手動でXcodeに設定を行う必要があるとされています。

このドキュメントも、どうも古くて不十分のようなのですが、自分が手元で確認した限りでは、

  1. Swiftのバージョンを3.0にする
  2. Bridgingヘッダーを設定する

の2つが必要のようです。

基本的に、Monacaでは、手動で設定が必要なプラグインは正式な対応はしていないため、このプラグインは利用することが出来ません。

そのため、プラグインを改修するか、もしくは、補助スクリプト(フックスクリプト)を利用してなんとかするしかないと思います。

ここでは、試しに補助スクリプトを使って次の方法を行ってみました。一応、ビルドには成功しました。

  1. Swiftのバージョンについては、質問者さんの方法で設定しますが、Monacaでは内部でXcode 9系が利用されているため、3.0は使えないので、3.3とします。

  2. Bridging-Header.hは、Cordova 7系では変更出来ないため、フックスクリプトで対応します。(なお、Cordova 9系から、これらの設定が出来るように予定されています)

具体的には、次の1.2.を行います。

  1. config.xmlを編集し、<platform name="ios">の配下に次を組み込む

    <preference name="ios-XCBuildConfiguration-SWIFT_VERSION" value="3.3"/>
    <hook type="after_prepare" src="res/after_prepare_ios.js"/>
    
  2. resフォルダの下に、after_prepare_ios.jsファイルを作り、次のコードを書き込む。

    // This is a JavaScript file
    var path = require('path');
    var fs = require('fs');
    module.exports = function(context) {
      var projectRoot = context.opts.projectRoot;
      var pathAPI = path.resolve(projectRoot, 'platforms', 'ios', 'cordova', 'Api.js');
      var API = require(pathAPI);
      var api = new API('ios');
    
      var src = path.resolve(projectRoot, 'plugins', 'cordova-plugin-iosrtc', 'src', 'cordova-plugin-iosrtc-Bridging-Header.h');
      var dist = path.resolve(api.locations.xcodeCordovaProj, 'Bridging-Header.h');
    
      console.log('-- copy file ' + src + ' to ' + dist);
      fs.copyFileSync(src, dist);
    
    };
    

この2. については、何をしているのかよくわからないかも知れませんが、要は、プラグインが内包しているcordova-plugin-iosrtc-Bridging-Header.hファイルを強制的にコピーして、CordovaのブリッジングヘッダーであるBridging-Header.hに上書きしています。

組み込んだプラグインは、やや古いもののようなので、ビルドが成功したとしても、期待された動作をするかどうかまでは分かりませんが、ご参考になれば幸いです。

出典

You Might Also Like

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です