Post

Replies

Boosts

Views

Created

WidgetInfo - intent is nil until edit face
We have a watchOS app that provides many configurable widgets. Those widgets are configured and installed with help of AppIntent: public struct RectComplAppIntent: AppIntent, WidgetConfigurationIntent, CustomIntentMigratedAppIntent { @Parameter(title: "Style") var style: String? .... } However when I print WidgetInfos with getCurrentConfigurations(), I sometimes got nil for configuration. At the same time widgets are not loaded. Exact steps: User installs the pre-cofnigured .watchface. Complications are not loaded since configuration is missing. I print getCurrentConfigurations() and get entries like this: WidgetInfo: - configuration: nil - widgetConfigurationIntent: nil - family: accessoryRectangular - kind: Rectangle Then user force-touches a face and opens editing mode. Returns to watch app, prints infos: WidgetInfo: - configuration: <INIntent: 0x780d290> { style = vol1Logo; } - widgetConfigurationIntent: nil - family: accessoryRectangular - kind: Rectangle – Suddenly intent appears with the correct style and complications start to show up. How do you think, why it happens? Why after .watchface install all the WidgetInfo has nil intent (configuration)? What helps them to load later? You can try this face yourself: https://cdn.watchfaces.co/watchfaces/glance-minimalist.watchface
1
0
377
Mar ’25
Does DynamicOptionsProvider work on watchOS?
I'm curious, why DynamicOptionsProvider is available on watchOS? Is there any way to present options to the user? For example in Emoji Rangers project: struct EmojiRangerSelection: AppIntent, WidgetConfigurationIntent { static let intentClassName = "EmojiRangerSelectionIntent" static var title: LocalizedStringResource = "Emoji Ranger Selection" static var description = IntentDescription("Select Hero") @Parameter(title: "Selected Hero", default: EmojiRanger.cake, optionsProvider: EmojiRangerOptionsProvider()) var hero: EmojiRanger? struct EmojiRangerOptionsProvider: DynamicOptionsProvider { func results() async throws -> [EmojiRanger] { EmojiRanger.allHeros } } func perform() async throws -> some IntentResult { return .result() } } On watchOS we usually use recommendations() to give the user predefined choice of configured widgets. Meanwhile in AppIntentProvider recommendations are empty: struct AppIntentProvider: AppIntentTimelineProvider { ... func recommendations() -> [AppIntentRecommendation<EmojiRangerSelection>] { [] } } Does it imply that there's a way to use DynamicOptionsProvider on watchOS somehow? BTW, WidgetConfiguration.promptsForUserConfiguration() is one of the methods that are not available on watchOS. And also, the Emoji Ranger project doesn't show widgets (complications) on watchOS out of the box.
0
2
389
Mar ’25
Metal debug log in Swift Package
My goal is to print a debug message from a shader. I follow the guide that orders to set -fmetal-enable-logging metal compiler flag and following environment variables: MTL_LOG_LEVEL=MTLLogLevelDebug MTL_LOG_BUFFER_SIZE=2048 MTL_LOG_TO_STDERR=1 However there's an issue with the guide, it's only covers Xcode project setup, however I'm working on a Swift Package. It has a Metal-only target that's included into main target like this: targets: [ // A separate target for shaders. .target( name: "MetalShaders", resources: [ .process("Metal") ], plugins: [ // https://github.com/schwa/MetalCompilerPlugin .plugin(name: "MetalCompilerPlugin", package: "MetalCompilerPlugin") ] ), // Main target .target( name: "MegApp", dependencies: ["MetalShaders"] ), .testTarget( name: "MegAppTests", dependencies: [ "MegApp", "MetalShaders", ] ] So to apply compiler flag I use MetalCompilerPlugin which emits debug.metallib, it also allows to define DEBUG macro for shaders. This code compiles: #ifdef DEBUG logger.log_error("Hello There!"); os_log_default.log_debug("Hello thread: %d", gid); // this proves that code exectutes result.flag = true; #endif Environment is set via .xctestplan and valideted to work with ProcessInfo. However, nothing is printed to Xcode console nor to Console app. In attempt to fix it I'm trying to setup a MTLLogState, however the makeLogState(descriptor:) fails with error: if #available(iOS 18.0, *) { let logDescriptor = MTLLogStateDescriptor() logDescriptor.level = .debug logDescriptor.bufferSize = 2048 // Error Domain=MTLLogStateErrorDomain Code=2 "Cannot create residency set for MTLLogState: (null)" UserInfo={NSLocalizedDescription=Cannot create residency set for MTLLogState: (null)} let logState = try! device.makeLogState(descriptor: logDescriptor) commandBufferDescriptor.logState = logState } Some LLMs suggested that this is connected with Simulator, and truly, I run the tests on simulator. However tests don't want to run on iPhone... I found solution running them on My Mac (Mac Catalyst). Surprisingly descriptor log works there, even without MTLLogState. But the Simulator behaviour seems like a bug...
1
1
755
Jan ’26
App availablitiy issue in New Zeland
Hello, help needed! I released an app to all 175 countries on March 5, 2026. However one of my testers notified me, that the app isn't shows up while being searched in New Zealand. I validated the issue. The US App Store link works: https://apps.apple.com/us/app/heartble-heart-rate-bluetooth/id6758879454 However, if I switch to New Zealand (in the footer on that web page) it navigates me to App Store home. Search results doesn't contain HeartBLE app: https://apps.apple.com/nz/iphone/search?term=HeartBLE Please, help! Should I create a feedback? Or maybe I missing something in the ASC setup?
1
0
103
Mar ’26
This app is currently unavailable for Analytics
20 days passed since I released the app. According to Trends it has 30+ installs and 10 In-App purchases. When will I finally get analytics? Can't wait to see it, because I'm actively promoting my app and I wish to know the marketing performance. All that I see now in App Store Connect is this message: Other apps have no signs of this issue, I assume that the analytics is missing because the app is new. The question is "when"? :)
4
0
192
Mar ’26
Does Review team have a right to demand video?
The review team started to demand me to make a video of my app: We still need a demo video that shows a physical Apple device and the designated hardware pairing together and interacting during the use of the app. Provide a demo video that shows: The current version of the app in use on a physical Apple device, not on a simulator The initial pairing process between the app and the designated hardware The entire app workflow with the designated hardware Film the demo video to show both the designated hardware and the app running on a physical Apple device. The app is an extremely simple 1-button utility that starts a workout and broadcasts heart rate over Bluetooth. I believe it's way too much. It's a complicated task to film Apple Watch on my hand while also managing hardware (My Mac Book) and somehow operating camera simultaneously. I wonder if I can submit an appeal or replace that reviewer somehow.
5
0
219
2w
WidgetInfo - intent is nil until edit face
We have a watchOS app that provides many configurable widgets. Those widgets are configured and installed with help of AppIntent: public struct RectComplAppIntent: AppIntent, WidgetConfigurationIntent, CustomIntentMigratedAppIntent { @Parameter(title: "Style") var style: String? .... } However when I print WidgetInfos with getCurrentConfigurations(), I sometimes got nil for configuration. At the same time widgets are not loaded. Exact steps: User installs the pre-cofnigured .watchface. Complications are not loaded since configuration is missing. I print getCurrentConfigurations() and get entries like this: WidgetInfo: - configuration: nil - widgetConfigurationIntent: nil - family: accessoryRectangular - kind: Rectangle Then user force-touches a face and opens editing mode. Returns to watch app, prints infos: WidgetInfo: - configuration: <INIntent: 0x780d290> { style = vol1Logo; } - widgetConfigurationIntent: nil - family: accessoryRectangular - kind: Rectangle – Suddenly intent appears with the correct style and complications start to show up. How do you think, why it happens? Why after .watchface install all the WidgetInfo has nil intent (configuration)? What helps them to load later? You can try this face yourself: https://cdn.watchfaces.co/watchfaces/glance-minimalist.watchface
Replies
1
Boosts
0
Views
377
Activity
Mar ’25
Does DynamicOptionsProvider work on watchOS?
I'm curious, why DynamicOptionsProvider is available on watchOS? Is there any way to present options to the user? For example in Emoji Rangers project: struct EmojiRangerSelection: AppIntent, WidgetConfigurationIntent { static let intentClassName = "EmojiRangerSelectionIntent" static var title: LocalizedStringResource = "Emoji Ranger Selection" static var description = IntentDescription("Select Hero") @Parameter(title: "Selected Hero", default: EmojiRanger.cake, optionsProvider: EmojiRangerOptionsProvider()) var hero: EmojiRanger? struct EmojiRangerOptionsProvider: DynamicOptionsProvider { func results() async throws -> [EmojiRanger] { EmojiRanger.allHeros } } func perform() async throws -> some IntentResult { return .result() } } On watchOS we usually use recommendations() to give the user predefined choice of configured widgets. Meanwhile in AppIntentProvider recommendations are empty: struct AppIntentProvider: AppIntentTimelineProvider { ... func recommendations() -> [AppIntentRecommendation<EmojiRangerSelection>] { [] } } Does it imply that there's a way to use DynamicOptionsProvider on watchOS somehow? BTW, WidgetConfiguration.promptsForUserConfiguration() is one of the methods that are not available on watchOS. And also, the Emoji Ranger project doesn't show widgets (complications) on watchOS out of the box.
Replies
0
Boosts
2
Views
389
Activity
Mar ’25
How to edit a question?
I posted a question 7 days ago and now it looks like I can't edit or delete it.
Replies
3
Boosts
0
Views
177
Activity
Mar ’25
Why there's no rgb32Float in Metal?
I noticed that MTLPixelFormat has this cases: case r32Float = 55 case rg32Float = 105 case rgba32Float = 125 But no case rgb32Float. What's the reason for such a discrimination?
Replies
1
Boosts
0
Views
287
Activity
Jan ’26
Metal debug log in Swift Package
My goal is to print a debug message from a shader. I follow the guide that orders to set -fmetal-enable-logging metal compiler flag and following environment variables: MTL_LOG_LEVEL=MTLLogLevelDebug MTL_LOG_BUFFER_SIZE=2048 MTL_LOG_TO_STDERR=1 However there's an issue with the guide, it's only covers Xcode project setup, however I'm working on a Swift Package. It has a Metal-only target that's included into main target like this: targets: [ // A separate target for shaders. .target( name: "MetalShaders", resources: [ .process("Metal") ], plugins: [ // https://github.com/schwa/MetalCompilerPlugin .plugin(name: "MetalCompilerPlugin", package: "MetalCompilerPlugin") ] ), // Main target .target( name: "MegApp", dependencies: ["MetalShaders"] ), .testTarget( name: "MegAppTests", dependencies: [ "MegApp", "MetalShaders", ] ] So to apply compiler flag I use MetalCompilerPlugin which emits debug.metallib, it also allows to define DEBUG macro for shaders. This code compiles: #ifdef DEBUG logger.log_error("Hello There!"); os_log_default.log_debug("Hello thread: %d", gid); // this proves that code exectutes result.flag = true; #endif Environment is set via .xctestplan and valideted to work with ProcessInfo. However, nothing is printed to Xcode console nor to Console app. In attempt to fix it I'm trying to setup a MTLLogState, however the makeLogState(descriptor:) fails with error: if #available(iOS 18.0, *) { let logDescriptor = MTLLogStateDescriptor() logDescriptor.level = .debug logDescriptor.bufferSize = 2048 // Error Domain=MTLLogStateErrorDomain Code=2 "Cannot create residency set for MTLLogState: (null)" UserInfo={NSLocalizedDescription=Cannot create residency set for MTLLogState: (null)} let logState = try! device.makeLogState(descriptor: logDescriptor) commandBufferDescriptor.logState = logState } Some LLMs suggested that this is connected with Simulator, and truly, I run the tests on simulator. However tests don't want to run on iPhone... I found solution running them on My Mac (Mac Catalyst). Surprisingly descriptor log works there, even without MTLLogState. But the Simulator behaviour seems like a bug...
Replies
1
Boosts
1
Views
755
Activity
Jan ’26
App availablitiy issue in New Zeland
Hello, help needed! I released an app to all 175 countries on March 5, 2026. However one of my testers notified me, that the app isn't shows up while being searched in New Zealand. I validated the issue. The US App Store link works: https://apps.apple.com/us/app/heartble-heart-rate-bluetooth/id6758879454 However, if I switch to New Zealand (in the footer on that web page) it navigates me to App Store home. Search results doesn't contain HeartBLE app: https://apps.apple.com/nz/iphone/search?term=HeartBLE Please, help! Should I create a feedback? Or maybe I missing something in the ASC setup?
Replies
1
Boosts
0
Views
103
Activity
Mar ’26
This app is currently unavailable for Analytics
20 days passed since I released the app. According to Trends it has 30+ installs and 10 In-App purchases. When will I finally get analytics? Can't wait to see it, because I'm actively promoting my app and I wish to know the marketing performance. All that I see now in App Store Connect is this message: Other apps have no signs of this issue, I assume that the analytics is missing because the app is new. The question is "when"? :)
Replies
4
Boosts
0
Views
192
Activity
Mar ’26
How does Associated Domains Development works on watchOS?
How does Associated Domains Development work on watchOS? In comparison, on iOS we have Diagnostics menu that allows to input a link and test the setup. How to achieve the same on a watch? watchOS: iOS:
Replies
5
Boosts
0
Views
195
Activity
3w
Does Review team have a right to demand video?
The review team started to demand me to make a video of my app: We still need a demo video that shows a physical Apple device and the designated hardware pairing together and interacting during the use of the app. Provide a demo video that shows: The current version of the app in use on a physical Apple device, not on a simulator The initial pairing process between the app and the designated hardware The entire app workflow with the designated hardware Film the demo video to show both the designated hardware and the app running on a physical Apple device. The app is an extremely simple 1-button utility that starts a workout and broadcasts heart rate over Bluetooth. I believe it's way too much. It's a complicated task to film Apple Watch on my hand while also managing hardware (My Mac Book) and somehow operating camera simultaneously. I wonder if I can submit an appeal or replace that reviewer somehow.
Replies
5
Boosts
0
Views
219
Activity
2w