Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"extraKnownMarketplaces": {
"futured-marketplace": {
"source": {
"source": "github",
"repo": "futuredapp/FTClaudeMarketplace"
}
}
},
"enabledPlugins": {
"futuredkit-plugin@futured-marketplace": true,
"ios-networking-plugin@futured-marketplace": true,
"ios-accessibility-plugin@futured-marketplace": true,
"ios-performance-plugin@futured-marketplace": true,
"figma-to-xcode-plugin@futured-marketplace": true,
"testing-plugin@futured-marketplace": true,
"git-conventions-plugin@futured-marketplace": true,
"handbook-plugin@futured-marketplace": true,
"interview-plugin@futured-marketplace": true,
"ios-review-plugin@futured-marketplace": true
},
"permissions": {
"allow": [
"Bash(xcodebuild:*)",
"Bash(xcrun simctl:*)",
"Bash(swiftlint:*)",
"Bash(swiftformat:*)",
"Bash(bundle exec fastlane provisioning)",
"Bash(bundle exec fastlane test)",
"Bash(git status:*)",
"Bash(git diff:*)",
"Bash(git log:*)",
"Bash(git show:*)",
"Bash(git blame:*)",
"Bash(gh pr view:*)",
"Bash(gh pr diff:*)",
"Bash(gh pr list:*)"
]
}
}
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,10 @@ fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
fastlane/README.md

# Local build configuration (FuturedKit app template; secrets live here)
Local.xcconfig

# Coding agents — personal overrides stay local
CLAUDE.local.md
.claude/settings.local.json
8 changes: 8 additions & 0 deletions .swiftformat
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
--swiftversion 6.3
--exclude fastlane,vendor
--header ignore
--extensionacl on-declarations
--trailingcommas never
--decimalgrouping 3,4
--modifierorder isolated,nonisolated,private,fileprivate,internal,package,public,open,private(set),fileprivate(set),internal(set),package(set),public(set),final,convenience
--disable swiftTestingTestCaseNames,redundantSendable,wrapMultilineStatementBraces
42 changes: 41 additions & 1 deletion .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ opt_in_rules:
- closure_end_indentation
- closure_spacing
- collection_alignment
- conditional_returns_on_newline
- contains_over_filter_count
- contains_over_filter_is_empty
- contains_over_first_not_nil
Expand Down Expand Up @@ -101,3 +100,44 @@ function_parameter_count: 5
large_tuple:
warning: 3
error: 4

# Futured conventions SwiftLint cannot express with built-in rules (see AGENTS.md)
custom_rules:
non_void_return_on_newline:
name: "Non-void return on newline"
regex: '\belse\s*\{\s*return\s+[^}\n]+\}'
message: "Place a non-void return on its own line."
severity: warning
no_task_detached:
name: "Avoid Task.detached"
regex: '\bTask\.detached\b'
message: "Use @concurrent functions instead of Task.detached (see AGENTS.md)."
severity: warning
no_main_actor_run:
name: "Avoid MainActor.run"
regex: '\bMainActor\.run\b'
message: "Awaiting hops back to MainActor automatically — MainActor.run is unnecessary."
severity: warning
no_swiftui_spacer_for_alignment:
name: "Avoid Spacer for alignment"
regex: '^\s*Spacer\(\)\s*$'
message: "Prefer .frame(maxWidth:alignment:) over Spacer for alignment in SwiftUI."
severity: warning
no_inline_modifier_after_brace:
name: "Modifier on new line after }"
regex: '^\s*\}\.[a-zA-Z]\w*\s*[\(\{]'
message: "Place SwiftUI/closure modifiers on a new line after the closing brace."
severity: warning
no_orphan_argument_label:
name: "Argument label on its own line"
regex: '^\s+(?!case\b|default\b)[a-zA-Z_]\w*:\s*$'
match_kinds:
- argument
- identifier
message: "Place the argument value on the same line as its label."
severity: warning
no_mark_dash:
name: "MARK without dash"
regex: '//[ \t]*MARK:[ \t]*-'
message: "Use '// MARK: Section' without the leading dash (project convention)."
severity: warning
185 changes: 185 additions & 0 deletions AGENTS.md

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions Brewfile
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
brew "imagemagick"
brew "librsvg"
brew "swiftlint"
brew "swiftformat"
1 change: 1 addition & 0 deletions CLAUDE.md
20 changes: 12 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

- Deadline: ~~**--. --. ----**~~
- Next release: ~~**1.0.0**~~
- Deployment target: ~~**16.0**~~
- Deployment target: ~~**17.0**~~
- Bundle identifiers: ~~`app.futured.project`, `app.futured.project.beta, `app.customer.project``~~
- Supports: ~~**Dark mode, Landscape orientation, iPadOS, Accessibility**~~
- Design: ~~Figma (add link)~~
Expand All @@ -24,19 +24,22 @@

### Tools

- Language: ~~**Swift 5.10**~~
- IDE: ~~**Xcode 16.1**~~
- Language: ~~**Swift 6.3**~~
- IDE: ~~**Xcode 27.0**~~
- Dependency management: ~~**[Swift package manager](https://swift.org/package-manager/)**~~
- Command line tools: **[Fastlane](https://docs.fastlane.tools)**
- Code style:
- **[SwiftLint](https://swift.org/package-manager/)**
- **[SwiftLint](https://github.com/realm/SwiftLint)** (`.swiftlint.yml`)
- **[SwiftFormat](https://github.com/nicklockwood/SwiftFormat)** (`.swiftformat`)
- Coding agents: **[AGENTS.md](AGENTS.md)** (`CLAUDE.md` is a symlink to it) — architecture, conventions and the Futured Claude skills to use
- ~~Localizations: Czech, English~~

### Dependencies

- **[FuturedKit](https://github.com/futuredapp/FuturedKit)** (`FuturedArchitecture`: coordinators, `ComponentModel`, `DataCache`; optionally `FuturedHelpers`)
- **[futured-macros](https://github.com/futuredapp/futured-macros)** (`FuturedMacros`: `@EnumIdentable`, `@ProxyMembers`)
- ~~**[FTAPIKit](https://github.com/futuredapp/FTAPIKit)** (Declarative access to REST API.)~~
- ~~**[FTTestingKit](https://github.com/futuredapp/FTTestingKit)** (Helpers for testing long-running tasks and generating mockups)~~
- ~~**[FuntastyKit](https://github.com/futuredapp/FuntastyKit)** (Basics of MVVM-C architecture, coordinators, UIKit extensions and helpers.)~~
- ~~**[GraphQLAPIKit](https://github.com/futuredapp/GraphQLAPIKit)** (Apollo-based GraphQL client.)~~

~~Manually added:~~
- ~~**[ACKLocalization](https://github.com/AckeeCZ/ACKLocalization.git)** (Localize your Cocoa apps from Google Spreadsheet.)~~
Expand All @@ -46,5 +49,6 @@
In the project folder from Terminal:

1. `bundle install` - install gemfile dependencies
2. `bundle exec fastlane provisioning` - download development provisioning profiles and certificate
3. build using Xcode
2. `brew install swiftlint swiftformat` - lint and format tools used by the build phases
3. `bundle exec fastlane provisioning` - download development provisioning profiles and certificate
4. build using Xcode