Introduction to PhoneGap

Your end users expect mobile access to enterprise resources now. Unfortunately, our traditional remote access methods do not lend themselves easily to mobile form factors. So, we are left with the choice to use 3rd party apps, “mobilize” existing apps, or build our own. This article will address one of the players aimed at helping you build your own mobile apps with less effort.

Mobile Enterprise Apps – Virtualize, Buy, or Build?

When it comes to mobile enterprise applications, you basically have 3 choices:

  1. Virtualize what you have (via Citrix HDX, RDP, VMware PCoIP, etc.)
  2. Buy something from a 3rd party
  3. Build something yourself

There are use cases for each of these, but I’m going to focus on one way to build something yourself.  In this case, I’m going to cover PhoneGap.


What is PhoneGap?

PhoneGap is a framework for building mobile applications using only HTML, CSS, and Javascript.  This removes the complexity of using multiple programming languages for the various mobile platforms out there.  The PhoneGap framework gives developers access to almost all of the device’s features such as GPS, Camera, Accelerometer, Notifications, etc. via the included Javascript library.

The easiest way I think of it is like this – PhoneGap is a specialized web browser without a user interface.  There is a specialized web browser for each native platform – iOS, Android, Windows Phone, Blackberrry, etc.  This allows you to reuse your code across platforms; however, this does not allow you to use one IDE for all platforms.  Each PhoneGap app you build gets complied into this chrome-less browser and delivered just like any other native application.  The end result is an individual .ipa (for iOS), .apk (for Android), .xap (for Windows Phone), etc..  Therefore, you still have the ability to use all your EMM and MAM tools you may already have to manage these apps. Each time you build a new PhoneGap app, you get a new .ipa, .apk, .xap, etc. that includes the chrome-less browser and your HTML, CSS, JavaScript, etc.


What’s needed to develop with PhoneGap?

You still need to use the various platform IDE’s to develop an app with PhoneGap.  For instance, I developed a simple app for iPhone and Android.  For iPhone, I used Xcode to create and compile the PhoneGap application.  For Android, I used Eclipse to create and compile the application.  I had to set up each IDE to use the PhoneGap framework, but that is all documented pretty well.

I started with Xcode and got things working liked I wanted for iPhone.  Then, I literally just copied and pasted my HTML, CSS, and images over to Eclipse and the Android app just worked.  My app is very simple, but here are the results:

What is the catch?

PhoneGap is free.  Even though Adobe acquired PhoneGap in 2011, the PhoneGap code was contributed to the Apache Software Foundation (ASF) under the name Apache Cordova and graduated to top-level project status in October 2012.

I have noticed that some PhoneGap apps seem to run a little sluggish when dealing with animations as compared to traditional apps.  I’m assuming this is due to the chrome-less browser nature of PhoneGap applications.  However, when dealing with enterprise applications, I do not see this as being a big issue.

The other issue I see for enterprises (and this is not unique to PhoneGap) is data access.  Your application is really just another front end for data.  You have to provide enterprise data access somehow.  This can be done via VPN, or using local device storage and sync strategies.  Like I said, this isn’t unique to PhoneGap, but it is something to think about.


PhoneGap lowers the bar of entry into “native” device applications because there are a lot of HTML, CSS, JavaScript developers out there.  Oftentimes, enterprises may already employ people with expertise in these areas.  If not, it is more budget-friendly to hire a Web developer as opposed to developers that specialize in Objective-C and/or Java and/or .Net languages.  You get the benefits of maintaining one code base across multiple devices.  All of your EMM/MAM products should work with PhoneGap applications.

On the contrast, you are not developing “real native” code and devices may come out with features faster than the PhoneGap framework can accommodate.  You still have a data problem.  If your app requires a lot of fancy animated graphics, then PhoneGap may or may not suit your needs.

So, there you go.  If you have experience with PhoneGap or just something to add, feel free to leave a comment below.


Citrix Synergy 2013 Live Blog

Citrix Synergy is in Anaheim, California this year. With the recent release of Excalibur, it will be interesting to see what is revealed during the keynote. I’ll be live-blogging the keynote this year. Check it out here or on Twitter @JasonConger.

It is time for Citrix Synergy, and I will be live-blogging the keynote. With the recent release of Excalibur, I expect the keynote focus to be a lot around capabilities and features. I also expect to see some more around mobility, networking, and cloud. Be sure to stay tuned here and/or follow me on Twitter.

Continue reading “Citrix Synergy 2013 Live Blog”

