Archive for June 4, 2019

Tuesday, June 4, 2019

macOS 10.15 Switches From bash to zsh

Apple (Hacker News):

Starting with the macOS Catalina beta, your Mac uses zsh as the default login shell and interactive shell. You can make zsh the default in earlier versions of macOS as well.

[…]

zsh is highly compatible with the Bourne shell (sh) and mostly compatible with bash, with some differences. For more about zsh and its comprehensive command-line completion system, enter man zsh in Terminal.

It doesn’t change the default shell of existing accounts.

Greg Hurrell:

I like Zsh and use it, but I don’t know why anyone would be excited about this. It is probably going to be a years-old version anyway. I’ll still be installing it with Homebrew.

It actually seems to be the current version, 5.7.1.

See also: Wikipedia.

Update (2019-06-04): Greg Hurrell:

All of this probably motivated by a desire to get away from GPL to MIT.

I think that’s it. The version of bash included is from 2007.

Previously: Mojave’s rsync From the Days of Tiger.

Update (2019-06-06): Matthew (2002, tweet):

As of 10.10 the remaining GPL-only packages seemed to be JavaScriptCore, bash, bc, emacs, efax, gnudiff, gnuserv, gnutar, groff, gpatch, keymgr, libstdcxx, man, nano, screen, texinfo, and uucp. I include this list as Apple have stopped listing the licenses on their download page, to make it harder to track their progress…

The trend supports the idea that Apple is trying to remove all GPL-licensed software from OS X.

See also: Slashdot, Hacker News.

Armin Briegel:

Apple is strongly messaging that you should switch shells. This is different from the last switch in Mac OS X 10.3 Panther, when Apple switched the default to bash, but didn’t really care if you remained on tcsh. In fact, tcsh is still present on macOS.

Apple’s messaging should tell us, that the days of /bin/bash are numbered. Probably not very soon, but eventually keeping a more than ten year old version of bash on the system will turn into a liability. The built-in bash had to be patched in 2014 to mitigate the ‘Shellshock’ vulnerability. At some point Apple will consider the cost of continued maintenance too high.

Update (2019-10-11): snipe:

zsh is the new default shell for MacOS Catalina. To change it back and get rid of the super annoying terminal message, enter:

chsh -s /bin/bash

in a terminal, then open /home/your-user/.bash_profile & add export BASH_SILENCE_DEPRECATION_WARNING=1

Scripting Languages to Be Removed

Xcode 11 Beta Release Notes:

Scripting language runtimes such as Python, Ruby, and Perl are included in macOS for compatibility with legacy software. In future versions of macOS, scripting language runtimes won’t be available by default, and may require you to install an additional package. If your software depends on scripting languages, it’s recommended that you bundle the runtime within the app.

[…]

Use of Python 2.7 isn’t recommended. This version is included in macOS for compatibility with legacy software. Future versions of macOS won’t include Python 2.7. Instead, it’s recommended that you run python3 in Terminal.

This is a big deal in terms of philosophy; Apple once touted the built-in Unix tool suite as a Mac advantage. And it also means lots of practical changes; installers and AppleScripts can no longer lean on other scripting languages.

Marcin Krzyzanowski:

The same year Microsoft is proud to add a new terminal app with the full support of bash and everything to please developers. Apple decided to deprecate scripting on macOS and replace bash with zsh.

No explanation was given, but we’re curious. Maybe there’s a valid reason.

Joe Groff:

The downside of all that stuff getting included was that it could never be upgraded, because apps would depend on the exact versions that shipped a decade ago.

It still doesn’t make sense to me because these scripting languages aren’t huge, and Apple did update them and remove old versions from time-to-time.

Previously:

Update (2019-06-04): Adam Maxwell:

I guess the kids all think this is a good change, because now no one will have an old version of Python or Perl. Instead, they’ll have ten of them, and you’ll have to play with paths to pick the right one, like Windows.

Update (2019-06-06): See also: Lobsters, Reddit, Hacker News.

Update (2019-06-10): Dr. Drang:

One of the great values of Apple providing scripting languages with macOS is to make it easy for regular users to turn themselves into occasional scripters. People who program all the time seem to forget how terrifying the idea of writing code is to those who’ve never done it before. Even “power users” quail at the idea of scripting until they’ve done it a few times and survived. If the first step in learning to script is Install Python via Homebrew, they are simply going to pass.

