Mobile Engineer - IOS
Gymshark
Not specified · Solihull
Salary undisclosed
full_time
onsite
English
Posted 17h ago · Oct 4, 2026
Job description
<p><strong>OVERVIEW:<br></strong></p> <p><span class="NormalTextRun SCXW248244708 BCX0">This role exists to build and </span><span class="NormalTextRun SCXW248244708 BCX0">maintain</span><span class="NormalTextRun SCXW248244708 BCX0"> the iOS app that a large share of Gymshark customers </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW248244708 BCX0">shop</span><span class="NormalTextRun SCXW248244708 BCX0"> through, at a standard that holds under peak load. You will turn refined product work into features that are shipped, tested and observable, and improves the quality of the code you touch.</span></p> <p><strong>WHAT YOU'LL BE DOING:</strong></p> <p><strong><span data-contrast="none"><span data-ccp-parastyle="heading 3">CRAFT</span></span></strong> <span data-ccp-props="{"134245418":true,"134245529":true,"335551550":1,"335551620":1,"335559738":40}"> </span></p> <ul> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="15" data-aria-level="1"><span data-contrast="none">Writes production Swift confidently. Most new work is SwiftUI; the app still contains UIKit that is being migrated, so both are relevant.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="15" data-aria-level="1"><span data-contrast="none">Works effectively in a modular codebase. Understands why a type belongs in one module rather than another, and adds features without crossing module boundaries.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="15" data-aria-level="1"><span data-contrast="none">Applies Clean Architecture and MVVM as standard, can explain the separation of concerns, and identifies where a pull request breaks it.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="15" data-aria-level="1"><span data-contrast="none">Writes unit tests as part of the work rather than afterwards, and is comfortable building test doubles. Some of the team work test-first, and we want to increase that.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="15" data-aria-level="1"><span data-contrast="none">Understands Swift concurrency sufficiently to avoid data races, and raises it when a problem exceeds their experience.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="15" data-aria-level="1"><span data-contrast="none">Diagnoses production issues from crash reporting and analytics, and identifies the root cause independently.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="15" data-aria-level="1"><span data-contrast="none">Treats performance, accessibility and app size as part of completing a piece of work.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="15" data-aria-level="1"><span data-contrast="none">Understands the path their code takes after merge: CI, review, distribution and App Store submission, and the common failure points at each stage.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="15" data-aria-level="1"><span data-contrast="none">Uses a branching strategy consistently and writes pull requests that are straightforward to review.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="15" data-aria-level="1"><span data-contrast="none">Raises design specifications that conflict with the Human Interface Guidelines rather than implementing them unchanged.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="15" data-aria-level="1"><span data-contrast="none">Considers security and dependency risk routinely, and can assess whether a third-party SDK should be added</span></li> </ul> <p><strong><span data-contrast="none">DELIVERY</span></strong></p> <ul> <li><span data-contrast="none">Contributes actively to Agile ceremonies, and raises when one is no longer useful.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="6" data-aria-level="1"><span data-contrast="none">Helps Product Owners refine stories into buildable work, and raises when a story is not ready.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="6" data-aria-level="1"><span data-contrast="none">Breaks work into increments that each deliver value, rather than a sequence that only delivers at the end.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="6" data-aria-level="1"><span data-contrast="none">Demonstrates their own work to non-technical stakeholders and explains its value in plain language.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="6" data-aria-level="1"><span data-contrast="none">Raises problems early, while they are still inexpensive to fix.</span> </li> </ul> <p><strong><span data-contrast="none"><span data-ccp-parastyle="heading 3">CULTURE</span></span></strong> </p> <ul> <li><span style="font-family: Helvetica, Arial, sans-serif; font-size: 14px;" data-contrast="none">Uses their 10% time and shares what comes out of it.</span><span style="font-family: Helvetica, Arial, sans-serif; font-size: 14px;" data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="11" data-aria-level="1"><span data-contrast="none">Cross-skills beyond iOS sufficiently to work with adjacent teams.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="11" data-aria-level="1"><span data-contrast="none">Shares what they learn through an appropriate channel.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="11" data-aria-level="1"><span data-contrast="none">Documents solutions to a level the next person can use: diagrams, decisions and reasoning.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9642],"469777803":"left","469777804":"","469777815":"hybridMultilevel"}" data-aria-posinset="11" data-aria-level="1"><span data-contrast="none">Listens and understands other perspectives before forming an opinion, and asks questions that draw out wider input.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> </ul> <p><strong><span data-contrast="none"><span data-ccp-parastyle="heading 3">LEADERSHIP</span></span></strong> <br><span data-ccp-props="{"134245418":true,"134245529":true,"335551550":1,"335551620":1,"335559738":40}"> </span></p> <ul> <li><span data-contrast="none">Brings a formed view to a discussion rather than an open question, and revises it when presented with a better argument.</span><span data-ccp-props="{"134245417":false,"335551550":1,"335551620":1}"> </span></li> <li data-leveltext="" data-font="Wingdings" data-listid="21" data-list-defn-props="{"335552541":1,"335559685":720,"335559991":360,"469769226":"Wingdings","469769242":[9
Skills and categories
Eligibility checker
Check an offered salary against the published general salary floor for a sponsoring country.
Loading thresholds…
Apply for this role
Checking your session…
Or apply on the company site