RepoPilotOpen in app →

BohdanOrlov/iOS-Developer-Roadmap

Roadmap to becoming an iOS developer in 2018.

Concerns

Stale and unlicensed — last commit 2y ago

worst of 4 axes
Use as dependencyConcerns

no license — legally unclear; last commit was 2y ago

Fork & modifyConcerns

no license — can't legally use code; last commit was 2y ago

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isConcerns

no license — can't legally use code; last commit was 2y ago

  • 13 active contributors
  • Distributed ownership (top contributor 43% of recent commits)
  • CI configured
Show 3 more →
  • Tests present
  • Stale — last commit 2y ago
  • No license — legally unclear to depend on
What would change the summary?
  • Use as dependency ConcernsMixed if: publish a permissive license (MIT, Apache-2.0, etc.)
  • Fork & modify ConcernsMixed if: add a LICENSE file
  • Deploy as-is ConcernsMixed if: add a LICENSE file

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Great to learn from" badge

Paste into your README — live-updates from the latest cached analysis.

RepoPilot: Great to learn from
[![RepoPilot: Great to learn from](https://repopilot.app/api/badge/bohdanorlov/ios-developer-roadmap?axis=learn)](https://repopilot.app/r/bohdanorlov/ios-developer-roadmap)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card (1200×630)

This card auto-renders when someone shares https://repopilot.app/r/bohdanorlov/ios-developer-roadmap on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: BohdanOrlov/iOS-Developer-Roadmap

Generated by RepoPilot · 2026-05-10 · Source

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/BohdanOrlov/iOS-Developer-Roadmap shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

🎯Verdict

AVOID — Stale and unlicensed — last commit 2y ago

  • 13 active contributors
  • Distributed ownership (top contributor 43% of recent commits)
  • CI configured
  • Tests present
  • ⚠ Stale — last commit 2y ago
  • ⚠ No license — legally unclear to depend on

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live BohdanOrlov/iOS-Developer-Roadmap repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/BohdanOrlov/iOS-Developer-Roadmap.

What it runs against: a local clone of BohdanOrlov/iOS-Developer-Roadmap — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in BohdanOrlov/iOS-Developer-Roadmap | Confirms the artifact applies here, not a fork | | 2 | Default branch master exists | Catches branch renames | | 3 | 5 critical file paths still exist | Catches refactors that moved load-bearing code | | 4 | Last commit ≤ 866 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>BohdanOrlov/iOS-Developer-Roadmap</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of BohdanOrlov/iOS-Developer-Roadmap. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/BohdanOrlov/iOS-Developer-Roadmap.git
#   cd iOS-Developer-Roadmap
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of BohdanOrlov/iOS-Developer-Roadmap and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "BohdanOrlov/iOS-Developer-Roadmap(\\.git)?\\b" \\
  && ok "origin remote is BohdanOrlov/iOS-Developer-Roadmap" \\
  || miss "origin remote is not BohdanOrlov/iOS-Developer-Roadmap (artifact may be from a fork)"

# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
  && ok "default branch master exists" \\
  || miss "default branch master no longer exists"

# 4. Critical files exist
test -f "README.md" \\
  && ok "README.md" \\
  || miss "missing critical file: README.md"
test -f "RoadmapProject/Script/Content.yml" \\
  && ok "RoadmapProject/Script/Content.yml" \\
  || miss "missing critical file: RoadmapProject/Script/Content.yml"
test -f "RoadmapProject/Script/Generated/ROADMAP.md" \\
  && ok "RoadmapProject/Script/Generated/ROADMAP.md" \\
  || miss "missing critical file: RoadmapProject/Script/Generated/ROADMAP.md"
test -f "RoadmapProject/Script/Generated/Resources/iOS_Developer" \\
  && ok "RoadmapProject/Script/Generated/Resources/iOS_Developer" \\
  || miss "missing critical file: RoadmapProject/Script/Generated/Resources/iOS_Developer"
test -f "HowTo/HOWTOPR.md" \\
  && ok "HowTo/HOWTOPR.md" \\
  || miss "missing critical file: HowTo/HOWTOPR.md"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 866 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~836d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/BohdanOrlov/iOS-Developer-Roadmap"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

TL;DR

A structured, maintainable iOS developer learning roadmap that generates visual tree diagrams, markdown guides, and interactive checklists from a single YAML content source file. It serves as a comprehensive map of topics from CS fundamentals (algorithms, data structures) through practical iOS frameworks (UIKit, Core Data, RxSwift) that developers need to master. Single-source-of-truth architecture: RoadmapProject/Script/Content.yml is the human-readable master file. A generation script reads this and outputs multiple formats: Generated/ROADMAP.md (markdown), Generated/ROADMAP.png (visual tree), Generated/ESSENTIALROADMAP.png (filtered essential topics), and a hierarchical Generated/Resources/ directory with topic-specific study materials. README.md is also auto-generated.

👥Who it's for

iOS developers at all levels—beginners starting with 'Getting started' section, intermediate developers brushing up on specific frameworks, and experienced developers preparing for technical interviews. Also useful for iOS bootcamp instructors and hiring managers who need structured interview question pools.

🌱Maturity & risk

Actively maintained with Travis CI integration for automated generation on each commit. The project is well-documented with contribution guidelines and a clear roadmap of completed features (content file, README generation, image generation). Single maintainer (@BohdanOrlov) but stable for use as a study reference rather than a code library.

Low-risk as a study resource: no external dependencies beyond Travis CI, and the core content is human-curated YAML. Risks are primarily maintenance-related (single maintainer, last commit date not visible in provided data) and the generation script itself has acknowledged gaps (error handling for YAML parsing, Yaml format validation, file I/O errors). Not suitable as a production system.

Active areas of work

Active maintenance of content (items marked complete in TODO include content file creation, README generation, tree image generation, and Travis CI integration). Open work includes improving the generation script's error handling and validation (YAML format violations, parsing errors, file I/O robustness) and preventing failed generation from deploying.

🚀Get running

Clone and explore: git clone https://github.com/BohdanOrlov/iOS-Developer-Roadmap.git && cd iOS-Developer-Roadmap && open RoadmapProject/Roadmap.xcodeproj. To regenerate outputs from Content.yml, examine the Shell scripts in RoadmapProject/Script/ (exact invocation not visible in file list, but documented in the project).

Daily commands: The generation is automated via Travis CI on each commit. To manually regenerate: build and run the Swift script in RoadmapProject/Script/ (specific command not documented in provided snippet, but the Xcode project likely contains a Run Script build phase). Output appears in RoadmapProject/Script/Generated/.

🗺️Map of the codebase

  • README.md — Primary entry point explaining the roadmap's purpose, audience, and how to navigate the learning progression for iOS development.
  • RoadmapProject/Script/Content.yml — Human-readable source of truth containing all roadmap topics and their hierarchical structure that generates all other outputs.
  • RoadmapProject/Script/Generated/ROADMAP.md — Authoritative markdown version of the complete roadmap auto-generated from Content.yml, serving as the canonical reference for all topics.
  • RoadmapProject/Script/Generated/Resources/iOS_Developer — Root directory containing the hierarchical resource collection organized by topic, which contributors must understand to add new learning materials.
  • HowTo/HOWTOPR.md — Contribution guidelines for pull requests that all contributors must follow when adding topics or resources to the roadmap.
  • RoadmapProject/Roadmap.xcodeproj/project.pbxproj — Xcode project configuration file that defines the build system and asset compilation for the roadmap visualization tools.
  • .travis.yml — CI/CD configuration that automates validation and generation of roadmap artifacts on every commit.

🛠️How to make changes

Add a New Roadmap Topic

  1. Edit the Content.yml file to add your new topic in the appropriate hierarchical section under either 'Practical_knowledge' or 'Computer_Science_knowledge' (RoadmapProject/Script/Content.yml)
  2. Create a new RESOURCES.md file in the corresponding generated resources directory structure following the naming convention (RoadmapProject/Script/Generated/Resources/iOS_Developer/<category>/<topic>/RESOURCES.md)
  3. Add curated learning links and references to the RESOURCES.md file you created (RoadmapProject/Script/Generated/Resources/iOS_Developer/<category>/<topic>/RESOURCES.md)
  4. Run the build script to regenerate ROADMAP.md, ROADMAP.png, and other artifacts from Content.yml (RoadmapProject/Script)
  5. Commit changes and open a PR following guidelines in HOWTOPR.md (HowTo/HOWTOPR.md)

Update Learning Resources for an Existing Topic

  1. Locate the RESOURCES.md file for your target topic in the generated resources hierarchy (RoadmapProject/Script/Generated/Resources/iOS_Developer/<category>/<topic>/RESOURCES.md)
  2. Add new article links, tutorial links, or reference material following the existing format (RoadmapProject/Script/Generated/Resources/iOS_Developer/<category>/<topic>/RESOURCES.md)
  3. Test that the markdown renders correctly and all links are valid (RoadmapProject/Script/Generated/Resources/iOS_Developer/<category>/<topic>/RESOURCES.md)
  4. Open a pull request with your changes adhering to HOWTOPR.md guidelines (HowTo/HOWTOPR.md)

Regenerate All Roadmap Outputs

  1. Ensure Content.yml has been updated with all desired topic changes (RoadmapProject/Script/Content.yml)
  2. Execute the roadmap generation script (typically a Python or Swift tool in the Script directory) (RoadmapProject/Script)
  3. Verify that ROADMAP.md, ROADMAP.png, ESSENTIALROADMAP.png, and text versions are all updated (RoadmapProject/Script/Generated/ROADMAP.md)
  4. Commit the generated artifacts along with Content.yml changes (RoadmapProject/Script/Generated)

🔧Why these technologies

  • YAML (Content.yml) — Human-readable, hierarchical configuration format that serves as single source of truth for all roadmap topics without requiring code changes.
  • Markdown (ROADMAP.md, RESOURCES.md) — Platform-agnostic, version-control-friendly format that renders on GitHub natively and is easy for developers to read and contribute to.
  • PNG/Image generation — Visual tree representation makes the roadmap structure immediately understandable at a glance, supporting multiple learning styles.
  • Xcode Project — Enables the roadmap itself to be a live iOS development reference and allows tooling to be written in Swift for iOS developers.
  • Travis CI — Automates validation and regeneration of artifacts on every commit, ensuring consistency and preventing manual generation errors.

⚖️Trade-offs already made

  • Hierarchical directory structure for resources vs. flat database

    • Why: Makes the repository itself browsable and understandable as a visual table of contents; easier for contributors to discover where to add content.
    • Consequence: Requires careful naming conventions and directory management; paths can become long and nested.
  • Auto-generated outputs committed to repository vs. generated on-demand

    • Why: Ensures PNG visualizations and markdown versions are always in sync with Content.yml and available without build steps; improves GitHub browsing experience.
    • Consequence: Larger repository size; requires discipline to run generation script before commit; potential for drift if manual edits made to generated files.
  • External resource links only vs. hosting learning content directly

    • Why: Keeps repository lightweight and avoids duplicating content; allows curation of best existing resources; reduces maintenance burden.
    • Consequence: Dependent on external link stability; roadmap becomes outdated if linked resources disappear; no control over content quality.
  • Checkbox tracking via file edits vs. centralized progress system

    • Why: Leverages Git as the progress tracking mechanism; aligns with developer workflows; no server infrastructure needed.
    • Consequence: Progress is per-clone, not per-person; requires manual merge conflict resolution if multiple users checking same boxes.

🚫Non-goals (don't propose these)

  • Does not provide actual video tutorials or interactive learning experiences—only curates and links to external resources.
  • Does not track individual user progress or provide authentication—purely a static reference guide.
  • Does not execute code or provide interactive playgrounds—intended as a reference roadmap, not a development environment.
  • Does not provide real-time updates or community forums—is a snapshot in time (2018/2020) and requires manual contribution for updates.
  • Does not handle Swift or Objective-C compilation—visualization and documentation only, not a build system.

🪤Traps & gotchas

  1. Content.yml YAML syntax is strict: malformed YAML in the content file will fail the generation script silently (error handling is incomplete per TODO); validate YAML syntax before committing. 2. Generation script limitations: Image generation (PNG rendering of tree structures) may fail on certain topic names with special characters—review any new topics visually after generation. 3. Manual markdown edits conflict with regeneration: checkboxes ticked in ROADMAP.md will be overwritten on regeneration, so the checkbox persistence mechanism is separate (see HowTo/HOWTOCHECKBOX.md—likely stored in a fork or branch). 4. Travis CI deployment condition unclear: the TODO notes 'make sure Travis doesn't deploy if generation script fails,' implying current behavior may deploy broken builds.

🏗️Architecture

💡Concepts to learn

  • SwiftRocks/SwiftRocks.github.io — Companion learning resource focused on intermediate-to-advanced Swift and iOS concepts, complementing the foundational roadmap
  • BohdanOrlov/ios-skills-matrix — Sibling project by the same maintainer offering a skills evaluation matrix for iOS developers, referenced in this repo's README
  • raywenderlich/swift-algorithm-club — Covers algorithms and data structures in Swift—aligns with 'Computer_Science_knowledge' branch of this roadmap with runnable examples
  • vsouza/awesome-ios — Curated list of iOS libraries and tools organized by category; can supplement the 'Practical_knowledge' resource links in this roadmap

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add automated validation script for Content.yml structure and broken resource links

The repo generates roadmap content from RoadmapProject/Script/Content.yml, but there's no validation pipeline to catch malformed YAML or broken/missing RESOURCES.md files. This prevents quality regressions as contributors add new topics. A validation script would ensure every topic node has required fields and every referenced resource file exists before generation.

  • [ ] Create RoadmapProject/Script/validate.py or validate.swift to parse Content.yml and verify structure
  • [ ] Check that each topic has required fields (title, description, etc.)
  • [ ] Validate that every topic with resources points to an existing RESOURCES.md file in RoadmapProject/Script/Generated/Resources/
  • [ ] Add validation step to .travis.yml before the generation script runs
  • [ ] Document validation rules in HowTo/HOWTOPR.md with examples

Add CI workflow to regenerate and validate roadmap artifacts on PR

The repo has RoadmapProject/Script/Generated/ containing auto-generated files (ROADMAP.md, ROADMAP.png, ROADMAP.txt, and all RESOURCES.md files), but .travis.yml doesn't regenerate these artifacts. Contributors may forget to regenerate after editing Content.yml, causing mismatches. A .travis.yml update should run the generation script and verify no uncommitted changes exist.

  • [ ] Update .travis.yml to call the content generation script (identify the Swift/Python generator in RoadmapProject/Script/)
  • [ ] Add a CI step to compare generated artifacts against committed versions and fail if they differ
  • [ ] Document in HowTo/HOWTOPR.md that contributors must regenerate artifacts locally before pushing
  • [ ] Add a comment template for bot to suggest regeneration when artifacts are out of sync

Create missing RESOURCES.md files for empty topic branches in the roadmap tree

The file structure shows many directories under RoadmapProject/Script/Generated/Resources/ that likely have corresponding topics in Content.yml but no RESOURCES.md file. For example, layout categories under UIKit/Layout may be incomplete. Identifying and filling these gaps ensures every topic node has learning material, improving user experience.

  • [ ] Run the content generator and audit RoadmapProject/Script/Generated/Resources/ for directories without RESOURCES.md
  • [ ] Cross-reference missing files against Content.yml to confirm these are active topics
  • [ ] Create stub RESOURCES.md files with proper formatting (matching style in existing files like Algorithms/RESOURCES.md)
  • [ ] Add links to at least 2-3 high-quality resources for each missing topic (follow existing resource quality standards)
  • [ ] Validate changes against the new validation script from PR #1

🌿Good first issues

  • Add error reporting to the generation script: enhance RoadmapProject/Script/ build phase to output detailed YAML parse failures, file I/O errors, and image generation errors instead of silently failing (addresses TODO: 'output Yaml format violation errors' and 'handle errors of parsing Yaml into Topics and Resources').
  • Create missing study material resources: many RESOURCES.md files under RoadmapProject/Script/Generated/Resources/iOS_Developer/ are stubs; add curated learning links for high-value topics like Core Data, RxSwift, and System Design following the pattern in existing files.
  • Implement Travis CI validation gate: add a build phase to .travis.yml that fails the PR if generation script exits non-zero, preventing broken roadmap deployment (directly addresses TODO: 'make sure Travis doesn't deploy if generation script fails').

Top contributors

Click to expand

📝Recent commits

Click to expand
  • 1f5a635 — Merge pull request #49 from WladmirJunior/patch-1 (BohdanOrlov)
  • 4caf523 — Merge pull request #48 from darhonbek/patch-2 (BohdanOrlov)
  • 7b057ab — Merge pull request #47 from darhonbek/patch-1 (BohdanOrlov)
  • 4fcd778 — Update README.md (WladmirJunior)
  • 7b72269 — Update ROADMAP.md (darhonbek)
  • 86c0542 — Update RESOURCES.md (darhonbek)
  • 872f904 — Merge pull request #45 from apple-avadhesh/Update (BohdanOrlov)
  • 863d3c8 — Update Reactive Programming (avadhesh12345678)
  • 65b2da8 — Merge pull request #44 from dgenyk/master (BohdanOrlov)
  • 10b95d7 — Updated to Swift 5.0 (dgenyk)

🔒Security observations

This is an educational iOS developer roadmap repository with minimal security risk. It primarily contains documentation, markdown files, and generated resource content. No dependencies file was provided for analysis, and the codebase structure shows no evidence of hardcoded secrets, injection vulnerabilities, or dangerous patterns. The repository follows good practices by including .gitignore and .gitattributes files. Minor recommendations exist around general best practices.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Concerning signals · BohdanOrlov/iOS-Developer-Roadmap — RepoPilot