These new scripters don’t care, for example, that the Apple-supplied Python is out of date, and there’s no reason for them to. Python 2.7 is a perfectly good starting point, as is Perl 5.18 and Ruby 2.3.

Removing scripting languages also means that those of us who know how to use them can’t send scripts to our friends to help them automate their tasks. I’m perfectly happy to “slum” in Python 2 (oh dear, I have to use the format function instead of f-strings) if that’s what it takes.

Microsoft (via Hacker News):

Microsoft has been involved with the Python community for over twelve years, and currently employ four of the key contributors to the language and primary runtime. The growth of Python has been incredible, as it finds homes among data scientists, web developers, system administrators, and students, and roughly half of this work is already happening on Windows.

[…]

Finally, with the May 2019 Windows Update, we are completing the picture. While Python continues to remain completely independent from the operating system, every install of Windows will include python and python3 commands that take you directly to the Python store page.

Update (2019-06-12): Kyle Crawford:

Scripting runtimes and bridges should be included in an OS. I like Swift. I’m comfortable with Swift. But I also like ruby and python. And often they are a better fit for the job. I’ve written a lot of Swift but I still write lots of ruby and python.

Update (2019-06-27): Curtis Wilcox:

Although multiple apps needing their own copies of Perl, for instance, might seem inefficient, developers need to include only the runtime and exact libraries they use, not a full scripting language installation. Some apps have already taken this route to keep using Java, and many modern apps rely on the Electron framework, which includes Node to run JavaScript.

If you look at the sizes of the different parts of each installation, I don’t see how shipping separate copies of the runtime would ever come out ahead. The Electron framework in a single app is larger than the entire system-provided Perl.

Brett Terpstra:

Considering how integral these runtimes are to my own daily use of my Mac, this is a real annoyance. I’m fully capable of installing them myself, but I still find the decision baffling.

[…]

So while this might not be a huge blow for me, it’s an impediment to anyone who uses my projects that isn’t a Terminal nerd.

[…]

So the question is why? I can’t wrap my head around any real benefit to Apple’s line of reasoning on this. They’ve not been great about keeping the runtimes up to date, but that’s actually been a boon, requiring less effort to keep scripts working with every OS release. These runtimes were even touted as a selling point in the past, and Microsoft is just now starting to add tools like this to the default Windows install. And they’re including a sexy Terminal. So why is Apple moving in the opposite direction?

Brent Simmons:

I’m one of those people who just use whatever’s on the system.

Me, too.

Peter N Lewis:

Something that only just occurred to me is this will break every single script with #!/usr/bin/perl irretrievably since /usr/bin is a SIP protected directory. Every one will need to be edited.

Brent Simmons:

Having to install Python/Ruby/etc. manually is gate-keeping. It might be easy for pros, but it’s not easy for everybody.

Brent Simmons:

Are we going to ask that person to figure out how to install Ruby? If there are one-click installers out there, are we going to ask them to figure out which one is actually reputable and safe?

Curiosity like this is one of the ways new developers are made. I worry that the less the Mac is tinkerable out-of-the-box, the fewer developers we’ll get.

Nick Heer:

But something about this feels both arbitrary and inherently wrong. The beautiful thing about MacOS is that there’s a visually coherent interaction layer that most users spend most of their time in, but anyone — including a lunkhead like me — can fire up the Terminal at any time and run a script. Having that capability at one’s fingertips just below the surface, as well as programs like Homebrew and MacPorts, makes the Mac feel limitless.

Xcode 11 Beta

Xcode 11 Beta Release Notes:

Xcode 11 beta supports development with SwiftUI.

Xcode supports uploading apps from the Organizer window or from the command line with xcodebuild or xcrun altool. Application Loader is no longer included with Xcode.

[…]

LaunchServices on macOS now respects the selected Xcode when launching Instruments, Simulator, and other developer tools embedded within Xcode.

[…]

Editors can be added to any window without needing the Assistant Editor.

[…]

Run script phases and custom build rules may declare and emit a dependencies file, in the Makefile-style .d format output used by some compilers and build tools.

[…]

XCFrameworks make it possible to bundle a binary framework or library for multiple platforms —including iOS devices, iOS simulators, and UIKit for Mac — into a single distributable .xcframework bundle that your developers can use within their own applications.

[…]

When a data model configuration supports CloudKit, the data model editor performs additional validation to ensure the model conforms to the requirements for Core Data CloudKit support.

[…]

A view controller method annotated with the new @IBSegueAction attribute can be used to create a segue’s destination view controller in code, using a custom initializer with any required values. This makes it possible to use view controllers with non-optional initialization requirements in storyboards.

