I'm creating an app and I want the user to see the PNG image with the background removed in the widget, but I want the background to be transparent. I've seen this done before in some apps' CarPlay widgets. How can I do this?
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
I am looking into the new CarPlay support for systemSmall widgets introduced in iOS 26 (Apple documentation).
I am trying to figure out if there is a way to programmatically detect whether the widget is currently being displayed on the iPhone/iPad home/lock screen or in CarPlay.
So far, I haven’t found any information in the documentation or APIs that indicate how to distinguish between these environments. Is there an API, environment value, or best practice for handling this scenario?
Thanks in advance for any insights!
Hello everyone,
I am developing a Flutter iOS application that includes a Widget Extension + Live Activity (ActivityKit).
The project runs successfully on the iOS simulator when
launched directly from Xcode, but it cannot be signed properly via Flutter and I cannot upload the build to App Store Connect due to the following CodeSign error:
Command CodeSign failed with a nonzero exit code
Provisioning profile "…" doesn't include the entitlement:
com.apple.developer.activitykit.allow-third-party-activity
This error never goes away no matter what I try.
And the main problem is that my App ID does NOT show any ActivityKit or Live Activity capability in the Apple Developer portal → Identifiers → App ID.
So I cannot enable it manually.
However:
Xcode requires this entitlement
Flutter requires this entitlement
When I add the entitlement manually in the .entitlements file, Xcode says:
“This entitlement must be enabled in your Developer account. It cannot be added manually.”
So I am stuck in a loop where:
Apple Developer portal does not show ActivityKit capability
Xcode demands the ActivityKit entitlement
Signing fails
App Store upload fails
And Live Activity is a critical feature of my app
What I have already done
✔ “Automatically manage signing” is enabled
✔ Correct Team is selected for both Runner and the Widget Extension
✔ Bundle IDs are correct:
com.yksbuddy.app
com.yksbuddy.app.TimerWidgetExtension
✔ Deleted Derived Data completely
✔ Tried removing all ActivityKit-related entitlement keys manually
✔ Deleted Pods, reinstalled, rebuilt
✔ App Group settings match between Runner and Extension
✔ The same Live Activity code works perfectly in a clean Xcode-only project
✔ But fails only inside a Flutter project structure
✔ Xcode builds & runs on simulator, but App Store upload always fails due to missing entitlement
Core Problem:
In my Apple Developer “Identifiers → App ID” page, the Live Activity / ActivityKit capability does NOT appear at all, so I cannot enable:
Live Activities
ActivityKit
Third-party activity entitlement
Without being able to enable this capability, I cannot create a valid provisioning profile that includes:
com.apple.developer.activitykit.allow-third-party-activity
Flutter + Xcode insists this entitlement must exist, but Apple Developer portal does not give any option to enable it.
Topic:
Code Signing
SubTopic:
Certificates, Identifiers & Profiles
Tags:
WidgetKit
ActivityKit
Entitlements
I have a SwiftUI app. It fetches records through CoreData. And I want to show some records on a widget. I understand that I need to use AppGroup to share data between an app and its associated widget.
import Foundation
import CoreData
import CloudKit
class DataManager {
static let instance = DataManager()
let container: NSPersistentContainer
let context: NSManagedObjectContext
init() {
container = NSPersistentCloudKitContainer(name: "DataMama")
container.persistentStoreDescriptions = [NSPersistentStoreDescription(url: FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: group identifier)!.appendingPathComponent("Trash.sqlite"))]
container.loadPersistentStores(completionHandler: { (description, error) in
if let error = error as NSError? {
print("Unresolved error \(error), \(error.userInfo)")
}
})
context = container.viewContext
context.automaticallyMergesChangesFromParent = true
context.mergePolicy = NSMergePolicy(merge: .mergeByPropertyObjectTrumpMergePolicyType)
}
func save() {
do {
try container.viewContext.save()
print("Saved successfully")
} catch {
print("Error in saving data: \(error.localizedDescription)")
}
}
}
// ViewModel //
import Foundation
import CoreData
import WidgetKit
class ViewModel: ObservableObject {
let manager = DataManager()
@Published var records: [Little] = []
init() {
fetchRecords()
}
func fetchRecords() {
let request = NSFetchRequest<Little>(entityName: "Little")
do {
records = try manager.context.fetch(request)
records.sort { lhs, rhs in
lhs.trashDate! < rhs.trashDate!
}
} catch {
print("Fetch error for DataManager: \(error.localizedDescription)")
}
WidgetCenter.shared.reloadAllTimelines()
}
}
So I have a view model that fetches data for the app as shown above.
Now, my question is how should my widget get data from CoreData? Should the widget get data from CoreData through DataManager? I have read some questions here and also read some articles around the world. This article ( https://dev.classmethod.jp/articles/widget-coredate-introduction/ ) suggests that you let the Widget struct access CoreData through DataManager. If that's a correct fashion, how should the getTimeline function in the TimelineProvider struct get data? This question also suggests the same. Thank you for your reading my question.
Hello,
in my widget the user displays images filling the whole widget with overlayed texts (via ZStack). Via shadows or text background color the text gets better readable.
However, when a user chooses transparent or tinted colors for the home screen, the text is barely or not readable anymore since e.g. white text on white image background. How to resolve this issue?
Topic:
App & System Services
SubTopic:
Widgets & Live Activities
Tags:
SwiftUI
Visual Design
WidgetKit
I’m manipulating some data inside a widget extension, and at the same time there is an active Live Activity (Dynamic Island / Lock Screen).
How can I update the Live Activity’s local notification when the data changes?
I tried accessing the current activity using Activity.activities, but it seems that this API is not accessible from inside the widget extension. What is the correct way to refresh or update the Live Activity in this case?
Hi everyone,
I am encountering an issue where my Live Activity (Dynamic Island) suddenly became invalid and failed to launch. It was working perfectly before, and I haven't modified any code since then.
My Environment:
Xcode: 26.1.1
Device iOS: 26.1
Testing: I also tested on iOS 18, but the Live Activity fails to start there as well.
Here is my code:
Live Activity Manager (Start/Update/End):
func startLiveActivity() {
// Initial static data
let attributes = SimpleIslandAttributes(name: "Test Order")
// Initial dynamic data
let initialContentState = SimpleIslandState(message: "Preparing...")
// Adapting for iOS 16.2+ new API (Content)
let activityContent = ActivityContent(state: initialContentState, staleDate: nil)
do {
let activity = try Activity.request(
attributes: attributes,
content: activityContent,
pushType: nil // Set to nil as remote push updates are not needed
)
print("Live Activity Started ID: \(activity.id)")
} catch {
print("Failed to start: \(error.localizedDescription)")
}
}
// 2. Update Live Activity
func updateLiveActivity() {
Task {
let updatedState = SimpleIslandState(message: "Delivering 🚀")
let updatedContent = ActivityContent(state: updatedState, staleDate: nil)
// Iterate through all active Activities and update them
for activity in Activity<SimpleIslandAttributes>.activities {
await activity.update(updatedContent)
print("Update")
}
}
}
// 3. End Live Activity
func endLiveActivity() {
Task {
let finalState = SimpleIslandState(message: "Delivered ✅")
let finalContent = ActivityContent(state: finalState, staleDate: nil)
for activity in Activity<SimpleIslandAttributes>.activities {
// dismissalPolicy: .default (immediate), .after(...) (delayed), .immediate (no animation)
await activity.end(finalContent, dismissalPolicy: .default)
print("End")
}
}
}
The Models (Shared between App and Widget Extension):
// 1. Define State (Dynamic data, changes over time, e.g., remaining delivery time)
public struct SimpleIslandState: Codable, Hashable {
var message: String
}
// 2. Define Attributes (Static data, constant after start, e.g., Order ID)
public struct SimpleIslandAttributes: ActivityAttributes {
public typealias ContentState = SimpleIslandState
var name: String // e.g., "My Order"
}
The Widget Code:
//
// SimpleIslandWidget.swift
// ReadyGo
//
// Created by Tang Yu on 2025/11/19.
//
import WidgetKit
import SwiftUI
import ActivityKit
struct SimpleIslandWidget: Widget {
var body: some WidgetConfiguration {
ActivityConfiguration(for: SimpleIslandAttributes.self) { context in
// UI shown on the Lock Screen
VStack {
Text("Lock Screen Notification: \(context.state.message)")
}
.activityBackgroundTint(Color.cyan)
.activitySystemActionForegroundColor(Color.black)
} dynamicIsland: { context in
// Inside Widget Extension
DynamicIsland {
// Expanded Region
DynamicIslandExpandedRegion(.center) {
Text("Test") // Pure text only
}
} compactLeading: {
Text("L") // Pure text only
} compactTrailing: {
Text("R") // Pure text only
} minimal: {
Text("M") // Pure text only
}
}
}
}
Additional Info:
This is the minimal code setup I created for testing, but even this basic version is failing.
I have set NSSupportsLiveActivities (Supports Live Activities) to YES (true) in the Info.plist for both the Main App and the Widget Extension.
Has anyone experienced this? Any help would be appreciated.
Hi,
I'm working on an app that integrates third-party UWB accessories using the Nearby Interaction framework. I want to display real-time data via Live Activities, and ideally, I hope the app can continue ranging/interacting with the accessory even when it's in the background—triggering updates in the Live Activity.
Specifically:
Can I use Live Activity to keep Nearby Interaction sessions running in the background, as long as the accessory is still nearby and connected? Or do I always need to initiate sessions in the foreground?
Are there ways to maintain or trigger new Nearby Interaction sessions entirely in the background, when using third-party UWB accessories?
Is there any official guidance regarding permissions, user authorization requirements, or restrictions for background ranging with third-party hardware?
Are there recommended strategies or patterns for updating Live Activity widgets with data from Nearby Interaction or UWB accessories while backgrounded? (e.g. Bluetooth triggers, push notifications, background tasks)
Any advice, experiences, or official recommendations would be greatly appreciated! I want to ensure my implementation is compliant and offers the best possible user experience.
Thanks!
Topic:
Developer Tools & Services
SubTopic:
Xcode
Tags:
Nearby Interaction
WidgetKit
Background Tasks
Core Bluetooth
If the app is launched from LockedCameraCapture and if the settings button is tapped, I need to launch the main app.
CameraViewController:
func settingsButtonTapped() {
#if isLockedCameraCaptureExtension
//App is launched from Lock Screen
//Launch main app here...
#else
//App is launched from Home Screen
self.showSettings(animated: true)
#endif
}
In this document:
https://developer.apple.com/documentation/lockedcameracapture/creating-a-camera-experience-for-the-lock-screen
Apple asks you to use:
func launchApp(with session: LockedCameraCaptureSession, info: String) {
Task {
do {
let activity = NSUserActivityTypeLockedCameraCapture
activity.userInfo = [UserInfoKey: info]
try await session.openApplication(for: activity)
} catch {
StatusManager.displayError("Unable to open app - \(error.localizedDescription)")
}
}
}
However, the documentation states that this should be placed within the extension code - LockedCameraCapture. If I do that, how can I call that all the way down from the main app's CameraViewController?
On the California watchface (white) there are two complication slots. The upper one is seemingly not a standard slot and limited to a few Apple-owned apps (Calender, Time, …). It adopts the (default white) background of the watchface, so the date is neatly and cleanly displayed on the watchface backdrop.
The other lower circular complication makes up for a fat black bubble now on the clean face, which doesn‘t look too pretty (of course depending on the complication…). I would like to create a complication with rather minimalistic content, and it would look great if it could also share the white background and just produce that content on top of it.
While the documentation sounds like it would be possible to make the widget background adopt the context colors (which I would understand as using the same background color), for the life of me I can‘t get anything else than black for the circle. Has anyone achieved that? How would I do that?
(Image below shows the temperature widget…mine would have way less and smaller content….)
Hello,
Users are reporting that widgets in my iOS app running on Mac OS are starting to crash after updating to MacOS 26.1.
Everything works fine on iOS 26.1 and MacOS 15.6.
The same bugs I found in iOS 26 beta 4, but then Apple fixed them in iOS 26RC and now they're back in macOS.
Any suggestions?
Crash report:
Process: WidgetWebWidgetExt [23580]
Path: /Volumes/VOLUME/*/WidgetWeb.app/PlugIns/WidgetWebWidgetExt.appex/WidgetWebWidgetExt
Identifier: app.vitalek.widgetapp.web.WidgetWebExt
Version: 7.5 (5796)
AppVariant: 1:MacFamily20,1:18
Code Type: ARM-64 (Native)
Role: unknown
Parent Process: launchd [1]
Coalition: app.vitalek.widgetapp.web.WidgetWebExt [28539]
User ID: 501
Date/Time: 2025-11-04 11:47:19.0746 -0500
Launch Time: 2025-11-04 11:47:18.8035 -0500
Hardware Model: Mac14,6
OS Version: macOS 26.1 (25B78)
Release Type: User
Crash Reporter Key: 39D39455-7F69-746C-2A1D-7A6086F25541
Incident Identifier: 7AC31574-73A4-4320-B17A-C2819252EEDA
Sleep/Wake UUID: 1535756C-44D8-497F-A288-07E53CD9B9E4
Time Awake Since Boot: 18000 seconds
Time Since Wake: 7417 seconds
System Integrity Protection: enabled
Triggered by Thread: 0, Dispatch Queue: com.apple.main-thread
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: Namespace SIGNAL, Code 6, Abort trap: 6
Terminating Process: WidgetWebWidgetExt [23580]
Application Specific Information:
abort() called
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x1926e75b0 __pthread_kill + 8
1 libsystem_pthread.dylib 0x192721888 pthread_kill + 296
2 libsystem_c.dylib 0x192626850 abort + 124
3 libc++abi.dylib 0x1926d5858 __abort_message + 132
4 libc++abi.dylib 0x1926c44d4 demangling_terminate_handler() + 304
5 libobjc.A.dylib 0x1922f0414 _objc_terminate() + 156
6 libc++abi.dylib 0x1926d4c2c std::__terminate(void (*)()) + 16
7 libc++abi.dylib 0x1926d8394 __cxxabiv1::failed_throw(__cxxabiv1::__cxa_exception*) + 88
8 libc++abi.dylib 0x1926d833c __cxa_throw + 92
9 libobjc.A.dylib 0x1922e6580 objc_exception_throw + 448
10 Foundation 0x19495122c -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 288
11 UIKitMacHelper 0x1b0240c80 -[UINSApplicationDelegate init] + 1348
12 UIKitMacHelper 0x1b02406d8 __41+[UINSApplicationDelegate sharedDelegate]_block_invoke + 48
13 libdispatch.dylib 0x19257eac4 _dispatch_client_callout + 16
14 libdispatch.dylib 0x192567a60 _dispatch_once_callout + 32
15 UIKitMacHelper 0x1b02405dc +[UINSApplicationDelegate sharedDelegate] + 324
16 UIKitCore 0x1ca488518 -[UIScene setTitle:] + 188
17 UIKitCore 0x1ca487e90 -[UIScene initWithSession:connectionOptions:] + 1084
18 UIKitCore 0x1cb2a6a54 -[UIWindowScene initWithSession:connectionOptions:] + 92
19 UIKitCore 0x1ca66b44c -[_UIScreenBasedWindowScene initWithScreen:session:lookupKey:] + 292
20 UIKitCore 0x1ca66aff4 +[_UIScreenBasedWindowScene _unassociatedWindowSceneForScreen:create:] + 408
21 UIKitCore 0x1cb09171c -[UIWindow _uiWindowSceneFromFBSScene:] + 704
22 UIKitCore 0x1cb0918cc -[UIWindow _initWithFrame:debugName:scene:attached:] + 92
23 UIKitCore 0x1cb091e68 -[UIWindow _initWithOrientation:] + 56
24 UIKitCore 0x1cb091ebc -[UIWindow init] + 72
25 WidgetWebWidgetExt 0x1027eb250 0x102718000 + 864848
26 WidgetWebWidgetExt 0x1027ea418 0x102718000 + 861208
27 WidgetWebWidgetExt 0x1027f5bc8 0x102718000 + 908232
28 WidgetWebWidgetExt 0x1027f4bfc 0x102718000 + 904188
29 WidgetWebWidgetExt 0x1027cf9f4 0x102718000 + 752116
30 WidgetWebWidgetExt 0x102807c20 0x102718000 + 982048
31 libdispatch.dylib 0x19257eac4 _dispatch_client_callout + 16
32 libdispatch.dylib 0x1925696e4 _dispatch_continuation_pop + 596
33 libdispatch.dylib 0x19257c800 _dispatch_source_latch_and_call + 396
34 libdispatch.dylib 0x19257b4d4 _dispatch_source_invoke + 844
35 libdispatch.dylib 0x19259c008 _dispatch_main_queue_drain.cold.5 + 592
36 libdispatch.dylib 0x192573f48 _dispatch_main_queue_drain + 180
37 libdispatch.dylib 0x192573e84 _dispatch_main_queue_callback_4CF + 44
38 CoreFoundation 0x1927ea980 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16
39 CoreFoundation 0x1927bf7dc __CFRunLoopRun + 1944
40 CoreFoundation 0x19287935c _CFRunLoopRunSpecificWithOptions + 532
41 Foundation 0x194a06890 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
42 Foundation 0x194005a50 -[NSRunLoop(NSRunLoop) run] + 64
43 libxpc.dylib 0x19240ce14 _xpc_objc_main + 668
44 libxpc.dylib 0x19241ecf8 _xpc_main + 40
45 libxpc.dylib 0x19241ecd0 xpc_bs_main + 16
46 BoardServices 0x1ac51179c +[BSServicesConfiguration activateXPCService] + 72
47 ExtensionFoundation 0x237a92710 _EXRunningExtension.resume() + 1592
48 ExtensionFoundation 0x237a911a8 _EXRunningExtension.start(withArguments:count:) + 124
49 ExtensionFoundation 0x237a88f24 EXExtensionMain(_:_:) + 668
50 Foundation 0x1940065ec NSExtensionMain + 200
51 dyld 0x192359d54 start + 7184
Hi there,
I’m having trouble with localization for App Intents used in a configurable widget when the intents are defined inside a Swift Package.
The intents appear correctly in the widget configuration UI and function as expected, but the localized strings are not displayed.
Instead, the widget shows the localization keys themselves.
Setup
Xcode: 26.1
iOS: 26
The App Intents are used for a configurable widget
Intent is located in a Swift Package
The Widget Extension depends on the package
AppIntentsPackage setup:
// In the package
public struct MySharedIntentsPackage: AppIntentsPackage {}
// In the widget extension
import AppIntents
import SharedAppIntents
struct WidgetIntentsPackage: AppIntentsPackage {
static var includedPackages: [any AppIntentsPackage.Type] {
[MySharedIntentsPackage.self]
}
}
What I’ve tried
I tested several configurations separately to see which setup allows localization to work:
Localizing inside the Swift Package
Placed a Localizable.xcstrings file inside the Swift Package.
Specified .module for the bundle parameter in LocalizedStringResource initializers.
→ The widget still displayed the localization keys.
Localizing inside the Widget Extension
Placed a Localizable.xcstrings file inside the Widget Extension target instead of the package.
→ The widget continued to show the localization keys.
Allowing mixed localizations
Added CFBundleAllowMixedLocalizations = YES to the Widget Extension’s Info.plist.
→ No change; the widget still showed the keys.
Problem
In the WWDC 2025 session “Get to Know App Intents”, it was announced that App Intents would officially support Swift Packages.
However, despite following that guidance, here we have a situation where the localizations do not work and only the keys appear in a configurable widget’s configuration UI.
When I move the same App Intent code directly into the Widget Extension target, localization works as expected, but not when the intent remains inside the Swift Package.
Question
Is localization for App Intents defined in Swift Packages officially supported for configurable widgets?
If yes:
Which bundle does App Intents use to resolve localized strings?
Should the .xcstrings file be placed in the package or in the host extension’s bundle?
Or is this a current limitation or known issue?
Any clarification or workaround would be greatly appreciated.
Thank you.
When we use AppIntents to configure WidgetKit complications, the description we provide in IntentRecommendation is ignored after applying a .watchface file that includes those intent configurations. In the Watch app, under Complications, the labels shown next to each slot do not match the actual complications on the face—they appear to be the first strings returned by recommendations() rather than the selected intent configuration.
Steps to Reproduce
Create an AppIntent used by a WidgetKit complication (e.g., .accessoryRectangular).
Provide multiple intent recommendations with distinct descriptions:
struct SampleIntent: AppIntent {
static var title: LocalizedStringResource = "Sample"
static var description = IntentDescription("Sample data")
@Parameter(title: "Mode") var mode: String
static func recommendations() -> [IntentRecommendation<Self>] {
[
.init(intent: .init(mode: "A"), description: "Complication A"),
.init(intent: .init(mode: "B"), description: "Complication B"),
.init(intent: .init(mode: "C"), description: "Complication C")
]
}
func perform() async throws -> some IntentResult { .result() }
}
Add two of these complications to a Modular Duo face (or any face that supports multiple slots), each with different intent configurations (e.g., A in one slot, B in another).
Export/share the face to a .watchface file and apply it on another device.
Open the Watch app → the chosen face → Complications.
Expected
Each slot’s label in Complications reflects the specific intent configuration on the face (e.g., “Complication A”, “Complication B”), matching what the complication actually renders.
Actual
The labels under Complications do not match the visible complications. Instead, the strings shown look like the first N items from recommendations(), regardless of which configurations are used in each slot.
Notes
The complications themselves render correctly on-watch; the issue is the names/labels displayed in the Watch app UI after applying a .watchface.
Filed Feedback: FB20915258
Topic:
App & System Services
SubTopic:
Widgets & Live Activities
Tags:
watchOS
Watch Complications
WidgetKit
App Intents
Hello everyone,
I'm encountering a persistent issue with my newly created widget project, even though it’s a clean, minimal setup. Every time I try to run the widget on the simulator or a device, I get the following error message:
[S:1] Error received: Connection invalidated.
I get this error even in a new project (I just created a new one) when I add a widget extension to it. The app itself works fine—no errors—but when I try to install the widget extension, it always shows me this error.
Initially, I thought the issue was caused by an incorrect URLSession, but even after creating a clean (default) widget extension, the issue persists. I don’t know what to think anymore.
Has anyone encountered this before? It’s completely blocking my progress.
Conditions -
new project from iOS App template
WidgetExtension from template with no changes
Iphone 14 pro
IOS - 18.3.2
iPhone 16.0 16.0.2 系统上运行小组件出现问题, 其他系统没有问题
SendProcessControlEvent:toPid: encountered an error: Error Domain=com.apple.dt.deviceprocesscontrolservice Code=8 "Failed to show Widget 'com.jiduauto.iphone.jdcomiphoneWidget' error: Error Domain=FBSOpenApplicationServiceErrorDomain Code=5 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedDescription=The request to open "com.apple.springboard" failed., NSLocalizedFailureReason=Unexpected error type., NSUnderlyingError=0x600002bbd7a0 {Error Domain=BSServiceConnectionErrorDomain Code=3 "XPC error received on message reply handler" UserInfo={BSErrorCodeDescription=OperationFailed, NSLocalizedFailureReason=XPC error received on message reply handler}}, BSErrorCodeDescription=InvalidResponse}." UserInfo={NSLocalizedDescription=Failed to show Widget 'com.jiduauto.iphone.jdcomiphoneWidget' error: Error Domain=FBSOpenApplicationServiceErrorDomain Code=5 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedDescription=The request to open "com.apple.springboard" failed., NSLocalizedFailureReason=Unexpected error type., NSUnderlyingError=0x600002bbd7a0 {Error Domain=BSServiceConnectionErrorDomain Code=3 "XPC error received on message reply handler" UserInfo={BSErrorCodeDescription=OperationFailed, NSLocalizedFailureReason=XPC error received on message reply handler}}, BSErrorCodeDescription=InvalidResponse}., NSUnderlyingError=0x600002bbd5f0 {Error Domain=FBSOpenApplicationServiceErrorDomain Code=5 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedDescription=The request to open "com.apple.springboard" failed., NSLocalizedFailureReason=Unexpected error type., NSUnderlyingError=0x600002bbd7a0 {Error Domain=BSServiceConnectionErrorDomain Code=3 "XPC error received on message reply handler" UserInfo={BSErrorCodeDescription=OperationFailed, NSLocalizedFailureReason=XPC error received on message reply handler}}, BSErrorCodeDescription=InvalidResponse}}}
Domain: DTXMessage
Code: 1
User Info: {
DVTErrorCreationDateKey = "2024-02-19 08:02:14 +0000";
}
System Information
macOS Version 13.5.2 (Build 22G91)
Xcode 15.0 (22265) (Build 15A240d)
Timestamp: 2024-02-19T16:02:14+08:00
I am looking for a way to hide sensitive information on my Complication, basically whenever the user does not actively look at it. That includes
Always-On state
Locked State (e.g. Watch not on wrist)
I could observe differences in behavior between Preview, Simulator and Real Device. In general it looks like the .privacySensitive() modifier does not do anything for my purpose (except if the user enables redaction in settings).
For the always-on state I could use @Environment(\.isLuminanceReduced) to conditionally apply .redacted(reason: .placeholder). This works most of the time.
@ViewBuilder func preservePrivacy(_ isLuminanceReduced: Bool) -> some View {
if isLuminanceReduced {
self
.redacted(reason: .placeholder)
} else {
self
}
}
However I still cannot hide the information when the Watch is locked completely (via PIN-Code). I still believe that .privacySensitive() should take care of it, but apparently it doesn't. So the question is: How can I hide sensitive information when the Watch is locked?
This is my widget:
Text("1234")
.privacySensitive()
.preservePrivacy(isLuminanceReduced)
.widgetCurvesContent()
.widgetLabel {
Text("PIN")
.widgetAccentable()
.foregroundStyle(.secondary)
}
.containerBackground(.teal.gradient, for: .widget)
(I included the whole story, because possibly my whole approach is wrong.)
When the home screen is in tinted mode in iOS 18, the widget gallery seems to display widgets with the background inset from the edge of the widget (i.e. negative padding).
You can see this behavior in the Apple News widget too, where the full-bleed content outside of the inset is very light. This only happens in the sample gallery, not when the widgets are placed on the home screen.
For my widgets, this outer edge contains important content and the clipping behavior makes the widgets look poorly designed when viewed in the gallery.
Is there any way to turn this behavior off and just show the widget normally in the gallery with no weird inset — the way it will actually display when added to the home screen?
If it matters, my widgets are currently configured with:
.contentMarginsDisabled()
.containerBackground(for: .widget) {
// ... (background color) */
}
When I create new build for TestFlight, it could not install from Test Flight, and show any error/warning/tip, from device's console, I got this error:
-[IXSDataPromise cancelForReason:client:error:]: <IXSPlaceholder(0xc1acd7480) Name:App Placeholder: XXXXXXX(com.YYYYYY) Creator:App Store UUID:8AB2A59C-C367-42E1-990A-ACAFD8F9F4B9 Location:[system-defined]> : canceled by client 17 for reason Error Domain=IXUserPresentableErrorDomain Code=1 "This app could not be installed at this time." UserInfo={NSUnderlyingError=0xc1b1751a0 {Error Domain=MIInstallerErrorDomain Code=99 "WatchKit 2.0 app has disallowed Info.plist key: ISIconPlatform" UserInfo={LegacyErrorString=WatchKitAppIllegalInfoPlistKey, FunctionName=-[MIExecutableBundle hasOnlyAllowedWatchKitAppInfoPlistKeysForWatchKitVersion:error:], SourceFileLine=2715, NSLocalizedDescription=WatchKit 2.0 app has disallowed Info.plist key: ISIconPlatform}}, NSLocalizedDescription=This app could not be installed at this time., NSLocalizedRecoverySuggestion=WatchKit 2.0 app has disallowed Info.plist key: ISIconPlatform, NSLocalizedFailureReason=Could not install at this time.}
After I remove watch app in this app, It could install successful, but this watch app still needed.
I count not find anything about [IconPlatform] in my code, and could not find it in the info.plist files in the .ipa file.
I only do some tiny code change for my app, and it could install in yesterday, but could not install for today. So how to resolve this issue?
I need submit my new build for a urgent company events.
Topic:
App Store Distribution & Marketing
SubTopic:
TestFlight
Tags:
Apple Watch
TestFlight
WidgetKit
Hello everyone,
I am facing a critical and blocking issue regarding watchface sharing on iOS/watchOS 26 and would appreciate any immediate guidance or updates from the community or Apple.
The Problem:
We are unable to share watchfaces containing any complications from our app in TestFlight and App Store distribution environments. The operation fails with an error indicating the app and complications are unavailable. However, the exact same functionality works perfectly in all development builds (both Debug and Release schemes). This issue was not present on iOS/watchOS 18.
We have testing, including:
Successfully sharing the watchface in development environments.
The failure occurs consistently across TestFlight and App Store builds.
Exporting the watchface configuration from a TestFlight/AppStore build on iOS, transferring it to a paired watch, and finding it still shows as "Unavailable".
We suspect this may be related to the dual-target architecture of Watch apps.
Any guidance or updates would be greatly appreciated.
Thank you for your time and support!
I've encountered a major issue with the iOS 18.1 RC and watchOS 11.1 RC. It appears that complications running on WidgetKit cannot be synced as .watchface to these new release candidates. The error message indicates that "the Watch Faces app and complication are not available," which is affecting all apps utilizing WidgetKit.
This issue renders all WidgetKit-based complications unusable on watchOS 11.1 RC. It’s a serious problem for those of us who rely on these complications for our apps and for users expecting consistent functionality.
APPLE, PLEASE FIX THIS ISSUE ASAP!
This bug is a significant setback for developers and users alike, and any guidance or updates would be greatly appreciated.