Hey everyone!
While 10.15.1 DP1 initially worked with no issues, I
did discover a problem that's existed in my wrapped frameworks since probably day one. Essentially, running
update_dyld_shared_cache
on a system with them installed can render your system unbootable. This is because the wrapper binaries lack version data, causing
dyld
to sometimes (I'm not exactly sure under which circumstances, it doesn't always happen) reject them completely.
Since the update triggered a cache rebuild, this manifested on my MacBook as a system that worked fine at first, but then stalled early in the boot process after a restart.
I've fixed this by adding
-compatibility_version 1.0.0 -current_version 1.0.0
to the linker arguments. Updated source code and wrapped frameworks are uploaded here as always, and I strongly recommend that you install them before attempting anything that might trigger a cache rebuild.
@dosdude1 @0403979 please update the versions in your patchers.
Edit: @dosdude1 has reported an issue reaching the setup screen with this version, so be cautious. I haven't experienced any problems (in fact, it solved my problems) but be warned.
I'll investigate further and post an update when I figure out what's going on. My apologies for the various unstable patches I've released recently... I hope I didn't cause anyone too much trouble.
Side note: for my wrappers, you don't actually have to replace anything but the binaries. Surprisingly, the Catalina WindowServer and other resources work fine. Just like the OpenGL disaster though, there is no reason to use this yet -- just good to keep in mind for future.
Last thing (sorry, this message is rapidly becoming a text wall): it
is possible to rebuild the prelinkedkernel in single-user mode or a root shell on Catalina. It's a real pain though. If anybody needs to do this (ie. recovering from a borked kext install), steps are as follows.
Mount both volumes as writable (the latter is only needed in single-user mode):
Code:
mount -uw /
mount -uw /System/Volumes/Data
Delete the old prelinkedkernels (these can cause problems at times):
Code:
rm /Library/Apple/System/Library/PrelinkedKernels/prelinkedkernel
rm /System/Library/PrelinkedKernels/prelinkedkernel
Rebuild and install the new one:
Code:
kextcache -i /
cp /Library/Apple/System/Library/PrelinkedKernels/prelinkedkernel /System/Library/PrelinkedKernels/
As you probably noticed, there are now
two of these little bastards, one on each volume. I'm not quite sure why.
kextcache
only seems to update the one in the data volume, but only the system volume one is used for booting. Hence the seeming ineffectuality of rebuilding it without making
both volumes writable and running the last
cp
step. It's a weird mess... If anybody can explain this to me, I would really really appreciate it.
Thanks for reading!
Edit: Thanks to
this article for the shoutout! And fantastic work with Aperture too. I'm very impressed by your tidy solution! (Spent some time working on it myself, but never got it at all usable.)