Both versions of the load command are still in use.
The cutoff for which load command gets used appears to be based on the
deployment target that has been set. The clang driver (and ld64) then uses the
right one, depending on that.
A deployment target of 10.14+ will set LC_BUILD_VERSION.
A deployment target of 10.13 or less will set LC_VERSION_MIN_MACOSX.
I would imagine that the App store might use the same criteria for examining
your submission, and enforce those rules.
So (inference) if you are building something using MacPorts on a newer system
to have a deployment target that is older (for this issue, 10.13 or less) you
need to set that deployment target for everything you would use.
MacPorts does allow you to do that, setting an older deployment target, in
macports.conf. And then yes, you would have to build everything from source to
have that set correctly. Probably best to have a separate macports installation
in a different prefix for that.
Please ask further if you have any other questions about this.
Best,
Ken
Evidence:
% cat libweakfunc.c
#include <stdio.h>
void
weakfunc(void)
{
puts("I am a weak function. ");
}
11.2:
% clang -mmacosx-version-min=11.2 -dynamiclib libweakfunc.c -o libweakfunc.dylib
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_BUILD_VERSION
cmdsize 24
uuid 9B13A902-DABE-3376-B6F0-CF3049B0A66C
Load command 9
cmd LC_BUILD_VERSION
cmdsize 32
platform 1
minos 11.2
sdk 10.15.6
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_VERSION_MIN_MACOSX
10.14:
% clang -mmacosx-version-min=10.14 -dynamiclib libweakfunc.c -o
libweakfunc.dylib
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_BUILD_VERSION
cmdsize 24
uuid 46E2E497-E5CC-3254-8B2F-56A355EE8BBD
Load command 8
cmd LC_BUILD_VERSION
cmdsize 32
platform 1
minos 10.14
sdk 10.15.6
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_VERSION_MIN_MACOSX
10.13:
% clang -mmacosx-version-min=10.13 -dynamiclib libweakfunc.c -o
libweakfunc.dylib
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_BUILD_VERSION
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_VERSION_MIN_MACOSX
cmdsize 24
uuid 070BAEA2-4139-31F8-8A56-762F0E6122E2
Load command 8
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.13
sdk 10.15.6
Load command 9
10.6:
% clang -mmacosx-version-min=10.6 -dynamiclib libweakfunc.c -o libweakfunc.dylib
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_BUILD_VERSION
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_VERSION_MIN_MACOSX
cmdsize 24
uuid 9FB0F27C-55C3-3E76-87B4-FBDABDDFA38E
Load command 8
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.6
sdk 10.15.6
Load command 9
and testing just MACOSX_DEPLOYMENT_TARGET without setting the command line
parameter:
% export MACOSX_DEPLOYMENT_TARGET=10.13
% clang -dynamiclib libweakfunc.c -o libweakfunc.dylib
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_BUILD_VERSION
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_VERSION_MIN_MACOSX
cmdsize 24
uuid 070BAEA2-4139-31F8-8A56-762F0E6122E2
Load command 8
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.13
sdk 10.15.6
Load command 9