Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. QT iOS app plugins not found issue?
Forum Updated to NodeBB v4.3 + New Features

QT iOS app plugins not found issue?

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
iosplugin issue
13 Posts 2 Posters 1.5k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A astoffregen

    I have a QT app that runs smoothly on windows and macOS.

    I am currently trying to test and deploy this app via TestFlight for iOS. The app is built using cmake and the great QTIosCMake macro by OlivierLDff.

    Building and uploading works fine, but when calling the app I get an empty screen.

    When testing via Xcode I get the following error output

    2023-12-31 02:58:49.756283-0800 DCT[747:129511] Metal GPU Frame Capture Enabled
    2023-12-31 02:58:49.756514-0800 DCT[747:129511] Metal API Validation Enabled
    2023-12-31 02:58:49.831099-0800 DCT[747:129511] This plugin does not support setting window masks
    2023-12-31 02:58:51.158800-0800 DCT[747:129511] QQmlApplicationEngine failed to load component
    2023-12-31 02:58:51.158930-0800 DCT[747:129511] qrc:/assets/alpha/Main.qml:1:1: module "QtQuick" plugin "qtquick2plugin" not found
    

    I know that, contrary to the macOS version, the libraries have to be integrated statically. This is done in the CMakeList.txt using the following construct

    if ("${CMAKE_SYSTEM_NAME}" STREQUAL "iOS")
        qt6_import_plugins(DCT
            INCLUDE Qt6::QMinimalIntegrationPlugin
            INCLUDE Qt6::Core
            INCLUDE Qt6::Qml
            INCLUDE Qt6::Widgets
            INCLUDE Qt6::Network
            INCLUDE Qt6::Quick
            INCLUDE Qt6::Concurrent
            INCLUDE Qt6::Core5Compat
            INCLUDE Qt6::QuickControls2
            INCLUDE Common
            INCLUDE_BY_TYPE platforms
        )
    

    This was not included in the first attempts where I get the same error. It seems that inserted import_plugins part that has no effect.

    Any idea where I can start troubleshooting?

    Thanks in advanced

    Axel SpoerlA Offline
    Axel SpoerlA Offline
    Axel Spoerl
    Moderators
    wrote on last edited by
    #2

    @astoffregen
    Looks like iOS still tries to load the plugin dynamically. Probably because it's not statically linked.

    That can be done in CMake like that (where $plugin_targets) is a list of all plugin targets. You can of course replace the variable with the hard coded name, in case you have only one plugin.

    if(QT6_IS_SHARED_LIBS_BUILD)
        add_dependencies(yourApp ${plugin_targets})
    else()
        target_link_libraries(yourApp PRIVATE ${plugin_targets})
    endif()
    

    Software Engineer
    The Qt Company, Oslo

    A 1 Reply Last reply
    1
    • Axel SpoerlA Axel Spoerl

      @astoffregen
      Looks like iOS still tries to load the plugin dynamically. Probably because it's not statically linked.

      That can be done in CMake like that (where $plugin_targets) is a list of all plugin targets. You can of course replace the variable with the hard coded name, in case you have only one plugin.

      if(QT6_IS_SHARED_LIBS_BUILD)
          add_dependencies(yourApp ${plugin_targets})
      else()
          target_link_libraries(yourApp PRIVATE ${plugin_targets})
      endif()
      
      A Offline
      A Offline
      astoffregen
      wrote on last edited by
      #3

      @Axel-Spoerl
      Hello Axel thanks for your response. Does this mean that my call of the qt6_import_plugins macro as listed above is not the correct way? I found this way in the qt6 documentation for static libraries

      Axel SpoerlA 1 Reply Last reply
      0
      • A astoffregen

        @Axel-Spoerl
        Hello Axel thanks for your response. Does this mean that my call of the qt6_import_plugins macro as listed above is not the correct way? I found this way in the qt6 documentation for static libraries

        Axel SpoerlA Offline
        Axel SpoerlA Offline
        Axel Spoerl
        Moderators
        wrote on last edited by
        #4

        @astoffregen
        It is definitively correct.
        You just have to make sure to link your plugins statically, if you want to deploy to iOS/watchOS.
        You can look at the documentviewer example and it's CMake files.

        Software Engineer
        The Qt Company, Oslo

        A 1 Reply Last reply
        0
        • Axel SpoerlA Axel Spoerl

          @astoffregen
          It is definitively correct.
          You just have to make sure to link your plugins statically, if you want to deploy to iOS/watchOS.
          You can look at the documentviewer example and it's CMake files.

          A Offline
          A Offline
          astoffregen
          wrote on last edited by astoffregen
          #5

          @Axel-Spoerl
          Thanks for the link but in the CMakeList of the viewer I don't see how this should help me. I don't see any of the commands for static embedding there. I have to admit that I am not specialized in QT projects, I am trying to implement a pipeline based on Jenkins and am less concerned with QT project itselfs. That comes from another place

          I have checked the prerequisites again and the qt_import_plugin macro should be available via this section.

          find_package(Qt6 REQUIRED COMPONENTS
              core
              Qml
              Widgets
              network
              Quick
              Concurrent
              LinguistTools
              Core5Compat
              QuickControls2
          )
          

          And then this section for iOS including the plugin with the iOS CMake macro from OlivierLDff

          if ("${CMAKE_SYSTEM_NAME}" STREQUAL "iOS")
              qt6_import_plugins(ABC
                  INCLUDE Qt6::QMinimalIntegrationPlugin
                  INCLUDE Qt6::Core
                  INCLUDE Qt6::Qml
                  INCLUDE Qt6::Widgets
                  INCLUDE Qt6::Network
                  INCLUDE Qt6::Quick
                  INCLUDE Qt6::Concurrent
                  INCLUDE Qt6::Core5Compat
                  INCLUDE Qt6::QuickControls2
                  INCLUDE Common
                  INCLUDE_BY_TYPE platforms
              )
              macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
                  set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
              endmacro (set_xcode_property)
              set(CMAKE_SYSTEM_PROCESSOR aarch64)
              set_target_properties(DCT PROPERTIES XCODE_ATTRIBUTE_ENABLE_BITCODE "NO")
              set_target_properties(DCT PROPERTIES QT_IOS_LAUNCH_SCREEN "${CMAKE_CURRENT_SOURCE_DIR}/Launch.storyboard")
              include(build-tools/xyz/ios/AddQtIosApp.cmake)
              add_qt_ios_app(ABC
                  NAME "ABC"
                  BUNDLE_IDENTIFIER ${APPLE_BUNDLE_IDENTIFIER}
                  VERSION ${APPLE_SHORT_VERSION}
                  SHORT_VERSION ${APPLE_SHORT_VERSION}
                  LONG_VERSION ${APPLE_LONG_VERSION}
                  CUSTOM_PLIST ${APPLE_CUSTOM_PLIST}
                  ASSET_DIR ${APPLE_ASSET_DIR}
                  TEAM_ID ${APPLE_TEAM_ID}
                  CODE_SIGN_IDENTITY ${APPLE_CODE_SIGN_IDENTITY}
                  PROVISIONING_PROFILE_SPECIFIER ${APPLE_PROVISIONING_PROFILE_SPECIFIER}
                  IPA
              )
          

          That should be enough to statically integrate the required libraries, right? However, I still get the error as described above.

          Would it help if I provided the complete CMakeList?

          Axel SpoerlA 1 Reply Last reply
          0
          • A astoffregen

            @Axel-Spoerl
            Thanks for the link but in the CMakeList of the viewer I don't see how this should help me. I don't see any of the commands for static embedding there. I have to admit that I am not specialized in QT projects, I am trying to implement a pipeline based on Jenkins and am less concerned with QT project itselfs. That comes from another place

            I have checked the prerequisites again and the qt_import_plugin macro should be available via this section.

            find_package(Qt6 REQUIRED COMPONENTS
                core
                Qml
                Widgets
                network
                Quick
                Concurrent
                LinguistTools
                Core5Compat
                QuickControls2
            )
            

            And then this section for iOS including the plugin with the iOS CMake macro from OlivierLDff

            if ("${CMAKE_SYSTEM_NAME}" STREQUAL "iOS")
                qt6_import_plugins(ABC
                    INCLUDE Qt6::QMinimalIntegrationPlugin
                    INCLUDE Qt6::Core
                    INCLUDE Qt6::Qml
                    INCLUDE Qt6::Widgets
                    INCLUDE Qt6::Network
                    INCLUDE Qt6::Quick
                    INCLUDE Qt6::Concurrent
                    INCLUDE Qt6::Core5Compat
                    INCLUDE Qt6::QuickControls2
                    INCLUDE Common
                    INCLUDE_BY_TYPE platforms
                )
                macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
                    set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
                endmacro (set_xcode_property)
                set(CMAKE_SYSTEM_PROCESSOR aarch64)
                set_target_properties(DCT PROPERTIES XCODE_ATTRIBUTE_ENABLE_BITCODE "NO")
                set_target_properties(DCT PROPERTIES QT_IOS_LAUNCH_SCREEN "${CMAKE_CURRENT_SOURCE_DIR}/Launch.storyboard")
                include(build-tools/xyz/ios/AddQtIosApp.cmake)
                add_qt_ios_app(ABC
                    NAME "ABC"
                    BUNDLE_IDENTIFIER ${APPLE_BUNDLE_IDENTIFIER}
                    VERSION ${APPLE_SHORT_VERSION}
                    SHORT_VERSION ${APPLE_SHORT_VERSION}
                    LONG_VERSION ${APPLE_LONG_VERSION}
                    CUSTOM_PLIST ${APPLE_CUSTOM_PLIST}
                    ASSET_DIR ${APPLE_ASSET_DIR}
                    TEAM_ID ${APPLE_TEAM_ID}
                    CODE_SIGN_IDENTITY ${APPLE_CODE_SIGN_IDENTITY}
                    PROVISIONING_PROFILE_SPECIFIER ${APPLE_PROVISIONING_PROFILE_SPECIFIER}
                    IPA
                )
            

            That should be enough to statically integrate the required libraries, right? However, I still get the error as described above.

            Would it help if I provided the complete CMakeList?

            Axel SpoerlA Offline
            Axel SpoerlA Offline
            Axel Spoerl
            Moderators
            wrote on last edited by
            #6

            @astoffregen
            Yes, please provide the full CMakeLists.txt.

            Software Engineer
            The Qt Company, Oslo

            A 1 Reply Last reply
            0
            • Axel SpoerlA Axel Spoerl

              @astoffregen
              Yes, please provide the full CMakeLists.txt.

              A Offline
              A Offline
              astoffregen
              wrote on last edited by
              #7

              @Axel-Spoerl
              Thanks for the support, can I send you the file by email?

              A 1 Reply Last reply
              0
              • A astoffregen

                @Axel-Spoerl
                Thanks for the support, can I send you the file by email?

                A Offline
                A Offline
                astoffregen
                wrote on last edited by
                #8

                @astoffregen
                Hello Axel,
                please find attached the complete Cmaketext file. Since five different platforms and two company versions are supported, the whole thing is somewhat larger

                cmake_minimum_required(VERSION 3.21.1)
                include(FetchContent)
                
                project(MyProject)
                
                set(CMAKE_INCLUDE_CURRENT_DIR ON)
                set(CMAKE_AUTOUIC ON)
                set(CMAKE_AUTOMOC ON)
                set(CMAKE_AUTORCC ON)
                set(CMAKE_CXX_STANDARD 17)
                set(CMAKE_CXX_STANDARD_REQUIRED ON)
                set(QT_DEFAULT_MAJOR_VERSION 6)
                
                find_package(Qt6 REQUIRED COMPONENTS
                    Core
                    Qml
                    Widgets
                    Network
                    Quick
                    Concurrent
                    LinguistTools
                    Core5Compat
                    QuickControls2
                )
                
                ################## ext libs ##################
                FetchContent_Declare(
                    COMMON_LIB_BUILD
                    SVN_REPOSITORY http://111.222.333.444/svn/MyProject/libraries/common/trunk
                    SVN_USERNAME svnuser
                    SVN_PASSWORD svnpass
                )
                
                ################## sets variables for libs ##################
                set(COMPANY "MyCompany")
                set(BUNDLE_NAME "MyApp")
                set(BUNDLE_NAME_DISPLAY "MyApp")
                set(BUNDLE_NAME_SHORT "MyApp")
                
                ################## builds the libs ##################
                FetchContent_MakeAvailable(COMMON_LIB_BUILD)
                
                ################## alias for lib sources ##################
                set(common_src ${common_lib_build_SOURCE_DIR}/src)
                
                ################## includes for ide ##################
                include_directories(
                    src
                    ${common_src}
                )
                
                set(HEADERS
                    src/logic_layer/alphastringmanager.h
                    src/logic_layer/productlistmodel.h
                    src/logic_layer/alphastrings.h
                    src/logic_layer/alpha.h
                    src/logic_layer/permissionmanager.h
                    src/logic_layer/permission.h
                    src/logic_layer/translator.h
                    src/logic_layer/bundlemanager.h
                    src/logic_layer/productmanager.h
                    src/logic_layer/product.h
                    src/logic_layer/messagefilterproxymodel.h
                    src/logic_layer/messagelistmodel.h
                    src/logic_layer/httprequesthandler.h
                    src/logic_layer/replytimeout.h
                    src/logic_layer/jsonhelper.h
                    src/logic_layer/languagelistmodel.h
                    src/presentation_layer/alphasplashscreen.h
                    ${common_src}/logic_layer/xevents.h
                    ${common_src}/logic_layer/iplugin.h
                    ${common_src}/logic_layer/commonstrings.h
                    ${common_src}/themes/colors.h
                    ${common_src}/themes/theme.h
                    ${common_src}/themes/company.h
                )
                set(SOURCES
                    src/logic_layer/alphastringmanager.cpp
                    src/logic_layer/productlistmodel.cpp
                    src/logic_layer/alpha.cpp
                    src/logic_layer/permissionmanager.cpp
                    src/logic_layer/permission.cpp
                    src/logic_layer/translator.cpp
                    src/logic_layer/bundlemanager.cpp
                    src/logic_layer/productmanager.cpp
                    src/logic_layer/product.cpp
                    src/logic_layer/messagefilterproxymodel.cpp
                    src/logic_layer/messagelistmodel.cpp
                    src/logic_layer/httprequesthandler.cpp
                    src/logic_layer/replytimeout.cpp
                    src/presentation_layer/alphasplashscreen.cpp
                    src/logic_layer/jsonhelper.cpp
                    src/logic_layer/languagelistmodel.cpp
                )
                
                if("${COMPANY}" STREQUAL "MyCompany")
                    option(MYCOMP2 "Flag that indicates if this is build for MyCompany2" OFF)
                elseif("${COMPANY}" STREQUAL "MyCompany2")
                    option(MYCOMP2 "Flag that indicates if this is build for MyCompany2" ON)
                endif()
                
                ################## Translation files ##################
                if(${CREATE_TRANSLATION})
                    set(TS_DIR  ${CMAKE_CURRENT_SOURCE_DIR}/src/presentation_layer/assets/translations)
                        set(TS_FILES
                            "${TS_DIR}/myapp_de.ts"
                            "${TS_DIR}/myapp_en.ts"
                            "${TS_DIR}/myapp_cn.ts"
                            "${TS_DIR}/myapp_fr.ts"
                            "${TS_DIR}/myapp_pl.ts"
                            "${TS_DIR}/myapp_ru.ts"
                            "${TS_DIR}/myapp_it.ts"
                            "${TS_DIR}/myapp_nl.ts"
                            "${TS_DIR}/myapp_es.ts"
                            "${TS_DIR}/myapp_pt.ts"
                        )
                
                    set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION ${TS_DIR})
                
                    find_program(LUPDATE_EXECUTABLE lupdate)
                
                    foreach(_ts_file ${TS_FILES})
                        execute_process(COMMAND ${LUPDATE_EXECUTABLE} -recursive -noobsolete ${CMAKE_SOURCE_DIR} -ts ${_ts_file})
                    endforeach()
                endif()
                ################## Translation files end ##################
                
                qt_add_resources(RESOURCES
                    src/presentation_layer/alpha_controls.qrc
                    #    src/presentation_layer/translation.qrc
                    src/presentation_layer/assets/licenses/${COMPANY}/licenses.qrc
                    src/presentation_layer/codes.qrc
                )
                
                # Define the version components
                set(VER_MAJOR ${BUNDLE_VERSION_MAJOR})
                set(VER_MINOR ${BUNDLE_VERSION_MINOR})
                set(VER_PATCH ${BUNDLE_VERSION_REV})
                set(VER_BUILD ${APPLICATION_BUILD_NUMBER})
                
                if ("${CMAKE_SYSTEM_NAME}" STREQUAL "iOS")
                    add_executable(MyAPP
                        MACOSX_BUNDLE #for creating the archive
                        ${common_src}/logic_layer/shareutils.h
                        src/main.cpp
                        ${HEADERS}
                        ${SOURCES}
                        ${RESOURCES}
                    )
                elseif(APPLE)
                    # The MACOSX_BUNDLE_ICON_FILE variable is added to the Info.plist
                    # generated by CMake. This variable contains the .icns file name,
                    # without the path.
                    set(MACOSX_BUNDLE_ICON_FILE app.icns)
                    # And the following tells CMake where to find and install the file itself.
                    if("${COMPANY}" STREQUAL "MyCompany")
                        set(app_icon_macos "${CMAKE_CURRENT_SOURCE_DIR}/build-tools/${COMPANY}/appicons/macOS/app.icns")
                    elseif("${COMPANY}" STREQUAL "MyCompany2")
                        set(app_icon_macos "${CMAKE_CURRENT_SOURCE_DIR}/build-tools/${COMPANY}/${BUNDLE_APP_ID}/appicons/macOS/app.icns")
                    endif()
                
                    set_source_files_properties(${app_icon_macos} PROPERTIES
                        MACOSX_PACKAGE_LOCATION "Resources")
                
                    qt_add_executable(MyAPP
                        MACOSX_BUNDLE #for creating the archive
                        src/main.cpp
                        ${HEADERS}
                        ${SOURCES}
                        ${RESOURCES}
                        ${app_icon_macos}
                    )
                elseif(ANDROID)
                    add_library(MyAPP SHARED
                        src/main.cpp
                        ${HEADERS}
                        ${SOURCES}
                        ${RESOURCES}
                    )
                elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "MyType")
                    qt_add_executable(MyAPP
                        src/main.cpp
                        ${HEADERS}
                        ${SOURCES}
                        ${RESOURCES}
                    )
                else()
                    # Combine the version components to form FILEVERSION
                    set(FILE_VERSION "${VER_MAJOR},${VER_MINOR},${VER_PATCH},${VER_BUILD}")
                
                    if("${COMPANY}" STREQUAL "MyCompany")
                        set(ICON_PATH "build-tools/${COMPANY}/appicons/windows/app.ico")
                        set(COMPANY_FULL_NAME "MyCompany full name")
                        set(ORIG_FILE_NAME "${BUNDLE_NAME_SHORT}.exe")
                        configure_file(${CMAKE_CURRENT_SOURCE_DIR}/build-tools/version.rc.in ${CMAKE_CURRENT_SOURCE_DIR}/build-tools/${COMPANY}/version.rc @ONLY)
                        set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/build-tools/${COMPANY}/version.rc")
                    elseif("${COMPANY}" STREQUAL "MyCompany2")
                        set(ICON_PATH "build-tools/${COMPANY}/${BUNDLE_APP_ID}/appicons/windows/app.ico")
                        set(COMPANY_FULL_NAME "MyCompany2 full name")
                        set(ORIG_FILE_NAME "${BUNDLE_NAME_SHORT}.exe")
                        configure_file(${CMAKE_CURRENT_SOURCE_DIR}/build-tools/version.rc.in ${CMAKE_CURRENT_SOURCE_DIR}/build-tools/${COMPANY}/${BUNDLE_APP_ID}/version.rc @ONLY)
                        set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/build-tools/${COMPANY}/${BUNDLE_APP_ID}/version.rc")
                    endif()
                    add_executable(MyAPP WIN32
                        src/main.cpp
                        ${HEADERS}
                        ${SOURCES}
                        ${RESOURCES}
                        ${APP_ICON_RESOURCE_WINDOWS}
                    )
                endif ()
                
                configure_file(AlphaConfig.h.in AlphaConfig.h)
                
                target_include_directories(MyAPP PUBLIC
                    ${common_src}
                    "${PROJECT_BINARY_DIR}"
                )
                target_link_libraries(MyAPP PRIVATE
                    Qt6::Core
                    Qt6::Qml
                    Qt6::Widgets
                    Qt6::Network
                    Qt6::Quick
                    Qt6::Concurrent
                    Qt6::Core5Compat
                    Qt6::QuickControls2
                    Common
                )
                
                if (APPLE)
                    target_link_libraries(MyAPP PRIVATE
                        "-framework CoreFoundation" #macos
                        "-framework IOkit" #macos
                    )
                    set_target_properties(MyAPP PROPERTIES LINK_OPTIONS "-Wl,-F/Library/Frameworks") #macos
                    set_target_properties(MyAPP PROPERTIES MACOSX_BUNDLE TRUE)
                endif ()
                
                if ("${CMAKE_SYSTEM_NAME}" STREQUAL "iOS")
                    qt6_import_plugins(MyAPP
                        INCLUDE Qt6::QMinimalIntegrationPlugin
                        INCLUDE Qt6::Core
                        INCLUDE Qt6::Qml
                        INCLUDE Qt6::Widgets
                        INCLUDE Qt6::Network
                        INCLUDE Qt6::Quick
                        INCLUDE Qt6::Concurrent
                        INCLUDE Qt6::Core5Compat
                        INCLUDE Qt6::QuickControls2
                        INCLUDE Common
                        INCLUDE_BY_TYPE platforms
                    )
                    macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
                        set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
                    endmacro (set_xcode_property)
                    set(CMAKE_SYSTEM_PROCESSOR aarch64)
                    set_target_properties(MyAPP PROPERTIES XCODE_ATTRIBUTE_ENABLE_BITCODE "NO")
                    set_target_properties(MyAPP PROPERTIES QT_IOS_LAUNCH_SCREEN "${CMAKE_CURRENT_SOURCE_DIR}/Launch.storyboard")
                    include(build-tools/mycompany/ios/AddQtIosApp.cmake)
                    add_qt_ios_app(MyAPP
                        NAME "MyAPP"
                        BUNDLE_IDENTIFIER ${APPLE_BUNDLE_IDENTIFIER}
                        VERSION ${APPLE_SHORT_VERSION}
                        SHORT_VERSION ${APPLE_SHORT_VERSION}
                        LONG_VERSION ${APPLE_LONG_VERSION}
                        CUSTOM_PLIST ${APPLE_CUSTOM_PLIST}
                        ASSET_DIR ${APPLE_ASSET_DIR}
                        TEAM_ID ${APPLE_TEAM_ID}
                        CODE_SIGN_IDENTITY ${APPLE_CODE_SIGN_IDENTITY}
                        PROVISIONING_PROFILE_SPECIFIER ${APPLE_PROVISIONING_PROFILE_SPECIFIER}
                        IPA
                    ) #https://github.com/OlivierLDff/QtIosCMake
                elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
                    set_target_properties(MyAPP PROPERTIES
                        BUNDLE True
                        BUNDLE_IDENTIFIER de.mycompany.macos.myapp
                        MACOSX_BUNDLE_GUI_IDENTIFIER de.mycompany.macos.myapp
                        MACOSX_BUNDLE_BUNDLE_NAME MyAPP
                        MACOSX_BUNDLE_BUNDLE_VERSION "2.0.4"
                        MACOSX_BUNDLE_SHORT_VERSION_STRING "2.0.4"
                        #MACOSX_BUNDLE_INFO_PLIST ${PROJECT_SOURCE_DIR}/build-tools/mycompany/Info.plist.in
                    )
                elseif (ANDROID)
                    include(build-tools/mycompany/android/AddQtAndroidApk.cmake)
                    # https://github.com/LaurentGomila/qt-android-cmake/tree/master
                    add_qt_android_apk(Alpha_apk MyAPP
                        NAME "MyAPP"
                        PACKAGE_SOURCES ${ANDROID_PACKAGE_SOURCE}
                        PACKAGE_NAME ${ANDROID_PACKAGE_NAME}
                        VERSION_CODE ${ANDROID_VERSION_CODE}
                        KEYSTORE ${ANDROID_KEYSTORE_FILE}
                        KEYSTORE_PASSWORD ${ANDROID_KEYSTORE_PASSWORD}
                        KEY_ALIAS ${ANDROID_KEY_ALIAS}
                        KEY_PASSWORD ${ANDROID_KEY_PASSWORD}
                    )
                elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Emscripten")
                    target_link_options(MyAPP PRIVATE
                        "SHELL:-s FULL_ES2=1"
                        "SHELL:-s FULL_ES3=1")
                endif ()
                
                set_target_properties(MyAPP PROPERTIES IMPORTED_LOCATION external_libs/ftd2xx.dll
                )
                
                Axel SpoerlA 1 Reply Last reply
                0
                • A astoffregen

                  @astoffregen
                  Hello Axel,
                  please find attached the complete Cmaketext file. Since five different platforms and two company versions are supported, the whole thing is somewhat larger

                  cmake_minimum_required(VERSION 3.21.1)
                  include(FetchContent)
                  
                  project(MyProject)
                  
                  set(CMAKE_INCLUDE_CURRENT_DIR ON)
                  set(CMAKE_AUTOUIC ON)
                  set(CMAKE_AUTOMOC ON)
                  set(CMAKE_AUTORCC ON)
                  set(CMAKE_CXX_STANDARD 17)
                  set(CMAKE_CXX_STANDARD_REQUIRED ON)
                  set(QT_DEFAULT_MAJOR_VERSION 6)
                  
                  find_package(Qt6 REQUIRED COMPONENTS
                      Core
                      Qml
                      Widgets
                      Network
                      Quick
                      Concurrent
                      LinguistTools
                      Core5Compat
                      QuickControls2
                  )
                  
                  ################## ext libs ##################
                  FetchContent_Declare(
                      COMMON_LIB_BUILD
                      SVN_REPOSITORY http://111.222.333.444/svn/MyProject/libraries/common/trunk
                      SVN_USERNAME svnuser
                      SVN_PASSWORD svnpass
                  )
                  
                  ################## sets variables for libs ##################
                  set(COMPANY "MyCompany")
                  set(BUNDLE_NAME "MyApp")
                  set(BUNDLE_NAME_DISPLAY "MyApp")
                  set(BUNDLE_NAME_SHORT "MyApp")
                  
                  ################## builds the libs ##################
                  FetchContent_MakeAvailable(COMMON_LIB_BUILD)
                  
                  ################## alias for lib sources ##################
                  set(common_src ${common_lib_build_SOURCE_DIR}/src)
                  
                  ################## includes for ide ##################
                  include_directories(
                      src
                      ${common_src}
                  )
                  
                  set(HEADERS
                      src/logic_layer/alphastringmanager.h
                      src/logic_layer/productlistmodel.h
                      src/logic_layer/alphastrings.h
                      src/logic_layer/alpha.h
                      src/logic_layer/permissionmanager.h
                      src/logic_layer/permission.h
                      src/logic_layer/translator.h
                      src/logic_layer/bundlemanager.h
                      src/logic_layer/productmanager.h
                      src/logic_layer/product.h
                      src/logic_layer/messagefilterproxymodel.h
                      src/logic_layer/messagelistmodel.h
                      src/logic_layer/httprequesthandler.h
                      src/logic_layer/replytimeout.h
                      src/logic_layer/jsonhelper.h
                      src/logic_layer/languagelistmodel.h
                      src/presentation_layer/alphasplashscreen.h
                      ${common_src}/logic_layer/xevents.h
                      ${common_src}/logic_layer/iplugin.h
                      ${common_src}/logic_layer/commonstrings.h
                      ${common_src}/themes/colors.h
                      ${common_src}/themes/theme.h
                      ${common_src}/themes/company.h
                  )
                  set(SOURCES
                      src/logic_layer/alphastringmanager.cpp
                      src/logic_layer/productlistmodel.cpp
                      src/logic_layer/alpha.cpp
                      src/logic_layer/permissionmanager.cpp
                      src/logic_layer/permission.cpp
                      src/logic_layer/translator.cpp
                      src/logic_layer/bundlemanager.cpp
                      src/logic_layer/productmanager.cpp
                      src/logic_layer/product.cpp
                      src/logic_layer/messagefilterproxymodel.cpp
                      src/logic_layer/messagelistmodel.cpp
                      src/logic_layer/httprequesthandler.cpp
                      src/logic_layer/replytimeout.cpp
                      src/presentation_layer/alphasplashscreen.cpp
                      src/logic_layer/jsonhelper.cpp
                      src/logic_layer/languagelistmodel.cpp
                  )
                  
                  if("${COMPANY}" STREQUAL "MyCompany")
                      option(MYCOMP2 "Flag that indicates if this is build for MyCompany2" OFF)
                  elseif("${COMPANY}" STREQUAL "MyCompany2")
                      option(MYCOMP2 "Flag that indicates if this is build for MyCompany2" ON)
                  endif()
                  
                  ################## Translation files ##################
                  if(${CREATE_TRANSLATION})
                      set(TS_DIR  ${CMAKE_CURRENT_SOURCE_DIR}/src/presentation_layer/assets/translations)
                          set(TS_FILES
                              "${TS_DIR}/myapp_de.ts"
                              "${TS_DIR}/myapp_en.ts"
                              "${TS_DIR}/myapp_cn.ts"
                              "${TS_DIR}/myapp_fr.ts"
                              "${TS_DIR}/myapp_pl.ts"
                              "${TS_DIR}/myapp_ru.ts"
                              "${TS_DIR}/myapp_it.ts"
                              "${TS_DIR}/myapp_nl.ts"
                              "${TS_DIR}/myapp_es.ts"
                              "${TS_DIR}/myapp_pt.ts"
                          )
                  
                      set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION ${TS_DIR})
                  
                      find_program(LUPDATE_EXECUTABLE lupdate)
                  
                      foreach(_ts_file ${TS_FILES})
                          execute_process(COMMAND ${LUPDATE_EXECUTABLE} -recursive -noobsolete ${CMAKE_SOURCE_DIR} -ts ${_ts_file})
                      endforeach()
                  endif()
                  ################## Translation files end ##################
                  
                  qt_add_resources(RESOURCES
                      src/presentation_layer/alpha_controls.qrc
                      #    src/presentation_layer/translation.qrc
                      src/presentation_layer/assets/licenses/${COMPANY}/licenses.qrc
                      src/presentation_layer/codes.qrc
                  )
                  
                  # Define the version components
                  set(VER_MAJOR ${BUNDLE_VERSION_MAJOR})
                  set(VER_MINOR ${BUNDLE_VERSION_MINOR})
                  set(VER_PATCH ${BUNDLE_VERSION_REV})
                  set(VER_BUILD ${APPLICATION_BUILD_NUMBER})
                  
                  if ("${CMAKE_SYSTEM_NAME}" STREQUAL "iOS")
                      add_executable(MyAPP
                          MACOSX_BUNDLE #for creating the archive
                          ${common_src}/logic_layer/shareutils.h
                          src/main.cpp
                          ${HEADERS}
                          ${SOURCES}
                          ${RESOURCES}
                      )
                  elseif(APPLE)
                      # The MACOSX_BUNDLE_ICON_FILE variable is added to the Info.plist
                      # generated by CMake. This variable contains the .icns file name,
                      # without the path.
                      set(MACOSX_BUNDLE_ICON_FILE app.icns)
                      # And the following tells CMake where to find and install the file itself.
                      if("${COMPANY}" STREQUAL "MyCompany")
                          set(app_icon_macos "${CMAKE_CURRENT_SOURCE_DIR}/build-tools/${COMPANY}/appicons/macOS/app.icns")
                      elseif("${COMPANY}" STREQUAL "MyCompany2")
                          set(app_icon_macos "${CMAKE_CURRENT_SOURCE_DIR}/build-tools/${COMPANY}/${BUNDLE_APP_ID}/appicons/macOS/app.icns")
                      endif()
                  
                      set_source_files_properties(${app_icon_macos} PROPERTIES
                          MACOSX_PACKAGE_LOCATION "Resources")
                  
                      qt_add_executable(MyAPP
                          MACOSX_BUNDLE #for creating the archive
                          src/main.cpp
                          ${HEADERS}
                          ${SOURCES}
                          ${RESOURCES}
                          ${app_icon_macos}
                      )
                  elseif(ANDROID)
                      add_library(MyAPP SHARED
                          src/main.cpp
                          ${HEADERS}
                          ${SOURCES}
                          ${RESOURCES}
                      )
                  elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "MyType")
                      qt_add_executable(MyAPP
                          src/main.cpp
                          ${HEADERS}
                          ${SOURCES}
                          ${RESOURCES}
                      )
                  else()
                      # Combine the version components to form FILEVERSION
                      set(FILE_VERSION "${VER_MAJOR},${VER_MINOR},${VER_PATCH},${VER_BUILD}")
                  
                      if("${COMPANY}" STREQUAL "MyCompany")
                          set(ICON_PATH "build-tools/${COMPANY}/appicons/windows/app.ico")
                          set(COMPANY_FULL_NAME "MyCompany full name")
                          set(ORIG_FILE_NAME "${BUNDLE_NAME_SHORT}.exe")
                          configure_file(${CMAKE_CURRENT_SOURCE_DIR}/build-tools/version.rc.in ${CMAKE_CURRENT_SOURCE_DIR}/build-tools/${COMPANY}/version.rc @ONLY)
                          set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/build-tools/${COMPANY}/version.rc")
                      elseif("${COMPANY}" STREQUAL "MyCompany2")
                          set(ICON_PATH "build-tools/${COMPANY}/${BUNDLE_APP_ID}/appicons/windows/app.ico")
                          set(COMPANY_FULL_NAME "MyCompany2 full name")
                          set(ORIG_FILE_NAME "${BUNDLE_NAME_SHORT}.exe")
                          configure_file(${CMAKE_CURRENT_SOURCE_DIR}/build-tools/version.rc.in ${CMAKE_CURRENT_SOURCE_DIR}/build-tools/${COMPANY}/${BUNDLE_APP_ID}/version.rc @ONLY)
                          set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/build-tools/${COMPANY}/${BUNDLE_APP_ID}/version.rc")
                      endif()
                      add_executable(MyAPP WIN32
                          src/main.cpp
                          ${HEADERS}
                          ${SOURCES}
                          ${RESOURCES}
                          ${APP_ICON_RESOURCE_WINDOWS}
                      )
                  endif ()
                  
                  configure_file(AlphaConfig.h.in AlphaConfig.h)
                  
                  target_include_directories(MyAPP PUBLIC
                      ${common_src}
                      "${PROJECT_BINARY_DIR}"
                  )
                  target_link_libraries(MyAPP PRIVATE
                      Qt6::Core
                      Qt6::Qml
                      Qt6::Widgets
                      Qt6::Network
                      Qt6::Quick
                      Qt6::Concurrent
                      Qt6::Core5Compat
                      Qt6::QuickControls2
                      Common
                  )
                  
                  if (APPLE)
                      target_link_libraries(MyAPP PRIVATE
                          "-framework CoreFoundation" #macos
                          "-framework IOkit" #macos
                      )
                      set_target_properties(MyAPP PROPERTIES LINK_OPTIONS "-Wl,-F/Library/Frameworks") #macos
                      set_target_properties(MyAPP PROPERTIES MACOSX_BUNDLE TRUE)
                  endif ()
                  
                  if ("${CMAKE_SYSTEM_NAME}" STREQUAL "iOS")
                      qt6_import_plugins(MyAPP
                          INCLUDE Qt6::QMinimalIntegrationPlugin
                          INCLUDE Qt6::Core
                          INCLUDE Qt6::Qml
                          INCLUDE Qt6::Widgets
                          INCLUDE Qt6::Network
                          INCLUDE Qt6::Quick
                          INCLUDE Qt6::Concurrent
                          INCLUDE Qt6::Core5Compat
                          INCLUDE Qt6::QuickControls2
                          INCLUDE Common
                          INCLUDE_BY_TYPE platforms
                      )
                      macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
                          set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
                      endmacro (set_xcode_property)
                      set(CMAKE_SYSTEM_PROCESSOR aarch64)
                      set_target_properties(MyAPP PROPERTIES XCODE_ATTRIBUTE_ENABLE_BITCODE "NO")
                      set_target_properties(MyAPP PROPERTIES QT_IOS_LAUNCH_SCREEN "${CMAKE_CURRENT_SOURCE_DIR}/Launch.storyboard")
                      include(build-tools/mycompany/ios/AddQtIosApp.cmake)
                      add_qt_ios_app(MyAPP
                          NAME "MyAPP"
                          BUNDLE_IDENTIFIER ${APPLE_BUNDLE_IDENTIFIER}
                          VERSION ${APPLE_SHORT_VERSION}
                          SHORT_VERSION ${APPLE_SHORT_VERSION}
                          LONG_VERSION ${APPLE_LONG_VERSION}
                          CUSTOM_PLIST ${APPLE_CUSTOM_PLIST}
                          ASSET_DIR ${APPLE_ASSET_DIR}
                          TEAM_ID ${APPLE_TEAM_ID}
                          CODE_SIGN_IDENTITY ${APPLE_CODE_SIGN_IDENTITY}
                          PROVISIONING_PROFILE_SPECIFIER ${APPLE_PROVISIONING_PROFILE_SPECIFIER}
                          IPA
                      ) #https://github.com/OlivierLDff/QtIosCMake
                  elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
                      set_target_properties(MyAPP PROPERTIES
                          BUNDLE True
                          BUNDLE_IDENTIFIER de.mycompany.macos.myapp
                          MACOSX_BUNDLE_GUI_IDENTIFIER de.mycompany.macos.myapp
                          MACOSX_BUNDLE_BUNDLE_NAME MyAPP
                          MACOSX_BUNDLE_BUNDLE_VERSION "2.0.4"
                          MACOSX_BUNDLE_SHORT_VERSION_STRING "2.0.4"
                          #MACOSX_BUNDLE_INFO_PLIST ${PROJECT_SOURCE_DIR}/build-tools/mycompany/Info.plist.in
                      )
                  elseif (ANDROID)
                      include(build-tools/mycompany/android/AddQtAndroidApk.cmake)
                      # https://github.com/LaurentGomila/qt-android-cmake/tree/master
                      add_qt_android_apk(Alpha_apk MyAPP
                          NAME "MyAPP"
                          PACKAGE_SOURCES ${ANDROID_PACKAGE_SOURCE}
                          PACKAGE_NAME ${ANDROID_PACKAGE_NAME}
                          VERSION_CODE ${ANDROID_VERSION_CODE}
                          KEYSTORE ${ANDROID_KEYSTORE_FILE}
                          KEYSTORE_PASSWORD ${ANDROID_KEYSTORE_PASSWORD}
                          KEY_ALIAS ${ANDROID_KEY_ALIAS}
                          KEY_PASSWORD ${ANDROID_KEY_PASSWORD}
                      )
                  elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Emscripten")
                      target_link_options(MyAPP PRIVATE
                          "SHELL:-s FULL_ES2=1"
                          "SHELL:-s FULL_ES3=1")
                  endif ()
                  
                  set_target_properties(MyAPP PROPERTIES IMPORTED_LOCATION external_libs/ftd2xx.dll
                  )
                  
                  Axel SpoerlA Offline
                  Axel SpoerlA Offline
                  Axel Spoerl
                  Moderators
                  wrote on last edited by
                  #9

                  Good morning @astoffregen,

                  thanks for sharing. In a static build, qtquick2pluginhas to be linked explicitly. If your app is using any quick layouts, you'll also need to link the respective plugin.

                  Adding this will probably solve the problem (untested ;-)

                  if(NOT QT6_IS_SHARED_LIBS_BUILD)
                      target_link_libraries(MyApp PRIVATE
                          Qt6::qtquick2plugin
                          Qt6::qquicklayoutsplugin
                      )
                  endif()
                  
                  

                  Software Engineer
                  The Qt Company, Oslo

                  A 1 Reply Last reply
                  1
                  • Axel SpoerlA Axel Spoerl

                    Good morning @astoffregen,

                    thanks for sharing. In a static build, qtquick2pluginhas to be linked explicitly. If your app is using any quick layouts, you'll also need to link the respective plugin.

                    Adding this will probably solve the problem (untested ;-)

                    if(NOT QT6_IS_SHARED_LIBS_BUILD)
                        target_link_libraries(MyApp PRIVATE
                            Qt6::qtquick2plugin
                            Qt6::qquicklayoutsplugin
                        )
                    endif()
                    
                    
                    A Offline
                    A Offline
                    astoffregen
                    wrote on last edited by astoffregen
                    #10

                    @Axel-Spoerl
                    Good morning Axel,
                    we are on the right track thanks for your support.
                    After adding the plugins, the app starts and tries to open the Main.qml.
                    However, further errors occur here.

                    2024-01-15 12:50:04.929169-0800 MyApp[445:14608] This plugin does not support setting window masks
                    2024-01-15 12:50:06.063795-0800 MyApp[445:14608] QQmlApplicationEngine failed to load component
                    2024-01-15 12:50:06.063928-0800 MyApp[445:14608] qrc:/assets/alpha/Main.qml:5:1: module "Qt5Compat.GraphicalEffects" is not installed
                    2024-01-15 12:50:06.063990-0800 MyApp[445:14608] qrc:/assets/alpha/Main.qml:4:1: module "QtQuick.Dialogs" is not installed
                    2024-01-15 12:50:06.064032-0800 MyApp[445:14608] qrc:/assets/alpha/Main.qml:3:1: module "QtQuick.Window" is not installed
                    2024-01-15 12:50:06.064072-0800 MyApp[445:14608] qrc:/assets/alpha/Main.qml: module "QtQuick.Controls.Basic" is not installed
                    

                    But the components should already be available via the includes or not?

                    Axel SpoerlA 1 Reply Last reply
                    0
                    • A astoffregen

                      @Axel-Spoerl
                      Good morning Axel,
                      we are on the right track thanks for your support.
                      After adding the plugins, the app starts and tries to open the Main.qml.
                      However, further errors occur here.

                      2024-01-15 12:50:04.929169-0800 MyApp[445:14608] This plugin does not support setting window masks
                      2024-01-15 12:50:06.063795-0800 MyApp[445:14608] QQmlApplicationEngine failed to load component
                      2024-01-15 12:50:06.063928-0800 MyApp[445:14608] qrc:/assets/alpha/Main.qml:5:1: module "Qt5Compat.GraphicalEffects" is not installed
                      2024-01-15 12:50:06.063990-0800 MyApp[445:14608] qrc:/assets/alpha/Main.qml:4:1: module "QtQuick.Dialogs" is not installed
                      2024-01-15 12:50:06.064032-0800 MyApp[445:14608] qrc:/assets/alpha/Main.qml:3:1: module "QtQuick.Window" is not installed
                      2024-01-15 12:50:06.064072-0800 MyApp[445:14608] qrc:/assets/alpha/Main.qml: module "QtQuick.Controls.Basic" is not installed
                      

                      But the components should already be available via the includes or not?

                      Axel SpoerlA Offline
                      Axel SpoerlA Offline
                      Axel Spoerl
                      Moderators
                      wrote on last edited by
                      #11

                      @astoffregen said in QT iOS app plugins not found issue?:

                      module "Qt5Compat.GraphicalEffects" is not installed

                      Good morning,
                      all of those modules need to be found and linked in the CMake file, e.g.

                      find_package(Qt6 COMPONENTS Core5Compat Quick REQUIRED)
                      target_link_libraries(MyApp PUBLIC
                          Qt6::Core5Compat
                          Qt6::Quick
                      )
                      

                      Greetings from a cold, stormy winter in Oslo,
                      Axel

                      Software Engineer
                      The Qt Company, Oslo

                      A 1 Reply Last reply
                      0
                      • Axel SpoerlA Axel Spoerl

                        @astoffregen said in QT iOS app plugins not found issue?:

                        module "Qt5Compat.GraphicalEffects" is not installed

                        Good morning,
                        all of those modules need to be found and linked in the CMake file, e.g.

                        find_package(Qt6 COMPONENTS Core5Compat Quick REQUIRED)
                        target_link_libraries(MyApp PUBLIC
                            Qt6::Core5Compat
                            Qt6::Quick
                        )
                        

                        Greetings from a cold, stormy winter in Oslo,
                        Axel

                        A Offline
                        A Offline
                        astoffregen
                        wrote on last edited by
                        #12

                        @Axel-Spoerl
                        Hello Axel,
                        thanks for so soon response. Yes it's also very cold here in Hamburg. As you can find in attached CMakeText file we included this already ?

                        target_link_libraries(MyAPP PRIVATE
                            Qt6::Core
                            Qt6::Qml
                            Qt6::Widgets
                            Qt6::Network
                            Qt6::Quick
                            Qt6::Concurrent
                            Qt6::Core5Compat
                            Qt6::QuickControls2
                            Common
                        )
                        
                        Axel SpoerlA 1 Reply Last reply
                        0
                        • A astoffregen

                          @Axel-Spoerl
                          Hello Axel,
                          thanks for so soon response. Yes it's also very cold here in Hamburg. As you can find in attached CMakeText file we included this already ?

                          target_link_libraries(MyAPP PRIVATE
                              Qt6::Core
                              Qt6::Qml
                              Qt6::Widgets
                              Qt6::Network
                              Qt6::Quick
                              Qt6::Concurrent
                              Qt6::Core5Compat
                              Qt6::QuickControls2
                              Common
                          )
                          
                          Axel SpoerlA Offline
                          Axel SpoerlA Offline
                          Axel Spoerl
                          Moderators
                          wrote on last edited by
                          #13

                          @astoffregen

                          we included this already

                          Oh, my bad, I overlooked that. Furthermore, "not installed" points more at deployment being the issue.

                          What I don't find explicitly in the CMake file, is main.qml.
                          So I guess it is sort of implicitly added as a resource and main.cppknows how to find it.

                          => Is a qmldirdirectory in the resource tree?
                          Something along the lines of this might help:

                          install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qmldir
                              DESTINATION "${INSTALL_DIR}"
                          

                          Software Engineer
                          The Qt Company, Oslo

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved