I'm implementing a timer feature and facing the issue that the live activity I'm starting just continues showing after the timer is complete.
The body of the live activity widget is more or less:
ActivityConfiguration(for: WhendyWidgetAttributes.self) { context in
VStack {
Text(
context.state.timerEndDate,
style: .timer
)
// if Date.now < timerEndTime { Text("Done") }
self.expandedView(state: context.state)
}
} …
Ideally I could get the activity to show something else when it is done but I don't know how to get it to re-evaluate it's body once the end time is reached.
I create the activity with
let activity = try ActivityKit.Activity.request(
attributes: attributes,
content: .init(
state: .init(timerEndDate: timerEndDate),
staleDate: timerEndDate
),
pushType: nil
)
Can I schedule the activity to do a refresh it's body (and reevaluating Date.now) once the timerEndDate is reached?
Considered Approaches
trying staleDate
However, the activity never shows that it has become stale. Would it be expected that it shows the stale-ness?
scheduling dismissal
I also thought about starting and immediately stopping the activity with a delayed dismissal, but unfortunately it seems this is limited to a 4 hour window, and I'd like longer timers too.
remote updates
I understand I could use remote notifications to update the live activity, but I'd really like to keep things local as all the functionality is locally plannable.
Background Tasks
I understand these don't run reliably or at a predictable time.
A Timer in the app that updates the content
I think this would only update the activity while the app is in foreground.
Post
Replies
Boosts
Views
Activity
Is it possible to write to an App Group's Container folder or UserDefaults from an iOS Thumbnail Extension or QuickLook Extension?
It doesn't work. It does work for a Widget extension.
I've added the App Group to the Entitlements of each extension.
For writing a file to App Group Container I get
Error Domain=NSCocoaErrorDomain Code=513 "Du hast nicht die Zugriffsrechte, um die Datei „quicklook 01 current.log“ im Ordner „DocumentInvestigation“ zu sichern." UserInfo={NSFilePath=/private/var/mobile/Containers/Shared/AppGroup/<redacted: the container UUID>/DocumentInvestigation/quicklook 01 current.log, NSUnderlyingError=0x28090bb10 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}
For setting App Group UserDefaults
[User Defaults] Couldn't write values for keys (
		example
) in CFPrefsPlistSource<0x2839cc700> (Domain: <redacted: the-group-identifier>, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null), Contents Need Refresh: No):
setting preferences outside an application's container requires user-preference-write or file-write-data sandbox access
The use case is, that we are investigating an issue and would like to log to a file which we then can have customers send us.
We have an issue with documents stored on a shared iCloud drive folder, where the document reloads too often, sometimes even intermittently reverting to a stale older data.
A very nice DTS lab during WWDC20 (with engineer Chen) could not solve the issue.
Question to the forum crowd
Does anybody also have this iCloud drive shared folder issue, and know a work around?
How can we distinguish older data coming in from newer data?
Here is a copy of the Feedback FB7772855
The Issue
The NSDocument may intermittently reload with older data than was last saved, when storing an NSDocument in a iCloud Drive shared folder. This happens without any other device editing concurrently.
Reproduce
Create an iCloud Drive shared folder on a different AppleID
Open and Run the attached sample project, or get it at https://github.com/hannesoid/iCloudSharedFolderDocumentIssue
The attached sample project uses a text field which reads/stores a String as an NSDocument
The attached sample project shows a list of log entries indicating what data was written and read by AppKit and when FileCoordination happens
The attached sample project shows the NSDocument.lastModifiedDate
Start typing into the the textfield and occasionally hit CMD+S (Save).
Expected
NSDocument should never read older data than what was last saved
The file modification date should remain as last saved.
Actual
Sometimes the TextField reverts to a previous state
In the log you see that there can be sequences where after Writing a certain Text to disk, a bit later an older state is read from disk. This is after filecoordination relinquished to a writer (probably icloud deamon). Then, a second or so later it reads again and then has the current data again.
The file modification dates known by the NSDocument are also changed, dates get their milliseconds truncated after file coordination.
System
Tested on macOS 10.15.5
On two macs with 10.15.2 (19C57), we can't test an app for in app purchases# StepsBuild App in XcodeLaunch App from FinderIt launches, and quickly closesAfter a slight delay the sandbox Apple ID is requested (we expect this, as it needs to fetch a sandbox receipt)Enter a sandbox user Apple ID# Expected (it used to work)The os fetches a sandbox receipt for the appThe app launches# ActualThe System dialog comes claiming the app is damaged and needs to be deleted and redownloaded from the App storeWhen launching the app again, gatekeeper "verifies" the app and comes to the same conclusion.In the app, there is no MASReceiptAny advice?