iphone — фреймворк JavaScriptCore / библиотека

#iphone #objective-c #frameworks #ios-frameworks

#iPhone #objective-c #фреймворки #ios-фреймворки

Вопрос:

Кто-нибудь использовал фреймворк / библиотеку JavaScriptCore в проекте iOS? Я не вижу ни одного такого фреймворка, доступного в существующем списке фреймворков, поэтому я загрузил исходный код с сайта Apple с открытым исходным кодомhttp://www.opensource.apple.com/release/ios-40

Теперь я хочу знать, что мне нужно сделать, чтобы интегрировать это в мое приложение. Эти API уже присутствуют в SDK, и я могу просто вызвать методы, скопировав только заголовки, или мне нужно скопировать весь исходный код в проект?

У меня есть рабочий проект, который просто копирует и импортирует заголовки. Но я не могу понять, как это работает. В нем есть метод, как показано ниже, который вызывается при запуске.

 #include <dlfcn.h>
@implementation JSCocoaSymbolFetcher
  (void)populateJavascriptCoreSymbols
{
_JSEvaluateScript = dlsym(RTLD_DEFAULT, "JSEvaluateScript");
_JSGarbageCollect = dlsym(RTLD_DEFAULT, "JSGarbageCollect");
_JSGlobalContextCreate = dlsym(RTLD_DEFAULT, "JSGlobalContextCreate");
_JSGlobalContextRetain = dlsym(RTLD_DEFAULT, "JSGlobalContextRetain");
_JSGlobalContextRelease = dlsym(RTLD_DEFAULT, "JSGlobalContextRelease");
_JSContextGetGlobalObject = dlsym(RTLD_DEFAULT, "JSContextGetGlobalObject");
_JSClassCreate = dlsym(RTLD_DEFAULT, "JSClassCreate");
_JSClassRetain = dlsym(RTLD_DEFAULT, "JSClassRetain");
.
.
.//other similar code
.
}
  

В нем также есть подобные методы до @implementation

 JSValueRef (*_JSEvaluateScript)(JSContextRef ctx, JSStringRef script, JSObjectRef thisObject, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception);
JSValueRef JSEvaluateScript(JSContextRef ctx, JSStringRef script, JSObjectRef thisObject, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception)
{
return _JSEvaluateScript(ctx, script, thisObject, sourceURL, startingLineNumber, exception);
}

void (*_JSGarbageCollect)(JSContextRef ctx);
void JSGarbageCollect(JSContextRef ctx)
{
return _JSGarbageCollect(ctx);
}
  

Итак, мой вопрос

1) Кто-нибудь пробовал использовать JavaScriptCore для приложения iPhone? если да, то каким образом?

2) что делает метод dlsym?

3) как работают методы, упомянутые в последнем? например void (*_JSGarbageCollect)(JSContextRef ctx);
void JSGarbageCollect(JSContextRef ctx)
{
return _JSGarbageCollect(ctx);
}

Комментарии:

1. Я полагаю, что вам не разрешено использовать JavaScriptCore непосредственно в приложении для iOS. Единственный разрешенный способ выполнения JS — это UIWebView. Что чертовски неубедительно, если вы спросите меня.

2. Но почему Apple предоставит исходный код opensource.apple.com/release/ios-40 Если мы не можем использовать это в приложении для iOS?

3. @Squeegy это больше не так, они позволяют вам запускать интерпретаторы в вашем приложении до тех пор, пока оно не загрузит код после его проверки в App Store.

Ответ №1:

Вы можете связать JavaScriptCore со своим приложением, но вы должны включить весь проект в свое приложение. Смотрите http://www.phoboslab.org/log/2011/04/ios-and-javascript-for-real-this-time для получения более подробной информации.

Комментарии:

1. Предоставленная вами ссылка на самом деле не дает хорошей информации о том, как код, предоставленный Apple, должен быть структурирован в проект xcode для iOS для запуска, плюс вам придется заплатить за jscore, который они изменили.