TabBarController returns null

The reason null is returned, is that self is your UITabBarController, therefore, it doesn't have anything on self.tabBarController

Your code should look like this:

NSMutableArray *newTabs = [NSMutableArray arrayWithArray:[self viewControllers]];
NSLog(@"\n\n\n%lu\n\n\n",(unsigned long)[newTabs count]);
NSLog(@"self.viewControllers %@ \n\n",self);
[newTabs removeObjectAtIndex: 1];
[self setViewControllers:newTabs];

In Swift

        let indexToRemove = 1
        if indexToRemove < (self.viewControllers?.count)! {
            var viewControllers = self.viewControllers
            viewControllers?.remove(at: indexToRemove)
            self.viewControllers = viewControllers
        }

directly use self in UITabBarController class, not self.tabBarControllers.