Delphi Tour 2014: Participe!

April 22nd, 2014 by Fernando Rizzato

Você está convidado a conhecer de perto todas as novidades do RAD Studio XE6 (Delphi, C++ Builder e HTML5 Builder) durante o Delphi Tour 2014!

Razões para participar? Vou citar apenas algumas!

Você sabia que…

… seus aplicativos VCL serão capazes de acessar sensores,  utilizar novos componentes e funcionalidades como o Visual LiveBindings, e ainda novos estilos da VCL?

… você pode criar aplicações móveis complementares, e aplicativos de controle remoto, que se conectam com seus aplicativos de desktop VCL, via novos componentes para Tethering?

… você pode monetizar seus aplicativos móveis com o novo suporte para a compra de aplicativos e de publicidade no ​​iOS e Android?

… você pode usar a nova integração de serviços em nuvem para incorporar as notificações push, o armazenamento de arquivos em nuvem e a funcionalidade de gerenciamento de usuários em seus aplicativos via BaaS (Backend as a Service), utilizando os provedores mais populares do mercado?

… agora você conta com recursos exclusivos em C++, incluindo a capacidade de criar aplicações Android e iOS a partir de um único projeto, e suporte para pacotes de 64 bits para Windows?

Entusiasmado tanto quanto eu? Então não deixe para depois, pois as vagas são limitadas. Faça já sua inscrição para a cidade mais próxima!

http://www.embarcaderobr.com.br/tour/

Aguardamos sua presença!

Hotfix 6 para RAD Studio, Delphi, C++Builder XE5 Atualizado!

April 19th, 2014 by Fernando Rizzato

Recentemente liberamos o HotFix 6 para RAD Studio, Delphi, C++Builder XE5, devido a mudanças de interface feitas pela Apple no iOS SDK 7.1 e Xcode 5.1.

O Hotfix resolveu o problema no OS X Mavericks (10.9), mas não para Mountain Lion (10.8). Por esta razão, no dia 17 de Abril último foi liberada uma nova versão deste Hotfix dando cobertura também ao Mountain Lion.

Aproveito aqui para listar todos os updates do XE5 que você NÃO deve deixar de instalar:

Lanzamiento Oficial del RAD Studio XE6!

April 15th, 2014 by Fernando Rizzato

RAD Studio XE6 acaba de llegar. Es la consolidación de la estrategia multi-dispositivos de Embarcadero, ya que en esta versión estamos trayendo el compilador C++ para Android. Así, el RAD compilará para Windows 32/64 bits, OS X, iOS y Android, tanto en Object Pascal como en C++. De esta manera usted puede elegir el lenguaje que más le guste, las características son 100% iguales para ambos lenguajes en todas las plataformas soportadas.

Novedades Principales

Hay muchas nuevas características en esta versión, la primera de las cuales ya hemos citado anteriormente, el compilador de C++ para Android. Vamos a explorar un poco más todo lo que es nuevo para la VCL, FireMonkey Desktop y FireMonkey Mobile.

1.- VCL

La VCL ha recibido importantes mejoras en el rendimiento y la estabilidad, está optimizado para Windows 7 y 8.1 (recuerde que debe migrar las aplicaciones que se ejecutan en Windows XP debido a la interrupción del soporte por parte de Microsoft), migración simplificada a FireDAC desde BDE y otros frameworks, además de nuevos componentes y funciones, tales como el soporte "full" de los estilos (incluidos los menús y los bordes), Taskbar Preview (Win7 y Win8), sensores para GPS y acelerómetros para la tableta de Windows,Tethering App for VCL (hablaremos más sobre en este post) y la Integración Service Cloud (BAAS) (más detalles a continuación)!

2.- FireMonkey

FireMonkey es quizás la zona donde se ha realizado el mayor número de optimizaciones, tenemos nuevos componentes, una Grid totalmente reformada, ListView con nuevas características visuales, WebBrowser con nuevos métodos y con carga de archivos locales, la plantilla y el soporte oficial de Google Glass, y el nuevo framework que harán de su aplicación móvil muy profesional, como el soporte para In App Purchasing y Advertising, tanto para iOS como para Android, con el mismo componente y código fuente (¡aquellos que ya la han desarrollado en cualquier otro entorno de desarrollo saben cuán duro es el trabajo!).

3.- App Tethering para VCL y FireMonkey

