Halil Emin Çalışkan
00Init
  • Simulator
  • Device
  • Tests
  • Lint

iOS Developer · Istanbul, Turkey

Halil Emin
Çalışkan

I build iOS apps with Swift, SwiftUI and UIKit. I care about code that is modular, tested and checked on a real device, not just code that compiles.

Open to new roles: remote or on-site.

Profile

In numbers

App Store releases shipped
20+
XCTest unit tests, written from zero
465+
SwiftLint violations in strict mode, 500+ files
0

Case study · BuyBuddy

Rebuilding a production iOS app in SwiftUI

BuyBuddy's staff app pairs, arms and disarms retail security tags over NFC and Bluetooth LE. The existing app was a large UIKit/VIPER codebase. I rebuilt it from scratch in SwiftUI with MVVM.

  • 17

    feature modules

    On top of 3 independent Swift Packages: design system, networking and hardware.

  • 465+

    XCTest unit tests

    A test suite that grew from zero.

  • 0

    SwiftLint violations

    Strict mode, as the codebase grew past 500 files.

  • 1

    command

    verify.sh runs the simulator build, the device build, all tests and lint, and stops at the first failure.

The old code is the real spec

The written spec was wrong in several places: endpoints that did not exist, commands that worked differently, a feature that was not what its name said. So every feature started by reading the old app and its SDK and writing down what they actually did. The Bluetooth and NFC protocol was checked byte by byte against the old SDK.

Pipeline

How I work

I use AI coding agents (Claude Code, Codex) every day. Their code is only as good as the checks around it, so most of my effort goes into those checks.

  1. Split the work

    Every feature is a written spec with a clear definition of done.

  2. Read the old code first

    Find out what the system really does, not what the document says.

  3. Agents implement, I own

    Agents write code in isolated branches. Architecture, integration and review stay with me.

  4. One gate

    verify.sh must pass: simulator build, device build, tests, strict lint.

  5. Use the app

    Drive the running app in the simulator, then test on a real device.

  6. Log decisions

    Every product decision made without the product owner goes into a log for review.

The Gate

Why the device build is part of the gate

One feature passed every check: build, 141 tests, lint. On my phone, it did not compile.

The camera code was inside #if !targetEnvironment(simulator), so the simulator build never compiled it at all. Every check had passed over code that was never type-checked.

I added a device build to verify.sh, then tested the gate itself: I reverted the fix, and the simulator build stayed green while the device build failed. The blind spot was real, and now it is closed.

./verify.sh with the fix reverted

Simulator build passed

Device build failed

Defects

Bugs the green checks missed

42 defects documented across 10 development cycles. A defect is counted only if it was found after build, tests and lint were already green. Some examples:

  • #1Delete account asked the user to type "SİL". Uppercasing produced a dotless "I" instead of the Turkish "İ", so the button never enabled.
  • #2Tag IDs were lowercased before being sent to the server. Against the real backend, every nearby tag would have looked like an unknown product.
  • #3A failed Bluetooth pairing showed every step as completed.
  • #4Retry after a network error sent the user back to write to a tag that was already disarmed.

What I do not delegate: architecture, protocol verification and product decisions.

History

Experience

  1. Sep 2024 – Present

    iOS Developer · BuyBuddy

    • Rebuilt the staff iOS app from scratch in SwiftUI/MVVM (see above).
    • Developed and maintained features across nearly all modules of a production VIPER/UIKit app, with REST APIs and third-party SDKs.
    • Shipped and maintained 20+ App Store releases.
  2. Jan 2024 – Sep 2024

    Software Developer · WediaCorp

    • Built a Google index-control automation system in Go with MySQL and a scraping API; about 5x faster processing through concurrency.
    • Delivered end-to-end web features across backend (Go, PHP, MySQL) and frontend (Vue.js).
  3. Nov 2023 – Dec 2023

    iOS Developer Intern · BuyBuddy

    • Built screens, reusable UI components and REST API data flows in Swift/UIKit with MVVM.
  4. Jul 2022 – Aug 2022

    iOS Developer Intern · Mobillium

    • Mentor-guided iOS program (Swift, UIKit, MVVM); built a note-taking app.

Skills

  • Swift
  • SwiftUI
  • UIKit
  • MVVM
  • VIPER
  • Swift Package Manager
  • XCTest
  • SwiftLint
  • REST APIs
  • Git
  • CI/CD
  • App Store Connect
  • TestFlight
  • Claude Code
  • Codex
  • Go
  • PHP
  • MySQL
  • Vue.js
  • Node.js

Education

B.Sc. Computer Engineering
Istanbul University-Cerrahpaşa · 2023

Ship

Build succeeded.

Open to new roles: remote or on-site.