[Framework] Feed list view in the Feed framework (#9)

This PR contains the work done to provide the existing `FeedViewController` view controller with real life data by integrating the `iTunesService` service into its view model. In addition, the list item cell has been design has been updated, and re-implemented using the `SwiftUI` framework.

Reviewed-on: rock-n-code/app-reviews#9
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
This commit was merged in pull request #9.
This commit is contained in:
2024-03-19 08:31:13 +00:00
committed by javier
parent 26c2c0c581
commit 09df006ab9
16 changed files with 664 additions and 166 deletions
+61 -9
View File
@@ -7,11 +7,12 @@
objects = {
/* Begin PBXBuildFile section */
0220ADA32BA90646001E6A9F /* FeedItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0220ADA22BA90646001E6A9F /* FeedItem.swift */; };
02620B8C2BA89C9A00DE7137 /* FeedViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02620B8B2BA89C9A00DE7137 /* FeedViewModel.swift */; };
02DC7F9F2BA51793000EEEBE /* ReviewsFeed.h in Headers */ = {isa = PBXBuildFile; fileRef = 02DC7F912BA51793000EEEBE /* ReviewsFeed.h */; settings = {ATTRIBUTES = (Public, ); }; };
02DC7FA22BA51793000EEEBE /* ReviewsFeed.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02DC7F8F2BA51793000EEEBE /* ReviewsFeed.framework */; };
02DC7FA32BA51793000EEEBE /* ReviewsFeed.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 02DC7F8F2BA51793000EEEBE /* ReviewsFeed.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
02DC7FAC2BA51B4C000EEEBE /* DetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 345AD13224C6EE64004E2EE1 /* DetailsViewController.swift */; };
02DC7FAD2BA51B4C000EEEBE /* ReviewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 345AD13024C6EE64004E2EE1 /* ReviewCell.swift */; };
02DC7FAE2BA51B4C000EEEBE /* FeedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 345AD12F24C6EE64004E2EE1 /* FeedViewController.swift */; };
02DC7FAF2BA51B4C000EEEBE /* Review.swift in Sources */ = {isa = PBXBuildFile; fileRef = 345AD13124C6EE64004E2EE1 /* Review.swift */; };
02DC7FB32BA52518000EEEBE /* ReviewsKit in Frameworks */ = {isa = PBXBuildFile; productRef = 02DC7FB22BA52518000EEEBE /* ReviewsKit */; };
@@ -46,6 +47,8 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
0220ADA22BA90646001E6A9F /* FeedItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedItem.swift; sourceTree = "<group>"; };
02620B8B2BA89C9A00DE7137 /* FeedViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedViewModel.swift; sourceTree = "<group>"; };
02DC7F8F2BA51793000EEEBE /* ReviewsFeed.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReviewsFeed.framework; sourceTree = BUILT_PRODUCTS_DIR; };
02DC7F912BA51793000EEEBE /* ReviewsFeed.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReviewsFeed.h; sourceTree = "<group>"; };
02DC7FB12BA52084000EEEBE /* Libraries */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Libraries; sourceTree = "<group>"; };
@@ -55,7 +58,6 @@
345AD12724C6EDDC004E2EE1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
345AD12924C6EDDC004E2EE1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
345AD12F24C6EE64004E2EE1 /* FeedViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedViewController.swift; sourceTree = "<group>"; };
345AD13024C6EE64004E2EE1 /* ReviewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReviewCell.swift; sourceTree = "<group>"; };
345AD13124C6EE64004E2EE1 /* Review.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Review.swift; sourceTree = "<group>"; };
345AD13224C6EE64004E2EE1 /* DetailsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailsViewController.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -81,6 +83,57 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
02620B852BA89BF900DE7137 /* UI */ = {
isa = PBXGroup;
children = (
02620B892BA89C2400DE7137 /* Components */,
02620B882BA89C1000DE7137 /* View Controllers */,
);
path = UI;
sourceTree = "<group>";
};
02620B862BA89C0000DE7137 /* Logic */ = {
isa = PBXGroup;
children = (
02620B8A2BA89C3300DE7137 /* Models */,
02620B872BA89C0700DE7137 /* View Models */,
);
path = Logic;
sourceTree = "<group>";
};
02620B872BA89C0700DE7137 /* View Models */ = {
isa = PBXGroup;
children = (
02620B8B2BA89C9A00DE7137 /* FeedViewModel.swift */,
);
path = "View Models";
sourceTree = "<group>";
};
02620B882BA89C1000DE7137 /* View Controllers */ = {
isa = PBXGroup;
children = (
345AD13224C6EE64004E2EE1 /* DetailsViewController.swift */,
345AD12F24C6EE64004E2EE1 /* FeedViewController.swift */,
);
path = "View Controllers";
sourceTree = "<group>";
};
02620B892BA89C2400DE7137 /* Components */ = {
isa = PBXGroup;
children = (
0220ADA22BA90646001E6A9F /* FeedItem.swift */,
);
path = Components;
sourceTree = "<group>";
};
02620B8A2BA89C3300DE7137 /* Models */ = {
isa = PBXGroup;
children = (
345AD13124C6EE64004E2EE1 /* Review.swift */,
);
path = Models;
sourceTree = "<group>";
};
02A6DA2F2BA591C000B943E2 /* Bundle */ = {
isa = PBXGroup;
children = (
@@ -159,10 +212,8 @@
02DC7FB02BA51B4F000EEEBE /* Sources */ = {
isa = PBXGroup;
children = (
345AD13224C6EE64004E2EE1 /* DetailsViewController.swift */,
345AD12F24C6EE64004E2EE1 /* FeedViewController.swift */,
345AD13124C6EE64004E2EE1 /* Review.swift */,
345AD13024C6EE64004E2EE1 /* ReviewCell.swift */,
02620B862BA89C0000DE7137 /* Logic */,
02620B852BA89BF900DE7137 /* UI */,
);
path = Sources;
sourceTree = "<group>";
@@ -314,10 +365,11 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
02620B8C2BA89C9A00DE7137 /* FeedViewModel.swift in Sources */,
02DC7FAC2BA51B4C000EEEBE /* DetailsViewController.swift in Sources */,
0220ADA32BA90646001E6A9F /* FeedItem.swift in Sources */,
02DC7FAF2BA51B4C000EEEBE /* Review.swift in Sources */,
02DC7FAE2BA51B4C000EEEBE /* FeedViewController.swift in Sources */,
02DC7FAD2BA51B4C000EEEBE /* ReviewCell.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -355,7 +407,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
BUILD_LIBRARY_FOR_DISTRIBUTION = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CODE_SIGN_IDENTITY = "";
@@ -404,7 +456,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
BUILD_LIBRARY_FOR_DISTRIBUTION = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CODE_SIGN_IDENTITY = "";