Как использовать Web3js из Obj-C

Я совершенно новичок в JS. Я разрабатываю на ios, и нам нужно использовать Web3js в нашей программе. Можно вызывать функцию js в obj-c. Однако я использую «требовать» для импорта модулей Web3js, он выдает «ReferenceError: не удается найти переменную: требуется». Я знаю, что речь идет о среде выполнения Nodejs. Я также пытался использовать браузер для создания web3js, но он показал некоторую ошибку «Не удается найти модуль «веб-ядро» из xxxx».

вот мой код. объектный код:

NSString* path = [[NSBundle mainBundle] pathForResource:@"bridge/src/index" ofType:@"js"];
jsFunc = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

JSContext* jsContext = [[JSContext alloc] init];
[jsContext evaluateScript:jsFunc];
JSValue* func = jsContext[@"getAddress"];
JSValue* = [func2 callWithArguments:@[@"0x8730f6ad1c0d387644590966bdbfedba44fe250118df0f97f11190ad5727b312"]];

js:

function getAddress(prvKey)
{
  try{
      var Web3 = require('../../3rd_party/web3.js-1.0.0');     
      var web3 = new Web3();
      return web3.eth.accounts.privateKeyToAccount(prvKey);
     }
  catch (e)
  {
      return e;
  }
}

Я знаю, что webView — это еще один способ вызова функций js. Это более странно. Я написал следующее в html, который вызывается моим webView.

function getAddress(prvkey)
{
   var web3 = new Web3();
   return prvkey;
   ...
}

Он возвращает пустую строку, даже если я использую try-catch. Я совершенно не знаю, как устранить неполадки.

Кто-нибудь может помочь мне, как использовать Web3js из obj-c?

Большое спасибо.

Кстати, у меня это не работает, ethereum.stackexchange.com/questions/19483/…

Ответы (2)

Я использовал Browserify для упаковки всех модулей, а затем использовал webView для вызова функций js.

вот мой файл js, index.js

"use strict"
let Web3 = require('web3.js');
window.Web3 = Web3;

а затем используйте Broswerify для упаковки

browserify index.js -o web3.js

мой хтмл,

<html>
<head>
    <script type="text/javascript" src="web3.js"></script>   
</head>
<body>
    <script type="text/javascript">
        function getAddress(prvkey)
        {
            try
            {
                var web3 = new Web3();
                var account  = web3.eth.accounts.privateKeyToAccount(prvkey);
                return account.address;
            }
            catch (e)
            {
                return e;
            }
        }
    </script>
</body>

Есть библиотека для IOS:
web3Js в Swift

Вы также можете использовать эту библиотеку в Objective-C.