Xamarin Local Storage
Download
Report
Transcript Xamarin Local Storage
DATA STORAGE WITH
XAMARIN
May 27, 2014
Loren Horsager
CEO, Founder
LOREN HORSAGER
20 years of
software
consulting
Created about
50 mobile apps
Founder of
Mobile
Composer
LOCAL STORAGE - USE CASES
User Preferences
Login Credentials
Developing API
Data Collection
Offline
LOCAL STORAGE
Key/Value pairs
Files
Text Files
Binary Data
Serialized Files
Database (SQLite)
KEY/VALUE PAIRS
Simple Data
User Settings
Personalization info
Login tokens
Supports syncing to iCloud
KEY/VALUE PAIR DEMO
SIMPLE STORAGE
Download from Component Store (free)
using PerpetualEngine.Storage;
Consistent across platforms (Android, iOS,
Win)
Registry like data storage
SIMPLE STORAGE DEMO
KEY/VALUE PAIRS
Not secure
Saved with App Updates
Stored in Library/Preferences
FILE STORAGE
Writeable
.app/
Long term
Saved on
Updates
Saved to
iCloud by
Default
Visible to User
in iTunes
X
X
Documents
X
X
X
X
Library
X
X
X
X
Library/Preferences
X
X
X
X
(Use
NSDefaults)
Library/Caches
X
tmp
X
X
SYSTEM.IO
Standard .NET library
File, Directory, FileInfo, Path
PATHS
Path
.app/
./
Documents
var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
Library
var library = Path.Combine (documents, "..", "Library");
Library/Preferences
Use NSDefaults
Library/Caches
var cache = Path.Combine (documents, "..", "Library", "Caches");
tmp
var tmp = Path.Combine (documents, "..", "tmp");
SHARING FILES VIA ITUNES
Documents directory will automatically be
shared
To Disable:
Change UIFileSharingEnabled in Info.plist
Users can only see root directory
Users can change files in Documents directory
so make sure it doesn’t impact your app
ICLOUD BACKUP
Limit the amount of data going to iCloud
Users get 5GB for all apps
Limit to files that can’t be recreated
To turn off iCloud syncing
SetSkipBackupAttribute
NSFileManager.SetSkipBackupAttribute (filename, true);
APP UPDATES
When updating app versions the contents of
the following will remain
Documents
Library
This includes sub folders except
Library/Caches
FILE IO DEMO
SERIALIZATION
XML or JSON
Great for developing frontend prior to building
web services
Great for preferences
XML SERIALIZATION DEMO
SQLITE
When you need
Structured data
Complex queries
Sorting
Aggregating
Efficient data storage
Offline mode
Shared data models
SQLITE
Open Source
Lightweight
Cross Platform
Android
iOS
Win
Single file storage
Most of SQL92 standard
SQLITE DRAWBACKS
Some OUTER JOINS not supported
Can’t change scheme
Exceptions: Table rename, AddColumn
Views are Read-only
SQLITE OPTIONS
ADO.NET
SQLite.NET ORM
THREADING
Can’t share data access across threads
Wrap all reads and writes into the same lock
object locker = new object(); // class level private field
// rest of class code
lock (locker){
// Do your query or insert here
}
SQLITE ADO DEMO
QUERIES
ExecuteNonQuery
ExecuteReader
ExecuteScalar
SQLITE.NET ORM
Use existing entities
Does not support entity relationships
Different annotations than Entity Framework
Data Annotations
Simplifies data access
SQLITE.NET ORM DEMO
SQLITE.NET ORM ATTRIBUTES
[PrimaryKey]
[AutoIncrement]
[Column(name)]
[Table(name)]
[MaxLength(value)]
[Ignore]
[Unique]
QUERIES
Insert
Get<T>
Table<T>
Delete
Query<T>
Execute
SQLITE SECURIT Y
SQLite is file based and not encrypted
For secure storage use SQLCipher
Available on Xamarin Component Store
CONSIDERATIONS
Security
Don’t store logins directly
Put data where it can’t be directly viewed or altered
by user
Secure SQLite
SQLCipher – encrypted SQLite database files ($499 from
Component Store)
iCloud
Don’t sync more than is needed
RESOURCES
Xamarin site
http://docs.xamarin.com/guides/ios/application_fundamentals/working_wit
h_the_file_system/
http://docs.xamarin.com/guides/crossplatform/application_fundamentals/data/part_4_using_adonet /
http://docs.xamarin.com/guides/crossplatform/application_fundamentals/data/part_3_using_sqlite_orm /
SimpleStorage
https://components.xamarin.com/gettingstarted/simple -storage/true
CONTACT
GitHub project
https://github.com/lhorsager/XamarinLocalStorage
Presentation
http://lorenhorsager.com/2014/05/27/xamarin -local-storagepresentation/
Loren Horsager
[email protected]
@lorenhorsager