title: SKProductsRequest returning 0 Products
body: <p>I'm trying to do IAP however for some reason, my SKProductsRequest returns 0 products. </p>
  
  <p>-Test products have been added to iTunes connect properly</p>
  
  <p>-Banking and Taxing information is filled</p>
  
  <p>-The product's bundle id matches the app bundle id</p>
  
  <p>-I've waited up to two days for it to get processed through the servers</p>
  
  <p>I used this youtube tutorial to build the app:
  <a href="https://www.youtube.com/watch?v=zRrs7O5yjKI" rel="nofollow noreferrer">https://www.youtube.com/watch?v=zRrs7O5yjKI</a></p>
  
  <p>And here is the code:</p>
  
  <pre><code>import UIKit
  import StoreKit
  
  class ViewController: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver {
  
      @IBOutlet weak var lblAd: UILabel!
      @IBOutlet weak var lblCoinAmount: UILabel!
  
      @IBOutlet weak var outRemoveAds: UIButton!
      @IBOutlet weak var outAddCoins: UIButton!
      @IBOutlet weak var outRestorePurchases: UIButton!
  
  
  
      var coins = 50
  
      override func viewDidLoad() {
          super.viewDidLoad()
          // Do any additional setup after loading the view, typically from a nib.
          outRemoveAds.isEnabled = false
          outAddCoins.isEnabled = false
          outRestorePurchases.isEnabled = false
  
          if(SKPaymentQueue.canMakePayments()) {
              print("IAP is enabled, loading")
              let productID: NSSet = NSSet(objects: "com.IAPTesters.10Dolla", "com.IAPTesters.RemoveAds")
              let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set&lt;String&gt;)
              request.delegate = self
              request.start()
          } else {
              print("please enable IAPS")
          }
      }
      @IBAction func btnRemoveAds(_ sender: Any) {
          print("rem ads")
          for product in list {
              let prodID = product.productIdentifier
              if(prodID == "com.IAPTesters.RemoveAds") {
                  p = product
                  buyProduct()
              }
          }
      }
  
      @IBAction func btnAddCoins(_ sender: Any) {
          for product in list {
              let prodID = product.productIdentifier
              if(prodID == "com.IAPTesters.10Dolla") {
                  p = product
                  buyProduct()
              }
          }
      }
  
      @IBAction func btnRestorePurchases(_ sender: Any) {
          SKPaymentQueue.default().add(self)
          SKPaymentQueue.default().restoreCompletedTransactions()
      }
  
      func buyProduct() {
          print("buy " + p.productIdentifier)
          let pay = SKPayment(product: p)
          SKPaymentQueue.default().add(self)
          SKPaymentQueue.default().add(pay as SKPayment)
      }
  
      func removeAds() {
          lblAd.removeFromSuperview()
      }
  
      func addCoins() {
          coins += 50
          lblCoinAmount.text = "\(coins)"
      }
  
      var list = [SKProduct]()
      var p = SKProduct()
  
      func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
          print("product request")
          let myProduct = response.products
          for product in myProduct {
              print("product added")
              print(product.productIdentifier)
              print(product.localizedTitle)
              print(product.localizedDescription)
              print(product.price)
  
              list.append(product)
          }
  
          outRemoveAds.isEnabled = true
          outAddCoins.isEnabled = true
          outRestorePurchases.isEnabled = true
      }
  
      func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
          print("transactions restored")
          for transaction in queue.transactions {
              let t: SKPaymentTransaction = transaction
              let prodID = t.payment.productIdentifier as String
  
              switch prodID {
              case "com.IAPTesters.RemoveAds":
                  print("remove ads")
                  removeAds()
              case "com.IAPTesters.10Dolla":
                  print("add coins to account")
                  addCoins()
              default:
                  print("IAP not found")
              }
          }
      }
  
      func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
          print("add payment")
  
          for transaction: AnyObject in transactions {
              let trans = transaction as! SKPaymentTransaction
              print(trans.error)
              switch trans.transactionState {
              case .purchased:
                  print("buy ok, unlock IAP HERE")
                  print(p.productIdentifier)
  
                  let prodID = p.productIdentifier
                  switch prodID {
                  case "com.IAPTesters.RemoveAds":
                      print("remove ads")
                      removeAds()
                  case "com.IAPTesters.10Dolla":
                      print("add coins to account")
                      addCoins()
                  default:
                      print("IAP not found")
                  }
                  queue.finishTransaction(trans)
              case .failed:
                  print("buy error")
                  queue.finishTransaction(trans)
                  break
              default:
                  print("Default")
                  break
              }
          }
      }
  
      override func didReceiveMemoryWarning() {
          super.didReceiveMemoryWarning()
          // Dispose of any resources that can be recreated.
      }
  }
  </code></pre>
  
  <p>When you run the app it will print "IAP is enabled, loading" and than "product request" but nothing else.</p>
  
  <p>If I print <code>response.invalidProductIdentifiers</code> in the productsRequest function it will return my products: <code>["com.IAPTesters.RemoveAds", "com.IAPTesters.10Dolla"]</code></p>
  
  <p>Thanks in advance for the help</p>