How we use Objective-C
The first job with an older codebase is usually practical: get it compiling with the current Xcode, replace deprecated APIs that Apple has announced will stop working, and remove libraries that no longer receive updates. Crash reports then show where attention is needed first.
Swift and Objective-C can live in one target through bridging headers, so migration happens in steps. We add new screens in Swift, wrap older classes behind clear interfaces and retire Objective-C code once nothing depends on it.
What we build with it
- Updates for older iOS apps to meet App Store requirements
- Crash investigation and memory fixes
- Replacement of deprecated APIs and abandoned libraries
- Incremental migration of modules to Swift
Toolkit
- UIKit and Foundation
- Bridging headers
- CocoaPods and Swift Package Manager
- Instruments
- XCTest
How we keep Objective-C code healthy
- Nullability annotations added for safer Swift interop
- Tests added before a class is migrated
- Build warnings treated as tasks, not noise
- Dependency list reviewed every release
Questions about Objective-C
Is it worth keeping an Objective-C app?
If it works and users rely on it, usually yes. Migration pays off when a module has to change anyway.
Can you mix Swift into an Objective-C project?
Yes. Both languages compile in one target, and we set up the bridging so each can call the other.