macOS e minOS místico

Após um hiato de três anos, a versão atual do sView está disponível novamente no macOS. O lançamento do sView 20.08 prometia suporte para macOS 10.10+ , mas algo deu errado e vários usuários encontraram um problema estranho - os sistemas macOS 10.13 e 10.14 se recusaram a iniciar o aplicativo com uma mensagem sobre a necessidade de atualizar para o macOS 10.15 ...





Dizer que o erro me intrigou é subestimar muito o grau de minha indignação, porque o número mágico 10,15 não apareceu em nenhum lugar nos scripts de construção ou nos recursos do sView! Além disso, o aplicativo foi testado pessoalmente em uma versão mais antiga do sistema, ou seja, o macOS 10.10.





Um pouco de fundo. Em 2011, a primeira versão do sView para OS X 10.6 Snow Leopard foi lançada e, por seis anos, essa versão do sistema permaneceu como o requisito mínimo para executar o sView. O suporte para versões relativamente antigas de sistemas operacionais fornece cobertura máxima de usuários em potencial, mas requer esforços adicionais.





A prática de desenvolver aplicativos Windows, Linux, Android e macOS mostra que as suposições de que o aplicativo compilado "parece funcionar" em todas as versões dos sistemas falham periodicamente e os problemas de compatibilidade surgem de maneiras inesperadas. Nesses casos, a capacidade de testar o desempenho de um aplicativo em sistemas diferentes (incluindo os mais antigos, com suporte formal) torna-se vital.





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



!





A última questão permaneceu - onde o erro apareceu durante o processo de construção do aplicativo? O exame do pacote sView revelou que o campo estava minos



presente apenas nas bibliotecas e no arquivo executável do próprio projeto, mas não nas bibliotecas FFmpeg construídas de forma semelhante. Ou seja, o problema estava claramente no Makefile



projeto. No final das contas, o sinalizador foi -mmacosx-version-min



passado para o compilador por meio de uma variável EXTRA_CXXFLAGS



, mas não para o vinculador. Adicionar um sinalizador a uma variável EXTRA_LDFLAGS



finalmente resolveu o 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)
      
      



A publicação original em inglês pode ser encontrada aqui .












All Articles