Recently I was tasked with creating a mobile app for an internal company need. Normally I’d default to web applications with responsive UI for different devices but in this case there was a core requirement to support push notifications. The timeline was “as soon as possible” and that included picking a platform (two leading choices were Cordova/Ionic and Xamarin), learning the toolchain, integrating push notifications, ensuring it works even after being wrapped in a security product (Citrix XenMobile MDX Toolkit – I still don’t know which of these words is the most important in this case so I include them all).
App Technology Stack
Since I’m more comfortable with C# compared to web frameworks I started with Xamarin. I’ve attended some user group talks that used Xamarin and knew Xamarin Forms was probably the right starting point. I only had to support iOS but Android was a nice to have since we have many users with Android devices.
Visual Studio App Center
After trying a few different options based on previous knowledge (Azure Notification Hubs, Azure App Services) and things discovered (Google Firebase for Android and iOS) to various degrees of success, I stumbled on Visual Studio App Center. I initially started my searching in early February 2018. App Center had only been announced during the Connect(); 2017 conference a few months prior in November. Because it was so new under that name it was not as high in search results when looking for push notifications with Xamarin. That’s really unfortunate because App Center is an integrated offering of previous solutions that already have great support and adoption.
I was recently tasked with building a mobile app for my company that received push notifications and directed users to internal resources (via XenMobile SecureWeb). I have looked at mobile apps at various points in the past and tried Xamarin, Cordova, Ionic and even native Swift and Java. I struggled to get anything of value implemented so I never went further. That left me starting from scratch to figure out how I’d satisfy the requirement.
I had passively been attending Greg Shackles’ NYC Mobile .NET User Group and had some idea that Xamarin Forms was probably my best bet for a cross platform solution. I am not particularly fond of XAML but the application itself intentionally had almost no UI so that was not a concern.
My exploration meandered a bit while I tried things I knew about (Azure App Services, Azure Notification Hubs) and then things I leaned about by extension (Firebase) before finally settling on exactly what I needed: Visual Studio App Center. It’s a lightweight solution that offers analytics, crash reporting and push notifications. The configuration was straightforward for Push notifications and just worked.
With App Center I had the infrastructure set up and configured and could focus on the functionality of the app. The rest of this is all about my experience using the tooling to build and test that application on iOS and Android devices.
Posted in Android, First Experience, iOS, Mobile Development, Programming, Xamarin
Tagged Android, First Experience, iOS, Mobile Development, Programming, Xamarin
As a developer there are times I want to quickly throw something together to see if an idea I have is workable. I don’t need to go through all the ceremony of creating a project with necessary dependencies, good architecture, etc. if all I want to know is if I can access some service. For most things I can fire up a quick test project using either Console or Web project templates and have my answer in a few minutes. For SharePoint though, this has never been very easy.
Introducing Napa Tools
“Napa is a great way to get started building Office Add-Ins right in a browser window. You don’t need to install any tools such as Visual Studio. All you need is an Office 365 account and a supported browser.”
With previous versions of SharePoint, server-side code was really the only way to go to create custom SharePoint solutions. Developing for SharePoint was tricky as it required a local install in order to build and package solutions. This made throwing together test harnesses very slow to prove out a concept. With the introduction of client side libraries and services, extending SharePoint with custom code has become much easier.
Even though developing for SharePoint doesn’t mean server side code, it still has packaging requirements. That’s where Napa comes into play. Using an online editor which resembles lightweight editors like Sublime and Visual Studio Code, anyone with a modern browser can throw together a quick test or demo without a local install of SharePoint or even worrying about manifests and elements files. The editor provides syntax highlighting, jump to definition, basic Intellisense capabilities, and saves your work automatically.
“Napa” Office 365 Development Tools Online Editor
Wireless Display Support in Windows 8
I just spent way too many hours trying to figure out why every blog post on the subject of using a wireless display claims there was a link to “Add a wireless display” in the Devices charm under the Project option but not on my machine. I recently bought a Samsung UN55H7150 television that had screen mirroring capability and my HP TouchSmart 15t laptop claimed to support wireless displays but for some reason I couldn’t make them work.
If you’re having this problem, I’ll save you the effort of figuring it out: you’ve got a virtual network driver installed that is mucking with this capability. I ran across a reference in a blog saying they had trouble after installing their company VPN software. I thought maybe it might be that but then I realized this hasn’t worked since I installed Oracle VirtualBox. I tried disabling the driver but that didn’t seem to do anything. After uninstalling VirtualBox completely, the option was again available.
I can’t tell you how many hours over how many days I lost to this as I would attempt to figure it out, get frustrated, give up and then try again another day but it was too many.
If the “add a wireless display” option is missing from your Windows 8 machine and you’re sure you have hardware capable of supporting WiDi or Miracast, look at your installed software and remove anything that added a networking driver.
In a previous post I wrote an example library for ASP.NET Web Api that would handle HTTP requests that could contain RANGE headers. I just published the code on GitHub and have made a signed, release build package on NuGet.
You can find usage information in the Progressive Download GitHub repository. The latest build is dependent on the WebApi Client and Core version 5.0.0 NuGet packages and the Newtonsoft.Json version 4.5.11 NuGet package. Hopefully this will let people leverage the library without upgrading their dependencies.
The solution on GitHub contains 100% code coverage tests which I’ve been running before I commit the code or publish a package to NuGet.
Check the previous post on the topic about limitations of the System.Net.Http.ByteRangeStreamResult class or any other particulars. I would recommend this path for progressive downloads than my aging attempts to replicate the functionality in MVC.
Feedback is welcome.
Recently I’ve been interested in incorporating more automated testing in my projects. The benefits of having tests are heavily covered in other topics so I won’t waste time explaining why I sat in on a few sessions at this year’s Code Camp NYC focusing on automated testing. Needless to say a few of the sessions was all it took to push me into getting my feet wet.
I decided to start out on a demo project just so I didn’t dirty up any formal projects while I tried out the best approach to implementing the tests. I recently created a project to check out ASP.NET Web API as a progressive download host (which allows for streaming video to iOS devices, allows downloads to be chunked and resumed by download managers, etc.) This seemed like a good candidate for tests since the behavior of the library changes based on the HTTP request headers for a resource.
(Update 2014-12-10: The code is now in GitHub and a package is available as a NuGet Package. See the announcement about it.)
Some time ago I read an interesting Stack Overflow question asking about streaming videos to iOS devices from ASP.NET MVC. In researching the answer, I learned about parsing HTTP request headers and constructing responses. In general for iOS devices to support playing video a web server needs to understand requests with the RANGE header and respond appropriately with 206 (PartialContent) and a CONTENT-RANGE header which more or less repeats the original request range.
I originally wrote an answer to this effect but also wanted to test it out to make sure it worked in ASP.NET MVC. While successful, it was not particularly elegant. After getting some feedback and requests, I wrote a second version. Surprisingly I still get pings on this from time to time and it made me wonder if something more integrated has shown up in ASP.NET MVC since my original attempts. Until recently I hadn’t had a need for this myself until a couple days ago I got the urge to stream video content from my Windows laptop to my TV and thought this might be a good time to revisit the library. What I wanted was an iOS compliant video server so I could stream videos to my Apple TV via my phone.
I knew I had a working library for ASP.NET MVC that I could have up and running in a few minutes but I was more curious if there had been any advancements in supporting partial range requests more seamlessly. A few brief searches turned up the ByteRangeStreamContent class and the HttpRequestMessage’s RANGE header used in ASP.NET Web API which looked promising.