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() вашим продуктом.

В моем случае это происходит, когда к функции обращаются до инициализации продукта.

Другие вопросы по тегам