Archive for August 26, 2020

Wednesday, August 26, 2020

Improved KVO in Big Sur

macOS Big Sur 11 beta 5:

Key-Value Observation removal facilities now employ deterministic bookkeeping methods. Cases that would have produced hard-to-diagnose crashes, especially those where KVO signals problems accessing deallocated observer pointers or observers associated with incorrect objects, now produce an exception pinpointing which observed object needs a missed removeObserver(_:) call, and by which observers. This exception was previously thrown as ‘best effort’ when KVO could detect the problem; the new deterministic bookkeeping allows it to be thrown for all cases where removeObserver(_:) is needed.

The improved determinism also allows improved Swift API handling. Instances of NSKeyValueObservation, produced by the Swift NSObject.observe(_:changeHandler:) method, take advantage of integration with this bookkeeping so they now invalidate automatically when the observed object is released, regardless of how the object implements its KVO behavior. This applies to all usage of this API in macOS 11 Big Sur beta, including on processes built with previous versions of the SDK, and eliminates certain classes of crashes that sometimes required using the legacy API instead.


Update (2020-08-28): David Smith:

Tip re the KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED method that I added years ago: it really means all observers of that object, not just the ones being notified. Most of the time it’s an unrelated one you forgot about.

(The reason is that determining which objects are being notified without introducing deadlocks requires dropping an internal lock, which would allow another thread to deallocate the observer out from under KVO, so it has to retain then figure out which are relevant)

Epic Will Stop Updating Fortnite for iOS and Mac

Epic (via MacRumors):

Apple is blocking Fortnite updates and new installs on the App Store, and has said they will terminate our ability to develop Fortnite for Apple devices. As a result, Fortnite’s newly released Chapter 2 - Season 4 update (v14.00), will not release on iOS and macOS on August 27.

Juli Clover:

Epic Games confirmed to The Verge that cross-platform play will not be possible, and iPhone, iPad, and Mac Fortnite players will only be able to play with one another. That means Fortnite users who have friends on other platforms will not be able to play with those friends.

John Gruber:

So what happens to the current version of Fortnite that’s already installed on iOS devices and is about to be out-of-date? Does it keep working, despite being out of date (and despite containing Epic’s rule-violating custom payment processing)? Or does Apple revoking Epic’s developer license invoke the kill switch that disables installed copies of Fortnite? What about the ability to re-download the current version if you (or a family-sharing member) previously downloaded it?

Surely, Apple will leave the installed apps in place and let customers blame Epic for missing the latest season and for any incompatibilities with new OS versions. Disabling installed apps would make Apple the bad guy and make users worry about their other purchases disappearing.

Jason Snell:

The thing is, I don’t really back all the actions of either party in this kerfuffle. Instead, I’m squarely on the side of the people who use technology. Let’s leave aside the tech giants. What are the outcomes that would most benefit regular users?


I’d like Apple to loosen up on its App Store restrictions, without sacrificing security and safety. I’d like Apple to let reputable companies process payments for digital goods directly, but I don’t want to pause every time an app asks me for money in fear that it’s a scam.

Above all else, I think that Apple has brought this scrutiny upon itself by failing to adapt to the times.

Eric Stromberg:

Ah yes, the quaint early days of App Store fights.

iBeer v. Apple foretold Epic v. Apple.


Update (2020-08-27): Rosyna Keller:

Why macOS?

Jeff Johnson:

According to the judge’s order, “Apple maintains separate developer agreements and developer program licensing agreements between Epic Games, Epic International and four other affiliated entities.” The competing interpretation is that the restraining order allows Apple to terminate the developer account of Epic Games, just not the developer accounts of the other 5 entities.

What’s the difference? In one word: Macintosh!

Even if the temporary restraining order does protect the Mac version, it expires in September.

Unity’s IPO Filing

Unity’s Form S-1 cites some risk factors (via Hacker News, Slashdot):

Operating system platform providers or application stores may change terms of service, policies or technical requirements to require us or our customers to change data collection and privacy practices, business models, operations, practices, advertising activities or application content, which could adversely impact our business.


In June 2020, Apple announced plans to require applications using its mobile operating system, iOS, to affirmatively (on an opt-in basis) obtain an end-user’s permission to “track them across apps or websites owned by other companies” or access their device’s advertising identifier for advertising and advertising measurement purposes, as well as other restrictions. We expect that Apple may implement these changes as early as fall of 2020. The timing and manner in which these plans will be implemented and the effect on our revenue are not yet clear, but these changes could adversely affect our revenue from our monetization products and potentially other Operate Solutions. In addition, if customers have applications removed from these third-party platforms because of a change in platform guidelines that impact our code or practices, we could be exposed to legal risk and lose customers. In addition, these platforms could change their business models and could, for example, increase application store fees to our customers, which could have an adverse impact on our business.