La función de Tethering permite que dos aplicaciones, incluso en diferentes plataformas (VCL o FireMonkey), ejecutadas en Windows, OSX, iOS o Android, intercambien datos directamente, sin ninguna aplicación de servidor en el medio. Esto significa que puede tomar partes de su aplicación VCL de escritorio actual (por ejemplo) y llevarlos al mundo de los móviles, y permitir que estas partes intercambien datos y realizen directamente las acciones. ¿No es increíble? Esta función está disponible para las aplicaciones en una misma red (WiFi en esta versión).

4.- Cloud Service (BaaS) Integration

Tanto Delphi XE6, como C++ Builder XE6, trae soporte completo para el Baas (Backend as a Service). Si esto es un tema nuevo para ti, recomendamos estos sitios: http://www.kinvey.com y https://parse.com. El Baas presenta una plataforma común para el intercambio y el almacenamiento de datos, y estos son dos de los principales proveedores en el mercado. En el futuro se añadirán otros proveedores.

Con este soporte, se pueden almacenar y recuperar datos directamente desde estos proveedores de servicios sin la necesidad de construir su propio servidor o incluso una capa intermedia, o la creación de una base de datos en la nube. Sólo suscríbete al servicio! Este soporte también está disponible para VCL, por lo que puede enviar datos desde una aplicación móvil, y luego procesarlas en el servidor de aplicaciones o de escritorio, sólo para nombrar una de las posibilidades.

Esta integración también proporciona soporte para "Push Notifications", lo que abre un gran gama de posibilidades para su aplicación móvil.

5.- In app purchasing y advertising

A través de este framework (TBannerAd y TInAppPurchase) puede agregar fácilmente a través de un solo componente para Android y iOS, el soporte a versiones de demostración y de pago de su aplicación, directamente integrado a tiendas virtuales como AppStoreGooglePlay. También le permite añadir y vender publicidad directamente en su aplicación, en ambas plataformas, y de manera unificada.

Observe en la imagen inferior el anuncio que se muestra en la aplicación Delphi.

Versión de prueba, Licencias y Bonus Pack

Recomiendo a todos descargar la nueva versión y probarlo, en realidad es una release muy estable y rico en características. Puede obtener la versión de prueba (que es 100% funcional durante el período de evaluación) en este enlace:

https://downloads.embarcadero.com/free/rad-studio.

Junto al XE6 estamos lanzando un nuevo tipo de actualización para los usuarios de la última versión, denominada Recharge Plan. Es decir, si usted es un usuario de la versión XE5, el precio de upgrade se reduce en gran medida, lo que le permite mantenerse al día!

Durante el lanzamiento se ofrecerá un Bonus Pack, que consiste en:

- TMS Modern Windows UI Pack

- VCL Premium Style Pack

- FireMonkey Premium Style Pack

Conclusiones

Bueno, esto es todo por un primer post sobre RAD Studio XE6Del mismo modo que empezamos este artículo, con esta versión se completa la estrategia multi-dispositivo de Embarcadero, con el desarrollo multiplataforma realmente nativo, proporcionando una alta productividad y rendimiento a través de Object Pascal o C++, todo ello integrado en un único entorno de desarrollo.

Lançamento Oficial do RAD Studio XE6!

April 15th, 2014 by Fernando Rizzato

O RAD Studio XE6 acaba de chegar. Trata-se da consolidação da estratégia multi-device da Embarcadero, já que nesta versão estamos trazendo o compilador C++ para Android. Com isso o RAD passa a compilar para Windows 32/64 bit, OS X, iOS e Android, tanto em Object Pascal quanto em C++. Desta maneira você pode escolher a linguagem que mais lhe agrada, as features são 100% as mesmas para ambas as linguagens em todas as plataformas suportadas.

Principais Novidades

São muitas as novidades desta versão, a primeira delas já citamos acima, o compilador C++ para Android. Vamos explorar um pouco mais tudo o que há de novo para VCL, FireMonkey Desktop e FireMonkey Mobile.

1.- VCL

A VCL recebeu significativas melhorias de performance e estabilidade, suporte otimizado para Windows 7 e 8.1 (lembre-se que você deve migrar suas aplicações que hoje executam sob Windows XP dada a descontinuidade do suporte por parte da MS), migração simplificada para FireDAC a partir de BDE e outros frameworks, além de novos componentes e funcionalidades como suporte "full" a estilos (incluindo menus e bordas), Taskbar Preview (Win7 e Win8), Sensores para GPS e Accelerometers para tablets Windows, App Tethering para VCL (vamos falar mais sobre ainda neste post) e Cloud Service (BaaS) Integration (mais detalhes abaixo também)!

2.- FireMonkey

