Post

Replies

Boosts

Views

Activity

Reply to How do I use a Thread Network API in IOS
I also just tried try await cli.credentials(forBorderAgentID: borderAgentID), which immediately crashes with *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSError storeError:description:]: unrecognized selector sent to class 0x1f9f21378' ...as well as try await cli.credentials(forExtendedPANID: extendedPANID), which crashes with :0: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value :(
Nov ’23
Reply to How do I use a Thread Network API in IOS
I've just tried installing the 17.2 Public Beta (21C5029g) on my device. I have the profile installed. The error is different than it was on the 17.1 full release build, but still things are not working. My code looks like this: Task { print("creating THClient") let cli = THClient() // on 17.1, this would log an XPC error and hang indefinitely, so...progress? print("created THClient") print("is preferred available: \(await cli.isPreferredAvailable())") do { let creds = try await cli.allCredentials() print("All creds: \(creds)") } catch { print("Error: \(error)") } do { try await cli.storeCredentials(forBorderAgent: borderAgentID, activeOperationalDataSet: dataset) print("Added creds") } catch { print("Error adding creds: \(error)") } do { let creds = try await cli.allCredentials() print("All creds: \(creds)") } catch { print("Error: \(error)") } } The logs I get are: creating THClient created THClient is preferred available: false Client: -[THClient getConnectionEntitlementValidity]_block_invoke - Error: Error: Error Domain=ThreadCredentialsStore Code=3 "Failed to retrieve all active border router records" UserInfo={NSLocalizedDescription=Failed to retrieve all active border router records, NSUnderlyingError=0x28198aeb0 {Error Domain=NSOSStatusErrorDomain Code=0 "(null)"}} Error adding creds: Error Domain=ThreadCredentialsStore Code=4 "Invalid parameter sent to server..." UserInfo={NSLocalizedDescription=Invalid parameter sent to server...} Error: Error Domain=ThreadCredentialsStore Code=3 "Failed to retrieve all active border router records" UserInfo={NSLocalizedDescription=Failed to retrieve all active border router records, NSUnderlyingError=0x281980ff0 {Error Domain=NSOSStatusErrorDomain Code=0 "(null)"}} -[THClient storeCredentialsForBorderAgent:activeOperationalDataSet:completion:]_block_invoke:660: - Response: Error Domain=ThreadCredentialsStore Code=4 "Invalid parameter sent to server..." UserInfo={NSLocalizedDescription=Invalid parameter sent to server...}
Nov ’23
Reply to [macOS] CoreSpotlight importer using CSImportExtension failing to index
In case it helps anyone, with some effort I was able to write a MDImporter plugin in Swift: https://github.com/foxglove/MCAPSpotlightImporter It would’ve been much nicer to write it as a CSImportExtension, and it does seem that mdimport on macOS has some references to “modern importers” (see mdimport -help), but as mentioned above, I wasn’t able to get CSImportExtensions to work at all on macOS. I saw some logs related to them so it seems like it is partially implemented, but somehow broken. The Swift MDImporter will work as a stand-in for now, but I look forward to replacing it someday!
Nov ’22
Reply to IOServiceGetMatchingServices returning empty iterator
A slightly different topic, but I hope this may be helpful to others in the future. I had a similar issue, but I was looking for IODisplayConnect for the purposes of reading the display brightness. On a M1 Mac with Big Sur, I found the easiest way to get the brightness info is by running corebrightnessdiag (this can also read keyboard backlight brightness): $ /usr/libexec/corebrightnessdiag status-info | grep 'DisplayServicesBrightness ' DisplayServicesBrightness = "0.9302966"; To get and set brightness from code, you can use private APIs from the DisplayServices framework (/System/Library/PrivateFrameworks/DisplayServices.framework): extern int DisplayServicesGetBrightness(int display, float *brightness); extern int DisplayServicesSetBrightness(int display, float brightness); /* Change brightness */ float brightness = 0.8; int err = DisplayServicesSetBrightness(1, brightness); /* Get current brightness */ err = DisplayServicesGetBrightness(1, &brightness);
Feb ’21
Reply to BSSID returning null
I'm trying to do the same from a command line utility written in Swift. I enabled "Location" resource access under Signing & Capabilities. I also tried adding an Info.plist file with the "Create Info.plist Section in Binary", so I could include a location authorization description. I see the prompt for location access and am able to get location updates, but the bssid is still nil. Here's my code:import CoreWLAN import CoreLocation class Delegate: NSObject, CLLocationManagerDelegate { func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { print("changed auth status: \(status.rawValue)") if status == .authorizedAlways { print("Scanning for WiFi networks") let interface = CWWiFiClient.shared().interface()! let networks = try! interface.scanForNetworks(withName: nil) for n in networks { print("\(n.ssid) - \(n.bssid)") } } } func locationManager(_ manager: CLLocationManager, didUpdateTo newLocation: CLLocation, from oldLocation: CLLocation) { print("Got location: \(newLocation)") } } let delegate = Delegate() let lm = CLLocationManager() lm.requestAlwaysAuthorization() lm.startUpdatingLocation() lm.delegate = delegate RunLoop.main.run() print("exiting")
Apr ’20