├── .github ├── deployment │ ├── ExportOptions.plist │ ├── certificate.p12.gpg │ └── profile.mobileprovision.gpg └── workflows │ ├── CI-iOS.yml │ ├── CI-macOS.yml │ └── Deploy.yml ├── .gitignore ├── EssentialApp ├── EssentialApp.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── IDETemplateMacros.plist ├── EssentialApp.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDETemplateMacros.plist │ │ ├── IDEWorkspaceChecks.plist │ │ └── xcschemes │ │ ├── CI_iOS.xcscheme │ │ └── EssentialApp.xcscheme ├── EssentialApp │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── 1024.png │ │ │ ├── 120-1.png │ │ │ ├── 120.png │ │ │ ├── 152.png │ │ │ ├── 167.png │ │ │ ├── 180.png │ │ │ ├── 20.png │ │ │ ├── 29.png │ │ │ ├── 40-1.png │ │ │ ├── 40-2.png │ │ │ ├── 40.png │ │ │ ├── 58-1.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 76.png │ │ │ ├── 80-1.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ ├── CombineHelpers.swift │ ├── CommentsUIComposer.swift │ ├── FeedUIComposer.swift │ ├── FeedViewAdapter.swift │ ├── Info.plist │ ├── LoadResourcePresentationAdapter.swift │ ├── SceneDelegate.swift │ ├── WeakRefVirtualProxy.swift │ ├── el.lproj │ │ └── LaunchScreen.strings │ ├── en.lproj │ │ └── LaunchScreen.strings │ └── pt-BR.lproj │ │ └── LaunchScreen.strings └── EssentialAppTests │ ├── CommentsUIIntegrationTests.swift │ ├── FeedAcceptanceTests.swift │ ├── FeedUIIntegrationTests.swift │ ├── Helpers │ ├── FeedImageCell+TestHelpers.swift │ ├── FeedUIIntegrationTests+Assertions.swift │ ├── FeedUIIntegrationTests+LoaderSpy.swift │ ├── HTTPClientStub.swift │ ├── ListViewController+TestHelpers.swift │ ├── LoaderSpy.swift │ ├── SharedTestHelpers.swift │ ├── UIButton+TestHelpers.swift │ ├── UIControl+TestHelpers.swift │ ├── UIImage+TestHelpers.swift │ ├── UIRefreshControl+TestHelpers.swift │ ├── UIView+TestHelpers.swift │ └── XCTestCase+MemoryLeakTracking.swift │ ├── Info.plist │ └── SceneDelegateTests.swift ├── EssentialFeed ├── EssentialFeed.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ ├── IDETemplateMacros.plist │ │ └── xcschemes │ │ ├── CI_macOS.xcscheme │ │ ├── EssentialFeed.xcscheme │ │ ├── EssentialFeedAPIEndToEndTests.xcscheme │ │ ├── EssentialFeedCacheIntegrationTests.xcscheme │ │ └── EssentialFeediOS.xcscheme ├── EssentialFeed │ ├── Feed API │ │ ├── FeedEndpoint.swift │ │ ├── FeedImageDataMapper.swift │ │ ├── FeedItemsMapper.swift │ │ └── Helpers │ │ │ └── HTTPURLResponse+StatusCode.swift │ ├── Feed Cache │ │ ├── FeedCachePolicy.swift │ │ ├── FeedImageDataStore.swift │ │ ├── FeedStore.swift │ │ ├── Infrastructure │ │ │ ├── CoreData │ │ │ │ ├── CoreDataFeedStore+FeedImageDataStore.swift │ │ │ │ ├── CoreDataFeedStore+FeedStore.swift │ │ │ │ ├── CoreDataFeedStore.swift │ │ │ │ ├── CoreDataHelpers.swift │ │ │ │ ├── FeedStore.xcdatamodeld │ │ │ │ │ ├── .xccurrentversion │ │ │ │ │ ├── FeedStore.xcdatamodel │ │ │ │ │ │ └── contents │ │ │ │ │ └── FeedStore2.xcdatamodel │ │ │ │ │ │ └── contents │ │ │ │ ├── ManagedCache.swift │ │ │ │ └── ManagedFeedImage.swift │ │ │ └── InMemory │ │ │ │ └── InMemoryFeedStore.swift │ │ ├── LocalFeedImage.swift │ │ ├── LocalFeedImageDataLoader.swift │ │ └── LocalFeedLoader.swift │ ├── Feed Feature │ │ ├── FeedCache.swift │ │ ├── FeedImage.swift │ │ ├── FeedImageDataCache.swift │ │ └── FeedImageDataLoader.swift │ ├── Feed Presentation │ │ ├── FeedImagePresenter.swift │ │ ├── FeedImageViewModel.swift │ │ ├── FeedPresenter.swift │ │ ├── el.lproj │ │ │ └── Feed.strings │ │ ├── en.lproj │ │ │ └── Feed.strings │ │ └── pt-BR.lproj │ │ │ └── Feed.strings │ ├── Image Comments API │ │ ├── ImageCommentsEndpoint.swift │ │ └── ImageCommentsMapper.swift │ ├── Image Comments Feature │ │ └── ImageComment.swift │ ├── Image Comments Presentation │ │ ├── ImageCommentsPresenter.swift │ │ ├── el.lproj │ │ │ └── ImageComments.strings │ │ ├── en.lproj │ │ │ └── ImageComments.strings │ │ └── pt-BR.lproj │ │ │ └── ImageComments.strings │ ├── Info.plist │ ├── Shared API Infra │ │ └── URLSessionHTTPClient.swift │ ├── Shared API │ │ ├── HTTPClient.swift │ │ └── Paginated.swift │ └── Shared Presentation │ │ ├── LoadResourcePresenter.swift │ │ ├── ResourceErrorView.swift │ │ ├── ResourceErrorViewModel.swift │ │ ├── ResourceLoadingView.swift │ │ ├── ResourceLoadingViewModel.swift │ │ ├── el.lproj │ │ └── Shared.strings │ │ ├── en.lproj │ │ └── Shared.strings │ │ └── pt-BR.lproj │ │ └── Shared.strings ├── EssentialFeedAPIEndToEndTests │ ├── EssentialFeedAPIEndToEndTests.swift │ └── Info.plist ├── EssentialFeedCacheIntegrationTests │ ├── EssentialFeedCacheIntegrationTests.swift │ └── Info.plist ├── EssentialFeedTests │ ├── Feed API │ │ ├── FeedEndpointTests.swift │ │ ├── FeedImageDataMapperTests.swift │ │ └── FeedItemsMapperTests.swift │ ├── Feed Cache │ │ ├── CacheFeedImageDataUseCaseTests.swift │ │ ├── CacheFeedUseCaseTests.swift │ │ ├── CoreDataFeedImageDataStoreTests.swift │ │ ├── CoreDataFeedStoreTests.swift │ │ ├── FeedImageDataStoreSpecs │ │ │ ├── FeedImageDataStoreSpecs.swift │ │ │ └── XCTestCase+FeedImageDataStoreSpecs.swift │ │ ├── FeedStoreSpecs │ │ │ ├── FeedStoreSpecs.swift │ │ │ ├── XCTestCase+FailableDeleteFeedStoreSpecs.swift │ │ │ ├── XCTestCase+FailableInsertFeedStoreSpecs.swift │ │ │ ├── XCTestCase+FailableRetrieveFeedStoreSpecs.swift │ │ │ └── XCTestCase+FeedStoreSpecs.swift │ │ ├── Helpers │ │ │ ├── FeedCacheTestHelpers.swift │ │ │ ├── FeedImageDataStoreSpy.swift │ │ │ └── FeedStoreSpy.swift │ │ ├── InMemoryFeedImageDataStoreTests.swift │ │ ├── InMemoryFeedStoreTests.swift │ │ ├── LoadFeedFromCacheUseCaseTests.swift │ │ ├── LoadFeedImageDataFromCacheUseCaseTests.swift │ │ └── ValidateFeedCacheUseCaseTests.swift │ ├── Feed Presentation │ │ ├── FeedImagePresenterTests.swift │ │ ├── FeedLocalizationTests.swift │ │ └── FeedPresenterTests.swift │ ├── Helpers │ │ ├── SharedLocalizationTestHelpers.swift │ │ ├── SharedTestHelpers.swift │ │ └── XCTestCase+MemoryLeakTracking.swift │ ├── Image Comments API │ │ ├── ImageCommentsEndpointTests.swift │ │ └── ImageCommentsMapperTests.swift │ ├── Image Comments Presentation │ │ ├── ImageCommentsLocalizationTests.swift │ │ └── ImageCommentsPresenterTests.swift │ ├── Info.plist │ ├── Shared API Infra │ │ ├── Helpers │ │ │ └── URLProtocolStub.swift │ │ └── URLSessionHTTPClientTests.swift │ └── Shared Presentation │ │ ├── LoadResourcePresenterTests.swift │ │ └── SharedLocalizationTests.swift ├── EssentialFeediOS │ ├── Feed UI │ │ ├── Controllers │ │ │ ├── FeedImageCellController.swift │ │ │ └── LoadMoreCellController.swift │ │ └── Views │ │ │ ├── Feed.storyboard │ │ │ ├── Feed.xcassets │ │ │ ├── Contents.json │ │ │ └── pin.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── pin.png │ │ │ │ ├── pin@2x.png │ │ │ │ └── pin@3x.png │ │ │ ├── FeedImageCell.swift │ │ │ ├── Helpers │ │ │ ├── UIImageView+Animations.swift │ │ │ └── UIView+Shimmering.swift │ │ │ └── LoadMoreCell.swift │ ├── Image Comments UI │ │ ├── Controllers │ │ │ └── ImageCommentCellController.swift │ │ └── Views │ │ │ ├── ImageCommentCell.swift │ │ │ └── ImageComments.storyboard │ ├── Info.plist │ └── Shared UI │ │ ├── Controllers │ │ ├── CellController.swift │ │ └── ListViewController.swift │ │ └── Views │ │ ├── ErrorView.swift │ │ └── Helpers │ │ ├── UIRefreshControl+Helpers.swift │ │ ├── UITableView+Dequeueing.swift │ │ ├── UITableView+HeaderSizing.swift │ │ └── UIView+Container.swift └── EssentialFeediOSTests │ ├── Feed UI │ ├── FeedSnapshotTests.swift │ └── snapshots │ │ ├── FEED_WITH_CONTENT_dark.png │ │ ├── FEED_WITH_CONTENT_light.png │ │ ├── FEED_WITH_CONTENT_light_extraExtraExtraLarge.png │ │ ├── FEED_WITH_FAILED_IMAGE_LOADING_dark.png │ │ ├── FEED_WITH_FAILED_IMAGE_LOADING_light.png │ │ ├── FEED_WITH_LOAD_MORE_ERROR_dark.png │ │ ├── FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png │ │ ├── FEED_WITH_LOAD_MORE_ERROR_light.png │ │ ├── FEED_WITH_LOAD_MORE_INDICATOR_dark.png │ │ └── FEED_WITH_LOAD_MORE_INDICATOR_light.png │ ├── Helpers │ ├── UIImage+TestHelpers.swift │ ├── UIViewController+Snapshot.swift │ └── XCTestCase+Snapshot.swift │ ├── Image Comments UI │ ├── ImageCommentsSnapshotTests.swift │ └── snapshots │ │ ├── IMAGE_COMMENTS_dark.png │ │ ├── IMAGE_COMMENTS_light.png │ │ └── IMAGE_COMMENTS_light_extraExtraExtraLarge.png │ ├── Info.plist │ └── Shared UI │ ├── ListSnapshotTests.swift │ └── snapshots │ ├── EMPTY_LIST_dark.png │ ├── EMPTY_LIST_light.png │ ├── LIST_WITH_ERROR_MESSAGE_dark.png │ ├── LIST_WITH_ERROR_MESSAGE_light.png │ └── LIST_WITH_ERROR_MESSAGE_light_extraExtraExtraLarge.png ├── LICENSE.md ├── Prototype ├── Prototype.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── Prototype │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-1024.png │ │ ├── Icon-120.png │ │ ├── Icon-121.png │ │ ├── Icon-152.png │ │ ├── Icon-167.png │ │ ├── Icon-180.png │ │ ├── Icon-20.png │ │ ├── Icon-29.png │ │ ├── Icon-40.png │ │ ├── Icon-41.png │ │ ├── Icon-42.png │ │ ├── Icon-58.png │ │ ├── Icon-59.png │ │ ├── Icon-60.png │ │ ├── Icon-76.png │ │ ├── Icon-80.png │ │ ├── Icon-81.png │ │ └── Icon-87.png │ ├── Contents.json │ ├── image-0.imageset │ │ ├── Contents.json │ │ └── image-0.jpg │ ├── image-1.imageset │ │ ├── Contents.json │ │ └── image-1.jpg │ ├── image-2.imageset │ │ ├── Contents.json │ │ └── image-2.jpg │ ├── image-3.imageset │ │ ├── Contents.json │ │ └── image-3.jpg │ ├── image-4.imageset │ │ ├── Contents.json │ │ └── image-4.jpg │ ├── image-5.imageset │ │ ├── Contents.json │ │ └── image-5.jpg │ └── pin.imageset │ │ ├── Contents.json │ │ ├── pin.png │ │ ├── pin@2x.png │ │ └── pin@3x.png │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── FeedImageCell.swift │ ├── FeedImageViewModel+PrototypeData.swift │ ├── FeedViewController.swift │ └── Info.plist ├── README.md ├── architecture.png └── feed_flowchart.png /.github/deployment/ExportOptions.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/.github/deployment/ExportOptions.plist -------------------------------------------------------------------------------- /.github/deployment/certificate.p12.gpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/.github/deployment/certificate.p12.gpg -------------------------------------------------------------------------------- /.github/deployment/profile.mobileprovision.gpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/.github/deployment/profile.mobileprovision.gpg -------------------------------------------------------------------------------- /.github/workflows/CI-iOS.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/.github/workflows/CI-iOS.yml -------------------------------------------------------------------------------- /.github/workflows/CI-macOS.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/.github/workflows/CI-macOS.yml -------------------------------------------------------------------------------- /.github/workflows/Deploy.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/.github/workflows/Deploy.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/.gitignore -------------------------------------------------------------------------------- /EssentialApp/EssentialApp.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp.xcodeproj/project.pbxproj -------------------------------------------------------------------------------- /EssentialApp/EssentialApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata -------------------------------------------------------------------------------- /EssentialApp/EssentialApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist -------------------------------------------------------------------------------- /EssentialApp/EssentialApp.xcodeproj/xcshareddata/IDETemplateMacros.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp.xcodeproj/xcshareddata/IDETemplateMacros.plist -------------------------------------------------------------------------------- /EssentialApp/EssentialApp.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp.xcworkspace/contents.xcworkspacedata -------------------------------------------------------------------------------- /EssentialApp/EssentialApp.xcworkspace/xcshareddata/IDETemplateMacros.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp.xcworkspace/xcshareddata/IDETemplateMacros.plist -------------------------------------------------------------------------------- /EssentialApp/EssentialApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist -------------------------------------------------------------------------------- /EssentialApp/EssentialApp.xcworkspace/xcshareddata/xcschemes/CI_iOS.xcscheme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp.xcworkspace/xcshareddata/xcschemes/CI_iOS.xcscheme -------------------------------------------------------------------------------- /EssentialApp/EssentialApp.xcworkspace/xcshareddata/xcschemes/EssentialApp.xcscheme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp.xcworkspace/xcshareddata/xcschemes/EssentialApp.xcscheme -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/AppDelegate.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/AppDelegate.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/120-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/120-1.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/40-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/40-1.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/40-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/40-2.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/58-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/58-1.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/80-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/80-1.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/AppIcon.appiconset/Contents.json -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Assets.xcassets/Contents.json -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Base.lproj/LaunchScreen.storyboard -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/CombineHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/CombineHelpers.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/CommentsUIComposer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/CommentsUIComposer.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/FeedUIComposer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/FeedUIComposer.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/FeedViewAdapter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/FeedViewAdapter.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/Info.plist -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/LoadResourcePresentationAdapter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/LoadResourcePresentationAdapter.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/SceneDelegate.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/SceneDelegate.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/WeakRefVirtualProxy.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialApp/WeakRefVirtualProxy.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/el.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/en.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /EssentialApp/EssentialApp/pt-BR.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/CommentsUIIntegrationTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/CommentsUIIntegrationTests.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/FeedAcceptanceTests.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/FeedUIIntegrationTests.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/FeedImageCell+TestHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/FeedImageCell+TestHelpers.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+Assertions.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+Assertions.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/FeedUIIntegrationTests+LoaderSpy.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/HTTPClientStub.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/HTTPClientStub.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/ListViewController+TestHelpers.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/LoaderSpy.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/LoaderSpy.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/SharedTestHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/SharedTestHelpers.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/UIButton+TestHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/UIButton+TestHelpers.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/UIControl+TestHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/UIControl+TestHelpers.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/UIImage+TestHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/UIImage+TestHelpers.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/UIRefreshControl+TestHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/UIRefreshControl+TestHelpers.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/UIView+TestHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/UIView+TestHelpers.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Helpers/XCTestCase+MemoryLeakTracking.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Helpers/XCTestCase+MemoryLeakTracking.swift -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/Info.plist -------------------------------------------------------------------------------- /EssentialApp/EssentialAppTests/SceneDelegateTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialApp/EssentialAppTests/SceneDelegateTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed.xcodeproj/project.xcworkspace/contents.xcworkspacedata -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/IDETemplateMacros.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/IDETemplateMacros.plist -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/CI_macOS.xcscheme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/CI_macOS.xcscheme -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/EssentialFeed.xcscheme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/EssentialFeed.xcscheme -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/EssentialFeedAPIEndToEndTests.xcscheme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/EssentialFeedAPIEndToEndTests.xcscheme -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/EssentialFeedCacheIntegrationTests.xcscheme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/EssentialFeedCacheIntegrationTests.xcscheme -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/EssentialFeediOS.xcscheme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/EssentialFeediOS.xcscheme -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed API/FeedEndpoint.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed API/FeedEndpoint.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed API/FeedImageDataMapper.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed API/FeedImageDataMapper.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed API/FeedItemsMapper.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed API/FeedItemsMapper.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed API/Helpers/HTTPURLResponse+StatusCode.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed API/Helpers/HTTPURLResponse+StatusCode.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/FeedCachePolicy.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/FeedCachePolicy.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/FeedImageDataStore.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/FeedImageDataStore.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/FeedStore.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/FeedStore.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/CoreDataFeedStore+FeedImageDataStore.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/CoreDataFeedStore+FeedImageDataStore.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/CoreDataFeedStore+FeedStore.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/CoreDataFeedStore+FeedStore.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/CoreDataFeedStore.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/CoreDataFeedStore.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/CoreDataHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/CoreDataHelpers.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/FeedStore.xcdatamodeld/.xccurrentversion: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/FeedStore.xcdatamodeld/.xccurrentversion -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/FeedStore.xcdatamodeld/FeedStore.xcdatamodel/contents: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/FeedStore.xcdatamodeld/FeedStore.xcdatamodel/contents -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/FeedStore.xcdatamodeld/FeedStore2.xcdatamodel/contents: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/FeedStore.xcdatamodeld/FeedStore2.xcdatamodel/contents -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/ManagedCache.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/ManagedCache.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/ManagedFeedImage.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/CoreData/ManagedFeedImage.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/InMemory/InMemoryFeedStore.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/Infrastructure/InMemory/InMemoryFeedStore.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/LocalFeedImage.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/LocalFeedImage.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/LocalFeedImageDataLoader.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/LocalFeedImageDataLoader.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Cache/LocalFeedLoader.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Cache/LocalFeedLoader.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Feature/FeedCache.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Feature/FeedCache.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Feature/FeedImage.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Feature/FeedImage.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Feature/FeedImageDataCache.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Feature/FeedImageDataCache.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Feature/FeedImageDataLoader.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Feature/FeedImageDataLoader.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Presentation/FeedImagePresenter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Presentation/FeedImagePresenter.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Presentation/FeedImageViewModel.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Presentation/FeedImageViewModel.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Presentation/FeedPresenter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Feed Presentation/FeedPresenter.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Presentation/el.lproj/Feed.strings: -------------------------------------------------------------------------------- 1 | 2 | "FEED_VIEW_TITLE" = "Το Feed μου"; 3 | -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Presentation/en.lproj/Feed.strings: -------------------------------------------------------------------------------- 1 | 2 | "FEED_VIEW_TITLE" = "My Feed"; 3 | -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Feed Presentation/pt-BR.lproj/Feed.strings: -------------------------------------------------------------------------------- 1 | 2 | "FEED_VIEW_TITLE" = "Meu Feed"; 3 | -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Image Comments API/ImageCommentsEndpoint.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Image Comments API/ImageCommentsEndpoint.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Image Comments API/ImageCommentsMapper.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Image Comments API/ImageCommentsMapper.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Image Comments Feature/ImageComment.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Image Comments Feature/ImageComment.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Image Comments Presentation/ImageCommentsPresenter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Image Comments Presentation/ImageCommentsPresenter.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Image Comments Presentation/el.lproj/ImageComments.strings: -------------------------------------------------------------------------------- 1 | 2 | "IMAGE_COMMENTS_VIEW_TITLE" = "Σχόλια"; 3 | -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Image Comments Presentation/en.lproj/ImageComments.strings: -------------------------------------------------------------------------------- 1 | 2 | "IMAGE_COMMENTS_VIEW_TITLE" = "Comments"; 3 | -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Image Comments Presentation/pt-BR.lproj/ImageComments.strings: -------------------------------------------------------------------------------- 1 | 2 | "IMAGE_COMMENTS_VIEW_TITLE" = "Comentários"; 3 | -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Info.plist -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Shared API Infra/URLSessionHTTPClient.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Shared API Infra/URLSessionHTTPClient.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Shared API/HTTPClient.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Shared API/HTTPClient.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Shared API/Paginated.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Shared API/Paginated.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Shared Presentation/LoadResourcePresenter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Shared Presentation/LoadResourcePresenter.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Shared Presentation/ResourceErrorView.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Shared Presentation/ResourceErrorView.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Shared Presentation/ResourceErrorViewModel.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Shared Presentation/ResourceErrorViewModel.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Shared Presentation/ResourceLoadingView.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Shared Presentation/ResourceLoadingView.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Shared Presentation/ResourceLoadingViewModel.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Shared Presentation/ResourceLoadingViewModel.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Shared Presentation/el.lproj/Shared.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeed/Shared Presentation/el.lproj/Shared.strings -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Shared Presentation/en.lproj/Shared.strings: -------------------------------------------------------------------------------- 1 | 2 | "GENERIC_CONNECTION_ERROR" = "Couldn't connect to server"; 3 | -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeed/Shared Presentation/pt-BR.lproj/Shared.strings: -------------------------------------------------------------------------------- 1 | 2 | "GENERIC_CONNECTION_ERROR" = "Não foi possível conectar com o servidor"; 3 | -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedAPIEndToEndTests/EssentialFeedAPIEndToEndTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedAPIEndToEndTests/EssentialFeedAPIEndToEndTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedAPIEndToEndTests/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedAPIEndToEndTests/Info.plist -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedCacheIntegrationTests/EssentialFeedCacheIntegrationTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedCacheIntegrationTests/EssentialFeedCacheIntegrationTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedCacheIntegrationTests/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedCacheIntegrationTests/Info.plist -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed API/FeedEndpointTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed API/FeedEndpointTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed API/FeedImageDataMapperTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed API/FeedImageDataMapperTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed API/FeedItemsMapperTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed API/FeedItemsMapperTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/CacheFeedImageDataUseCaseTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/CacheFeedImageDataUseCaseTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/CacheFeedUseCaseTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/CacheFeedUseCaseTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/CoreDataFeedImageDataStoreTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/CoreDataFeedImageDataStoreTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/CoreDataFeedStoreTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/CoreDataFeedStoreTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/FeedImageDataStoreSpecs/FeedImageDataStoreSpecs.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/FeedImageDataStoreSpecs/FeedImageDataStoreSpecs.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/FeedImageDataStoreSpecs/XCTestCase+FeedImageDataStoreSpecs.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/FeedImageDataStoreSpecs/XCTestCase+FeedImageDataStoreSpecs.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/FeedStoreSpecs/FeedStoreSpecs.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/FeedStoreSpecs/FeedStoreSpecs.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/FeedStoreSpecs/XCTestCase+FailableDeleteFeedStoreSpecs.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/FeedStoreSpecs/XCTestCase+FailableDeleteFeedStoreSpecs.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/FeedStoreSpecs/XCTestCase+FailableInsertFeedStoreSpecs.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/FeedStoreSpecs/XCTestCase+FailableInsertFeedStoreSpecs.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/FeedStoreSpecs/XCTestCase+FailableRetrieveFeedStoreSpecs.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/FeedStoreSpecs/XCTestCase+FailableRetrieveFeedStoreSpecs.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/FeedStoreSpecs/XCTestCase+FeedStoreSpecs.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/FeedStoreSpecs/XCTestCase+FeedStoreSpecs.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/Helpers/FeedCacheTestHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/Helpers/FeedCacheTestHelpers.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/Helpers/FeedImageDataStoreSpy.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/Helpers/FeedImageDataStoreSpy.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/Helpers/FeedStoreSpy.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/Helpers/FeedStoreSpy.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/InMemoryFeedImageDataStoreTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/InMemoryFeedImageDataStoreTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/InMemoryFeedStoreTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/InMemoryFeedStoreTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/LoadFeedFromCacheUseCaseTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/LoadFeedFromCacheUseCaseTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/LoadFeedImageDataFromCacheUseCaseTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/LoadFeedImageDataFromCacheUseCaseTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Cache/ValidateFeedCacheUseCaseTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Cache/ValidateFeedCacheUseCaseTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Presentation/FeedImagePresenterTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Presentation/FeedImagePresenterTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Presentation/FeedLocalizationTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Presentation/FeedLocalizationTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Feed Presentation/FeedPresenterTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Feed Presentation/FeedPresenterTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Helpers/SharedLocalizationTestHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Helpers/SharedLocalizationTestHelpers.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Helpers/SharedTestHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Helpers/SharedTestHelpers.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Helpers/XCTestCase+MemoryLeakTracking.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Helpers/XCTestCase+MemoryLeakTracking.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Image Comments API/ImageCommentsEndpointTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Image Comments API/ImageCommentsEndpointTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Image Comments API/ImageCommentsMapperTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Image Comments API/ImageCommentsMapperTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Image Comments Presentation/ImageCommentsLocalizationTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Image Comments Presentation/ImageCommentsLocalizationTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Image Comments Presentation/ImageCommentsPresenterTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Image Comments Presentation/ImageCommentsPresenterTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Info.plist -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Shared API Infra/Helpers/URLProtocolStub.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Shared API Infra/Helpers/URLProtocolStub.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Shared API Infra/URLSessionHTTPClientTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Shared API Infra/URLSessionHTTPClientTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Shared Presentation/LoadResourcePresenterTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Shared Presentation/LoadResourcePresenterTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeedTests/Shared Presentation/SharedLocalizationTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeedTests/Shared Presentation/SharedLocalizationTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Feed UI/Controllers/FeedImageCellController.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/FeedImageCellController.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Feed UI/Controllers/LoadMoreCellController.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Feed UI/Views/Feed.storyboard: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Feed UI/Views/Feed.storyboard -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Feed UI/Views/Feed.xcassets/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Feed UI/Views/Feed.xcassets/Contents.json -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Feed UI/Views/Feed.xcassets/pin.imageset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Feed UI/Views/Feed.xcassets/pin.imageset/Contents.json -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Feed UI/Views/Feed.xcassets/pin.imageset/pin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Feed UI/Views/Feed.xcassets/pin.imageset/pin.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Feed UI/Views/Feed.xcassets/pin.imageset/pin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Feed UI/Views/Feed.xcassets/pin.imageset/pin@2x.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Feed UI/Views/Feed.xcassets/pin.imageset/pin@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Feed UI/Views/Feed.xcassets/pin.imageset/pin@3x.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Feed UI/Views/FeedImageCell.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Feed UI/Views/FeedImageCell.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Feed UI/Views/Helpers/UIImageView+Animations.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Feed UI/Views/Helpers/UIImageView+Animations.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Feed UI/Views/Helpers/UIView+Shimmering.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Feed UI/Views/Helpers/UIView+Shimmering.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Feed UI/Views/LoadMoreCell.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Feed UI/Views/LoadMoreCell.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Image Comments UI/Controllers/ImageCommentCellController.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Image Comments UI/Controllers/ImageCommentCellController.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Image Comments UI/Views/ImageCommentCell.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Image Comments UI/Views/ImageCommentCell.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Image Comments UI/Views/ImageComments.storyboard: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Image Comments UI/Views/ImageComments.storyboard -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Info.plist -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Shared UI/Controllers/CellController.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Shared UI/Controllers/CellController.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Shared UI/Controllers/ListViewController.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Shared UI/Controllers/ListViewController.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Shared UI/Views/ErrorView.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Shared UI/Views/ErrorView.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Shared UI/Views/Helpers/UIRefreshControl+Helpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Shared UI/Views/Helpers/UIRefreshControl+Helpers.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Shared UI/Views/Helpers/UITableView+Dequeueing.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Shared UI/Views/Helpers/UITableView+Dequeueing.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Shared UI/Views/Helpers/UITableView+HeaderSizing.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Shared UI/Views/Helpers/UITableView+HeaderSizing.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOS/Shared UI/Views/Helpers/UIView+Container.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOS/Shared UI/Views/Helpers/UIView+Container.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Feed UI/FeedSnapshotTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_CONTENT_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_CONTENT_dark.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_CONTENT_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_CONTENT_light.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_CONTENT_light_extraExtraExtraLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_CONTENT_light_extraExtraExtraLarge.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_FAILED_IMAGE_LOADING_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_FAILED_IMAGE_LOADING_dark.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_FAILED_IMAGE_LOADING_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_FAILED_IMAGE_LOADING_light.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_dark.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_extraExtraExtraLarge.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_ERROR_light.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_INDICATOR_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_INDICATOR_dark.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_INDICATOR_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Feed UI/snapshots/FEED_WITH_LOAD_MORE_INDICATOR_light.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Helpers/UIImage+TestHelpers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Helpers/UIImage+TestHelpers.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Helpers/UIViewController+Snapshot.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Helpers/UIViewController+Snapshot.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Helpers/XCTestCase+Snapshot.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Helpers/XCTestCase+Snapshot.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Image Comments UI/ImageCommentsSnapshotTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Image Comments UI/ImageCommentsSnapshotTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Image Comments UI/snapshots/IMAGE_COMMENTS_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Image Comments UI/snapshots/IMAGE_COMMENTS_dark.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Image Comments UI/snapshots/IMAGE_COMMENTS_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Image Comments UI/snapshots/IMAGE_COMMENTS_light.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Image Comments UI/snapshots/IMAGE_COMMENTS_light_extraExtraExtraLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Image Comments UI/snapshots/IMAGE_COMMENTS_light_extraExtraExtraLarge.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Info.plist -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Shared UI/ListSnapshotTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Shared UI/ListSnapshotTests.swift -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Shared UI/snapshots/EMPTY_LIST_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Shared UI/snapshots/EMPTY_LIST_dark.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Shared UI/snapshots/EMPTY_LIST_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Shared UI/snapshots/EMPTY_LIST_light.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Shared UI/snapshots/LIST_WITH_ERROR_MESSAGE_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Shared UI/snapshots/LIST_WITH_ERROR_MESSAGE_dark.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Shared UI/snapshots/LIST_WITH_ERROR_MESSAGE_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Shared UI/snapshots/LIST_WITH_ERROR_MESSAGE_light.png -------------------------------------------------------------------------------- /EssentialFeed/EssentialFeediOSTests/Shared UI/snapshots/LIST_WITH_ERROR_MESSAGE_light_extraExtraExtraLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/EssentialFeed/EssentialFeediOSTests/Shared UI/snapshots/LIST_WITH_ERROR_MESSAGE_light_extraExtraExtraLarge.png -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/LICENSE.md -------------------------------------------------------------------------------- /Prototype/Prototype.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype.xcodeproj/project.pbxproj -------------------------------------------------------------------------------- /Prototype/Prototype.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype.xcodeproj/project.xcworkspace/contents.xcworkspacedata -------------------------------------------------------------------------------- /Prototype/Prototype.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist -------------------------------------------------------------------------------- /Prototype/Prototype/AppDelegate.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/AppDelegate.swift -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Contents.json -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-1024.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-120.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-121.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-152.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-167.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-180.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-20.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-29.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-40.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-41.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-42.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-58.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-59.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-80.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-81.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/AppIcon.appiconset/Icon-87.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/Contents.json -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/image-0.imageset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/image-0.imageset/Contents.json -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/image-0.imageset/image-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/image-0.imageset/image-0.jpg -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/image-1.imageset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/image-1.imageset/Contents.json -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/image-1.imageset/image-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/image-1.imageset/image-1.jpg -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/image-2.imageset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/image-2.imageset/Contents.json -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/image-2.imageset/image-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/image-2.imageset/image-2.jpg -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/image-3.imageset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/image-3.imageset/Contents.json -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/image-3.imageset/image-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/image-3.imageset/image-3.jpg -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/image-4.imageset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/image-4.imageset/Contents.json -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/image-4.imageset/image-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/image-4.imageset/image-4.jpg -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/image-5.imageset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/image-5.imageset/Contents.json -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/image-5.imageset/image-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/image-5.imageset/image-5.jpg -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/pin.imageset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/pin.imageset/Contents.json -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/pin.imageset/pin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/pin.imageset/pin.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/pin.imageset/pin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/pin.imageset/pin@2x.png -------------------------------------------------------------------------------- /Prototype/Prototype/Assets.xcassets/pin.imageset/pin@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Assets.xcassets/pin.imageset/pin@3x.png -------------------------------------------------------------------------------- /Prototype/Prototype/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Base.lproj/LaunchScreen.storyboard -------------------------------------------------------------------------------- /Prototype/Prototype/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Base.lproj/Main.storyboard -------------------------------------------------------------------------------- /Prototype/Prototype/FeedImageCell.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/FeedImageCell.swift -------------------------------------------------------------------------------- /Prototype/Prototype/FeedImageViewModel+PrototypeData.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/FeedImageViewModel+PrototypeData.swift -------------------------------------------------------------------------------- /Prototype/Prototype/FeedViewController.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/FeedViewController.swift -------------------------------------------------------------------------------- /Prototype/Prototype/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/Prototype/Prototype/Info.plist -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/README.md -------------------------------------------------------------------------------- /architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/architecture.png -------------------------------------------------------------------------------- /feed_flowchart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/essentialdevelopercom/essential-feed-case-study/HEAD/feed_flowchart.png --------------------------------------------------------------------------------