O FireMonkey talvez seja a área onde o maior número de otimizações foram realizadas, temos novos componentes, um Grid totalmente remodelado, ListView com novas funcionalidades visuais, WebBrowser com novos métodos e carregamento local de arquivos, suporte oficial e template para Google Glass, e novos frameworks que vão tornar sua aplicação mobile extremamente profissional, como o suporte a In App Purchasing e Advertising, tanto para iOS quanto Android com o mesmo componente e código fonte (quem já desenvolveu isso em qualquer outro ambiente sabe o quanto é trabalhoso)!

3.- App Tethering para VCL e FireMonkey

O recurso de Tethering permite que duas aplicações, mesmo em plataformas distintas (VCL ou FireMonkey), rodando em Windows, OSX, iOS ou Android, troquem dados de maneira direta, sem uma aplicação servidora intermediária. Isto significa que você pode tomar partes de sua atual aplicação desktop em VCL (por exemplo) e levá-las para o mundo mobile, e permitir que estas partes executem ações e troquem dados diretamente. Não é incrível? Este recurso está disponível para aplicações em uma mesma rede (WiFi nesta versão).

4.- Cloud Service (BaaS) Integration

Tanto o Delphi XE6, quanto o C++ Builder XE6, trazem suporte completo para os chamados BaaS (Backend as a Service). Se este é um assunto novo para você, recomendo fortemente conhecer estes sites: http://www.kinvey.com/https://parse.com/. O BaaS apresenta uma plataforma comum para troca e armazenamento de dados, e estes são dois dos principais provedores do mercado. No futuro outros providers serão adicionados.

Com este suporte, você pode armazenar e recuperar dados diretamente destes provedores de serviços, sem a necessidade de construir seu próprio servidor ou mesmo uma camada intermediária, ou ainda configurar um banco de dados nas nuvens. Basta assinar o serviço! Este suporte também está disponível para VCL, portanto você pode enviar dados a partir de uma app mobile e depois processá-los em sua aplicação servidora ou desktop, apenas para citar uma das possibilidades.

Esta integração também proporciona suporte a "Push Notifications", o que abre um leque gigantesco de possibilidades para sua aplicação mobile.

5.- In app purchasing e advertising

Através deste framework (TBannerAd e TInAppPurchase) você pode adicionar facilmente, através de um único componente para Android e iOS, suporte a versões de demonstração e pagas de sua aplicação, diretamente integradas as lojas virtuais como AppStore ou GooglePlay. Também permite adicionar e vender publicidade diretamente em sua app, nas duas plataformas, de maneira unificada.

Observe na imagem abaixo o banner sendo exibido na aplicação Delphi.

Recursos Adicionais

Estas são as grandes adições ao produto na versão XE6, mas existe muito mais a explorar. Temos avanços significativos no DataSnap, temos o FireDAC integrado ao DataSnap com suporte total a JSON, tanto no lado "server" quanto "client", novidades no gerenciamento de TFields/TDataSet, e muito mais. Vamos explorar cada um dos recursos em posts futuros.

Nesta página você encontra alguns vídeos sobre o produto e suas principais novidades: http://www.embarcadero.com/products/rad-studio/product-demos.

Versão Trial, Licenças e Bônus Pack

Convido a todos a baixar o trial e experimentar, realmente trata-se de uma release extremamente estável e muito rica em features. Você pode obter a versão trial (ela é 100% funcional durante o período de avaliação) neste link:

https://downloads.embarcadero.com/free/rad-studio.

Em conjunto com o XE6 estamos lançando também uma nova modalidade de upgrade para usuários da última versão, chamado de Recharge Plan. Ou seja, se você é usuário da versão XE5, seu valor de upgrade será bastante reduzido, facilitando o acesso a ferramenta e permitindo-lhe estar sempre atualizado!

Durante o lançamento será oferecido um Bônus Pack, o qual é composto de:

- TMS Modern Windows UI Pack

- VCL Premium Style Pack

- FireMonkey Premium Style Pack

Conclusão

Bem, isto é tudo para um primeiro post sobre o RAD Studio XE6. Conforme iniciamos este artigo, esta release completa a estratégia multi-device da Embarcadero, com desenvolvimento realmente nativo multiplataforma, provendo alta produtividade e performance, através de Object Pascal ou C++, tudo integrado em um ambiente de desenvolvimento único.

Acessando classes Java e Objective-C com Delphi XE5

April 9th, 2014 by Fernando Rizzato

Olá pessoal,

Hoje vamos falar um pouco sobre acesso a classes nativas Java e Objective-C em Delphi XE5 para aplicações mobile.