Citrix Synergy Barcelona 2012 Super Session (day 2) Live Blog

It is day 2 of Citrix Synergy Barcelona and it is time for the Super Session (a.k.a. day 2 keynote). Keep up on the action with this live blog.

Yesterday, we heard a lot of announcements from Citrix.  Today is the super session and I’ll be live blogging again here.

Continue reading “Citrix Synergy Barcelona 2012 Super Session (day 2) Live Blog”

Citrix Synergy Barcelona 2012 Keynote Live Blog

Citrix Synergy has returned to Barcelona, Spain. That means that I will be live blogging the keynote again this year.

Citrix Synergy has returned to Barcelona, Spain.  That means that I will be live blogging the keynote again this year.  Last year in Barcelona and earlier this year in San Francisco, Citrix talked a lot about public/private/personal cloud.  I am looking forward to see som fruition out of their vision.  I also fully expect Mark Templeton to have “one more thing” at the end of the keynote as well.  Stay tuned… Continue reading “Citrix Synergy Barcelona 2012 Keynote Live Blog”

Virtual Desktops and Applications are not as important as you think

We spend a lot of time optimizing how we deliver desktops and applications. But, the future will trivialize these things as the focus shifts the focus to data and the data moves to the cloud. It is happening now in the consumer market and the trend will infiltrate the enterprise as BYOD continues to become more prevalent.


We spend a lot of time optimizing how we deliver desktops and applications. But, the future will trivialize these things as the focus shifts the focus to data and the data moves to the cloud.  It is happening now in the consumer market and the trend will infiltrate the enterprise as BYOD continues to become more prevalent.

Applications are useless without data

Take a word processing application for example. Without data, the word processing application is really stupid. As soon as you start typing a document, you are creating data.  The application is just a mechanism for creating or consuming data.  And, in a lot of cases, this data is interchangeable between applications.  In other words, it is the data that is important – not the application.

Applications are just a data access layer

I like programming and a staple of any good programming language is object orientation. One of my favorite design patterns is called a façade pattern. The definition of façade is “the face of” something. So a façade in this case is the face of an object. The “face” is easily switched out, but the underlying objects remain the same (loose coupling).

Let’s relate this to applications. Applications are the façade to the data. Let’s take our word processing example again. I personally use Microsoft Word (for Windows and Mac), Google Docs, and iWork Pages. All these programs access the same data and they are easily switched out, so they are the face of the data. Dropbox (and more recently GDrive) keep my data where I need it, so those things are completely different facades to the exact same data. I can get my data on a fat client, web, mobile, offline, etc.

Consumerization and Cloud is driving the trend

Mobile devices have exploded and BYOD is gaining popularity. These 2 trends are directly associated with user demand – not IT demand. Brian Madden put it well on – “The new reality: The IT department has to compete against every random app & website out there!”

Let’s look at another example that is more consumer related.  When I purchase an online book from Amazon, I’m paying for the data (book).  I then have a choice of interchangeable applications that can be used as the face of the data – many versions of the Kindle, multiple iOS applications, multiple Android applications, multiple Windows applications, etc.)  The application is much less important than the data.  Consumers are getting used to freedom of choice and everything “just working.”  The same will creep into the enterprise and IT will need to cope.

So now what?

Windows applications aren’t going anywhere anytime soon, so we’ll still be delivering those for quite some time. However, I see where the application is less important and we’ll be thinking more about data security, offline data, application and platform choice (Windows, Mac, Linux, mobile, web, etc.), data integrity, etc.  Or, perhaps I’m way off here.  What do you think?

Further Reading

VDI, ok? What’s next? Stephane Thirion

The VDI Party is Over. Benny Tritsch

Citrix Synergy 2012 Live Blog

It’s time for Citrix Synergy 2012. I’ll be live blogging the keynote again this year. I’m looking forward to hearing about some of the Cloud/multi-tenant announcements and mobility improvements.

It’s time for Citrix Synergy 2012. I’ll be live blogging the keynote here. I’m looking forward to hearing about some of the Cloud/multi-tenant announcements, mobility improvements, and desktop management. Continue reading “Citrix Synergy 2012 Live Blog”

Smooth Roaming + Responsive Design

In this post, we look at adding session reconnection event handling to our responsive design prototype using the Citrix XenApp Mobile Application SDK. Be sure to check out the video of the prototype.

