Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .DS_Store
Binary file not shown.
Binary file added .github/.DS_Store
Binary file not shown.
Binary file added .github/workflows/.DS_Store
Binary file not shown.
32 changes: 32 additions & 0 deletions .github/workflows/.github/workflows/CI.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: CI-macOS

# Controls when the action will run.
# Triggers the workflow on pull request events but only for the master branch.
on:
push:
branches: [ "develop" ]
pull_request:
branches: [ "develop" ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build-and-test"
build-and-test:
# The type of runner that the job will run on
runs-on: macos-latest

timeout-minutes: 8

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v4

- name: Select Xcode
run: sudo xcode-select -switch /Applications/Xcode_16.4.app

- name: Xcode version
run: /usr/bin/xcodebuild -version

- name: Build and Test
run: xcodebuild clean build test -project EssentialFeed/EssentialFeed.xcodeproj -scheme "CI_macOS" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -sdk macosx -destination "platform=macOS" ONLY_ACTIVE_ARCH=YES
Binary file modified EssentialFeed/.DS_Store
Binary file not shown.
39 changes: 39 additions & 0 deletions EssentialFeed/CI.xctestplan
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"configurations" : [
{
"id" : "AC0E7322-42B7-4363-8F3B-6F336365CFB3",
"name" : "Test Scheme Action",
"options" : {

}
}
],
"defaultOptions" : {
"codeCoverage" : {
"targets" : [
{
"containerPath" : "container:EssentialFeed.xcodeproj",
"identifier" : "080EDEF021B6DA7E00813479",
"name" : "EssentialFeed"
}
]
}
},
"testTargets" : [
{
"target" : {
"containerPath" : "container:EssentialFeed.xcodeproj",
"identifier" : "AFCCD9642D87A9BC003221BE",
"name" : "EssentialFeedAPIEndToEndTests"
}
},
{
"target" : {
"containerPath" : "container:EssentialFeed.xcodeproj",
"identifier" : "080EDEF921B6DA7E00813479",
"name" : "EssentialFeedTests"
}
}
],
"version" : 1
}
125 changes: 123 additions & 2 deletions EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 55;
objectVersion = 70;
objects = {

/* Begin PBXBuildFile section */
Expand All @@ -15,6 +15,8 @@
AF9074A52D1D7AA70083835F /* RemoteFeedLoaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF9074A42D1D7AA70083835F /* RemoteFeedLoaderTests.swift */; };
AFAE6E0E2D862C2100AE2724 /* XCTestCase+MemoryLeakTracking.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAE6E0D2D862C2100AE2724 /* XCTestCase+MemoryLeakTracking.swift */; };
AFCCD9602D87A3EC003221BE /* URLSessionHTTPClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCCD95F2D87A3EC003221BE /* URLSessionHTTPClient.swift */; };
AFCCD9692D87A9BC003221BE /* EssentialFeed.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 080EDEF121B6DA7E00813479 /* EssentialFeed.framework */; };
AFCCD96F2D87B019003221BE /* XCTestCase+MemoryLeakTracking.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAE6E0D2D862C2100AE2724 /* XCTestCase+MemoryLeakTracking.swift */; };
AFFE11122D2358ED00B44DEB /* HTTPClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFFE11112D2358ED00B44DEB /* HTTPClient.swift */; };
AFFE11142D2359EE00B44DEB /* FeedItemsMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFFE11132D2359EE00B44DEB /* FeedItemsMapper.swift */; };
/* End PBXBuildFile section */
Expand All @@ -27,6 +29,13 @@
remoteGlobalIDString = 080EDEF021B6DA7E00813479;
remoteInfo = EssentialFeed;
};
AFCCD96A2D87A9BC003221BE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 080EDEE821B6DA7E00813479 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 080EDEF021B6DA7E00813479;
remoteInfo = EssentialFeed;
};
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
Expand All @@ -41,11 +50,17 @@
AF9074A32D1D7AA70083835F /* EssentialFeedTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "EssentialFeedTests-Bridging-Header.h"; sourceTree = "<group>"; };
AF9074A42D1D7AA70083835F /* RemoteFeedLoaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteFeedLoaderTests.swift; sourceTree = "<group>"; };
AFAE6E0D2D862C2100AE2724 /* XCTestCase+MemoryLeakTracking.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTestCase+MemoryLeakTracking.swift"; sourceTree = "<group>"; };
AFB964AD2E395E750098D10F /* CI.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = CI.xctestplan; sourceTree = "<group>"; };
AFCCD95F2D87A3EC003221BE /* URLSessionHTTPClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSessionHTTPClient.swift; sourceTree = "<group>"; };
AFCCD9652D87A9BC003221BE /* EssentialFeedAPIEndToEndTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EssentialFeedAPIEndToEndTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
AFFE11112D2358ED00B44DEB /* HTTPClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPClient.swift; sourceTree = "<group>"; };
AFFE11132D2359EE00B44DEB /* FeedItemsMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedItemsMapper.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFileSystemSynchronizedRootGroup section */
AFCCD9662D87A9BC003221BE /* EssentialFeedAPIEndToEndTests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = EssentialFeedAPIEndToEndTests; sourceTree = "<group>"; };
/* End PBXFileSystemSynchronizedRootGroup section */

