Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Codesign with Qt 5.14.2 under MacOS 10.15

Codesign with Qt 5.14.2 under MacOS 10.15

Scheduled Pinned Locked Moved Unsolved General and Desktop
14 Posts 3 Posters 5.2k Views 3 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.
  • J Offline
    J Offline
    jbolduc01
    wrote on last edited by
    #4

    I am not even able to codesign the player example of QT. Does not seem to be related to our app code...

    1 Reply Last reply
    0
    • J Offline
      J Offline
      jbolduc01
      wrote on last edited by
      #5

      If I use the macdeployqt with -codesign option on the "player" example, if I try to notarize the app, I get the following error:

      {
        "logFormatVersion": 1,
        "jobId": "2e7f41df-e171-4973-a7c0-eb700e48724e",
        "status": "Invalid",
        "statusSummary": "Archive contains critical validation errors",
        "statusCode": 4000,
        "archiveFilename": "player.zip",
        "uploadDate": "2020-05-11T19:03:27Z",
        "sha256": "530034e4ae6f1edc512410087ddccd8e6c03b3d700ac36f94bcb590404da854d",
        "ticketContents": null,
        "issues": [
          {
            "severity": "error",
            "code": null,
            "path": "player.zip/player.app/Contents/MacOS/player",
            "message": "The executable does not have the hardened runtime enabled.",
            "docUrl": null,
            "architecture": "x86_64"
          }
        ]
      }
      

      I really need the --option runtime of codesign in order to notarize successfuly. How can I enable this through macdeployqt?

      1 Reply Last reply
      0
      • sierdzioS Offline
        sierdzioS Offline
        sierdzio
        Moderators
        wrote on last edited by
        #6

        OK, then you need to patch macdeployqt, too. I haven't pushed the patch to Qt yet (no time, sorry :( ), but it's really a very simple thing:

        In macdeployqt/shared/shared.cpp, function void codesignFile(const QString &identity, const QString &filePath), add the following line to codesign args:

        << "-o" << "runtime"
        

        So full function now looks like this (might be a bit different, depending on which Qt version you're using):

        void codesignFile(const QString &identity, const QString &filePath)
        {
            if (!runCodesign)
                return;
        
            LogNormal() << "codesign" << filePath;
        
            QProcess codesign;
            codesign.start("codesign", QStringList() << "--preserve-metadata=identifier,entitlements"
                                                     << "--force"
                                                     << "-o" << "runtime"
                                                     << "--strict"
                                                     << "-s" << identity << filePath);
            codesign.waitForFinished(-1);
        
            QByteArray err = codesign.readAllStandardError();
            if (codesign.exitCode() > 0) {
                LogError() << "Codesign signing error:";
                LogError() << err;
            } else if (!err.isEmpty()) {
                LogDebug() << err;
            }
        }
        

        Compile, then use that macdeployqt to deploy your app, with codesign. It should work, it does for me.

        (Z(:^

        1 Reply Last reply
        1
        • J Offline
          J Offline
          jbolduc01
          wrote on last edited by
          #7

          I tried the following patch but it did not solve my problem. Here is the log:

          {
            "logFormatVersion": 1,
            "jobId": "914ed841-7775-48cf-b170-22abff37f19f",
            "status": "Invalid",
            "statusSummary": "Archive contains critical validation errors",
            "statusCode": 4000,
            "archiveFilename": "INOGENI_Control_App.dmg",
            "uploadDate": "2020-05-12T18:01:41Z",
            "sha256": "64d7e8243d103501308d0212767cc6bec9e66c5d33d7d1d726bb9a359fe5f18b",
            "ticketContents": null,
            "issues": [
              {
                "severity": "error",
                "code": null,
                "path": "INOGENI_Control_App.dmg/INOGENI Control App.app/Contents/Frameworks/libcyusb.dylib",
                "message": "The binary is not signed.",
                "docUrl": null,
                "architecture": "x86_64"
              },
              {
                "severity": "error",
                "code": null,
                "path": "INOGENI_Control_App.dmg/INOGENI Control App.app/Contents/Frameworks/libcyusb.dylib",
                "message": "The signature does not include a secure timestamp.",
                "docUrl": null,
                "architecture": "x86_64"
              },
              {
                "severity": "error",
                "code": null,
                "path": "INOGENI_Control_App.dmg/INOGENI Control App.app/Contents/MacOS/INOGENIControlApp",
                "message": "The binary is not signed.",
                "docUrl": null,
                "architecture": "x86_64"
              },
              {
                "severity": "error",
                "code": null,
                "path": "INOGENI_Control_App.dmg/INOGENI Control App.app/Contents/MacOS/INOGENIControlApp",
                "message": "The signature does not include a secure timestamp.",
                "docUrl": null,
                "architecture": "x86_64"
              },
              {
                "severity": "error",
                "code": null,
                "path": "INOGENI_Control_App.dmg/INOGENI Control App.app/Contents/MacOS/INOGENIControlApp",
                "message": "The executable does not have the hardened runtime enabled.",
                "docUrl": null,
                "architecture": "x86_64"
              }
            ]
          }
          

          Tried to add --timestamp option, got rid of the timestamp errors, but seems like I need to --deep option to sign binaries

          After adding --deep and --timestamp options, able to sign app. However, the application will not ask to access camera and microphones. How to specify entitlements?

          1 Reply Last reply
          1
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #8

            Hi,

            Did you add the appropriate entries in your Info.plist file ?

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • J Offline
              J Offline
              jbolduc01
              wrote on last edited by
              #9

              Here is my Info.plist.

              <?xml version="1.0" encoding="UTF-8"?>
              <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
              <plist version="1.0">
              <dict>
                      <key>CFBundleDocumentTypes</key>
                      <array>
                              <dict>
                                      <key>CFBundleTypeExtensions</key>
                                      <array>
                                              <string>inogeniupdate</string>
                                      </array>
                                      <key>CFBundleTypeIconFile</key>
                                      <string>@ICON@</string>
                                      <key>CFBundleTypeName</key>
                                      <string>INOGENI Control App</string>
                                      <key>CFBundleTypeRole</key>
                                      <string>Editor</string>
                                      <key>LSTypeIsPackage</key>
                                      <true/>
                                      <key>NSPersistentStoreTypeKey</key>
                                      <string>Binary</string>
                              </dict>
                      </array>
                      <key>CFBundleExecutable</key>
                      <string>@EXECUTABLE@</string>
                      <key>CFBundleGetInfoString</key>
                      <string>INOGENI Control App for updating and preview video</string>
                      <key>CFBundleIconFile</key>
                      <string>@ICON@</string>
                      <key>CFBundleIdentifier</key>
                      <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
                      <key>CFBundlePackageType</key>
                      <string>APPL</string>
                      <key>CFBundleShortVersionString</key>
                      <string>@SHORT_VERSION@</string>
                      <key>CFBundleSignature</key>
                      <string>????</string>
                      <key>CFBundleVersionString</key>
                      <string>@FULL_VERSION@</string>
                      <key>LSApplicationCategoryType</key>
                      <string>Utilities</string>
                      <key>NSCameraUsageDescription</key>
                      <string>Allow access to INOGENI video device</string>
                      <key>NSHumanReadableCopyright</key>
                      <string>2018 Dextera Labs Inc.</string>
              	<key>CFBundleGetInfoString</key>
                      <string>INOGENI Control App for updating and preview video</string>
              	<key>CFBundleSignature</key>
              	<string>????</string>
              	<key>CFBundleExecutable</key>
              	<string>@EXECUTABLE@</string>
              	<key>CFBundleIdentifier</key>
                      <string>com.dexteralabs.InogeniControlApp</string>
                      <key>NSCameraUsageDescription</key>
                      <string>Allow access to INOGENI video device</string>
                      <key>NSMicrophoneUsageDescription</key>
                      <string>Allow access to INOGENI audio device</string>
                      <key>NSPrincipalClass</key>
                      <string>NSApplication</string>
                      <key>application-identifier</key>
                      <string>XXXXXX.com.dexteralabs.InogeniControlApp</string>
              </dict>
              </plist>
              

              After issuing macdeployqt, I see this in the log:

              ERROR: Codesign signing error:
              ERROR: "/Users/support/dextera_inogeni_ctrl_app_s/build-InogeniControlApp-Desktop_Qt_5_14_2_clang_64bit-Release/INOGENIControlApp.app/Contents/MacOS/INOGENIControlApp: code object is not signed at all\nIn subcomponent: /Users/support/dextera_inogeni_ctrl_app_s/build-InogeniControlApp-Desktop_Qt_5_14_2_clang_64bit-Release/INOGENIControlApp.app/Contents/Frameworks/libcyusb.dylib\n"
              ERROR: codesign verification error:
              ERROR: "INOGENIControlApp.app: code object is not signed at all\nIn architecture: x86_64\n"
              

              If I do this, the problem goes away when I use macdeployqt again.

              codesign --sign "Developer ID Application: Laboratoires Dextera Inc., Les (XXXXXXXXXXX)" --deep --force INOGENIControlApp.app/Contents/Frameworks/*.dylib
              

              Our application access USB devices like cameras and microphone. After signing, I do not get any messages to access the devices.

              1 Reply Last reply
              0
              • J Offline
                J Offline
                jbolduc01
                wrote on last edited by
                #10

                FYI, I think it has something to do with our HID access. How to allow HID access in Info.plist or entitlements.plist?

                1 Reply Last reply
                0
                • J Offline
                  J Offline
                  jbolduc01
                  wrote on last edited by
                  #11

                  How to specify right entitlements for my app? specifying --entitlements it in macdeployqt codesignFile() function will lead to a crash after opening app...

                  Process:               INOGENIControlApp [30924]
                  Path:                  /Users/USER/*/INOGENIControlApp.app/Contents/MacOS/INOGENIControlApp
                  Identifier:            INOGENIControlApp
                  Version:               ???
                  Code Type:             X86-64 (Native)
                  Parent Process:        Qt Creator [2398]
                  Responsible:           Qt Creator [2398]
                  User ID:               501
                  
                  Date/Time:             2020-05-13 16:03:23.379 -0400
                  OS Version:            Mac OS X 10.15.4 (19E287)
                  Report Version:        12
                  Anonymous UUID:        E8D88CDF-07D9-A195-32CD-A03AB946A744
                  
                  Sleep/Wake UUID:       1E06ED2C-DBB6-4946-A51D-DC1B91660443
                  
                  Time Awake Since Boot: 38000 seconds
                  Time Since Wake:       21000 seconds
                  
                  System Integrity Protection: enabled
                  
                  Crashed Thread:        Unknown
                  
                  Exception Type:        EXC_CRASH (Code Signature Invalid)
                  Exception Codes:       0x0000000000000000, 0x0000000000000000
                  Exception Note:        EXC_CORPSE_NOTIFY
                  
                  Termination Reason:    Namespace CODESIGNING, Code 0x1
                  
                  kernel messages:
                  
                  Backtrace not available
                  
                  Unknown thread crashed with X86 Thread State (64-bit):
                    rax: 0x0000000000000000  rbx: 0x0000000000000000  rcx: 0x0000000000000000  rdx: 0x0000000000000000
                    rdi: 0x0000000000000000  rsi: 0x0000000000000000  rbp: 0x0000000000000000  rsp: 0x00007ffeed65eb20
                     r8: 0x0000000000000000   r9: 0x0000000000000000  r10: 0x0000000000000000  r11: 0x0000000000000000
                    r12: 0x0000000000000000  r13: 0x0000000000000000  r14: 0x0000000000000000  r15: 0x0000000000000000
                    rip: 0x000000010623d000  rfl: 0x0000000000000200  cr2: 0x0000000000000000
                    
                  Logical CPU:     0
                  Error Code:      0x00000000
                  Trap Number:     0
                  
                  
                  Binary images description not available
                  
                  
                  External Modification Summary:
                    Calls made by other processes targeting this process:
                      task_for_pid: 0
                      thread_create: 0
                      thread_set_state: 0
                    Calls made by this process:
                      task_for_pid: 0
                      thread_create: 0
                      thread_set_state: 0
                    Calls made by all processes on this machine:
                      task_for_pid: 20238
                      thread_create: 0
                      thread_set_state: 572
                  
                  1 Reply Last reply
                  0
                  • J Offline
                    J Offline
                    jbolduc01
                    wrote on last edited by
                    #12

                    I got it to work. Seems like I just changed the entitlements file to be <projectName>.entitlements and put it in root directory of project and now the app launches fine.

                    1 Reply Last reply
                    2
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #13

                      @sierdzio said in Codesign with Qt 5.14.2 under MacOS 10.15:

                      << "-o" << "runtime"

                      Looks like this one is now done for 5.15

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      sierdzioS 1 Reply Last reply
                      1
                      • SGaistS SGaist

                        @sierdzio said in Codesign with Qt 5.14.2 under MacOS 10.15:

                        << "-o" << "runtime"

                        Looks like this one is now done for 5.15

                        sierdzioS Offline
                        sierdzioS Offline
                        sierdzio
                        Moderators
                        wrote on last edited by
                        #14

                        @SGaist said in Codesign with Qt 5.14.2 under MacOS 10.15:

                        @sierdzio said in Codesign with Qt 5.14.2 under MacOS 10.15:

                        << "-o" << "runtime"

                        Looks like this one is now done for 5.15

                        Thanks for info :-)

                        (Z(:^

                        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