4
votes

I have a universal landscape mode app. SKStoreProductViewController works fine on iPad. But crashes on iphone ios 7. Even I set the SKStoreProductViewController to display on portrait on iPhone.

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
   if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
       NSLog(@"iphone portrait");
       return UIInterfaceOrientationPortrait;
   }
   else
       return [super preferredInterfaceOrientationForPresentation];
}

The SKStoreProductViewController shows on portrait on iphone iOS 7, but when I rotate the phone, it crashes. I got error message says:

* Terminating app due to uncaught exception 'UIApplicationInvalidInterfaceOrientation', reason: 'Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES'

Anyone knows how to solve the issue?
Thanks

1
Did you have a look @ stackoverflow.com/questions/12540597/… ?Daniel

1 Answers

10
votes

You want should autorotate to return NO if the application and the ViewController have no common interface orientations. Here's my solution:

Subclass SKStoreProductViewController and override -shouldAutorotate with the following:

- (BOOL)shouldAutorotate {
    UIInterfaceOrientationMask applicationSupportedOrientations = [[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:[[UIApplication sharedApplication] keyWindow]];
    UIInterfaceOrientationMask viewControllerSupportedOrientations = [self supportedInterfaceOrientations];
    return viewControllerSupportedOrientations & applicationSupportedOrientations;
}