Archive for September 19, 2018

Wednesday, September 19, 2018 [Tweets] [Favorites]

Safari 12

John Gruber:

My favorite new feature today, of course, is the ability to show website favicons in Safari tabs — a feature now available in Safari 12 and iOS 12. They’re off by default, but the way they work on Mac, iPad, and iPhone is just perfect.

This is great.

Ricky Mondello:

I’m going to highlight a few iCloud Keychain, Safari, and WebKit features and improvements that mean a lot to me. (Thread…)


While you’re in Safari 12’s preferences on macOS, stop by the Passwords pane, which has a new look and a feature to show you where you’re reusing passwords.


The link to change your password for a website through iCloud Keychain on iOS 12 and Safari 12 allows for web developers to help streamline the password change process.


If you’ve ever had a website insist on using a pop-up window to do something important, you’ll appreciate Safari 12’s new affordance for allowing a blocked pop-up from a website.

Dan Moren:

Firstly, Safari no longer supports extensions cryptographically signed by developers themselves. The browser also implements a new Safari App Extensions API, which doesn’t have all the features of the previous, now deprecated extension API, causing some developers to cease work on extensions.

Howard Oakley:

There is, though, a worrying anomaly in Safari 12’s handling of plugins. XProtect is the tool which determines the oldest version of vulnerable plugins such as Flash which are permitted to operate. With Apple’s six-month neglect of updating the XProtect database, macOS and Safari 12 currently tolerate six-month old versions of Flash and other vulnerable plugins.

hax (via Hacker News):

Per my testing, the bug is due to the optimization of array initializers in which all values are primitive literals. For example, () => [1, null, 'x'] will result in such an array; all returned array references from this lambda will link to the same memory address, and some method like toString() will be cached. Normally, any mutable operation on such arrays will copy the data to a separate memory space and link to it; this is called copy-on-write, or CoW for short.

The reverse() method mutates the array, so it should trigger a copy-on-write. Apparently, it no longer does so, which causes the bug you’re seeing.

Previously: Ghostery Lite, Safari Should Display Favicons in Its Tabs, Intelligent Tracking Prevention 2.0.

Update (2018-09-27): Chris Nebel:

Notice Safari launching faster in macOS #Mojave, especially if you have a HDD? You’re welcome.


1. Safari no longer loads a redundant listing of all your LocalStorage databases at launch. This could take several seconds on an HDD.

2. Safari now only spawns WebContent processes at launch for tabs that are visible. This is a big deal if you have State Restoration on and leave lots of tabs open; it saves around half a second per tab on an HDD.

Update (2018-10-03): William Tsing:

“Safari turned off extensions that slow down web browsing.” In the most literal sense, this is true.  Browsing without any extensions at all would most likely be fractionally faster. This is not why Safari turned them off, however.

“You can find newer extensions in the App Store.” This is literally true. But can you find newer versions of the specific extensions referenced? Who knows? The extensions in the screenshot at the top were most likely turned off because they did not come from the extension gallery to begin with, and only one had a new app extension available at time of writing.

Apple does not communicate any of this via the dialog box.

Apple Watch Series 4

John Gruber:

Apple Watch is a hit despite this because it’s such a great product. People love it for what it does, how it works, and for how nice it actually is. Apple Watch is thriving despite being far from the nicest watch because all of the watches that are nicer do so much less. That’s the flip side of Apple Watch’s anomalous status in Apple history. Apple’s products, especially new ones, generally do less than their competitors. Apple Watch is taking over the watch industry because it does so very, very much more than traditional watches could ever do.


That the Series 4 watch is rendered so much thinner than the Series 3 even though the stated difference in thickness is only 0.7 mm may strike you as shameless marketing exaggeration. But after wearing and looking at a Series 4 watch on my wrist all week, I’d say this illustration conveys the difference completely accurately, and far better than any side-by-side photograph could.


This makes me think it took Apple four years to get to the point where the Digital Crown and Taptic Engine in production Apple Watches feel the way they’ve wanted them to feel all along.


But the other thing I’ve found is that the older watch faces, at least the analog ones, don’t look as good on a Series 4 watch as they do on Series 0-3. The old faces look better on the old watches and the new faces look better on the new ones.

Unfortunately, it is still thicker than the Series 0 and Series 1 watches.

Previously: September 2018 Apple Event.

Update (2018-09-20): Dieter Bohn:

Here it is: my review of the Apple Watch Series 4. Spoiler: it’s super great and makes me bummed I sprung for the Series 3 last year. It’s the best smartwatch by an order of magnitude.


These Apple Watch Series 4 faces are more special than Apple let on during their keynote. They’re not rendered—each face is high resolution video shot in a studio using real fire, water and vapor elements. This exclusive behind-the-scenes video shows how they were made.

New Objective-C Bridges

Ronald Oussoren:

The release of macOS 10.14 is near, it is therefore time to release a new major version of PyObjC. I’ve uploaded PyObjC to PyPI, it can be installed using “python3 -m pip install -U pyobjc”.


The main feature of this release is the addition of support for APIs introduced in macOS 10.14 (Mojave).

FMJS (Gus Mueller):

An incomplete and experimental JavaScript to C/Cocoa bridge

Swift 4.2 Released

Ted Kremenek:

Swift 4.2 is now officially released! Swift 4.2 builds on the strengths of Swift 4, delivering faster compile times, improving the debugging experience, updating the standard library, and converging on binary compatibility.


The standard library in Swift 4.2 includes a number of new features, including improvements to the Hashable protocol as well as a new unified set of randomization functions and protocols.

See more at:


