Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
<!--
Contains editorialized release notes. Raw release notes should go into `RELEASE-NOTES.txt`.
-->
## 23.8
This update brings smoother POS performance with a new local product catalog for lightning-fast barcode scanning, search, and selection. We’ve also improved login support for sites using captchas, fixed push notification issues, and ensured product and app stability across the board.

## 23.7
This update brings Tap to Pay on iPhone to UK stores using Stripe, and automatic SSO sign-ins for web admin tasks. We made card payment onboarding error tips clearer, and fixed an intermittent bug with adding variations to an order. Lastly, iPad users can share quick feedback about Point of Sale.

Expand Down
4 changes: 4 additions & 0 deletions RELEASE-NOTES.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
*** PLEASE FOLLOW THIS FORMAT: [<priority indicator, more stars = higher priority>] <description> [<PR URL>]
*** 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.9
-----


23.8
-----
- [*] Better support site credential login for sites with captcha plugins [https://github.com/woocommerce/woocommerce-ios/pull/16372]
Expand Down
4 changes: 2 additions & 2 deletions WooCommerce/Resources/AppStoreStrings.pot
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ msgctxt "app_store_promo_text"
msgid "Run your store from anywhere"
msgstr ""

msgctxt "v23.7-whats-new"
msgctxt "v23.8-whats-new"
msgid ""
"This update brings smooth UK Tap to Pay via Stripe, clearer card onboarding error tips, and automatic SSO sign-ins for key admin tasks. Order creation now picks the right variations, and eligible merchants can share quick POS feedback.\n"
"This update brings smoother POS performance with a new local product catalog for lightning-fast barcode scanning, search, and selection. We’ve also improved login support for sites using captchas, fixed push notification issues, and ensured product and app stability across the board.\n"
msgstr ""

#. translators: This is a promo message that will be attached on top of a screenshot in the App Store.
Expand Down
121 changes: 80 additions & 41 deletions WooCommerce/Resources/en.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1869,6 +1869,9 @@ which should be translated separately and considered part of this sentence. */
/* Title of the booking customer selector view */
"bookingCustomerSelectorView.title" = "Customer";

/* Title of the Clear button in the date time picker for booking filter */
"bookingDateTimeFilterView.clear" = "Clear";

/* Title of the Date row in the date time picker for booking filter */
"bookingDateTimeFilterView.date" = "Date";

Expand Down Expand Up @@ -1917,6 +1920,9 @@ which should be translated separately and considered part of this sentence. */
/* Add a booking note section in booking details view. */
"BookingDetailsView.bookingNote.addNoteRow.title" = "Add note";

/* Content of error presented when updating the not of a Booking fails. It reads: Unable to update note of Booking #{Booking number}. Parameters: %1$d - Booking number */
"BookingDetailsView.bookingNote.failureMessage." = "Unable to update note of Booking #%1$d.";

/* Footer text for the `Booking note` section in the booking details screen. */
"BookingDetailsView.bookingNote.footerText" = "This is a private note. It'll not be shared with the customer.";

Expand Down Expand Up @@ -1956,6 +1962,9 @@ which should be translated separately and considered part of this sentence. */
/* Header title for the 'Customer' section in the booking details screen. */
"BookingDetailsView.customer.headerTitle" = "Customer";

/* Customer note row title in customer section in booking details view. */
"BookingDetailsView.customer.note.title" = "Note";

/* 'Status' row title in attendance section in booking details view. */
"BookingDetailsView.customer.status.title" = "Status";

Expand Down Expand Up @@ -2040,8 +2049,11 @@ which should be translated separately and considered part of this sentence. */
/* Description for booking date range filter with only end date. Placeholder is a date. Reads as: Until October 27, 2025. */
"bookingFiltersViewModel.dateRangeFilter.until" = "Until %1$@";

/* Message displayed when searching bookings by keyword yields no results. */
"bookingList.emptySearchText" = "We couldn't find any bookings with that name — try adjusting your search term to see more results.";
/* Button to clear the filters on booking list */
"bookingList.clearFilters" = "Clear filters";

/* Message displayed when searching bookings by keyword yields no results. Version without a dash. */
"bookingList.emptySearchText.noDash" = "We couldn't find any bookings with that name. Try adjusting your search term to see more results.";

/* Error message when fetching bookings fails */
"bookingList.errorMessage" = "Error fetching bookings";
Expand All @@ -2055,20 +2067,26 @@ which should be translated separately and considered part of this sentence. */
/* Tab title for all bookings */
"bookingListView.all" = "All";

/* Description for the empty state when there's no bookings for the given filter */
"bookingListView.emptyState.filter.description" = "No bookings match your filters. Try adjusting them to see more results.";
/* Description for the empty state when there's no bookings at all so far */
"bookingListView.emptyState.all.description" = "Bookings will appear here once customers start scheduling your services or registering for events.";

/* Title for the empty state when there's no bookings for the given filter */
/* Title for the empty state when there's no bookings at all so far */
"bookingListView.emptyState.all.title" = "No bookings yet";

/* Description for the empty state when there's no bookings for the given filters */
"bookingListView.emptyState.filter.description.i3" = "Try adjusting or clearing your filters to see more results.";

/* Title for the empty state when there's no bookings for the given filters */
"bookingListView.emptyState.filter.title" = "No bookings found";

/* Description for the empty state when no bookings for today is found */
"bookingListView.emptyState.today.description" = "You don't have any appointments or events scheduled for today.";
"bookingListView.emptyState.today.description.i3" = "Any bookings scheduled for today will appear here.";

/* Title for the empty state when no bookings for today is found */
"bookingListView.emptyState.today.title" = "No bookings today";

/* Description for the empty state when there's no upcoming bookings */
"bookingListView.emptyState.upcoming.description" = "You don't have any future appointments or events scheduled yet.";
"bookingListView.emptyState.upcoming.description.i3" = "New bookings will appear here as customers schedule your services or register for events.";

/* Title for the empty state when there's no bookings for today */
"bookingListView.emptyState.upcoming.title" = "No upcoming bookings";
Expand All @@ -2094,18 +2112,6 @@ which should be translated separately and considered part of this sentence. */
/* Title of the booking list view */
"bookingListView.view.title" = "Bookings";

/* Status of a paid booking */
"bookingPaymentStatus.title.paid" = "Paid";

/* Status of a refunded booking */
"bookingPaymentStatus.title.refunded" = "Refunded";

/* Status of a booking with unexpected payment status */
"bookingPaymentStatus.title.unknown" = "Unknown";

/* Status of an unpaid booking */
"bookingPaymentStatus.title.unpaid" = "Unpaid";

/* Displayed name on the booking list when no customer is associated with a booking. */
"bookings.guest" = "Guest";

Expand Down Expand Up @@ -7653,6 +7659,33 @@ which should be translated separately and considered part of this sentence. */
/* Button title to retry synchronizing order and calculating order totals */
"pointOfSale.orderSync.error.tryAgain" = "Try again";

/* Button to return to order editing when products are no longer available */
"pointOfSale.orderSync.missingProductsError.editOrder" = "Edit order";

/* Button title to remove a single unavailable product and retry creating the order */
"pointOfSale.orderSync.missingProductsError.removeProductSingular" = "Remove product";

/* Button title to remove multiple unavailable products and retry creating the order */
"pointOfSale.orderSync.missingProductsError.removeProductsPlural" = "Remove products";

/* Subtitle of the error when we can't identify which specific product is no longer available. */
"pointOfSale.orderSync.missingProductsError.subtitleGenericProduct" = "A product in the cart is no longer available.";

/* Subtitle of the error when multiple products are no longer available */
"pointOfSale.orderSync.missingProductsError.subtitlePlural" = "Some products in your cart are no longer available.";

/* Subtitle of the error when a single product is no longer available. Placeholder is the product name. */
"pointOfSale.orderSync.missingProductsError.subtitleSingular" = "%@ is no longer available.";

/* Title of the error when multiple products in the cart are no longer available */
"pointOfSale.orderSync.missingProductsError.titlePlural" = "Products no longer available";

/* Title of the error when a single product in the cart is no longer available */
"pointOfSale.orderSync.missingProductsError.titleSingular" = "Product no longer available";

/* Generic product name used when we can't identify which specific product is unavailable */
"pointOfSale.orderSync.missingProductsError.unknownProductName" = "One or more products";

/* Message shown to users when payment is made. %1$@ is a placeholder for the order total, e.g $10.50. Please include %1$@ in your formatted string */
"pointOfSale.paymentSuccessful.message.card.1" = "A card payment of %1$@ was successfully made.";

Expand Down Expand Up @@ -7839,7 +7872,7 @@ which should be translated separately and considered part of this sentence. */
"pointOfSaleSettingsView.sidebarNavigationLocalCatalogSubtitle" = "Manage catalog settings";

/* Title of the Local catalog section within Point of Sale settings. */
"pointOfSaleSettingsView.sidebarNavigationLocalCatalogTitle" = "Catalog";
"pointOfSaleSettingsView.sidebarNavigationLocalCatalogTitle.2" = "Product catalog";

/* Description of the settings to be found within the Store section. */
"pointOfSaleSettingsView.sidebarNavigationStoreSubtitle" = "Store configuration and settings";
Expand Down Expand Up @@ -8033,6 +8066,9 @@ which should be translated separately and considered part of this sentence. */
/* Title for the 'Clear cart' confirmation button to remove all products from the Cart. */
"pos.cartView.clearButtonTitle.1" = "Clear cart";

/* Title appearing in a modal when there's an error refreshing the catalog. */
"pos.catalog.refreshFailedTitle" = "Unable to refresh catalog";

/* Title shown on a toast view that appears when there's no internet connection */
"pos.connectivity.title" = "No internet connection";

Expand Down Expand Up @@ -8268,7 +8304,7 @@ which should be translated separately and considered part of this sentence. */
"pos.orderListView.emptyOrdersSearchHint" = "Try adjusting your search term.";

/* Subtitle appearing when order search returns no results. */
"pos.orderListView.emptyOrdersSearchSubtitle" = "We couldn't find any orders matching your search.";
"pos.orderListView.emptyOrdersSearchSubtitle.1" = "We couldn't find any orders with that name.";

/* Title appearing when order search returns no results. */
"pos.orderListView.emptyOrdersSearchTitle" = "No orders found";
Expand Down Expand Up @@ -8304,7 +8340,7 @@ which should be translated separately and considered part of this sentence. */
"pos.parentProductCard.optionsAvailable" = "Options available";

/* Text appearing on the coupons list screen as subtitle when there's no coupons found. */
"pos.pointOfSaleItemListEmptyView.emptyCouponSearchSubtitle.2" = "We couldn’t find any coupons with that name — try adjusting your search term.";
"pos.pointOfSaleItemListEmptyView.emptyCouponSearchSubtitle.3" = "We couldn’t find any coupons with that name. Try adjusting your search term.";

/* Text appearing on the coupons list screen as subtitle when there's no coupons found. */
"pos.pointOfSaleItemListEmptyView.emptyCouponsSubtitle.2" = "Coupons can be an effective way to drive business. Would you like to create one?";
Expand All @@ -8322,7 +8358,7 @@ which should be translated separately and considered part of this sentence. */
"pos.pointOfSaleItemListEmptyView.emptyProductsSearchHint" = "Variation names can't be searched, so use the parent product name.";

/* Subtitle text suggesting to modify search terms when no products are found in the POS product search. */
"pos.pointOfSaleItemListEmptyView.emptyProductsSearchSubtitle.2" = "We couldn't find any matching products — try adjusting your search term.";
"pos.pointOfSaleItemListEmptyView.emptyProductsSearchSubtitle.3" = "We couldn't find any matching products. Try adjusting your search term.";

/* Text appearing on screen when a POS product search returns no results. */
"pos.pointOfSaleItemListEmptyView.emptyProductsSearchTitle.2" = "No products found";
Expand Down Expand Up @@ -8402,38 +8438,41 @@ which should be translated separately and considered part of this sentence. */
/* An error shown when the Point of Sale is used in iOS split view, but with not enough horizontal space. */
"pos.unsupportedWidth.title" = "Point of Sale is not supported in this screen width.";

/* Label for allow full sync on cellular data toggle in Point of Sale settings. */
"posSettingsLocalCatalogDetailView.allowFullSyncOnCellular.1" = "Allow full update on cellular data";
/* Label for allow sync on cellular data toggle in Point of Sale settings. */
"posSettingsLocalCatalogDetailView.allowSyncOnCellular.2" = "Allow sync using cellular data";

/* Label for catalog size field in Point of Sale settings. */
"posSettingsLocalCatalogDetailView.catalogSize" = "Catalog size";
/* Button text for closing an error after a refresh fails */
"posSettingsLocalCatalogDetailView.catalogRefresh.error.cancelButton.title" = "Cancel";

/* Button text for retrying a refresh after it fails */
"posSettingsLocalCatalogDetailView.catalogRefresh.error.retryButton.title" = "Retry";

/* Section title for catalog status in Point of Sale settings. */
"posSettingsLocalCatalogDetailView.catalogStatus" = "Catalog Status";
/* Label for catalog size field in Point of Sale settings. */
"posSettingsLocalCatalogDetailView.catalogSize.1" = "Size";

/* Label for last full sync field in Point of Sale settings. */
"posSettingsLocalCatalogDetailView.lastFullSync.1" = "Last full update";
"posSettingsLocalCatalogDetailView.lastFullSync.2" = "Last full sync";

/* Label for last incremental update field in Point of Sale settings. */
"posSettingsLocalCatalogDetailView.lastIncrementalSync" = "Last update";
/* Label for last incremental sync field in Point of Sale settings. */
"posSettingsLocalCatalogDetailView.lastIncrementalSync.1" = "Last incremental sync";

/* Section title for managing data usage in Point of Sale settings. */
"posSettingsLocalCatalogDetailView.managingDataUsage.1" = "Managing Data Usage";
"posSettingsLocalCatalogDetailView.managingDataUsage.2" = "Cellular data";

/* Section title for manual catalog update in Point of Sale settings. */
"posSettingsLocalCatalogDetailView.manualCatalogUpdate" = "Manual Catalog Update";

/* Info text explaining when to use manual catalog update. */
"posSettingsLocalCatalogDetailView.manualUpdateInfo" = "Use this refresh only when something seems off - POS keeps data current automatically.";
"posSettingsLocalCatalogDetailView.manualCatalogUpdate.1" = "Catalog update";

/* Button text for refreshing the catalog manually. */
"posSettingsLocalCatalogDetailView.refreshCatalog" = "Refresh catalog";
/* Info text explaining the usage of the manual catalog update button. */
"posSettingsLocalCatalogDetailView.manualUpdateInfo.1" = "Update the catalog manually";

/* Navigation title for the local catalog details in POS settings. */
"posSettingsLocalCatalogDetailView.title" = "Catalog Settings";
"posSettingsLocalCatalogDetailView.title.1" = "Product catalog";

/* Button text for updating the catalog manually. */
"posSettingsLocalCatalogDetailView.updateCatalog" = "Update catalog";

/* Format string for catalog size showing product count and variation count. %1$d will be replaced by the product count, and %2$ld will be replaced by the variation count. */
"posSettingsLocalCatalogViewModel.catalogSizeFormat" = "%1$d products, %2$ld variations";
"posSettingsLocalCatalogViewModel.catalogSizeFormat" = "%1$d products and %2$ld variations";

/* Text shown when catalog size cannot be determined. */
"posSettingsLocalCatalogViewModel.catalogSizeUnavailable" = "Catalog size unavailable";
Expand Down
2 changes: 1 addition & 1 deletion WooCommerce/Resources/release_notes.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
This update brings smooth UK Tap to Pay via Stripe, clearer card onboarding error tips, and automatic SSO sign-ins for key admin tasks. Order creation now picks the right variations, and eligible merchants can share quick POS feedback.
This update brings smoother POS performance with a new local product catalog for lightning-fast barcode scanning, search, and selection. We’ve also improved login support for sites using captchas, fixed push notification issues, and ensured product and app stability across the board.
4 changes: 2 additions & 2 deletions config/Version.Public.xcconfig
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
CURRENT_PROJECT_VERSION = $VERSION_LONG
MARKETING_VERSION = $VERSION_SHORT
VERSION_LONG = 23.7.0.2
VERSION_SHORT = 23.7
VERSION_LONG = 23.8.0.0
VERSION_SHORT = 23.8
Loading