Push Notifications for iOS

May 2nd, 2013 by Anders Ohlsson

Luis Felipe González Torres (our MVP in Venezuela) published an example of a Delphi XE4 APN server and a Delphi XE4 APN client!!!

The source code is provided. The video is in Spanish, but Luis Felipe is paging through the source code in a very nice manner, so it’s easy to follow along.

Super cool, Luis Felipe! :)

Enjoy!

Opening a URL in Safari on iOS

May 1st, 2013 by Anders Ohlsson

Consider this code. It works. And I was just about to answer a commenter with it… But my brain HURTS reading it, even more writing it, and much more recommending that someone else copies it… ;)

function SharedApplication: UIApplication;
begin
  Result := TUIApplication.Wrap(TUIApplication.OCClass.sharedApplication);
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  SharedApplication.openURL(TNSURL.Wrap(TNSURL.OCClass.URLWithString(NSSTR(PChar(String('http://www.embarcadero.com'))))));
end;

Luckily, David Clegg has blogged about his included sample code in XE4.

Version Two of the code looks like this:

uses
  Apple.Utils;

procedure TForm2.Button1Click(Sender: TObject);
begin
  SharedApplication.openURL(StringToNSURL('http://www.embarcadero.com'));
end;

But, Cleggy even has a helper for that, so here you go. Final implementation:

uses
  Apple.Utils;

procedure TForm2.Button1Click(Sender: TObject);
begin
  OpenURL('http://www.embarcadero.com');
end;

Handling iOS application events

May 1st, 2013 by Anders Ohlsson

One thing that I’ve wanted to try for quite a while is doing something when an app gets put in the background (user hits the home button for example). An example of this is a game that my kids play - when they leave the game, the character yells out something like "Don’t leave!", "Come back!", "Hope you enjoy your day without me!" and other random fun stuff.

Sometimes it also schedules a notification to fire at a later date. Let’s say the kids forget to play the game for a few days… All of a sudden out of nowhere the iPad will scream at you "Come back and play NOW! I’m bored!"

How is this done? Let’s not waste anymore time… Here is the complete form source code for the simplest case - scheduling a notification upon entering the background.

unit Unit1;

interface

uses
  System.SysUtils, System.Classes, FMX.Forms, FMX.Platform;

type

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function AppEvent(AAppEvent: TApplicationEvent; AContext: TObject) : Boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

uses
  FMX.Notification;

procedure SendNotification;
var
  NotificationService: IFMXNotificationCenter;
  Notification: TNotification;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXNotificationCenter) then
    NotificationService := TPlatformServices.Current.GetPlatformService(IFMXNotificationCenter) as IFMXNotificationCenter;

  if Assigned(NotificationService) then begin
    Notification := TNotification.Create;
    try
      Notification.Name := 'MyLocalNotification';
      Notification.AlertBody := 'Hello from the Delphi XE4 iOS app that you used 5 seconds ago!';
      Notification.FireDate := Now + EncodeTime(0,0,5,0);
      NotificationService.ScheduleNotification(Notification);
    finally
      Notification.Free;
    end;
  end
end;

function TForm1.AppEvent(AAppEvent: TApplicationEvent; AContext: TObject) : Boolean;
begin
  if AAppEvent = TApplicationEvent.aeEnteredBackground then
    SendNotification;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  AppEventSvc: IFMXApplicationEventService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(AppEventSvc)) then
    AppEventSvc.SetApplicationEventHandler(AppEvent);
end;

end.

The main things that we do in this code are:

1. Hook up the Application Event Handler on OnCreate of our form
2. Schedule a notication if the event received is aeEnteredBackground

The rest is handled by iOS for us.

Special thanks to Darren Kosinski who shared one of his test examples on how to handle iOS application events!

An example of using an iOS API that we don’t wrap

April 30th, 2013 by Anders Ohlsson

The following very short snippet shows you how to set/clear the network activity indicator on iOS.

uses
  iOSapi.UIKit;

function SharedApplication: UIApplication;
begin
  Result := TUIApplication.Wrap(TUIApplication.OCClass.sharedApplication);
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  SharedApplication.setNetworkActivityIndicatorVisible(not SharedApplication.isNetworkActivityIndicatorVisible);
end;

RAD Studio XE4 is available!

April 22nd, 2013 by Anders Ohlsson

Check out the trial here - http://www.embarcadero.com/products/rad-studio/downloads

Learn all about XE4 at the RAD Studio XE4 Launch Webinar - Wednesday, April 24

  • 6:00AM PDT / 9:00AM EDT / 13:00 UTC
  • 11:00AM PDT / 2:00PM EDT / 18:00 UTC
  • 5:00PM PDT / 8:00PM EDT / 11:00AM 25-Apr Australia EDT

During the webinar you will learn:

  • How multi-device app development with RAD Studio can expand the capabilities and efficiency of your development team
  • How to use RAD Studio XE4 to create true native Delphi applications for iOS devices
  • Accessing and integrating iOS sensors and services
  • Working with local databases and enterprise data
  • Pricing and availability of RAD Studio XE4

