SlideShare a Scribd company logo
1 of 18
Download to read offline
JavaScriptCore
André Gustavo Espeiorin
/me
• Developer desde 2006
• iOS Developer desde 2010
• Desenvolvimento Nativo
• Desenvolvedor independente
• http://about.me/espeiorin
Singapore Airlines
iOS App
Por que?
• Nem tudo precisa ser nativo
• JavaScript #1
• Acelerar o desenvolvimento
• Flexibilidade
JavaScriptCore
• WebKit Framework
• iOS 7+ / OS X Mavericks
• http://opensource.apple.com/source/
JavaScriptCore
JavaScriptCore
• Acessar contexto JS dentro da WebView
• Executar JS a partir de código nativo
• Executar código nativo a partir do JS
• Capturar exceções JS
JSContext
• Ambiente JS
• Análogo ao objeto window
JSContext
JSContext *context = [[JSContext alloc] init];
[context evaluateScript:@"var a = 5”];
[context evaluateScript:@"var b = 4"];
[context evaluateScript:@"var sum = function(valueA, valueB) { return valueA + valueB }"];
JSValue *tripleNum = [context evaluateScript:@"sum(a, b)"];
Exceptions
// debug
[context setExceptionHandler:^(JSContext *context, JSValue *value) {
NSLog(@"JS Exception %@", value);
}];
JSValue
• Variáveis JS
• Funções JS
• Possui uma referência para o JSContext
JSValue
Foundation JavaScript
nil undefined
NSNull null
NSNumber number, boolean
NSDictionary Object object
NSArray Array object
NSDate Date object
NSBlock Function object
id Wraper object
Class Constructor object
JSValue
JSValue *tripleNum = [context evaluateScript:@"sum(a, b)”];
// Converte Valor Numérico
NSLog(@"SUM %@", [tripleNum toNumber]);
// Converte para string
self.title = [[context evaluateScript:@"document.title"] toString];
// Invoca função vinda do JS
JSValue *sumFunction = context[@"sum"];
JSValue *result = [sumFunction callWithArguments:@[@5, @4]];
NSLog(@"SUM %d", [result toInt32]);
JSExport
• Protocol deve ser extendido
• Conversão de objetos JS <> Objective-C
JSExport
@import JavaScriptCore;
@protocol Contact <JSExport>
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *company;
@property (nonatomic, strong) NSString *phone;
+ (instancetype) contactWithName:(NSString *)name
company:(NSString *)company
phone:(NSString *)phone;
@end
Injeção de Valores
Objective-C
context[@"contactManager"] = self.contactManager;
context[@"Contact"] = [DefaultContact class];
JavaScript
var contact = Contact.contactWithNameCompanyPhone(name, company, phone);
if (!contactManager.addContact(contact)) {
alert('Erro ao inserir contato, verifique os dados inseridos.');
return false;
}
Exemplo
https://github.com/espeiorin/JavaScriptCore
Perguntas?
Obrigado

More Related Content

Viewers also liked

Arquitetura de dispositivos móveis
Arquitetura de dispositivos móveis Arquitetura de dispositivos móveis
Arquitetura de dispositivos móveis Italo Andrade
 
Arquitetura dos dispositivos móveis
Arquitetura dos dispositivos móveisArquitetura dos dispositivos móveis
Arquitetura dos dispositivos móveisAlexsander Fontes
 
Sistema Operacional Móvel iOS
Sistema Operacional Móvel iOSSistema Operacional Móvel iOS
Sistema Operacional Móvel iOSDj Black
 
Tecnologias da Informacao e seu Impacto na Sociedade
Tecnologias da Informacao e seu Impacto na SociedadeTecnologias da Informacao e seu Impacto na Sociedade
Tecnologias da Informacao e seu Impacto na SociedadeAdriana de Oliveira
 
IOS sistema operacional
IOS sistema operacionalIOS sistema operacional
IOS sistema operacionalHamburg Süd
 
SISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOSSISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOSTenshiDam
 
Trabalho de informatica - Sistema Operacional iOS
Trabalho de informatica - Sistema Operacional iOSTrabalho de informatica - Sistema Operacional iOS
Trabalho de informatica - Sistema Operacional iOSnadilei
 
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...SlideShare
 

Viewers also liked (12)

Arquitetura de dispositivos móveis
Arquitetura de dispositivos móveis Arquitetura de dispositivos móveis
Arquitetura de dispositivos móveis
 
Arquitetura dos dispositivos móveis
Arquitetura dos dispositivos móveisArquitetura dos dispositivos móveis
Arquitetura dos dispositivos móveis
 
Sistema Operacional Móvel iOS
Sistema Operacional Móvel iOSSistema Operacional Móvel iOS
Sistema Operacional Móvel iOS
 
SISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOSSISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOS
 
Tecnologias da Informacao e seu Impacto na Sociedade
Tecnologias da Informacao e seu Impacto na SociedadeTecnologias da Informacao e seu Impacto na Sociedade
Tecnologias da Informacao e seu Impacto na Sociedade
 
SISTEMA OPERATIVO iOS
SISTEMA OPERATIVO iOSSISTEMA OPERATIVO iOS
SISTEMA OPERATIVO iOS
 
Sistema Operacional iOS
Sistema Operacional iOSSistema Operacional iOS
Sistema Operacional iOS
 
IOS sistema operacional
IOS sistema operacionalIOS sistema operacional
IOS sistema operacional
 
SISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOSSISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOS
 
Sistema Operacional Android
Sistema Operacional AndroidSistema Operacional Android
Sistema Operacional Android
 
Trabalho de informatica - Sistema Operacional iOS
Trabalho de informatica - Sistema Operacional iOSTrabalho de informatica - Sistema Operacional iOS
Trabalho de informatica - Sistema Operacional iOS
 
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
 

Similar to JavaScriptCore para iOS e OS X

Introducao ao Desenvolvimento iOS
Introducao ao Desenvolvimento iOSIntroducao ao Desenvolvimento iOS
Introducao ao Desenvolvimento iOSDiogo Costa
 
TDC 2008 JBoss Seam
TDC 2008 JBoss SeamTDC 2008 JBoss Seam
TDC 2008 JBoss SeamDr. Spock
 
Phonegap - self RJ
Phonegap - self RJPhonegap - self RJ
Phonegap - self RJjavamanrj
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeRafael Ponte
 
Anatomia do JSF – JavaServer Faces
Anatomia do JSF – JavaServer FacesAnatomia do JSF – JavaServer Faces
Anatomia do JSF – JavaServer Facescejug
 
Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2Dr. Spock
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsSuissa
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
TDC2018SP | Trilha Mobile - Learn once, code anywhere
TDC2018SP | Trilha Mobile - Learn once, code anywhereTDC2018SP | Trilha Mobile - Learn once, code anywhere
TDC2018SP | Trilha Mobile - Learn once, code anywheretdc-globalcode
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Rodrigo Urubatan
 
Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visagejesuinoPower
 
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6Dr. Spock
 

Similar to JavaScriptCore para iOS e OS X (20)

IOS API
IOS APIIOS API
IOS API
 
Introducao ao Desenvolvimento iOS
Introducao ao Desenvolvimento iOSIntroducao ao Desenvolvimento iOS
Introducao ao Desenvolvimento iOS
 
TDC 2008 JBoss Seam
TDC 2008 JBoss SeamTDC 2008 JBoss Seam
TDC 2008 JBoss Seam
 
Phonegap - self RJ
Phonegap - self RJPhonegap - self RJ
Phonegap - self RJ
 
Jboss Seam
Jboss SeamJboss Seam
Jboss Seam
 
Html5
Html5Html5
Html5
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividade
 
Anatomia do JSF – JavaServer Faces
Anatomia do JSF – JavaServer FacesAnatomia do JSF – JavaServer Faces
Anatomia do JSF – JavaServer Faces
 
Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
Meteor - TechParty 2015
Meteor - TechParty 2015Meteor - TechParty 2015
Meteor - TechParty 2015
 
JBoss TRE - Aula1
JBoss TRE - Aula1JBoss TRE - Aula1
JBoss TRE - Aula1
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
Curso jsf
Curso jsfCurso jsf
Curso jsf
 
TDC2018SP | Trilha Mobile - Learn once, code anywhere
TDC2018SP | Trilha Mobile - Learn once, code anywhereTDC2018SP | Trilha Mobile - Learn once, code anywhere
TDC2018SP | Trilha Mobile - Learn once, code anywhere
 
Front7 React Native
Front7 React NativeFront7 React Native
Front7 React Native
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_
 
Caelum Day In Rio
Caelum Day In RioCaelum Day In Rio
Caelum Day In Rio
 
Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visage
 
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
 

JavaScriptCore para iOS e OS X