cokit-cli 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +103 -0
- package/FAQ.md +5 -5
- package/QUICK-START.md +4 -4
- package/README.FLOW.md +237 -0
- package/README.md +153 -92
- package/agents/brainstormer.agent.md +71 -0
- package/agents/code-reviewer.agent.md +128 -0
- package/agents/database-admin.agent.md +91 -0
- package/agents/debugger.agent.md +128 -0
- package/agents/docs-manager.agent.md +121 -0
- package/agents/fullstack-developer.agent.md +96 -0
- package/agents/git-manager.agent.md +392 -0
- package/agents/mcp-manager.agent.md +93 -0
- package/agents/planner.agent.md +94 -0
- package/agents/project-manager.agent.md +124 -0
- package/agents/researcher.agent.md +32 -0
- package/agents/scout-external.agent.md +141 -0
- package/agents/scout.agent.md +107 -0
- package/agents/tester.agent.md +106 -0
- package/agents/ui-ux-designer.agent.md +225 -0
- package/collections/ck-core.collection.yml +30 -0
- package/collections/ck-development-rules.collection.yml +18 -0
- package/collections/ck-documentation.collection.yml +18 -0
- package/collections/ck-git-workflow.collection.yml +18 -0
- package/collections/ck-orchestration.collection.yml +22 -0
- package/collections/ck-ui-design.collection.yml +18 -0
- package/docs/README.md +85 -0
- package/docs/copilot-processing-flow.md +128 -0
- package/docs/migration-guide.md +12 -12
- package/instructions/ck-backend.instructions.md +48 -0
- package/instructions/ck-development.instructions.md +40 -0
- package/instructions/ck-frontend-design-pro.instructions.md +58 -0
- package/instructions/ck-frontend.instructions.md +44 -0
- package/instructions/ck-google-adk-python.instructions.md +242 -0
- package/instructions/ck-research.instructions.md +167 -0
- package/instructions/ck-testing.instructions.md +36 -0
- package/package.json +9 -2
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-01-restructure-folders.md +183 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-02-convert-agents.md +206 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-03-convert-commands-to-prompts.md +284 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-04-convert-skills-to-instructions.md +349 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-05-create-collections.md +320 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-06-update-cli-build-scripts.md +450 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-07-update-documentation.md +407 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/plan.md +136 -0
- package/prompts/ck-ask.prompt.md +57 -0
- package/prompts/ck-bootstrap-auto-fast.prompt.md +108 -0
- package/prompts/ck-bootstrap-auto-parallel.prompt.md +66 -0
- package/prompts/ck-bootstrap-auto.prompt.md +114 -0
- package/prompts/ck-bootstrap.prompt.md +136 -0
- package/prompts/ck-brainstorm.prompt.md +68 -0
- package/prompts/ck-ck-help.prompt.md +114 -0
- package/prompts/ck-code-auto.prompt.md +171 -0
- package/prompts/ck-code-no-test.prompt.md +159 -0
- package/prompts/ck-code-parallel.prompt.md +56 -0
- package/prompts/ck-code.prompt.md +177 -0
- package/prompts/ck-coding-level.prompt.md +54 -0
- package/prompts/ck-cook-auto-fast.prompt.md +26 -0
- package/prompts/ck-cook-auto-parallel.prompt.md +49 -0
- package/prompts/ck-cook-auto.prompt.md +15 -0
- package/prompts/ck-cook.prompt.md +96 -0
- package/prompts/ck-debug.prompt.md +14 -0
- package/prompts/ck-design-3d.prompt.md +84 -0
- package/prompts/ck-design-describe.prompt.md +24 -0
- package/prompts/ck-design-fast.prompt.md +32 -0
- package/prompts/ck-design-good.prompt.md +36 -0
- package/prompts/ck-design-screenshot.prompt.md +35 -0
- package/prompts/ck-design-video.prompt.md +35 -0
- package/prompts/ck-docs-init.prompt.md +27 -0
- package/prompts/ck-docs-summarize.prompt.md +23 -0
- package/prompts/ck-docs-update.prompt.md +36 -0
- package/prompts/ck-fix-ci.prompt.md +18 -0
- package/prompts/ck-fix-fast.prompt.md +18 -0
- package/prompts/ck-fix-hard.prompt.md +36 -0
- package/prompts/ck-fix-logs.prompt.md +27 -0
- package/prompts/ck-fix-parallel.prompt.md +54 -0
- package/prompts/ck-fix-test.prompt.md +19 -0
- package/prompts/ck-fix-types.prompt.md +11 -0
- package/prompts/ck-fix-ui.prompt.md +49 -0
- package/prompts/ck-fix.prompt.md +44 -0
- package/prompts/ck-git-cm.prompt.md +8 -0
- package/prompts/ck-git-cp.prompt.md +7 -0
- package/prompts/ck-git-merge.prompt.md +41 -0
- package/prompts/ck-git-pr.prompt.md +49 -0
- package/prompts/ck-kanban.prompt.md +77 -0
- package/prompts/ck-plan-archive.prompt.md +58 -0
- package/prompts/ck-plan-ci.prompt.md +34 -0
- package/prompts/ck-plan-cro.prompt.md +66 -0
- package/prompts/ck-plan-fast.prompt.md +67 -0
- package/prompts/ck-plan-hard.prompt.md +89 -0
- package/prompts/ck-plan-parallel.prompt.md +126 -0
- package/prompts/ck-plan-two.prompt.md +43 -0
- package/prompts/ck-plan-validate.prompt.md +118 -0
- package/prompts/ck-plan.prompt.md +29 -1
- package/prompts/ck-preview.prompt.md +65 -0
- package/prompts/ck-review-codebase.prompt.md +44 -0
- package/prompts/ck-scout-ext.prompt.md +35 -0
- package/prompts/ck-scout.prompt.md +25 -0
- package/prompts/ck-skill-add.prompt.md +36 -0
- package/prompts/ck-skill-create.prompt.md +29 -0
- package/prompts/ck-skill-fix-logs.prompt.md +22 -0
- package/prompts/ck-skill-optimize-auto.prompt.md +25 -0
- package/prompts/ck-skill-optimize.prompt.md +34 -0
- package/prompts/ck-skill-plan.prompt.md +46 -0
- package/prompts/ck-test-ui.prompt.md +92 -0
- package/prompts/ck-test.prompt.md +10 -0
- package/prompts/ck-use-mcp.prompt.md +27 -0
- package/prompts/ck-watzup.prompt.md +11 -0
- package/prompts/ck-worktree.prompt.md +127 -0
- package/rules/README.agents.md +55 -0
- package/rules/README.collections.md +78 -0
- package/rules/README.copilot-instructions.md +66 -0
- package/rules/README.instructions.md +73 -0
- package/rules/README.md +39 -0
- package/rules/README.prompts.md +76 -0
- package/rules/README.skills.md +71 -0
- package/skills/ck-ai-artist/SKILL.md +73 -0
- package/skills/ck-ai-artist/references/advanced-techniques.md +184 -0
- package/skills/ck-ai-artist/references/domain-code.md +66 -0
- package/skills/ck-ai-artist/references/domain-data.md +72 -0
- package/skills/ck-ai-artist/references/domain-marketing.md +66 -0
- package/skills/ck-ai-artist/references/domain-patterns.md +33 -0
- package/skills/ck-ai-artist/references/domain-writing.md +68 -0
- package/skills/ck-ai-artist/references/image-prompting.md +141 -0
- package/skills/ck-ai-artist/references/llm-prompting.md +165 -0
- package/skills/ck-ai-artist/references/nano-banana.md +59 -0
- package/skills/ck-ai-artist/references/reasoning-techniques.md +201 -0
- package/skills/ck-backend-development/SKILL.md +93 -0
- package/skills/ck-backend-development/references/backend-api-design.md +495 -0
- package/skills/ck-backend-development/references/backend-architecture.md +454 -0
- package/skills/ck-backend-development/references/backend-authentication.md +338 -0
- package/skills/ck-backend-development/references/backend-code-quality.md +659 -0
- package/skills/ck-backend-development/references/backend-debugging.md +904 -0
- package/skills/ck-backend-development/references/backend-devops.md +494 -0
- package/skills/ck-backend-development/references/backend-mindset.md +387 -0
- package/skills/ck-backend-development/references/backend-performance.md +397 -0
- package/skills/ck-backend-development/references/backend-security.md +290 -0
- package/skills/ck-backend-development/references/backend-technologies.md +256 -0
- package/skills/ck-backend-development/references/backend-testing.md +429 -0
- package/skills/ck-better-auth/SKILL.md +202 -0
- package/skills/ck-better-auth/references/advanced-features.md +553 -0
- package/skills/ck-better-auth/references/database-integration.md +577 -0
- package/skills/ck-better-auth/references/email-password-auth.md +416 -0
- package/skills/ck-better-auth/references/oauth-providers.md +430 -0
- package/skills/ck-better-auth/scripts/.coverage +0 -0
- package/skills/ck-better-auth/scripts/better_auth_init.py +521 -0
- package/skills/ck-better-auth/scripts/requirements.txt +15 -0
- package/skills/ck-better-auth/scripts/tests/.coverage +0 -0
- package/skills/ck-better-auth/scripts/tests/test_better_auth_init.py +421 -0
- package/skills/ck-chrome-devtools/SKILL.md +470 -0
- package/skills/ck-chrome-devtools/references/cdp-domains.md +694 -0
- package/skills/ck-chrome-devtools/references/performance-guide.md +940 -0
- package/skills/ck-chrome-devtools/references/puppeteer-reference.md +953 -0
- package/skills/ck-chrome-devtools/scripts/README.md +272 -0
- package/skills/ck-chrome-devtools/scripts/__tests__/selector.test.js +210 -0
- package/skills/ck-chrome-devtools/scripts/aria-snapshot.js +362 -0
- package/skills/ck-chrome-devtools/scripts/click.js +83 -0
- package/skills/ck-chrome-devtools/scripts/console.js +79 -0
- package/skills/ck-chrome-devtools/scripts/evaluate.js +53 -0
- package/skills/ck-chrome-devtools/scripts/fill.js +76 -0
- package/skills/ck-chrome-devtools/scripts/inject-auth.js +229 -0
- package/skills/ck-chrome-devtools/scripts/install-deps.sh +181 -0
- package/skills/ck-chrome-devtools/scripts/install.sh +83 -0
- package/skills/ck-chrome-devtools/scripts/lib/browser.js +318 -0
- package/skills/ck-chrome-devtools/scripts/lib/selector.js +178 -0
- package/skills/ck-chrome-devtools/scripts/navigate.js +54 -0
- package/skills/ck-chrome-devtools/scripts/network.js +106 -0
- package/skills/ck-chrome-devtools/scripts/package-lock.json +1589 -0
- package/skills/ck-chrome-devtools/scripts/package.json +16 -0
- package/skills/ck-chrome-devtools/scripts/performance.js +149 -0
- package/skills/ck-chrome-devtools/scripts/screenshot.js +198 -0
- package/skills/ck-chrome-devtools/scripts/select-ref.js +131 -0
- package/skills/ck-chrome-devtools/scripts/snapshot.js +135 -0
- package/skills/ck-code-review/SKILL.md +143 -0
- package/skills/ck-code-review/references/code-review-reception.md +209 -0
- package/skills/ck-code-review/references/requesting-code-review.md +105 -0
- package/skills/ck-code-review/references/verification-before-completion.md +139 -0
- package/skills/ck-databases/SKILL.md +231 -0
- package/skills/ck-databases/references/mongodb-aggregation.md +447 -0
- package/skills/ck-databases/references/mongodb-atlas.md +465 -0
- package/skills/ck-databases/references/mongodb-crud.md +408 -0
- package/skills/ck-databases/references/mongodb-indexing.md +442 -0
- package/skills/ck-databases/references/postgresql-administration.md +594 -0
- package/skills/ck-databases/references/postgresql-performance.md +527 -0
- package/skills/ck-databases/references/postgresql-psql-cli.md +467 -0
- package/skills/ck-databases/references/postgresql-queries.md +475 -0
- package/skills/ck-databases/scripts/.coverage +0 -0
- package/skills/ck-databases/scripts/db_backup.py +502 -0
- package/skills/ck-databases/scripts/db_migrate.py +425 -0
- package/skills/ck-databases/scripts/db_performance_check.py +456 -0
- package/skills/ck-databases/scripts/requirements.txt +20 -0
- package/skills/ck-databases/scripts/tests/coverage-db.json +1 -0
- package/skills/ck-databases/scripts/tests/requirements.txt +4 -0
- package/skills/ck-databases/scripts/tests/test_db_backup.py +340 -0
- package/skills/ck-databases/scripts/tests/test_db_migrate.py +277 -0
- package/skills/ck-databases/scripts/tests/test_db_performance_check.py +370 -0
- package/skills/ck-debugging/SKILL.md +82 -0
- package/skills/ck-debugging/references/defense-in-depth.md +124 -0
- package/skills/ck-debugging/references/root-cause-tracing.md +122 -0
- package/skills/ck-debugging/references/systematic-debugging.md +102 -0
- package/skills/ck-debugging/references/verification.md +123 -0
- package/skills/ck-debugging/scripts/find-polluter.sh +63 -0
- package/skills/ck-debugging/scripts/find-polluter.test.md +102 -0
- package/skills/ck-devops/.env.example +76 -0
- package/skills/ck-devops/SKILL.md +283 -0
- package/skills/ck-devops/references/browser-rendering.md +305 -0
- package/skills/ck-devops/references/cloudflare-d1-kv.md +123 -0
- package/skills/ck-devops/references/cloudflare-platform.md +271 -0
- package/skills/ck-devops/references/cloudflare-r2-storage.md +280 -0
- package/skills/ck-devops/references/cloudflare-workers-advanced.md +312 -0
- package/skills/ck-devops/references/cloudflare-workers-apis.md +309 -0
- package/skills/ck-devops/references/cloudflare-workers-basics.md +418 -0
- package/skills/ck-devops/references/docker-basics.md +297 -0
- package/skills/ck-devops/references/docker-compose.md +292 -0
- package/skills/ck-devops/references/gcloud-platform.md +297 -0
- package/skills/ck-devops/references/gcloud-services.md +304 -0
- package/skills/ck-devops/scripts/cloudflare_deploy.py +269 -0
- package/skills/ck-devops/scripts/docker_optimize.py +331 -0
- package/skills/ck-devops/scripts/requirements.txt +20 -0
- package/skills/ck-devops/scripts/tests/requirements.txt +3 -0
- package/skills/ck-devops/scripts/tests/test_cloudflare_deploy.py +285 -0
- package/skills/ck-devops/scripts/tests/test_docker_optimize.py +436 -0
- package/skills/ck-docs-seeker/.env.example +15 -0
- package/skills/ck-docs-seeker/SKILL.md +96 -0
- package/skills/ck-docs-seeker/package.json +25 -0
- package/skills/ck-docs-seeker/references/advanced.md +79 -0
- package/skills/ck-docs-seeker/references/context7-patterns.md +68 -0
- package/skills/ck-docs-seeker/references/errors.md +68 -0
- package/skills/ck-docs-seeker/scripts/analyze-llms-txt.js +211 -0
- package/skills/ck-docs-seeker/scripts/detect-topic.js +172 -0
- package/skills/ck-docs-seeker/scripts/fetch-docs.js +213 -0
- package/skills/ck-docs-seeker/scripts/tests/run-tests.js +72 -0
- package/skills/ck-docs-seeker/scripts/tests/test-analyze-llms.js +119 -0
- package/skills/ck-docs-seeker/scripts/tests/test-detect-topic.js +112 -0
- package/skills/ck-docs-seeker/scripts/tests/test-fetch-docs.js +84 -0
- package/skills/ck-docs-seeker/scripts/utils/env-loader.js +94 -0
- package/skills/ck-docs-seeker/workflows/library-search.md +87 -0
- package/skills/ck-docs-seeker/workflows/repo-analysis.md +91 -0
- package/skills/ck-docs-seeker/workflows/topic-search.md +77 -0
- package/skills/ck-frontend-design/SKILL.md +79 -0
- package/skills/ck-frontend-design/references/analysis-best-practices.md +80 -0
- package/skills/ck-frontend-design/references/analysis-prompts.md +141 -0
- package/skills/ck-frontend-design/references/analysis-techniques.md +118 -0
- package/skills/ck-frontend-design/references/animejs.md +396 -0
- package/skills/ck-frontend-design/references/design-extraction-overview.md +71 -0
- package/skills/ck-frontend-design/references/extraction-best-practices.md +141 -0
- package/skills/ck-frontend-design/references/extraction-output-templates.md +162 -0
- package/skills/ck-frontend-design/references/extraction-prompts.md +127 -0
- package/skills/ck-frontend-design/references/technical-accessibility.md +119 -0
- package/skills/ck-frontend-design/references/technical-best-practices.md +97 -0
- package/skills/ck-frontend-design/references/technical-optimization.md +44 -0
- package/skills/ck-frontend-design/references/technical-overview.md +90 -0
- package/skills/ck-frontend-design/references/technical-workflows.md +150 -0
- package/skills/ck-frontend-design/references/visual-analysis-overview.md +95 -0
- package/skills/ck-frontend-development/SKILL.md +399 -0
- package/skills/ck-frontend-development/resources/common-patterns.md +331 -0
- package/skills/ck-frontend-development/resources/complete-examples.md +872 -0
- package/skills/ck-frontend-development/resources/component-patterns.md +502 -0
- package/skills/ck-frontend-development/resources/data-fetching.md +767 -0
- package/skills/ck-frontend-development/resources/file-organization.md +502 -0
- package/skills/ck-frontend-development/resources/loading-and-error-states.md +501 -0
- package/skills/ck-frontend-development/resources/performance.md +406 -0
- package/skills/ck-frontend-development/resources/routing-guide.md +364 -0
- package/skills/ck-frontend-development/resources/styling-guide.md +428 -0
- package/skills/ck-frontend-development/resources/typescript-standards.md +418 -0
- package/skills/ck-markdown-novel-viewer/SKILL.md +190 -0
- package/skills/ck-markdown-novel-viewer/assets/directory-browser.css +215 -0
- package/skills/ck-markdown-novel-viewer/assets/favicon.png +0 -0
- package/skills/ck-markdown-novel-viewer/assets/novel-theme.css +818 -0
- package/skills/ck-markdown-novel-viewer/assets/reader.js +262 -0
- package/skills/ck-markdown-novel-viewer/assets/template.html +80 -0
- package/skills/ck-markdown-novel-viewer/package.json +15 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +272 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/plan-navigator.cjs +509 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/port-finder.cjs +48 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
- package/skills/ck-markdown-novel-viewer/scripts/server.cjs +411 -0
- package/skills/ck-markdown-novel-viewer/scripts/tests/server.test.cjs +283 -0
- package/skills/ck-markdown-novel-viewer/tests/dashboard-assets.test.cjs +340 -0
- package/skills/ck-markdown-novel-viewer/tests/dashboard-renderer.test.cjs +404 -0
- package/skills/ck-markdown-novel-viewer/tests/http-server.test.cjs +271 -0
- package/skills/ck-markdown-novel-viewer/tests/run-tests.cjs +51 -0
- package/skills/ck-markdown-novel-viewer/tests/test-framework.cjs +154 -0
- package/skills/ck-markdown-novel-viewer/tests/verify-xss.cjs +90 -0
- package/skills/ck-mcp-builder/LICENSE.txt +202 -0
- package/skills/ck-mcp-builder/SKILL.md +327 -0
- package/skills/ck-mcp-builder/reference/evaluation.md +602 -0
- package/skills/ck-mcp-builder/reference/mcp_best_practices.md +915 -0
- package/skills/ck-mcp-builder/reference/node_mcp_server.md +916 -0
- package/skills/ck-mcp-builder/reference/python_mcp_server.md +752 -0
- package/skills/ck-mcp-builder/scripts/connections.py +151 -0
- package/skills/ck-mcp-builder/scripts/evaluation.py +373 -0
- package/skills/ck-mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/ck-mcp-builder/scripts/requirements.txt +2 -0
- package/skills/ck-mcp-management/README.md +219 -0
- package/skills/ck-mcp-management/SKILL.md +209 -0
- package/skills/ck-mcp-management/assets/tools.json +3146 -0
- package/skills/ck-mcp-management/references/configuration.md +114 -0
- package/skills/ck-mcp-management/references/gemini-cli-integration.md +215 -0
- package/skills/ck-mcp-management/references/mcp-protocol.md +116 -0
- package/skills/ck-mcp-management/scripts/.env.example +10 -0
- package/skills/ck-mcp-management/scripts/cli.ts +195 -0
- package/skills/ck-mcp-management/scripts/dist/analyze-tools.js +70 -0
- package/skills/ck-mcp-management/scripts/dist/cli.js +160 -0
- package/skills/ck-mcp-management/scripts/dist/mcp-client.js +183 -0
- package/skills/ck-mcp-management/scripts/mcp-client.ts +230 -0
- package/skills/ck-mcp-management/scripts/package.json +20 -0
- package/skills/ck-mcp-management/scripts/tsconfig.json +15 -0
- package/skills/ck-media-processing/SKILL.md +90 -0
- package/skills/ck-media-processing/references/common-workflows.md +132 -0
- package/skills/ck-media-processing/references/ffmpeg-encoding.md +358 -0
- package/skills/ck-media-processing/references/ffmpeg-filters.md +503 -0
- package/skills/ck-media-processing/references/ffmpeg-streaming.md +403 -0
- package/skills/ck-media-processing/references/format-compatibility.md +375 -0
- package/skills/ck-media-processing/references/imagemagick-batch.md +612 -0
- package/skills/ck-media-processing/references/imagemagick-editing.md +623 -0
- package/skills/ck-media-processing/references/rmbg-background-removal.md +66 -0
- package/skills/ck-media-processing/references/troubleshooting.md +109 -0
- package/skills/ck-media-processing/scripts/README.md +111 -0
- package/skills/ck-media-processing/scripts/batch-remove-background.sh +124 -0
- package/skills/ck-media-processing/scripts/batch_resize.py +342 -0
- package/skills/ck-media-processing/scripts/media_convert.py +311 -0
- package/skills/ck-media-processing/scripts/remove-background.sh +96 -0
- package/skills/ck-media-processing/scripts/remove-bg-node.js +158 -0
- package/skills/ck-media-processing/scripts/requirements.txt +24 -0
- package/skills/ck-media-processing/scripts/tests/.coverage +0 -0
- package/skills/ck-media-processing/scripts/tests/requirements.txt +2 -0
- package/skills/ck-media-processing/scripts/tests/test_batch_resize.py +372 -0
- package/skills/ck-media-processing/scripts/tests/test_media_convert.py +259 -0
- package/skills/ck-media-processing/scripts/tests/test_video_optimize.py +397 -0
- package/skills/ck-media-processing/scripts/video_optimize.py +414 -0
- package/skills/ck-mobile-development/SKILL.md +210 -0
- package/skills/ck-mobile-development/references/mobile-android.md +604 -0
- package/skills/ck-mobile-development/references/mobile-best-practices.md +545 -0
- package/skills/ck-mobile-development/references/mobile-debugging.md +1089 -0
- package/skills/ck-mobile-development/references/mobile-frameworks.md +465 -0
- package/skills/ck-mobile-development/references/mobile-ios.md +496 -0
- package/skills/ck-mobile-development/references/mobile-mindset.md +544 -0
- package/skills/ck-payment-integration/README.md +185 -0
- package/skills/ck-payment-integration/SKILL.md +116 -0
- package/skills/ck-payment-integration/references/polar/benefits.md +396 -0
- package/skills/ck-payment-integration/references/polar/best-practices.md +482 -0
- package/skills/ck-payment-integration/references/polar/checkouts.md +266 -0
- package/skills/ck-payment-integration/references/polar/overview.md +184 -0
- package/skills/ck-payment-integration/references/polar/products.md +244 -0
- package/skills/ck-payment-integration/references/polar/sdk.md +436 -0
- package/skills/ck-payment-integration/references/polar/subscriptions.md +340 -0
- package/skills/ck-payment-integration/references/polar/webhooks.md +405 -0
- package/skills/ck-payment-integration/references/sepay/api.md +140 -0
- package/skills/ck-payment-integration/references/sepay/best-practices.md +337 -0
- package/skills/ck-payment-integration/references/sepay/overview.md +138 -0
- package/skills/ck-payment-integration/references/sepay/qr-codes.md +228 -0
- package/skills/ck-payment-integration/references/sepay/sdk.md +213 -0
- package/skills/ck-payment-integration/references/sepay/webhooks.md +208 -0
- package/skills/ck-payment-integration/scripts/.env.example +20 -0
- package/skills/ck-payment-integration/scripts/checkout-helper.js +244 -0
- package/skills/ck-payment-integration/scripts/package.json +17 -0
- package/skills/ck-payment-integration/scripts/polar-webhook-verify.js +202 -0
- package/skills/ck-payment-integration/scripts/sepay-webhook-verify.js +193 -0
- package/skills/ck-payment-integration/scripts/test-scripts.js +237 -0
- package/skills/ck-planning/SKILL.md +112 -0
- package/skills/ck-planning/references/codebase-understanding.md +62 -0
- package/skills/ck-planning/references/output-standards.md +127 -0
- package/skills/ck-planning/references/plan-organization.md +150 -0
- package/skills/ck-planning/references/research-phase.md +49 -0
- package/skills/ck-planning/references/solution-design.md +63 -0
- package/skills/ck-problem-solving/SKILL.md +95 -0
- package/skills/ck-problem-solving/references/attribution.md +69 -0
- package/skills/ck-problem-solving/references/collision-zone-thinking.md +79 -0
- package/skills/ck-problem-solving/references/inversion-exercise.md +91 -0
- package/skills/ck-problem-solving/references/meta-pattern-recognition.md +87 -0
- package/skills/ck-problem-solving/references/scale-game.md +95 -0
- package/skills/ck-problem-solving/references/simplification-cascades.md +80 -0
- package/skills/ck-problem-solving/references/when-stuck.md +72 -0
- package/skills/ck-repomix/SKILL.md +247 -0
- package/skills/ck-repomix/references/configuration.md +211 -0
- package/skills/ck-repomix/references/usage-patterns.md +232 -0
- package/skills/ck-repomix/scripts/.coverage +0 -0
- package/skills/ck-repomix/scripts/README.md +179 -0
- package/skills/ck-repomix/scripts/repomix_batch.py +455 -0
- package/skills/ck-repomix/scripts/repos.example.json +15 -0
- package/skills/ck-repomix/scripts/requirements.txt +15 -0
- package/skills/ck-repomix/scripts/tests/test_repomix_batch.py +531 -0
- package/skills/ck-sequential-thinking/.env.example +8 -0
- package/skills/ck-sequential-thinking/README.md +183 -0
- package/skills/{sequential-thinking → ck-sequential-thinking}/SKILL.md +14 -2
- package/skills/ck-sequential-thinking/package.json +31 -0
- package/skills/ck-sequential-thinking/references/advanced-strategies.md +79 -0
- package/skills/{sequential-thinking → ck-sequential-thinking}/references/advanced-techniques.md +2 -14
- package/skills/{sequential-thinking → ck-sequential-thinking}/references/core-patterns.md +8 -0
- package/skills/ck-sequential-thinking/references/examples-api.md +88 -0
- package/skills/ck-sequential-thinking/references/examples-architecture.md +94 -0
- package/skills/ck-sequential-thinking/references/examples-debug.md +90 -0
- package/skills/ck-sequential-thinking/scripts/format-thought.js +159 -0
- package/skills/ck-sequential-thinking/scripts/process-thought.js +236 -0
- package/skills/ck-sequential-thinking/tests/format-thought.test.js +133 -0
- package/skills/ck-sequential-thinking/tests/process-thought.test.js +215 -0
- package/skills/ck-shopify/README.md +66 -0
- package/skills/ck-shopify/SKILL.md +319 -0
- package/skills/ck-shopify/references/app-development.md +470 -0
- package/skills/ck-shopify/references/extensions.md +493 -0
- package/skills/ck-shopify/references/themes.md +498 -0
- package/skills/ck-shopify/scripts/.coverage +0 -0
- package/skills/ck-shopify/scripts/requirements.txt +19 -0
- package/skills/ck-shopify/scripts/shopify_init.py +423 -0
- package/skills/ck-shopify/scripts/tests/.coverage +0 -0
- package/skills/ck-shopify/scripts/tests/test_shopify_init.py +385 -0
- package/skills/ck-skill-creator/LICENSE.txt +202 -0
- package/skills/ck-skill-creator/SKILL.md +265 -0
- package/skills/ck-skill-creator/scripts/init_skill.py +303 -0
- package/skills/ck-skill-creator/scripts/package_skill.py +110 -0
- package/skills/ck-skill-creator/scripts/quick_validate.py +65 -0
- package/skills/ck-threejs/SKILL.md +87 -0
- package/skills/ck-threejs/references/01-getting-started.md +177 -0
- package/skills/ck-threejs/references/02-loaders.md +169 -0
- package/skills/ck-threejs/references/03-textures.md +170 -0
- package/skills/ck-threejs/references/04-cameras.md +195 -0
- package/skills/ck-threejs/references/05-lights.md +183 -0
- package/skills/ck-threejs/references/06-animations.md +214 -0
- package/skills/ck-threejs/references/07-math.md +260 -0
- package/skills/ck-threejs/references/08-interaction.md +267 -0
- package/skills/ck-threejs/references/09-postprocessing.md +240 -0
- package/skills/ck-threejs/references/10-controls.md +259 -0
- package/skills/ck-threejs/references/11-materials-advanced.md +270 -0
- package/skills/ck-threejs/references/12-performance.md +269 -0
- package/skills/ck-threejs/references/13-node-materials.md +298 -0
- package/skills/ck-threejs/references/14-physics-vr.md +304 -0
- package/skills/ck-threejs/references/15-specialized-loaders.md +333 -0
- package/skills/ck-threejs/references/16-webgpu.md +302 -0
- package/skills/ck-ui-styling/LICENSE.txt +202 -0
- package/skills/ck-ui-styling/SKILL.md +319 -0
- package/skills/ck-ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/ck-ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/ck-ui-styling/references/canvas-design-system.md +320 -0
- package/skills/ck-ui-styling/references/shadcn-accessibility.md +471 -0
- package/skills/ck-ui-styling/references/shadcn-components.md +424 -0
- package/skills/ck-ui-styling/references/shadcn-theming.md +373 -0
- package/skills/ck-ui-styling/references/tailwind-customization.md +483 -0
- package/skills/ck-ui-styling/references/tailwind-responsive.md +382 -0
- package/skills/ck-ui-styling/references/tailwind-utilities.md +455 -0
- package/skills/ck-ui-styling/scripts/.coverage +0 -0
- package/skills/ck-ui-styling/scripts/requirements.txt +17 -0
- package/skills/ck-ui-styling/scripts/shadcn_add.py +292 -0
- package/skills/ck-ui-styling/scripts/tailwind_config_gen.py +456 -0
- package/skills/ck-ui-styling/scripts/tests/coverage-ui.json +1 -0
- package/skills/ck-ui-styling/scripts/tests/requirements.txt +3 -0
- package/skills/ck-ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- package/skills/ck-ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
- package/skills/ck-ui-ux-pro-max/SKILL.md +227 -0
- package/skills/ck-ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ck-ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ck-ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ck-ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ck-ui-ux-pro-max/data/prompts.csv +24 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/html-tailwind.csv +51 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ck-ui-ux-pro-max/data/styles.csv +59 -0
- package/skills/ck-ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ck-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ck-ui-ux-pro-max/scripts/core.py +236 -0
- package/skills/ck-ui-ux-pro-max/scripts/search.py +76 -0
- package/skills/ck-web-frameworks/SKILL.md +322 -0
- package/skills/ck-web-frameworks/references/nextjs-app-router.md +465 -0
- package/skills/ck-web-frameworks/references/nextjs-data-fetching.md +459 -0
- package/skills/ck-web-frameworks/references/nextjs-optimization.md +511 -0
- package/skills/ck-web-frameworks/references/nextjs-server-components.md +495 -0
- package/skills/ck-web-frameworks/references/remix-icon-integration.md +603 -0
- package/skills/ck-web-frameworks/references/turborepo-caching.md +551 -0
- package/skills/ck-web-frameworks/references/turborepo-pipelines.md +517 -0
- package/skills/ck-web-frameworks/references/turborepo-setup.md +542 -0
- package/skills/ck-web-frameworks/scripts/.coverage +0 -0
- package/skills/ck-web-frameworks/scripts/__init__.py +0 -0
- package/skills/ck-web-frameworks/scripts/nextjs_init.py +547 -0
- package/skills/ck-web-frameworks/scripts/requirements.txt +16 -0
- package/skills/ck-web-frameworks/scripts/tests/coverage-web.json +1 -0
- package/skills/ck-web-frameworks/scripts/tests/requirements.txt +3 -0
- package/skills/ck-web-frameworks/scripts/tests/test_nextjs_init.py +319 -0
- package/skills/ck-web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -0
- package/skills/ck-web-frameworks/scripts/turborepo_migrate.py +394 -0
- package/src/commands/init.js +62 -31
- package/src/utils/paths.js +35 -4
- package/skills/code-review/SKILL.md +0 -86
- package/skills/code-review/references/code-review-reception.md +0 -76
- package/skills/code-review/references/verification-before-completion.md +0 -86
- package/skills/debugging/SKILL.md +0 -70
- package/skills/debugging/references/root-cause-tracing.md +0 -65
- package/skills/debugging/references/systematic-debugging.md +0 -74
- package/skills/debugging/references/verification.md +0 -74
- package/skills/docs-seeker/SKILL.md +0 -91
- package/skills/planning/SKILL.md +0 -82
- package/skills/planning/references/plan-organization.md +0 -88
- package/skills/planning/references/research-phase.md +0 -56
- package/skills/planning/references/solution-design.md +0 -65
- package/templates/repo/prompts/code.prompt.md +0 -40
- package/templates/repo/prompts/docs.prompt.md +0 -29
- package/templates/repo/prompts/fix.prompt.md +0 -35
- package/templates/repo/prompts/plan.prompt.md +0 -41
- package/templates/repo/prompts/review.prompt.md +0 -38
- package/templates/repo/prompts/test.prompt.md +0 -29
- /package/skills/{docs-seeker → ck-docs-seeker}/references/search-patterns.md +0 -0
- /package/skills/{docs-seeker → ck-docs-seeker}/references/source-evaluation.md +0 -0
- /package/templates/repo/.github/instructions/{backend.instructions.md → ck-backend.instructions.md} +0 -0
- /package/templates/repo/.github/instructions/{development.instructions.md → ck-development.instructions.md} +0 -0
- /package/templates/repo/.github/instructions/{frontend.instructions.md → ck-frontend.instructions.md} +0 -0
- /package/templates/repo/.github/instructions/{testing.instructions.md → ck-testing.instructions.md} +0 -0
- /package/templates/repo/.github/prompts/{code.prompt.md → ck-code.prompt.md} +0 -0
- /package/templates/repo/.github/prompts/{docs.prompt.md → ck-docs.prompt.md} +0 -0
- /package/templates/repo/.github/prompts/{fix.prompt.md → ck-fix.prompt.md} +0 -0
- /package/templates/repo/.github/prompts/{plan.prompt.md → ck-plan.prompt.md} +0 -0
- /package/templates/repo/.github/prompts/{review.prompt.md → ck-review.prompt.md} +0 -0
- /package/templates/repo/.github/prompts/{test.prompt.md → ck-test.prompt.md} +0 -0
- /package/templates/repo/.github/skills/{code-review → ck-code-review}/SKILL.md +0 -0
- /package/templates/repo/.github/skills/{debugging → ck-debugging}/SKILL.md +0 -0
|
@@ -0,0 +1,1089 @@
|
|
|
1
|
+
# Mobile Debugging Strategies
|
|
2
|
+
|
|
3
|
+
Comprehensive debugging techniques, tools, and best practices for mobile development (2024-2025).
|
|
4
|
+
|
|
5
|
+
## Mobile Debugging Mindset
|
|
6
|
+
|
|
7
|
+
### Unique Mobile Challenges
|
|
8
|
+
|
|
9
|
+
1. **Device Diversity** - Thousands of device/OS combinations
|
|
10
|
+
2. **Resource Constraints** - Limited CPU, memory, battery
|
|
11
|
+
3. **Network Variability** - From WiFi to 2G, offline scenarios
|
|
12
|
+
4. **Platform Differences** - iOS vs Android behavior
|
|
13
|
+
5. **Real Device Testing** - Simulators don't show real performance
|
|
14
|
+
6. **Limited Debugging Access** - Can't SSH into production devices
|
|
15
|
+
|
|
16
|
+
### Debugging Philosophy
|
|
17
|
+
|
|
18
|
+
**Golden Rules:**
|
|
19
|
+
1. **Test on real devices** - Simulators lie about performance
|
|
20
|
+
2. **Reproduce consistently** - Intermittent bugs need reproducible steps
|
|
21
|
+
3. **Check the obvious first** - Network, permissions, resources
|
|
22
|
+
4. **Isolate the platform** - Is it iOS-specific, Android-specific, or both?
|
|
23
|
+
5. **Monitor resources** - CPU, memory, battery, network
|
|
24
|
+
6. **Read the logs** - Device logs contain critical clues
|
|
25
|
+
|
|
26
|
+
## Platform-Specific Debugging Tools
|
|
27
|
+
|
|
28
|
+
### iOS Debugging
|
|
29
|
+
|
|
30
|
+
**1. Xcode Debugger**
|
|
31
|
+
|
|
32
|
+
```swift
|
|
33
|
+
// Breakpoint debugging
|
|
34
|
+
func fetchUserData(userId: String) {
|
|
35
|
+
// Set breakpoint here
|
|
36
|
+
let url = URL(string: "https://api.example.com/users/\(userId)")!
|
|
37
|
+
|
|
38
|
+
// LLDB commands:
|
|
39
|
+
// po userId - print object
|
|
40
|
+
// p url - print variable
|
|
41
|
+
// bt - backtrace
|
|
42
|
+
// c - continue
|
|
43
|
+
// step - step into
|
|
44
|
+
// next - step over
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**LLDB Advanced Commands:**
|
|
49
|
+
```bash
|
|
50
|
+
# Conditional breakpoint
|
|
51
|
+
breakpoint set --name fetchUserData --condition userId == "123"
|
|
52
|
+
|
|
53
|
+
# Watchpoint (break on value change)
|
|
54
|
+
watchpoint set variable self.counter
|
|
55
|
+
|
|
56
|
+
# Print view hierarchy
|
|
57
|
+
po UIApplication.shared.keyWindow?.value(forKey: "recursiveDescription")
|
|
58
|
+
|
|
59
|
+
# Print all properties
|
|
60
|
+
po self.value(forKey: "description")
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**2. Instruments (Performance Profiling)**
|
|
64
|
+
|
|
65
|
+
**Time Profiler** - CPU usage
|
|
66
|
+
```
|
|
67
|
+
1. Xcode → Product → Profile
|
|
68
|
+
2. Select "Time Profiler"
|
|
69
|
+
3. Record while using app
|
|
70
|
+
4. Identify hot methods (high self time)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Allocations** - Memory usage
|
|
74
|
+
```
|
|
75
|
+
1. Select "Allocations" instrument
|
|
76
|
+
2. Look for memory growth
|
|
77
|
+
3. Filter by object type
|
|
78
|
+
4. Find allocation stack trace
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Leaks** - Memory leaks
|
|
82
|
+
```
|
|
83
|
+
1. Select "Leaks" instrument
|
|
84
|
+
2. Leaks shown in red
|
|
85
|
+
3. Click leak for stack trace
|
|
86
|
+
4. Fix retain cycles
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Network** - API debugging
|
|
90
|
+
```
|
|
91
|
+
1. Select "Network" instrument
|
|
92
|
+
2. See all HTTP requests
|
|
93
|
+
3. Response times, sizes
|
|
94
|
+
4. Failed requests highlighted
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**3. View Debugging**
|
|
98
|
+
|
|
99
|
+
```swift
|
|
100
|
+
// View hierarchy in Xcode
|
|
101
|
+
// Debug → View Debugging → Capture View Hierarchy
|
|
102
|
+
|
|
103
|
+
// Runtime inspection
|
|
104
|
+
#if DEBUG
|
|
105
|
+
import SwiftUI
|
|
106
|
+
|
|
107
|
+
struct ContentView: View {
|
|
108
|
+
var body: some View {
|
|
109
|
+
VStack {
|
|
110
|
+
Text("Hello")
|
|
111
|
+
}
|
|
112
|
+
.onAppear {
|
|
113
|
+
// Print view tree for debugging
|
|
114
|
+
print(Mirror(reflecting: self.body))
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
#endif
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**4. Console.app (System Logs)**
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# Filter logs by process
|
|
125
|
+
log stream --predicate 'processImagePath contains "YourApp"' --level debug
|
|
126
|
+
|
|
127
|
+
# Filter by subsystem
|
|
128
|
+
log stream --predicate 'subsystem == "com.yourcompany.yourapp"'
|
|
129
|
+
|
|
130
|
+
# Show only errors
|
|
131
|
+
log stream --predicate 'processImagePath contains "YourApp"' --level error
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**5. Network Link Conditioner**
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
Settings → Developer → Network Link Conditioner
|
|
138
|
+
|
|
139
|
+
Simulate:
|
|
140
|
+
- 3G, LTE, WiFi
|
|
141
|
+
- High latency
|
|
142
|
+
- Packet loss
|
|
143
|
+
- Bandwidth limits
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Android Debugging
|
|
147
|
+
|
|
148
|
+
**1. Android Studio Debugger**
|
|
149
|
+
|
|
150
|
+
```kotlin
|
|
151
|
+
// Breakpoint debugging
|
|
152
|
+
fun fetchUserData(userId: String) {
|
|
153
|
+
// Set breakpoint here
|
|
154
|
+
val url = "https://api.example.com/users/$userId"
|
|
155
|
+
|
|
156
|
+
// Debugger commands:
|
|
157
|
+
// Evaluate expression: Alt+F8 (Windows) / Cmd+F8 (Mac)
|
|
158
|
+
// Step over: F8
|
|
159
|
+
// Step into: F7
|
|
160
|
+
// Resume: F9
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Advanced Debugger Features:**
|
|
165
|
+
```kotlin
|
|
166
|
+
// Conditional breakpoint
|
|
167
|
+
// Right-click breakpoint → Condition: userId == "123"
|
|
168
|
+
|
|
169
|
+
// Logpoint (log without stopping)
|
|
170
|
+
// Right-click breakpoint → More → Check "Evaluate and log"
|
|
171
|
+
|
|
172
|
+
// Exception breakpoint
|
|
173
|
+
// Run → View Breakpoints → + → Java Exception Breakpoints
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**2. Android Profiler**
|
|
177
|
+
|
|
178
|
+
**CPU Profiler:**
|
|
179
|
+
```
|
|
180
|
+
View → Tool Windows → Profiler → CPU
|
|
181
|
+
- Record trace
|
|
182
|
+
- Identify slow methods
|
|
183
|
+
- Flame chart shows call hierarchy
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Memory Profiler:**
|
|
187
|
+
```
|
|
188
|
+
View → Tool Windows → Profiler → Memory
|
|
189
|
+
- Track allocations
|
|
190
|
+
- Heap dump analysis
|
|
191
|
+
- Find memory leaks
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Network Profiler:**
|
|
195
|
+
```
|
|
196
|
+
View → Tool Windows → Profiler → Network
|
|
197
|
+
- All HTTP requests
|
|
198
|
+
- Request/response details
|
|
199
|
+
- Timeline view
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**3. Layout Inspector**
|
|
203
|
+
|
|
204
|
+
```
|
|
205
|
+
Tools → Layout Inspector
|
|
206
|
+
|
|
207
|
+
Features:
|
|
208
|
+
- 3D view hierarchy
|
|
209
|
+
- Live layout updates
|
|
210
|
+
- View properties
|
|
211
|
+
- Constraints visualization
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**4. ADB (Android Debug Bridge)**
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# View device logs
|
|
218
|
+
adb logcat
|
|
219
|
+
|
|
220
|
+
# Filter by app
|
|
221
|
+
adb logcat | grep com.yourcompany.yourapp
|
|
222
|
+
|
|
223
|
+
# Filter by tag
|
|
224
|
+
adb logcat MyTag:D *:S
|
|
225
|
+
|
|
226
|
+
# Clear logs
|
|
227
|
+
adb logcat -c
|
|
228
|
+
|
|
229
|
+
# Install APK
|
|
230
|
+
adb install app-debug.apk
|
|
231
|
+
|
|
232
|
+
# Uninstall app
|
|
233
|
+
adb uninstall com.yourcompany.yourapp
|
|
234
|
+
|
|
235
|
+
# Take screenshot
|
|
236
|
+
adb shell screencap -p /sdcard/screenshot.png
|
|
237
|
+
adb pull /sdcard/screenshot.png
|
|
238
|
+
|
|
239
|
+
# Screen recording
|
|
240
|
+
adb shell screenrecord /sdcard/demo.mp4
|
|
241
|
+
adb pull /sdcard/demo.mp4
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**5. Network Simulation**
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
# Emulator network throttling
|
|
248
|
+
# Settings → Network → Network Profile
|
|
249
|
+
|
|
250
|
+
# Or via ADB
|
|
251
|
+
adb shell setprop net.dns1 8.8.8.8
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### React Native Debugging
|
|
255
|
+
|
|
256
|
+
**1. React DevTools**
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# Install
|
|
260
|
+
npm install -g react-devtools
|
|
261
|
+
|
|
262
|
+
# Launch
|
|
263
|
+
react-devtools
|
|
264
|
+
|
|
265
|
+
# In app: Shake device → "Debug with React DevTools"
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
**2. Flipper (Recommended)**
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
# Install
|
|
272
|
+
npm install -g flipper
|
|
273
|
+
|
|
274
|
+
# Configure in app
|
|
275
|
+
# Add flipper packages to your app
|
|
276
|
+
npm install --save-dev react-native-flipper
|
|
277
|
+
|
|
278
|
+
# Features:
|
|
279
|
+
# - Layout inspector
|
|
280
|
+
# - Network inspector
|
|
281
|
+
# - Redux DevTools
|
|
282
|
+
# - Database viewer
|
|
283
|
+
# - Shared Preferences viewer
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**3. Chrome DevTools**
|
|
287
|
+
|
|
288
|
+
```javascript
|
|
289
|
+
// In app: Shake device → "Debug"
|
|
290
|
+
// Opens Chrome DevTools
|
|
291
|
+
|
|
292
|
+
// Console.log appears in Chrome
|
|
293
|
+
console.log('User data:', userData);
|
|
294
|
+
|
|
295
|
+
// Set breakpoints in source code
|
|
296
|
+
debugger; // Pauses execution
|
|
297
|
+
|
|
298
|
+
// Network tab shows API calls
|
|
299
|
+
fetch('https://api.example.com/users')
|
|
300
|
+
.then(res => res.json())
|
|
301
|
+
.then(data => console.log(data));
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
**4. React Native Debugger (Standalone)**
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
# Install
|
|
308
|
+
brew install --cask react-native-debugger
|
|
309
|
+
|
|
310
|
+
# Launch
|
|
311
|
+
open "rndebugger://set-debugger-loc?host=localhost&port=8081"
|
|
312
|
+
|
|
313
|
+
# Features:
|
|
314
|
+
# - Redux DevTools
|
|
315
|
+
# - React DevTools
|
|
316
|
+
# - Network Inspector
|
|
317
|
+
# - Console
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**5. Performance Monitor**
|
|
321
|
+
|
|
322
|
+
```javascript
|
|
323
|
+
// Show in-app performance overlay
|
|
324
|
+
// Shake device → "Show Perf Monitor"
|
|
325
|
+
|
|
326
|
+
// Shows:
|
|
327
|
+
// - RAM usage
|
|
328
|
+
// - JS frame rate
|
|
329
|
+
// - UI frame rate
|
|
330
|
+
// - Views count
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
**6. LogBox**
|
|
334
|
+
|
|
335
|
+
```javascript
|
|
336
|
+
// Ignore specific warnings
|
|
337
|
+
import { LogBox } from 'react-native';
|
|
338
|
+
|
|
339
|
+
LogBox.ignoreLogs([
|
|
340
|
+
'Warning: componentWillReceiveProps',
|
|
341
|
+
]);
|
|
342
|
+
|
|
343
|
+
// Ignore all logs (NOT recommended)
|
|
344
|
+
LogBox.ignoreAllLogs();
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Flutter Debugging
|
|
348
|
+
|
|
349
|
+
**1. DevTools**
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
# Launch from VS Code
|
|
353
|
+
# Debug → Open DevTools
|
|
354
|
+
|
|
355
|
+
# Or from command line
|
|
356
|
+
flutter pub global activate devtools
|
|
357
|
+
flutter pub global run devtools
|
|
358
|
+
|
|
359
|
+
# Features:
|
|
360
|
+
# - Widget inspector
|
|
361
|
+
# - Timeline view
|
|
362
|
+
# - Memory profiler
|
|
363
|
+
# - Network profiler
|
|
364
|
+
# - Logging view
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
**2. Widget Inspector**
|
|
368
|
+
|
|
369
|
+
```dart
|
|
370
|
+
// In DevTools: Inspector tab
|
|
371
|
+
|
|
372
|
+
// Debug paint (show layout borders)
|
|
373
|
+
// Ctrl+Shift+P → "Toggle Debug Painting"
|
|
374
|
+
|
|
375
|
+
// Print widget tree
|
|
376
|
+
debugDumpApp();
|
|
377
|
+
|
|
378
|
+
// Print render tree
|
|
379
|
+
debugDumpRenderTree();
|
|
380
|
+
|
|
381
|
+
// Print layer tree
|
|
382
|
+
debugDumpLayerTree();
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
**3. Performance Overlay**
|
|
386
|
+
|
|
387
|
+
```dart
|
|
388
|
+
void main() {
|
|
389
|
+
runApp(
|
|
390
|
+
MaterialApp(
|
|
391
|
+
showPerformanceOverlay: true, // FPS counter
|
|
392
|
+
debugShowCheckedModeBanner: false,
|
|
393
|
+
home: MyApp(),
|
|
394
|
+
),
|
|
395
|
+
);
|
|
396
|
+
}
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
**4. Logging**
|
|
400
|
+
|
|
401
|
+
```dart
|
|
402
|
+
import 'dart:developer' as developer;
|
|
403
|
+
|
|
404
|
+
// Simple print
|
|
405
|
+
print('User ID: $userId');
|
|
406
|
+
|
|
407
|
+
// Structured logging
|
|
408
|
+
developer.log(
|
|
409
|
+
'User logged in',
|
|
410
|
+
name: 'app.auth',
|
|
411
|
+
error: error,
|
|
412
|
+
stackTrace: stackTrace,
|
|
413
|
+
);
|
|
414
|
+
|
|
415
|
+
// Timeline events
|
|
416
|
+
developer.Timeline.startSync('fetchUsers');
|
|
417
|
+
await fetchUsers();
|
|
418
|
+
developer.Timeline.finishSync();
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
**5. Breakpoint Debugging**
|
|
422
|
+
|
|
423
|
+
```dart
|
|
424
|
+
// Set breakpoints in VS Code or Android Studio
|
|
425
|
+
Future<User> fetchUser(String id) async {
|
|
426
|
+
// Breakpoint here
|
|
427
|
+
final response = await http.get(Uri.parse('https://api.example.com/users/$id'));
|
|
428
|
+
|
|
429
|
+
// Debugger console commands:
|
|
430
|
+
// p variable - print variable
|
|
431
|
+
// Step over: F10
|
|
432
|
+
// Step into: F11
|
|
433
|
+
// Continue: F5
|
|
434
|
+
return User.fromJson(jsonDecode(response.body));
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
## UI Debugging
|
|
439
|
+
|
|
440
|
+
### Layout Issues
|
|
441
|
+
|
|
442
|
+
**iOS (SwiftUI):**
|
|
443
|
+
```swift
|
|
444
|
+
struct ContentView: View {
|
|
445
|
+
var body: some View {
|
|
446
|
+
VStack {
|
|
447
|
+
Text("Hello")
|
|
448
|
+
}
|
|
449
|
+
.border(Color.red) // Debug border
|
|
450
|
+
.background(Color.yellow.opacity(0.3)) // Debug background
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
// Print layout info
|
|
455
|
+
Text("Hello")
|
|
456
|
+
.onAppear {
|
|
457
|
+
print("Frame: \(UIScreen.main.bounds)")
|
|
458
|
+
}
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
**Android (Jetpack Compose):**
|
|
462
|
+
```kotlin
|
|
463
|
+
@Composable
|
|
464
|
+
fun DebugLayout() {
|
|
465
|
+
Column(
|
|
466
|
+
modifier = Modifier
|
|
467
|
+
.border(2.dp, Color.Red) // Debug border
|
|
468
|
+
.background(Color.Yellow.copy(alpha = 0.3f)) // Debug background
|
|
469
|
+
) {
|
|
470
|
+
Text("Hello")
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
// Show layout bounds in developer options
|
|
475
|
+
// Settings → Developer Options → Show layout bounds
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
**React Native:**
|
|
479
|
+
```javascript
|
|
480
|
+
// Debug borders
|
|
481
|
+
<View style={{ borderWidth: 1, borderColor: 'red' }}>
|
|
482
|
+
<Text>Hello</Text>
|
|
483
|
+
</View>
|
|
484
|
+
|
|
485
|
+
// Layout animation debugging
|
|
486
|
+
import { LayoutAnimation, UIManager } from 'react-native';
|
|
487
|
+
|
|
488
|
+
UIManager.setLayoutAnimationEnabledExperimental &&
|
|
489
|
+
UIManager.setLayoutAnimationEnabledExperimental(true);
|
|
490
|
+
|
|
491
|
+
// Inspector
|
|
492
|
+
// Shake device → "Toggle Inspector"
|
|
493
|
+
// Shows element hierarchy and styles
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
**Flutter:**
|
|
497
|
+
```dart
|
|
498
|
+
// Debug paint
|
|
499
|
+
void main() {
|
|
500
|
+
debugPaintSizeEnabled = true; // Show layout guides
|
|
501
|
+
debugPaintBaselinesEnabled = true; // Show text baselines
|
|
502
|
+
debugPaintLayerBordersEnabled = true; // Show layer borders
|
|
503
|
+
runApp(MyApp());
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
// Widget boundaries
|
|
507
|
+
Container(
|
|
508
|
+
decoration: BoxDecoration(
|
|
509
|
+
border: Border.all(color: Colors.red, width: 2),
|
|
510
|
+
),
|
|
511
|
+
child: Text('Hello'),
|
|
512
|
+
)
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
### Animation Debugging
|
|
516
|
+
|
|
517
|
+
**Slow Animations:**
|
|
518
|
+
```dart
|
|
519
|
+
// Flutter: Slow down animations
|
|
520
|
+
timeDilation = 5.0; // 5x slower
|
|
521
|
+
|
|
522
|
+
// React Native: Slow animations
|
|
523
|
+
import { Animated } from 'react-native';
|
|
524
|
+
Animated.timing(value, {
|
|
525
|
+
toValue: 1,
|
|
526
|
+
duration: 3000, // Increase duration
|
|
527
|
+
});
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
**Animation Performance:**
|
|
531
|
+
```swift
|
|
532
|
+
// iOS: Core Animation Instrument
|
|
533
|
+
// Instruments → Core Animation
|
|
534
|
+
// Check for:
|
|
535
|
+
// - Dropped frames
|
|
536
|
+
// - Off-screen rendering
|
|
537
|
+
// - Blending layers
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
## Performance Debugging
|
|
541
|
+
|
|
542
|
+
### Frame Rate Issues (< 60 FPS)
|
|
543
|
+
|
|
544
|
+
**Diagnosis:**
|
|
545
|
+
|
|
546
|
+
**React Native:**
|
|
547
|
+
```javascript
|
|
548
|
+
// Enable performance monitor
|
|
549
|
+
// Shows JS and UI thread FPS
|
|
550
|
+
|
|
551
|
+
// Common issues:
|
|
552
|
+
// 1. Heavy computations in render
|
|
553
|
+
// 2. Large lists without virtualization
|
|
554
|
+
// 3. Unnecessary re-renders
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
**Solutions:**
|
|
558
|
+
```javascript
|
|
559
|
+
// ❌ Bad: Heavy computation in render
|
|
560
|
+
function UserList({ users }) {
|
|
561
|
+
const sortedUsers = users.sort((a, b) => a.name.localeCompare(b.name));
|
|
562
|
+
return <FlatList data={sortedUsers} />;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
// ✅ Good: Memoize expensive operations
|
|
566
|
+
function UserList({ users }) {
|
|
567
|
+
const sortedUsers = useMemo(
|
|
568
|
+
() => users.sort((a, b) => a.name.localeCompare(b.name)),
|
|
569
|
+
[users]
|
|
570
|
+
);
|
|
571
|
+
return <FlatList data={sortedUsers} />;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
// ❌ Bad: ScrollView with large data
|
|
575
|
+
<ScrollView>
|
|
576
|
+
{users.map(user => <UserCard key={user.id} user={user} />)}
|
|
577
|
+
</ScrollView>
|
|
578
|
+
|
|
579
|
+
// ✅ Good: FlatList with virtualization
|
|
580
|
+
<FlatList
|
|
581
|
+
data={users}
|
|
582
|
+
renderItem={({ item }) => <UserCard user={item} />}
|
|
583
|
+
keyExtractor={item => item.id}
|
|
584
|
+
windowSize={5}
|
|
585
|
+
initialNumToRender={10}
|
|
586
|
+
/>
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
**Flutter:**
|
|
590
|
+
```dart
|
|
591
|
+
// Check for:
|
|
592
|
+
// - Build phase too long
|
|
593
|
+
// - Layout phase too long
|
|
594
|
+
// - Paint phase too long
|
|
595
|
+
|
|
596
|
+
// Use const constructors
|
|
597
|
+
// ❌ Bad
|
|
598
|
+
Widget build(BuildContext context) {
|
|
599
|
+
return Container(child: Text('Hello'));
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
// ✅ Good
|
|
603
|
+
Widget build(BuildContext context) {
|
|
604
|
+
return const Text('Hello');
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
// Avoid expensive builds
|
|
608
|
+
// Use keys for stateful widgets
|
|
609
|
+
ListView.builder(
|
|
610
|
+
itemBuilder: (context, index) {
|
|
611
|
+
return UserCard(
|
|
612
|
+
key: ValueKey(users[index].id), // Preserve state
|
|
613
|
+
user: users[index],
|
|
614
|
+
);
|
|
615
|
+
},
|
|
616
|
+
)
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
### Memory Issues
|
|
620
|
+
|
|
621
|
+
**Detection:**
|
|
622
|
+
|
|
623
|
+
**iOS:**
|
|
624
|
+
```
|
|
625
|
+
Xcode → Debug Navigator → Memory
|
|
626
|
+
- Watch memory graph
|
|
627
|
+
- Look for continuous growth
|
|
628
|
+
```
|
|
629
|
+
|
|
630
|
+
**Android:**
|
|
631
|
+
```
|
|
632
|
+
Android Studio → Profiler → Memory
|
|
633
|
+
- Take heap dump
|
|
634
|
+
- Analyze retained objects
|
|
635
|
+
```
|
|
636
|
+
|
|
637
|
+
**Common Causes:**
|
|
638
|
+
|
|
639
|
+
```javascript
|
|
640
|
+
// React Native: Memory leaks
|
|
641
|
+
|
|
642
|
+
// ❌ Bad: Event listener not removed
|
|
643
|
+
useEffect(() => {
|
|
644
|
+
EventEmitter.on('data', handleData);
|
|
645
|
+
// Missing cleanup
|
|
646
|
+
}, []);
|
|
647
|
+
|
|
648
|
+
// ✅ Good: Cleanup
|
|
649
|
+
useEffect(() => {
|
|
650
|
+
EventEmitter.on('data', handleData);
|
|
651
|
+
return () => {
|
|
652
|
+
EventEmitter.off('data', handleData);
|
|
653
|
+
};
|
|
654
|
+
}, []);
|
|
655
|
+
|
|
656
|
+
// ❌ Bad: Timer not cleared
|
|
657
|
+
useEffect(() => {
|
|
658
|
+
setInterval(() => {
|
|
659
|
+
console.log('tick');
|
|
660
|
+
}, 1000);
|
|
661
|
+
}, []);
|
|
662
|
+
|
|
663
|
+
// ✅ Good: Clear timer
|
|
664
|
+
useEffect(() => {
|
|
665
|
+
const timer = setInterval(() => {
|
|
666
|
+
console.log('tick');
|
|
667
|
+
}, 1000);
|
|
668
|
+
return () => clearInterval(timer);
|
|
669
|
+
}, []);
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
```dart
|
|
673
|
+
// Flutter: Dispose controllers
|
|
674
|
+
class MyWidget extends StatefulWidget {
|
|
675
|
+
@override
|
|
676
|
+
_MyWidgetState createState() => _MyWidgetState();
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
class _MyWidgetState extends State<MyWidget> {
|
|
680
|
+
late TextEditingController _controller;
|
|
681
|
+
|
|
682
|
+
@override
|
|
683
|
+
void initState() {
|
|
684
|
+
super.initState();
|
|
685
|
+
_controller = TextEditingController();
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
@override
|
|
689
|
+
void dispose() {
|
|
690
|
+
_controller.dispose(); // Must dispose
|
|
691
|
+
super.dispose();
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
@override
|
|
695
|
+
Widget build(BuildContext context) {
|
|
696
|
+
return TextField(controller: _controller);
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
## Network Debugging
|
|
702
|
+
|
|
703
|
+
### HTTP Debugging
|
|
704
|
+
|
|
705
|
+
**iOS (Proxyman / Charles)**
|
|
706
|
+
```
|
|
707
|
+
1. Install Proxyman (free) or Charles
|
|
708
|
+
2. Configure device proxy
|
|
709
|
+
3. Install SSL certificate
|
|
710
|
+
4. View all HTTP traffic
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
**Android (Charles / Flipper)**
|
|
714
|
+
```
|
|
715
|
+
1. Install Charles Proxy
|
|
716
|
+
2. Configure device proxy: Settings → WiFi → Modify → Proxy
|
|
717
|
+
3. Install Charles certificate
|
|
718
|
+
4. View all HTTP requests/responses
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
**React Native (Flipper Network Plugin)**
|
|
722
|
+
```javascript
|
|
723
|
+
// Automatically captures all fetch/axios requests
|
|
724
|
+
fetch('https://api.example.com/users')
|
|
725
|
+
.then(res => res.json())
|
|
726
|
+
.then(data => console.log(data));
|
|
727
|
+
|
|
728
|
+
// View in Flipper:
|
|
729
|
+
// - Request/response headers
|
|
730
|
+
// - Request/response body
|
|
731
|
+
// - Timing information
|
|
732
|
+
```
|
|
733
|
+
|
|
734
|
+
**Flutter (DevTools Network Tab)**
|
|
735
|
+
```dart
|
|
736
|
+
// Automatically captures HTTP requests
|
|
737
|
+
final response = await http.get(
|
|
738
|
+
Uri.parse('https://api.example.com/users')
|
|
739
|
+
);
|
|
740
|
+
|
|
741
|
+
// View in DevTools Network tab:
|
|
742
|
+
// - All HTTP requests
|
|
743
|
+
// - Headers and body
|
|
744
|
+
// - Response times
|
|
745
|
+
```
|
|
746
|
+
|
|
747
|
+
### Network Simulation
|
|
748
|
+
|
|
749
|
+
**Test scenarios:**
|
|
750
|
+
- Slow network (3G, 2G)
|
|
751
|
+
- High latency (500ms+)
|
|
752
|
+
- Packet loss (10%)
|
|
753
|
+
- Offline mode
|
|
754
|
+
|
|
755
|
+
**iOS:**
|
|
756
|
+
```
|
|
757
|
+
Settings → Developer → Network Link Conditioner
|
|
758
|
+
```
|
|
759
|
+
|
|
760
|
+
**Android:**
|
|
761
|
+
```
|
|
762
|
+
Emulator: Settings → Network → Network Profile
|
|
763
|
+
```
|
|
764
|
+
|
|
765
|
+
## Crash Debugging
|
|
766
|
+
|
|
767
|
+
### Crash Reporting Services
|
|
768
|
+
|
|
769
|
+
**Firebase Crashlytics (Recommended)**
|
|
770
|
+
|
|
771
|
+
**React Native:**
|
|
772
|
+
```javascript
|
|
773
|
+
import crashlytics from '@react-native-firebase/crashlytics';
|
|
774
|
+
|
|
775
|
+
// Log custom events
|
|
776
|
+
crashlytics().log('User pressed purchase button');
|
|
777
|
+
|
|
778
|
+
// Set user identifier
|
|
779
|
+
crashlytics().setUserId(userId);
|
|
780
|
+
|
|
781
|
+
// Record non-fatal error
|
|
782
|
+
try {
|
|
783
|
+
await fetchData();
|
|
784
|
+
} catch (error) {
|
|
785
|
+
crashlytics().recordError(error);
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
// Force crash for testing
|
|
789
|
+
crashlytics().crash();
|
|
790
|
+
```
|
|
791
|
+
|
|
792
|
+
**Flutter:**
|
|
793
|
+
```dart
|
|
794
|
+
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
|
|
795
|
+
|
|
796
|
+
// Catch errors
|
|
797
|
+
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
|
|
798
|
+
|
|
799
|
+
// Catch async errors
|
|
800
|
+
runZonedGuarded(() {
|
|
801
|
+
runApp(MyApp());
|
|
802
|
+
}, (error, stackTrace) {
|
|
803
|
+
FirebaseCrashlytics.instance.recordError(error, stackTrace);
|
|
804
|
+
});
|
|
805
|
+
|
|
806
|
+
// Log custom events
|
|
807
|
+
FirebaseCrashlytics.instance.log('User pressed purchase');
|
|
808
|
+
|
|
809
|
+
// Set user ID
|
|
810
|
+
FirebaseCrashlytics.instance.setUserIdentifier(userId);
|
|
811
|
+
```
|
|
812
|
+
|
|
813
|
+
**iOS Native:**
|
|
814
|
+
```swift
|
|
815
|
+
import FirebaseCrashlytics
|
|
816
|
+
|
|
817
|
+
// Log event
|
|
818
|
+
Crashlytics.crashlytics().log("User tapped button")
|
|
819
|
+
|
|
820
|
+
// Set user ID
|
|
821
|
+
Crashlytics.crashlytics().setUserID(userId)
|
|
822
|
+
|
|
823
|
+
// Record error
|
|
824
|
+
Crashlytics.crashlytics().record(error: error)
|
|
825
|
+
```
|
|
826
|
+
|
|
827
|
+
**Android Native:**
|
|
828
|
+
```kotlin
|
|
829
|
+
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
|
830
|
+
|
|
831
|
+
// Log event
|
|
832
|
+
FirebaseCrashlytics.getInstance().log("User tapped button")
|
|
833
|
+
|
|
834
|
+
// Set user ID
|
|
835
|
+
FirebaseCrashlytics.getInstance().setUserId(userId)
|
|
836
|
+
|
|
837
|
+
// Record exception
|
|
838
|
+
FirebaseCrashlytics.getInstance().recordException(exception)
|
|
839
|
+
```
|
|
840
|
+
|
|
841
|
+
### Analyzing Crash Reports
|
|
842
|
+
|
|
843
|
+
**iOS (Xcode Organizer):**
|
|
844
|
+
```
|
|
845
|
+
Window → Organizer → Crashes
|
|
846
|
+
- Symbolicated crash logs
|
|
847
|
+
- Stack traces
|
|
848
|
+
- Crash counts
|
|
849
|
+
```
|
|
850
|
+
|
|
851
|
+
**Android (Play Console):**
|
|
852
|
+
```
|
|
853
|
+
Play Console → Quality → Crashes & ANRs
|
|
854
|
+
- Crash stack traces
|
|
855
|
+
- Affected devices
|
|
856
|
+
- OS versions
|
|
857
|
+
```
|
|
858
|
+
|
|
859
|
+
**Reading Stack Traces:**
|
|
860
|
+
```
|
|
861
|
+
Fatal Exception: java.lang.NullPointerException
|
|
862
|
+
Attempt to invoke virtual method 'java.lang.String User.getName()' on a null object reference
|
|
863
|
+
at com.example.app.UserService.displayUser(UserService.kt:42)
|
|
864
|
+
at com.example.app.MainActivity.onCreate(MainActivity.kt:23)
|
|
865
|
+
|
|
866
|
+
Fix:
|
|
867
|
+
1. Check line UserService.kt:42
|
|
868
|
+
2. User object is null
|
|
869
|
+
3. Add null check before accessing getName()
|
|
870
|
+
```
|
|
871
|
+
|
|
872
|
+
## Common Debugging Scenarios
|
|
873
|
+
|
|
874
|
+
### 1. App Crashes on Startup
|
|
875
|
+
|
|
876
|
+
**Steps:**
|
|
877
|
+
1. Check crash logs
|
|
878
|
+
2. Look for initialization errors
|
|
879
|
+
3. Verify dependencies loaded
|
|
880
|
+
4. Check permissions
|
|
881
|
+
|
|
882
|
+
**Example:**
|
|
883
|
+
```javascript
|
|
884
|
+
// React Native: Missing native dependency
|
|
885
|
+
// Error: Invariant Violation: Native module cannot be null
|
|
886
|
+
|
|
887
|
+
// Fix: Link native module
|
|
888
|
+
npx react-native link <module-name>
|
|
889
|
+
# or
|
|
890
|
+
cd ios && pod install
|
|
891
|
+
```
|
|
892
|
+
|
|
893
|
+
### 2. UI Not Updating
|
|
894
|
+
|
|
895
|
+
**React Native:**
|
|
896
|
+
```javascript
|
|
897
|
+
// ❌ Bad: Mutating state directly
|
|
898
|
+
this.state.users.push(newUser); // Won't trigger re-render
|
|
899
|
+
|
|
900
|
+
// ✅ Good: Create new state
|
|
901
|
+
this.setState({ users: [...this.state.users, newUser] });
|
|
902
|
+
```
|
|
903
|
+
|
|
904
|
+
**Flutter:**
|
|
905
|
+
```dart
|
|
906
|
+
// ❌ Bad: Not calling setState
|
|
907
|
+
void addUser(User user) {
|
|
908
|
+
users.add(user); // Won't rebuild
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
// ✅ Good: Call setState
|
|
912
|
+
void addUser(User user) {
|
|
913
|
+
setState(() {
|
|
914
|
+
users.add(user);
|
|
915
|
+
});
|
|
916
|
+
}
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
### 3. Image Not Loading
|
|
920
|
+
|
|
921
|
+
**Common causes:**
|
|
922
|
+
1. Wrong URL
|
|
923
|
+
2. CORS issues
|
|
924
|
+
3. SSL certificate issues
|
|
925
|
+
4. Network timeout
|
|
926
|
+
|
|
927
|
+
**Debugging:**
|
|
928
|
+
```javascript
|
|
929
|
+
// React Native
|
|
930
|
+
<Image
|
|
931
|
+
source={{ uri: imageUrl }}
|
|
932
|
+
onError={(error) => console.log('Image error:', error)}
|
|
933
|
+
onLoad={() => console.log('Image loaded')}
|
|
934
|
+
/>
|
|
935
|
+
|
|
936
|
+
// Check network tab for 404, 403, etc.
|
|
937
|
+
```
|
|
938
|
+
|
|
939
|
+
### 4. Keyboard Covering Input
|
|
940
|
+
|
|
941
|
+
**React Native:**
|
|
942
|
+
```javascript
|
|
943
|
+
import { KeyboardAvoidingView } from 'react-native';
|
|
944
|
+
|
|
945
|
+
<KeyboardAvoidingView
|
|
946
|
+
behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
|
|
947
|
+
style={{ flex: 1 }}
|
|
948
|
+
>
|
|
949
|
+
<TextInput placeholder="Email" />
|
|
950
|
+
</KeyboardAvoidingView>
|
|
951
|
+
```
|
|
952
|
+
|
|
953
|
+
**Flutter:**
|
|
954
|
+
```dart
|
|
955
|
+
// Automatically handled by Scaffold
|
|
956
|
+
Scaffold(
|
|
957
|
+
resizeToAvoidBottomInset: true, // Default
|
|
958
|
+
body: TextField(),
|
|
959
|
+
)
|
|
960
|
+
```
|
|
961
|
+
|
|
962
|
+
### 5. Navigation Not Working
|
|
963
|
+
|
|
964
|
+
**React Navigation:**
|
|
965
|
+
```javascript
|
|
966
|
+
// ❌ Bad: Navigation prop not available
|
|
967
|
+
function MyComponent() {
|
|
968
|
+
navigation.navigate('Home'); // Error
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
// ✅ Good: Use hook or prop
|
|
972
|
+
function MyComponent({ navigation }) {
|
|
973
|
+
// or
|
|
974
|
+
// const navigation = useNavigation();
|
|
975
|
+
|
|
976
|
+
navigation.navigate('Home');
|
|
977
|
+
}
|
|
978
|
+
```
|
|
979
|
+
|
|
980
|
+
## Production Debugging
|
|
981
|
+
|
|
982
|
+
### Remote Logging
|
|
983
|
+
|
|
984
|
+
**LogRocket (Session Replay)**
|
|
985
|
+
```javascript
|
|
986
|
+
import LogRocket from '@logrocket/react-native';
|
|
987
|
+
|
|
988
|
+
LogRocket.init('your-app-id');
|
|
989
|
+
|
|
990
|
+
// Identify users
|
|
991
|
+
LogRocket.identify(userId, {
|
|
992
|
+
name: user.name,
|
|
993
|
+
email: user.email,
|
|
994
|
+
});
|
|
995
|
+
|
|
996
|
+
// Replays user sessions with:
|
|
997
|
+
// - Console logs
|
|
998
|
+
// - Network requests
|
|
999
|
+
// - UI interactions
|
|
1000
|
+
// - Redux actions
|
|
1001
|
+
```
|
|
1002
|
+
|
|
1003
|
+
### Feature Flags for Debugging
|
|
1004
|
+
|
|
1005
|
+
```javascript
|
|
1006
|
+
import { useFlags } from 'launchdarkly-react-native-client-sdk';
|
|
1007
|
+
|
|
1008
|
+
function MyComponent() {
|
|
1009
|
+
const { debugMode } = useFlags();
|
|
1010
|
+
|
|
1011
|
+
if (debugMode) {
|
|
1012
|
+
console.log('Debug info:', userData);
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
return <View>...</View>;
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
// Enable debug mode remotely for specific users
|
|
1019
|
+
```
|
|
1020
|
+
|
|
1021
|
+
### A/B Testing for Bug Investigation
|
|
1022
|
+
|
|
1023
|
+
```javascript
|
|
1024
|
+
// Gradually roll out fix
|
|
1025
|
+
if (abTest.variant === 'fixed') {
|
|
1026
|
+
return <FixedComponent />;
|
|
1027
|
+
} else {
|
|
1028
|
+
return <OriginalComponent />;
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
// Monitor crash rates per variant
|
|
1032
|
+
```
|
|
1033
|
+
|
|
1034
|
+
## Debugging Checklist
|
|
1035
|
+
|
|
1036
|
+
**Before Filing Bug:**
|
|
1037
|
+
- [ ] Reproduce on real device
|
|
1038
|
+
- [ ] Check both iOS and Android
|
|
1039
|
+
- [ ] Test on multiple OS versions
|
|
1040
|
+
- [ ] Verify network connectivity
|
|
1041
|
+
- [ ] Check app permissions
|
|
1042
|
+
- [ ] Review recent code changes
|
|
1043
|
+
- [ ] Check crash logs
|
|
1044
|
+
|
|
1045
|
+
**Investigation:**
|
|
1046
|
+
- [ ] Enable debug logging
|
|
1047
|
+
- [ ] Use platform debugger
|
|
1048
|
+
- [ ] Profile performance if slow
|
|
1049
|
+
- [ ] Monitor memory usage
|
|
1050
|
+
- [ ] Check network requests
|
|
1051
|
+
- [ ] Inspect UI hierarchy
|
|
1052
|
+
|
|
1053
|
+
**Production Issues:**
|
|
1054
|
+
- [ ] Check crash reporting dashboard
|
|
1055
|
+
- [ ] Review user-reported issues
|
|
1056
|
+
- [ ] Analyze affected OS versions
|
|
1057
|
+
- [ ] Check affected devices
|
|
1058
|
+
- [ ] Review recent app releases
|
|
1059
|
+
- [ ] Compare crash-free rates
|
|
1060
|
+
|
|
1061
|
+
**After Fix:**
|
|
1062
|
+
- [ ] Test on real devices
|
|
1063
|
+
- [ ] Verify on affected OS versions
|
|
1064
|
+
- [ ] Add regression test
|
|
1065
|
+
- [ ] Staged rollout (10% → 100%)
|
|
1066
|
+
- [ ] Monitor crash rates
|
|
1067
|
+
|
|
1068
|
+
## Resources
|
|
1069
|
+
|
|
1070
|
+
**General:**
|
|
1071
|
+
- React Native Debugging: https://reactnative.dev/docs/debugging
|
|
1072
|
+
- Flutter DevTools: https://docs.flutter.dev/tools/devtools
|
|
1073
|
+
- iOS Debugging: https://developer.apple.com/documentation/xcode/debugging
|
|
1074
|
+
- Android Debugging: https://developer.android.com/studio/debug
|
|
1075
|
+
|
|
1076
|
+
**Crash Reporting:**
|
|
1077
|
+
- Firebase Crashlytics: https://firebase.google.com/docs/crashlytics
|
|
1078
|
+
- Sentry: https://docs.sentry.io/platforms/react-native/
|
|
1079
|
+
- Bugsnag: https://docs.bugsnag.com/
|
|
1080
|
+
|
|
1081
|
+
**Performance:**
|
|
1082
|
+
- iOS Instruments: https://developer.apple.com/instruments/
|
|
1083
|
+
- Android Profiler: https://developer.android.com/studio/profile
|
|
1084
|
+
- Flipper: https://fbflipper.com/
|
|
1085
|
+
|
|
1086
|
+
**Network:**
|
|
1087
|
+
- Proxyman: https://proxyman.io/
|
|
1088
|
+
- Charles Proxy: https://www.charlesproxy.com/
|
|
1089
|
+
- Flipper Network Plugin: https://fbflipper.com/docs/features/network-plugin/
|