{"id":13806269,"url":"https://github.com/jakeheis/Ice","last_synced_at":"2025-05-13T21:32:45.743Z","repository":{"id":63912414,"uuid":"102137071","full_name":"jakeheis/Ice","owner":"jakeheis","description":"❄️ A developer friendly package manager for Swift; 100% compatible with Swift Package Manager","archived":false,"fork":false,"pushed_at":"2021-05-31T04:25:00.000Z","size":5890,"stargazers_count":387,"open_issues_count":3,"forks_count":15,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-29T10:49:14.013Z","etag":null,"topics":["package-manager","swift-package-manager"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jakeheis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-01T17:28:36.000Z","updated_at":"2025-03-04T10:09:17.000Z","dependencies_parsed_at":"2023-01-14T13:16:03.208Z","dependency_job_id":null,"html_url":"https://github.com/jakeheis/Ice","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jakeheis%2FIce","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jakeheis%2FIce/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jakeheis%2FIce/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jakeheis%2FIce/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jakeheis","download_url":"https://codeload.github.com/jakeheis/Ice/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254031380,"owners_count":22002755,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["package-manager","swift-package-manager"],"created_at":"2024-08-04T01:01:09.638Z","updated_at":"2025-05-13T21:32:45.437Z","avatar_url":"https://github.com/jakeheis.png","language":"Swift","funding_links":[],"categories":["Swift","HarmonyOS","Tools"],"sub_categories":["Windows Manager"],"readme":"# Ice\n\n[![Build Status](https://github.com/jakeheis/Ice/workflows/Test/badge.svg)](https://github.com/jakeheis/Ice/actions)\n\n❄️ A developer friendly package manager for Swift; 100% compatible with Swift Package Manager\n\n### Motivation\n\nThe official [Swift Package Manager](https://github.com/apple/swift-package-manager) is great at actually managing packages (resolving package versions, compiling source, etc.), but it lacks in developer friendliness. Ice uses Swift Package Manager in its core, but provides a much more developer friendly layer on top of SPM.\n\nA few features Ice has that SPM lacks:\n- Beautiful, yet information dense output (particularly while building and testing)\n- Ability to imperatively manage `Package.swift` (e.g. `ice add RxSwift`)\n- A centralized registry of packages\n- Automatic rebuilding / restarting of an app upon source changes\n- Short command names for the most used commands\n\n## Installation\n\n### [Mint](https://github.com/yonaskolb/mint) (recommended)\n\n```bash\nmint install jakeheis/Ice\n```\n\n### Manual\n\n```bash\ngit clone https://github.com/jakeheis/Ice\ncd Ice\nswift build -c release\ninstall .build/release/ice /usr/local/bin\n```\n\n## Better output\n\n### Init\n![new](https://github.com/jakeheis/Ice/raw/gifs/new.gif)\n\n### Build\n![build](https://github.com/jakeheis/Ice/raw/gifs/build.gif)\n\n### Test\n![test](https://github.com/jakeheis/Ice/raw/gifs/test.gif)\n\n## Imperatively manage `Package.swift`\n\nManage dependencies:\n\n```shell\nice add RxSwift\nice add Alamofire 4.5.1\nice add jakeheis/SwiftCLI\nice remove Alamofire\n```\n\nManage targets:\n\n```shell\nice target add Core\nice target add --test CoreTests --dependencies Core\nice target remove CoreTests\n```\n\nManage products:\n\n```shell\nice product add CoreLib --static\nice product add cli --exec --targets=CoreLib\nice product remove CoreLib\n```\n\n## Centralized package registry\n\nThe built in registry (https://github.com/jakeheis/IceRegistry) consists of the most-starred Swift repositories on Github. You get these for free, but you can also add your own personal entries to a local registry:\n\n```shell\n\u003e ice registry lookup Alamofire\nhttps://github.com/Alamofire/Alamofire\n\u003e ice registry add https://github.com/jakeheis/SwiftCLI SwiftCLI\n\u003e ice registry lookup SwiftCLI\nhttps://github.com/jakeheis/SwiftCLI\n```\n\nOnce packages are in the registry (either the shared registry or your local registry), you can refer to them just by the project name:\n\n```shell\n\u003e ice add Alamofire\n\u003e ice add SwiftCLI\n```\n\n## Automatic rebuilding / restarting\n\n`ice build` and `ice run` both accept a watch flag which instructs them to rebuild/restart your app whenever a source file changes:\n\n```shell\n\u003e ice build -w\n[ice] rebuilding due to changes...\nCompile CLI (20 sources)\n\n  ● Error: use of unresolved identifier 'dsf'\n\n    dsf\n    ^^^\n    at Sources/CLI/Target.swift:74\n\n[ice] rebuilding due to changes...\nCompile CLI (20 sources)\nLink ./.build/x86_64-apple-macosx10.10/debug/ice\n```\n\n```shell\n\u003e ice run -w\n[ice] restarting due to changes...\n```\n\n## Other commands\n\n#### ice outdated\n\nCheck if any dependencies are outdated\n\n```shell\n\u003e ice outdated\n+-----------------+-----------------+----------+--------+\n| Name            | Wanted          | Resolved | Latest |\n+-----------------+-----------------+----------+--------+\n| FileKit         | 4.1.0 ..\u003c 5.0.0 | 4.1.1    | 4.1.1  |\n| Rainbow         | 3.1.1 ..\u003c 4.0.0 | 3.1.1    | 3.1.1  |\n| Regex           | 1.1.0 ..\u003c 2.0.0 | 1.1.0    | 1.1.0  |\n| SwiftCLI        | 4.0.0 ..\u003c 5.0.0 | 4.0.3    | 4.0.4  |\n| SwiftyTextTable | 0.8.0 ..\u003c 1.0.0 | 0.8.0    | 0.8.0  |\n+-----------------+-----------------+----------+--------+\n```\n\n#### ice update\nUpdate the current package's dependencies\n\n```shell\n\u003e ice update\nUpdate https://github.com/jakeheis/SwiftCLI\nResolve https://github.com/jakeheis/SwiftCLI at 4.0.4\n\u003e ice update SwiftCLI 5.0.0\n```\n\n#### ice clean\nClean the current project by removing build artifacts\n\n#### ice reset\nRemove everything in the `.build` folder (build artifacts, checked out dependencies, etc.)\n\n#### ice init\nInitialize a new package in the current directory\n\n#### ice dump\nDump the current package as JSON\n\n#### ice describe Alamofire\nDescribe the package in the registry with the name \"Alamofire\"\n\n#### ice search CLI\nSearch for packages in the registry with \"CLI\" in their name or description\n\n#### ice xc\nGenerate an Xcode project for the current project and open it\n\n#### ice config get/set\nConfigure Ice behavior. Recognized keys:\n- reformat: when writing `Package.swift`, should Ice reformat the file to be alphabetized\n\n## FAQ\n\n#### Can I use Ice and SPM side by side?\nYes! Because Ice is built on SPM, you can seamlessly go back and forth between `ice` and `swift` commands.\n\n#### Why does Ice internally use Swift Package Manager at all? Why not write an entirely new package manager?\n\nA goal of Ice is to retain 100% compatibilty with SPM -- Ice should not splinter the ecosystem in any way. By building Ice on top of SPM, we can easily attain that goal.\n\n#### Why not contribute these improvements directly to SPM rather than creating a new layer on top of it?\n\nSwift Package Manager has considered some of the improvements offered in Ice but rejected them (for now). Notably, SPM chose to keep the package manager within the `swift` executable, meaning that commands are often quite verbose. I believe that tasks as common as cleaning a package should not require the user to type commands as lengthy as `swift package clean`.\n\nHaving said that, it's my hope that Ice can be a proving ground for some of these features, a place where they can be fine-tuned and eventually can make their way into SPM core. Ideally, Ice will one day be unnecessary.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjakeheis%2FIce","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjakeheis%2FIce","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjakeheis%2FIce/lists"}