A year later, and Swift 4.2 shipped with a ship-stopper KVO bug still unresolved. Don’t use the Swift KVO syntax in an iOS app unless you want random crashes.

Previously: Swift 4.2.

Update (2018-09-20): John Sundell:

Instead of manually defining our font dictionary, like we do above, let’s take a look at how Swift 4.2’s CaseIterable can help us avoid bugs and make our code more consistent when defining enum-keyed dictionaries.

Soroush Khanlou:

Ideally, you’d be able to initialize the Hasher with a seed, instead of mixing it in. Swift’s Hasher uses a different seed for each launch of the application (unless you set an environment variable which they added for consistent hashing between launch, mostly for testing purposes), meaning you can’t write these values to disk. If we controlled the seed of the Hasher, then we could write these values to disk as well. As this Bloom filter currently stands, it should only be used for in-memory caches.

Renaud Lienhart:

I think this is new in the Swift 4.2 toolchain: it is now possible to declare a nested type in an extension, in a different file than the one with the parent type’s declaration. This will clean up things nicely

Update (2018-09-24): See also: Swift 4.2 Release Notes for Xcode 10.

Bruno Rocha:

You can reverse engineer the resulting binary, but it would be painfully hard to understand what the [CaseIterable] assembly means. Another option is to fork the Swift compiler and attach lldb to it, but you would need to know what to breakpoint in the first place - which I have no idea.

Luckily, the Swift compiler in your Xcode’s toolchain offers several arguments that allow you to extract human-readable files that represent “processed” versions of Swift source files, and one of these options allow you to retrieve the Abstract Syntax Tree (AST) of a file.

Apple’s Measure App and Accuracy

Kirk McElhearn:

I tried measure a number of objects, and two things were apparent. The first is that Measure is not very accurate, and the second is that the same object measured twice can return different dimensions.

Rejected for Mentioning a Pre-release macOS Version

Luc Vandal:

Apple: “Update and submit your Mac apps for Mojave TODAY!”

Me: Ok!

App Store Connect: Can’t talk about Mojave in your release notes.


How the hell do I inform my users and potential customers that Screens is ready for Mojave?

This is a longstanding policy, and my apps have been rejected for it as well, but as far as I can tell it’s an unwritten rule. The closest thing I can find in Apple’s guidelines would seem to indicate that you should mention the new OS:

2.3.12 Apps must clearly describe new features and product changes in their “What’s New” text.

rather than imply it.

Aleksandar Vacić:

While Apple’s own apps happily mention Mojave in iWork updates I installed today.

Jonathan Deutsch:

I feel they always try to pull this... most of the time they relent if challenged. It is user-hostile to reject for this reason and wastes our time as one of the top questions we get near a new OS release date is “does it run on macOS 10.x?”

Update (2018-09-24): Greg Knauss:

Apple apparently considers referencing the devices that an application is designed to run on not relevant to its functionality.


Given Apple’s ad budget, the entire observable universe is aware what the new-model iPhones are called, and there’s simply no reason not to accurately reflect that in release notes. Not doing so makes the notes worse, and at the end of that particular road is a sign that just says, “Bugs fixed.”

Max Seelemann:

Funny. Seems that if you app is being metadata-rejected for mentioning an upcoming OS release by name, you just need to wait a bit and the review will “auto”-continue.

Update (2018-10-19): Patrick Balestra:

App Review team be like

Previously: Weather Alarms Scam.

Update (2018-10-22): Peter Steinberger:

Mentioning iPhone XR in changelog gets you rejected, but mentioning a non-existing iOS version is fine?

The Rise and Demise of RSS

Sinclair Target (Hacker News):

While Netscape was trying to win eyeballs in what became known as the “portal wars,” elsewhere on the web a new phenomenon known as “weblogging” was being pioneered. One of these pioneers was Dave Winer, CEO of a company called UserLand Software, which developed early content management systems that made blogging accessible to people without deep technical fluency. Winer ran his own blog, Scripting News, which today is one of the oldest blogs on the internet. More than a year before Netscape announced My Netscape Network, on December 15th, 1997, Winer published a post announcing that the blog would now be available in XML as well as HTML.


At the root of this disagreement about namespaces was a deeper disagreement about what RSS was even for. Winer had invented his Scripting News format to syndicate the posts he wrote for his blog. Guha and Libby at Netscape had designed RSS and called it “RDF Site Summary” because in their minds it was a way of recreating a site in miniature within Netscape’s online portal. Davis, writing to the Syndication mailing list, explained his view that RSS was “originally conceived as a way of building mini sitemaps,” and that now he and others wanted to expand RSS “to encompass more types of information than simple news headlines and to cater for the new uses of RSS that have emerged over the last 12 months.”


Today, RSS is not dead. But neither is it anywhere near as popular as it once was. Lots of people have offered explanations for why RSS lost its broad appeal. Perhaps the most persuasive explanation is exactly the one offered by Gillmor in 2009. Social networks, just like RSS, provide a feed featuring all the latest news on the internet. Social networks took over from RSS because they were simply better feeds. They also provide more benefits to the companies that own them.

Brent Simmons:

In a nutshell: judging RSS itself because RSS readers are not mainstream is to miss everything that RSS does. And judging RSS readers for not being mainstream is to judge them against expectations set by some hype artists more than a decade ago — but not by me or anybody else actually doing the work.

I don’t expect to see RSS readers running on every Mac and iOS device. This does not make it a failure.

CSS That Forces iOS to Reboot

Mitchel Broussard:

The vulnerability hits the WebKit rendering engine used in Safari by applying a CSS effect -- “backdrop-filter” -- that requires enough heavy graphics processing to cause iOS to crash completely.