Introdução

A ampla maioria das funcionalidades (visuais e não visuais) necessárias a uma aplicação mobile em Delphi ou C++ Builder estão representadas através de componentes e classes do FireMonkey e da RTL.

Porém, existem SDKs e bibliotecas específicas as quais não possuem sua representação no framework. Na maioria dos casos são na verdade classes e métodos que executam uma função específica daquele sistema operacional (iOS ou Android), ou ainda acessar um pacote de terceiros, como leitores de códigos de barra, apenas para citar um exemplo.

A boa notícia é que o Firemonkey é totalmente aberto para integrações, então vamos mostrar alguns exemplos do que pode ser feito.

Criando "Wrappers"

Os wrappers são a maneira de incorporar uma classe Java ou Objective-C em um projeto Delphi ou C++ Builder. Como referência, considere os links abaixo, um sobre Java e outro sobre iOS:

http://www.pclviewer.com/android/androidJNI.html

http://blogs.embarcadero.com/fernandorizzato/index.php/2013/06/26/codigo-de-barras-no-delphi-para-ios/

Alguns exemplos

Através de exemplos postados em blogs e portais, e também criando alguns outros, centralizamos em uma única app alguns wrappers que me chamaram a atenção, organizando seu código de maneira a tornar o entendimento o mais simples possível. O exemplo disponibilizado contempla:

- Abertura de URLs e execução de outras ações pré-definidas

- Status da rede, internet, 3G, etc.

- Envio de e-mail

- Leitura de código de barras (iOS e Android)

- Toast Message (exclusivo do Android)

Código Fonte

Vou postar abaixo, a título de ilustração, a unit responsável por obter o status de rede, porém você pode baixar o projeto completo neste link: http://cc.embarcadero.com/item/29811

unit NetworkState;
interface
uses
{$IFDEF IOS}
  Macapi.ObjectiveC, Macapi.CoreFoundation, Macapi.Dispatch,
  iOSApi.CocoaTypes, iOSApi.Foundation, Posix.SysSocket;
{$ENDIF}
{$IFDEF ANDROID}
System.SysUtils, FMX.Helpers.Android, Androidapi.JNIBridge,
  Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes;
{$ENDIF}
{$IFDEF IOS}
const
  libSystemConfiguration =
    '/System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration';
  kSCNetworkFlagsConnectionAutomatic = 8;
  kSCNetworkFlagsConnectionRequired = 4;
  kSCNetworkFlagsInterventionRequired = 16;
  kSCNetworkFlagsIsDirect = 131072;
  kSCNetworkFlagsIsLocalAddress = 65536;
  kSCNetworkFlagsReachable = 2;
  kSCNetworkFlagsTransientConnection = 1;
  kSCNetworkReachabilityFlagsConnectionAutomatic = 8;
  kSCNetworkReachabilityFlagsConnectionOnDemand = 32;
  kSCNetworkReachabilityFlagsConnectionOnTraffic = 8;
  kSCNetworkReachabilityFlagsConnectionRequired = 4;
  kSCNetworkReachabilityFlagsInterventionRequired = 16;
  kSCNetworkReachabilityFlagsIsDirect = 131072;
  kSCNetworkReachabilityFlagsIsLocalAddress = 65536;
  kSCNetworkReachabilityFlagsReachable = 2;
  kSCNetworkReachabilityFlagsTransientConnection = 1;
  kSCNetworkReachabilityFlagsIsWWAN = $40000;
{$ENDIF}
type
{$IFDEF IOS}
  SCNetworkReachabilityFlags = UInt32;
  SCNetworkReachabilityRef = ^__SCNetworkReachability;
  __SCNetworkReachability = record
  end;
  SCNetworkReachabilityContext = record
    version: CFIndex;
    info: Pointer;
    retain: function(info: Pointer): Pointer;
    release: procedure(info: Pointer);
    copyDescription: function(info: Pointer): CFStringRef;
  end;
  SCNetworkReachabilityContextPtr = ^SCNetworkReachabilityContext;
  SCNetworkReachabilityCallback = procedure(target: SCNetworkReachabilityRef;
    flags: SCNetworkReachabilityFlags; info: Pointer);
  TReachability = class;
  Reachability = interface(NSObject)
    ['{B405394F-57B1-4FF1-83D9-8FBFA38FFD7B}']
    function startNotifier: LongBool; cdecl;
    procedure stopNotifier; cdecl;
    function isReachable: LongBool; cdecl;
    function isReachableViaWWAN: LongBool; cdecl;
    function isReachableViaWiFi: LongBool; cdecl;
    function isConnectionRequired: LongBool; cdecl;
    function connectionRequired: LongBool; cdecl;
    function isConnectionOnDemand: LongBool; cdecl;
    function isInterventionRequired: LongBool; cdecl;
    function currentReachabilityStatus: NSInteger; cdecl;
    function reachabilityFlags: SCNetworkReachabilityFlags; cdecl;
    function currentReachabilityString: NSString; cdecl;
    function currentReachabilityFlags: NSString; cdecl;
  end;
  ReachabilityClass = interface(NSObjectClass)
    ['{39EC0490-2787-4BB9-95EA-77BB885BFD01}']
    function reachabilityWithHostname(hostname: NSString): Pointer; cdecl;
    function reachabilityForInternetConnection: Pointer; cdecl;
    function reachabilityWithAddress: Pointer; cdecl;
    function reachabilityForLocalWiFi: Pointer; cdecl;
  end;
  TReachability = class(TOCGenericImport<ReachabilityClass, Reachability>)
  end;
