Osadzanie silnika JavaScript w aplikacji iOS

Zastanawiam się, czy ktoś pomyślnie przeportował silnik/interpreter javascript na iOS. Piszę grę na iPhone ' a, w której chciałbym używać Javascript jako języka skryptowego wysokiego poziomu (AI, gameplay itp.), ale aby to zrobić, muszę skompilować silnik JS do statycznej biblioteki i połączyć go z moim programem objective dla iPhone OS. Jest jakiś kandydat na silnik JS, na który patrzę, ale nie mogłem znaleźć żadnych udanych przypadków.

Oto silnik js, który miałem nadzieję Użyj dla iOS

  • silnik JavaScript V8 google
  • Spidermonkey Mozilli

Alternatywą jest użycie UIWebView's Javascript callback interface, ale to wymaga załadowania całego UIWebView do pamięci, a doświadczenia słyszałem, że jest to zwykle powolne w wydajności.

Doceniam, jeśli ktoś miał podobne doświadczenia z tego zrobić lub znać jakieś odniesienia do tego!

[aktualizacja] Jak już wspomniał Kostis, Apple wprowadziło JavascriptCore w WWDC 2013

Author: procrastinate_later, 2011-03-15

4 answers

Dla przyszłych Widzów, Teraz jest Framework JavaScriptCore, wprowadzony w Nowym iOS 7. Robi magię! Zawijanie, rozpakowywanie wartości Z / do JS / Objective-C, wywoływanie funkcji, wywołania zwrotne, wszystko!

Niestety, dokumentacja jest w tej chwili bardzo uboga. Możesz znaleźć prezentację z Wydarzenia WWDC 2013 i więcej informacji w plikach nagłówkowych (cmd+kliknij nazwę pliku nagłówkowego w Xcode). Istnieje również jakiś samouczek wokół Internetu, który po prostu skopiować to, co facet z prezentacji WWDC ma.

Użyłem go do jednego z moich projektów, jest naprawdę potężny. Jedyne, co mi się nie podobało, to to, że przekazywał obiekty z JS do ObjC według wartości, tzn. Referencja została utracona. Możliwe, że istnieje obejście tego problemu, ale nie mogłem znaleźć niczego bez odpowiedniej dokumentacji.

Mam nadzieję, że to komuś pomoże:)

 13
Author: Kostis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-06 16:51:45

Są dwa projekty, które mogą Cię zainteresować:

  1. JavaScriptCore-iOS
  2. iMonkey

Jest absolutnie możliwe, aby zbudować i wysłać silnik JavaScript z aplikacji iOS, zobacz http://www.phoboslab.org/log/2011/04/ios-and-javascript-for-real-this-time . Titanium też tak robi: https://github.com/appcelerator/webkit_titanium/tree/master/Source/JavaScriptCore . Zobacz też http://www.phoboslab.org/log/2011/06/javascriptcore-project-files-for-ios .

Zrobiłem też małą aplikację, która pokazuje jak używać JSC na iOS: https://github.com/jfahrenkrug/AddressBookSpy

Enjoy.

 25
Author: Johannes Fahrenkrug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-24 08:26:02

Spójrz na projekt open sourceEjecta, który osadza JavaScriptCore. Dostarcza HTML5 canvas API i używa OpenGL i OpenAL.

 4
Author: Nik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-28 02:20:39

Jeśli w końcu chcesz przenieść swoją grę na coś innego niż iOS (lub masz inne powody, aby unikać zastrzeżonych interfejsów Apple), możesz użyć MuJS . Jest to mała biblioteka zapewniająca interpreter JavaScript, który można łatwo osadzić i rozszerzyć.

 1
Author: ccxvii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-22 12:45:27