macOS et minOS mystiques

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 .












All Articles