At OLX, our mission is to enable millions of people nationwide to exchange goods seamlessly and safely. For our iOS app, this means not only building new features quickly but also ensuring that the code behind them is maintainable, safe, and scalable. In this blog, we’ll share how our iOS team ensures high-quality engineering by combining tools like Danger, SwiftLint, Periphery, automated tests, monitoring, and alerting—creating a continuous feedback loop that empowers developers and safeguards user experience.
Why This Matters for OLX
OLX is a global marketplace. A small bug or crash in one of our flows can impact thousands of buyers and sellers almost instantly. At this scale:
- Code hygiene matters – messy code slows down teams and increases regressions.
- Consistency matters – every developer should follow the same style and rules.
- Feedback matters – the faster we catch issues, the quicker they are to resolve.
- Accountability matters – ownership ensures that nothing slips through the cracks.
This mindset led us to build a quality-first iOS development pipeline.
Step 1: Automating Reviews with Danger
Code reviews are essential but can become repetitive. Nobody enjoys manually checking if an MR has a JIRA ticket or nitpicking about force-unwrapping.
That’s where Danger comes in.
We integrated Danger-Swift into our GitLab CI pipeline to automate MR checks:
- Prevent large MRs without the right label (helps break down big changes).
- Enforce JIRA ticket links in MR descriptions.
- Check for reviewers/assignees before merging.
- Block storyboard/XIB usage to encourage programmatic UI.
- Detect app version bumps in Info.plist.
- Run SwiftLint inline only on modified files, posting comments directly on the MR.

This shifts repetitive checks from humans to automation, allowing reviewers to focus on architecture and logic.
Step 2: Enforcing Coding Style with SwiftLint
Every developer has a unique coding style—but in a large team, inconsistency is costly.
We use SwiftLint, customized to OLX’s style guide, to ensure consistent, safe, and readable code.
Highlights from our .swiftlint.yml:
- Ban dangerous patterns: force_cast, force_try, force_unwrapping.
- Inline linting only on changed files for efficiency.
The result: predictable, clean code that’s easier to review and maintain.
Developer Experience Bonus: When a developer fixes a lint violation and pushes the changes, GitLab automatically resolves the inline comment thread created by SwiftLint.
This keeps merge requests clean and focused, saving reviewers from re-checking already resolved issues.


Step 3: Keeping Code Lean with Periphery
Even the best teams accumulate unused code over time—leftover functions, old APIs, or unused classes.
We run Periphery to:
- Detect unused declarations (classes, methods, variables).
- Highlight dead code paths.
- Reduces technical debt and keeps the code lean.
This keeps our codebase lean, focused, and scalable. Developers spend less time navigating irrelevant code and more time shipping value.


Step 4: Monitoring with Crashlytics & Beyond
Bugs that slip through reviews and CI checks can still occur in production. That’s why monitoring is critical.
We use Firebase Crashlytics and other observability tools to:
- Track crashes in real-time
- Get detailed stack traces & device info
- Prioritize issues by impact (number of affected users)
- Monitor overall app vitals through Crashlytics
- Measure performance with Performance Traces added at several key points in the app
- Leverage XCode Organizer to analyze hangs, crashes, and metrics like battery usage, memory, scrolling performance, hang rate, and launch time
This visibility allows us to proactively fix critical issues and performance bottlenecks before they impact a large user base.

Step 5: Automated Tests & Continuous Integration
Automated tests form the backbone of our CI pipeline.
To enforce this consistently, we use Xcode Cloud to automatically run tests on:
- Every Merge Request (MR) created against the develop branch.
- Every release candidate (RC) branch, ensuring stability before production rollout.
Code Coverage Reporting
We track unit test coverage in our pipeline and enforce that coverage must not decrease, otherwise merge is blocked.


This ensures that:
- Regressions are caught early, long before a feature lands in production.
- Release candidates are validated with the same rigor, giving confidence before going live.
- A failing test will block the merge, maintaining a high-quality baseline.
By baking these automated runs directly into our CI pipeline, we ensure that every change is validated in the right context—whether it’s a feature MR or a release build.
How It All Connects
Here’s the complete pipeline in action:

This creates a closed-loop feedback system for developers.
The Impact & Conclusion
By combining these tools, we’ve:
- Reduced manual review time.
- Increased code consistency & readability.
- Prevented common crashes before production.
- Kept the codebase lightweight.
- Improved developer productivity.
- Delivered a more stable app for millions of OLX users.
At OLX, we see code quality not as an afterthought, but as a core engineering principle.
By investing in automation, monitoring, and accountability, we’ve built a pipeline that helps us move fast without breaking things.
This approach ensures our iOS platform continues to scale with confidence, delighting users while empowering developers.
Acknowledgements
- iOS team: Sandeep Chhabra, Rohan Kanoo, Arun Rathaur, Mohammad Talha, Kajal Singh, Ankit Maurya