Thanks for being a part of WWDC25!

How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here

Enabling Main Thread Checker in Xcode May Cause Category Method Implementation Conflicts for UI-Related Classes

​Environment​:

Xcode Version: 16.0 (latest stable release) iOS Version: 18.3.1 Devices: physical devices Configuration: Main Thread Checker enabled (Edit Scheme > Run > Diagnostics)

​Issue Description​

When the ​Main Thread Checker​ is enabled, methods defined in a UIViewController category (e.g., supportedInterfaceOrientations) fail to execute, whereas the subclass implementation of the same method works as expected. This conflicts with the normal behavior where ​both implementations should be called.

​Steps to Reproduce​

1、Declare a category method in UIViewController+Extend.m:

// UIViewController+Extend.m

@implementation UIViewController (Extend)

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {

    NSLog(@"category supportedInterfaceOrientations hit");

    return UIInterfaceOrientationMaskAll;
}

@end

2、Override the same method in a subclass ,call super methed(ViewController.m):


// ViewController.m
@implementation ViewController
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    NSLog(@"subclass called supportedInterfaceOrientations called");
    return [super supportedInterfaceOrientations]; // Expected to call the category implementation
}
@end

3、​Expected Behavior​ (Main Thread Checker ​disabled):

subclass called supportedInterfaceOrientations called  
category supportedInterfaceOrientations hit  

4、Actual Behavior​ (Main Thread Checker ​enabled):

subclass called supportedInterfaceOrientations called  
// category supportedInterfaceOrientations hit  

​Requested Resolution​

Please investigate:

1、Why Main Thread Checker disrupts category method invocation.

2、Whether this is a broader issue affecting other UIKit categories.

Answered by DTS Engineer in 843331022

UIViewController already has a supportedInterfaceOrientations method. You can’t add a second implementation using a category. That’s just not supported and will result in undefined behaviour.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

UIViewController already has a supportedInterfaceOrientations method. You can’t add a second implementation using a category. That’s just not supported and will result in undefined behaviour.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Enabling Main Thread Checker in Xcode May Cause Category Method Implementation Conflicts for UI-Related Classes
 
 
Q