首页 > 解决方案 > 未知类型名称“SKPaymentDiscount”。FBSDKCoreKit

问题描述

facebook-ios-sdk在我的Swift 3 iOS 应用程序中为 iOS 构建 Facebook sdk 时遇到问题。

我最近将我在 iOS 应用程序中使用的FBSDKCorekit和pod 从版本4.30.0 更新到了5.13.1FBSDKLoginkit

我正在使用针对 iOS 10.2 的 XCode 9.3.1。使用 XCode 构建我的应用程序时,出现以下问题:未知类型名称 'SKPaymentDiscount'; 您的意思是“SKProductDiscount”吗?

当编译器尝试构建以下文件时会引发此错误Core/FBSDKPaymentObserver.m。请参阅以下部分。

...
#if !TARGET_OS_TV
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_11_1
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_11_4
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_12_1
  // promotional offer starting from iOS 12.2
  if (@available(iOS 12.2, *)) {
    SKPaymentDiscount *paymentDiscount = transaction.payment.paymentDiscount;
    if (paymentDiscount) {
      NSArray<SKProductDiscount *> *discounts = product.discounts;
      for (SKProductDiscount *discount in discounts) {
        if (discount.paymentMode == SKProductDiscountPaymentModeFreeTrial &&
            [paymentDiscount.identifier isEqualToString:discount.identifier]) {
          return YES;
        }
      }
    }
  }
#endif
...

据我研究后了解,SKPaymentDiscount仅在 iOS sdk 12.2 中引入。由于我使用的是 XCode 9.3.1,最新可用的 iOS SDK 是 11.3,但条件编译器表达式#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_12_1 应确保编译器不会构建之前的代码段。

但是,情况似乎并非如此,我收到了构建错误。 未知类型名称“SKPaymentDiscount”;您的意思是“SKProductDiscount”吗?

我尝试安装支持 iOS sdk 12.2 的 XCode 10.0,但我遇到了同样的错误。请指教。

标签: iosxcodefacebookswift3facebook-ios-sdk

解决方案


您应该更新到 Xcode 11.3.1。它是目前截至 2020 年 1 月的最新版本。


推荐阅读