Giter Club home page Giter Club logo

ios-lead-essentials-feed-store-challenge's Introduction

The FeedStore challenge - iOSLeadEssentials.com

You are called to build a new infrastructure component that conforms to the <FeedStore> protocol using Core Data to persist the feed.

Instructions

  1. Fork the latest version of this repository. Here's how forking works.

  2. Open the FeedStoreChallenge.xcodeproj project on Xcode 12.4 (you can use other Xcode versions by switching to the appropriate branch, e.g., xcode11, xcode12, xcode12_2, xcode12_3).

    • Do not change the indentation in the project.

    • Do not rename the existing classes and files.

    • Important: Every time you build the project, it'll automatically reformat the modified files with SwiftFormat to maintain the code consistent.

  3. Implement a <FeedStore> protocol implementation using Core Data in the CoreDataFeedStore.swift file.

    • There shouldn't be any extra logic in the CoreDataFeedStore implementation.

      • It should just obey to the retrieve/insert/delete commands without any extra logic.

        • For example, don't check if the array of images is empty - and don't replace optional values with default values such as Date().

        • This kind of logic shouldn't be in the infrastructure store implementation.

    • We already provided the Core Data boilerplate and the tests.

  4. Use the Tests/FeedStoreChallengeTests.swift to validate your implementation conforms to the store specs.

    • Uncomment (CMD+/) and implement one test at a time following the TDD process:

      • Make the test pass, commit, and move to the next one.
    • While developing your solutions, run all tests with CMD+U.

  5. Use the Tests/FeedStoreIntegrationTests.swift to validate that your implementation persists data to disk correctly.

    • Uncomment and implement one integration test at a time following the TDD process: Make the test pass, commit, and move to the next one.
  6. Errors should be handled accordingly.

    • There shouldn't be any force-unwrap ! or fatalError in production code.

    • There shouldn't be empty catch blocks.

    • There shouldn't be any print statements, such as print(error).

  7. When all tests are passing and you're done implementing your solution:

    • Create a Pull Request from your branch to the main challenge repo's matching branch.

      • For example, if you implemented the challenge using the xcode12_4 branch, your PR should be from your fork's xcode12_4 branch into the main repo's xcode12_4 branch (DO NOT MIX Xcode versions or you'll have merge conflicts!).
    • The title of the Pull Request should be: Your Name - Feed Store Challenge.

  8. Review your code in the Pull Request (PR) and make sure it follows all the instructions above.

    • If it doesn't, make the appropriate changes, push, and review your code in the PR again.
  9. After you review your code and it follows all the instructions above:

    • Post a comment in the challenge page in the academy with the link to your PR, so we can review your solution and provide feedback.

Guidelines

  1. Aim to commit your changes every time you add/alter the behavior of your system or refactor your code.

  2. Aim for descriptive commit messages that clarify the intent of your contribution which will help other developers understand your train of thought and purpose of changes.

  3. The system should always be in a green state, meaning that in each commit all tests should be passing.

  4. The project should build without warnings.

  5. The code should be carefully organized and easy to read (e.g. indentation must be consistent).

  6. Make careful and proper use of access control, marking as private any implementation details that aren’t referenced from other external components.

  7. Aim to write self-documenting code by providing context and detail when naming your components, avoiding explanations in comments.

  8. Aim to declare dependencies explicitly, leveraging dependency injection wherever necessary.

  9. Aim not to block the main thread - run expensive operations in a background queue.

Happy coding!

ios-lead-essentials-feed-store-challenge's People

Contributors

caiozullo avatar mapostolakis avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.