swift 符号未找到:_PKPaymentNetworkPagoBancomat

wwwo4jvm  于 2023-11-16  发布在  Swift
关注(0)|答案(1)|浏览(154)

所以在我的应用程序中,我已经将ApplePay与Xcode Version 15.0(15 A240 d)集成在一起,我的应用程序的最低iOS版本是v16。
我正在做的是从字面上Map到PKPaymentNetwork的web PaymentNetwork.当我运行iOS 16.4模拟器上的应用程序时,它只是崩溃了以下消息.

  1. dyld[63845]: Symbol not found: _PKPaymentNetworkPagoBancomat
  2. Referenced from: <BACBF79F-6485-3A1B-84CA-A343341FA5A6> /Users/user.name/Library/Developer/CoreSimulator/Devices/2F7896EF-64AE-40CF-B712-DF4F2DCFF887/data/Containers/Bundle/Application/2D15AF1A-8479-4C03-A674-CF9F3A721573/MyApp.app/MyApp
  3. Expected in: <6C22B2D4-5F5B-3FA9-825B-BDA166D45320> /Library/Developer/CoreSimulator/Volumes/iOS_20E247/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 16.4.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/PassKit.framework/PassKit

字符串
下面是我尝试执行的代码。
请注意,它与iOS 17一起工作!

  1. public enum ApplePayNetwork: String, Codable {
  2. case amex = "amex"
  3. case bancomat = "bancomat"
  4. case bancontact = "bancontact"
  5. case cartesBancaires = "cartesBancaires"
  6. case chinaUnionPay = "chinaUnionPay"
  7. case dankort = "dankort"
  8. case discover = "discover"
  9. case eftpos = "eftpos"
  10. case electron = "electron"
  11. case elo = "elo"
  12. case girocard = "girocard"
  13. case interac = "interac"
  14. case jcb = "jcb"
  15. case mada = "mada"
  16. case maestro = "maestro"
  17. case masterCard = "masterCard"
  18. case mir = "mir"
  19. case privateLabel = "privateLabel"
  20. case visa = "visa"
  21. case vPay = "vPay"
  22. public init?(pkPaymentNetwork: PKPaymentNetwork?) {
  23. guard let pkPaymentNetwork else {
  24. return nil
  25. }
  26. switch pkPaymentNetwork {
  27. case .amex:
  28. self = .amex
  29. case .pagoBancomat:
  30. self = .bancomat
  31. case .bancontact:
  32. self = .bancontact
  33. case .cartesBancaires:
  34. self = .cartesBancaires
  35. case .chinaUnionPay:
  36. self = .chinaUnionPay
  37. case .dankort:
  38. self = .dankort
  39. case .discover:
  40. self = .discover
  41. case .eftpos:
  42. self = .eftpos
  43. case .electron:
  44. self = .electron
  45. case .elo:
  46. self = .elo
  47. case .girocard:
  48. self = .girocard
  49. case .interac:
  50. self = .interac
  51. case .JCB:
  52. self = .jcb
  53. case .mada:
  54. self = .mada
  55. case .maestro:
  56. self = .maestro
  57. case .masterCard:
  58. self = .masterCard
  59. case .mir:
  60. self = .mir
  61. case .privateLabel:
  62. self = .privateLabel
  63. case .visa:
  64. self = .visa
  65. case .vPay:
  66. self = .vPay
  67. default:
  68. return nil
  69. }
  70. }
  71. public var toAppNetwork: PKPaymentNetwork {
  72. switch self {
  73. case .amex:
  74. return .amex
  75. case .bancomat:
  76. return .pagoBancomat
  77. case .bancontact:
  78. return .bancontact
  79. case .cartesBancaires:
  80. return .cartesBancaires
  81. case .chinaUnionPay:
  82. return .chinaUnionPay
  83. case .dankort:
  84. return .dankort
  85. case .discover:
  86. return .discover
  87. case .eftpos:
  88. return .eftpos
  89. case .electron:
  90. return .electron
  91. case .elo:
  92. return .elo
  93. case .girocard:
  94. return .girocard
  95. case .interac:
  96. return .interac
  97. case .jcb:
  98. return .JCB
  99. case .mada:
  100. return .mada
  101. case .maestro:
  102. return .maestro
  103. case .masterCard:
  104. return .masterCard
  105. case .mir:
  106. return .mir
  107. case .privateLabel:
  108. return .privateLabel
  109. case .visa:
  110. return .visa
  111. case .vPay:
  112. return .vPay
  113. }
  114. }
  115. }

gywdnpxw

gywdnpxw1#

PKPaymentNetwork.pagoBancomat仅从iOS 17.0开始可用。这意味着任何提及此网络的内容都应封装在可用性检查中,例如:

  1. if #available(iOS 17.0, *) {
  2. return .pagoBancomat
  3. }

字符串
但是由于你使用的是switch,你可能需要使用default子句来处理这个特定的网络。你可能需要对tmoney执行类似的操作,因为这个网络也只能从iOS 17.0开始使用。
然而,看起来pagoBancomat网络有问题,而且问题还不止于此。即使使用if #available条件,我的应用在iOS 16.3上启动时也会崩溃
我决定暂时不提pagoBancomat。但如果我不是唯一注意到这个问题的人,我会向Apple提交反馈,这可能是SDK级别的bug,可以在Xcode的后续版本中修复。
备注:

  • 使用Xcode 15.0.1
  • 我已经尝试清理项目并删除派生数据。

相关问题