Production review failed because IAP products cannot be loaded

My app has a couple of consumable IAP items. I have tested this extensively and it works in all test scenarios including loads of beta testers using testflight. However, Apple's production reviewer reports that loading of the products hangs in their setup.

This is very frustrating as I have no means of recreating the problem.

My first product was tested ok an all my IAP items are approved for release. However, I did not explicitly assign them to my build. I read somewhere that you need to do that but could not find in App Store Connect after my first product was approved.

Below is the relevant code section. What am I missing?

class DonationManager: NSObject, ObservableObject, SKProductsRequestDelegate, SKPaymentTransactionObserver {

  @Published var products: [SKProduct] = [] // This is observed by a view. But apparently that view never gets populated in Apple's production review setup

  @Published var isPurchasing: Bool = false
  @Published var purchaseMessage: String? = nil
  
  let productIDs: Set<String> = ["Donation_5", "Donation_10", "Donation_25", "Donation_50"]
  
  override init() {
    super.init()
    SKPaymentQueue.default().add(self)
    fetchProducts()
  }
  
  deinit {
    SKPaymentQueue.default().remove(self)
  }
  
  func fetchProducts() {
    print("Attempting to fetch products with IDs: \(productIDs)")
    let request = SKProductsRequest(productIdentifiers: productIDs)
    request.delegate = self
    request.start()
  }
  
  func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
    DispatchQueue.main.async {
      self.products = response.products.sorted { $0.price.compare($1.price) == .orderedAscending }
      print("Successfully fetched \(self.products.count) products.")
      if !response.invalidProductIdentifiers.isEmpty {
        print("Invalid Product Identifiers: \(response.invalidProductIdentifiers)")
        self.purchaseMessage = NSLocalizedString("Some products could not be loaded. Please check App Store Connect.", comment: "")
      } else if self.products.isEmpty {
        print("No products were fetched. This could indicate a problem with App Store Connect configuration or network.")
        self.purchaseMessage = NSLocalizedString("No products available. Please try again later.", comment: "")
      }
    }
  }

...and the view showing the items:

  @StateObject private var donationManager = DonationManager()
  
  var body: some View {
    VStack(spacing: 24) {
      Spacer()
      
      // Donation options -------------------
      if donationManager.products.isEmpty {
        ProgressView(NSLocalizedString("Loading donation options...", comment: ""))
          .foregroundColor(DARK_BROWN)
          .italic()
          .font(.title3)
          .padding(.top, 16)
      } else {
        ForEach(donationManager.products, id: \.self) { product in
          Button(action: {
            donationManager.buy(product: product)
          }) {
            HStack {
              Image(systemName: "cup.and.saucer.fill")
                .foregroundColor(.pink)
              Text("\(product.localizedTitle) \(product.priceLocale.currencySymbol ?? "$")\(product.price)")
            }
            .buttonStyle()
          }
          .disabled(donationManager.isPurchasing)
        }
      }
Production review failed because IAP products cannot be loaded
 
 
Q