diff --git a/.github/workflows/CI-iOS.yml b/.github/workflows/CI-iOS.yml new file mode 100644 index 0000000..0e4cd87 --- /dev/null +++ b/.github/workflows/CI-iOS.yml @@ -0,0 +1,31 @@ + +name: CI-iOS + +# Controls when the action will run. +# Triggers the workflow on pull request events but only for the master branch. +on: + pull_request: + branches: [ master ] + +# 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-26-xlarge + + 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_26.1.1.app + + - name: Xcode version + run: /usr/bin/xcodebuild -version + + - name: Build and Test + run: xcodebuild clean build test -project EssentialFeed/EssentialFeed.xcodeproj -scheme "CI_iOS" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -sdk iphonesimulator -destination "platform=iOS Simulator,OS=26.1,name=iPhone 17 Pro" ONLY_ACTIVE_ARCH=YES \ No newline at end of file diff --git a/.github/workflows/CI-macOS.yml b/.github/workflows/CI-macOS.yml index e263a9a..269bc02 100644 --- a/.github/workflows/CI-macOS.yml +++ b/.github/workflows/CI-macOS.yml @@ -28,4 +28,4 @@ jobs: run: /usr/bin/xcodebuild -version - name: Build and Test - run: xcodebuild clean build test -project EssentialFeed/EssentialFeed.xcodeproj -scheme "CI" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -sdk macosx -destination "platform=macOS" -enableThreadSanitizer YES ONLY_ACTIVE_ARCH=YES \ No newline at end of file + run: xcodebuild clean build test -project EssentialFeed/EssentialFeed.xcodeproj -scheme "CI_macOS" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -sdk macosx -destination "platform=macOS" -enableThreadSanitizer YES ONLY_ACTIVE_ARCH=YES \ No newline at end of file diff --git a/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj b/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj index bbe7118..8077629 100644 --- a/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj +++ b/EssentialFeed/EssentialFeed.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 23883FA92EFF12CE00C80E74 /* RemoteFeedItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23883FA82EFF12CE00C80E74 /* RemoteFeedItem.swift */; }; 23883FAB2EFF15E600C80E74 /* LocalFeedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23883FAA2EFF15E600C80E74 /* LocalFeedImage.swift */; }; 23C094942EFF3F8C00F26432 /* LoadFeedFromCacheUseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23C094932EFF3F8700F26432 /* LoadFeedFromCacheUseCaseTests.swift */; }; + 23F5D6E32F182DE900AC7D9F /* EssentialFeediOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23F5D6DA2F182DE800AC7D9F /* EssentialFeediOS.framework */; }; 23FBD0762EECD0B3005E9351 /* LoadFeedFromRemoteUseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23FBD0742EECD0B3005E9351 /* LoadFeedFromRemoteUseCaseTests.swift */; }; 23FBD0782EF05F5C005E9351 /* URLSessionHTTPClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23FBD0772EF05F5C005E9351 /* URLSessionHTTPClientTests.swift */; }; 23FBD0BB2EF0F595005E9351 /* XCTestCase+MemoryLeakTracking.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23FBD0BA2EF0F595005E9351 /* XCTestCase+MemoryLeakTracking.swift */; }; @@ -58,6 +59,13 @@ remoteGlobalIDString = 080EDEF021B6DA7E00813479; remoteInfo = EssentialFeed; }; + 23F5D6E42F182DE900AC7D9F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 080EDEE821B6DA7E00813479 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 23F5D6D92F182DE800AC7D9F; + remoteInfo = EssentialFeediOS; + }; 23FBD0CB2EF1BDE2005E9351 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 080EDEE821B6DA7E00813479 /* Project object */; @@ -89,13 +97,18 @@ 23883FA82EFF12CE00C80E74 /* RemoteFeedItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteFeedItem.swift; sourceTree = ""; }; 23883FAA2EFF15E600C80E74 /* LocalFeedImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalFeedImage.swift; sourceTree = ""; }; 23C094932EFF3F8700F26432 /* LoadFeedFromCacheUseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadFeedFromCacheUseCaseTests.swift; sourceTree = ""; }; + 23D3DB072F17FF4D00262C1D /* EssentialFeedAPIEndToEndTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = EssentialFeedAPIEndToEndTests.xctestplan; sourceTree = ""; }; + 23F5D6DA2F182DE800AC7D9F /* EssentialFeediOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EssentialFeediOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 23F5D6E22F182DE900AC7D9F /* EssentialFeediOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EssentialFeediOSTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 23F5D6F12F182FC900AC7D9F /* EssentialFeediOS.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = EssentialFeediOS.xctestplan; sourceTree = ""; }; + 23F5D6FA2F18345C00AC7D9F /* CI_iOS.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = CI_iOS.xctestplan; sourceTree = ""; }; 23FBD0742EECD0B3005E9351 /* LoadFeedFromRemoteUseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadFeedFromRemoteUseCaseTests.swift; sourceTree = ""; }; 23FBD0772EF05F5C005E9351 /* URLSessionHTTPClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSessionHTTPClientTests.swift; sourceTree = ""; }; 23FBD0BA2EF0F595005E9351 /* XCTestCase+MemoryLeakTracking.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTestCase+MemoryLeakTracking.swift"; sourceTree = ""; }; 23FBD0BC2EF1B022005E9351 /* URLSessionHTTPClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSessionHTTPClient.swift; sourceTree = ""; }; 23FBD0C62EF1BDE2005E9351 /* EssentialFeedAPIEndToEndTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EssentialFeedAPIEndToEndTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 23FBD0D02EF1BDE9005E9351 /* EssentialFeedAPIEndToEndTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EssentialFeedAPIEndToEndTests.swift; sourceTree = ""; }; - 23FBD0D42EF1C5FE005E9351 /* CI.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = CI.xctestplan; sourceTree = ""; }; + 23FBD0D42EF1C5FE005E9351 /* CI_macOS.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = CI_macOS.xctestplan; sourceTree = ""; }; 23FBD0DB2EFAE83A005E9351 /* CacheFeedUseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CacheFeedUseCaseTests.swift; sourceTree = ""; }; 23FDEAFA2EFF40EE004D2CD0 /* FeedCacheSpy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedCacheSpy.swift; sourceTree = ""; }; 23FDEAFC2F0056CA004D2CD0 /* ValidateFeedCacheUseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidateFeedCacheUseCaseTests.swift; sourceTree = ""; }; @@ -134,6 +147,21 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 23F5D6D72F182DE800AC7D9F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 23F5D6DF2F182DE900AC7D9F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 23F5D6E32F182DE900AC7D9F /* EssentialFeediOS.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 23FBD0C32EF1BDE2005E9351 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -156,12 +184,12 @@ 080EDEE721B6DA7E00813479 = { isa = PBXGroup; children = ( - 23FDEB352F083D3A004D2CD0 /* EssentialFeedCacheIntegrationTests.xctestplan */, - 23FBD0D42EF1C5FE005E9351 /* CI.xctestplan */, 080EDEF321B6DA7E00813479 /* EssentialFeed */, 080EDEFE21B6DA7E00813479 /* EssentialFeedTests */, 23FBD0D12EF1BDE9005E9351 /* EssentialFeedAPIEndToEndTests */, 23FDEB372F089193004D2CD0 /* EssentialFeedCacheIntegrationTests */, + 23F5D6F02F182E5600AC7D9F /* EssentialFeediOS */, + 23F5D6EF2F182E5600AC7D9F /* EssentialFeediOSTests */, 080EDEF221B6DA7E00813479 /* Products */, ); sourceTree = ""; @@ -173,6 +201,8 @@ 080EDEFA21B6DA7E00813479 /* EssentialFeedTests.xctest */, 23FBD0C62EF1BDE2005E9351 /* EssentialFeedAPIEndToEndTests.xctest */, 23FDEB2B2F083D06004D2CD0 /* EssentialFeedCacheIntegrationTests.xctest */, + 23F5D6DA2F182DE800AC7D9F /* EssentialFeediOS.framework */, + 23F5D6E22F182DE900AC7D9F /* EssentialFeediOSTests.xctest */, ); name = Products; sourceTree = ""; @@ -180,6 +210,7 @@ 080EDEF321B6DA7E00813479 /* EssentialFeed */ = { isa = PBXGroup; children = ( + 23FBD0D42EF1C5FE005E9351 /* CI_macOS.xctestplan */, 23883FA32EFC50A400C80E74 /* Feed Cache */, 231DA90A2D28B38D00A50156 /* Feed API */, 080EDEF521B6DA7E00813479 /* Info.plist */, @@ -232,6 +263,22 @@ path = "Feed Cache"; sourceTree = ""; }; + 23F5D6EF2F182E5600AC7D9F /* EssentialFeediOSTests */ = { + isa = PBXGroup; + children = ( + 23F5D6F12F182FC900AC7D9F /* EssentialFeediOS.xctestplan */, + ); + path = EssentialFeediOSTests; + sourceTree = ""; + }; + 23F5D6F02F182E5600AC7D9F /* EssentialFeediOS */ = { + isa = PBXGroup; + children = ( + 23F5D6FA2F18345C00AC7D9F /* CI_iOS.xctestplan */, + ); + path = EssentialFeediOS; + sourceTree = ""; + }; 23FBD0752EECD0B3005E9351 /* Feed API */ = { isa = PBXGroup; children = ( @@ -253,6 +300,7 @@ 23FBD0D12EF1BDE9005E9351 /* EssentialFeedAPIEndToEndTests */ = { isa = PBXGroup; children = ( + 23D3DB072F17FF4D00262C1D /* EssentialFeedAPIEndToEndTests.xctestplan */, 23FBD0D02EF1BDE9005E9351 /* EssentialFeedAPIEndToEndTests.swift */, ); path = EssentialFeedAPIEndToEndTests; @@ -315,6 +363,7 @@ 23FDEB372F089193004D2CD0 /* EssentialFeedCacheIntegrationTests */ = { isa = PBXGroup; children = ( + 23FDEB352F083D3A004D2CD0 /* EssentialFeedCacheIntegrationTests.xctestplan */, 23FDEB362F089193004D2CD0 /* EssentialFeedCacheIntegrationTests.swift */, ); path = EssentialFeedCacheIntegrationTests; @@ -330,6 +379,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 23F5D6D52F182DE800AC7D9F /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -369,6 +425,46 @@ productReference = 080EDEFA21B6DA7E00813479 /* EssentialFeedTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; + 23F5D6D92F182DE800AC7D9F /* EssentialFeediOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 23F5D6ED2F182DE900AC7D9F /* Build configuration list for PBXNativeTarget "EssentialFeediOS" */; + buildPhases = ( + 23F5D6D52F182DE800AC7D9F /* Headers */, + 23F5D6D62F182DE800AC7D9F /* Sources */, + 23F5D6D72F182DE800AC7D9F /* Frameworks */, + 23F5D6D82F182DE800AC7D9F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = EssentialFeediOS; + packageProductDependencies = ( + ); + productName = EssentialFeediOS; + productReference = 23F5D6DA2F182DE800AC7D9F /* EssentialFeediOS.framework */; + productType = "com.apple.product-type.framework"; + }; + 23F5D6E12F182DE900AC7D9F /* EssentialFeediOSTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 23F5D6EE2F182DE900AC7D9F /* Build configuration list for PBXNativeTarget "EssentialFeediOSTests" */; + buildPhases = ( + 23F5D6DE2F182DE900AC7D9F /* Sources */, + 23F5D6DF2F182DE900AC7D9F /* Frameworks */, + 23F5D6E02F182DE900AC7D9F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 23F5D6E52F182DE900AC7D9F /* PBXTargetDependency */, + ); + name = EssentialFeediOSTests; + packageProductDependencies = ( + ); + productName = EssentialFeediOSTests; + productReference = 23F5D6E22F182DE900AC7D9F /* EssentialFeediOSTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 23FBD0C52EF1BDE2005E9351 /* EssentialFeedAPIEndToEndTests */ = { isa = PBXNativeTarget; buildConfigurationList = 23FBD0CD2EF1BDE2005E9351 /* Build configuration list for PBXNativeTarget "EssentialFeedAPIEndToEndTests" */; @@ -428,6 +524,12 @@ CreatedOnToolsVersion = 10.1; LastSwiftMigration = 1540; }; + 23F5D6D92F182DE800AC7D9F = { + CreatedOnToolsVersion = 26.0.1; + }; + 23F5D6E12F182DE900AC7D9F = { + CreatedOnToolsVersion = 26.0.1; + }; 23FBD0C52EF1BDE2005E9351 = { CreatedOnToolsVersion = 26.0.1; }; @@ -453,6 +555,8 @@ 080EDEF921B6DA7E00813479 /* EssentialFeedTests */, 23FBD0C52EF1BDE2005E9351 /* EssentialFeedAPIEndToEndTests */, 23FDEB2A2F083D06004D2CD0 /* EssentialFeedCacheIntegrationTests */, + 23F5D6D92F182DE800AC7D9F /* EssentialFeediOS */, + 23F5D6E12F182DE900AC7D9F /* EssentialFeediOSTests */, ); }; /* End PBXProject section */ @@ -472,6 +576,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 23F5D6D82F182DE800AC7D9F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 23F5D6E02F182DE900AC7D9F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 23FBD0C42EF1BDE2005E9351 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -534,6 +652,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 23F5D6D62F182DE800AC7D9F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 23F5D6DE2F182DE900AC7D9F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 23FBD0C22EF1BDE2005E9351 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -563,6 +695,11 @@ target = 080EDEF021B6DA7E00813479 /* EssentialFeed */; targetProxy = 080EDEFC21B6DA7E00813479 /* PBXContainerItemProxy */; }; + 23F5D6E52F182DE900AC7D9F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 23F5D6D92F182DE800AC7D9F /* EssentialFeediOS */; + targetProxy = 23F5D6E42F182DE900AC7D9F /* PBXContainerItemProxy */; + }; 23FBD0CC2EF1BDE2005E9351 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 080EDEF021B6DA7E00813479 /* EssentialFeed */; @@ -737,6 +874,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.essentialdeveloper.EssentialFeed; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; @@ -767,6 +905,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.essentialdeveloper.EssentialFeed; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator"; }; name = Release; }; @@ -787,6 +926,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.essentialdeveloper.EssentialFeedTests; PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; @@ -809,7 +949,142 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.essentialdeveloper.EssentialFeedTests; PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 23F5D6E92F182DE900AC7D9F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YLLF7E9854; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.dapeter.EssentialFeediOS; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 23F5D6EA2F182DE900AC7D9F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YLLF7E9854; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.dapeter.EssentialFeediOS; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 23F5D6EB2F182DE900AC7D9F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YLLF7E9854; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.dapeter.EssentialFeediOSTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 23F5D6EC2F182DE900AC7D9F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YLLF7E9854; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.dapeter.EssentialFeediOSTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; }; name = Release; }; @@ -828,6 +1103,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.peter.EssentialFeedAPIEndToEndTests; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_EMIT_LOC_STRINGS = NO; @@ -851,6 +1127,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.peter.EssentialFeedAPIEndToEndTests; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; @@ -873,6 +1150,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.peter.EssentialFeedCacheIntegrationTests; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_EMIT_LOC_STRINGS = NO; @@ -896,6 +1174,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.peter.EssentialFeedCacheIntegrationTests; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; @@ -933,6 +1212,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 23F5D6ED2F182DE900AC7D9F /* Build configuration list for PBXNativeTarget "EssentialFeediOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 23F5D6E92F182DE900AC7D9F /* Debug */, + 23F5D6EA2F182DE900AC7D9F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 23F5D6EE2F182DE900AC7D9F /* Build configuration list for PBXNativeTarget "EssentialFeediOSTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 23F5D6EB2F182DE900AC7D9F /* Debug */, + 23F5D6EC2F182DE900AC7D9F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 23FBD0CD2EF1BDE2005E9351 /* Build configuration list for PBXNativeTarget "EssentialFeedAPIEndToEndTests" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/CI_iOS.xcscheme b/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/CI_iOS.xcscheme new file mode 100644 index 0000000..0cbde9a --- /dev/null +++ b/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/CI_iOS.xcscheme @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/CI.xcscheme b/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/CI_macOS.xcscheme similarity index 97% rename from EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/CI.xcscheme rename to EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/CI_macOS.xcscheme index a050f0c..2c51ca5 100644 --- a/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/CI.xcscheme +++ b/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/CI_macOS.xcscheme @@ -30,7 +30,7 @@ shouldUseLaunchSchemeArgsEnv = "YES"> diff --git a/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/EssentialFeedAPIEndToEndTests.xcscheme b/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/EssentialFeedAPIEndToEndTests.xcscheme index b7c3555..f1d078b 100644 --- a/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/EssentialFeedAPIEndToEndTests.xcscheme +++ b/EssentialFeed/EssentialFeed.xcodeproj/xcshareddata/xcschemes/EssentialFeedAPIEndToEndTests.xcscheme @@ -11,8 +11,13 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - shouldAutocreateTestPlan = "YES"> + shouldUseLaunchSchemeArgsEnv = "YES"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EssentialFeed/CI.xctestplan b/EssentialFeed/EssentialFeed/CI_macOS.xctestplan similarity index 100% rename from EssentialFeed/CI.xctestplan rename to EssentialFeed/EssentialFeed/CI_macOS.xctestplan diff --git a/EssentialFeed/EssentialFeedAPIEndToEndTests/EssentialFeedAPIEndToEndTests.xctestplan b/EssentialFeed/EssentialFeedAPIEndToEndTests/EssentialFeedAPIEndToEndTests.xctestplan new file mode 100644 index 0000000..e494a8e --- /dev/null +++ b/EssentialFeed/EssentialFeedAPIEndToEndTests/EssentialFeedAPIEndToEndTests.xctestplan @@ -0,0 +1,35 @@ +{ + "configurations" : [ + { + "id" : "26028306-DAF8-49F0-9F39-94720BE08BCC", + "name" : "Test Scheme Action", + "options" : { + + } + } + ], + "defaultOptions" : { + "codeCoverage" : { + "targets" : [ + { + "containerPath" : "container:EssentialFeed.xcodeproj", + "identifier" : "080EDEF021B6DA7E00813479", + "name" : "EssentialFeed" + } + ] + }, + "performanceAntipatternCheckerEnabled" : true, + "testExecutionOrdering" : "random" + }, + "testTargets" : [ + { + "parallelizable" : true, + "target" : { + "containerPath" : "container:EssentialFeed.xcodeproj", + "identifier" : "23FBD0C52EF1BDE2005E9351", + "name" : "EssentialFeedAPIEndToEndTests" + } + } + ], + "version" : 1 +} diff --git a/EssentialFeed/EssentialFeedCacheIntegrationTests.xctestplan b/EssentialFeed/EssentialFeedCacheIntegrationTests/EssentialFeedCacheIntegrationTests.xctestplan similarity index 70% rename from EssentialFeed/EssentialFeedCacheIntegrationTests.xctestplan rename to EssentialFeed/EssentialFeedCacheIntegrationTests/EssentialFeedCacheIntegrationTests.xctestplan index 01fd431..cfe4e47 100644 --- a/EssentialFeed/EssentialFeedCacheIntegrationTests.xctestplan +++ b/EssentialFeed/EssentialFeedCacheIntegrationTests/EssentialFeedCacheIntegrationTests.xctestplan @@ -9,6 +9,15 @@ } ], "defaultOptions" : { + "codeCoverage" : { + "targets" : [ + { + "containerPath" : "container:EssentialFeed.xcodeproj", + "identifier" : "080EDEF021B6DA7E00813479", + "name" : "EssentialFeed" + } + ] + }, "performanceAntipatternCheckerEnabled" : true, "testExecutionOrdering" : "random" }, diff --git a/EssentialFeed/EssentialFeediOS/CI_iOS.xctestplan b/EssentialFeed/EssentialFeediOS/CI_iOS.xctestplan new file mode 100644 index 0000000..8c83c69 --- /dev/null +++ b/EssentialFeed/EssentialFeediOS/CI_iOS.xctestplan @@ -0,0 +1,59 @@ +{ + "configurations" : [ + { + "id" : "3AFDBF55-EF7B-42C3-91B4-53F281C75682", + "name" : "Configuration 1", + "options" : { + + } + } + ], + "defaultOptions" : { + "codeCoverage" : { + "targets" : [ + { + "containerPath" : "container:EssentialFeed.xcodeproj", + "identifier" : "080EDEF021B6DA7E00813479", + "name" : "EssentialFeed" + }, + { + "containerPath" : "container:EssentialFeed.xcodeproj", + "identifier" : "23F5D6D92F182DE800AC7D9F", + "name" : "EssentialFeediOS" + } + ] + }, + "testExecutionOrdering" : "random" + }, + "testTargets" : [ + { + "target" : { + "containerPath" : "container:EssentialFeed.xcodeproj", + "identifier" : "23FDEB2A2F083D06004D2CD0", + "name" : "EssentialFeedCacheIntegrationTests" + } + }, + { + "target" : { + "containerPath" : "container:EssentialFeed.xcodeproj", + "identifier" : "080EDEF921B6DA7E00813479", + "name" : "EssentialFeedTests" + } + }, + { + "target" : { + "containerPath" : "container:EssentialFeed.xcodeproj", + "identifier" : "23FBD0C52EF1BDE2005E9351", + "name" : "EssentialFeedAPIEndToEndTests" + } + }, + { + "target" : { + "containerPath" : "container:EssentialFeed.xcodeproj", + "identifier" : "23F5D6E12F182DE900AC7D9F", + "name" : "EssentialFeediOSTests" + } + } + ], + "version" : 1 +} diff --git a/EssentialFeed/EssentialFeediOSTests/EssentialFeediOS.xctestplan b/EssentialFeed/EssentialFeediOSTests/EssentialFeediOS.xctestplan new file mode 100644 index 0000000..194ee61 --- /dev/null +++ b/EssentialFeed/EssentialFeediOSTests/EssentialFeediOS.xctestplan @@ -0,0 +1,35 @@ +{ + "configurations" : [ + { + "id" : "169EF862-3095-408C-B6F9-456CF2C65301", + "name" : "Test Scheme Action", + "options" : { + + } + } + ], + "defaultOptions" : { + "codeCoverage" : { + "targets" : [ + { + "containerPath" : "container:EssentialFeed.xcodeproj", + "identifier" : "23F5D6D92F182DE800AC7D9F", + "name" : "EssentialFeediOS" + } + ] + }, + "performanceAntipatternCheckerEnabled" : true, + "testExecutionOrdering" : "random" + }, + "testTargets" : [ + { + "parallelizable" : true, + "target" : { + "containerPath" : "container:EssentialFeed.xcodeproj", + "identifier" : "23F5D6E12F182DE900AC7D9F", + "name" : "EssentialFeediOSTests" + } + } + ], + "version" : 1 +}