Data Storage in Xamarin tvOS

Data Storage in Xamarin tvOS

20 August 2020

Introduction to tvOS

Apple TV is a digital media player used to play digital content such as music, video and can also be used to play games with internet connectivity. It was released by Apple Inc. on 9 Jan 2007 and currently, it has the latest version as Apple TV 4K (5th generation). It has the operating system named tvOS which has 13.3.1, the latest stable version.

Xamarin for tvOS

In Xamarin, with the C# codebase, we can develop cross-platform as well as native level apps for mobile and tvOS apps can be developed using Xamarin on the native level.

Limitations in Apple TV

Apple TV has many amazing features but, as the coin has two sides, it also has lots of limitations. Some common limitations are as follows:

  • No Webview: There is no passive viewing on Apple TV. We can only navigate through the apps.
  • Limited UI elements: Apple TV supports the limited bunch of UI components provided by UIKit.
  • No persistent local storage: Apple TV does not have persistent storage.
  • App size limit: Apple TV limits apps size to 200 MB.

Data Storage

So, how to store data in the Xamarin tvOS apps?

There are some ways to provide data storage in Apple TV as given below:

  • NSUserDefaults
  • Preferences (Xamarin.Essentials)
  • iCloud

If we require resources beyond the size limit then we can pack and load using On-Demand Resources, but it has a limit of 2GB.

NSUserDefaults:

NSUserDefaults is used for very small-sized data to store persistently. But for each application, it has a limit of 500KB of data. It is used to store key-value pairs that can be accessed at the app launch and can be modified at runtime.

We can understand it, with the help of following example:

Here we are storing key-value pairs where “KeyName” is the key and “valueName” is the string value that we have to store and access later app sessions.

Create:

NSUserDefaults.StandardUserDefaults.SetString(valueName, "KeyName"); NSUserDefaults.StandardUserDefaults.Synchronize();

Access:

valueName = NSUserDefaults.StandardUserDefaults.StringForKey("KeyName");

Remove:

NSUserDefaults.StandardUserDefaults.RemoveObject("KeyName");

The common data types supported by NSUserDefault are:

  • string
  • integer
  • float
  • boolean
  • URLs

After uninstalling the application, NSUserDefault values will automatically be cleared out.

Preferences (Xamarin.Essentials):

Preferences are used to store tiny bits of data in key-value pairs and it can be used after adding the reference of Xamarin.Essentials library.

Create:

Preferences.Set("keyName", "valueName");

Access:

var myValue = Preferences.Get("keyName", "defaultValue");

Remove:

Preferences.Remove("keyName"); (remove single preference) Preferences.Clear(); (remove all preferences)

The common data types supported by preferences are:

  • bool
  • double
  • int
  • float
  • long
  • string
  • DateTime

After uninstalling the application all preferences will be automatically cleared out.

iCloud:

If the application requires a large amount of data to store and access, then iCould will be helpful. The iCloud-based data storage system has two types:

  • iCloud Key-Value Storage (KVS):
    KVS is used to store a small amount of data which is less than 1MB. The data stored in KVS is accessible in all the devices for the same user.
  • CloudKit:
    CloudKit is used to store a large amount of data which is greater than 1MB. The data stored in it can be accessible to all the users of the app and can also be restricted to access to a particular user.

Request a quote