Post

Replies

Boosts

Views

Activity

openApplicationAtURL function can't open cocoa application itself
I am using the openApplicationAtURL:(NSURL *)applicationURL configuration:(NSWorkspaceOpenConfiguration *)configuration completionHandler:(void (^ _Nullable)(NSRunningApplication *_Nullable app, NSError *_Nullable error))completionHandler function to open the application itself on macOS Ventura. I need to restart the software itself before it exits. So I call the openApplicationAtURL function to reopen it. But it failed. In the same code, I can successfully open any other software(As soon as I change the name of the software), but it can not open the software itself. Is there any way to resolve it? Sample code: NSBundle* bundle = NSBundle.mainBundle; NSWorkspace* workspace = NSWorkspace.sharedWorkspace; NSWorkspaceOpenConfiguration* configuration = [NSWorkspaceOpenConfiguration new]; NSDictionary* env = @{}; [configuration setEnvironment: env]; [configuration setPromptsUserIfNeeded: YES]; NSString* path = bundle.bundlePath; [workspace openApplicationAtURL: [NSURL fileURLWithPath: path] configuration: configuration completionHandler:^(NSRunningApplication* app, NSError* error) { if (error) { NSLog(@"Failed to run the app: %@", error.localizedDescription); } }];
1
0
1.2k
Nov ’22
App crash in macOS API "CGDisplayStreamCreateWithDispatchQueue" on macOS Ventura
We use “CGDisplayStreamCreateWithDispatchQueue” function to create a display stream, sometimes the application show crash on macOS Ventura. It can be use normally on macOS Monterey/Big Sur/Catalina/… I can see this bug by other Application(Through the Console->Crash Report), which is also use this function. The relevant code is as follows:     CGDisplayStreamRef _displayStream;     CGDirectDisplayID displayID = CGMainDisplayID();     unsigned long modeWidth;     unsigned long modeHeight;     modeWidth = CGDisplayPixelsWide(displayID);     modeHeight = CGDisplayPixelsHigh(displayID);     CGDisplayModeRef displayModeRef = CGDisplayCopyDisplayMode(displayID);     if (displayModeRef){         modeWidth = CGDisplayModeGetPixelWidth(displayModeRef);         modeHeight = CGDisplayModeGetPixelHeight(displayModeRef);     }     CGDisplayModeRelease(displayModeRef);     NSLog(@"enable stream, displayID[0x%x], mode[%lu x %lu]\n", displayID, modeWidth, modeHeight);     const int var_prop = 2;     const void* keys[var_prop] = { kCGDisplayStreamDestinationRect, kCGDisplayStreamShowCursor};     const void* values[var_prop] = { CGRectCreateDictionaryRepresentation(CGRectMake(0, 0, modeWidth, modeHeight)) , kCFBooleanTrue};     CFDictionaryRef properties = CFDictionaryCreate(NULL, keys, values, var_prop, NULL, NULL);     _displayStream = CGDisplayStreamCreateWithDispatchQueue(displayID, modeWidth, modeHeight, 'BGRA', properties, dispatchQueue, ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {             if(status == kCGDisplayStreamFrameStatusStopped)             {                 NSLog(@"kCGDisplayStreamFrameStatusStopped is received!");                 bIsStreamStatusStopped = true;                 return;             }             if(status == kCGDisplayStreamFrameStatusFrameComplete && frameSurface)             {                 CFRetain(frameSurface);                 IOSurfaceIncrementUseCount(frameSurface);                 CFRetain(updateRef);                 [[NSOperationQueue mainQueue] addOperationWithBlock:^{                     if(!bIsStreamStatusStopped) {                         self.view.layer.contents = (__bridge id _Nullable)(frameSurface);                     }                 }];               CFRelease(updateRef);                 IOSurfaceDecrementUseCount(frameSurface);                 CFRelease(frameSurface);             }     });     if (_displayStream)     {         CGError err = CGDisplayStreamStart(_displayStream);         bIsStreamStatusStopped = false;         if (err != CGDisplayNoErr)         {             NSLog(@"Error %u starting display stream", (unsigned)err);             CFRelease(_displayStream);             _displayStream = 0;         }     }     else         NSLog(@"create stream failed.\n"); The crash log is as follows: 0 CoreFoundation 0x189889e48 CFGetTypeID + 148 1 CoreFoundation 0x1898ac970 __CFPropertyListIsValidAux + 60 2 CoreFoundation 0x1898aedd4 __CFPropertyListIsDictPlistAux + 188 3 CoreFoundation 0x1898eab40 __CFDictionaryApplyFunction_block_invoke + 28 4 CoreFoundation 0x1898b2c38 CFBasicHashApply + 148 5 CoreFoundation 0x1898a4814 CFDictionaryApplyFunction + 320 6 CoreFoundation 0x1898acb9c __CFPropertyListIsValidAux + 616 7 CoreFoundation 0x1898beea8 CFPropertyListWrite + 92 8 CoreFoundation 0x1898de418 CFPropertyListCreateData + 144 9 SkyLight 0x18e4aba04 CGSPropertyListCreateSerializedData + 72 10 SkyLight 0x18e4b72ac CGSPropertyListCreateSerializedBytes + 68 11 SkyLight 0x18e699e14 CGSPropertyListPerformWithSerializedBytes + 64 12 SkyLight 0x18e5c25c4 SLDisplayStreamCreate + 296 13 SkyLight 0x18e5c3008 SLDisplayStreamCreateWithDispatchQueue + 52 14 macOS InstantView 0x1043617f8 0x104328000 + 235512 15 macOS InstantView 0x1043619fc 0x104328000 + 236028 16 macOS InstantView 0x104361444 0x104328000 + 234564 17 SkyLight 0x18e4b9f8c displayConfigFinalizedProc + 276 18 SkyLight 0x18e4b1558 CGSPostLocalNotification + 172 19 SkyLight 0x18e4b1148 (anonymous namespace)::notify_datagram_handler(unsigned int, CGSDatagramType, void*, unsigned long, void*) + 116 20 SkyLight 0x18e7d3bec CGSDatagramReadStream::dispatchMainQueueDatagrams() + 228 21 SkyLight 0x18e7d3ae8 invocation function for block in CGSDatagramReadStream::mainQueueWakeup() + 28 22 libdispatch.dylib 0x189680a48 _dispatch_call_block_and_release + 32 23 libdispatch.dylib 0x189682570 _dispatch_client_callout + 20 24 libdispatch.dylib 0x189690d28 _dispatch_main_queue_drain + 928 25 libdispatch.dylib 0x189690978 _dispatch_main_queue_callback_4CF + 44 26 CoreFoundation 0x18992a77c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 27 CoreFoundation 0x1898e82d0 __CFRunLoopRun + 2036 28 CoreFoundation 0x1898e7388 CFRunLoopRunSpecific + 612 29 HIToolbox 0x192f06a68 RunCurrentEventLoopInMode + 292 30 HIToolbox 0x192f068ac ReceiveNextEventCommon + 672 31 HIToolbox 0x192f065f4 _BlockUntilNextEventMatchingListInModeWithFilter + 72 32 AppKit 0x18cb2621c _DPSNextEvent + 632 33 AppKit 0x18cb253ac -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 728 34 AppKit 0x18cb1972c -[NSApplication run] + 464 35 AppKit 0x18caf0a24 NSApplicationMain + 880 36 macOS InstantView 0x1043546cc 0x104328000 + 181964 37 dyld
1
0
1.1k
Nov ’22
ScreenCaptureKit - Sample project need obtain screen recording permissions every time.
Get screen recording permission window show every time when I run the ScreenCaptureKit sample project on macOS Sonoma Beta5: Even though I've already provided permissions in the screen recording permissions: This box keeps popping up, and until I remove the old recorded "CaptureSample" screen-recording permissions in "System Settings->Screen Recording" and add them again, it won't be able to record. This issue happens many times a day! Does anyone know how to fix it? Thanks~
2
0
958
Aug ’23