#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, который они изменили.