PriceLocale выбрасывает EXC_BREAKPOINT при доступе
Мы используем вступительные цены в нашем приложении. И у нас есть проблема, которую можно воспроизвести только на одном из наших двух устройств QA - iPhone 6S (11.4.1) во французском App Store. Другой - iPhone 7 (12.0 с французским App Store), и приложение не падает.
Мы используем это расширение на основе расширения SKProduct, предоставляемого SwiftyStoreKit:
@available(iOS 11.2, *)
public extension SKProductDiscount {
public var localizedPrice: String? {
return priceFormatter(locale: priceLocale).string(from: price)
}
private func priceFormatter(locale: Locale) -> NumberFormatter {
let formatter = NumberFormatter()
formatter.locale = locale
formatter.numberStyle = .currency
return formatter
}
}
Используется так:
func updateWith(storeProducts: Set<SKProduct>) {
guard
let selfStoreInfo = storeProducts.filter({ $0.productIdentifier == self.id }).first else {
Logger.warn(message: "Subscription \(self.id) not found on store", .inAppPurchase)
return
}
if #available(iOS 11.2, *) {
if let promo = selfStoreInfo.introductoryPrice {
promotionId = selfStoreInfo.productIdentifier
price = promo.localizedPrice
originalPrice = selfStoreInfo.localizedPrice
} else {
price = selfStoreInfo.localizedPrice
}
} else {
price = selfStoreInfo.localizedPrice
}
}
При отладке мы обнаружили, что priceLocale отвечает за выдачу EXC_BREAKPOINT
,
РЕДАКТИРОВАТЬ Может быть связано с этим: https://bugs.swift.org/browse/SR-7922?attachmentOrder=desc но странно, что это будет работать на нашем iPhone 7, а не на iPhone 6s
1 ответ
Попробуй это:
DispatchQueue.global(qos: .default).async {
while true {
if !SKProduct().productIdentifier.isEmpty {
if let productPriceString: String = SC.storeProduct.localizedPrice {
DispatchQueue.main.async {
print(productPriceString)
}
}
break
}
// Some wait process like using "semaphore"
}
Замените SKProduct() вашим продуктом.
В моем случае это происходит, когда к функции обращаются до инициализации продукта.