From c055f6857257c65aa0270506cbfdee5c3a0dd1c1 Mon Sep 17 00:00:00 2001 From: Marcin Iwanicki Date: Thu, 29 Dec 2022 20:03:04 +0000 Subject: [PATCH] Fix target attributes value mismatch SystemCapabilities attributes triggered value mismatch when the attributes where listed in different order. Ordered both project and target attributes to ensure the comparison is not affected by the order of the attributes. Test Plan: - Ensure all CI checks pass - Inspect changes in snapshots files - Copy the same project with SystemCapabilities attributes, re-order manually attributes in one of the projects and do the diff, verify xcdiff does not report any differences Signed-off-by: Marcin Iwanicki --- .../html_format_verbose.2.3ef640ed.md | 2 +- ..._side_by_side_format_verbose.2.1beb48e8.md | 13 ++ ...arget_console_format_verbose.2.ba4ce842.md | 6 +- ...2_Project_target_json_format.2.1b44ee6e.md | 5 + ...t_target_json_format_verbose.2.bcad53ce.md | 5 + ...rget_markdown_format_verbose.2.f582a13e.md | 6 +- ...p1_p2_Project_target_verbose.2.6f518e43.md | 6 +- ...p1_p2_console_format_verbose.2.40a241bd.md | 6 +- .../Generated/p1_p2_json_format.2.e54c06ce.md | 5 + .../p1_p2_json_format_verbose.2.0e0a3eb6.md | 5 + ...1_p2_markdown_format_verbose.2.ac528bab.md | 6 +- .../Generated/p1_p2_verbose.2.fe666557.md | 6 +- .../Project.xcodeproj/project.pbxproj | 31 ++++ .../Project.xcodeproj/project.pbxproj | 25 +++ .../Comparator/AttributesComparator.swift | 12 +- .../XCDiffCore/Library/TargetsHelper.swift | 66 +++++-- .../AttributesComparatorTests.swift | 173 ++++++++++++++++++ .../Helpers/PBXNativeTargetBuilder.swift | 6 +- .../Helpers/PBXProjBuilder.swift | 2 +- 19 files changed, 352 insertions(+), 34 deletions(-) diff --git a/CommandTests/Generated/html_format_verbose.2.3ef640ed.md b/CommandTests/Generated/html_format_verbose.2.3ef640ed.md index e7863da..350c76a 100644 --- a/CommandTests/Generated/html_format_verbose.2.3ef640ed.md +++ b/CommandTests/Generated/html_format_verbose.2.3ef640ed.md @@ -108,7 +108,7 @@
  • echo "second script"
  • ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase

    ⚠️ Value mismatch (2):

    • shellScript

      • echo "Hello, World!"
      • echo "Hello, world?" -
    • showEnvVarsInLog

      • true
      • false

    ✅ RUN_SCRIPTS > "ProjectFramework" target

    ✅ RUN_SCRIPTS > "ProjectTests" target

    ✅ RUN_SCRIPTS > "ProjectUITests" target

    ❌ CONFIGURATIONS > Root project

    ⚠️ Only in second (1):

    • CUSTOM_NEW

    ❌ SETTINGS > Root project > "Debug" configuration > Base configuration

    ⚠️ Value mismatch (1):

    • Path to .xcconfig

      • nil
      • Project/Project.xcconfig

    ❌ SETTINGS > Root project > "Debug" configuration > Values

    ⚠️ Only in second (1):

    • CUSTOM_SETTGING_1 = CS_1_PROJECT_LEVEL

    ✅ SETTINGS > Root project > "Release" configuration > Base configuration

    ❌ SETTINGS > Root project > "Release" configuration > Values

    ⚠️ Only in second (1):

    • CUSTOM_SETTGING_1 = CS_1_PROJECT_LEVEL

    ✅ SETTINGS > "MismatchingLibrary" target > "Debug" configuration > Base configuration

    ❌ SETTINGS > "MismatchingLibrary" target > "Debug" configuration > Values

    ⚠️ Only in first (1):

    • OTHER_LDFLAGS = -ObjC

    ⚠️ Only in second (13):

    • CLANG_ENABLE_MODULES = YES
    • CURRENT_PROJECT_VERSION = 1
    • DEFINES_MODULE = YES
    • DYLIB_COMPATIBILITY_VERSION = 1
    • DYLIB_CURRENT_VERSION = 1
    • DYLIB_INSTALL_NAME_BASE = @rpath
    • INFOPLIST_FILE = MismatchingLibrary/MismatchingLibrary-Info.plist
    • INSTALL_PATH = $(LOCAL_LIBRARY_DIR)/Frameworks
    • LD_RUNPATH_SEARCH_PATHS = ["$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks"]
    • PRODUCT_BUNDLE_IDENTIFIER = com.bloomberg.xcdiff.Project.MismatchingLibrary
    • SWIFT_OPTIMIZATION_LEVEL = -Onone
    • VERSIONING_SYSTEM = apple-generic
    • VERSION_INFO_PREFIX =

    ⚠️ Value mismatch (1):

    • PRODUCT_NAME

      • $(TARGET_NAME)
      • $(TARGET_NAME:c99extidentifier)

    ✅ SETTINGS > "MismatchingLibrary" target > "Release" configuration > Base configuration

    ❌ SETTINGS > "MismatchingLibrary" target > "Release" configuration > Values

    ⚠️ Only in first (1):

    • OTHER_LDFLAGS = -ObjC

    ⚠️ Only in second (12):

    • CLANG_ENABLE_MODULES = YES
    • CURRENT_PROJECT_VERSION = 1
    • DEFINES_MODULE = YES
    • DYLIB_COMPATIBILITY_VERSION = 1
    • DYLIB_CURRENT_VERSION = 1
    • DYLIB_INSTALL_NAME_BASE = @rpath
    • INFOPLIST_FILE = MismatchingLibrary/MismatchingLibrary-Info.plist
    • INSTALL_PATH = $(LOCAL_LIBRARY_DIR)/Frameworks
    • LD_RUNPATH_SEARCH_PATHS = ["$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks"]
    • PRODUCT_BUNDLE_IDENTIFIER = com.bloomberg.xcdiff.Project.MismatchingLibrary
    • VERSIONING_SYSTEM = apple-generic
    • VERSION_INFO_PREFIX =

    ⚠️ Value mismatch (1):

    • PRODUCT_NAME

      • $(TARGET_NAME)
      • $(TARGET_NAME:c99extidentifier)

    ❌ SETTINGS > "Project" target > "Debug" configuration > Base configuration

    ⚠️ Value mismatch (1):

    • Path to .xcconfig

      • nil
      • Project/Target.xcconfig

    ❌ SETTINGS > "Project" target > "Debug" configuration > Values

    ⚠️ Only in second (1):

    • ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES

    ⚠️ Value mismatch (1):

    • CUSTOM_SETTING_COMMON

      • VALUE_1
      • VALUE_2

    ✅ SETTINGS > "Project" target > "Release" configuration > Base configuration

    ❌ SETTINGS > "Project" target > "Release" configuration > Values

    ⚠️ Only in second (1):

    • ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES

    ⚠️ Value mismatch (1):

    • CUSTOM_SETTING_COMMON

      • VALUE_1
      • VALUE_2

    ✅ SETTINGS > "ProjectFramework" target > "Debug" configuration > Base configuration

    ❌ SETTINGS > "ProjectFramework" target > "Debug" configuration > Values

    ⚠️ Value mismatch (1):

    • PRODUCT_BUNDLE_IDENTIFIER

      • com.bloomberg.xcdiff.Project.testprovisioning.ProjectFramework
      • com.bloomberg.xcdiff.Project.ProjectFramework

    ✅ SETTINGS > "ProjectFramework" target > "Release" configuration > Base configuration

    ❌ SETTINGS > "ProjectFramework" target > "Release" configuration > Values

    ⚠️ Value mismatch (1):

    • PRODUCT_BUNDLE_IDENTIFIER

      • com.bloomberg.xcdiff.Project.testprovisioning.ProjectFramework
      • com.bloomberg.xcdiff.Project.ProjectFramework

    ✅ SETTINGS > "ProjectTests" target > "Debug" configuration > Base configuration

    ✅ SETTINGS > "ProjectTests" target > "Debug" configuration > Values

    ✅ SETTINGS > "ProjectTests" target > "Release" configuration > Base configuration

    ✅ SETTINGS > "ProjectTests" target > "Release" configuration > Values

    ✅ SETTINGS > "ProjectUITests" target > "Debug" configuration > Base configuration

    ❌ SETTINGS > "ProjectUITests" target > "Debug" configuration > Values

    ⚠️ Only in first (1):

    • PROVISIONING_PROFILE =

    ⚠️ Only in second (1):

    • TEST_TARGET_NAME = Project

    ✅ SETTINGS > "ProjectUITests" target > "Release" configuration > Base configuration

    ❌ SETTINGS > "ProjectUITests" target > "Release" configuration > Values

    ⚠️ Only in first (1):

    • PROVISIONING_PROFILE =

    ⚠️ Only in second (1):

    • TEST_TARGET_NAME = Project

    ❌ SOURCE_TREES > Root project

    Output format: (<path>, <name>, <source_tree>)

    ⚠️ Only in first (8):

    • (AViewController.xib, nil, <group>) → (Group B, nil, <group>) → (Project, nil, <group>) → (nil, nil, <group>)
    • (AnotherObjcClass.h, nil, <group>) → (Group B, nil, <group>) → (Project, nil, <group>) → (nil, nil, <group>)
    • (AnotherObjcClass.m, nil, <group>) → (Group B, nil, <group>) → (Project, nil, <group>) → (nil, nil, <group>)
    • (BarTests.swift, nil, <group>) → (ProjectTests, nil, <group>) → (nil, nil, <group>)
    • (LoginTests.swift, nil, <group>) → (ProjectUITests, nil, <group>) → (nil, nil, <group>)
    • (empty.png, nil, <group>) → (Screenshots, nil, <group>) → (ProjectUITests, nil, <group>) → (nil, nil, <group>)
    • (libMismatchingLibrary.a, nil, BUILT_PRODUCTS_DIR) → (nil, Products, <group>) → (nil, nil, <group>)
    • (time.png, nil, <group>) → (Resources, nil, <group>) → (Project, nil, <group>) → (nil, nil, <group>)

    ⚠️ Only in second (11):

    • (Header4.h, nil, <group>) → (ProjectFramework, nil, <group>) → (nil, nil, <group>)
    • (Info.plist, nil, <group>) → (NewFramework, nil, <group>) → (nil, nil, <group>)
    • (ListResponse.json, nil, <group>) → (Responses, nil, <group>) → (ProjectTests, nil, <group>) → (nil, nil, <group>)
    • (MetricsTests.swift, nil, <group>) → (ProjectUITests, nil, <group>) → (nil, nil, <group>)
    • (MismatchingLibrary-Info.plist, nil, <group>) → (MismatchingLibrary, nil, <group>) → (nil, nil, <group>)
    • (MismatchingLibrary.framework, nil, BUILT_PRODUCTS_DIR) → (nil, Products, <group>) → (nil, nil, <group>)
    • (NewFramework.framework, nil, BUILT_PRODUCTS_DIR) → (nil, Products, <group>) → (nil, nil, <group>)
    • (NewFramework.h, nil, <group>) → (NewFramework, nil, <group>) → (nil, nil, <group>)
    • (Project.xcconfig, nil, <group>) → (Project, nil, <group>) → (nil, nil, <group>)
    • (README.md, nil, <group>) → (nil, nil, <group>)
    • (Target.xcconfig, nil, <group>) → (Project, nil, <group>) → (nil, nil, <group>)

    ✅ DEPENDENCIES > "MismatchingLibrary" target

    ❌ DEPENDENCIES > "Project" target

    ⚠️ Only in second (2):

    • (target=MismatchingLibrary)
    • (target=NewFramework)

    ✅ DEPENDENCIES > "ProjectFramework" target

    ✅ DEPENDENCIES > "ProjectTests" target

    ✅ DEPENDENCIES > "ProjectUITests" target

    ✅ LINKED_DEPENDENCIES > "MismatchingLibrary" target

    ❌ LINKED_DEPENDENCIES > "Project" target

    ⚠️ Only in second (2):

    • MismatchingLibrary.framework
    • NewFramework.framework

    ⚠️ Value mismatch (1):

    • ARKit.framework attributes

      • required
      • optional

    ✅ LINKED_DEPENDENCIES > "ProjectFramework" target

    ✅ LINKED_DEPENDENCIES > "ProjectTests" target

    ✅ LINKED_DEPENDENCIES > "ProjectUITests" target

    ❌ ATTRIBUTES > Root project

    ⚠️ Value mismatch (3):

    • LastSwiftUpdateCheck

      • 1110
      • 1030
    • LastUpgradeCheck

      • 1020
      • 1030
    • ORGANIZATIONNAME

      • Bloomberg LP
      • Another Organization

    ❌ ATTRIBUTES > "MismatchingLibrary" target

    ⚠️ Only in second (1):

    • LastSwiftMigration = 1110

    ❌ ATTRIBUTES > "Project" target

    ⚠️ Value mismatch (1):

    • LastSwiftMigration

      • 1140
      • 1020

    ✅ ATTRIBUTES > "ProjectFramework" target

    ✅ ATTRIBUTES > "ProjectTests" target

    ❌ ATTRIBUTES > "ProjectUITests" target

    ⚠️ Only in second (1):

    • TestTargetID = Project

    ✅ SWIFT_PACKAGES