I am building a macOS project where I m creating a thread using pthread in cpp. I am setting the QOS class using the pthread_attr_set_qos_class_np and later checking the value of the QOS class using the pthread_attr_get_qos_class_np. These calls are successful but the QOS class is not being set. Below is the cpp function that I m invoking from my swift code.
bool CppThread::CreateThread ()
{
pthread_t threadId;
pthread_attr_t attr;
qos_class_t qos_class;
int relative_priority;
int rc = pthread_attr_init(&attr);
if (rc) {
printf ("pthread_attr_init failed");
}
if (pthread_attr_set_qos_class_np (&attr, QOS_CLASS_BACKGROUND, 5)) {
printf ("pthread_attr_set_qos_class_np failed\n");
}
int retval = pthread_create(&threadId, &attr, threadFunction, NULL);
if (retval) {
std::cerr << "Error creating thread" << std::endl;
return false;
}
if (pthread_attr_get_qos_class_np (&attr, &qos_class, &relative_priority)) {
printf ("pthread_attr_get_qos_class_np failed\n");
}
printf ("QoS class: %d, Relative priority: %d\n", qos_class, relative_priority);
pthread_join(threadId, NULL); // Wait for thread to finish
std::cout << "Thread finished" << std::endl;
return true;
}
OUTPUT:
QoS class: 0, Relative priority: 0
Thread finished
I have tried setting multiple QOS values but the output always shows the QOS class value as 0. Why is it not getting set?
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
We can see Xcode supports to generate code coverage for unit test bundles. Does it has any support for generating code coverage report for a regular application/bundle. What we want to try is that can I check for my certain application how much code coverage is being done.
If Xcode does not have any support for this, what apple suggest us to do for this ?
I have implemented the new cpp-swift interop mechanism using modulemap file. I have a use case to pass a swift string to the cpp function. I observed that the below code works and I am able to pass a swift String type directly to a cpp function which received it as const char *. This works only if its received as const char * in cpp(and not char *). However, this is not an interop documented behaviour for interoperating String types and wanted to know whether this is safe to use. If not, can someone suggest an alternative approach to pass a swift string to Cpp.
// Swift code
public static func StringToCharPointer () -> Void
{
// calling cpp function and passing a swift String type as argument, which is received as const char *
Student.Convert (sUItextdata) //sUItextdata is of type 'String'
}
//static Cpp function
void Student::Convert (const char * pStr)
{
std::string s(pStr);
std::cout << "char * converted from swift String : " << s << std::endl;
}
Note : I am aware that there is a way to pass it to cpp and receive it as std:string, but I do not wish to use that.
I have a macOS app project implementing the direct Cpp-swift interop mechanism. The project some cpp classes and few Swift class. I wanted to pass a cpp object to a swift function as parameter, so I can use it in my swift code. But the documentation is not very clear on how to do this. Can some please share a code snippet explaining how can I achieve this?
I have tried the below code, but it is giving linker error.
Swift code:
import StClass_modulemap
public class SwiftClass {
..
public static func getCppObj (pObj: inout StClass) -> Void
{
...
}
}
Cpp code:
#include "Student.hpp"
#include "StClass.hpp"
#include <InteropLib-Swift.h>
using namespace InteropLib;
void Student::Introduce() {
//creating cpp to be passed to swift
// StClass StObj(50);
// Teacher::getCppObj(StObj);
std::cout<< "header included in hpp " <<std::endl;
}
calling Student::Introduce is giving a linker error for StClass
I have a very basic macOS bundled application with just the empty delegate methods implemented. I am wanting to launch this application as a daemon but when I am loading my daemon, it fails to run with the error:
The application cannot be opened for an unexpected reason, error=Error Domain=NSCocoaErrorDomain Code=257 "The file “GUIDaemon” couldn’t be opened because you don’t have permission to view it." UserInfo={NSURL=file:///Users/vipul.g/Library/Developer/Xcode/DerivedData/Build/Products/Debug/GUIDaemon.app/, NSFilePath=/Users/vipul.g/Library/Developer/Xcode/DerivedData/Build/Products/Debug/GUIDaemon.app, NSUnderlyingError=0x600000034870 {Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied"}}
Below is my daemon property list file. Can someone help what am I doing wrong here. I have made sure that my app has all the permission required.
<?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>Label</key>
<string>com.demo.GUIDaemonApp.plist</string>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/vipul.g/MySystemWorkspace/stderr.log</string>
<key>StandardOutPath</key>
<string>/Users/vipul.g/MySystemWorkspace/stdout.log</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/open</string>
<string>/Users/vipul.g/Library/Developer/Xcode/DerivedData/Build/Products/Debug/GUIDaemon.app</string>
</array>
</dict>
</plist>
I have a very basic macOS bundled application with just the empty delegate methods implemented. I want to run this application as a daemon, and so I have created the below daemon property list file.
<?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>Label</key>
<string>com.demo.GUIDaemon.plist</string>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/vipul.g/MySystemWorkspace/stderr.log</string>
<key>StandardOutPath</key>
<string>/Users/vipul.g/MySystemWorkspace/stdout.log</string>
<key>Program</key>
<string>/Users/vipul.g/Library/Developer/Xcode/DerivedData/Build/Products/Debug/GUIDaemon.app/Contents/MacOS/GUIDaemon</string>
</dict>
</plist>
After loading the daemon, I can see the application running in the Activity monitor, but only the below delegates can be observed getting invoked in the logs. Other delegate like didBecomeActive, willResignActive are not being invoked. Is this the expected behaviour for launching a bundled application as daemon? Also there are some additional items logged, which I m not sure If they are denoting If something went wrong. Can someone confirm what should be expected?
024-03-14 18:09:59.452 GUIDaemon[45883:5345352] inside main.swift
2024-03-14 18:09:59.454 GUIDaemon[45883:5345352] applicationWillFinishLaunching(_:)
2024-03-14 18:09:59.567 GUIDaemon[45883:5345352] TISFileInterrogator updateSystemInputSources false but old data invalid: currentCacheHeaderPtr nonNULL? 0, ->cacheFormatVersion 0, ->magicCookie 00000000, inputSourceTableCountSys 0
Keyboard Layouts: duplicate keyboard layout identifier -17410.
Keyboard Layouts: keyboard layout identifier -17410 has been replaced with -28673.
Keyboard Layouts: duplicate keyboard layout identifier -30769.
Keyboard Layouts: keyboard layout identifier -30769 has been replaced with -28674.
Keyboard Layouts: duplicate keyboard layout identifier -14934.
Keyboard Layouts: keyboard layout identifier -14934 has been replaced with -28675.
2024-03-14 18:09:59.664 GUIDaemon[45883:5345352] applicationDidFinishLaunching(_:)
I am having a bundled application(.app file) and I am wanting to run this application via ssh session which does not have GUI access. Launching this application in a desktop GUI session, runs the application perfectly. However, on running it on the same machine via ssh session produces an error.
Note: My application does not bring up any GUI window(it' just produces some logs on the terminal), so running it in a non-GUI environment should have worked.
I get the below error when trying to launch the unix exe in the .app bundle( ./Myapp.app/Contents/MacOS/Myapp
) on the terminal. I have observed that applicationDidFinishLaunching(_:) gets called and then the below error occurs.
+[NSXPCSharedListener endpointForReply:withListenerName:replyErrorCode:]: an error occurred while attempting to obtain endpoint for listener 'ClientCallsAuxiliary': Connection interrupted
I tried running other bundled applications via ssh, but all seems to produce the same error. Can someone confirm Is running bundled application in a non GUI session not allowed by Apple. If its allowed, how can I solve this?
Even running the .app file using the open command fails to launch the application, although it produces a different error which is consistent across different applications.
I wanted to perform handling for the exception in my mac and ios application, I am following this link, where it is suggested to follow either the mach exception handling or use Unix signals. I did not find many resources that could be followed to implement mach exception as suggested. Below are the few resources I could find. Can someone point to the some documentation that apple provides for this or some other helpful documentation.
https://gist.github.com/rodionovd/01fff61927a665d78ecf
I have an exception handling frame for an Xcode application in macOS, which contains Cpp and Swift code. I am using the Unix signals frame for handling exceptions using sigaction. My sigaction signal handler get invoked when there is a swift or Cpp exception. However for some exceptions like SIGSEGV, the signal handler gets called repeatedly. To handle this I am using the SA_RESETHAND flag so that the handler gets invoked only once, and then the default action for the signal take over to terminate the process.
This approach works well when an exception occurs due to Cpp code, however when it occurs due to Swift code, the signal handler still gets invoked repeatedly. Can someone explain why is this happening and What is the solution to this?
I have created an intent using AppIntent and this intent(TWIntent in the code below) can be seen in the shortcuts app as an action to create the shortcut.
I am using AppShortcutProvider to create the shortcut so that user can directly make use of it. However, my shortcut does not appear in the shortcut app. The phrases used also do not launch the intent in the spotlight search. Below is my AppShortcutProvider file:
@available(macOS 13.0, *)
struct TWShortcuts: AppShortcutsProvider {
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: TWIntent(),
phrases: [
"Open Intent in \(.applicationName)",
"Open \(.applicationName) Intent",
"Open my Intent in \(.applicationName)",
"Open my \(.applicationName) Intent",
"Open TWIntent"
],
shortTitle: "Open TWIntent",
systemImageName: "rectangle.stack.fill"
)
}
static var shortcutTileColor: ShortcutTileColor = .lightBlue
}
Is there something I m missing? Also can these phrases be used for siri launch in macOS because the documentation mentions that macOS does not have siri capability?
Below is my AppIntent file:
import SwiftUI
@available(macOS 13, *)
struct TWIntent: AppIntent {
static let title: LocalizedStringResource = "TWIntent"
static var description = IntentDescription("try adding this sample action as your TW shortcut")
//launch app on running action
static var openAppWhenRun: Bool = false
static var parameterSummary: some ParameterSummary {
Summary("Get information on \(\.$TWType)")
}
@Parameter(title: "TWType", description: "The type to get information on.")
var TWType: String
func perform() async throws -> some IntentResult & ReturnsValue<String> & ProvidesDialog {
//perform essential task here to update the application content
return .result(value: TWType, dialog: "Logged a 15 minute break.\(TWType)")
}
}
I have macOS application and I want to provide an action for it in the 'Shortcuts' app QuickAction list. I was using InApp handling to present my intent created in the intent.intentdefinition file as action in the shortcuts app and it was working.
However, this action perform a very lightweight task so I intent to have the action implemented as an extension in my xcode project.
According to my minimum deployment(i.e macOS 11.0) I found that 'Intents Extension' could be used.
I have added the 'Intents extension' target to my main application and created an intent using the intent.intentdefinition file. However, my intent does not appear in the shortcuts app. I have verified it multiple time to ensure I am not missing anything, but still the intent is not present in the shortcuts app action.
I wanted to be know, Is this even possible? cause this apple documentation only mentions about iOS and watchOS app. It also does not mention If our custom intent(created using Intents extension) in the intents extension can be exposed to the shortcuts app.
For macOS 13.0+, I have used the 'AppIntents extension' and I m able to achieve the same. So, I suppose the same should be possible using the 'Intents extension'
I have an executable in macOS that I m launching as a User Agent. The same executable can be launched in multiple ways like either user can directly click the exe to launch it, or user can launch it from the terminal using ./ etc. One similar way is when the user launches the exe as a User Agent(i.e daemon in user session).
In this scenarios, I want to identify in my exe If my user has launched it as agent to perform certain task.
I wanted to know how can I accurately determine this?
I have tried figuring out If there is some unique session that agents operate in, but I could not find anything. Can someone help here? Is this even possible?
I have a bundled application(.app file) in macOS which is a non-interactive application. This app does not link to any GUI frameworks and I am able to launch it using the 'open' command in a normal GUI login session.
However, when I perform ssh login to that user and then If I try to launch the application, it fails to launch.
I assume that this is happening because my ssh session is a non-GUI session, and 'open' command is due to some reason failing to run in a non-GUI environment, but I m not sure.
Can someone help me understand why is this happening?
I have a public swift function with the below declaration :
public func InternalMain (_ pNumOfArgs : Int32, _ pCmdlineArgs : UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>) -> Int32 {..}
I need this function as public because I need to invoke in from a different library. But the above declaration produces an error in my generated swift header i.e '-swift.h' file because 'UnsafeMutablePointer<UnsafeMutablePointer?>' type cannot be represented in the swift generated header.
Can someone help how do I get past this. This is a class independent function and I tried using the '@nonobj' to prevent this from getting in the generated header but it still gives an error.
I have a .app file that I want to run as a daemon. Now there are two ways of running .app as a daemon/agent in macOS.
using .app file : I can specify this in the daemon plist as:
<key>ProgramArguments</key>
<array>
<string>/usr/bin/open</string>
<string>/Applications/myApp.app</string>
</array>
using unix exe within .app file
<key>ProgramArguments</key>
<array>
<string>myApp.app/Content/MacOS/MyApp</string>
</array>
Basically I wanted to know what is the Apple recommendation on how we should be creating daemon plist.
For point 2, is it appropriate to use the unix executable within bundle?Will it not cause any issue in the running application?
Is will be helpful if there is some apple documentation to support this.