Overridden Super Call

ID

swift.overridden_super_call

Severity

low

Remediation Complexity

trivial

Remediation Risk

low

Remediation Effort

low

Resource

Reliability

Language

Swift

Tags

ios, reliability, suspicious-code

Description

Reports an override func of a UIKit / AppKit / XCTest lifecycle method whose body never calls super.<method>(). The parent class’s setup or teardown is silently skipped.

override func viewDidLoad() {                  // FLAW
    print("subclass setup")
}

override func viewDidLoad() {                  // OK
    super.viewDidLoad()
    print("subclass setup")
}

Rationale

Lifecycle methods like viewDidLoad, viewWillAppear, awakeFromNib, prepareForReuse, layoutSubviews, setUp, and tearDown are required to call super — the parent class relies on them to wire up subviews, push state, or clean up resources. Skipping the super call usually causes "works in isolation, breaks in the larger app" bugs that are easy to commit and hard to diagnose.

Remediation

Call super.<method>() first (or last, depending on the framework contract):

override func viewDidLoad() {
    super.viewDidLoad()
    setupSubviews()
}

The rule fires only for a fixed allow-list of well-known lifecycle methods. Custom overrides where you intentionally replace the parent’s behaviour are left alone.