function SCNetworkReachabilityCreateWithAddress(allocator: CFAllocatorRef;
  address: psockaddr): SCNetworkReachabilityRef; cdecl;
  external libSystemConfiguration name _PU +
  'SCNetworkReachabilityCreateWithAddress';
function SCNetworkReachabilityCreateWithAddressPair(allocator: CFAllocatorRef;
  localAddress: psockaddr; remoteAddress: psockaddr): SCNetworkReachabilityRef;
  cdecl; external libSystemConfiguration name _PU +
  'SCNetworkReachabilityCreateWithAddressPair';
function SCNetworkReachabilityCreateWithName(allocator: CFAllocatorRef;
  nodename: PChar): SCNetworkReachabilityRef; cdecl;
  external libSystemConfiguration name _PU +
  'SCNetworkReachabilityCreateWithName';
function SCNetworkReachabilityGetTypeID: CFTypeID; cdecl;
  external libSystemConfiguration name _PU + 'SCNetworkReachabilityGetTypeID';
function SCNetworkReachabilityGetFlags(target: SCNetworkReachabilityRef;
  var flags: SCNetworkReachabilityFlags): Boolean; cdecl;
  external libSystemConfiguration name _PU + 'SCNetworkReachabilityGetFlags';
function SCNetworkReachabilitySetCallback(target: SCNetworkReachabilityRef;
  callout: SCNetworkReachabilityCallback;
  var context: SCNetworkReachabilityContext): Boolean; cdecl;
  external libSystemConfiguration name _PU + 'SCNetworkReachabilitySetCallback';
function SCNetworkReachabilityScheduleWithRunLoop
  (target: SCNetworkReachabilityRef; runLoop: CFRunLoopRef;
  runLoopMode: CFStringRef): Boolean; cdecl;
  external libSystemConfiguration name _PU +
  'SCNetworkReachabilityScheduleWithRunLoop';
function SCNetworkReachabilityUnscheduleFromRunLoop
  (target: SCNetworkReachabilityRef; runLoop: CFRunLoopRef;
  runLoopMode: CFStringRef): Boolean; cdecl;
  external libSystemConfiguration name _PU +
  'SCNetworkReachabilityUnscheduleFromRunLoop';
function SCNetworkReachabilitySetDispatchQueue(target: SCNetworkReachabilityRef;
  queue: dispatch_queue_t): Boolean; cdecl;
  external libSystemConfiguration name _PU +
  'SCNetworkReachabilitySetDispatchQueue';
{$IFDEF CPUARM}
function FakeLoader: Reachability; cdecl;
  external 'libReachability.a' name 'OBJC_CLASS_$_Reachability';
{$ENDIF}
{$ENDIF}
{$IFDEF ANDROID}
JConnectivityManager = interface;
JNetworkInfo = interface;
JNetworkInfoClass = interface(JObjectClass)
  ['{E92E86E8-0BDE-4D5F-B44E-3148BD63A14C}']
end;
[JavaSignature('android/net/NetworkInfo')]
JNetworkInfo = interface(JObject)['{6DF61A40-8D17-4E51-8EF2-32CDC81AC372}']
{ Methods }
function isAvailable: Boolean;
cdecl;
function isConnected: Boolean; cdecl;
  function isConnectedOrConnecting: Boolean; cdecl;
  end;