/* Begin PBXFrameworksBuildPhase section */
080EDEEE21B6DA7E00813479 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
Expand All @@ -62,14 +77,24 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
AFCCD9622D87A9BC003221BE /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
AFCCD9692D87A9BC003221BE /* EssentialFeed.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
080EDEE721B6DA7E00813479 = {
isa = PBXGroup;
children = (
AFB964AD2E395E750098D10F /* CI.xctestplan */,
080EDEF321B6DA7E00813479 /* EssentialFeed */,
080EDEFE21B6DA7E00813479 /* EssentialFeedTests */,
AFCCD9662D87A9BC003221BE /* EssentialFeedAPIEndToEndTests */,
080EDEF221B6DA7E00813479 /* Products */,
);
sourceTree = "<group>";
Expand All @@ -79,6 +104,7 @@
children = (
080EDEF121B6DA7E00813479 /* EssentialFeed.framework */,
080EDEFA21B6DA7E00813479 /* EssentialFeedTests.xctest */,
AFCCD9652D87A9BC003221BE /* EssentialFeedAPIEndToEndTests.xctest */,
);
name = Products;
sourceTree = "<group>";
Expand Down Expand Up @@ -190,14 +216,37 @@
productReference = 080EDEFA21B6DA7E00813479 /* EssentialFeedTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
AFCCD9642D87A9BC003221BE /* EssentialFeedAPIEndToEndTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = AFCCD96E2D87A9BC003221BE /* Build configuration list for PBXNativeTarget "EssentialFeedAPIEndToEndTests" */;
buildPhases = (
AFCCD9612D87A9BC003221BE /* Sources */,
AFCCD9622D87A9BC003221BE /* Frameworks */,
AFCCD9632D87A9BC003221BE /* Resources */,
);
buildRules = (
);
dependencies = (
AFCCD96B2D87A9BC003221BE /* PBXTargetDependency */,
);
fileSystemSynchronizedGroups = (
AFCCD9662D87A9BC003221BE /* EssentialFeedAPIEndToEndTests */,
);
name = EssentialFeedAPIEndToEndTests;
packageProductDependencies = (
);
productName = EssentialFeedAPIEndToEndTests;
productReference = AFCCD9652D87A9BC003221BE /* EssentialFeedAPIEndToEndTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
080EDEE821B6DA7E00813479 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastSwiftUpdateCheck = 1010;
LastSwiftUpdateCheck = 1640;
LastUpgradeCheck = 1600;
ORGANIZATIONNAME = "";
TargetAttributes = {
Expand All @@ -209,6 +258,9 @@
CreatedOnToolsVersion = 10.1;
LastSwiftMigration = 1620;
};
AFCCD9642D87A9BC003221BE = {
CreatedOnToolsVersion = 16.2;
};
};
};
buildConfigurationList = 080EDEEB21B6DA7E00813479 /* Build configuration list for PBXProject "EssentialFeed" */;
Expand All @@ -226,6 +278,7 @@
targets = (
080EDEF021B6DA7E00813479 /* EssentialFeed */,
080EDEF921B6DA7E00813479 /* EssentialFeedTests */,
AFCCD9642D87A9BC003221BE /* EssentialFeedAPIEndToEndTests */,
);
};
/* End PBXProject section */
Expand All @@ -245,6 +298,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
AFCCD9632D87A9BC003221BE /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
Expand All @@ -271,6 +331,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
AFCCD9612D87A9BC003221BE /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AFCCD96F2D87B019003221BE /* XCTestCase+MemoryLeakTracking.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */

/* Begin PBXTargetDependency section */
Expand All @@ -279,6 +347,11 @@
target = 080EDEF021B6DA7E00813479 /* EssentialFeed */;
targetProxy = 080EDEFC21B6DA7E00813479 /* PBXContainerItemProxy */;
};
AFCCD96B2D87A9BC003221BE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 080EDEF021B6DA7E00813479 /* EssentialFeed */;
targetProxy = AFCCD96A2D87A9BC003221BE /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */

/* Begin XCBuildConfiguration section */
Expand Down Expand Up @@ -519,6 +592,45 @@
};
name = Release;
};
AFCCD96C2D87A9BC003221BE /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = KM569NM77P;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.Obada.EssentialFeedAPIEndToEndTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_EMIT_LOC_STRINGS = NO;
SWIFT_VERSION = 5.0;
};
name = Debug;
};
AFCCD96D2D87A9BC003221BE /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = KM569NM77P;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.Obada.EssentialFeedAPIEndToEndTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO;
SWIFT_VERSION = 5.0;
};
name = Release;
};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
Expand Down Expand Up @@ -549,6 +661,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
AFCCD96E2D87A9BC003221BE /* Build configuration list for PBXNativeTarget "EssentialFeedAPIEndToEndTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
AFCCD96C2D87A9BC003221BE /* Debug */,
AFCCD96D2D87A9BC003221BE /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 080EDEE821B6DA7E00813479 /* Project object */;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1640"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "080EDEF021B6DA7E00813479"
BuildableName = "EssentialFeed.framework"
BlueprintName = "EssentialFeed"
ReferencedContainer = "container:EssentialFeed.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<TestPlans>
<TestPlanReference
reference = "container:CI.xctestplan"
default = "YES">
</TestPlanReference>
</TestPlans>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "080EDEF021B6DA7E00813479"
BuildableName = "EssentialFeed.framework"
BlueprintName = "EssentialFeed"
ReferencedContainer = "container:EssentialFeed.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
Loading