Overview › Swift / Obj-C Interop & Modernization
Swift / Obj-C Interop & Modernization
Swift-first new code; ~108 .m + 109 .h legacy files in the main app.
72
SCORE
Summary
The project is in mid-migration: 3,435 Swift files (most under Costco-Digital/ SPM packages) vs 108 Obj-C .m + 109 .h files (concentrated in legacy Costco/Costco/ flows). The new modules are Swift-first; the older areas remain Obj-C heavy.
Findings
HIGH
108 Obj-C source files
Each Obj-C file imposes a maintenance tax: NS-prefixed types, manual nullability annotations, separate header files, slower compile times in mixed-language modules.
Recommendation: Identify Obj-C hot files (most-changed in last 90 days) and convert quarterly. Track LoC reduction.
MEDIUM
Bridging headers + module maps
Confirm bridging headers correctly annotate Obj-C with
NS_ASSUME_NONNULL_BEGIN/END blocks; otherwise Swift sees imported APIs as platform types (SomeType!) which silently bypass null safety.Recommendation: Audit every public Obj-C header for
nullable/nonnull annotations.MEDIUM
Custom RZ-prefixed Pods (Raizlabs legacy)
RZVinyl (networking + caching) and RZTransitions are Raizlabs-era forks vendored via custom git URLs. They still ship Obj-C; replacement reduces both the Obj-C surface and the unmaintained-fork risk.
Recommendation: Replace RZVinyl with URLSession + Codable patterns already used in
CoreImplementation; replace RZTransitions with native UIKit / SwiftUI transitions.LOW
Swift 5 — adopt Swift 6 strict concurrency when ready
Swift 6 (Xcode 16+) ships strict concurrency checking which surfaces data-race bugs at compile time.
Recommendation: Pilot
SWIFT_STRICT_CONCURRENCY=complete on one SPM package; track warning count over time.No findings logged in this category yet for iOS.
Costco iOS · Code Review Report · Generated 2026-05-07 · 88 machine-curated findings