{"id":14697184,"url":"https://github.com/denissimon/Cryptocurrency-Info","last_synced_at":"2025-09-10T03:31:57.085Z","repository":{"id":87339860,"uuid":"337341197","full_name":"denissimon/Cryptocurrency-Info","owner":"denissimon","description":"Example iOS app designed using MVVM-C and Layered Architecture. Uses Swift Concurrency.","archived":false,"fork":false,"pushed_at":"2024-11-19T18:05:11.000Z","size":4281,"stargazers_count":4,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-27T10:40:28.792Z","etag":null,"topics":["app","architecture","async-await","clean-code","coordinator","cryptocurrency","demo-app","ios","ios-app","layered-architecture","mvvm","mvvm-architecture","mvvm-c","swift","swift-concurrency","viewmodel","xcode"],"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/denissimon.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-09T08:38:49.000Z","updated_at":"2024-11-19T18:05:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"b307aa47-bfdf-4459-a804-41a36ff3a2d3","html_url":"https://github.com/denissimon/Cryptocurrency-Info","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denissimon%2FCryptocurrency-Info","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denissimon%2FCryptocurrency-Info/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denissimon%2FCryptocurrency-Info/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denissimon%2FCryptocurrency-Info/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/denissimon","download_url":"https://codeload.github.com/denissimon/Cryptocurrency-Info/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232492463,"owners_count":18531964,"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":["app","architecture","async-await","clean-code","coordinator","cryptocurrency","demo-app","ios","ios-app","layered-architecture","mvvm","mvvm-architecture","mvvm-c","swift","swift-concurrency","viewmodel","xcode"],"created_at":"2024-09-13T07:01:02.206Z","updated_at":"2025-09-10T03:31:57.072Z","avatar_url":"https://github.com/denissimon.png","language":"Swift","funding_links":[],"categories":["Finance"],"sub_categories":["Cryptocurrency"],"readme":"# Cryptocurrency Info\n[![Swift Version](https://img.shields.io/badge/Swift-5.5+-F16D39.svg?style=flat)](https://swift.org)\n[![Platforms](https://img.shields.io/badge/platform-iOS-lightgrey.svg)](https://developer.apple.com/swift/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/denissimon/Cryptocurrency-Info/blob/master/LICENSE)\n\nExample iOS app designed using MVVM-C and Layered Architecture. Uses Swift Concurrency.\n\nThe app shows cryptocurrency prices and other related info. Built with Messari API.\n\nIt has two modules: AssetsList and AssetDetails. The list of cryptocurrencies is loaded in batches.\n\n\u003ctable\u003e \n  \u003ctr\u003e\n    \u003ctd\u003e \u003cimg src=\"Screenshots/1_Cryptocurrency-Info.png\" width = 252px\u003e\u003c/td\u003e\n    \u003ctd\u003e \u003cimg src=\"Screenshots/2_Cryptocurrency-Info.png\" width = 252px\u003e\u003c/td\u003e\n    \u003ctd\u003e \u003cimg src=\"Screenshots/3_Cryptocurrency-Info.png\" width = 252px\u003e\u003c/td\u003e\n    \u003ctd\u003e \u003cimg src=\"Screenshots/4_Cryptocurrency-Info.png\" width = 252px\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Architecture concepts used here\n\n- [Layered Architecture][LayeredArchitectureLink]\n- [MVVM][MVVMLink]\n- [Flow coordinator][FlowCoordinatorLink]\n- [Dependency Injection][DIContainerLink], DIContainer\n- [Data Binding][DataBindingLink] using the lightweight Observable\\\u003cT\\\u003e\n- [Closure-based delegation][ClosureBasedDelegationLink] using the lightweight Event\\\u003cT\\\u003e\n- [Reusable data sources][DataSourceLink]\n\n[LayeredArchitectureLink]: https://en.wikipedia.org/wiki/Multitier_architecture\n[MVVMLink]: https://github.com/denissimon/Cryptocurrency-Info/tree/master/CryptocurrencyInfo/Modules/AssetsFeature/AssetDetails\n[FlowCoordinatorLink]: https://github.com/denissimon/Cryptocurrency-Info/tree/master/CryptocurrencyInfo/Coordinator\n[DIContainerLink]: https://github.com/denissimon/Cryptocurrency-Info/blob/master/CryptocurrencyInfo/Coordinator/DIContainer/DIContainer.swift\n[DataBindingLink]: https://github.com/denissimon/Cryptocurrency-Info/blob/master/CryptocurrencyInfo/Modules/AssetsFeature/AssetsList/ViewModel/AssetsListViewModel.swift\n[ClosureBasedDelegationLink]: https://github.com/denissimon/Cryptocurrency-Info/blob/master/CryptocurrencyInfo/Modules/AssetsFeature/AssetsList/View/AssetsListDataSource.swift\n[DataSourceLink]: https://github.com/denissimon/Cryptocurrency-Info/blob/master/CryptocurrencyInfo/Modules/AssetsFeature/AssetDetails/View/AssetDetailsDataSource.swift\n\n### Includes\n\n- [async/await][AsyncAwaitLink] with the existing Infrastructure remaining unchanged\n- [SharedEvents][SharedEventsLink] - a NotificationCenter-like component\n- [Currency conversion service][CurrencyConversionServiceLink] - for displaying asset prices in different currencies (USD, EUR, etc.)\n- Configurable use of [UserDefaults][UserDefaultsLink] or [SwiftData][SwiftDataLink] example\n- [Cached Task][CachedTaskLink] to avoid making duplicate network requests\n- Advanced using of [Codable][CodableLink]\n- Localization\n- Unit tests\n\n[AsyncAwaitLink]: https://github.com/denissimon/Cryptocurrency-Info/tree/master/CryptocurrencyInfo/Data/Repositories\n[SharedEventsLink]: https://github.com/denissimon/Cryptocurrency-Info/blob/master/CryptocurrencyInfo/Common/SharedEvents.swift\n[CurrencyConversionServiceLink]: https://github.com/denissimon/Cryptocurrency-Info/blob/master/CryptocurrencyInfo/Services/CurrencyConversionService.swift\n[UserDefaultsLink]: https://github.com/denissimon/Cryptocurrency-Info/blob/master/CryptocurrencyInfo/Data/Persistence/DBInteractor/Settings/UserDefaultsSettingsDBInteractor.swift\n[SwiftDataLink]: https://github.com/denissimon/Cryptocurrency-Info/blob/master/CryptocurrencyInfo/Data/Persistence/DBInteractor/Settings/SwiftDataSettingsDBInteractor.swift\n[CachedTaskLink]: https://github.com/denissimon/Cryptocurrency-Info/blob/master/CryptocurrencyInfo/Modules/AssetsFeature/AssetsList/ViewModel/AssetsListViewModel.swift\n[CodableLink]: https://github.com/denissimon/Cryptocurrency-Info/blob/master/CryptocurrencyInfo/Modules/AssetsFeature/AssetDetails/Models/Profile.swift\n\n### Built with\n\n- [SwiftEvents](https://github.com/denissimon/SwiftEvents) - The easiest way to implement data binding and notifications. Includes Event\\\u003cT\\\u003e and Observable\\\u003cT\\\u003e. Has a thread-safe version.\n- [URLSessionAdapter](https://github.com/denissimon/URLSessionAdapter) - A Codable wrapper around URLSession for networking.\n- [Toast-Swift](https://github.com/scalessec/Toast-Swift) - A Swift extension that adds toast notifications to the UIView object class.\n- [UAObfuscatedString](https://github.com/UrbanApps/UAObfuscatedString) - A simple category to hide sensitive strings from appearing in your binary.\n\nThe dependency manager is [Swift Package Manager](https://www.swift.org/documentation/package-manager/). To update package versions: \n\n```txt\nXcode: File -\u003e Packages -\u003e Update to Latest Package Versions\n```\n\n### Requirements\n\niOS version support: 17.0+. Xcode 15.0+, Swift 5.5+\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenissimon%2FCryptocurrency-Info","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdenissimon%2FCryptocurrency-Info","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenissimon%2FCryptocurrency-Info/lists"}