Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a...

32
Additional Topics

Transcript of Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a...

Page 1: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Additional Topics

Page 2: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

API Bindings

Page 3: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Bindings

• Binding Native API’s

• Create Binding Project• Drop Jar or .a• Done

Page 4: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

You wish!

Painful

Page 5: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Bindings Android

• Generate C# stubs from Java Classes• Simple Jar’s work without issues

• XML transforms for differences in C# / Java:– Anonymous inner classes– Data Type Mapping– Enums

• Samples available• Did I say it’s painful already?

Page 6: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Bindings iOS

• Have to define all Classes / Methods manually• ObjectiveSharpie command line tool– Great help– Still a lot of manual work

• linkwith.cs file requires manual adaption– C Libraries– iOS Frameworks

• Errors appear when linking

Page 7: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Let’s have a look

Urban Airship binding (MyWorldVision)

Page 8: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Bindings Conclusion

• Many API’s are already available, maintained by main developer (Facebook, Microsoft etc.)

• Try to avoid bindings if other Components / Packages are available (-> e.g. Parse)

• Read error messages• Use Xamarin Forums, Stackoverflow• Be patient!

Page 9: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

SQLite

Crossplattform DB

Page 10: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Data Model

public class TodoItem { public TodoItem () { }

[PrimaryKey, AutoIncrement] public int ID { get; set; } public string Name { get; set; } public string Notes { get; set; } public bool Done { get; set; } }

Page 11: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Get Connection (Dependency Service)

public interface ISQLite { SQLiteConnection GetConnection(); }

Page 12: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Android Implementation

public SQLite.SQLiteConnection GetConnection () { var sqliteFilename = "TodoSQLite.db3"; string documentsPath = System.Environment.GetFolderPath

(System.Environment.SpecialFolder.Personal); // Documents folder var path = Path.Combine(documentsPath, sqliteFilename); // Create the connection var conn = new SQLite.SQLiteConnection(path); // Return the database connection return conn; }}

Page 13: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Usage

Init:database = DependencyService.Get<ISQLite> ().GetConnection ();database.CreateTable<TodoItem>();

SQL Query:return database.Query<TodoItem> ("SELECT * FROM [TodoItem] WHERE [Done] = 0");

Page 14: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Usage

LINQ Expressions:TodoItem GetItem (int id){ return database.Table<TodoItem> ().FirstOrDefault (x => x.ID == id); }

return database.Delete<TodoItem> (id);

Page 15: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Let’s have a look

SQLite Demo App

Page 16: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

JSON.Net

Jason!

Page 17: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Decisions, decisions

System.Json vs Json.Net-> Use Json.Net unless you have a good reason

-> Less restrictive

Page 18: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Basic example

var todoItem = new TodoItem {ID = 1,Name = "Name”

};

var json = JsonConvert.SerializeObject (todoItem);Debug.WriteLine ("JSON representation of todoItem: {0}", json);

var person2 = JsonConvert.DeserializeObject<TodoItem> (json);Debug.WriteLine ("{0} - {1}", person2.ID, person2.Name);

Page 19: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Linq example

string jsontext = @"{ Name: 'Bob', HairColor: 'Brown' }";var bob = JObject.Parse (jsontext);

Debug.WriteLine ("{0} with {1} hair", bob["Name"], bob["HairColor"]);

Page 20: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Let’s have a quick look

JSON Example

Page 21: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

UI Tests

Testcloud

Page 22: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

TestCloud

Physical devices mounted in Rack

Page 23: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.
Page 24: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

UI Test

• For all native Apps• Physical devices mounted in Rack• Run locally in Simulator (iOS, Android)• Deploy to Cloud for mass testing• 60 Device Minutes included

• More is a bit expensive

Page 25: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

UI Test – how it works

• iOS: e.NativeView.AccessibilityIdentifier = value;• Android: e.NativeView.ContentDescription = value;

[Test]public void WelcomeTextIsDisplayed () {

AppResult[] results = app.WaitForElement (c => c.Marked ("Welcome to Xamarin Forms!"));app.Screenshot ("Welcome screen.");

Assert.IsTrue (results.Any ());}

Page 26: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Tests

Let’s have a look (Local App)

Page 27: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Tests

Let’s have a look (testcloud.xamarin.com)

Page 28: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Insights

Analytics & Crash Reports made easy

Page 29: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.
Page 30: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Usage

• Import Package• Register API Key• Done

Page 31: Additional Topics. API Bindings Bindings Binding Native API’s Create Binding Project Drop Jar or.a Done.

Hold your horses…

• Uncaught Exceptions get reported automatically

• Exception Reporting for caught exceptions:Insights.Report(ex);

• User Identification• Events• Timed Events