Après une interruption de trois ans, la version actuelle de sView est à nouveau disponible sur macOS. La sortie de sView 20.08 promettait la prise en charge de macOS 10.10+ , mais quelque chose s'est mal passé et plusieurs utilisateurs ont rencontré un problème étrange - les systèmes macOS 10.13 et 10.14 ont refusé de lancer l'application avec un message indiquant la nécessité de mettre à jour macOS 10.15 ...
Dire que l'erreur m'a intrigué, c'est sous-estimer grandement le degré de mon indignation, car le nombre magique 10,15 n'apparaissait nulle part dans les scripts de construction ou dans les ressources sView! De plus, l'application a été personnellement testée sur une ancienne version du système, à savoir macOS 10.10.
Un peu de contexte. En 2011, la première version de sView pour OS X 10.6 Snow Leopard a été publiée , et pendant six ans, cette version particulière du système est restée la configuration minimale requise pour exécuter sView. La prise en charge de versions relativement anciennes des systèmes d'exploitation offre une couverture maximale des utilisateurs potentiels, mais nécessite des efforts supplémentaires.
La pratique de développement d'applications Windows, Linux, Android et macOS montre que les hypothèses selon lesquelles l'application compilée «semble fonctionner» sur toutes les versions de systèmes échouent périodiquement et que des problèmes de compatibilité surgissent de manière inattendue. Dans de tels cas, la possibilité de tester les performances d'une application sur différents systèmes (y compris les plus anciens, officiellement pris en charge) devient vitale.
OS X , , , . , macOS .
. , OS X SDK XCode. SDK XCode SDK XCode, .
OS X 10.6 Snow Leopard, sView OS X , MacBook. OS X .
, Apple , , . , XCode macOS SDK - , - macOS :
MACOSX_DEPLOYMENT_TARGET
(..,export MACOSX_DEPLOYMENT_TARGET=10.0
);
-mmacosx-version-min
(..,EXTRA_CXXFLAGS += -mmacosx-version-min=10.0
).
CMake CMAKE_OSX_DEPLOYMENT
, qmake - QMAKE_MACOSX_DEPLOYMENT_TARGET
.
XCode 11 OS X 10.6, Hello World 10.7 . , OS X 10.6 Snow Leopard 2009 - , - . ?
OS X 10.10 Yosemite 6 6 "" macOS 11.0 Big Sur. OS X Apple. , OS X 10.10 MacBook - , .
“” mid-2010 MacBook , macOS , macOS 10.13 High Sierra 2017 .
, Apple 7 ! Apple macOS - OS X 10.10 macOS 10.13 .
sView Makefile
10.10
, Info.plist
LSMinimumSystemVersion=10.0
. macOS 10.15, Mac mini ‘2018, OS X 10.10 - !
… , , sView macOS, . ! 10.15
, LSMinimumSystemVersion
10.10
- macOS ?
- 10.15
. macOS 10.13, . , sView !
, - sView, , otool -l
:
Load command 9
cmd LC_BUILD_VERSION
cmdsize 32
platform macos
sdk 10.15
minos 10.15
ntools 1
tool ld
version 450.3
minos
, , macOS . , - , OS X 10.10 sView , macOS 10.13-10.14 ? OS X 10.10 minos
!
La dernière question restait: où l'erreur s'est-elle glissée pendant le processus de création de l'application? L'examen du package sView a révélé que le champ n'était minos
présent que dans les bibliothèques et le fichier exécutable du projet lui-même, mais pas dans les bibliothèques FFmpeg construites de manière similaire. Autrement dit, le problème était clairement dans le Makefile
projet. Il s'est avéré que l'indicateur a été -mmacosx-version-min
passé au compilateur via une variable EXTRA_CXXFLAGS
, mais pas à l'éditeur de liens. L'ajout d'un indicateur à une variable a EXTRA_LDFLAGS
finalement résolu le problème:
TARGET_OS_VERSION = 10.10
EXTRA_CFLAGS += -mmacosx-version-min=$(TARGET_OS_VERSION)
EXTRA_CXXFLAGS += -mmacosx-version-min=$(TARGET_OS_VERSION)
EXTRA_LDFLAGS += -mmacosx-version-min=$(TARGET_OS_VERSION)
La publication originale en anglais peut être trouvée ici .