32
Additional Topics

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

Embed Size (px)

Citation preview

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