{"id":26833240,"url":"https://github.com/madcato/marveldetail","last_synced_at":"2025-06-14T03:37:24.366Z","repository":{"id":79557485,"uuid":"358519111","full_name":"madcato/MarvelDetail","owner":"madcato","description":"This is an iOS app that show a Marvel characters list, and allows to see the detail of each of them individually.","archived":false,"fork":false,"pushed_at":"2021-04-16T07:52:19.000Z","size":10160,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-30T15:34:25.921Z","etag":null,"topics":["fastlane","ios","swift","xcode"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/madcato.png","metadata":{"files":{"readme":"readme.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":null,"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-04-16T07:50:07.000Z","updated_at":"2023-09-02T17:09:37.000Z","dependencies_parsed_at":"2023-05-11T22:45:10.159Z","dependency_job_id":null,"html_url":"https://github.com/madcato/MarvelDetail","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/madcato/MarvelDetail","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madcato%2FMarvelDetail","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madcato%2FMarvelDetail/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madcato%2FMarvelDetail/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madcato%2FMarvelDetail/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/madcato","download_url":"https://codeload.github.com/madcato/MarvelDetail/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madcato%2FMarvelDetail/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259755738,"owners_count":22906622,"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":["fastlane","ios","swift","xcode"],"created_at":"2025-03-30T15:28:25.456Z","updated_at":"2025-06-14T03:37:24.360Z","avatar_url":"https://github.com/madcato.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Project MarvelDetail\n\nThis is an iOS app that show a MArcel characters list, and allows to see the detail of each of them individually.\n\n## Characteristics\n\n- Use Marvel API [documentation](https://developer.marvel.com/docs).\n- Fetches list of characters: *GET* `/v1/public/characters` .\n- Fetches a single character by id: *GET* `/v1/public/characters/{characterid}` .\n- Show list of characters.\n- Navigate to a character detail.\n\n### Next steps\n\nThese are some functionality to add to this project:\n\n- Save the Marvel private key in a secure place, like macOS Keychain.\n- Create an infinite scroll\n- Add different graphic themes.\n- Show a view to indicate user that this app requires internet connetion. Show it only when there is no connection.\n- Add UI tests.\n\n\n## HowTo install\n\n### Requirements\n\n- [Xcode](https://developer.apple.com/xcode/)\n- [Brew](https://brew.sh)\n- [Swiftlint](https://github.com/realm/SwiftLint)\n- [fastlane](https://fastlane.tools)\n- [Carthage](https://github.com/Carthage/Carthage)\n\n### Getting the source\n\nFirst, check out the source, including all the dependencies:\n\n    $ git clone --recurse-submodules https://github.com/madcato/MarvelDetail\n\n### Installing other dependencies\n\n#### [Brew](https://brew.sh)\n\n    $ /usr/bin/ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\"\n\n#### [Fastlane](https://docs.fastlane.tools/getting-started/ios/setup/)\n\n    $ xcode-select --install\n    $ brew cask install fastlane\n\n#### [SwiftLint](https://github.com/realm/SwiftLint)\n\n    $ brew install swiftlint\n\nConfigure SwiftLint editing file `.swiftlint.yml` in the root of the project.\n\n#### [Carthage](https://github.com/Carthage/Carthage)\n\n    $ brew install carthage\n\n### Building it\n\nFirst, update carthage:\n\n    $ carthage update --use-xcframeworks --platform ios\n\nOpen the project, HolaBarcelona.xcodeproj, and build and run.\n\n### Build with fastlane\n\n    $  bundle exec fastlane build\n\nThe computer where fastlane is going to run must have the provissioning and private key installed\n\n### Send app to TestFlight with fastlane\n\n    $  bundle exec fastlane beta\n\nThe computer where fastlane is going to run must have the provissioning and private key installed\n\n### Launch tests with fastlane\n\n    $  bundle exec fastlane tests\n\n## Files\n\n- README.md (this file)\n- CHANGELOG [How to keep a CHANGELOG](https://keepachangelog.com/en/0.3.0/)\n\n#### Project directory estructure\n\n```\nMarvelDetail\n│\n└───MarvelDetail\n│   │\n│   └───Startup                // App start related classes, like Migrations\n│   │   │   AppDelegate.swift\n│   │   │\n│   │   └───Migration          // Classes and models for persisted data migrations\n│   │                          //  between versions\n│   │\n│   └───Features             // Classes, resources, storyboards related to only one feature\n│   │   |\n│   │   └───MarvelCharacters\n│   │   │   │   Feature001Model.swift\n│   │   │   │   Feature001UI.storyboard\n│   │   │   │   Feature001ViewController.swift\n│   │   │   │\n│   │   │   └───Cells\n│   │   │\n│   │\n│   └───ComplexFeature001\n│   │   │\n│   │   └───Subfeature002\n│   │   │\n│   │   └───Subfeature003\n│   │\n│   └───Library                 // keep in this group all shared code between features\n│   │   │\n│   │   └───Configuration       // Classes with the app configuration, like serverURL \n│   │   └───Model               // Persisted data model\n│   │   └───Feed\n│   │   └───Services\n│   │   └───Extensions\n│   │\n│   └───Resources               // Resource files, like images, grouped by type\n│   │   │   Images.xcassets     // Keep all images in one asset to help searches\n│   │   │\n│   │   └───Environments        // Plist files with the configuration of each environment\n│   │   │   │   integration.plist\n│   │   │   │   production.plist\n│   │   │   │   staging.plist\n│   │   │\n│   │   └───pdf\n│   │   └───certificates\n│   │   └───html\n│   │   └───json\n│   │   └───video\n│   │   └───plist\n│   │\n│   └───Supporting Files\n│       │   MarvelDetail.entitlements\n│       │   Info.plist\n│\n└───Frameworks                // External projects,libraries and frameworks\n│    │\n│    └───Alamofire.xcodeproj\n│    └───AlamofireNetworkActivityIndicator.framework\n│    └───AlamofireImage.framework\n│\n└───MarvelDetailTests\n│\n└───MarvelDetailUITests\n│\n└───Products\n```\n\n### External frameworks\n\nIncluded in the project directly using [Carthage](https://github.com/Carthage/Carthage). This way is easier to manage versions of this external frameworks. Carthage does not add much build time, because it builds the frameworks previously and add them to the repository.\n\n- [Alamofire](https://github.com/Alamofire/Alamofire)\n  For accesing remote http servers\n- [AlamofireNetworkActivityIndicator](https://github.com/Alamofire/AlamofireNetworkActivityIndicator)\n  To manage the network activity indicator automatically with Alamofire\n- [AlamofireImage](https://github.com/Alamofire/AlamofireImage)\n  AlamofireImage is an image component library for Alamofire\n\n#### Carthage version setting\n\n[Read about Semver](http://semver.org/) to know the meaning of each component in the version code string: a.b.c\n\n\\\u003e= 1.0 for “at least version 1.0”       \n~\u003e 1.0 for “compatible with version 1.0”    \n== 1.0 for “exactly version 1.0”    \n\n### Integrations\n\n- [fastlane](https://fastlane.tools)\n  To manage the build of the project and publish the app into TestFlight and App Store\n- [Swiftlint](https://github.com/realm/SwiftLint)\n  To analyze statically code quality\n\n## Tests\n\n## UI tests\n\n## Recommended links\n\n- https://medium.com/cocoaacademymag/unit-testing-network-request-3a75061fcf4c\n- https://kean.github.io/post/api-client\n- https://clean-swift.com/clean-swift-ios-architecture/\n\n## Screenshots with fastlane\n\n- [fastlane screenshots documentation](https://docs.fastlane.tools/getting-started/ios/screenshots/)\n\nDefine where to capture screens in the file `SnapshotUITest\\SnapshotUITest.swift`\n```swift\n    func testSnapshot() {\n        let app = XCUIApplication()\n        snapshot(\"01MainScreen\")\n        app.navigationBars[\"Root View Controller\"].buttons[\"Login\"].tap()\n        app.tables.buttons[\"Sign in\"].tap()\n        snapshot(\"02LoginScreen\")\n        app.alerts.scrollViews.otherElements.buttons[\"OK\"].tap()\n        snapshot(\"03LoginFailScreen\")\n    }\n```\n\nThen capture screenshots by running: `$ fastlane snapshot`\n\nUpload those screenshots files to the App Store with: `$ fastlane deliver`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmadcato%2Fmarveldetail","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmadcato%2Fmarveldetail","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmadcato%2Fmarveldetail/lists"}