TJNetworkInfo = class(TJavaGenericImport<JNetworkInfoClass, JNetworkInfo>)
end;
JConnectivityManagerClass = interface(JObjectClass)
  ['{E03A261F-59A4-4236-8CDF-0068FC6C5FA1}']
{ Property methods }
function _GetTYPE_WIFI: Integer;
cdecl;
function _GetTYPE_WIMAX: Integer; cdecl;
  function _GetTYPE_MOBILE: Integer; cdecl;
  { Properties }
  property TYPE_WIFI: Integer read _GetTYPE_WIFI;
  property TYPE_WIMAX: Integer read _GetTYPE_WIMAX;
  property TYPE_MOBILE: Integer read _GetTYPE_MOBILE;
  end;
[JavaSignature('android/net/ConnectivityManager')]
JConnectivityManager = interface(JObject)
  ['{1C4C1873-65AE-4722-8EEF-36BBF423C9C5}']
{ Methods }
function getActiveNetworkInfo: JNetworkInfo;
cdecl;
function getNetworkInfo(networkType: Integer): JNetworkInfo; cdecl;
end;
TJConnectivityManager = class(TJavaGenericImport<JConnectivityManagerClass,
  JConnectivityManager>)
end;
{$ENDIF}
type
  TMobileNetworkStatus = class(TObject)
  public
    constructor Create;
    destructor Destroy; override;
    function isConnected: Boolean;
    function IsWiFiConnected: Boolean;
    function IsMobileConnected: Boolean;
  end;
implementation
{$IFDEF ANDROID}
function GetConnectivityManager: JConnectivityManager;
var
  ConnectivityServiceNative: JObject;
begin
  ConnectivityServiceNative := SharedActivityContext.getSystemService
    (TJContext.JavaClass.CONNECTIVITY_SERVICE);
  if not Assigned(ConnectivityServiceNative) then
    raise Exception.Create('Could not locate Connectivity Service');
  Result := TJConnectivityManager.Wrap
    ((ConnectivityServiceNative as ILocalObject).GetObjectID);
  if not Assigned(Result) then
    raise Exception.Create('Could not access Connectivity Manager');
end;
{$ENDIF}
{$IFDEF IOS}
function GetInternetReachability: Reachability;
begin
  Result := TReachability.Wrap
    (TReachability.OCClass.reachabilityForInternetConnection);
end;
{$ENDIF}
constructor TMobileNetworkStatus.Create;
begin
end;
destructor TMobileNetworkStatus.Destroy;
begin
  inherited;
end;
function TMobileNetworkStatus.isConnected: Boolean;
{$IFDEF ANDROID}
var
  ConnectivityManager: JConnectivityManager;
  ActiveNetwork: JNetworkInfo;
{$ENDIF}
begin
{$IFDEF IOS}
  Result := GetInternetReachability.isReachable;
{$ENDIF}
{$IFDEF ANDROID}
  ConnectivityManager := GetConnectivityManager;
  ActiveNetwork := ConnectivityManager.getActiveNetworkInfo;
  Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected;
{$ENDIF}
end;
function TMobileNetworkStatus.IsMobileConnected: Boolean;
{$IFDEF ANDROID}
var
  ConnectivityManager: JConnectivityManager;
  MobileNetwork: JNetworkInfo;
{$ENDIF}
begin
{$IFDEF IOS}
  Result := GetInternetReachability.isReachableViaWWAN;
{$ENDIF}
{$IFDEF ANDROID}
  ConnectivityManager := GetConnectivityManager;
  MobileNetwork := ConnectivityManager.getNetworkInfo
    (TJConnectivityManager.JavaClass.TYPE_MOBILE);
  Result := MobileNetwork.isConnected;
{$ENDIF}
end;
function TMobileNetworkStatus.IsWiFiConnected: Boolean;
{$IFDEF ANDROID}
var
  ConnectivityManager: JConnectivityManager;
  WiFiNetwork: JNetworkInfo;
{$ENDIF}
begin
{$IFDEF IOS}
  Result := GetInternetReachability.isReachableViaWiFi;
{$ENDIF}
{$IFDEF ANDROID}
  ConnectivityManager := GetConnectivityManager;
  WiFiNetwork := ConnectivityManager.getNetworkInfo
    (TJConnectivityManager.JavaClass.TYPE_WIFI);
  Result := WiFiNetwork.isConnected;
{$ENDIF}
end;
initialization
{$IFDEF IOS}
{$IFDEF CPUARM}
if False then
  FakeLoader;
{$ENDIF}
{$ENDIF}
end.

Notas Importantes

