Removing the White Bars in Safari on iPhone X

Removing the White Bars in Safari on iPhone X

The new iPhone X features a beautiful edge-to-edge display. Well, almost. There is the small issue of a notch at the top of the browser which doesn't cause an issue when viewing websites in portrait but by default does cause some issues in landscape. To accommodate the notch iOS 11 constrains websites within a "safe area" on the screen. On most websites this results in letterboxing on the left and the right. Thankfully there are two simple fixes that can be made to solve this letterboxing. background-color If your website uses a single solid colour for its background then the…

Mixing TVML and UIKit without a server

Mixing TVML and UIKit without a server

When building for tvOS Apple gave us two approaches. A fully native app could be built using UIKit, storyboards and everything developers have been familiar with when building apps for iOS. However, Apple also opened up their TVML and TVJS platform that has been used on Apple TV 2 and 3 by the likes of Netflix, Hulu and Now TV. This approach allows for apps to be created using a simple XML markup and JavaScript. That sounds great but when using TVML you're required to use a separate server to handle the logic of populating data and navigating between views.…

Deeplinking  (how to force out of Facebook's in-app browser and fallback on desktop)

Deeplinking (how to force out of Facebook's in-app browser and fallback on desktop)

So it turns out these in-app web views can't die quick enough (hello, SafariViewController!). Marty tweeted he was trying to get YouTube videos to open in the native iOS app rather than on the website but was finding it impossible. By default, the iOS app adds a URL scheme to open youtube.com links. When someone texts you a link to a video, Safari will redirect you to the app. However, Facebook's in-app browser (and Twitter's and I expect others) doesn't honour this and linking to the youtube:// URL scheme doesn't work either. Workaround With JavaScript It turns out, if…

Make UILabel Copyable in Swift

I've been working on an iOS app that called for some text to be copyable but not editable. I wanted to able to long-press and have the contextual menu show the "Copy" action. I'd initially thought about using a UITextField and disabling the edit functionality to achieve this. However that caused some issues with keyboards popping up even when editing was disabled. It struck me as strange that a UILabel isn't copyable. At least by default, as it turns out is actually fairly easy to make it so we can copy and paste out label value. Subclassing UILabel To make…

Swift "AnyClass" Type

TL;DR you're looking for MyClass.self When working with ConnectSDK, I came across something I hadn't before in Swift: the AnyClass type. ConnectSDK is an Objective-C based library so I'd imagine this is a rarity when working with native Swift code. Here's what it looks like: discoveryManager?.registerDeviceService(deviceClass: AnyClass!, withDiscovery: AnyClass!) I mistakenly though it was looking for an instance (i.e. MyClass()) but that threw an error. It turns out that in Objective-C each class has the static class property. In the case of ConnectSDK it's looking for the following: [AirPlayService class] [DIALService class] [CastService class] This…