Recent Updates Toggle Comment Threads | Keyboard Shortcuts

  • versluis 11:20 am on June 11, 2015 Permalink | Reply
    Tags: , ,   

    FAIL: iOS 9 can’t restore iCloud Backups from iOS 8 


    I thought I’d give the new iOS 9 Beta 1 a spin on my ageing iPad 3. I’ve hit a few stumbling blocks and thought I’d tell you about them.

    The first attempt to add the new beta using iTunes didn’t work and turned my poor iPad into a coaster. Very disappointing. Thankfully a DFU restore did the trick, and iOS 9 was starting fine. Things were looking up.

    I thought it would make sense to restore the latest iCloud Backup I had made just minutes before, thinking that testing with existing data would make sense. But restoring my iCloud Backup didn’t work: I picked one, the restore started, counted down the minutes, and shortly before it was due to finish, it comes up with the message in the screenshot above. Nothing doing.

    I had three backups in total from various dates to choose from. I tried them all, multiple times, but to no avail: none of them could be restored. All I could do was to setup my device as a “new iPad” (after all, that was its launch title). It did make me wonder if all my iCloud Backups were broken or if it was just this particular iOS 9 Beta.

    So I went on to explore a bit, being particularly intrigued by the Slide Over feature: apparently you slide in from the right hand side with one finger and bring up a second app. Doesn’t work of course. Turns out none of these new features work on my iPad 3, nor on the iPad 2: all you can do is use two fingers on the keyboard and move the cursor (no text selection either).

    It was my understanding that Slide Over was supported on all devices, and that only the arbitrary split view and picture-in-picture required this week’s hardware. But since there’s no actual documentation on this topic, your guess is as good as mine. I didn’t even look at the News app, mainly because I’ve un-installed Flipbook and Zite many years ago and have never looked back.

    The new Notes features are a nice touch, 4 years late in my opinion, but better late than never. The interface reminds mea little of 53 Paper. It is required to upgrade existing notes for use with iOS 9, much like the upgrade to iCloud Drive. You can choose not to do it, and the app tells you that upgrading means you can no longer exchange notes with older devices.

    Apple want to make absolutely sure nobody is using old devices anymore: this is the another step in making sure there will be no more data exchange with iOS 5 and iOS 6 devices. It’s top priority for them. Please throw that iPhone 3GS and iPod Touch 4 and iPad 1 away once and for all. We should all go to the store and drop $1000 a month or more just to be able to write a shopping list that works on all our devices.

    I had secretly hoped that iOS 9 would bring performance improvements. My device has been severely crippled with the arrival of iOS 8, and rumour has it that iOS 9 might remedy that. It’s too early to tell I must say: while the keyboard now reflects capital and non-capital letters depending on the shift key, it does take nearly a second for the font to change when you press said shift key or the symbol key. Nothing much has changed there. This could be because betas usually aren’t as fluid as release versions.

    But because I no longer expect anything “nice” from the Cupertino Fruit Co. of late, I wasn’t even disappointed. iOS 9 looks and feels exactly like iOS 8 on my current device, and for me there is no benefit in having it on my device: I don’t intend to roll out any new apps in the near future, so I went back to exploring the iCloud Backup situation.

    I’ve downloaded the iOS 8.3 release version, quickly wiped my iPad and tried to restore my backup again. No problem at all. Phew! Relieved that my backups were still intact, I try my best to forget this plethora of disappointment with iOS 9.

    It’s a bit like how Apple must feel when they’re trying to forget that last year’s OS (or hardware) was ever released.

  • versluis 11:25 am on June 9, 2015 Permalink | Reply
    Tags: El Capitan, , ,   

    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.

    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 :-)

  • versluis 3:28 pm on May 19, 2015 Permalink | Reply
    Tags: UIScreen,   

    How to load UIStoryboards depending on screen height in iOS 

    A while ago I’ve written an article about how to load different storyboards depending on the screen size of an iOS device. Back in those days (2013) it was all a bit simpler than it is today, and I looked into it mainly because I loathed Auto Layout so much.

    I felt it was time for an update, so here it is!

    Things haven’t gotten any easier in iOS, because currently we have the following 5 screen sizes to deal with:

    • iPhone 6 Plus: 736×414 @3x
    • iPhone 6: 667×375 @3x
    • iPhone 5s: 568×320 @2x
    • iPhone 4s: 480×320 @2x
    • all iPads: 1024×768 @1x / @2x

    It’s very difficult to make a UI look nice on all devices with a single UIStoryboard, and in the above video I’m showing you an alternative: design a completely different storyboard for each screen size.

    The upkeep of such an app will be a little more complex, but it puts us in full control of the user experience, and not some compromise that sounds good in the Apple presentation (and sucks in reality).

    In principle, the following steps are involved:

    • design various storyboards
    • detect the current device’s screen height
    • load the appropriate storyboard
    • make it “key and visible”

    Detecting the screen size

    If your app is set to “auto-rotate” (i.e. both portrait and landscape modes, or portrait only), the screen height will detect the longer side of the screen. This is true even if the app is started in landscape mode. Determining screen height can be done like this:

    int screenHeight = [UIScreen mainScreen].bounds.size.height;
    NSLog(@"Screen Height is %i", screenHeight);

    Note that if you set your app to “landscape only” mode, the height parameter will return the shorter side of the screen – in which case, bounds.size.width to determine the longer portion of the screen. Thanks to Johan Grip for bringing this to my attention!

    iOS 7 compatibility

    Note that the screen size is orientation dependant since iOS 8 – previous versions did not take this into a account. If you must support iOS 7 and earlier it gets a lot more complicated (and I won’t cover this here – sorry).

    However, this Stack Overflow discussion may help you in that case:

    Loading the correct UIStoryboard

    With this handy integer in place, we can build a switch statement to react according to the screen height. I’m using the following method that returns my desired storyboard in my AppDelegate implementation file.

    If you’re not worried about each single size, feel free to write a shorter if/then/else type method.


    - (UIStoryboard *)grabStoryboard {
        // determine screen size
        int screenHeight = [UIScreen mainScreen].bounds.size.height;
        UIStoryboard *storyboard;
        switch (screenHeight) {
                // iPhone 4s
            case 480:
                storyboard = [UIStoryboard storyboardWithName:@"Main-4s" bundle:nil];
                // iPhone 5s
                case 568:
                storyboard = [UIStoryboard storyboardWithName:@"Main-5s" bundle:nil];
                // iPhone 6
                case 667:
                storyboard = [UIStoryboard storyboardWithName:@"Main-6" bundle:nil];
                // iPhone 6 Plus
                case 736:
                storyboard = [UIStoryboard storyboardWithName:@"Main-6-Plus" bundle:nil];
                // it's an iPad
                storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        return storyboard;


    Displaying the storyboard

    Inside our AppDelegate method didFinishLaunchingWithOptions, we’ll call the above method and grab the storyboard we need. To make it show up, we need to load it as the window’s root view controller and declare it “key and visible”. This is akin to the old-style way of making things appear on our iOS screens.

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // grab correct storyboard depending on screen height
        UIStoryboard *storyboard = [self grabStoryboard];
        // display storyboard
        self.window.rootViewController = [storyboard instantiateInitialViewController];
        [self.window makeKeyAndVisible];
        return YES;

    Note that using this approach will override whatever storyboard is declared in your target (under General – Deployment Info – Main Interface).


    Demo Project

    I’ve updated this project on GitHub, it shows exactly what I’m building in the screencast. Play and enjoy :-)

    • Jarod 12:03 am on June 5, 2015 Permalink | Reply

      Great tutorial. Very easy to understand and follow. Keep up the good work!

  • versluis 12:21 pm on April 11, 2015 Permalink | Reply
    Tags: ,   

    What's new in iOS 8.3 and Xcode 6.3 

    iOS 8.3 includes improved performance, bug fixes, and a redesigned Emoji keyboard. Changes include:

    Improved performance for:

    • App launch
    • App responsiveness
    • Messages
    • Wi-Fi
    • Control Center
    • Safari tabs
    • 3rd-party keyboards
    • Keyboard shortcuts
    • Simplified Chinese keyboard

    Wi-Fi and Bluetooth fixes

    • Fixes an issue where you could be continuously prompted for login credentials
    • Addresses an issue where some devices disconnect intermittently from Wi-Fi networks
    • Fixes an issue where hands-free phone calls could become disconnected
    • Fixes an issue where audio playback could stop working with some bluetooth speakers

    Orientation and rotation fixes

    • Addresses an issue that sometimes prevented rotating back to portrait after having rotated to landscape
    • Improves performance and stability issues that occurred when rotating the device between portrait and landscape
    • Fixes an issue where device orientation appeared upside down after pulling the iPhone 6 Plus from your pocket
    • Resolves an issue that sometimes prevented apps from rotating to correct orientation after switching apps in multitasking

    Messages fixes

    • Addresses issues that caused group messages to sometimes split
    • Fixes an issue that sometimes removed the ability to forward or delete individual messages
    • Resolves an issue that sometimes prevented a preview from appearing when taking a photo in Messages
    • Adds the ability to report junk messages directly from the Messages app
    • Adds the ability to filter out iMessages that are not sent by your contacts

    Family Sharing fixes

    • Fixes a bug where certain apps would not launch or update on family members’ devices
    • Fixes a bug that prevented family members from downloading certain free apps
    • Increased reliability for Ask to Buy notifications

    CarPlay fixes

    • Fixes an issue where Maps could come up as a black screen
    • Fixes an issue where the UI could be incorrectly rotated
    • Fixes an issue where the keyboard could appear on the CarPlay screen when it shouldn’t

    Enterprise fixes

    • Improves reliability of installing and updating enterprise apps
    • Corrects the time zone of Calendar events created in IBM Notes
    • Fixes a problem that could cause web clip icons to become generic after restarting
    • Improves reliability of saving the password for a web proxy
    • Exchange out-of-office message can now be edited separately for external replies
    • Improves recovery of Exchange accounts from temporary connection problems
    • Improves compatibility of VPN and web proxy solutions
    • Allows use of physical keyboards to log into Safari web sheets, such as for joining a public Wi-Fi network
    • Fixes an issue that caused Exchange meetings with long notes to be truncated

    Accessibility fixes

    • Fixes an issue where using the back button in Safari causes VoiceOver gestures to not respond
    • Fixes an issue where VoiceOver focus becomes unreliable in draft Mail messages
    • Fixes an issue where Braille Screen Input cannot be used to type text in forms on webpages
    • Fixes an issue where toggling Quick Nav on a Braille Display announces that Quick Nav is off
    • Fixes an issue keeping app icons from being moveable on home screen when VoiceOver is enabled
    • Fixes an issue in Speak Screen where speech will not start again after pausing

    Other improvements and bug fixes

    • Introduces a redesigned Emoji keyboard with over 300 new characters
    • iCloud Photo Library has been optimized to work with the new Photos app on OS X 10.10.3 and is now out of beta
    • Improves the pronunciation of street names during turn-by-turn navigation in Maps
    • Includes support for Baum VarioUltra 20 and VarioUltra 40 braille displays
    • Improves the display of Spotlight results when Reduce Transparency is turned on
    • Adds Italic and Underline format options for iPhone 6 Plus landscape keyboard
    • Adds the ability to remove shipping and billing addresses used with Apple Pay
    • Additional language and country support for Siri: English (India, New Zealand), Danish (Denmark), Dutch (Netherlands), Portuguese (Brazil), Russian (Russia), Swedish (Sweden), Thai (Thailand), Turkish (Turkey)
    • Additional dictation languages: Arabic (Saudi Arabia, United Arab Emirates) and Hebrew (Israel)
    • Improves stability for Phone, Mail, Bluetooth connectivity, Photos, Safari tabs, Settings, Weather and Genius Playlists in Music
    • Addresses an issue where Slide to Unlock could fail to work on certain devices
    • Addresses an issue that sometimes prevented swiping to answer a phone call on the Lock screen
    • Addresses an issue that prevented opening links in Safari PDFs
    • Fixes an issue where selecting Clear History and Website Data in Safari Settings did not clear all data
    • Fixes an issue that prevented autocorrecting “FYI”
    • Addresses an issue where contextual predictions did not appear in Quick Reply
    • Fixes an issue where Maps did not enter night mode from hybrid mode
    • Resolves an issue that prevented initiating FaceTime calls from a browser or 3rd-party app using FaceTime URLs
    • Fixes an issue that sometimes prevented photos from properly exporting to Digital Camera Image folders on Windows
    • Fixes an issue that sometimes prevented an iPad backup from completing with iTunes
    • Fixes an issue that could cause Podcast downloads to stall when switching from Wi-Fi to cellular networks
    • Fixes an issue where remaining time on timer would sometimes incorrectly display as 00:00 on Lock screen

    What’s new in Xcode 6.3

    Screen Shot 2015-04-11 at 12.25.30

    Apple have the following document available which explains the changes in Xcode better than the above screenshot:

    Further Reading

compose new post
next post/next comment
previous post/previous comment
show/hide comments
go to top
go to login
show/hide help
shift + esc
Password Reset
Please enter your e-mail address. You will receive a new password via e-mail.