Embed a JavaScript engine in an iOS application

2019-01-16 03:23发布

I wonder if anyone has successfully ported a javascript engine/interpreter to iOS. I'm writing an iPhone game that I would like to use Javascript as the high-level scripting language (AI, gameplay, etc.), but to do that, I need to compile the JS engine into a static library and link it against my objectiveC program for iPhone OS. There are some candidate JS engine I'm looking at but I couldn't find any successful cases for doing that.

Here're the js engine I was hoping to use for iOS

  • google's V8 javascript engine
  • mozilla's SpiderMonkey

The alternative is to use UIWebView's Javascript callback interface, but that requires loading the entire UIWebView into memory and the experiences I heard is that it is usually slow in performance.

Appreciate if anyone had similar experiences of do this or know any references for that!

[UPDATED] as Kostis mentioned, Apple introduced JavascriptCore in WWDC 2013

4条回答
我欲成王,谁敢阻挡
2楼-- · 2019-01-16 03:32

For future viewers, now there is the JavaScriptCore framework, introduced in the new iOS 7. It does magic! Wrapping, unwrapping values from/to JS/Objective-C, calling functions, callbacks, everything!

Unfortunately, documentation is really poor at the moment. You can find a presentation from the WWDC 2013 event and some more info in the header files (cmd+click on the header file name in Xcode). There are also some tutorial around the internets which just copy what the guy in the WWDC presentation does.

I've used it for one of my projects, it's really powerful. The only think I didn't like is that it passed objects from JS to ObjC by value, i.e. reference was lost. There might be a workaround for this, but I couldn't find anything without proper documentation.

Hope this will help someone :)

查看更多
祖国的老花朵
3楼-- · 2019-01-16 03:41

Take a look at the open source project Ejecta, which embeds JavaScriptCore. It provides the HTML5 canvas API, and uses OpenGL & OpenAL.

查看更多
爱情/是我丢掉的垃圾
4楼-- · 2019-01-16 03:57

There are two projects you might be interested in:

  1. JavaScriptCore-iOS
  2. iMonkey

It is absolutely possible to build and ship a JavaScript engine with your iOS app, see http://www.phoboslab.org/log/2011/04/ios-and-javascript-for-real-this-time. Titanium does that, too: https://github.com/appcelerator/webkit_titanium/tree/master/Source/JavaScriptCore. Also see http://www.phoboslab.org/log/2011/06/javascriptcore-project-files-for-ios.

I've also made a small app that shows how to use JSC on iOS: https://github.com/jfahrenkrug/AddressBookSpy

Enjoy.

查看更多
我欲成王,谁敢阻挡
5楼-- · 2019-01-16 03:58

If you eventually want to port your game to something other than iOS (or you have other reasons to avoid Apple's proprietary interfaces) you can use MuJS. It's a small library providing a JavaScript interpreter that is easy to embed and extend.

查看更多
登录 后发表回答