Post

Replies

Boosts

Views

Activity

Reply to onPreferenceChange closure is now nonIsolated?
It seems the swift team is tightening the screws on concurrency, but ... The error is: Main actor-isolated property 'buttonMaxWidth' can not be mutated from a Sendable closure Where: @State private var buttonMaxWidth: CGFloat = 120 Now looking under the hood: @preconcurrency @inlinable nonisolated public func onPreferenceChange<K>(_ key: K.Type = K.self, perform action: @escaping @Sendable (K.Value) -> Void) -> some View where K : PreferenceKey, K.Value : Equatable but, I wonder why they did not mark this func as @MainActor isolated? I suspect the 2m lines behind that would have to be refactored. for now my solution 1 is to assume .onPreferenceChange(ButtonWidthPreferenceKey.self) { newSize in MainActor.assumeIsolated { buttonMaxWidth = newSize } } What's the point of all these rules if we can say ignore the rules in one line ? For solution 2, you can be more pedantic and declare a MainActor isolated func that you can than open a Task that calls it, too much work ... .onPreferenceChange(ButtonWidthPreferenceKey.self) { newSize in Task { @MainActor in setButtonMaxWidth(newSize) } }
4w
Reply to Migrating from pkg installer to Service Management
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 ?
Sep ’24
Reply to SMAppService.daemon as root
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.
Aug ’24
Reply to Migrating from pkg installer to Service Management
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.
Aug ’24
Reply to How to access files when running XCTests in Ventura. Currently I receive "unauthorised access" errors.
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.
Aug ’23
Reply to A bug in Xcode lldb debugger for swift
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.
Jul ’23