[…]

LLDB’s Python scripting is now based on Python 3. If you are using Python extensions that aren’t compatible with Python 3, they will break.

[…]

Xcode 11’s source editor introduces a mini map of the file. The mini map includes legible text for Mark:, highlighted lines with errors and warnings, source control changes, breakpoints, and highlighted Find results.

[…]

Test Plans are a new way to manage which tests run, and how those tests run. Schemes can reference multiple test plans, and define a default test plan for automation.

[…]

XCTest includes augmented performance testing capabilities with the new measureWithMetrics:options:block: method and related methods.

Plus an unwrap method.

Peter Steinberger:

There’s a new sidebar!

Jordan Rose:

I’ve been living on the new Xcode 11 source editing UI and it’s great. The full/assistant/comparison/authors/history pentachotomy is gone; now it’s “editors with sidebars” and “comparison mode”. And the inline diff means I don’t jump into comparison mode nearly as often.

Peter Steinberger:

Guess the device support trick no longer works/needs an update?

Tanner Bennett:

Goodbyyyyyye .xcodeproj! If you haven't heard, you can open Package.swift directly into Xcode now. I assume it just generates the project file in a temporary location.

You can even run tests!

Joe Fabisevich:

Xcode 11 has QuickSpec built in?

Previously:

Update (2019-06-06): Matt Diephouse:

Things that don’t work in the Xcode 11b1 UI:

— Creating a new target in a project
— Creating a new project in a workspace
— Deleting a project in a workspace
— The “Edit Scheme…” keyboard shortcut
— Deleting a build setting

Mike Hay:

Xcode’s source code editor does a lot of neat stuff, but much of it is a bit hard to find.

Here are four examples of things that you might not have realized that you could do in Xcode’s editor.

These also work in Xcode 10.

Dash:

The Apple API Reference docset was updated to work with the latest docs from the Xcode 11 beta.

To use the Xcode 11 beta docs, make sure xcode-select -p (in Terminal) points to the location where you have Xcode 11 installed.

Update (2019-06-13): Steve Troughton-Smith:

Hold the command key (⌘) while you mouse over the new Xcode 11 mini map to show all your methods and properties

Catalyst

iPad Apps for Mac Human Interface Guidelines:

When you bring your iPad app to Mac, you give people the opportunity to enjoy your app in the context of the Mac’s large display, outstanding native performance, and ample local storage.

[…]

To ensure that your app gives people a rich Mac experience, it’s essential to enhance this foundation and go beyond simply displaying your iOS UI in a macOS window.

Creating a Mac Version of Your iPad App:

Starting with Xcode 11, you can create a Mac version of your iPad app using UIKit. Configuring your app to run in macOS takes just a click in a checkbox. However, more steps may be needed depending on the system features and frameworks your app uses.

Optimizing Your iPad App for Mac:

The Mac version of your iPad app supports many system features found in macOS without requiring any effort from you. […] You can, however, extend your app to take advantage of even more system features.

Dieter Bohn:

One notable thing Apple told me: it won’t try to force all Catalyst sales through the Mac App Store. If you convert your iOS app to the Mac, you can sell it however you want without paying Apple a 30% commission.

It’s not clear yet whether they can be unsandboxed. The documentation simply says that Xcode auto-adds the com.apple.security.app-sandbox entitlement.

Ryan Christoffel:

Project Catalyst may not have received as much stage time as expected during the WWDC keynote, but it is a huge development for the future of the Mac and iPad alike.

Twitter:

Twitter is thrilled to announce we are bringing the Twitter for iPad experience to the Mac!

[…]

Apple’s exciting new technology empowers Twitter to easily bring our entire 1.5 million line code base from iOS to the Mac, allowing ongoing full feature parity with our iPad app, and enhanced with the macOS experience that will make Twitter feel right at home on your Mac.

This Twitter for Mac will be fully native, with all the native features of a Mac app. Multiple windows, window resizing, drag and drop, dark mode, keyboard shortcuts, notifications and more!

Thanks to Apple’s technology, the new Twitter for Mac will get regular updates, just like Twitter for iPad and iPhone. It’s the best of both worlds: the full Twitter experience enhanced to run natively on a Mac!

Max Seelemann:

SwiftUI ist the new Cocoa. It’s to UIKit and AppKit what Cocoa was to Carbon.

Marzipan is transitional technology. Once iOS apps are built with SwiftUI, Marzipan will become obsolete.

