RepoPilotOpen in app →

pNre/ExSwift

A set of Swift extensions for standard types and classes.

Mixed

Stale — last commit 7y ago

worst of 4 axes
Use as dependencyConcerns

non-standard license (Other); last commit was 7y ago…

Fork & modifyHealthy

Has a license, tests, and CI — clean foundation to fork and modify.

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isHealthy

No critical CVEs, sane security posture — runnable as-is.

  • 15 active contributors
  • Other licensed
  • CI configured
Show 4 more →
  • Stale — last commit 7y ago
  • Concentrated ownership — top contributor handles 65% of recent commits
  • Non-standard license (Other) — review terms
  • No test directory detected
What would change the summary?
  • Use as dependency ConcernsMixed if: clarify license terms

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 "Forkable" badge

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

Variant:
RepoPilot: Forkable
[![RepoPilot: Forkable](https://repopilot.app/api/badge/pnre/exswift?axis=fork)](https://repopilot.app/r/pnre/exswift)

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/pnre/exswift on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: pNre/ExSwift

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/pNre/ExSwift 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

WAIT — Stale — last commit 7y ago

  • 15 active contributors
  • Other licensed
  • CI configured
  • ⚠ Stale — last commit 7y ago
  • ⚠ Concentrated ownership — top contributor handles 65% of recent commits
  • ⚠ Non-standard license (Other) — review terms
  • ⚠ No test directory detected

<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 pNre/ExSwift repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/pNre/ExSwift.

What it runs against: a local clone of pNre/ExSwift — 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 pNre/ExSwift | Confirms the artifact applies here, not a fork | | 2 | License is still Other | Catches relicense before you depend on it | | 3 | Default branch master exists | Catches branch renames | | 4 | Last commit ≤ 2675 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>pNre/ExSwift</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of pNre/ExSwift. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/pNre/ExSwift.git
#   cd ExSwift
#
# 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 pNre/ExSwift and re-run."
  exit 2
fi

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

# 2. License matches what RepoPilot saw
(grep -qiE "^(Other)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"Other\"" package.json 2>/dev/null) \\
  && ok "license is Other" \\
  || miss "license drift — was Other at generation time"

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

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 2675 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~2645d)"
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/pNre/ExSwift"
  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

ExSwift is a collection of Swift extensions that augment built-in types (Array, String, Dictionary, Int, Float, Double, Range, NSArray, NSDate) with functional programming utilities and convenience methods. It adds chainable operations like takeWhile(), skipWhile(), difference(), and intersection() to standard Swift types, reducing boilerplate for common data transformations without requiring external dependencies. Flat extension library: source code in ExSwift/ folder contains one file per type extended (Array.swift, String.swift, Dictionary.swift, Int.swift, Float.swift, Double.swift, NSArray.swift, NSDate.swift, Range.swift, Boolean.swift, Character.swift, Sequence.swift). Tests mirror this structure in ExSwiftTests/ with one test file per type (ArrayExtensionsTests.swift, etc.). Xcode projects defined in ExSwift.xcodeproj/ with separate schemes for Mac and iOS targets.

👥Who it's for

Swift developers (iOS, macOS) building applications circa 2015–2016 who want functional-style collection operations and utility methods on built-in types without pulling in heavy frameworks. Target audience: engineers working on data transformation, filtering, and validation tasks who prefer method chaining over loops.

🌱Maturity & risk

This is an actively-developed but mature library from the Swift 2 era (repo has 186KB of Swift code and comprehensive test coverage in ExSwiftTests/). It has CI via Travis CI (.travis.yml present) and is distributed via CocoaPods (ExSwift.podspec). However, no recent commit dates are visible in the metadata, suggesting maintenance may be dormant—typical for a pre-Swift 3 library that solved concrete problems but is less critical with modern Swift's expanded standard library.

High risk for new projects: this library targets Swift 2/early Swift 3 era and predates many standard library improvements (e.g., Sequence protocol enhancements in Swift 4+). It explicitly states in the README that Cocoapods integration doesn't work due to Xcode errors, forcing manual submodule + copy installation. No visibility into open issue count, but the lack of recent activity and language drift (Swift has since natively added many of these methods) means you'll face compatibility headaches with current Xcode/Swift versions.

Active areas of work

No active development signals visible in provided metadata. The CHANGELOG.md, .travis.yml CI config, and structured test suite suggest this was actively maintained at release, but no PR/issue activity, recent commits, or milestones are mentioned in the file listing. This appears to be a stable, maintenance-mode library.

🚀Get running

Clone and add as a submodule: git clone --recursive https://github.com/pNre/ExSwift.git. Then open ExSwift.xcodeproj in Xcode, select the iOS or Mac scheme, and drag the ExSwift/ source folder into your target's file navigator. No package manager install; manual integration only due to the Cocoapods incompatibility noted in the README.

Daily commands: Open ExSwift.xcodeproj in Xcode, select ExSwift-iOS or ExSwift-Mac scheme, press Cmd+U to run the test suite in ExSwiftTests/, or Cmd+B to build the framework. No build scripts, no CLI tools, no runtime server needed.

🗺️Map of the codebase

  • ExSwift/Array.swift: Core file containing Array extension methods (first, last, take, takeWhile, skip, skipWhile, difference, intersection, remove, at, get, etc.) — the most feature-rich type in the library.
  • ExSwift/String.swift: String extensions for common text operations (length, substring, repetition, etc.) used across iOS/macOS apps.
  • ExSwift/Dictionary.swift: Dictionary convenience methods for safe access, merging, filtering, and transformation.
  • ExSwiftTests/ArrayExtensionsTests.swift: Comprehensive test suite validating Array extension behavior; reference for test structure when adding new features.
  • ExSwift.xcodeproj/xcshareddata/xcschemes: Xcode schemes (ExSwift-iOS.xcscheme, ExSwift-Mac.xcscheme) define build configurations for dual platform support.
  • README.md: Official documentation listing all extension methods with signatures and examples; critical reference for API design and usage patterns.
  • ExSwift.podspec: Pod specification defining library metadata, version, and dependencies; required for distribution (though Cocoapods integration is broken per README).

🛠️How to make changes

To add a new method to a type: edit the corresponding file in ExSwift/ (e.g., ExSwift/Array.swift for Array extensions). Write the extension method, then add a corresponding test in ExSwiftTests/ (e.g., ArrayExtensionsTests.swift). Follow the existing naming pattern (e.g., takeFirst(), skipWhile()). No configuration files to update; just add code and test.

🪤Traps & gotchas

  1. Installation is manual only: The README explicitly states Cocoapods integration fails due to Xcode errors—you must use git submodule + drag-and-drop source into Xcode, not pod install. 2. Swift version mismatch: This library targets Swift 2/early Swift 3 and uses now-deprecated patterns (e.g., SequenceOf); many methods are now natively available in Swift 4+ standard library, causing naming conflicts. 3. NSArray/NSDate extensions use ObjC interop: These files bridge to Foundation and may behave unexpectedly with Swift value types. 4. No tvOS/watchOS targets: Despite having Mac/iOS schemes, support for other Apple platforms is absent.

💡Concepts to learn

  • apple/swift-algorithms — Official Swift Collections package providing many functional operations (takeWhile, drop, etc.) natively; modern replacement for ExSwift on Swift 5.5+.
  • ReactiveX/RxSwift — Reactive extensions for Swift offering similar functional chaining patterns but for asynchronous/event-driven code; complements ExSwift for modern reactive apps.
  • Alamofire/Alamofire — HTTP networking library often used alongside utility libraries like ExSwift in iOS apps; common dependency pairing for complete app stacks.
  • SwiftyJSON/SwiftyJSON — Lightweight JSON parsing library; often paired with ExSwift for data transformation pipelines in API-driven iOS apps.
  • raywenderlich/swift-algorithm-club — Educational repo on algorithms and data structures in Swift; ExSwift methods like difference() and intersection() implement patterns documented here.

🪄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 comprehensive test coverage for String.swift extensions

StringExtensionsTests.swift exists but the README shows only partial documentation. String manipulation is a core feature of ExSwift, and given the breadth of standard extensions (case conversion, trimming, splitting, etc.), there are likely edge cases and newer Swift versions not covered by tests. This would catch regressions and validate all documented String methods work correctly.

  • [ ] Review all public methods in ExSwift/String.swift
  • [ ] Compare against ExSwiftTests/StringExtensionsTests.swift to identify untested methods
  • [ ] Add test cases for edge cases: empty strings, Unicode characters, special characters
  • [ ] Add tests for each documented String extension in the README

Migrate .travis.yml CI to GitHub Actions workflow

The repo uses .travis.yml for Travis CI, which is outdated infrastructure. GitHub Actions is now the standard for GitHub projects and provides better integration, faster builds, and no external service dependency. This would modernize the project's CI/CD pipeline and ensure better visibility of test results to contributors.

  • [ ] Create .github/workflows/test.yml with iOS and macOS test matrices
  • [ ] Configure the workflow to run ExSwiftTests target for both platforms (matching .xcschemes)
  • [ ] Remove or deprecate .travis.yml with a note in CHANGELOG.md
  • [ ] Test the workflow by creating a draft PR and verifying all checks pass

Complete the README documentation for Array extensions with full method signatures and examples

The README snippet cuts off at Array documentation. ExSwift/Array.swift likely contains many extension methods, but contributors and users cannot discover them from the README. A complete API reference for Array (similar to what should exist for other types) would improve discoverability and reduce support burden.

  • [ ] Audit all public methods in ExSwift/Array.swift (e.g., takeFirst, drop, etc.)
  • [ ] Add a dedicated '## Array' section to README.md with subsections for instance/class methods
  • [ ] Include method signature, brief description, and code example for each extension
  • [ ] Cross-reference with existing test cases in ExSwiftTests/ArrayExtensionsTests.swift as examples

🌿Good first issues

  • Add unit tests for NSDate.swift methods: ExSwiftTests/NSDateExtensionsTests.swift exists but may lack comprehensive coverage for date arithmetic, formatting, and edge cases like leap years.
  • Document Range.swift extension methods in README: The Range type has instance and class methods but is mentioned only briefly in the table of contents; add examples to the README wiki or inline.
  • Verify Sequence.swift compatibility with Swift 4+: The file exists but SequenceOf is deprecated in Swift 3+; audit and propose modernization (switch to AnySequence or remove if native stdlib suffices).

Top contributors

Click to expand

📝Recent commits

Click to expand
  • 864c6a2 — Merge pull request #124 from skywinder/regex-contains-match (pNre)
  • f5460a1 — Add replaceMatches method (skywinder)
  • dec27c8 — Add containsMatch method (skywinder)
  • b3482cc — Merge pull request #123 from nebhale/travis-swift-1.2 (pNre)
  • e1bd434 — Travis Configuration (nebhale)
  • bae9f37 — Merge pull request #121 from DivineDominion/patch-2 (pNre)
  • 00d8bae — Merge pull request #120 from DivineDominion/patch-1 (pNre)
  • 5a426f5 — Merge pull request #119 from emmceemoore/patch-1 (pNre)
  • c47e029 — Update Sequence.swift (DivineDominion)
  • f9e672e — Update Int.swift (DivineDominion)

🔒Security observations

ExSwift is a utility library with relatively low attack surface as it extends standard Swift types. No critical vulnerabilities detected. Primary concerns are around build infrastructure modernization (dependency management), lack of formal security processes, and absence of security-focused testing practices. The codebase appears to be a straightforward utility library without external dependencies, network calls, or data persistence, which limits exposure. Recommendations focus on improving development practices and supply chain security through modern tooling and explicit security policies.

  • Low · Outdated Project Structure and Build Configuration — ExSwift.xcodeproj, Podfile, README.md. The project uses older Xcode project configuration (.pbxproj) without evidence of modern dependency management. The README mentions Cocoapods integration issues and recommends manual submodule/copy approach, which reduces supply chain security visibility and makes dependency tracking difficult. Fix: Migrate to Swift Package Manager (SPM) for modern dependency management. Use version pinning and lock files to ensure reproducible builds. Implement dependency scanning with tools like OWASP Dependency-Check.
  • Low · Missing Security Headers and Configuration — .travis.yml, Root directory. No evidence of security configuration files (.travis.yml exists but content not provided). Missing SECURITY.md file for reporting vulnerabilities, no code signing verification, and no certificate pinning strategy visible for any network operations. Fix: Add SECURITY.md file with vulnerability reporting instructions. Implement code signing requirements. Document security best practices for contributors.
  • Low · Limited Visibility into Test Coverage and Security Testing — ExSwiftTests/. Test files exist but no evidence of security-focused unit tests, fuzzing, or integration tests. No visible security testing practices documented. Fix: Add security-focused test cases including boundary testing, type safety verification, and memory safety checks. Use tools like SwiftLint and static analysis.

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.

Mixed signals · pNre/ExSwift — RepoPilot