1- No exemplo que faz acesso ao status da rede/internet/3G, quando utilizado para iOS, faz-se necessário importar o framework "SystemConfiguration" no SDK Manager do Delphi ou C++ Builder. Detalhes de como fazê-lo estão neste post: http://delphi.radsoft.com.au/2013/10/adding-other-ios-frameworks-to-the-sdk-manager/

2- A leitura de código de barras para iOS faz uso da biblioteca ZBar, já inclusa neste projeto. Maiores detalhes e novas versões, aqui: http://zbar.sourceforge.net/

3- A leitura de código de barras para Android faz uso do aplicativo Zebra Crossing: https://play.google.com/store/apps/details?id=com.google.zxing.client.android

Outras fontes de pesquisa

Provavelmente você deve estar se perguntando o que mais é possível fazer, então vou listar abaixo algumas URLs interessantes que servirão como ponto de partida:

https://www.embarcadero.com/rad-in-action/programming-devices-and-gadgets

http://blogs.embarcadero.com/davidi/2014/01/09/43215

http://www.fmxexpress.com/tag/sdk/

É isso aí… abraços e até o próximo!

Traga suas aplicações para o Futuro!!!

February 28th, 2014 by Fernando Rizzato

Recentemente tivemos um Webinar sobre migração de aplicações Delphi para o XE5.

Caso o tenha perdido, já é possível acessar o replay através deste link:

http://forms.embarcadero.com/LA14Q1BRBDEApplicationstotheFuture

Também estão disponíveis os exemplos apresentados aqui:

http://cc.embarcadero.com/item/29777

Abraços e até o próximo!

Delphi XE5 Update 2 e C++Builder com suporte a iOS!!!

December 11th, 2013 by Fernando Rizzato

A segunda atualização para o RAD Studio XE5 foi liberada ontem, incluindo uma atualização significativa no lado Delphi, e também suporte ao desenvolvimento para iOS no C++ Builder.

O segundo update do RAD Studio XE5 foi liberado ontem, incluindo uma atualização significativa no Delphi e também apoio ao desenvolvimento iOS para C++ Builder. O update 2 é livre para usuários XE5 registrados, e agora os desenvolvedores de C++ Builder podem começar a utilizar o suporte para iOS imediatamente.

Desenvolvedores Delphi vão ter uma atualização com muitas correções e algumas novidades que iremos detalhar nos próximos artigos, especialmente a compilação e debug utilizando o Mobile Preview!

Informações e links para download:

- Download do Update 2: http://cc.embarcadero.com/item/29662. Também existe a opção de instalação completa através da ISO.

- Detalhes deste Release: http://goo.gl/8enb5a

- Lista de todas as correções: http://edn.embarcadero.com/article/43522

- Novas features (leitura obrigatória!): http://goo.gl/4D35gq

-  C++ for iOS: http://goo.gl/pb857h

Update 1 do Delphi XE5, C++Builder XE5 e RAD Studio XE5 disponível!

October 28th, 2013 by Fernando Rizzato

O Update 1 do Delphi XE5, C++Builder XE5 e RAD Studio XE5 está disponível para download.

Links para download

Você pode baixar apenas o patch de atualização ou um novo ISO completo:

  • Update 1 installer (atualiza uma instalação existente do Delphi XE5, C++Builder XE5 ou RAD Studio XE5)
  • ISO with Update 1 (instalador completo do Delphi XE5 e C++Builder XE5, já incluindo o Update 1)

Lista de correções

Você pode encontrar a lista das correções neste link Fix list for Update 1 for RAD Studio, Delphi and C++Builder XE5 (esta lista refere-se aos erros reportados pelos usuários)

Notas desta release

Todos os demais detalhes referente a esta atualização você pode encontrar aqui: Release notes and install instructions for Update 1

Embarcadero Conference 2013!

October 14th, 2013 by Fernando Rizzato

Olá pessoal, estamos na reta final das inscrições para a Embarcadero Conference deste ano, e gostaria de ter certeza de que você não vai perder esta oportunidade!

Com o lançamento do Delphi XE5 há uma grande expectativa para este evento. É claro que vamos falar muito sobre Android, iOS, Smartphones, Tablets e tudo mais relacionado a desenvolvimento mobile. Mas também teremos tudo sobre FireDAC (do básico ao avançado, incluindo migração de BDE) e DataSnap (com dicas para obter uma performance superior).

Neste link você tem a grade completa do evento: http://goo.gl/zOyRjs

