Job Description
Roles & Responsibilities
Develop new iOS features that enable users to connect, configure and control latest devices manufactured by client (sensors, motors, networked appliances).
Collaborate with cross-functional teams: firmware/embedded engineers, cloud/API engineers, UX/UI designers, QA/test automation.
Maintain and extend the iOS app's architecture: modules, flows, connectivity layers, UI, state-management.
Ensure code quality, testability, performance, maintainability and UX excellence.
Help onboard new hardware integrations: device discovery (Bluetooth/WiFi), pairing, firmware update flow, cloud sync.
Diagnose, debug and resolve issues (connectivity, Bluetooth/WiFi, intermittent network, memory/performance).
Participate in code reviews, design discussions, architecture improvements and mentor more junior team members.
Support the full mobile app lifecycle: feature definition, development, internal test, App Store release, user feedback, maintenance.
Advocate best practices (unit testing, UI testing, continuous integration, modular design, version control).
Skills
Must have
Strong experience (5+ years) developing native iOS apps using Swift, including a solid understanding of iOS SDK, UIKit/SwiftUI.
Experience integrating and working with hardware-connected devices (e.g., Bluetooth LE, WiFi modules, IoT, pairing workflows) or, at a minimum, strong awareness of connectivity flows.
Proven track record building production-quality apps: modular architecture, clean code, maintainability, testability.
Familiar with asynchronous programming (e.g., Combine, RxSwift, async/await) and managing event streams / asynchronous flows.
Familiar with RESTful APIs or cloud services, JSON serialisation/deserialisation, handling network failures, caching, offline behaviour.
Knowledge of modular architecture patterns (MVVM, Coordinators, Clean Architecture).
Knowledge of the MQTT protocol
Experience with version control (Git), CI/CD pipelines, unit tests (XCTest/XCUITest) and preferably UI/automation tests.
Good understanding of memory management, threading, performance optimisation, and experience resolving common mobile/mobile-device connectivity issues.
Ability to work collaboratively in an agile/scrum team, communicate effectively with non-technical stakeholders and device-engineering teams.
Fluent in English and able to pick up product/firmware dependencies quickly.
Nice to have
Experience with SwiftUI and/or migrating legacy UIKit code to SwiftUI.
Experience with RxSwift or other reactive frameworks, or familiarity with Combine.
Experience with IoT platforms / connected-device ecosystems (device discovery, provisioning, over-the-air updates, telemetry).
Familiarity with Bluetooth LE (BLE) protocols, WiFi provisioning, network security, and/or embedded/firmware interaction.
Experience using dependency-injection frameworks, modularisation (multiple modules in an app), and using Swift Package Manager or CocoaPods.
Familiarity with automated UI testing (XCUITest) and performance/profiling tools (Instruments).
Experience in consumer hardware or smart home domain for example, appliances, sensors, robotics.
Familiarity with analytics/telemetry frameworks, feature-flagging, remote config, and crash-reporting.
Experience working in geographically distributed teams or multi-region apps.
Desired Candidate Profile
Develop new iOS features that enable users to connect, configure and control latest devices manufactured by client (sensors, motors, networked appliances).
Collaborate with cross-functional teams: firmware/embedded engineers, cloud/API engineers, UX/UI designers, QA/test automation.
Maintain and extend the iOS app's architecture: modules, flows, connectivity layers, UI, state-management.
Ensure code quality, testability, performance, maintainability and UX excellence.
Help onboard new hardware integrations: device discovery (Bluetooth/WiFi), pairing, firmware update flow, cloud sync.
Diagnose, debug and resolve issues (connectivity, Bluetooth/WiFi, intermittent network, memory/performance).
Participate in code reviews, design discussions, architecture improvements and mentor more junior team members.
Support the full mobile app lifecycle: feature definition, development, internal test, App Store release, user feedback, maintenance.
Advocate best practices (unit testing, UI testing, continuous integration, modular design, version control).