title: How to test IAP (in-app purchase) in iOS Simulator OR on the Device?
body: <p>I've implemented a simple non-consumable in-app purchase mechanism by following the Ray Wenderlich tutorial book.</p>
  
  <p>When my app starts, I initiate a product info request:</p>
  
  <pre><code>self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
  _productsRequest.delegate = self;
  [_productsRequest start];
  </code></pre>
  
  <p>The SKProductRequest gets created. It has a memory address but nothing else happens. None of the delegate methods gets called:</p>
  
  <pre><code>- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
      NSLog(@"Product info received...");
      NSArray *products = response.products;
      for (SKProduct *product in products) {
          NSLog(@"ID: %@, title:%@, (%f)", product.productIdentifier, product.localizedTitle, product.price.floatValue);
      }
  
      self.productsRequest = nil;
  }
  
  - (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
      NSLog(@"Failed to load list of products");
      self.productsRequest = nil;
  }
  </code></pre>
  
  <p>I checked twice:</p>
  
  <ul>
  <li>App fully set-up in iTunes Connect.</li>
  <li>Status of app in ITC is "Prepare for Upload"</li>
  <li>One non-consumable IAP added.</li>
  <li>Status of IAP product in ITC is "Ready to Submit"</li>
  <li>App ID is com.mycompany.myapp both for the app and in the plist. Checked twice.</li>
  <li>IAP uses com.mycompany.myapp.productname (using exact same ID for the request).</li>
  <li>Created a test user account in ITC.</li>
  <li>Nothing submitted to Apple yet.</li>
  <li>My Mac has internet access.</li>
  <li>There are no other messages in the console or on screen.</li>
  </ul>
  
  <p>The Ray Wenderlich book doesn't mention I must do anything else besides this.</p>
  
  <p>Only <em>once</em> I saw a -didFailWithError: call to my delegate on the Device, but it never again appeared. My delegate doesn't get called both on device or simulator. I let it run for minutes with no response at all.</p>
  
  <p>iTunes Connect gives this confusing warning:</p>
  
  <blockquote>
    <p>Your first In-App Purchase(s) must be submitted with a new app
    version. Select them from the In-App Purchases section of the Version
    Details page and then click Ready to Upload Binary.</p>
  </blockquote>
  
  <p>Is this required prior to being able to test In-App Purchases?</p>