From ad570540fd988d52612b5feafd600c471d694842 Mon Sep 17 00:00:00 2001 From: Automattic Release Bot Date: Thu, 7 Aug 2025 23:11:12 -0700 Subject: [PATCH 1/6] Bump version number --- config/Version.Public.xcconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/Version.Public.xcconfig b/config/Version.Public.xcconfig index 198f55ba352..48d463c6ca5 100644 --- a/config/Version.Public.xcconfig +++ b/config/Version.Public.xcconfig @@ -1,4 +1,4 @@ CURRENT_PROJECT_VERSION = $VERSION_LONG MARKETING_VERSION = $VERSION_SHORT -VERSION_LONG = 22.9.0.2 -VERSION_SHORT = 22.9 +VERSION_LONG = 23.0.0.0 +VERSION_SHORT = 23.0 From 4dc3cb3f4c9737ce211628ab51ce63feaa419eae Mon Sep 17 00:00:00 2001 From: Automattic Release Bot Date: Thu, 7 Aug 2025 23:11:13 -0700 Subject: [PATCH 2/6] Update draft release notes for 23.0 --- WooCommerce/Resources/release_notes.txt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/WooCommerce/Resources/release_notes.txt b/WooCommerce/Resources/release_notes.txt index ed56f529f3e..0289b2dc32d 100644 --- a/WooCommerce/Resources/release_notes.txt +++ b/WooCommerce/Resources/release_notes.txt @@ -1 +1,10 @@ -This update enhances Shipping Labels with improved accessibility, smarter address validation, and faster performance. We've also added a dedicated Point of Sale tab for quicker access, and POS orders are now filterable in your order list for better organization. Plus, we've optimized assets to reduce the app's size! +- [*] Increased decimal sensitivity in order creation to mitigate tax rounding issues [https://github.com/woocommerce/woocommerce-ios/pull/15957] +- [*] Fix initialization of authenticator to avoid crashes during login [https://github.com/woocommerce/woocommerce-ios/pull/15953] +- [*] Shipping Labels: Made HS tariff number field required in customs form for EU destinations [https://github.com/woocommerce/woocommerce-ios/pull/15946] +- [*] Order Details: Attempt to improve performance by using a simplified version of product objects. [https://github.com/woocommerce/woocommerce-ios/pull/15959] +- [*] Use simple product objects in Shipping Labels and Blaze flows. [https://github.com/woocommerce/woocommerce-ios/pull/15965] +- [*] Product List: Load list with simplified product objects to improve performance. [https://teamkiwip2.wordpress.com/2025/08/01/hack-week-improving-performance-when-loading-cached-products/] +- [*] Order Details > Edit Shipping/Billing Address: Added map-based address lookup support for iOS 17+. [https://github.com/woocommerce/woocommerce-ios/pull/15964] +- [*] Order Creation: Prevent subscription products to be added to an order [https://github.com/woocommerce/woocommerce-ios/pull/15960] +- [internal] Replace COTS_DEVICE reader model name with TAP_TO_PAY_DEVICE. [https://github.com/woocommerce/woocommerce-ios/pull/15961] +[**] POS: Added a guided setup flow for barcode scanning, and improved the scanning experience with better error handling and support for starting a new order on scan. [https://github.com/woocommerce/woocommerce-ios/pull/15979] \ No newline at end of file From fdbecd40fa17e86847294a39dfb5636397bb8dfe Mon Sep 17 00:00:00 2001 From: Automattic Release Bot Date: Thu, 7 Aug 2025 23:11:13 -0700 Subject: [PATCH 3/6] Release Notes: add new section for next version (23.1) --- RELEASE-NOTES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 029583e133c..ede4734832c 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,6 +1,10 @@ *** PLEASE FOLLOW THIS FORMAT: [] [] *** Use [*****] to indicate smoke tests of all critical flows should be run on the final IPA before release (e.g. major library or OS update). +23.1 +----- + + 23.0 ----- - [*] Increased decimal sensitivity in order creation to mitigate tax rounding issues [https://github.com/woocommerce/woocommerce-ios/pull/15957] From 4a9cf2318c407dd10ba5842abdb12301321ca737 Mon Sep 17 00:00:00 2001 From: Jaclyn Chen Date: Fri, 8 Aug 2025 14:24:09 +0800 Subject: [PATCH 4/6] Update release notes for 23.0. --- CHANGELOG.md | 3 +++ WooCommerce/Resources/release_notes.txt | 11 +---------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c79d1dc341..65671fa2087 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ +## 23.0 +Faster performance and smoother experience! This update brings improved product loading, better tax calculations, and enhanced address lookup with map support. We've added guided barcode scanning for POS users and strengthened shipping requirements for EU destinations. Plus, we've fixed stability issues for a more reliable experience. + ## 22.9 This update enhances Shipping Labels with improved accessibility, smarter address validation, and faster performance. We’ve also made the dedicated Point of Sale tab more widely available for quicker access, and POS orders are now filterable in your order list for better organization. Plus, we've optimized assets to reduce the app’s size. diff --git a/WooCommerce/Resources/release_notes.txt b/WooCommerce/Resources/release_notes.txt index 0289b2dc32d..fd40b03d802 100644 --- a/WooCommerce/Resources/release_notes.txt +++ b/WooCommerce/Resources/release_notes.txt @@ -1,10 +1 @@ -- [*] Increased decimal sensitivity in order creation to mitigate tax rounding issues [https://github.com/woocommerce/woocommerce-ios/pull/15957] -- [*] Fix initialization of authenticator to avoid crashes during login [https://github.com/woocommerce/woocommerce-ios/pull/15953] -- [*] Shipping Labels: Made HS tariff number field required in customs form for EU destinations [https://github.com/woocommerce/woocommerce-ios/pull/15946] -- [*] Order Details: Attempt to improve performance by using a simplified version of product objects. [https://github.com/woocommerce/woocommerce-ios/pull/15959] -- [*] Use simple product objects in Shipping Labels and Blaze flows. [https://github.com/woocommerce/woocommerce-ios/pull/15965] -- [*] Product List: Load list with simplified product objects to improve performance. [https://teamkiwip2.wordpress.com/2025/08/01/hack-week-improving-performance-when-loading-cached-products/] -- [*] Order Details > Edit Shipping/Billing Address: Added map-based address lookup support for iOS 17+. [https://github.com/woocommerce/woocommerce-ios/pull/15964] -- [*] Order Creation: Prevent subscription products to be added to an order [https://github.com/woocommerce/woocommerce-ios/pull/15960] -- [internal] Replace COTS_DEVICE reader model name with TAP_TO_PAY_DEVICE. [https://github.com/woocommerce/woocommerce-ios/pull/15961] -[**] POS: Added a guided setup flow for barcode scanning, and improved the scanning experience with better error handling and support for starting a new order on scan. [https://github.com/woocommerce/woocommerce-ios/pull/15979] \ No newline at end of file +Faster performance and smoother experience! This update brings improved product loading, better tax calculations, and enhanced address lookup with map support. We've added guided barcode scanning for POS users and strengthened shipping requirements for EU destinations. Plus, we've fixed stability issues for a more reliable experience. \ No newline at end of file From d58751b05642667ed8272b4df70373a1c5a77405 Mon Sep 17 00:00:00 2001 From: Automattic Release Bot Date: Thu, 7 Aug 2025 23:44:11 -0700 Subject: [PATCH 5/6] Update metadata strings --- WooCommerce/Resources/AppStoreStrings.pot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WooCommerce/Resources/AppStoreStrings.pot b/WooCommerce/Resources/AppStoreStrings.pot index 99d4459ffcd..993042e4ed0 100644 --- a/WooCommerce/Resources/AppStoreStrings.pot +++ b/WooCommerce/Resources/AppStoreStrings.pot @@ -61,9 +61,9 @@ msgctxt "app_store_promo_text" msgid "Run your store from anywhere" msgstr "" -msgctxt "v22.9-whats-new" +msgctxt "v23.0-whats-new" msgid "" -"This update enhances Shipping Labels with improved accessibility, smarter address validation, and faster performance. We've also added a dedicated Point of Sale tab for quicker access, and POS orders are now filterable in your order list for better organization. Plus, we've optimized assets to reduce the app's size!\n" +"Faster performance and smoother experience! This update brings improved product loading, better tax calculations, and enhanced address lookup with map support. We've added guided barcode scanning for POS users and strengthened shipping requirements for EU destinations. Plus, we've fixed stability issues for a more reliable experience.\n" msgstr "" #. translators: This is a promo message that will be attached on top of a screenshot in the App Store. From 57649f3fc5360e0640a3afe47d906ab421ebd5c1 Mon Sep 17 00:00:00 2001 From: Automattic Release Bot Date: Thu, 7 Aug 2025 23:44:14 -0700 Subject: [PATCH 6/6] Freeze strings for localization --- .../Resources/en.lproj/Localizable.strings | 114 ++++++++++++++++-- 1 file changed, 107 insertions(+), 7 deletions(-) diff --git a/WooCommerce/Resources/en.lproj/Localizable.strings b/WooCommerce/Resources/en.lproj/Localizable.strings index b8689fe0c5b..cd062bb99be 100644 --- a/WooCommerce/Resources/en.lproj/Localizable.strings +++ b/WooCommerce/Resources/en.lproj/Localizable.strings @@ -44,8 +44,7 @@ which should be translated separately and considered part of this sentence. */ /* The default name for a duplicated product, with %1$@ being the original name. Reads like: Ramen Copy */ "%1$@ Copy" = "%1$@ Copy"; -/* Label about product's inventory stock status shown during order creation - Label about product's inventory stock status shown on Products tab */ +/* Label about product's inventory stock status shown during order creation */ "%1$@ in stock" = "%1$@ in stock"; /* Title for the error screen when a card present payments plugin is in test mode on a live site. %1$@ is a placeholder for the plugin name. */ @@ -568,6 +567,21 @@ which should be translated separately and considered part of this sentence. */ /* Shipping Label Suggested address entered placeholder */ "Address Suggested" = "Address Suggested"; +/* Text for the close button in the Edit Address Form. */ +"addressMapPicker.button.close" = "Close"; + +/* Button to confirm selected address from map. */ +"addressMapPicker.button.useThisAddress" = "Use This Address"; + +/* Hint shown when address search returns no results, suggesting to omit unit details and add them to address line 2. */ +"addressMapPicker.noResults.hint" = "Try searching without apartment, suite, or floor numbers. You can add those details to Address Line 2 later."; + +/* Title shown when address search returns no results. */ +"addressMapPicker.noResults.title" = "No Results Found"; + +/* Placeholder text for address search bar. */ +"addressMapPicker.search.placeholder" = "Search for an address"; + /* Accessibility hint for selecting a product in the Add Product screen */ "Adds product to order." = "Adds product to order."; @@ -3982,6 +3996,9 @@ which should be translated separately and considered part of this sentence. */ /* The string to show on order taxes when they are calculated based on the shop base address */ "editableOrderViewModel.taxBasedOnSetting.shopBaseAddress" = "Calculated on shop base address."; +/* Button to open map address picker. */ +"editOrderAddressForm.pickOnMap" = "Find on Map"; + /* Title for the Edit Billing Address Form */ "editOrderAddressFormViewModel.billingTitle" = "Billing Address"; @@ -5129,8 +5146,7 @@ which should be translated separately and considered part of this sentence. */ /* Accessibility label for an indeterminate loading indicator */ "In progress" = "In progress"; -/* Display label for the bundle item's inventory stock status - Label about product's inventory stock status shown on Products tab */ +/* Display label for the bundle item's inventory stock status */ "In stock" = "In stock"; /* Long descriptions of alert informing users of what email they can use to sign in.Presented when users attempt to log in with an email that does not match a WP.com account */ @@ -7592,8 +7608,8 @@ which should be translated separately and considered part of this sentence. */ /* Error message shown when scan is too short. */ "pointOfSale.barcodeScan.error.barcodeTooShort" = "Barcode too short"; -/* Error message shown when scan is incomplete. */ -"pointOfSale.barcodeScan.error.incompleteScan" = "Partial barcode scan"; +/* Error message shown when scanner times out without sending end-of-line character. */ +"pointOfSale.barcodeScan.error.incompleteScan.2" = "The scanner did not send an end-of-line character"; /* Error message shown when there is an unknown networking error while scanning a barcode. */ "pointOfSale.barcodeScan.error.network" = "Network request failed"; @@ -7961,6 +7977,9 @@ which should be translated separately and considered part of this sentence. */ /* The title of the menu button to view barcode scanner documentation, shown in a popover menu. */ "pointOfSale.floatingButtons.barcodeScanning.button.title" = "Barcode scanning"; +/* The title of the menu button to start a barcode scanner setup flow. */ +"pointOfSale.floatingButtons.barcodeScanningSetup.button.title" = "Initial barcode scanner setup"; + /* The title of the floating button to indicate that the reader is not ready for another connection, usually because a connection has just been cancelled */ "pointOfSale.floatingButtons.cancellingConnection.pleaseWait.title" = "Please wait"; @@ -8040,7 +8059,7 @@ which should be translated separately and considered part of this sentence. */ "pointOfSaleDashboard.payments.onboarding.cancel" = "Cancel"; /* Button to dismiss the support form from the POS dashboard. */ -"pointOfSaleDashboard.support.done" = "Done"; +"pointOfSaleDashboard.support.cancel" = "Cancel"; /* Country option for a site address. */ "Poland" = "Poland"; @@ -8124,15 +8143,33 @@ which should be translated separately and considered part of this sentence. */ /* Title for the back button in barcode scanner setup navigation */ "pos.barcodeScannerSetup.back.button.title" = "Back"; +/* Accessibility label of a barcode or QR code image that needs to be scanned by a barcode scanner. */ +"pos.barcodeScannerSetup.barcodeImage.accesibilityLabel" = "Image of a code to be scanned by a barcode scanner."; + +/* Message shown when scanner setup is complete */ +"pos.barcodeScannerSetup.complete.instruction.2" = "You are ready to start scanning products. Next time you need to connect your scanner, just turn it on and it will reconnect automatically."; + +/* Title shown when scanner setup is successfully completed */ +"pos.barcodeScannerSetup.complete.title" = "Scanner set up!"; + /* Title for the done button in barcode scanner setup navigation */ "pos.barcodeScannerSetup.done.button.title" = "Done"; /* Title for the back button in barcode scanner setup error step */ "pos.barcodeScannerSetup.error.back.button.title" = "Back"; +/* Instruction shown when scanner setup encounters an error, suggesting troubleshooting steps */ +"pos.barcodeScannerSetup.error.instruction" = "Please check the scanner's manual and reset it to factory settings, then retry the setup flow."; + /* Title for the retry button in barcode scanner setup error step */ "pos.barcodeScannerSetup.error.retry.button.title" = "Retry"; +/* Title shown when there's an error during scanner setup */ +"pos.barcodeScannerSetup.error.title" = "Scanning issue found"; + +/* Instruction for scanning the Bluetooth HID barcode during scanner setup */ +"pos.barcodeScannerSetup.hidSetup.instruction" = "Use your barcode scanner to scan the code below to enable Bluetooth HID mode."; + /* Title for Netum 1228BC scanner option in barcode scanner setup */ "pos.barcodeScannerSetup.netum1228BC.title" = "Netum 1228BC"; @@ -8142,12 +8179,66 @@ which should be translated separately and considered part of this sentence. */ /* Title for other scanner option in barcode scanner setup */ "pos.barcodeScannerSetup.other.title" = "Other"; +/* Instruction for pairing scanner via device settings with feedback indicators. %1$@ is the scanner model name. */ +"pos.barcodeScannerSetup.pairing.instruction.format" = "Enable Bluetooth and select your %1$@ scanner in the iOS Bluetooth settings. The scanner will beep and show a solid LED when paired."; + +/* Button title to open device Settings for scanner pairing */ +"pos.barcodeScannerSetup.pairing.settingsButton.title" = "Go to your device settings"; + +/* Title for the scanner pairing step */ +"pos.barcodeScannerSetup.pairing.title" = "Pair your scanner"; + +/* Instruction for scanning the Pair barcode to prepare scanner for pairing */ +"pos.barcodeScannerSetup.pairSetup.instruction" = "Use your barcode scanner to scan the code below to enter pairing mode."; + +/* Title format for a product barcode setup step */ +"pos.barcodeScannerSetup.productBarcodeInfo.title" = "How to set up barcodes on products"; + +/* Button title for accessing product barcode setup information */ +"pos.barcodeScannerSetup.productBarcodeInformation.button.title" = "How to set up barcodes on products"; + +/* Title format for barcode scanner setup step */ +"pos.barcodeScannerSetup.scanner.setup.title.format" = "Scanner setup"; + +/* Title format for barcode scanner setup step */ +"pos.barcodeScannerSetup.scannerInfo.title" = "Scanner setup"; + +/* Display name for Netum 1228BC barcode scanner model */ +"pos.barcodeScannerSetup.scannerType.netum1228BC.name" = "Netum 1228BC"; + +/* Display name for other/unspecified barcode scanner models */ +"pos.barcodeScannerSetup.scannerType.other.name" = "Other scanner"; + +/* Display name for Star BSH-20B barcode scanner model */ +"pos.barcodeScannerSetup.scannerType.starBSH20B.name" = "Star BSH-20B"; + +/* Display name for Tera 1200 2D barcode scanner model */ +"pos.barcodeScannerSetup.scannerType.tera12002D.name" = "Tera 1200 2D"; + +/* Heading for the barcode scanner setup selection screen */ +"pos.barcodeScannerSetup.selection.heading" = "Set up a barcode scanner"; + +/* Instruction message for selecting a barcode scanner model from the list */ +"pos.barcodeScannerSetup.selection.introMessage" = "Select a model from the list:"; + /* Title for Star BSH-20B scanner option in barcode scanner setup */ "pos.barcodeScannerSetup.starBSH20B.title" = "Star BSH-20B"; /* Title for Tera 1200 2D scanner option in barcode scanner setup */ "pos.barcodeScannerSetup.tera12002D.title" = "Tera 1200 2D"; +/* Instruction for testing the scanner by scanning a barcode */ +"pos.barcodeScannerSetup.test.instruction" = "Scan the barcode to test your scanner."; + +/* Instruction shown when scanner test times out, suggesting troubleshooting steps */ +"pos.barcodeScannerSetup.test.timeout.instruction" = "Scan the barcode to test your scanner. If the issue continues, please check Bluetooth settings and try again."; + +/* Title shown when scanner test times out without detecting a scan */ +"pos.barcodeScannerSetup.test.timeout.title" = "No scan data found yet"; + +/* Title for the scanner testing step */ +"pos.barcodeScannerSetup.test.title" = "Test your scanner"; + /* Hint to add products to the Cart when this is empty. */ "pos.cartView.addItemsToCartHint" = "Tap on a product to \n add it to the cart"; @@ -8952,6 +9043,9 @@ which should be translated separately and considered part of this sentence. */ /* Text on the header of the Select Product screen when one product is selected. */ "productSelectorViewModel.selectProductsTitle.singularProductSelectedFormattedText" = "%ld product selected"; +/* Message explaining unsupported subscription products for order creation */ +"productSelectorViewModel.subscriptionProductUnsupportedReason" = "Subscription products are not supported for order creation"; + /* Cancel button in the product downloadables alert */ "productSettings.downloadableProductAlertCancel" = "Cancel"; @@ -10438,6 +10532,12 @@ which should be translated separately and considered part of this sentence. */ /* Accessibility label for strikethrough button on formatting toolbar. */ "Strike Through" = "Strike Through"; +/* Label about product's inventory stock status shown on Products tab Placeholder is the stock quantity. Reads as: '20 in stock'. */ +"string.createStockText.count" = "%1$@ in stock"; + +/* Label about product's inventory stock status shown on Products tab */ +"string.createStockText.inStock" = "In stock"; + /* Subject title on the support form */ "Subject" = "Subject";