Jacob Gorban:

So all the AppKit developers who were concerned that Marzipan would herald the beginning of the end of AppKit (myself included) can relax.

It won’t be Marzipan (officially Catalyst). It’ll be SwiftUI.

Drew McCormack:

So Catalyst turned out to be “Carbon” I guess.

Kuba Suder:

Honestly, I know everyone will hear what they want to hear, but so far it absolutely does not look like UIKit is taking over Mac (or going to soon). They said it’s “good for some kinds of apps”, AppKit is still getting improvements and is fully integrated with SwiftUI.

Jeff Nadeau:

Say hi to NSSwitch.

It supports the full NSControl API including bindings and formatters. It’s keyboard-accessible (spacebar and arrows), has AX options like state indicators, the works.

Jeff Nadeau:

Last bit on the Mac switch control: by default the SwiftUI Toggle control is a checkbox on Mac, but you can request a switch using .toggleStyle(.switch).

Don’t go replacing all your checkboxes with it. It’s really for “big switches”, not lists of preferences.

I expect many apps will use them that way, anyway.

Steve Troughton-Smith:

Picker controls are completely unchanged in Catalina’s UIKit

Steve Troughton-Smith:

Apple is very much downplaying UIKit on the Mac this year, trying to thread the needle of Mac developer/user perception. However, I think it’s clear the one-two punch of Catalyst and SwiftUI has all but ensured that the future of the Mac UI is shared with iOS

David Clarke:

The nail in that coffin is the fact that they didn’t implement any connection between that and AppKit. That’s going to do more than convince users, it’ll win over developers very quickly. No one will want to work without it soon. Therefore that’s what users will get used to.

Steve Troughton-Smith:

Apple made less attempt to show that Catalyst apps can be good than I did in three blog posts. I think that’s a mistake.

Kyle Howells:

I’m still waiting for Apple to show a good high information density mouse focused app made with it (NSTableView style grid of information?).

Music and Podcasts may look the same (good), but they both look like iPad apps; with giant touch targets and massive list row heights.

Dieter Bohn:

Regarding last week’s Mazipan (now Catalyst) video: Apple hasn’t shown enough today to give me confidence these will be good. I am pretty worried about these apps. Cut for time, maybe, but I fear the consumer Mac is in a precarious position

Steve Troughton-Smith:

As far as I can tell, window title visibility is the only concession apart from window title that we get in Catalyst; there’s no way to set minimum/maximum content sizes, window style mask, etc

Steve Troughton-Smith:

Bafflingly, Apple hasn’t yet shipped UIUserInterfaceIdiomMac in Catalina, which means the 77% scaling is here to stay. Is that really not something coming this year? 😱

Michael Love:

Bummer on macOS/Catalyst: static libraries from iOS Simulator and from regular macOS won’t work, even if they’re pure C/C++ and don’t make any use of Cocoa or higher-level framework code. May be able to hack Mach-O header loading commands to work around this but a big pain.

Drew McCormack:

That was quite a day at WWDC. My big take aways:

1. NeXT is finally dead. ObjC and IB are done. AppKit too.
2. React has won (…like it or not).
3. Mac-specific software is not long for this Earth. Not a single ADA winner was for macOS.

Steve Troughton-Smith:

I’ve seen people wondering how different Catalina’s Catalyst is from Mojave’s Marzipan: the process architecture is different, but overall it’s very similar. Same issues, same bugs as marzipanified apps from a year ago; more of the holes have been filled+more frameworks ported

Peter Steinberger:

Xcode automatically adds “uikitformac” to the bundle ID for Catalyst builds.

Steve Troughton-Smith:

which is a pain in the ass if you support iCloud. I have no idea yet how to fix it

Previously:

Update (2019-06-04): Colin Cornaby:

The other interesting thing to me is how Swift UI still has to be hosted inside a UIKit or AppKit app. It actually massively compliments AppKit by giving AppKit a path to share UI with a UIKit app.

If you’re an AppKit developer right now, the best path doesn’t look like tearing down and porting to Catalyst. It looks like starting to build shared SwiftUI components where you can.

Wil Shipley:

SwiftUI : Cocoa :: Catalyst : Carbon

Update (2019-06-06): Matt Birchler:

Reasons to create a Mac app based on your iPad app. They specified that if you already have a great Mac app then there’s no compelling reason to use this.

Kyle Howells (MacRumors):

