Archive for February 22, 2016

Monday, February 22, 2016

iOS 9.3 Removes Pencil Interface Control

Juli Clover (via Mike Rundle):

Over the course of the iOS 9.3 beta testing period, iPad Pro users running the update have noticed a disturbing feature removal that limits the functionality of the Apple Pencil. In the current version of iOS, iOS 9.2, the Apple Pencil can be used for navigational purposes, just like a finger. It’s possible to tap on buttons, select text, scroll, swipe between apps, access menus, and access general editing controls in non-drawing apps.

With iOS 9.3, much of that functionality has been removed. The Apple Pencil is no longer able to be used for selecting and manipulating text or doing things like scrolling -- it’s only available for selecting buttons and drawing, sketching, and writing within apps.

Serenity Caldwell:

But the fact remains that the Pencil’s owners use those navigation options, and frankly, the idea that Apple would take away functionality that people have come to expect and depend on is a significant hit to usability and overall experience.

Worse, it makes the Pencil useless for video and audio editing, creative pursuits that I’d hoped to explore further on the iPad Pro. I’d initially enjoyed editing and cutting several videos in iMovie for iOS with the help of the Pencil; now, you can only select and drag clips. You can’t cut a clip with the downward swipe gesture, nor can you scroll the timeline.

Being able to control the interface and manipulate text with the pencil was one of my favorite features of the iPad Pro.

Update (2016-02-22): Jonathan Deutsch:

@cgpgrey passionately discusses this on cortex and how the pencil helps his RSI (starting at 1:20:30)

Update (2016-02-25): Chris Welch (via John Gruber, comments):

Apple has no plans to cripple its Pencil accessory for the iPad Pro. After recent iOS 9.3 betas removed the ability to navigate around iOS with the $99 add-on — marketed as a drawing tool more than a stylus — Apple has confirmed with The Verge that all of those features will soon make a comeback. “We believe a finger will always be the primary way users navigate on an iPad, but we understand that some customers like to use Apple Pencil for this as well,” a spokesperson said. “We will add this functionality back in the next beta of iOS 9.3.”

Jason Snell:

Whether Apple was always intending to bring that feature back, or changed course because of the feedback it received during the beta, is an open question. If Apple truly did change course because of customer feedback, though, I see no need for the company to hide it: Listening to customer feedback and modifying your plans accordingly should be a badge of honor, not shame.

How ZergHelper Evaded App Review

Claud Xiao (via Javier Soto):

ZergHelper appears to have gotten by Apple’s app review process by performing different behaviors for users from different physical locations on earth. For users outside of China, it would act as what it claimed: an English studying app. However, when accessing the app from China, its real features would appear.

The app was made available in the App Store on October 30, 2015. However, nobody appeared to have noticed ZergHelper’s hidden functionality until February 19, 2016, when a user created a post in V2EX (a Chinese developer forum) to discuss it. We shared our findings with Apple on February 19, and Apple removed the app from the App Store later that day.

ZergHelper’s main functionality appeared to be to provide another App Store that includes pirated and cracked iOS apps and games. The app was developed by a company in China that named its main product “XY Helper”. ZergHelper was the non-jailbroken and “official App Store” version of this product.

Use and Misuse of NSUserDefaults

David Smith (tweet):

If you find yourself needing to do anything else to read a preference, you should take a step back and reconsider: caching values from NSUserDefaults is usually unnecessary, since it’s extremely fast to read from. Calling -synchronize before reading a value is always unnecessary. Responding when the value changes is almost always unnecessary, since the nature of “settings” is that they control what a program does when it does it, rather than actually causing it to do something. Having an alternate code path for “no value set” is also generally unnecessary, as you can provide a default value instead (see Providing Default Values below).

[…]

You can call -registerDefaults: as many times as you like, and it will combine the dictionaries that you pass it, which means you can keep registration of settings near the code that cares about them.

I used to use -registerDefaults: more, but now I mostly use a category method like:

- (id)mjtObjectForKey:(NSString *)key defaultValue:(id)defaultValue;

that returns defaultValue if NSUserDefaults returns nil. This is more convenient (one line of code) and makes it impossible to look up a key that has not been registered.

In the sandboxed world of modern OSX and all iOS versions, NSUserDefaults is initially limited to operating in your app’s sandbox; if you use -initWithSuiteName: you’ll just get a new store of user defaults that’s still not shared.

[…]

NSUserDefaults does not have any form of transaction system, so there’s no way to guarantee that multiple changes will only be seen all at once. Another program could see the first change before the second finishes.

[…]

Neither NSUserDefaultsDidChangeNotification nor KVO notify of changes made by other programs

-registerDefaults: operates on every NSUserDefaults instance, not just the one you call it on

Update (2016-02-22): One of the issues I’ve found is that, starting with Mac OS X 10.10, NSUserDefaults ignores any attempt to set an object that is a dictionary or array bridged from Python.

Amazon Increases Free Shipping Threshold

Amazon:

Orders including $25 or more of eligible books qualify for FREE Shipping. All orders of $49 or more of eligible items across any product category also qualify for FREE Shipping. With free shipping, your order will be delivered 5-8 business days after all of your items are available to ship, including pre-order items.

Previously it was $35, and it was $25 before that. However, the delivery time has been reduced from 9 business days to 8.