Rethinking iOS Apps in the Enterprise
Enterprises are deploying more and more business critical applications on their networks, making it very important that these apps have higher priority for performance. With the recent partnership announcements between Cisco and Apple, application developers now have the power to enable “Quality of Service” (QoS) tags right from within their application. As an app developer, you can now take charge of making your application standout in the enterprise.
Getting to know Fast lane validation
The chances that your enterprise iOS app runs on a Cisco Wi-Fi Network are very high. Network bandwidth is a precious resource in any enterprise environment, and now iOS 10+ ensures that your business-centric apps will receive priority service compared to non-business critical apps when connected to a Cisco Powered Wi-Fi network.
Let us now see what you as an iOS App developer need to do in order to get on the “Fast lane”.
1. Understand the traffic types that your app generates
The first thing is a simple code walk through of your app to examine the sections where you open network connections with the outside world. You could be using any of the iOS Networking frameworks. The bottom line is to classify the network traffic.
App traffic on Wi-Fi networks can be broadly classified as: Voice, Video, Best Effort and Background.
- Voice: This is interactive voice for apps using Wi-Fi Calling (CallKit), Cisco Spark, Facetime or any other voice app.
- Video: This is video traffic using Wi-Fi Calling (CallKit), Cisco Spark, Facetime or video capabilities within the app.
- Best Effort: Examples of data include instant messaging, VPN tunneling, audio/video streaming, signaling, screen sharing etc.
- Background: These apps include photo/media uploads or backups.
Step 2: Make code changes in your app
In iOS, specifying the appropriate network service type on the network connections used in your app will allow network administrators to configure their devices to optimize throughput of your data based on its type.
You set the service type property by using the following networking APIs:
- For CFSocketStream set kCFStreamNetworkServiceType.
- For NSStream, use NSStreamNetworkServiceType.
- For Stream, use StreamNetworkServiceType.
- For UDP sockets, use SO_NETSERVICE_TYPE.
Choose the appropriate service type for your app:
- Specifying the background type allows your traffic for this connection to be delayed to yield to traffic of other types.
- Specifying video and voice types imply your app provides a telephony service of sorts where the type of traffic is interactive voice or interactive video.
- Specifying no service type means your traffic will be prioritized as best effort.
For example, in the UDP sockets, the following are the different service types that are defined.
Choose the service type and set the socket option as follows:
Check out the sample UDP client demo app.
Step 3: Get your app validated for the Fast lane
Now that you have made the code changes to your app, you want to test to see if your changes really work in a Fast lane network, right? That’s where Cisco DevNet comes in. DevNet has a Fast lane validation lab where you as a developer can submit your app for validation on a
live enterprise network. The goal of this lab is to do the following:
- Validate if your app running on an iOS 10 device honors the Fast lane profile as well as checks with and without the whitelist being configured(apps in the whitelist get QoS, apps outside the whitelist are treated as Best Effort).
- Test for the validity of the traffic generated by the app to the actual tag that is marked on the traffic flow.
- Improve user experience (performance) of your app. Check for fewer drops and lower latency in a congested network.
You may also download the Fast Lane Network Check app from the iOS app store to check if your network supports Fast Lane already.
A simple code change in your app can get your app prioritized for performance in an enterprise network, with your traffic getting priority not only on the Wi-Fi network but upstream as well.
Have questions? Interested in getting started? … Send me a comment on this blog and I’ll get back to you.