[regarding Twitter] I can never understand how companies can take indie apps maintained by 1 person and grow them into 100+ developer Goliaths, that seem to have the same or fewer features.

How can tiny teams make native Tweetbot and Twitterrific for multiple platforms, but Twitter itself can’t do that without Catalyst?

Update (2019-06-19): Steve Troughton-Smith:

There seems to be no way for a Catalyst app to ‘share purchase’ with an iOS app(?), which would put me off shipping anything with it. And due to the enforced bundle ID prefix I can’t even use UIKit to replace my existing Mac app on the App Store(?), which I would do for sure

Peter Steinberger:

If you want to share a subscription between iOS and Mac/Catalyst, you’ll have to do it all yourself. Apple has no solution for that yet. iCloud Containers are one option, but I’ll probably go with @RevenueCat

John Gruber:

Catalyst, from what Apple revealed this week, is a sideshow for games, toy apps, and media consumption apps.

John Gruber:

Who did we see in the keynote raving about Catalyst? Twitter. A poorly-run company with no strategy. They had a great Mac client. They also had arguably the world’s most innovative iPad app. They threw both away because their execs were too dumb to recognize what they had.

Tanner Bennett:

Odd comparison, but: the Mac developer who says Catalyst will be the end of Electron is like the web developer who says web apps will be the end of native.

They’re going to co-exist forever. But it’s amusing how the extremists on each side are convinced the other is doomed

Pádraig Kennedy:

The near-universal excitement about SwiftUI among long time Mac devs really undermines the critique that they are all stuck in their ways and defensive about change. They rightly just didn’t want to run a weirdo iOS app on their Mac.

Steve Troughton-Smith:

“Just follow this twelve-step process to opt out of the automatic uikitformac bundle identifier prefix!” 😪

Daniel Jalkut:

This is a huge shortcoming for the App Store as Apple broadens the appeal for cross-platform apps without improving the options for “single point of sale.” Kudos to @RevenueCat for filling the void.

Steve Troughton-Smith:

Embed your new macOS bundle in your app and make its inclusion conditional to macOS only.

It’s as simple as that! Now you have a loadable bundle that is built with the Mac SDK, and thus has access to all of AppKit. All you have to do is load it manually when you detect you’re running on macOS.

Steve Troughton-Smith:

Re-watching Catalyst sessions, it seems clear that Apple expects devs to offer brand new app SKUs for the Mac App Store w/ no shared purchase, shared IAPs, shared subscriptions. I can’t ship on macOS like that, so if that doesn’t change before Sept, that makes Catalyst DOA for me

That’s a huge part of Catalyst that’s fundamentally broken, and not in a small way. It’s hard enough to get users to pay for apps in the first place; forcing them to pay again for the Mac will scupper many apps that wanted to support Mac but not commit to standalone Mac app

If you want to share an app record between macOS and iOS, and share purchases/IAPs/subscriptions, you better get your feedback in now because if Apple doesn’t course-correct you won’t be able to ship on the Mac for another year at the least

Markus Müller-Simhofer:

I’m very biased here, but I think for premium Mac apps this is a good thing. This will ensure that Catalyst apps won’t immediately bring down the higher MAS price level. But I agree, customers don’t understand why they have to pay two times and Catalyst isn’t helping.

Steve Troughton-Smith:

Apple didn’t show off anything at WWDC to enable developers to do anything more than ‘dump their iPad UI on Mac’. That clearly wasn’t the message (despite it being possible), and isn’t documented at all

Michael Love:

Confirmation from Apple that they do not consider Simulator and Catalyst binaries to be ABI compatible and so are presumably not going to provide a solution to embed libraries from the former in the latter.

Steve Troughton-Smith:

Since Apple’s making a point to treat Catalyst apps as ‘true Mac apps’, that means that your app can do what any other Mac app can do: embed an AppKit-based bundle or framework, and load it at runtime as a plugin.

Colin Cornaby:

I’m going to make an absurdly long term prediction: Catalyst is going to be deprecated at the same time as UIKit. Could be a decade before we get there. But it’s not going to be the future environment that SwiftUI is built on.

John Gruber:

Resizable windows, drag and drop support, keyboard support. Wow! What a great testimony to Catalyst that Mac users can expect such advanced features. Maybe we’ll even be able to copy and paste text.

Update (2019-08-05): Peter Steinberger:

We’re ~4 weeks away from the GM and there’s still no real answer if AppKit bundles are allowed on Mac Catalyst. The clearest reply I got today was:

