My app allows users to store URLs for future reference. It also has widgets that display these saved items. I want to make these widgets interactive by opening the linked content in Safari without having to open the main app.
The issue is that UIApplication.shared.open is not available in app extensions. And this is a problem since widgets are app extensions.
Are there alternative methods to accomplish this scenario, or is it currently unsupported?
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Created
After updating to iOS 17 and Xcode 15 I noticed that menus on my app get automatically dismissed while CloudKit is syncing data right after opening the app. I know it's CloudKit because this issue doesn't happen when I launch the app in Airplane Mode.
It looks like CloudKit causes something to change (even when there are no data changes since the last usage), which causes the UI to refresh. This refresh causes the menus to be dismissed.
This is frustrating because users have to tap a button two or three times before being able to interact with the menu showed by the button. I'm attaching a screen recording that shows the issue:
https://youtube.com/shorts/Wl9gP2HLktE
I open the app and tap the "+" icon, which shows the menu.
The menu is quickly dismissed.
I tap the "+" icon again, and the menu is shown for a millisecond, and is dismissed again.
I tap the "+" button once again. This time the menu is shown and stays there because CloudKit has finished its initial sync process.
Note that this didn't happened on iOS 16 / Xcode 14, so something must have changed to cause this issue. Is there something I need to update on my code to fix this issue, or is it a bug in the OS or frameworks that will be fixed in a future update?
My app uses Core Data to store user data. It doesn't have login or profile mechanisms, because user data is tied to the user's Apple ID and synced via iCloud using CloudKit.
I've recently added the User Management capability, and checked Runs as Current User to allow each Apple TV user to have access to its own data. Everything works as expected: I press and hold the TV button to select a different user in Control Center; The system shows a switching user UI; And the app is relaunched using the new user's Apple ID and data from iCloud.
The problem is that switching users apparently causes the local Core Data managed database to be reset, removing all data from the previous user. This is inconvenient because every time we switch users, the newly selected user has to wait for CloudKit to download all its data back into the app. And it takes a while, especially for users that have more than a few hundred items in the database.
Ideally, tvOS should maintain the user data on-device, and only switch to a different database according to the active user. This way data would not need to be downloaded from scratch every time a user is switched.
Is there a setting I can configure or a checkbox I can check to enable this behavior, or is this something not possible yet on tvOS?
The documentation for translationTask(source:target:action:) says it should translate when content appears, but this isn't happening. I’m only able to translate when I manually associate that task with a configuration, and instantiate the configuration.
Here’s the complete source code:
import SwiftUI
import Translation
struct ContentView: View {
@State private var originalText = "The orange fox jumps over the lazy dog"
@State private var translationTaskResult = ""
@State private var translationTaskResult2 = ""
@State private var configuration: TranslationSession.Configuration?
var body: some View {
List {
// THIS DOES NOT WORK
Section {
Text(translationTaskResult)
.translationTask { session in
Task { @MainActor in
do {
let response = try await session.translate(originalText)
translationTaskResult = response.targetText
} catch { print(error) }
}
}
}
// THIS WORKS
Section {
Text(translationTaskResult2)
.translationTask(configuration) { session in
Task { @MainActor in
do {
let response = try await session.translate(originalText)
translationTaskResult2 = response.targetText
} catch { print(error) }
}
}
Button(action: {
if configuration == nil {
configuration = TranslationSession.Configuration()
return
}
configuration?.invalidate()
}) { Text("Translate") }
}
}
}
}
How can I automatically translate a given text when it appears using the new translationTask API?
Topic:
Machine Learning & AI
SubTopic:
General
Adding the openAppWhenRun property to an AppIntent for a ControlWidgetButton causes the following error when the control is tapped in Control Center:
Unknown NSError The operation couldn’t be completed. (LNActionExecutorErrorDomain error 2018.)
Here’s the full ControlWidget and AppIntent code that causes the errorerror:
Should controls be able to open apps after the AppIntent runs, or is this a bug?
onContinueUserActivity(CSSearchableItemActionType, perform) works as expected on iOS when we search and select an item from Spotlight, but nothing happens when we do the same on a SwiftUI macOS app.
var body: some Scene {
WindowGroup {
MyView()
.onContinueUserActivity(CSSearchableItemActionType, perform: handleSpotlight)
}
}
func handleSpotlight(_ userActivity: NSUserActivity) {
// Is not called...
}
How can we respond to a user clicking a Spotlight result from our apps on macOS?
In a TabView with the .sidebarAdaptable style, including TabSection elements prevents the default back swipe on the remote from revealing the sidebar. Removing all TabSection elements and using only Tab elements makes it work as expected:
import SwiftUI
struct ContentView: View {
var body: some View {
TabView {
Tab("Tab", systemImage: "square.fill") { Button(action: {}) { Text("Button") } }
Tab("Tab", systemImage: "square.fill") { Button(action: {}) { Text("Button") } }
Tab("Tab", systemImage: "square.fill") { Button(action: {}) { Text("Button") } }
Tab("Tab", systemImage: "square.fill") { Button(action: {}) { Text("Button") } }
Tab("Tab", systemImage: "square.fill") { Button(action: {}) { Text("Button") } }
Tab("Tab", systemImage: "square.fill") { Button(action: {}) { Text("Button") } }
Tab("Tab", systemImage: "square.fill") { Button(action: {}) { Text("Button") } }
Tab("Tab", systemImage: "square.fill") { Button(action: {}) { Text("Button") } }
Tab("Tab", systemImage: "square.fill") { Button(action: {}) { Text("Button") } }
TabSection("Section") {
Tab("Tab", systemImage: "square.fill") { Button(action: {}) { Text("Button") } }
Tab("Tab", systemImage: "square.fill") { Button(action: {}) { Text("Button") } }
}
}.tabViewStyle(.sidebarAdaptable)
}
}
Am I using it wrong, or is this a bug?
Since updating to macOS Sequoia, I see this dialog every time I launch my SwiftUI macOS app from Xcode:
Users who installed the app from the App Store don’t see it. And this didn’t happened in previous macOS versions.
Could launching it from Xcode be triggering some extra access requirement? How can I stop this dialog from appearing every time I launch my app? It’s very disruptive to the debugging process.