If we or our customers were to violate, or an operating system platform provider or application store believes that we or our customers have violated, its terms of service or policies, that operating system platform provider or application store could limit or discontinue our or our customers’ access to its platform or store. In some cases these requirements may not be clear and our interpretation of the requirements may not align with the interpretation of the operating system platform provider or application store, which could lead to inconsistent enforcement of these terms of service or policies against us or our customers, and could also result in the operating system platform provider or application store limiting or discontinuing access to its platform or store. An operating system platform provider or application store could also limit or discontinue our access to its platform or store if it establishes more favorable relationships with one or more of our competitors or it determines that it is in their business interests to do so.


Facebook SDK Will Not Adopt Apple’s iOS 14 Privacy Prompt

Juli Clover (also: Hacker News):

Facebook today warned advertisers that Apple’s upcoming anti-tracking tools could cause a more than 50 percent drop in Audience Network publisher revenue due to the removal of personalization from ads within apps.


In a blog post, Facebook said that it does not collect the identifier from advertisers (IDFA) from Facebook-owned apps on iOS 14 devices, as Apple added a feature that requires users to agree to ad tracking to prevent cross-app and cross-site tracking used to provide targeted ads.

Ryan Jones:

Just what Apple needed, another high-stakes game of chicken.


Per the rules any sort of tracking and sharing back to other sites requires the prompt (sometimes called fingerprinting, but now that it’s called that they will stop calling it that)


I understand why everyone’s instant reaction might be “good,” but if you are in the business of making an app, you will eventually need to get users for your app. Advertising is how that happens. That’s because app store discovery was nerfed years ago, to make store search ads a revenue source. This Apple IDFA change will likely force you to redirect your ad spend from the Facebook Audience Network to Apple search ads.


I hope you realize what this means is that ads as a monetization model for apps is getting decimated. These apps will now have to explore alternate monetization models such as either making themselves paid or subscriptions. And guess what, Apple takes a 30% cut of it.

It’s a win-win-win for Apple, which in a single stroke can protect your privacy, hurt their competitor, and get more ad and fee revenue. It’s not unlike how iOS’s Web browser restrictions can potentially offer security benefits but also encourage the flow of search placement revenue from Google and slow adoption of features that help Web apps compete with native ones.


Update (2020-08-27): Oluseyi Sonaiya:

Prior to the new OS, advertisers went to Facebook, who then fulfilled ad inventory on its own apps as well as others’. With the new OS, Facebook is having difficulty fulfilling inventory on others’, which I guess hurts other apps wholly dependent on Facebook?

So the best bang for your buck is still Facebook, changing little for the advertisers. It only hurts other publishers, if Facebook’s claim is taken at face value.

Plus anyone buying ads.

Update (2020-09-07): Apple (via Mark Gurman, Hacker News):

We are committed to ensuring users can choose whether or not they allow an app to track them. To give developers time to make necessary changes, apps will be required to obtain permission to track users starting early next year. More information, including an update to the App Store Review Guidelines, will follow this fall.

David Barnard:

Apps being able to do cost-effective marketing ultimately benefits everyone involved: consumers, Apple, developers, ad networks, and even the thousands of growth/ad tech/infrastructure companies (including @RevenueCat) that help facilitate that marketing.


Apple’s intent with the IDFA was to help facilitate that marketing measurement, but it quickly devolved into a tool for privacy invasion.


Killing the IDFA (by making it opt-in instead of opt-out) is absolutely the right thing for Apple to do. Apple is hitting the reset button on the tradeoff between privacy invasion and the beneficial aspects of being able to granularly measure marketing spend.

SKAdNetwork is the new IDFA — it’s Apple’s attempt to facilitate cost-effective marketing on their platform. And I’m personally quite excited about SKAdNetwork. I’ve been hesitant to advertise my apps because I didn’t want to participate in the “data industrial complex”.

But SKAdNetwork is just not ready for prime time. And the current mobile ad ecosystem just isn’t able to absorb this big of a change this quickly, as was evidenced by Facebook’s hint that it would have to completely abandon the Facebook Audience Network on iOS.

Apple delaying the privacy rules (if they do it) isn’t an admission that App Store profit is more important than user privacy, it’s an admission that ushering in a new privacy-friendly mobile marketing paradigm is too important to rush out half-baked.

Update (2020-09-18): George Deglin:

A feature in iOS that led to a vast ecosystem of advertising-supported apps is going away. Here’s what advertisers, developers, and consumers can expect over the coming months.

Exposure Notifications Without an App

Chance Miller (also: MacRumors):

At the time, Google and Apple also teased “phase two” of the technology. This is what is being released as part of iOS 13.7, and it allows users to opt-in to COVID-19 Exposure Notifications without installing an app. In order to verify a positive case, however, you still will need an app from a public health authority to confirm a positive COVID-19 case.


Unfortunately, Apple says that the availability of COVID-19 Exposure Notifications will still depend on support from local public health authorities, even as the ability to opt-in is now built directly into iOS 13.7.