Post

Replies

Boosts

Views

Activity

StoreKit says purchase succeeded but didn't, AppStore.sync() throws error Unable to Complete Request
One user of my app reached out reporting an interesting in-app purchase issue. Has anyone encountered this or have an idea what's going on here? Proceed to purchase the non-consumable IAP in the app downloaded from the App Store iOS shows the price sheet as expected Confirm with the side button iOS shows an alert "You've already purchased this. Would you like to get it again for free?" Tap OK iOS shows an alert "You're all set. Your purchase was successful." Tap OK The app's content remains locked Tap Restore Purchases iOS shows an alert to sign (with the same account shown in step 2) Input the password and tap OK iOS shows an alert "Unable to Complete Request" (which is the error.localizedDescription thrown from AppStore.sync())
0
0
12
39m
Display HDR images for PhotoKit assets
In my app I get a UIImage for a PHAsset via PHImageManager.requestImage(for:targetSize:contentMode:options:resultHandler:). I directly display that image in a UIImageView that has preferredImageDynamicRange set to .high. The problem is I do not see the high dynamic range. I see the HDRDemo23 sample code uses PhotosPicker to get a UIImage from Data through UIImageReader whose config enables prefersHighDynamicRange. Is there a way to support HDR when using the Photos APIs to request display images? And is there support for PHLivePhoto displayed in PHLivePhotoView retrieved via PHImageManager.requestLivePhoto?
5
1
2.1k
2w
How to utilize PHLivePhotoRequestOptions.preferHDR to support HDR in Live Photos?
The iOS 27 SDK newly exposed PHLivePhotoRequestOptions.preferHDR. Its documentation states: For best results, only enable this when you intend to display an HDR experience in PHLivePhotoView — for example, when the view’s preferredImageDynamicRange is greater than standard (SDR). PHLivePhotoView has no preferredImageDynamicRange property. How is this API to be used then?
0
0
312
2w
PHAssetResource deprecated originalFilename replaced with filename, but PHAssetExtendedMetadata only has originalFilename in iOS 27
PHAssetExtendedMetadata has the following API: /// The original file name of this asset. open var originalFilename: String? { get } And PHAssetResource has the following API: @available(iOS, introduced: 9, deprecated: 27, message: "Use filename instead") open var originalFilename: String { get } /// The filename associated with this asset resource (if any) @available(iOS 27, *) open var filename: String? { get } I'm confused why PHAssetExtendedMetadata (iOS 27+) has originalFilename while PHAssetResource originalFilename was deprecated and replaced with filename. I would have expected PHAssetExtendedMetadata's property be named filename to match. Are all 3 of these all the exact same name or can there be differences?
1
0
364
3w
Clarification on BGTaskScheduler.submitTaskRequest(_:completionHandler:) main-thread warning
I’m looking at the new BGTaskScheduler.submitTaskRequest(_:completionHandler:) API on iOS 27 that replaces the now deprecated submit(_:).* The documentation says: This method asynchronously submits the task request and invokes the completion handler with any errors that occur during submission. It also says: The completion handler may be invoked on a arbitrary queue after an arbitrary amount of delay. Do not call this method from the main thread or performance-critical contexts. I’m confused when it says “Do not call this method from the main thread.” Since the method asynchronously submits the request and reports errors later through the completion handler, I initially read this as a warning not to wait for the completion handler to be called assuming it returns quickly. But it specifically says not to call the method from the main thread, which suggests the initial call itself may perform blocking expensive work before returning (although this is confusingly stated in the same block describing the completion handler behavior). Is the intended usage to create/configure the request on the main thread, then dispatch only submitTaskRequest to a background queue, or is calling that on the main thread actually okay just like the submit(_:) API it replaced? My current code in a synchronous function running on the main thread: BGTaskScheduler.shared.register(forTaskWithIdentifier: id, using: .main) { @Sendable registeredTask in // The background continued processing task has started, use it to update progress... } let request = BGContinuedProcessingTaskRequest(identifier: id, title: title, subtitle: subtitle) request.strategy = .fail // Start the task immediately and fail if it cannot if BGTaskScheduler.supportedResources.contains(.gpu) { request.requiredResources = .gpu } do { try BGTaskScheduler.shared.submit(request) // FIXME: How to migrate to the new API? } catch { // No worries, user will just have to keep the app open until the task completes print("BGTaskScheduler request failed: \(error.localizedDescription)") } *I assume this change was made to address issues like FB21052216 (https://developer.apple.com/forums/thread/807370)
3
0
590
Aug ’26
BGContinuedProcessingTask register block not called, submit does not throw an error
I implemented BGContinuedProcessingTask in my app and it seems to be working well for everyone except one user (so far) who has reached out to report nothing happens when they tap the Start Processing button. They have an iPhone 12 Pro Max running iOS 26.1. Restarting iPhone does not fix it. When they turn off the background processing feature in the app, it works. In that case my code directly calls the function to start processing instead of waiting for it to be invoked in the register block (or submit catch block). Is this a bug that's possible to occur, maybe device specific? Or have I done something wrong in the implementation? func startProcessingTapped(_ sender: UIButton) { if isBackgroundProcessingEnabled { startBackgroundContinuedProcessing() } else { startProcessing(backgroundTask: nil) } } func startBackgroundContinuedProcessing() { BGTaskScheduler.shared.register(forTaskWithIdentifier: taskIdentifier, using: .main) { @Sendable [weak self] task in guard self != nil else { return } startProcessing(backgroundTask: task as? BGContinuedProcessingTask) } let request = BGContinuedProcessingTaskRequest(identifier: taskIdentifier, title: title, subtitle: subtitle) request.strategy = .fail if BGTaskScheduler.supportedResources.contains(.gpu) { request.requiredResources = .gpu } do { try BGTaskScheduler.shared.submit(request) } catch { startProcessing(backgroundTask: nil) } } func startProcessing(backgroundTask: BGContinuedProcessingTask?) { // FIXME: Never called for this user when isBackgroundProcessingEnabled is true }
11
0
1.4k
Aug ’26
How to get Ask Siri context menu button
In my UIKit apps, collection view cells that have a context menu gain an Ask Siri item in iOS 27 without me doing anything. In my SwiftUI app I have a LazyVGrid containing a ForEach of CellView which is a Button that has a contextMenu, yet there’s no Ask Siri button in the context menu. What determines whether or not it will be added? What do I need to do to allow the system to add it?
2
0
516
Jun ’26
Core Image processing for a photo overlaid text effect
The iPhone Lock Screen lets you display a small time and date at the top of the display that has a neat image processing effect where the text takes on the underlying colors with a blurred gradient while still maintaining legibility appearing largely white. In this screenshot you can see the white text features blue colors at the top left and transitions to a purple color on the right due to the underlying vibrant blue and purple blocks. Can you share how this text effect is achieved using Core Image?
1
0
221
Jun ’26
Volume Purchasing vs Group Purchases for IAP
From what I understand, Volume Purchasing is coming this fall and Group Purchases will arrive later this year for subscriptions. What’s the difference between these? Will either support non-consumable in-app purchases? I really don’t want to require recurring payments nor build a paid duplicate version of my app, seems the freemium business model is important to support going forward. Thanks!
1
0
301
Jun ’26
How to show correct title for intents in Spotlight
In my plant watering app, I created a PlantEntity and a WaterPlantIntent that edits the plant to mark it as watered. PlantEntity conforms to AppEntity and IndexedEntity. I also created OpenPlantIntent that conforms to OpenIntent. My AppShortcutsProvider is implemented like so: struct ShortcutsProvider: AppShortcutsProvider { static var appShortcuts: [AppShortcut] { return [ AppShortcut( intent: WaterPlantIntent(), phrases: [ "Water plant in \(.applicationName)", "Water \(\.$plantEntity) in \(.applicationName)" ], shortTitle: "Water Plant", systemImageName: "drop.fill" ) ] } } Now, when I search in Spotlight for a plant name, two results are shown but both are titled the name of the plant. The one in the App Name section just opens the plant in the app but the one in the Top Hit section actually performs the WaterPlantIntent! There's no indication that would occur. I expected it to be titled Water Plant Name so users know what shortcut is being run. Is there a way I can configure my code to show the proper title here?
3
0
195
Jun ’26
Modern drawing classifier recommendations
What modern tools would you recommend to replace a drawing classification machine learning model I built years ago (with Turi Create) to recognize emojis trained on drawings users submit? I tried an image classifier with CreateML but training time is much longer and accuracy is worse. Does Apple have a solution for drawing classification? Is a ML model still the best solution, or any AI advancements good for this use case? Thanks!
2
0
623
Jun ’26
How to add Paste button in UIMenu such that the system "allow app to paste" prompt does not appear
Apps that try to access the contents of the pasteboard cause a system prompt to appear asking the user "AppName" would like to paste from "OtherAppName" Do you want to allow this? Don't Allow Paste Allow Paste This prompt does not appear if you implement a UIPasteControl and the user taps it to signal intent to paste, but this control cannot be placed into a UIMenu. I read this could be achieved with UIAction.Identifiers like .paste or .newFromPasteboard but the prompt still appears with the following code. What's the trick? override func viewDidLoad() { super.viewDidLoad() title = "TestPaste" view.backgroundColor = .systemBackground let imageView = UIImageView() imageView.translatesAutoresizingMaskIntoConstraints = false imageView.contentMode = .scaleAspectFit imageView.clipsToBounds = true view.addSubview(imageView) NSLayoutConstraint.activate([ imageView.topAnchor.constraint(equalTo: view.topAnchor), imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor), imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor), imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor) ]) navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", image: UIImage(systemName: "plus"), menu: UIMenu(children: [ UIAction(identifier: .paste) { _ in imageView.image = UIPasteboard.general.image } ])) }
4
0
895
Apr ’26
macOS 26.4 regression with Mac Catalyst apps using PhotoKit: Photos do not appear when using limited access - Failed to get sandbox extension for url - Image request failed with error PHPhotosErrorDomain Code 3303
I just submitted FB22318443. In Mac Catalyst apps running on macOS 26.4, if you choose to limit the app's access to specific photos (as opposed to granting full access), the photos do not appear in the app. 💀 This issue does not occur on iPadOS. It is a macOS 26.4 regression. It occurs even with apps built using a previous version of the SDK such as 26.2. A sample of the console logs: [RM]: 4-1-1 failed to decode for asset: 9290CC20-B85D-47B5-BDBE-D330FE61773D, error code: 3303, description: Error Domain=PHPhotosErrorDomain Code=3303 "(null)" Failed to get sandbox extension for url: file:///Users/Jordan/Pictures/Photos%20Library.photoslibrary/resources/derivatives/masters/9/9290CC20-B85D-47B5-BDBE-D330FE61773D_4_5005_c.jpeg, error: Error Domain=com.apple.photos.error Code=44001 "sandbox extension not in the cache after requesting them for path: /Users/Jordan/Pictures/Photos Library.photoslibrary/resources/derivatives/masters/9/9290CC20-B85D-47B5-BDBE-D330FE61773D_4_5005_c.jpeg" UserInfo={NSDebugDescription=sandbox extension not in the cache after requesting them for path: /Users/Jordan/Pictures/Photos Library.photoslibrary/resources/derivatives/masters/9/9290CC20-B85D-47B5-BDBE-D330FE61773D_4_5005_c.jpeg} [RM]: 1-1-1 Image request failed with error: Error Domain=PHPhotosErrorDomain Code=3303 "(null)"
0
0
1.1k
Mar ’26
String Catalog stops updating upon changing source code
If you add a new string in your app (for example String(localized: "contact_support_message", defaultValue: "Please contact support")), then later you change that default value and rebuild, the string catalog updates to match as expected. But once that string is translated, changing the default value in code and rebuilding does not update the catalog. You seemingly have to go manually change the default value for English in the catalog to match the code (which marks the translation as Needs Review). Is there a better way? Or is there a way to determine what strings have default values in code that do not match the catalog values to see if any were missed as wording was tweaked over time?
3
0
270
Feb ’26
StoreKit says purchase succeeded but didn't, AppStore.sync() throws error Unable to Complete Request
One user of my app reached out reporting an interesting in-app purchase issue. Has anyone encountered this or have an idea what's going on here? Proceed to purchase the non-consumable IAP in the app downloaded from the App Store iOS shows the price sheet as expected Confirm with the side button iOS shows an alert "You've already purchased this. Would you like to get it again for free?" Tap OK iOS shows an alert "You're all set. Your purchase was successful." Tap OK The app's content remains locked Tap Restore Purchases iOS shows an alert to sign (with the same account shown in step 2) Input the password and tap OK iOS shows an alert "Unable to Complete Request" (which is the error.localizedDescription thrown from AppStore.sync())
Replies
0
Boosts
0
Views
12
Activity
39m
Display HDR images for PhotoKit assets
In my app I get a UIImage for a PHAsset via PHImageManager.requestImage(for:targetSize:contentMode:options:resultHandler:). I directly display that image in a UIImageView that has preferredImageDynamicRange set to .high. The problem is I do not see the high dynamic range. I see the HDRDemo23 sample code uses PhotosPicker to get a UIImage from Data through UIImageReader whose config enables prefersHighDynamicRange. Is there a way to support HDR when using the Photos APIs to request display images? And is there support for PHLivePhoto displayed in PHLivePhotoView retrieved via PHImageManager.requestLivePhoto?
Replies
5
Boosts
1
Views
2.1k
Activity
2w
How to utilize PHLivePhotoRequestOptions.preferHDR to support HDR in Live Photos?
The iOS 27 SDK newly exposed PHLivePhotoRequestOptions.preferHDR. Its documentation states: For best results, only enable this when you intend to display an HDR experience in PHLivePhotoView — for example, when the view’s preferredImageDynamicRange is greater than standard (SDR). PHLivePhotoView has no preferredImageDynamicRange property. How is this API to be used then?
Replies
0
Boosts
0
Views
312
Activity
2w
PHAssetResource deprecated originalFilename replaced with filename, but PHAssetExtendedMetadata only has originalFilename in iOS 27
PHAssetExtendedMetadata has the following API: /// The original file name of this asset. open var originalFilename: String? { get } And PHAssetResource has the following API: @available(iOS, introduced: 9, deprecated: 27, message: "Use filename instead") open var originalFilename: String { get } /// The filename associated with this asset resource (if any) @available(iOS 27, *) open var filename: String? { get } I'm confused why PHAssetExtendedMetadata (iOS 27+) has originalFilename while PHAssetResource originalFilename was deprecated and replaced with filename. I would have expected PHAssetExtendedMetadata's property be named filename to match. Are all 3 of these all the exact same name or can there be differences?
Replies
1
Boosts
0
Views
364
Activity
3w
Clarification on BGTaskScheduler.submitTaskRequest(_:completionHandler:) main-thread warning
I’m looking at the new BGTaskScheduler.submitTaskRequest(_:completionHandler:) API on iOS 27 that replaces the now deprecated submit(_:).* The documentation says: This method asynchronously submits the task request and invokes the completion handler with any errors that occur during submission. It also says: The completion handler may be invoked on a arbitrary queue after an arbitrary amount of delay. Do not call this method from the main thread or performance-critical contexts. I’m confused when it says “Do not call this method from the main thread.” Since the method asynchronously submits the request and reports errors later through the completion handler, I initially read this as a warning not to wait for the completion handler to be called assuming it returns quickly. But it specifically says not to call the method from the main thread, which suggests the initial call itself may perform blocking expensive work before returning (although this is confusingly stated in the same block describing the completion handler behavior). Is the intended usage to create/configure the request on the main thread, then dispatch only submitTaskRequest to a background queue, or is calling that on the main thread actually okay just like the submit(_:) API it replaced? My current code in a synchronous function running on the main thread: BGTaskScheduler.shared.register(forTaskWithIdentifier: id, using: .main) { @Sendable registeredTask in // The background continued processing task has started, use it to update progress... } let request = BGContinuedProcessingTaskRequest(identifier: id, title: title, subtitle: subtitle) request.strategy = .fail // Start the task immediately and fail if it cannot if BGTaskScheduler.supportedResources.contains(.gpu) { request.requiredResources = .gpu } do { try BGTaskScheduler.shared.submit(request) // FIXME: How to migrate to the new API? } catch { // No worries, user will just have to keep the app open until the task completes print("BGTaskScheduler request failed: \(error.localizedDescription)") } *I assume this change was made to address issues like FB21052216 (https://developer.apple.com/forums/thread/807370)
Replies
3
Boosts
0
Views
590
Activity
Aug ’26
BGContinuedProcessingTask register block not called, submit does not throw an error
I implemented BGContinuedProcessingTask in my app and it seems to be working well for everyone except one user (so far) who has reached out to report nothing happens when they tap the Start Processing button. They have an iPhone 12 Pro Max running iOS 26.1. Restarting iPhone does not fix it. When they turn off the background processing feature in the app, it works. In that case my code directly calls the function to start processing instead of waiting for it to be invoked in the register block (or submit catch block). Is this a bug that's possible to occur, maybe device specific? Or have I done something wrong in the implementation? func startProcessingTapped(_ sender: UIButton) { if isBackgroundProcessingEnabled { startBackgroundContinuedProcessing() } else { startProcessing(backgroundTask: nil) } } func startBackgroundContinuedProcessing() { BGTaskScheduler.shared.register(forTaskWithIdentifier: taskIdentifier, using: .main) { @Sendable [weak self] task in guard self != nil else { return } startProcessing(backgroundTask: task as? BGContinuedProcessingTask) } let request = BGContinuedProcessingTaskRequest(identifier: taskIdentifier, title: title, subtitle: subtitle) request.strategy = .fail if BGTaskScheduler.supportedResources.contains(.gpu) { request.requiredResources = .gpu } do { try BGTaskScheduler.shared.submit(request) } catch { startProcessing(backgroundTask: nil) } } func startProcessing(backgroundTask: BGContinuedProcessingTask?) { // FIXME: Never called for this user when isBackgroundProcessingEnabled is true }
Replies
11
Boosts
0
Views
1.4k
Activity
Aug ’26
How to get Ask Siri context menu button
In my UIKit apps, collection view cells that have a context menu gain an Ask Siri item in iOS 27 without me doing anything. In my SwiftUI app I have a LazyVGrid containing a ForEach of CellView which is a Button that has a contextMenu, yet there’s no Ask Siri button in the context menu. What determines whether or not it will be added? What do I need to do to allow the system to add it?
Replies
2
Boosts
0
Views
516
Activity
Jun ’26
Core Image processing for a photo overlaid text effect
The iPhone Lock Screen lets you display a small time and date at the top of the display that has a neat image processing effect where the text takes on the underlying colors with a blurred gradient while still maintaining legibility appearing largely white. In this screenshot you can see the white text features blue colors at the top left and transitions to a purple color on the right due to the underlying vibrant blue and purple blocks. Can you share how this text effect is achieved using Core Image?
Replies
1
Boosts
0
Views
221
Activity
Jun ’26
Volume Purchasing vs Group Purchases for IAP
From what I understand, Volume Purchasing is coming this fall and Group Purchases will arrive later this year for subscriptions. What’s the difference between these? Will either support non-consumable in-app purchases? I really don’t want to require recurring payments nor build a paid duplicate version of my app, seems the freemium business model is important to support going forward. Thanks!
Replies
1
Boosts
0
Views
301
Activity
Jun ’26
How to show correct title for intents in Spotlight
In my plant watering app, I created a PlantEntity and a WaterPlantIntent that edits the plant to mark it as watered. PlantEntity conforms to AppEntity and IndexedEntity. I also created OpenPlantIntent that conforms to OpenIntent. My AppShortcutsProvider is implemented like so: struct ShortcutsProvider: AppShortcutsProvider { static var appShortcuts: [AppShortcut] { return [ AppShortcut( intent: WaterPlantIntent(), phrases: [ "Water plant in \(.applicationName)", "Water \(\.$plantEntity) in \(.applicationName)" ], shortTitle: "Water Plant", systemImageName: "drop.fill" ) ] } } Now, when I search in Spotlight for a plant name, two results are shown but both are titled the name of the plant. The one in the App Name section just opens the plant in the app but the one in the Top Hit section actually performs the WaterPlantIntent! There's no indication that would occur. I expected it to be titled Water Plant Name so users know what shortcut is being run. Is there a way I can configure my code to show the proper title here?
Replies
3
Boosts
0
Views
195
Activity
Jun ’26
Modern drawing classifier recommendations
What modern tools would you recommend to replace a drawing classification machine learning model I built years ago (with Turi Create) to recognize emojis trained on drawings users submit? I tried an image classifier with CreateML but training time is much longer and accuracy is worse. Does Apple have a solution for drawing classification? Is a ML model still the best solution, or any AI advancements good for this use case? Thanks!
Replies
2
Boosts
0
Views
623
Activity
Jun ’26
Prominent glass button in SwiftUI incorrect text style
How do you create a prominent glass button in SwiftUI? In UIKit it’s let button = UIButton(configuration: .prominentGlass()) button.configuration?.title = "Agree" I tried Button("Agree") {} .buttonStyle(.glassProminent) but the title text is white not glassified 🤨
Replies
0
Boosts
0
Views
238
Activity
May ’26
How to add Paste button in UIMenu such that the system "allow app to paste" prompt does not appear
Apps that try to access the contents of the pasteboard cause a system prompt to appear asking the user "AppName" would like to paste from "OtherAppName" Do you want to allow this? Don't Allow Paste Allow Paste This prompt does not appear if you implement a UIPasteControl and the user taps it to signal intent to paste, but this control cannot be placed into a UIMenu. I read this could be achieved with UIAction.Identifiers like .paste or .newFromPasteboard but the prompt still appears with the following code. What's the trick? override func viewDidLoad() { super.viewDidLoad() title = "TestPaste" view.backgroundColor = .systemBackground let imageView = UIImageView() imageView.translatesAutoresizingMaskIntoConstraints = false imageView.contentMode = .scaleAspectFit imageView.clipsToBounds = true view.addSubview(imageView) NSLayoutConstraint.activate([ imageView.topAnchor.constraint(equalTo: view.topAnchor), imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor), imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor), imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor) ]) navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", image: UIImage(systemName: "plus"), menu: UIMenu(children: [ UIAction(identifier: .paste) { _ in imageView.image = UIPasteboard.general.image } ])) }
Replies
4
Boosts
0
Views
895
Activity
Apr ’26
macOS 26.4 regression with Mac Catalyst apps using PhotoKit: Photos do not appear when using limited access - Failed to get sandbox extension for url - Image request failed with error PHPhotosErrorDomain Code 3303
I just submitted FB22318443. In Mac Catalyst apps running on macOS 26.4, if you choose to limit the app's access to specific photos (as opposed to granting full access), the photos do not appear in the app. 💀 This issue does not occur on iPadOS. It is a macOS 26.4 regression. It occurs even with apps built using a previous version of the SDK such as 26.2. A sample of the console logs: [RM]: 4-1-1 failed to decode for asset: 9290CC20-B85D-47B5-BDBE-D330FE61773D, error code: 3303, description: Error Domain=PHPhotosErrorDomain Code=3303 "(null)" Failed to get sandbox extension for url: file:///Users/Jordan/Pictures/Photos%20Library.photoslibrary/resources/derivatives/masters/9/9290CC20-B85D-47B5-BDBE-D330FE61773D_4_5005_c.jpeg, error: Error Domain=com.apple.photos.error Code=44001 "sandbox extension not in the cache after requesting them for path: /Users/Jordan/Pictures/Photos Library.photoslibrary/resources/derivatives/masters/9/9290CC20-B85D-47B5-BDBE-D330FE61773D_4_5005_c.jpeg" UserInfo={NSDebugDescription=sandbox extension not in the cache after requesting them for path: /Users/Jordan/Pictures/Photos Library.photoslibrary/resources/derivatives/masters/9/9290CC20-B85D-47B5-BDBE-D330FE61773D_4_5005_c.jpeg} [RM]: 1-1-1 Image request failed with error: Error Domain=PHPhotosErrorDomain Code=3303 "(null)"
Replies
0
Boosts
0
Views
1.1k
Activity
Mar ’26
String Catalog stops updating upon changing source code
If you add a new string in your app (for example String(localized: "contact_support_message", defaultValue: "Please contact support")), then later you change that default value and rebuild, the string catalog updates to match as expected. But once that string is translated, changing the default value in code and rebuilding does not update the catalog. You seemingly have to go manually change the default value for English in the catalog to match the code (which marks the translation as Needs Review). Is there a better way? Or is there a way to determine what strings have default values in code that do not match the catalog values to see if any were missed as wording was tweaked over time?
Replies
3
Boosts
0
Views
270
Activity
Feb ’26