Tag Archives: iOS

Which iPhone should you buy (August 2018)?

Since Apple have positively and officially lost the plot when it comes to their iPhone Model Offerings, and with the “new iPhone” just around the corner, I thought I’d take a look at which iPhone model – in August 2018 – is the best one to buy.

I shudder to think what and how many other models our friends in Cupertino will announce in September, and which of the many models of iPhone currently available will be ditched from the lineup.

This article was inspired by a chat I had with a friend of mine the other day, and he asked me which iPhone he should buy. He’s an average user, by no means a fanboy or techie, but he’s been a long-time Apple user. He was genuinely confused by the current state of affairs in regards to the available iPhone models.

I agreed, and we both began to discuss the inevitable “has Apple lost the plot” aspects of iPhone developments. That aside, here’s the overall result of our discussion, strictly based my own opinion as both a hobby-developer and iPhone user.

At the time of writing, which is August 2018, we have the following lineup to choose from:

  • iPhone X (introduced in late 2017)
  • iPhone 8 and iPhone 8 Plus (late 2017)
  • iPhone 7 and iPhone 7 Plus (late 2016)
  • iPhone 6s and iPhone 6s Plus (late 2015)
  • iPhone SE (late 2015)

All these models come in various RAM and colour configurations. This is more variety than Apple has ever had on offer in the iPhone arsenal, which in and by itself suggests that they no longer know what consumers actually want. Otherwise, they’d do what they usually do: offer the latest model, and last year’s model for $100 less.

Not all of these models are going to be on offer forever, and this lineup is probably due to change in September, when traditionally new iPhone models are released.

But until then, let’s see which one is a sensible one to pick from the iPhone smorgasbord.

Continue reading





Apple changes Developer Program

Screen Shot 2015-06-09 at 11.18.20With the introduction of watchOS yesterday at WWDC2015, Apple have made some changes to their developer programme: it is no longer required to enrol for membership in the iOS and Mac developer programmes for $99 each. Now there’s only one membership, called Apple Developer for $99 per year. How exciting!

Apple were nice enough to add up the remaining days in all your enrolments and extend your membership until such time. From then on, only $99 per year are applicable, and not 2x $99 as previously.

The new Apple Developer membership also includes the previously free Safari Extension programme, as well as new resources for Swift 2 and watchOS. If you need support with an Apple / iOS device then you can get support by visiting this website.

All that’s required to go ahead is to sign a new agreement and save some cash. In my opinion, this is seriously good news. I was contemplating of letting my Mac Dev Membership lapse – now I don’t have to worry about that anymore 🙂





What to do if your iOS device refuses to install updates over the air

Many of us – me included – keep having a problem where our devices see a new iOS version and tell us they’re happy to install it over the air. When the device is restarted it contacts the Apple server to verify the install, only to present an error message along the lines of “Your device could not be activated”. This happens after a short delay.

The only way to recover from this is to install the .ipsw file via DFU mode and restore an iCloud backup. This takes ages and really is unnecessary hassle.

I’ve just come across a solution that worked for me – and it’s something I hadn’t really thought about. I’ve read many reports that point to the iPad 2 – 3G 64GB version as something rather prone to this problem, but it turns out it may have been the DNS on my WiFi connection.

While it works for all my web browsing needs, I guess my provider’s own DNS isn’t passing through some port on which my device is verifying the update with Apple – whichever detail that may be. By simply changing the default to Google’s public DNS (8.8.8.8) I was able to activate my iPad without a hitch.

To change the DNS, head over to Settings – WiFi, then find your network and tap the little info icon next to its name. Take a look at the DNS setting. Mine was the same IP as my router, meaning my internet provider takes care of DNS lookups.

iPad-Wifi-DNS

Aside from Google, OpenDNS also has a couple of popular DNS IP addresses:

Let me know if it helps!





How to restore your iOS device with DFU / Recovery Mode

Sometimes iOS updates go awry. It may happen that the device hangs itself for good, refusing to activate or be recognised by iTunes. In that case, it’s time for a DFU reset, also known as Recovery Mode.

Download an .ipsw file for your device from the Developer Centre (either a beta or the release version) and extract it. Then follow these steps:

  • turn off your device
  • open iTunes and have a USB cable handy
  • while holding the HOME button, insert a USB cable into your device (connected to your computer running iTunes)
  • the device should turn on and be recognised by iTunes within a few seconds as a device in DFU mode
  • Option-Click RESTORE in iTunes, then navigate to the .ipsw file of your choice (hopefully the correct one for your device)

Smiles all round!





How to check if your app is running on an iPad or an iPhone

Here’s how we check that:

// if we're an iPad
if ([[UIDevice currentDevice]userInterfaceIdiom] == UIUserInterfaceIdiomPad) {

    // do some iPad or iPad Mini specific stuff
    
} else {

    // we're on iPhone or iPod Touch
}

Alternatively you can check the same method for UIUserInterfaceIdiomPhone instead, which is returned when you’re on an iPhone or iPod touch.





How to find out what class an NSObject belongs to

Sometimes you find yourself having a reference to an object (say a View Controller), but you don’t know what class it belongs to. Thankfully there’s a method for this which will work with any NSObject:

if ([self.navController isMemberOfClass:[UIViewController class]]) {
        self.previousTitle = @"Novels";
    }

In this example we’re testing if our self.navController is a UIViewController. The method returns a BOOL.

If you inherit from other classes and test for a parent class, rest assured that this does not return false positives. So if you’d test the above for being a member of NSObject, the equation would return NO.