“We do not recommend doing this and cannot guarantee support in the future.”

So… it’s ok? It will pass Mac App Store?

My guess: Any Mac Catalyst app that isn’t a game and doesn’t suck will use this approach. It will be a critical mass. They will have to ensure things don’t break in 10.15.

Having sample code how to do this and fail gracefully would be great. Or having any sample code at all…

Syncing Core Data With CloudKit and NSPersistentCloudKitContainer

WWDC Session 202:

CloudKit offers powerful, cloud-syncing technology while Core Data provides extensive data modeling and persistence APIs. Learn about combining these complementary technologies to easily build cloud-backed applications. See how new Core Data APIs make it easy to manage the flow of data through your application, as well as in and out of CloudKit. Join us to learn more about combining these frameworks to provide a great experience across all your customers’ devices.

See also:

This is great to see, although for all the specific use cases I have in mind it would likely be more appropriate to use CloudKit directly. NSPersistentCloudKitContainer seems too automatic/opaque. (I say this before the session has taken place, though.)

Hunter Hillegas:

It’s a whole new managed approach where Core Data owns the CloudKit container and handles it. No clue how well it works.

Scott Perry:

Yup, Core Data CloudKit implements to-many relationships using CRDTs!

Drew McCormack:

Looking at the Core Data + CloudKit sample code, I have a feeling it might be a case of “fool me twice”. The fact that there is no global identifier for objects means you end up with a lot of messy deduplication code. Even a real basic app like the sample will scare many away.

Malcolm Hall:

You can get the global identifier using recordForManagedObjectID: it is stored in a meta data table, see attached screenshot:

Drew McCormack:

Yeah, I figured they had an id internally. My point is the user doesn’t seem to be able to pick one. Eg. merging tags is trivial if you can choose your own global id.

Malcolm Hall:

Oh so in the sample the deduplicate method is finding all tags with the same name, selecting one, and then setting all posts that are using any of the duplicates to the single tag. That’s pretty nasty.

Malcolm Hall:

So CloudKit Core Data Sync doesn’t merge in remote changes before syncing up the modified local record, and sends whole record not just changed fields, causing it to overwrite whatever changes another device made that was not yet received, seems like a dealbreaker.

Previously:

Update (2019-06-04): Malcolm Hall:

sadly Core Data CloudKit isn’t using CKReference for related records, just using a string field, thus losing integrity. I was really hoping they would make the public the CKReferenceActionValidate that Notes uses for e.g. the one-to-many folder notes relation.

Update (2019-06-06): Tom Harrington:

I went to the Core Data with CloudKit lab and, to their credit, the team did not run away and hide from me.

Update (2019-06-11): Bob Cottrell:

There was a throwaway line at the end of the Core Data and CloudKit session that talked about using Lamport timestamps to, you know, actually reflect the distributive nature of syncing. This was probably one of the most mind-blowing thoughts to come out of all the videos so far.

This is interesting in light of Malcolm Hall’s statement above that it does not seem to be properly merging the fields. He’s also said that he looked for timestamps in the syncing database but couldn’t find them. So it’s not clear to me what Core Data actually does.

Update (2019-06-17): Drew McCormack (tweet):

The general approach Apple are taking seems sound enough to me. They are using their new generational storage (with history) to track changes, and update the cloud from that. Effectively having “versions” in your store is very powerful, because you can bring in new sync changes while the UI of the app continues on oblivious. […] This is preferable to the nightmare we used to have with concurrent changes, where one context would be forced to merge in change notifications, and failing to do so would lead to exceptions.

[…]

The nature of Apple’s sync, where you effectively have distributed stores, means you can’t globally validate data like you can with a single central store. Apple have chosen to work around this by disallowing validation on relationships. It’s something to keep in mind. For example, if you have a one-to-one relationship that was previously non-optional, once you add sync, you will have to make it optional, and concurrent changes could lead to an orphaned object where the relationship is nil. This is not really avoidable in a decentralized syncing system, though how it is handled can vary. In Ensembles, the same problem can arise, and a delegate method is called to allow the app code to correct the issue (eg delete an object); Apple have opted to just disallow validation of relationships, which means you will probably need to add your own checks to “correct” the data.

Andy Bargh:

It also seems to be a bit of a partial solution as well as there doesn’t seem to be any support for the Public or Shared databases in there either which seems like a bit of an omission.

Music.app on macOS 10.15

Jason Snell:

