I struggling in getting Xcode Cloud to work with a stand alone watch app. This app has the following three targets and each bundle identifier is set up in the Identifiers section of the developer portal.
iphone container target called Unleashed abc.xyz.Unleashed
watch target called Unleashed Watch App abc.xyz.Unleashed.watchkitapp
watch target called Unleashed WidgetExtension abc.xyz.Unleashed.watchkitapp.Unleashed-Widget
I have a App Store provisioning set up for abc.xyz.Unleashed.watchkitapp
The app runs fine in the watch simulator, but fails with the following when I do an Xcode Cloud build
Export archive for ad-hoc distribution
Export archive for development distribution
Export archive for app-store distribution
When I expand each one of these errors it reports:
Command exited with non-zero exit-code: 70
I also tried archiving the project in Xcode then selected the Archive but it won't let me validate because that button is disabled.
Very confused I have successfully used Xcode Cloud for a phone app but am having a problem with this watch app that has a widget
WidgetKit
RSS for tagShow relevant, glanceable content from your app on iOS and iPadOS Home Screen and Lock Screen, macOS Desktop, Apple Watch Smart Stack and Complications, and in StandBy mode on iPhone.
Posts under WidgetKit tag
186 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
During the WWDC Session called "Design widgets for visionOS" the presenter says:
You can choose whether the background of your widget participates in tinting. If you opted out, for example to preserve a photo or illustration, make sure it still looks good alongside the selected color palette.
Unfortunately, this session has no example code. Can someone point me to the correct way to do this? Is there a modifier we can use on views?
(reposting this in the correct topic/subtopic)
I’m implementing a Control Widget for watchOS 26 Beta 5, using .promptsForUserConfiguration() so that users can select an option from an enum when adding the widget.
The overall functionality works fine, but when users configure the option, the enum’s corresponding text is not properly localized. My enum is defined like this:
static var caseDisplayRepresentations: [XXXType: DisplayRepresentation] {
[
XX1: .init(title: .init("text1", table: "xxx")),
XX2: .init(title: .init("text2", table: "xxx")),
]
}
After the configuration is completed and the Control Widget appears in the Control Center or Smart Stack, the text is displayed correctly.
Same code on iOS work perfect.
I am building a widget that supports 2 different widget kinds, each supporting systemSmall, systemMedium, and systemLarge size families.
My widget does download and display images so I expect memory usage to be on the higher end, but in debugging some memory issues, I notice that when I build my widget scheme to a physical device, things start off reasonable at ~12MB of memory usage. But as I change the widgets intent, add the other widget kind, or add different widget size families, this memory usage grows until it ultimately hits the 30MB cap.
My question is, is the 30MB memory limit spread across all my supported widget kinds/sizes? Or does each individual widget get its own 30MB cap?
i.e., if I have systemMedium Widget A and systemLarge Widget B, are they sharing that 30MB memory limit?
Topic:
App & System Services
SubTopic:
Widgets & Live Activities
Tags:
Extensions
Instruments
Debugging
WidgetKit
I'm working on the control widget which should display the SF image on the UI, but I have found that it cannot be displayed stably. I have eight CarCtrlWidgets which is about the type doorLock、chargeCover、frontBox、 locateCarLight、 locateCarHorn、 ventilate、 backBox and airCondition, it should all be showed but sometime they only show the text and placeholder. I'm aware of the images should be custom SF image and I can see them to show perfectly sometimes, but in other time it is just failed. This's really confused me, can anyone help me out?
deviceversion 18.5;device model iPhone 16 pro;
Background
I'm developing an iOS app with Live Activities that allows users to select custom background images. While these custom images display correctly in widgets, they fail to appear in Live Activities on both Lock Screen and Dynamic Island, despite successful image loading and data transfer.
Technical Details
iOS Version: Testing on iOS 17.2+
Image Storage: Using App Group shared container for image sharing between main app and widget extension
Image Loading: Successfully confirmed via logs - images load correctly with proper dimensions
UI Framework: SwiftUI with ActivityKit
What Works
✅ Custom images display correctly in Home Screen widgets
✅ Built-in bundled images work in Live Activities
✅ Image data successfully transfers via App Group shared container
✅ Image loading logs show successful UIImage creation with correct dimensions
What Doesn't Work
❌ Custom user images don't display in Live Activities (Lock Screen)
❌ Custom user images don't display in Dynamic Island
❌ Images appear as black/gray background despite successful loading
Code Implementation
I've tried multiple approaches:
1. SwiftUI Image approach:
Image(uiImage: customImage)
.resizable()
.aspectRatio(contentMode: .fill)
2. containerBackground API approach:
.containerBackground(for: .widget) {
Image(uiImage: customImage)
.resizable()
.aspectRatio(contentMode: .fill)
}
3. UIKit wrapper approach:
struct UIImageViewWrapper: UIViewRepresentable {
let image: UIImage
func makeUIView(context: Context) -> UIImageView {
let imageView = UIImageView(image: image)
imageView.contentMode = .scaleAspectFill
return imageView
}
func updateUIView(_ uiView: UIImageView, context: Context) {
uiView.image = image
}
}
Observations
Images load successfully (confirmed via console logs)
File paths are correct and accessible
Same image loading code works perfectly in widgets
When testing with UIKit approach, a red prohibition icon appears, suggesting system restrictions
Questions
Is there a technical limitation preventing user-provided images from displaying in Live Activities?
Are there specific security restrictions for Live Activity backgrounds that don't apply to widgets?
Is this behavior intentional based on Apple's design guidelines for Live Activities?
What's the recommended approach for custom backgrounds in Live Activities?
Apple Documentation Reference
I found this guidance in "10 questions with the Live Activities team":
"The Dynamic Island is most immersive when you don't provide background color or imagery — think of it purely as a canvas of foreground view elements."
However, this seems to be design guidance rather than a technical restriction, and it doesn't specifically address Lock Screen Live Activities.
Expected Behavior
Custom user images should display as backgrounds in Live Activities, similar to how they work in widgets.
Current Workaround
I've implemented a color extraction system that generates gradients based on the dominant colors of user images, but users specifically want to see their actual images.
Has anyone successfully implemented custom user images as Live Activity backgrounds, or can Apple clarify the intended behavior and limitations?
Thank you for any insights!
During the WWDC Session called "Design widgets for visionOS" the presenter says:
You can choose whether the background of your widget participates in tinting. If you opted out, for example to preserve a photo or illustration, make sure it still looks good alongside the selected color palette.
https://developer.apple.com/videos/play/wwdc2025/255
Unfortunately, this session has no example code. Can someone point me to the correct way to do this? Is there a modifier we can use on views?
When a user selects one the tint colors using the configuration screen, we would like to prevent some views from being tinted.
Pretty much the title. I am a noob in apple app development and currently starting it out. I got stuck in this. Can anyone let me know that how can i generate the token for starting live activity in terminated state? I have tried multiple times to find that this one is not working in terminated state. How can I overcome this? Is there any solution or workaround?
Topic:
App & System Services
SubTopic:
Widgets & Live Activities
Tags:
iOS
iPhone
Notification Center
WidgetKit
I updated my IntentWidgetProvider recommendations() to return an empty array instead of all my previous static IntentRecommendation to allow my widgets to finally be configurable.
When I go to the watch widget chooser I see samples of my widgets OK:
But when I touch the sample would should bring up my configurations, I get "Unable to Load":
Anybody see this or have any ideas? Thanks.
I'm currently exploring ways to update a widget's display independently of the timeline mechanism.
While researching, I came across this thread and started experimenting with the approach:
https://developer.apple.com/forums/thread/720640
As part of the implementation, I'm attempting to render a 00:00-style time string using a single custom font glyph via .timer.
However, I noticed that the colon character used in .timer doesn't appear to be the standard Unicode 0x003A (colon). It seems to be a different character entirely.
Does anyone happen to know exactly which character this colon is?
Any insights would be appreciated.
Spatial widget is a new feature of visionos 26. I notice The system’s Photo app can add a Spatial Image in the widget. I wonder if third apps can use spatial image or any 3D content in it's widget? I try to use RealityView in widget and it run with a crash.
So does spatial Image in widget only supported by the system Photo app, and not available to developers now?
Is there any size guidance for the new WidgetKit integration on visionOS? The Widget HIG provides dimensions for all the widget size classes on iOS, iPadOS and watchOS, but has not been updated for visionOS.
https://developer.apple.com/design/human-interface-guidelines/widgets
My potential widget use case is image based, so I'm looking to better understand the optimal size, resolution etc I would need, particularly for the new visionOS specific extra large widget size.
Hi all,
I'm currently implementing Live Activities using ActivityKit and facing a real-world limitation that I hope the community (or Apple) can clarify.
🔹 I can successfully start a Live Activity via APNs push (event: "start") even when the app is terminated — the Live Activity appears as expected on the Lock Screen and Dynamic Island.
However, I need to update that Live Activity using the name I assigned in the push payload (e.g., match-123). This requires calling:
Airship.channel.trackLiveActivity(activity, name: activity.attributes.matchID)
…or equivalent code in native implementations to associate the activity with its push token.
❓The problem:
If the user has never launched the app, or hasn't opened it after the Live Activity was started via push, then there’s no chance for the app to run this tracking code.
So:
✅ Live Activity starts fine via APNs
❌ I can't track the activity and register it for future push updates (by name) until the app is launched
❌ Therefore, I can't update the Live Activity without knowing the token-name mapping
🔍 My question:
Is there any way to programmatically track or associate a Live Activity (started via push) with a name for APNs updates, without requiring the app to launch?
Or put differently:
Can the system automatically track the name → token mapping if the activity is started via push?
Is there any way (via entitlement, plist config, or system event) to allow registering the activity in the background (without user launch)?
💡 Notes:
I already use pushType: .token and NSSupportsLiveActivitiesFrequentUpdates
Live Activity content is fine; only the ability to send future updates is blocked without initial app launch
Using Airship SDK for push + activity tracking, but the question is general to iOS + ActivityKit behavior
Any insight on how apps like FotMob, Uber, or sports apps handle this situation would be really helpful!
Thanks in advance.
Topic:
App & System Services
SubTopic:
Widgets & Live Activities
Tags:
APNS
User Notifications
WidgetKit
ActivityKit
I am trying to feature flag widgets in my Widget extension. This feature flag value is stored remotely, read by my main app, and written to UserDefaults, then read from UserDefaults in my widget target. I understand that providing an empty array of WidgetFamilys will not show my app when the user goes to add a widget.
However, even when this flag flips to true, hard-closing and reopening my app will not show my app in the list of apps you can add a widget for. But I notice that if I recompile my app from Xcode (running the app's scheme, not the widget scheme), then my app will show when you search for an app to add a widget for, making me think that these Widget objects are only created by the system once when the app is initially installed/updated.
My concern is that I will not be able to flip this flag from false to true after the user has installed my app to do a rollout of my widget. Is this expected? Or is there an alternative or otherwise recommended way of doing this?
struct MyWidget: Widget {
let kind = "MyWidget"
var supportedFamilies: [WidgetFamily] {
let manager = ExtensionManager()
if manager.widgetsEnabled {
return [.systemSmall, .systemMedium, .systemLarge]
}
else {
return []
}
}
var body: some WidgetConfiguration {
IntentConfiguration(
kind: kind,
intent: MyWidgetIntent.self,
provider: MyWidgetProvider()
) { entry in
MyWidgetView(entry: entry)
}
.configurationDisplayName("My Widget")
.description("Install my widget!")
.supportedFamilies(supportedFamilies)
}
}
Hi, I’m using SwiftData with an @Observable DatabaseManager class that is shared between my app and a widget. This class is located inside a Swift package and looks roughly like this:
public final class DatabaseManager {
public static let shared = DatabaseManager()
private init() {
let groupID = "group.com.yourcompany.myApp"
let config = ModelConfiguration(groupContainer: .identifier(groupID))
let c = try! ModelContainer(for: MyModel.self, configurations: config)
self.container = c
self.modelContext = c.mainContext
}
public private(set) var container: ModelContainer
public private(set) var modelContext: ModelContext
}
In the main app, I inject the container and context like this:
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.modelContainer(DatabaseManager.shared.container)
.modelContext(DatabaseManager.shared.modelContext)
}
}
}
Both the widget and the main app import the same package, and both use DatabaseManager.shared for reading and writing objects.
The problem:
When the widget updates an object using an AppIntent, the change is not reflected in the main app unless I fully terminate and relaunch it. If I just bring the app back to the foreground, it still shows stale data.
Is there a recommended way to make the main app observe or reload SwiftData changes that were made in the widget (via the same shared app group and container)? I’m already using .modelContainer(...) and .modelContext(...) in the app, and everything else works fine — it’s just the syncing that doesn’t happen unless I force-relaunch the app.
Thanks!
Hi,
In my apps, the recent iOS 16.0 beta 7 (20A5356a) broke the .timer DateStyle property of the Text view, in a SwiftUI widget.
In previous OS and beta, Text(Date(), style: .timer) was correctly displaying an increasing counter.
In iOS 6.0 beta 7, Text(Date(), style: .timer) does not update anymore, (and is offset to the left).
The other DateStyle (like .offset, .relative, ...) seems to update correctly.
Anyone noticed that (very specific) problem ?
I am trying to update a widget with a push notification.
After completing all the settings, I sent a push notification via command line and got the following error:
Connection #0 to host api.sandbox.push.apple.com left intact
{"reason":"DeviceTokenNotForTopic"}
The platform is VisionOS.
Is this not possible? I have a simple text view that shows the time, but it doesn't stay in sync with the time. I've tried to use a timer like I do inside the app, but that didn't work. I tried TimelineView with it set to every minute, and that didn't work. I tried to use the dynamic date using Text(date, style: ) and that didn't work. I looked it up and apparently it's a limitation to WidgetKit, however, I don't understand how the Apple Clock widget can have a moving second hand that updates properly.
Do I just need to add a bunch of entries in the TimelineProvider? Right now, it's just the default that gets loaded when you create a Widget extension.
func timeline(for configuration: SingleClockIntent, in context: Context) async -> Timeline<SingleClockEntry> {
var entries: [SingleClockEntry] = []
// Generate a timeline consisting of five entries an hour apart, starting from the current date.
let currentDate = Date()
for hourOffset in 0 ..< 5 {
let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
let entry = SingleClockEntry(date: entryDate, configuration: configuration)
entries.append(entry)
}
return Timeline(entries: entries, policy: .atEnd)
}
EDIT: This code below seems to be working. Can someone confirm if it will continue to work, or will it eventually stop updating?
func timeline(for configuration: SingleClockIntent, in context: Context) async -> Timeline<SingleClockEntry> {
var entries: [SingleClockEntry] = []
let calendar = Calendar.current
let current = Date()
// Get the next minute
let secondEntryDate = calendar.nextDate(after: current, matching: DateComponents(second: 0), matchingPolicy: .strict, direction: .forward)!
entries.append(SingleClockEntry(date: current, configuration: configuration)) // Adds current time
entries.append(SingleClockEntry(date: secondEntryDate, configuration: configuration)) // Adds next minute after current time
// Add an entry every min for the next 30 minutes
for offset in 0..<30 {
let entryDate = Calendar.current.date(byAdding: .minute, value: offset, to: secondEntryDate)!
let entry = SingleClockEntry(date: entryDate, configuration: configuration)
entries.append(entry)
}
return Timeline(entries: entries, policy: .atEnd)
}
Hi everyone and Apple support,
I’ve built an app that continuously runs and receives temperature data from a sensor. When a threshold is reached, I use Live Activities with the push notification flow to display alerts on the Dynamic Island. The Live Activity and push notification flow work fine in foreground and background states. However, I’m trying to support push-triggered Live Activities when the app is in the terminated state. Since my app rarely terminates, I can’t confirm if the Live Activity push token is generated in that state. It seems like it isn’t, which blocks the Live Activity from starting via push. I tried with both pushtostarttoken and pushtostarttokenupdates. None of them worked.
Has anyone dealt with this or found a workaround to ensure the push token is available even when the app is terminated?
I have an app that uses NSPersistentCloudKitContainer stored in a shared location via App Groups so my widget can fetch data to display. It works. But if you reset your iPhone and restore it from a backup, an error occurs:
The file "Name.sqlite" couldn't be opened. I suspect this happens because the widget is created before the app's data is restored. Restarting the iPhone is the only way to fix it though, opening the app and reloading timelines does not. Anything I can do to fix that to not require turning it off and on again?