macOS y mystical minOS

Después de una pausa de tres años, la versión actual de sView ahora está disponible nuevamente en macOS. El lanzamiento de sView 20.08 prometía compatibilidad con macOS 10.10+ , pero algo salió mal y a varios usuarios se les ocurrió un problema extraño: los sistemas macOS 10.13 y 10.14 se negaron a iniciar la aplicación con un mensaje sobre la necesidad de actualizar a macOS 10.15 ...





Decir que el error me desconcertó es subestimar en gran medida el grado de indignación, ¡porque el número mágico 10.15 no apareció en ninguna parte de los scripts de compilación o en los recursos de sView! Además, la aplicación ha sido probada personalmente en una versión anterior del sistema, a saber, macOS 10.10.





Un poco de trasfondo. En 2011, se lanzó la primera compilación de sView para OS X 10.6 Snow Leopard , y durante seis años esta versión del sistema siguió siendo el requisito mínimo para ejecutar sView. El soporte para versiones relativamente antiguas de sistemas operativos proporciona la máxima cobertura de usuarios potenciales, pero requiere esfuerzos adicionales.





La práctica de desarrollar aplicaciones Windows, Linux, Android y macOS muestra que las suposiciones de que la aplicación compilada "parece funcionar" en todas las versiones de los sistemas fallan periódicamente y los problemas de compatibilidad surgen de formas inesperadas. En tales casos, la capacidad de probar el rendimiento de una aplicación en diferentes sistemas (incluidos los más antiguos con soporte formal) se vuelve vital.





Sin embargo, la versión anterior de OS X requiere el mismo dispositivo anterior , ya que a menudo no es posible instalar el sistema en un dispositivo lanzado más tarde que el propio sistema. Las herramientas de virtualización podrían resolver el problema, pero en el caso de macOS, no lo están haciendo bien.





. , 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 última pregunta seguía siendo: ¿dónde apareció el error durante el proceso de creación de la aplicación? El examen del paquete sView reveló que el campo estaba minos



presente solo en las bibliotecas y el archivo ejecutable del proyecto en sí, pero no en las bibliotecas FFmpeg construidas de manera similar. Es decir, el problema estaba claramente en el Makefile



proyecto. Al final resultó que, la bandera se -mmacosx-version-min



pasó al compilador a través de una variable EXTRA_CXXFLAGS



, pero no se pasó al enlazador. Agregar una bandera a una variable EXTRA_LDFLAGS



finalmente resolvió el problema:





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 publicación original en inglés se puede encontrar aquí .












All Articles