In a previous article, we looked at using responsive design with enterprise applications by utilizing the Citrix XenApp Mobile Application SDK. Jonathan Chin left an interesting comment about hooking up an event handler to apply the responsive design to a reconnection event.  So, I decided to investigate doing just that and, as it turns out, it isn’t that hard.  

In the previous version, the responsive design code only kicked in on session initiation (i.e. logon) – meaning if you started a session on a fat client and then reconnected to the session on a mobile device, then the fat client display would show up on the mobile device. We don’t want that. So, by catching the reconnection event, we can re-style the app at any point (session initiation or reconnection). Start the application on a fat client and then reconnect via a mobile device and the mobile style will kick in (and vice versa).

Here’s the bit of code to take care of it (if you don’t care about the code and just want to skip to the download, just follow this link):


private static extern bool WTSRegisterSessionNotification(IntPtr hWnd, [MarshalAs(UnmanagedType.U4)]int dwFlags);

private static extern bool WTSUnRegisterSessionNotification(IntPtr hWnd);

private const int NOTIFY_FOR_THIS_SESSION = 0;
private const int WM_WTSSESSION_CHANGE = 0x2b1;
private const int WTS_REMOTE_CONNECT = 0x3;
private const int WTS_REMOTE_DISCONNECT = 0x4;
private bool registered = false;

protected override void OnHandleDestroyed(EventArgs e)
    // unregister the handle before it gets destroyed


protected override void OnHandleCreated(EventArgs e)
    registered = WTSRegisterSessionNotification(Handle, NOTIFY_FOR_THIS_SESSION);

protected override void WndProc(ref Message m)
    if (m.Msg == WM_WTSSESSION_CHANGE)
        if (m.WParam.ToInt32() == WTS_REMOTE_CONNECT)
            // The session is in the reconnect state, so style the app for the new session

        if (m.WParam.ToInt32() == WTS_REMOTE_DISCONNECT)
            // The session is in the disconnect state, so close the CMP if it is open
            if (this.cmp != null && this.cmp.IsChannelOpen())
                catch {}
    base.WndProc(ref m);


Try It Out Yourself

Want to try it out yourself?  I have made the program and the source available so you can beat it up and come up with some more ideas.  You can download it here.


Responsive Design for Enterprise Applications

Responsive Design that web developers use can now be applied to Enterprise Applications thanks to the Citrix Mobile SDK. This post will give you a glimpse of what is possible to get your wheels turning.

Have you heard of Responsive Web Design?  The term was coined by Ethan Marcotte in his article on A List Apart.  The gist of the idea is that web pages can be designed to adapt or respond to the entity that is viewing it.  The Boston Globe’s website is a good example of responsive design.  You can see by the screenshots below, that given enough screen real estate, the website has a 3 column layout.  But, as the screen width starts to shrink, the layout is adjusted to 2 columns and then 1 column.  Also, the navigation changes to better suit the layout and images are adjusted or hidden.


Applying Responsive Design to Enterprise Applications

Just like web pages, enterprise applications are starting to get viewed on a myriad of devices.  What if we could take some of the same techniques web designers are using and apply that to enterprise applications?  Well, as it turns out, we can with the help of the Citrix XenApp 6.5 Mobile Application SDK.  By using the Mobile Application SDK, enterprise applications that are hosted on a XenApp 6.5 server can respond to the type of device using the application.

Responsive Application Example

As an example, I wrote an application that takes data from EdgeSight about the types of Citrix clients used in an environment.  The application displays this information in a chart as well as a table.  I then published this application from AppCenter on a XenApp 6.5 server and launched it using a fat client.  You will notice that both the chart and the data table are shown as well as a menu strip at the top to select a chart type.


Now, if you launch the exact same application from the exact same server using a mobile device, some very interesting things happen:


  1. Only the chart is shown initially.  If you rotate the device, only the data table is shown.
  2. The application’s window chrome is gone.
  3. The width and the height of the application were changed to the width and height of the device.
  4. Tapping the chart image brings up the device’s native picker.
  5. Changing the orientation of the device changes the display.

Check out this short video for a demo:


Try It Out Yourself

Want to try it out yourself?  I have made the program and the source available so you can beat it up and come up with some more ideas.  You can download it here.


Installing and Using the Citrix XenApp 6.5 Mobile Application SDK

In this post, we will go over the installation steps of the Citrix XenApp 6.5 Mobile Application SDK, explorer what is added to the XenApp 6.5 server during installation, and compile one of the samples given in the SDK.

