7 Replies
      Latest reply on May 11, 2020 3:27 PM by Rulovic
      Rulovic Level 1 Level 1 (0 points)

        I have Cocoa application where I need to ask for recording and accessibility permission. I am seeing that only first feature asking for permissions shows its popup.

        E.g If I put first code to ask for recording screen permission I dont see accessibility and in the Security and Privacy my app appears as I had rejected permission

        Same happens on the other way around.

        This is the code to request screen recording:

        CGDisplayStreamRef stream =
          CGDisplayStreamCreate(CGMainDisplayID(), 1, 1, kCVPixelFormatType_32BGRA, nil,
          ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
          Q_UNUSED(status) Q_UNUSED(displayTime) Q_UNUSED(frameSurface) Q_UNUSED(updateRef) });
        if (stream)
          CFRelease(stream);

         

        And this is the code for accessibility

         

        NSDictionary *options = @{(id)kAXTrustedCheckOptionPrompt: @YES};
        Boolean accessibilityEnabled = AXIsProcessTrustedWithOptions((CFDictionaryRef)options);
        
        

        How can I fix this, please?

        Thanks in advance and regards

        • Re: Display several system popups cocoa application
          Rulovic Level 1 Level 1 (0 points)

          No ideas or replies to this??? Is anyone else seeing this ?

            • Re: Display several system popups cocoa application
              Claude31 Level 8 Level 8 (9,135 points)

              Could you show more code, where you test and ask for (all) permission.

                • Re: Display several system popups cocoa application
                  Rulovic Level 1 Level 1 (0 points)

                  Hello,

                  Sorry for the late reply. I Have two functions which are called consecutively. Here is the code:

                   

                  void MacUtils::checkIfScreenRecordingEnabledShowPopupIfNot()
                  {
                      qInfo() << "MacUtils::checkIfScreenRecordingEnabledShowPopupIfNot()";
                      CGDisplayStreamRef stream =
                           CGDisplayStreamCreate(CGMainDisplayID(), 1, 1, kCVPixelFormatType_32BGRA, nil,
                                                 ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
                                                   Q_UNUSED(status) Q_UNUSED(displayTime) Q_UNUSED(frameSurface) Q_UNUSED(updateRef) });
                      if (stream)
                         CFRelease(stream);
                  }
                  
                  
                  bool MacUtils::checkIfAccessibilityEnabledAndDisplayPopup()
                  {
                      // Method to check if accessibility is enabled
                      // Passing YES to kAXTrustedCheckOptionPrompt forces showing popup
                      NSDictionary *options = @{(id)kAXTrustedCheckOptionPrompt: @YES};
                      Boolean accessibilityEnabled = AXIsProcessTrustedWithOptions((CFDictionaryRef)options);
                      return (!!accessibilityEnabled);
                  } 

                   

                  First method is for screen recording permission, second one is for accessibility

                  If i call first method I see the popup asking for screen recording permissions but then I dont see accesibility popup and if I go to privacy menu it appears like if I had denied permission (app unchecked)

                  Do you have an idea how I can solve this?

                  Thanks in advance

                    • Re: Display several system popups cocoa application
                      Claude31 Level 8 Level 8 (9,135 points)

                      I cannot understand from the code how all calls fit together, what is the sequence of call, if it occurs sync or async…

                       

                      So, sorry, I give up on this.

                        • Re: Display several system popups cocoa application
                          Rulovic Level 1 Level 1 (0 points)

                          This is the complete example in Obj-C. Just in case you see something:

                          //
                          //  main.m
                          //  ScreenshotTest
                          //
                          //  Created by Raul Sanchez on 24/12/2019.
                          //  Copyright © 2019 Raul Sanchez. All rights reserved.
                          //
                          
                          #import <Foundation/Foundation.h>
                          #import <CoreVideo/CVPixelFormatDescription.h>
                          
                          void showPopupIfNotSCreenRecording()
                          {
                              CGDisplayStreamRef stream =
                              CGDisplayStreamCreate(CGMainDisplayID(), 1, 1, kCVPixelFormatType_32BGRA, nil,
                                                    ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {});
                              if (stream)
                                  CFRelease(stream);
                          }
                          
                          bool checkIfAccessibilityEnabledAndDisplayPopup()
                          {
                              // Method to check if accessibility is enabled
                              // Passing YES to kAXTrustedCheckOptionPrompt forces showing popup
                              NSDictionary *options = @{(__bridge id)kAXTrustedCheckOptionPrompt: @YES};
                              Boolean accessibilityEnabled = AXIsProcessTrustedWithOptions((CFDictionaryRef)options);
                              return (!!accessibilityEnabled);
                          }
                          
                          int main(int argc, const char * argv[]) {
                              @autoreleasepool {
                                  NSLog(@"Lets try this");
                                  showPopupIfNotSCreenRecording();
                                  checkIfAccessibilityEnabledAndDisplayPopup();
                                  NSLog(@"End of program");
                              }
                              return 0;
                          }
                          
                        • Re: Display several system popups cocoa application
                          janabanana Level 1 Level 1 (10 points)

                          In line 19, why are you using two not operators?  Why not just return the bool, accessibilityEnabled, as is?