Register for the webinar at:

http://forms.embarcadero.com/forms/AMUSCA1304RADStudioLaunchWeb4-24

IBLite - embeddable SQL database for iOS

IBLite is a freely deployable, embeddable database for iOS that runs in a stand-alone environment and enables deployment of apps which directly utilize the InterBase engine. IBLite is available exclusively with RAD Studio XE4 (all editions) and Delphi XE4 (Professional with Mobile and above).

Start Building Now

Take the next step in the evolution of multi-device, true native code, on-device prototyping app development with RAD Studio XE4. Start building now.

Enjoy!

Delphi for iOS and Apple Instruments

March 28th, 2013 by Anders Ohlsson

Daniel Magin has created a great intro to using Instruments with a Delphi for iOS app.

Awesome, Daniel!

iOS Preview "Early Bird" Special – Save 20% on Delphi Enterprise, RAD Studio Professional/Enterprise with Maintenance

March 27th, 2013 by Anders Ohlsson

Get Delphi XE3 or RAD Studio XE3 today with the iOS Pre-Release Beta, and save 20% when purchased with 1-year Maintenance. Click here to buy from the Embarcadero store with the 20% discount or click below for other options. Offer available for ESD individual user licenses for Delphi XE3 Enterprise, RAD Studio XE3 Professional and RAD Studio XE3 Enterprise only.

What you get:

  • XE3 Multi-Device development with Windows/Mac and 64-bit
  • iOS Pre-release Beta to start learning mobile development today with Delphi (no AppStore deployment during beta)
  • All updates and major releases over the next 12 months. See the 2013 Roadmap for what we have planned.

Buy Online Buy from a Partner Contact Sales

iOS TableView is ListBox in Delphi for iOS

March 25th, 2013 by Anders Ohlsson

This blog post was inspired by a couple of emails that I received in response to my Analog Clock update post.

Keep in mind that this blog post is based on a product that is currently in beta, and that final details may very well change. :)

First, a screen shot:

Going from top to bottom, you will notice:

* Toolbar that hosts a label and a done-button. The specific styling is done using style options for the label and the button.

* ListBox - here’s where the real fun starts.

First of all, the listbox is grouped and transparent to give it the look and feel of individual option groups with a transparent background, and all the nice things like rounded corners and such.

In the "Name" section you’ll notice items with a bitmap - I just "borrowed" some - I didn’t spend time on making them transparent background and all that. My first name is in a default looking TEdit. My last name is in a TEdit with a transparent style. Finally, I’ve indicated that I will send a Christmas card to myself using a TSwitch.

Under "Contact information" you’ll notice a couple of more options for the individual items in a listbox - "check", "more" and "detail".

Enjoy!

Anders’ Analog Clock app ported to Delphi for iOS

March 22nd, 2013 by Anders Ohlsson

My FireMonkey Clock app has been ported using a beta version of Delphi for iOS.

Main tab

Above you can see a screen shot of the app as it starts up. By default it uses "normal drive" - the second hand moves once per second and the minute hand moves once per minute.

The app is a Universal app (supports iPhone and iPad). The main clock screen uses a TScaledLayout to ensure proper scaling down to the iPhone (the app was designed for the iPad).

If you hit the Info button it will take you to the setup tab, where you can select "Flame" (or FireMonkey second hand) as well as "Smooth drive" - the second and minute hands move smoothly.

Setup tab

The setup screen uses a combination of items that scale and items that don’t scale. For instance, the toolbar, the back button, and the listbox with its items are not supposed to scale, but still be aligned properly. The clock faces, however, do scale inside of a TScaledLayout.

FireMonkey second hand

Above you can see what the FireMonkey second hand looks like.

Below is a screen shot of my Structure Pane where you can see how I designed the app:

Structure View

I also wanted to mention performance. The previous version of the app was created in XE2 where I got about 2-3 frames per second in smooth mode - not very smooth. However, this version created with our upcoming product gets a blazing 60 frames per second on the iPad 3 using iOS 6.1.3 and almost the same fps rate on iPhone 4 (iOS 5.1) and iPad 2 (iOS 6.1) at about 55+ frames per second.

Enjoy!

PS: The screen shots above are actually from the *next* update I will be pushing soon… The current one looks almost the same, except for a few changes in layout.

Webinar: C++ in the Multi-Device Enterprise

March 20th, 2013 by Anders Ohlsson

Across social media, industry articles, and corporate polices, we hear more terms like “BYOD” (Bring Your Own Device).  Enterprises these days are seldom just Windows or Mac, onsite or cloud.  Multiple devices are the new reality for software developers, but how can you keep up with it all?

Join us for “C++ in the Multi-Device Enterprise”, a live webinar on Tuesday, March 26th. This webinar showcases how C++ can help satisfy the Enterprise’s need to support multiple devices on desktops, servers, web, mobile and multi-tiers in their infrastructure.

Sign Up Now!


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

Close