I’ve finally got in to some long awaited IoT with items I bought over 4 years ago that were lying dormant in storage containers. I backed Spark Core on Kickstarter on 31 May 2013, that’s how long I’ve been meaning to do something with it. Finally that time arrived.Read More
Today, Thursday 22 September, I spoke at the Xamarin Melbourne Meetup Presentation. The topic was “Getting an app ready for release - The optional things which probably shouldn’t be optional”. It was a discussion on the steps and measures developers should probably take to make their Xamarin Forms apps faster, more secure and more stable.
It went well with lots of discussion :) I’m hoping most people found the content useful for their apps.
Below is a link to download the presentation, where I covered 2 main topics. Network Resiliency & Speed, and Security. There are lots of links in the PDF with further, more complete information.
Good luck, and if anyone at the meetup has any questions, just send me an email.
UPDATE: I do not recommend this solution anymore. The SQLite library used is unmaintained, has locking issues, and does not work with Android 8 (however someone kindly sent through a PR to update Android support). I recommend this nuget package https://www.nuget.org/packages/sqlite-net-pcl/ moving forward.
It took me a while to gather information from various sources to get a working base of SQLite.NET in Xamarin Forms using all asynchronous operations, so I thought I'd whip up a small demo app showing all the plumbing in place, with basic data been added and retrieved from the database.
The solution can be found here: https://github.com/michaeldimoudis/xam-forms-sqlitenet-async
I had a lot of issues with how dates got stored in the database. Everything coming from and back to the server was in UTC, and the only way I could reliably get dates out of the SQLite database was by storing DateTime as ticks in SQLite. This is an optional parameter on SQLiteConnectionString in the iOS/Android concrete connection implementations. Also make sure you explicitly set DateTimeKind to UTC when inserting DateTime's in the SQLite database.
Another thing is, you need class level locking around your database calls, or else you risk dead locking the app. This is a must. AsyncSemaphore comes to the rescue here.
Also there was no way I could drop database tables asynchronously, it just simply didn't work. I had to always use non async connection for dropping tables.
You also might find SQLite-Net Extensions very useful, I did, and it reduced the amount of code I had to write greatly. You can find more information about it here https://bitbucket.org/twincoders/sqlite-net-extensions. I might blog about some tips and tricks of using this simple ORM at a later date.
Hope this helps getting you started :)
Wow, it’s been over 2 years since I last blogged. I haven’t done much exciting techy things in my spare time for a while, I did build a deck, maybe I’ll blog how to build a deck, but I want to start blogging more about native app development using Xamarin Forms.
I am loving Xamarin Forms. I have been playing with this technology for a bit under a year now, on and off. I started as a noob, and have now become fairly proficient in it. So I’m hoping to share some unique tips and tricks I’ve found along the way.
My first blog post is about the soft keyboard, and how to tame it! A huge benefit of native mobile app development versus web mobile app development, is that you can get access to the soft keyboard. So you can resize your view when the keyboard pops up or down, including detecting the height of any accessory views, or auto correction attached to the keyboard, etc. This allows you to build your view with elegance, user experience, and design in mind.
For instance, Facebook Messenger’s interface, where you get some added action buttons that are always anchored above the keyboard, no matter if the keyboard is up or down, with accessory views on or not, or with auto correction displayed or not. You can build those added actions as a Grid of Buttons, but this blog post isn’t about that, it’s about resizing the View.Read More