Now that we have setting up an Android emulator out of the way, let’s take a look at installing the Citrix XenApp 6.5 Mobile Application SDK and what the install does to a XenApp 6.5 server.

There are 2 parts that you need in order to develop applications that utilize mobile capabilities on a XenApp 6.5 server:

  1. The XenApp 6.5 Mobility Pack – this is the part that goes on the XenApp 6.5 server.
  2. The Citrix XenApp 6.5 Mobile Application SDK – this is the part you use to develop mobile applications.


XenApp 6.5 Mobility Pack

When you install the Mobility Pack, 2 new services are added to your XenApp server:

  1. Citrix Location and Sensor Virtual Channel Service – this service enables a server side application to leverage Location and Sensor capabilities.
  2. Citrix Mobile Receiver Virtual Channel Service – this service enables a server side application to use mobile device capabilities.

These 2 virtual channels are kept separate for security reasons.  Maybe you want to have mobile device capabilities available, but you cannot enable GPS features due to security compliance.  Location services are disabled on the Citrix Receiver by default. The way to enable the location capabilities is via Citrix policies.  In order to use these policies, you will need to install the Citrix Group Policy Client-Side Extensions.  These extensions are part of the XenApp Mobility Pack .zip file.

This policy is located under ICA\Client Sensors\Location. Notice that by default, location is disabled.


Citrix XenApp 6.5 Mobile Application SDK

So, the requirements for the Citrix XenApp 6.5 Mobile Application SDK state that you need Windows 7 64 bit (and the MSI is even named XenApp65MobileApplicationSdk64), but it installs to ..\Program Files (x86)\Citrix\MobilitySDK\.  I tried installing the SDK on a Windows 7 32 bit system as well and it worked, so I’m not sure if something absolutely will not work on 32 bit.

I’m using Visual Studio for the examples.  It appears that Visual Studio Express (free) will work as well, but I haven’t tested that myself.

Anyway, the documentation that comes with the SDK is pretty comprehensive so I’m not going to rehash it here.  Since I will be showing you some of the examples using .Net, I do want to point out that you will need to run one of the following commands on your development machine in order for things to work:

Regsvr32 cmpcom.dll
Regsvr32 cmpcom64.dll

Notice that there is a 32 bit or a 64 bit DLL register. So again, not sure why Windows 7 64bit is a requirement for development. Anyway, make sure you run the appropriate command above as administrator, otherwise you may receive an error stating “The module was loaded but the call to DllRegisterServer failed with error code 0x80070005” (which is a permissions error).

Compiling Examples

The final part of this article will focus on compiling and using the examples that come with the SDK.  The one I’m going to point out here is the picker example.  This example uses the native device’s UI to display a list of options.  The example is actually a console application that has no graphics, so it is actually using the local device’s display mechanisms rather than trying to do some trickery on the XenApp server side.  So, here we go…

  1. Browse to \Program Files (x86)\Citrix\MobilitySDK\samples\native\showpicker
  2. Double click on showpicker.sln to open the solution in Visual Studio
  3. Build the solution by pressing F6
  4. This will create an executable in \Program Files (x86)\Citrix\MobilitySDK\samples\native\Win32\Debug\showpicker.exe
  5. Copy this showpicker.exe to your XenApp 6.5 server (I copied mine to \Program Files (x86)\Mobility\picker\showpicker.exe)
  6. Publish the application via Citrix AppCenter
  7. Launch the published application using an Android device (or emulator) with the latest Citrix Receiver installed.

NOTE: You may receive an error message that states “The program can’t start because MSVCR100D.dll is missing from your computer…”  Here’s why – the solution was built in debug mode.  Thus, debug DLL’s (notice the “D” in the DLL name) need to be on the XenApp 6.5 server.  Here is what you can do:


  • From: \Program Files (x86)\Microsoft Visual Studio 10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcr100d.dll on your development machine
  • To: \Windows\SysWOW64\msvcr100d.dll on your XenApp 6.5 server
You could technically build the solution in Release mode instead of Debug mode and be okay, but to perform remote debugging, you will want to have the debug DLL on your remote machine.  Speaking of debugging, here are 2 great write-ups on how to debug the mobile applications:


The Result

Here is what the end result looks like.

Once you pick one of the colors, the console application will give you feedback on the chosen item.  When the appropriate receiver is available for iOS, then the native iOS selector would be shown with no code changes on the developer’s part.  That is pretty cool!

In the next article on this topic, I will show you how to use mobile device orientation to change what is displayed to an end user.  The example will include data and graphics.  Stay tuned…