[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KCMKFC3DKFW5B2208SM59W":3,"skill-same:01M6KCMKFC3DKFW5B2208SM59W":68},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M6KCMKFC3DKFW5B2208SM59W","mobiai-kmp",null,"Use when working on a Kotlin Multiplatform project — shared code, expect\u002Factual declarations, platform-specific implementations, building and testing.","ArisGuimera\u002FMobiAI-Core","ArisGuimera","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F16361358?v=4","01M6KC5MVGRKDA14DWT98445V9","AristiDevs","01M6KC5MZKRFFHFFD340B21YN3",492,"MIT","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fkmp\u002Fskills\u002Fmobiai-kmp\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36],"mobiai kmp","testing","codex","copilot","code","kotlin","kotlin multiplatform","cursor","use","claude-code","shared","project","platform","2026-11-10 10:12:30",false,"---\nname: mobiai-kmp\ndescription: Use when working on a Kotlin Multiplatform project — shared code, expect\u002Factual declarations, platform-specific implementations, building and testing.\nlicense: MIT\ncompatibility: [claude-code, cursor, copilot, codex]\nplatforms: [kmp]\n---\n\n# Kotlin Multiplatform (KMP)\n\n> **Community contribution welcome!** Help flesh out this skill with KMP patterns, common pitfalls, and real-world workflows.\n\nGuide for working with Kotlin Multiplatform projects.\n\n## When to Use\n\n- Working on shared Kotlin code that targets multiple platforms\n- Debugging platform-specific issues in KMP projects\n- Writing tests for shared modules\n\n## Detecting a KMP Project\n\n```bash\n# Check for KMP indicators\nls shared\u002F composeApp\u002F iosApp\u002F 2>\u002Fdev\u002Fnull\ngrep -r \"kotlin(\\\"multiplatform\\\")\\|KotlinMultiplatform\" build.gradle* --include=\"*.gradle*\" | head -5\ncat shared\u002Fbuild.gradle.kts | head -30\n```\n\n## Project Structure\n\n```\nproject\u002F\n  shared\u002F                          # Shared KMP module\n    src\u002F\n      commonMain\u002Fkotlin\u002F           # Shared code (all platforms)\n      commonTest\u002Fkotlin\u002F           # Shared tests\n      androidMain\u002Fkotlin\u002F          # Android-specific implementations\n      iosMain\u002Fkotlin\u002F              # iOS-specific implementations\n    build.gradle.kts\n  composeApp\u002F                      # Android app (Compose)\n    src\u002Fmain\u002F\n  iosApp\u002F                          # iOS app (SwiftUI\u002FUIKit)\n    iosApp.xcodeproj\n  build.gradle.kts                 # Root build file\n```\n\n## Key Concepts\n\n### expect\u002Factual\n\nShared interface with platform-specific implementations:\n\n```kotlin\n\u002F\u002F commonMain\nexpect class PlatformLogger() {\n    fun log(message: String)\n}\n\n\u002F\u002F androidMain\nactual class PlatformLogger {\n    actual fun log(message: String) = Log.d(\"KMP\", message)\n}\n\n\u002F\u002F iosMain\nactual class PlatformLogger {\n    actual fun log(message: String) = NSLog(message)\n}\n```\n\n### Finding expect\u002Factual declarations\n\n```bash\n# Find expect declarations\ngrep -r \"expect \" shared\u002Fsrc\u002FcommonMain --include=\"*.kt\" -l\n\n# Find actual implementations\ngrep -r \"actual \" shared\u002Fsrc\u002FandroidMain --include=\"*.kt\" -l\ngrep -r \"actual \" shared\u002Fsrc\u002FiosMain --include=\"*.kt\" -l\n```\n\n## Build Commands\n\n```bash\n# Build shared module\n.\u002Fgradlew :shared:build\n\n# Run common tests\n.\u002Fgradlew :shared:testDebugUnitTest\n\n# Run iOS tests (on macOS)\n.\u002Fgradlew :shared:iosSimulatorArm64Test\n\n# Build Android app\n.\u002Fgradlew :composeApp:assembleDebug\n\n# Build iOS framework\n.\u002Fgradlew :shared:linkDebugFrameworkIosSimulatorArm64\n```\n\n## Testing\n\n### Shared Tests (commonTest)\n```kotlin\n\u002F\u002F shared\u002Fsrc\u002FcommonTest\u002Fkotlin\u002FMyTest.kt\nclass MyTest {\n    @Test\n    fun testSharedLogic() {\n        val result = calculate(2, 3)\n        assertEquals(5, result)\n    }\n}\n```\n\n### Platform-Specific Tests\n```kotlin\n\u002F\u002F shared\u002Fsrc\u002FandroidTest\u002Fkotlin\u002FAndroidSpecificTest.kt\nclass AndroidSpecificTest {\n    @Test\n    fun testAndroidImplementation() { ... }\n}\n```\n\n## Common Issues\n\n- **iOS build fails**: Check that the shared framework is linked correctly in Xcode\n- **expect\u002Factual mismatch**: Ensure all `expect` declarations have `actual` implementations for all targets\n- **Dependency conflicts**: Use `api()` vs `implementation()` carefully in shared module\n- **Kotlin\u002FNative memory model**: Be aware of the new memory model (default since Kotlin 1.7.20)\n\n## Tracing Bugs\n\n1. **Determine if the bug is in shared or platform code** — check the stack trace\n2. **If shared**: fix in `commonMain`, test in `commonTest`\n3. **If platform-specific**: fix in `androidMain`\u002F`iosMain`, test in platform-specific test source set\n4. **If the bug manifests differently per platform**: check `expect`\u002F`actual` implementations\n\n---\n\n**Want to improve this skill?** Share your KMP expertise, Compose Multiplatform patterns, and platform bridging tips via a PR.\n","# Kotlin Multiplatform (KMP)\n\n> **Community contribution welcome!** Help flesh out this skill with KMP patterns, common pitfalls, and real-world workflows.\n\nGuide for working with Kotlin Multiplatform projects.\n\n## When to Use\n\n- Working on shared Kotlin code that targets multiple platforms\n- Debugging platform-specific issues in KMP projects\n- Writing tests for shared modules\n\n## Detecting a KMP Project\n\n```bash\n# Check for KMP indicators\nls shared\u002F composeApp\u002F iosApp\u002F 2>\u002Fdev\u002Fnull\ngrep -r \"kotlin(\\\"multiplatform\\\")\\|KotlinMultiplatform\" build.gradle* --include=\"*.gradle*\" | head -5\ncat shared\u002Fbuild.gradle.kts | head -30\n```\n\n## Project Structure\n\n```\nproject\u002F\n  shared\u002F                          # Shared KMP module\n    src\u002F\n      commonMain\u002Fkotlin\u002F           # Shared code (all platforms)\n      commonTest\u002Fkotlin\u002F           # Shared tests\n      androidMain\u002Fkotlin\u002F          # Android-specific implementations\n      iosMain\u002Fkotlin\u002F              # iOS-specific implementations\n    build.gradle.kts\n  composeApp\u002F                      # Android app (Compose)\n    src\u002Fmain\u002F\n  iosApp\u002F                          # iOS app (SwiftUI\u002FUIKit)\n    iosApp.xcodeproj\n  build.gradle.kts                 # Root build file\n```\n\n## Key Concepts\n\n### expect\u002Factual\n\nShared interface with platform-specific implementations:\n\n```kotlin\n\u002F\u002F commonMain\nexpect class PlatformLogger() {\n    fun log(message: String)\n}\n\n\u002F\u002F androidMain\nactual class PlatformLogger {\n    actual fun log(message: String) = Log.d(\"KMP\", message)\n}\n\n\u002F\u002F iosMain\nactual class PlatformLogger {\n    actual fun log(message: String) = NSLog(message)\n}\n```\n\n### Finding expect\u002Factual declarations\n\n```bash\n# Find expect declarations\ngrep -r \"expect \" shared\u002Fsrc\u002FcommonMain --include=\"*.kt\" -l\n\n# Find actual implementations\ngrep -r \"actual \" shared\u002Fsrc\u002FandroidMain --include=\"*.kt\" -l\ngrep -r \"actual \" shared\u002Fsrc\u002FiosMain --include=\"*.kt\" -l\n```\n\n## Build Commands\n\n```bash\n# Build shared module\n.\u002Fgradlew :shared:build\n\n# Run common tests\n.\u002Fgradlew :shared:testDebugUnitTest\n\n# Run iOS tests (on macOS)\n.\u002Fgradlew :shared:iosSimulatorArm64Test\n\n# Build Android app\n.\u002Fgradlew :composeApp:assembleDebug\n\n# Build iOS framework\n.\u002Fgradlew :shared:linkDebugFrameworkIosSimulatorArm64\n```\n\n## Testing\n\n### Shared Tests (commonTest)\n```kotlin\n\u002F\u002F shared\u002Fsrc\u002FcommonTest\u002Fkotlin\u002FMyTest.kt\nclass MyTest {\n    @Test\n    fun testSharedLogic() {\n        val result = calculate(2, 3)\n        assertEquals(5, result)\n    }\n}\n```\n\n### Platform-Specific Tests\n```kotlin\n\u002F\u002F shared\u002Fsrc\u002FandroidTest\u002Fkotlin\u002FAndroidSpecificTest.kt\nclass AndroidSpecificTest {\n    @Test\n    fun testAndroidImplementation() { ... }\n}\n```\n\n## Common Issues\n\n- **iOS build fails**: Check that the shared framework is linked correctly in Xcode\n- **expect\u002Factual mismatch**: Ensure all `expect` declarations have `actual` implementations for all targets\n- **Dependency conflicts**: Use `api()` vs `implementation()` carefully in shared module\n- **Kotlin\u002FNative memory model**: Be aware of the new memory model (default since Kotlin 1.7.20)\n\n## Tracing Bugs\n\n1. **Determine if the bug is in shared or platform code** — check the stack trace\n2. **If shared**: fix in `commonMain`, test in `commonTest`\n3. **If platform-specific**: fix in `androidMain`\u002F`iosMain`, test in platform-specific test source set\n4. **If the bug manifests differently per platform**: check `expect`\u002F`actual` implementations\n\n---\n\n**Want to improve this skill?** Share your KMP expertise, Compose Multiplatform patterns, and platform bridging tips via a PR.\n",{"name":5,"license":15,"platforms":42,"description":7,"compatibility":44},[43],"kmp",[33,31,27,26],"main","2edc6ac1cde2cc280ae0388aa8072902d2e230d5","skills\u002Fkmp\u002Fskills\u002Fmobiai-kmp",14,"https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core","https:\u002F\u002Fgithub.com\u002FArisGuimera","https:\u002F\u002Faristi.dev","⭐️ GitHub Star\r\n📲 Mobile developer\r\n🎥 Te enseño a programar apps en Youtube (AristiDevs)\r\n✍🏻 Y por escrito en CursoKotlin.com\r\n❤️ Kotlin Fanboy\r\n👇👇👇👇","2026-11-13 22:28:09",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add ArisGuimera\u002FMobiAI-Core --skill mobiai-kmp",{"tool":60,"command":61},"bunx","bunx skills add ArisGuimera\u002FMobiAI-Core --skill mobiai-kmp",{"tool":63,"command":64},"pnpm","pnpm dlx skills add ArisGuimera\u002FMobiAI-Core --skill mobiai-kmp","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fkmp\u002Fskills\u002Fmobiai-kmp\u002FSKILL.md",true,[],[69,90,109,127,141,161],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":79,"publishedAt":37},"01M6KCMR2WVBEC7T0YY4J2SCAR","mobiai-react-native","Use when working on a React Native project — building, testing, debugging, understanding navigation and state management.","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Freact-native\u002Fskills\u002Fmobiai-react-native\u002FSKILL.md",[75,76],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":77,"categoryName":78,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[80,81,82,83,25,26,27,84,85,28,86,87,31,32,88,89,33,35],"react","react native","native","mobiai react native","debugging","state management","state","management","navigation","react-native",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":97,"publishedAt":37},"01M6KCMEC4YP1FFAX4ZX80Q10R","mobiai-ios-testing","Use when writing or running tests in an iOS project — unit tests, UI tests, snapshot tests, choosing the right framework.","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fios\u002Fskills\u002Fmobiai-ios-testing\u002FSKILL.md",[96],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[25,98,99,100,101,26,102,27,28,103,104,105,31,106,32,33,35,107,108],"ios","ios testing","mobiai ios testing","writing","unit tests","framework","running tests","ui","snapshot","tests","unit",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":37},"01M6KCM78C8P9R6X78EZCQ0YF9","mobiai-ios-device","Use when interacting with an iOS Simulator — run simctl commands, capture screenshots, read device logs, manage simulators.","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fios\u002Fskills\u002Fmobiai-ios-device\u002FSKILL.md",[],[98,116,117,118,26,27,119,28,120,121,122,31,32,123,124,33,125,126],"device","mobiai ios device","screenshots","run","logs","capture","read","manage","ios simulator","commands","with",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":37},"01M6KCM2HE6Z1B7WREJ9DTKKWA","mobiai-ios-build","Use when building an iOS project, configuring schemes, troubleshooting build failures, or managing dependencies with CocoaPods or SPM.","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fios\u002Fskills\u002Fmobiai-ios-build\u002FSKILL.md",[],[98,134,135,136,26,27,28,137,31,32,138,33,35,126,139,140],"build","ios build","mobiai ios build","troubleshooting","dependencies","spm","cocoapods",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":147,"publishedAt":37},"01M6KCKWZNT8P6K5SYXE1YAT9E","mobiai-ios-architecture","Use when creating features, refactoring, or navigating an iOS codebase — understand project structure, find where to make changes, follow existing patterns.","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fios\u002Fskills\u002Fmobiai-ios-architecture\u002FSKILL.md",[],[148,98,149,150,26,151,27,28,152,153,31,32,154,155,35,156,157,158,159,160],"architecture","ios architecture","mobiai ios architecture","project structure","refactoring","find","patterns","structure","understand","changes","codebase","Existing","features",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":168,"publishedAt":37},"01M6KCKBZ4CGTMW6GCAZW54QRM","mobiai-flutter","Use when working on a Flutter or Dart project — building, testing, debugging, understanding state management and project structure.","https:\u002F\u002Fgithub.com\u002FArisGuimera\u002FMobiAI-Core\u002Fblob\u002Fmain\u002Fskills\u002Fflutter\u002Fskills\u002Fmobiai-flutter\u002FSKILL.md",[167],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[169,170,25,26,151,27,84,85,28,86,171,87,31,32,155,33,35],"flutter","mobiai flutter","dart"]