No description
  • Swift 97.9%
  • Shell 2.1%
Find a file
Nick Ustinov 7605a902c6
Some checks are pending
Tests / test (push) Waiting to run
Fix stale test expectations for iCloud sync default and removed GitHub theme
2026-02-19 13:27:07 +00:00
.github/workflows Add EditorTheme and EditorCoordinator tests, CI workflow, README badges 2026-02-19 13:10:31 +00:00
docs Migrate iCloud sync from KVS to CKSyncEngine 2026-02-16 11:53:30 +00:00
scripts Add localization for 12 languages with Lokalise integration 2026-02-17 22:37:41 +00:00
Sources Add compile-time guard for iOS 26 API to fix CI build 2026-02-19 13:16:06 +00:00
Tests Fix stale test expectations for iCloud sync default and removed GitHub theme 2026-02-19 13:27:07 +00:00
.gitignore Add localization for 12 languages with Lokalise integration 2026-02-17 22:37:41 +00:00
CHANGELOG.md Fix list toggles on empty last line without trailing newline 2026-02-18 09:33:12 +00:00
CLAUDE.md Add localization for 12 languages with Lokalise integration 2026-02-17 22:37:41 +00:00
lokalise.yml.example Add localization for 12 languages with Lokalise integration 2026-02-17 22:37:41 +00:00
project.yml Fix list toggles on empty last line without trailing newline 2026-02-18 09:33:12 +00:00
README.md Remove release badge from README 2026-02-19 13:12:12 +00:00

Itsypad for iOS

Tests License: MIT Swift 5.9 iOS 17+

The iOS companion to Itsypad a tiny, fast scratchpad and clipboard manager. Syncs your scratch tabs and clipboard history across all your devices via iCloud.

Features

  • Multi-tab scratchpad with session persistence
  • Clipboard history (up to 1,000 entries) with search
  • iCloud sync with the macOS version (last-modified-wins conflict resolution)
  • Syntax highlighting via highlight.js (26+ languages)
  • 9 colour themes with light/dark variants
  • Bullet lists, numbered lists, and checklists with auto-continuation
  • Checkbox tap-to-toggle
  • Tab grid expose view
  • Configurable indentation (spaces/tabs, width)
  • Auto-language detection
  • Hardware keyboard support on iPad (Cmd+D duplicate line, Cmd+Return toggle checkbox, Cmd+Shift+L toggle checklist, Cmd+S save, Cmd+Shift+S save as)
  • 12 languages: English, Spanish, French, German, Russian, Japanese, Simplified Chinese, Traditional Chinese, Korean, Portuguese (Brazil), Italian, Polish

Requirements

  • iOS 17.0+
  • Xcode 16+
  • XcodeGen for project generation

Setup

xcodegen generate
open itsypad-ios.xcodeproj

Localization

Itsypad uses a Swift String Catalog (Sources/Resources/Localizable.xcstrings) for localization. Translations are managed via Lokalise.

Languages: English (base), Spanish, French, German, Russian, Japanese, Simplified Chinese, Traditional Chinese, Korean, Portuguese (Brazil), Italian, Polish.

Setup

brew tap lokalise/cli-2
brew install lokalise2
cp lokalise.yml.example lokalise.yml
# Edit lokalise.yml and add your API token

Push source strings to Lokalise

Extracts English keys and values from the xcstrings file and uploads to Lokalise:

scripts/push-translations.sh

Pull translations from Lokalise

Downloads all translations from Lokalise and merges them into the xcstrings file:

scripts/pull-translations.sh

Adding new strings

All user-facing strings use String(localized:defaultValue:) with a structured key:

Toggle(String(localized: "settings.appearance.word_wrap", defaultValue: "Word wrap"), isOn: $store.wordWrap)
Section(String(localized: "settings.spacing.title", defaultValue: "Spacing")) { ... }

Key format: {area}.{context}.{name} e.g. menu.file.*, alert.save_changes.*, settings.appearance.*, clipboard.*, tab.context.*.

Workflow after adding new strings

  1. Build the project Xcode auto-populates new keys in Localizable.xcstrings
  2. Push source strings to Lokalise: scripts/push-translations.sh
  3. Translate in Lokalise (or let translators handle it)
  4. Pull translations back: scripts/pull-translations.sh
  5. Build and verify

Architecture

SwiftUI + UIKit hybrid. SwiftUI handles navigation and settings, UIKit's UITextView powers the editor for full control over text input, syntax highlighting, and keyboard interaction.

Module Purpose
App/ App entry, main layout, tab store
Editor/ Text editor, syntax highlighting, list handling
Settings/ Settings UI and persistence
TabGrid/ Tab grid expose view
Clipboard/ Clipboard history and iCloud sync