IOS
317 bites tagged IOS — interview questions with model answers, and 60-second explainers.
Purpose of RCTBridgeModule and ReactContextBaseJavaModule
These declare a class as a discoverable native module, provide the JS-facing name, and let RN export methods to JavaScript. understanding the native module contract.
Optimizing Slow iOS CI Build Times
Profile the build, cache CocoaPods and DerivedData, use prebuilt frameworks, parallelize, scope to changed work. CI build optimization. buying faster runners without measuring the bottleneck first.
iOS Provisioning Profiles and Signing Certificates
The certificate proves developer identity, the App ID names the app, the profile binds certificate, App ID, and devices. iOS code-signing model. confusing the certificate with the profile or treating them as interchangeable.
Requesting runtime permissions on iOS and Android
Declare permissions in Info.plist and AndroidManifest, then check status and request at runtime just before use, handling granted, denied, and blocked. Permission lifecycle awareness.
Conditional logic with Platform.Version
Platform.Version is a number on Android (API level) and a string on iOS; gate features by version to use new APIs only where supported. OS-version-aware branching. comparing the iOS string version as a number.
Platform-specific file extensions
Name files Component.ios.js and Component.android.js; import without the extension and the bundler picks the right one per platform. knowledge of platform file resolution. thinking you must import the extension explicitly.
Delivering one color token to three platforms
One JSON source, generated CSS variable for web, color resource XML for Android, and Swift/asset for iOS. platform-specific token output. pasting the same hex by hand into each platform.
XCFrameworks and Binary Distribution Trade-offs
XCFramework bundles slices for multiple platforms/architectures, used to hide source or speed builds. knowledge of binary distribution on Apple platforms. ignoring debugging, Swift ABI, and update friction trade-offs.
Decoupled Cross-Module Navigation in Modular iOS
Depend on a shared abstraction, register concrete routers in a coordinator or registry, resolve at runtime. decoupling feature modules. importing module B directly or coupling features through a god object.
Resolving Conflicting Transitive Versions in SPM
SPM allows only one version per package, so diagnose the graph, then update, pin, or fork to find an overlap. understanding of SPM's single-version resolution. assuming both versions can coexist like in some other ecosystems.
Making a Legacy UIViewController Testable
Extract logic into a testable view model, inject dependencies, keep the controller a thin humble object. refactoring legacy UIKit for testability. rewriting everything at once or testing through the UIKit lifecycle directly.
setUp() and tearDown() in XCTestCase
SetUp builds fresh state before each test, tearDown cleans up after, ensuring independence. knowledge of XCTest lifecycle and test isolation. thinking they run once per class or sharing mutable state across tests.
Generating Video Thumbnails with AVAssetImageGenerator
Load AVAsset, configure AVAssetImageGenerator, request the time off the main thread, hop back to update UI. AVFoundation usage plus async UI hygiene. doing the decode synchronously on the main thread.
Building a Card Flip Animation in SwiftUI
Drive a flipped state, rotate both faces with rotation3DEffect, hide the back face. SwiftUI animation and 3D transform fluency. forgetting the back is mirrored or showing both faces at once.
Push vs Modal Presentation in UIKit
Push adds to a nav stack with back, modal presents a self-contained interrupting flow. understanding of UIKit navigation models. treating them as interchangeable or ignoring the stack relationship.
IBOutlet vs IBAction in Interface Builder
Outlet references a view, action handles an event, both connect via Ctrl-drag. grasp of Storyboard-to-code wiring. confusing the two directions or forgetting the connection is runtime, not compile-time.
Minimizing Storyboard merge conflicts
Split into many small storyboards or xibs, or move to programmatic or SwiftUI layout; process-wise coordinate ownership and merge often. collaboration on monolithic XML UI files.
Faulting in Core Data
A fault is a placeholder object whose property data is not yet loaded; accessing a property fires the fault and fetches from the store, saving memory. lazy loading in Core Data. ignoring the N+1 fetch storm faulting can cause.
View identity in SwiftUI and the .id() modifier
Identity links a view to its persistent state and transitions; structural identity comes from position, explicit identity from .id(); changing the id resets state and forces a new view. how SwiftUI tracks views across updates.
Debugging a closure capture leak in a third-party library
Use the Memory Graph Debugger to inspect retain paths, the Leaks and Allocations instruments, and malloc stack logging; trace the cycle before patching. methodical leak diagnosis.
Exposing Swift classes to Objective-C
Subclass NSObject or mark members @objc, import the generated ModuleName-Swift.h, and accept that Swift-only types like enums with associated values cannot cross. Swift-to-ObjC interop rules.
Diagnosing choppy scrolling performance
Reach for Instruments, especially the Time Profiler and Core Animation/Hangs tools, and look for main-thread work and dropped frames. profiling discipline over guessing. blindly optimizing without measuring first.
Purpose and setup of an Objective-C bridging header
The bridging header imports ObjC headers into Swift; Xcode auto-creates it or you add it manually and set the build setting. mixed-language project setup. confusing it with the generated Swift-to-ObjC header.
Privacy manifests and the app privacy report
PrivacyInfo.xcprivacy declares collected data types, tracking, and reasons for required-reason APIs; Xcode aggregates your manifest plus SDK manifests into a privacy report. privacy-manifest responsibilities.
Get IOS bites daily.
Five a day, five minutes, offline. With quizzes so it sticks.
Open testing — you’ll join as an early tester.