The Music app is basically iTunes—but with a design update that puts Apple Music at the fore. You can still see your entire music library, of course, and even buy music on the iTunes Store if you want to. As someone who uses iTunes with Apple Music every day, I’m okay with this change. And if you click on the Songs view in the Library section of the sidebar, you will get your classic iTunes song list back, like it never left.

Nick Heer:

The preferences window in Music on Catalina is still modal, so all is right in the world.

Doug Adams:

I thought Apple would keep a “legacy” iTunes around, in the same way QuickTime Player 7 and Aperture were allowed to languish. But I’m guessing the new new media apps work well enough that such a strategy was deemed unnecessary.

[…]

Current iTunes scripts will not work with Music.app or AppleTV.app. At least, not without some slight modifications. Music.app’s scripting definitions file is virtually the same as iTunes (likewise the Apple TV.app).

[…]

No Column Browser (sad).

Damien Petrilli:

Seems that Apple Music is now the default on the Music App and that you have to enable the option “show iTunes Store” to purchase your music.

Bad sign for purchasers of music like me, and another crappy move from Apple trying to force its services upon users.

Adam Engst:

What about the syncing features of iTunes? macOS Catalina builds them into the Finder. Attach an iOS device to a Mac and it appears in a Finder window’s sidebar. Select it and what looks like the standard iTunes sync settings screen appears in the window. You won’t get syncing or management of iOS apps, but you’ll be able to back up, update, and restore devices from the Mac.

Juli Clover:

Apple told Ars Technica that on Windows, there will be no changes. Those who use iTunes on a PC to manage their devices, listen to music, and make iTunes purchases will be able to continue to do so.

Previously:

Update (2019-06-04): It does not seem to support Home Sharing. [Update (2019-06-06): It’s there but has moved to System Preferences.]

Update (2019-06-06): Apple (MacRumors):

macOS Catalina makes it faster and simpler to access all of your “ripped” or imported music, purchased media, and more. The new apps organize your media just like the same apps on iOS. Your entire media collection will find a new home and transition automatically into the new Apple Music, Apple TV, and Apple Podcasts apps. In addition, your previous iTunes Store purchases and synced libraries will not change on any of your devices.

Kirk McElhearn:

In essence, nothing much has changed. The iTunes name is still used for the iTunes Store, despite some publications claiming that the iTunes name was being retired, or that Apple was ending its music download service.

I don’t know… For years, people have been kvetching about iTunes, and all it took was for Apple to move a couple of media kinds to different apps, and to change the name of the music player, and everyone’s suddenly happy, but also dancing around the grave of an app that hasn’t really changed that much. You can still buy music from the iTunes Store, rip your CDs, sync your devices, make playlists, and so on.

Update (2019-08-22): Kirk McElhearn:

As I dig deeper, I find that a lot has been simplified. There are tasks I had described in my book that had multiple steps that are simpler, and there were often several ways to do something, whereas, now, there is generally just one. I find myself cutting large sections of my book’s content because of this simplification.

I will miss the column browser; I used this tool constantly to navigate my library by Genre, then Artist, then Album. With Artist, Album, and Genres view, it’s hard to get the big picture. If you have, say, 135 Grateful Dead albums, you need to scroll through the Grateful Dead entry to find the one you want, whereas in the column browser, I could quickly scan a concise list. Or when I wanted to listen to Kind of Blue, it took a few clicks, a quick scan, and I found the album.

The other feature I’ll miss is that in Songs view – that’s the one where you see items in a list – you can no longer display album artwork. I used that extensively, together with the column browser, as you can see above, because it’s a quick way to scan content to find what I want.

Update (2019-08-29): Kirk McElhearn:

One big change is the demise of the column browser, a unique tool in iTunes that lets you quickly scan and browse your library, and pick music to play.

[…]

I’ll miss this tool, which dates back to the first version of iTunes. (For screenshots, see this review of iTunes 1.0 on ATPM. One interesting quote from the review: “It may be noteworthy that the iTunes library can only hold 32,000 songs, though that should be plenty of room for most uses.”)

Update (2020-06-09): Damien Petrilli:

You know the code of iTunes was cleanly split when you receive in the TV App notifications that it failed to download new song you purchased...

Updates to the App Store Review Guidelines

Apple:

Guidelines 1.3 and 5.1.4. In order to help keep kids’ data private, apps in the kids category and apps intended for kids cannot include third-party advertising or analytics software and may not transmit data to third parties. This guideline is now enforced for new apps. Existing apps must follow this guideline by September 3, 2019.

[…]