Como você pode ver teremos palestrantes de renome nacional, muitos deles MVPs da Embarcadero, e também a ilustre presença de JT (RAD Studio Product Manager - http://goo.gl/HNvRA1) and Jim McKeeth (Developer Relations Lead Evangelist - http://delphi.org/), e com eles todas as novidades sobre Delphi, C++ Builder, HTML5 Builder, Embarcadero, Roadmap, Novos Produtos, etc.

Então é isso, venha para nossa conferência, encontre grandes profissionais, fale sobre o que você está fazendo, tire suas dúvidas, fortaleça seu networking!

Abraços e nos vemos em 31 de Outubro ao vivo!

Novos Recursos do RAD Studio XE5

September 13th, 2013 by Fernando Rizzato

Ok, acredito que a esta altura você já saiba que o Delphi XE5 (com suporte para Android) encontra-se disponível para download. Neste artigo vamos destacar as inovações mais relevantes desta versão - provavelmente a mais esperada dos últimos anos!

Download e Instalação

Iniciando pelo download do produto, se você pretende baixar um trial de avaliação, oferecemos três alternativas:

1- Instalação sob demanda (você baixa o setup e o restante é baixando enquanto você instala o produto): http://goo.gl/WXeH8c;

2- Download do ISO contendo o RAD Studio XE5 completo (Delphi, C++ Builder, HTML5 Builder): http://goo.gl/GkDDsc;

3- Instant Trial, o mais interessante de todos, onde não é necessário instalar o produto. O client do AppWave será configurado em sua máquina e a imagem do produto baixada via streaming e executada quando pronta. A partir da segunda execução o produto estará em sua tela em segundos! http://goo.gl/ZxliqQ;

obs: se você é um usuário com manutenção ativa, provavelmente já recebeu um e-mail com todos os detalhes e links para download.

Novos Recursos

Como ponto de partida, recomendo a documentação on line do produto neste endereço http://goo.gl/AMW0pu.

Para cada versão existe uma página com tudo o que há de novo em detalhes: http://goo.gl/kgf7dJ.

Vamos a lista principal:

- O suporte a Android configura-se na novidade mais importante desta versão. Neste link você tem tudo o que precisa para iniciar com ambos (iOS e Android): http://goo.gl/UZ3Lt6;

- Suporte para iOS 7 (a ser liberado logo após o anúncio oficial da Apple nos próximos dias);

- Novo REST Client Library para acesso (muito) facilitado a serviços REST;

- REST Debugger para explorar serviços a serem consumidos;

- FireDAC agora integrado ao instalador: ocorreram alguns refactorings de classe com relação a versão que acompanhava o XE3 e XE4, porém a documentação traz um howto de como migrar, com scripts e tudo: http://goo.gl/x2GO6A;

- MacInCloud integrado na IDE: http://goo.gl/zeL68i;

- Novos forms designers para Android e também dispositivos customizáveis: http://goo.gl/B4rOGM;

- IDE Insight remodelado: http://goo.gl/BvwggK;

- Novos controles para Mobile para Notification, Search automático no TListView, Swipe to Delete no TListBox e TListView, e mais: http://goo.gl/ta6xSi;

Plataformas

Portanto, a partir de agora suportamos - de maneira NATIVA e otimizada - as seguintes plataformas:

* 32-bit Windows
* 64-bit Windows
* 32-bit OS X
* iOS Simulator (Intel)
* iOS (ARM)
* Android (ARM)

Especificamente para Android (a bola da vez) estas são as versões suportadas:

* JellyBean (Android 4.1.x, 4.2.x, 4.3.x)
* Ice Cream Sandwich (Android 4.0.3 and 4.0.4)
* Gingerbread (Android 2.3.3 - 2.3.7)

Você pode observar os detalhes para todas as plataformas neste link: http://goo.gl/Gwme01.

Artigos Adicionais

Temos uma avalanche de artigos partindo de todos os MVPs e nosso pessoal de R&D por todo o mundo, vou relacionar abaixo alguns interessantes:

Recados Importantes!

=> Convite para o Webinar sobre Android e iOS com Delphi no próximo dia 17: http://embt.co/1e71mlY

=> Inscrições abertas para o Delphi Conference, venha conhecer e falar com os maiores especialistas em Delphi e C++ Builder da atualidade, incluindo presenças internacionais: http://embarcaderoconference.com.br/

É isso, no próximo artigo pretendo fazer um FAQ sobre diversas perguntas que estamos recebendo por mídias sociais e também e-mails. Abraços, bons projetos, bons negócios, e até o próximo!


Bad Behavior has blocked 0 access attempts in the last 7 days.

Close