I'v been writing an app for macOS for years.
I'm not aware my app cares about devices.
It should not, it only cares about full disk access.
So how does the Mac figure out that my app needs access to Devices.
I want to pre-fill this when I build the app so my customers do not freak out.
Post
Replies
Boosts
Views
Activity
Spoke too soon
var body: some Scene {
WindowGroup {
AppView(store: store)
.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { userActivity in
// handle it here
}
}
}
This will duplicate my current window.
So now from one window I end up with 2 and 3 and so on.
I'm struggling to understand expectations on happy path and posting here for others in case they wonder.
I have no sand boxed apps
I create valid/signed/notarized MyTest.pkg with a post install script
Distribute the package to end users
They install it sudo installer -verbose -pkg MyTest.pkg -target / will install my new app
End user runs the new app, which calls /Applications/MyTest.app/Contents/MacOS/MyTest register
We get Operation not permitted
This will also add an entry on the System Settings -> General - > Open at Login or ask the user to enable this item on right corner user notifications.
Since we failed on 5, we call /Applications/MyTest.app/Contents/MacOS/MyTest status
We get SMAppServiceStatus.SMAppServiceStatusRequiresApproval
Now our app asks the user to allow our item that was magically added on the step 7
We are good to go and can now call our elevated privileged app or XPC.
After a lot of fiddling with this new API, this seems to be making sense.
Apple does not want us to do all this and not give the end user a final say.
After all this work DO I still have to ask the end user to allow full disc access ?
man pkgbuild
read on BundleHasStrictIdentifier
This did not answer the original question on how to run a system daemon (or a root daemon).
As to That post creates an agent, but the setup for a daemon is very similar these comments are debatable.
Provide an example of SMAppService.daemon(plistName:) and let us decide if it's easy.
Amazing.
I wanted to upgrade my privileged helper form SMJobBless to SMAppService.daemon.
Read the existing code from UpdatingYourAppPackageInstallerToUseTheNewServiceManagementAPI, ok it was nice and simple.
Well I wanted to do a bit more, after all apple tells me SMJobBless is deprecated and I should look into the SMAppService class
So I made this change
class func register() {
let service = SMAppService.daemon(plistName: "com.xpc.example.agent.plist")
do {
try service.register()
print("Successfully registered \(service)")
} catch {
print("Unable to register \(error)")
exit(1)
}
}
Made sure to have the plist under $APP.app/Contents/Library/LaunchDaemons/com.xpc.example.agent.plist
Boom, I immediately hit the wall. Apple sends me a not so useful error
Unable to register Error Domain=SMAppServiceErrorDomain Code=3 "No such process" UserInfo={NSLocalizedFailureReason=No such process}
Common guys, instead of riddles, give us better examples, more examples, that cover more than 1% of the functionality.
I added a second Developer ID Installer and I can't revoke the second one, not a big deal but yea it's not perfect. Now I have 2 of them.
Still there in 13.6.5, I wanted to debug some code in Ventura and fired up a VM.
My solution was found on superuser.com
questions/526183
since apple does allow me to post the entire url.
you basically make a copy of clients.plist, convert it to xml, edit to remove the app you do not like, convert it to binary, restart killall locationd
Yup the same bug ...
A trivial feature that somehow does not work.
No issues with official Xcode ie: 14.3.1, but FDA issues when running Xcode 15 Beta 5
...
As I'm falling in love with SPMs, I tend to write tests right in the SPM package.
These tests will run inprocess of /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Agents/xctest.
Just put a break point in your testXXX() and po Bundle.main.executablePath to verify.
Adding Xcode 15 Beta 5 to FDA did nothing, where Xcode 14.3.1 is not even on the FDA list.
Went back to 14.3.1 and my tests do work again.
Peace.
For me the code is in the app.
(lldb) po rv
error: expression failed to parse:
error: <EXPR>:3:1: error: cannot find 'rv' in scope
rv
^~
(lldb) fr v rv
(WhatSize.SideBarItemReducer.State) rv = <variable not available>
// the code I'm trying to debug
let rv = SideBarItemReducer.State.init(item: item)
.preserveUIState(sideBarItemState)
return rv
What's not so funny is that rv has the proper data in the Variables View,
but I love command line short cuts.
Not a show stopper but a huge annoyance.
Xcode 14.3.1 (14E300c)
Thanks.
You can write a custom NSViewRepresentable to reach down to AppKit
You can search for an SPM git package called introspect
We want to change the bundle id, say the user has V7 of the app and we are installing V8.
And it makes sense to install it in the same exact location.
Unfortunately attempting to remove existing /Application/App during the 'preinstall' does not help.
This is a macOS issue, ie: NSView.BackgroundStyle
We have no way of telling inside a SwiftUI view that we are just highlighted.
The user can highlight/un-highlight a bunch of rows during a mouse down, mouse drag sequence, but they are not selected yet until you release the mouse.
A very cool AppKit feature.
Maybe @Eskimo can Shed some deep insights on how this migrates to SwiftUI.