Guideline 4.2.7. Remote desktop clients now include game consoles owned by the user. Software appearing in the client must be fully executed on the host device.

Peter Steinberger:

„Guideline 5.1.1(vii) (New). Apps that compile information from any source that is not directly from the user or without the user’s explicit consent, even public databases, are not permitted on the App Store.“ What would that be?

JC:

GPDR, basically you need their consent but also you can’t gather information on that user from public sources I.e their public github profile. I’m sure open datasets like Wikipedia are fine

Previously:

Update (2019-06-06): See also: Hacker News.

Update (2019-06-10): Jacob Eiting:

There’s an updated Apple Developer Program agreement and the oppressive language around subscription paywalls has been backed way down.

Schedule 2 Section 3.8 (b) has been totally re-written to only require title, length, and price.

[…]

The previous version required a ton of legalese on every paywall. This shouldn’t be required any longer.

Joe Cieplinski:

Tip for anyone with a subscription app: Submit a small bug fix soon, just to see if you get caught up in a rejection from a reviewer who doesn’t understand the new guidelines.

Not that I’m speaking from experience, or anything.

Previously: Acceptable Renewable Subscriptions Pitch Screens.

Update (2019-06-13): Rafał Kobyliński:

I believe min # of employees requirement is new: “To enroll in the Apple Developer Enterprise Program, your organization must be a legal entity with 100 or more employees.”

Sidecar

Apple (MacRumors):

Sidecar lets you extend your workspace by using your iPad as a second Mac display. Work in one app while you reference another or view your artwork on your Mac while you use tools and palettes on your iPad. You can also mirror the screens so they both display the same content, making it perfect for sharing exactly what you see with others.

Apple:

For apps with Touch Bar support, the controls appear at the bottom of your iPad screen — even if your Mac doesn’t have a Touch Bar.

Jason Snell:

While Luna Display was initially conceived as more or less what Sidecar does—let Mac users see their content on an iPad display and use the Apple Pencil to draw and otherwise interact with Mac content—it has come to be embraced as a tool to let iPad users control a Mac on the local network.

Well, guess what. You can’t initiate a Sidecar session from an iPad—it’s a Mac feature that is initiated from a Mac. Which means that everyone who has extolled the virtues of using Luna Display with a headless Mac mini won’t see that feature replaced by Sidecar.

Previously:

Update (2019-06-06): Steve Troughton-Smith:

To enable Sidecar on older Macs and devices (sadly, doesn’t work on mine):

Sidecar supports iMac 27" (Late 2015) or newer, MacBook Pro (2016) or newer, mac Mini (2018), Mac Pro (2019), MacBook Air (2018) , MacBook (Early 2016 or newer), and blacklists all the devices in the screenshot

defaults write com.apple.sidecar.display allowAllDevices -bool YES

Matt Ronge:

I wonder if it is using HEVC and that’s why it’s so limited

Dan Blondell:

This makes so much sense. I can’t think of why else my puny MacBook could do it but a Mac Pro couldn’t.

Sam Deane:

Biggest gripe with Sidecar so far: screen locking. It needs a way to sync unlocking the iPad with the Mac.

It’s a massive pain having to unlock both if you’ve stepped out for a minute - you unlock the Mac first and it can’t restore the connection to the iPad.

Update (2019-08-22): John Voorhees:

The core experience of using Sidecar is fantastic. Part of the reason is that running an iPad as a second display for a Mac with Sidecar is immediately familiar to anyone who has ever used multiple displays. The added screen real estate, portability, and functionality are part of the appeal too. Of course, there are differences that I’ll get into, but Sidecar is so close to a traditional dual-display setup that I expect it will become a natural extension of the way many people work on the Mac.

[…]

However, to understand the potential Sidecar unlocks, it’s necessary to first dive into the details of what the new feature enables as well as its limitations.

Apple Reverses Course on MDM and Parental Control Apps

Joe Rossignol:

As one of many updates to its App Store Review Guidelines this week, Apple has indicated that parental control app developers are again permitted to use Mobile Device Management (MDM) technology in their apps, so long as they do not sell, use, or disclose any data to third parties for any purpose.

Previously:

Update (2019-06-04): Russell Ivanovic:

Remember kids, running to the press never works 😉

Update (2019-07-15): Anna Washenko:

OurPact, an app that lets parents monitor and limit their children's use of technology, has returned to the App Store after being removed this spring. Its creators posted a social message to followers informing them of the app’s return to iOS earlier this week.