project-architecture

project-architecture is a skill for Claude Code, Codex from wangjianqi/AppStore. It costs 38 tokens per session (3,717 once invoked), scanned A, original, MIT.

An iOS project-structure guide that groups code by app feature, shared infrastructure, and reusable design components. Each feature keeps its screens, view models, services, and views together.

In plain words
What is it for?
Use it when creating or reorganising an iOS app with features such as cameras, settings, paywalls, networking, storage, analytics, and shared UI components.
Why use it?
It provides a consistent place for each kind of code, making large apps easier to navigate and reducing unrelated files being mixed together.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one. Also seen: positional $N argument.

Good fit Use it when creating or reorganising an iOS app with features such as cameras, settings, paywalls, networking, storage, analytics, and shared UI components.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/wangjianqi/appstore/05-project-architecture
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add wangjianqi/AppStore --skill 05-project-architecture
Clone the repo
git clone --depth 1 https://github.com/wangjianqi/AppStore

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for project-architecture

README.md
[![agentmods](https://agentmods.dev/badge/skills/wangjianqi/appstore/05-project-architecture/github.svg)](https://agentmods.dev/skills/wangjianqi/appstore/05-project-architecture)
Your own site
<a href="https://agentmods.dev/skills/wangjianqi/appstore/05-project-architecture"><img src="https://agentmods.dev/badge/skills/wangjianqi/appstore/05-project-architecture/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for project-architecture

Your own site · 80×15
<a href="https://agentmods.dev/skills/wangjianqi/appstore/05-project-architecture"><img src="https://agentmods.dev/badge/skills/wangjianqi/appstore/05-project-architecture.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 38 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,717 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00038 $0.03717
Opus 5 $0.00019 $0.01858
Sonnet 5 $0.00008 $0.00743
Haiku 4.5 $0.00004 $0.00372

Measured 9d ago against content hash ecc37f0a47e0, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-09, from the pricing page.

Security

Grade A, and why

project-architecture scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

ios-claude-skills/05-project-architecture/SKILL.md · 507 lines

How it starts

The opening of the file, as written. The whole thing — 507 lines — stays where its author put it; the contents beside it link to each section on GitHub.

项目架构 DNA

目录结构

App/
├── Features/              # 功能模块(每个模块自包含)
│   ├── Camera/
│   │   ├── CameraVC.swift
│   │   ├── CameraViewModel.swift
│   │   ├── CameraService.swift
│   │   └── Views/
│   │       ├── CameraPreviewView.swift
│   │       └── CameraControlView.swift
│   ├── Settings/
│   │   ├── SettingsVC.swift
│   │   ├── SettingsViewModel.swift
│   │   └── SettingsService.swift
│   └── Paywall/
│       ├── PaywallVC.swift
│       ├── PaywallViewModel.swift
│       └── Views/
│           ├── PlanCardView.swift
│           └── FeatureListView.swift
├── Core/                  # 跨模块基础设施
│   ├── Network/           # API 层
│   │   ├── NetworkService.swift
│   │   ├── APIEndpoint.swift
│   │   └── NetworkError.swift
│   ├── Storage/           # 本地持久化
│   │   ├── CoreDataStack.swift
│   │   ├── KeychainStorage.swift
│   │   └── UserDefaultsStorage.swift
│   ├── Analytics/         # 埋点
│   │   └── AnalyticsManager.swift
│   └── Extensions/        # Swift 扩展
│       ├── String+Localized.swift
│       ├── UIView+Constraints.swift
│       └── UIColor+Hex.swift
├── DesignSystem/          # UI 组件库
│   ├── AppColors.swift
│   ├── AppFonts.swift
│   ├── Layout.swift
│   └── Components/        # 可复用 UI 组件
│       ├── LoadingView.swift
│       ├── EmptyStateView.swift
│       └── PrimaryButton.swift
└── Resources/
    ├── Assets.xcassets
    ├── Localizable.strings
    └── Models/            # CoreML 模型文件

架构模式:MVVM

View (VC + UIView)
  ↕ 绑定(closure / Combine)
ViewModel(业务逻辑 + 状态)
  ↕ 调用
Service / Repository(数据层)
  • VC 职责: 初始化视图、绑定 ViewModel、响应用户事件
  • ViewModel 职责: 处理业务逻辑、持有状态、调用 Service
  • Service 职责: 网络请求、本地存储、设备能力(相机、麦克风)
  • 禁止跨层直接调用(VC 不直接调 Service,ViewModel 不操作 UIView)

ViewModel 完整模板

Closure 绑定模式

import Foundation

protocol HomeViewModelProtocol {
    var onItemsUpdated: (() -> Void)? { get set }
    var onError: ((AppError) -> Void)? { get set }
    var onLoadingStateChanged: ((Bool) -> Void)? { get set }
    var items: [Item] { get }
    func loadData()
    func didSelectItem(at index: Int)
}

final class HomeViewModel: HomeViewModelProtocol {
    var onItemsUpdated: (() -> Void)?
    var onError: ((AppError) -> Void)?
    var onLoadingStateChanged: ((Bool) -> Void)?

    private(set) var items: [Item] = [] {
        didSet { onItemsUpdated?() }
    }

    private let service: ItemServiceProtocol
    private weak var navigation: HomeNavigation?

    init(service: ItemServiceProtocol, navigation: HomeNavigation) {
        self.service = service
        self.navigation = navigation
    }

    func loadData() {
        onLoadingStateChanged?(true)
        service.fetchItems { [weak self] result in
            self?.onLoadingStateChanged?(false)
            switch result {
            case .success(let items):
                self?.items = items
            case .failure(let error):
                self?.onError?(error)
            }
        }
    }

    func didSelectItem(at index: Int) {
        guard index < items.count else { return }
        navigation?.showDetail(itemID: items[index].id)
    }
}

Read the full file on GitHub · 507 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 9d ago First seen · 507 lines · 38 tokens per session scan A ecc37f0a47e0

Subscribe to this mod's changes

project-architecture is a skill published in the GitHub repository wangjianqi/AppStore (11 stars, last pushed 3mo ago), licensed MIT. It adds 38 tokens to every session and 3,717 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

ipaship-audit

Use when auditing iOS/Android app submissions for compliance with Apple App Store Review Guidelines or Google Play Developer Policies. Scan .ipa, .apk, or .zip files against official store policies, generate structured compliance reports, and identify violations with remediation steps.

atharvnaik1/ipaship-audit · 57 tokens

view-specifications

Guide for writing view specification documents and a starter template for SwiftUI and cross-platform views.

jpavley/meta-loop-ios · 21 tokens

project-structure

Directory layout, file responsibilities, and Xcode integration for meta-loop projects.

jpavley/meta-loop-ios · 18 tokens

analyzing-ios-app-security-with-objection

Runtime iOS app security testing with Objection (Frida): inspect keychain and filesystem data, explore app internals at runtime, and validate/bypass client-side protections during authorized mobile assessments.

mukul975/Anthropic-Cybersecurity-Skills · 49 tokens

argent-tv-interact

Control and inspect TV apps via argent — Apple TV (tvOS), Android TV (leanback), and Amazon Fire TV (Vega). Boot the target, read focus, navigate with the D-pad remote, type, screenshot, and on Vega debug the JS runtime (evaluate, console logs, network inspector). Use when a task targets a TV (runtimeKind "tv", or…

software-mansion/argent · 107 tokens

argent-create-flow

Create, record, edit, replay, or repair reusable Argent flow YAML files. Use when the user asks to record or replay a repeatable device path, set up profiling or an A/B comparison, or invoke the authoring engine behind argent-qa-flows. Also use before repeating three or more interactions. For one-off UI checks…

software-mansion/argent · 100 tokens