Why does macOS keep downloading the incompatible app list?

Ever since I first developed SystHist and was able to see exactly which packages were being installed on my Macs, one repeated installation has puzzled me: the Incompatible App List used by System Migration. Every few weeks, on Sierra, High Sierra, and now Mojave, my Macs tend to download the package com.apple.pkg.incompatibleAppList and install it, even though it is almost always unchanged.


The package itself is quite innocent. It lives in /System/Library/PrivateFrameworks/SystemMigration.framework and is a bit of an oddity. Although it’s sort of security data – it gives System Migration a blacklist of apps and software which musn’t be migrated – it doesn’t seem to get pushed out as a silent update when it’s changed. Quite why it seemed to be updated every few weeks was a mystery to me, though.


On 31 December 2018, at 14:08, SystHist recorded another one of those mystery updates. The package com.apple.pkg.incompatibleAppList.10_14.16U1638 was installed yet again, although it hadn’t changed from the version dated 29 October 2018, which I had noticed had already been installed at least three times on this Mac.

Having caught it red-handed at last, it was time to take to the log and discover how this update came about. The short answer is com.apple.mac.install and System Migration, in its daemon systemmigrationd. What I had done to prompt this update was open Migration Assistant, to take a screenshot for an article for MacFormat.

The log entries are interesting, as they give insight into what Migration Assistant does before you even pass its first splash screen. When you open Migration Assistant, it starts up a group of tools including systemmigrationd, the daemon which apparently connects to another Mac for migration purposes. This is announced in the log by three entries:
36.705387 systemmigrationd: Starting
37.565241 systemmigrationd: New connection for System Selection
37.566009 systemmigrationd: Adding client <SMDSystemScanner_XPCClientConnection: 0x7fc448a17270%gt;

SystemMigrationUtils is then ready to inform a potential remote System Migration client of its currently-booted system using a UUID identifier for it, in case System Migration is going to be used in server mode.

The next task is to scan all available volumes, looking for those which can be used as sources for system migration. Each is checked by BSD mountpoint to see whether it’s a disk image, is encrypted or locked, and whether the scanner can mount it. Where a volume looks a promising migration source, SystemMigrationUtils looks for the Directory Services Database (DSDB) and SystemVersion.plist.

SystemMigrationUtils concurrently downloads the macOS software update catalogue, requests the Incompatible App List, then installs it:
38.250693 Checking Software Update catalog URL https://swscan.apple.com/content/catalogs/others/index-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog
52.064520 Catalog download complete.
52.917953 Update package downloaded to /var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/SMIncompatibleAppUpdate/CFNetworkDownload_JJrVAL.tmp
52.969824 Began to install update to Incompatible Software Data.

According to SystHist, at 14:08:53, the new copy of MigrationIncompatibleApplicationsList.plist and supporting files were installed in /System/Library/PrivateFrameworks/SystemMigration.framework.

The bug here appears to be that SystemMigrationUtils doesn’t check to see whether the list has changed since the last version installed, a minor point I know, but this repeated download was puzzling. I’m also not convinced that it is only downloaded when Migration Assistant is opened: I’m sure that even I don’t open that tool as often as the file has been updated here, and suspect that there may be other triggers.

There’s a lot to System Migration: its tools include SystemMigration, compatchecker, DirectorySurgeon, migrationhelper, migrationTool, removexattr (to strip extended attributes), safecp (for safe copying), and the systemmigrationd daemon itself, none of which seems to be documented in any way.

Among its more interesting components is a property list which gives installed macOS system sizes:

  • 10.6.8 – 4.2 GB
  • 10.7.5 – 6.5 GB
  • 10.8.5 – 5.2 GB
  • 10.9.5 – 9.5 GB
  • 10.10.5 – 7.3 GB
  • 10.11.6 – 8.1 GB
  • 10.12.6 – 6.6 GB
  • 10.13.4 – 7.5 GB
  • 10.14 – 7.8 GB

Who says that macOS just keeps growing and growing?