├── Fixtures ├── ios_project_2 │ ├── Project │ │ ├── Project.xcconfig │ │ ├── Target.xcconfig │ │ ├── Group A │ │ │ ├── ObjcClass.m │ │ │ └── ObjcClass.h │ │ ├── Assets.xcassets │ │ │ └── Contents.json │ │ ├── Resources │ │ │ └── search.png │ │ ├── Project.entitlements │ │ └── ViewController.swift │ ├── README.md │ ├── ProjectTests │ │ ├── Responses │ │ │ └── ListResponse.json │ │ └── Info.plist │ ├── Project.xcodeproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── MismatchingLibrary │ │ ├── MismatchingLibrary.swift │ │ ├── MismatchingLibrary-Info.plist │ │ └── MismatchingLibrary.h │ ├── ProjectFramework │ │ ├── Header1.h │ │ ├── Header2.h │ │ ├── Header3.h │ │ ├── Header4.h │ │ ├── Info.plist │ │ └── ProjectFramework.h │ ├── ProjectUITests │ │ ├── Info.plist │ │ └── MetricsTests.swift │ └── NewFramework │ │ ├── Info.plist │ │ └── NewFramework.h ├── Project1.xcodeproj ├── Project2.xcodeproj ├── ios_project_1 │ ├── ProjectTests │ │ ├── BarTests.swift │ │ └── Info.plist │ ├── Project │ │ ├── Group A │ │ │ ├── ObjcClass.m │ │ │ └── ObjcClass.h │ │ ├── Assets.xcassets │ │ │ └── Contents.json │ │ ├── Resources │ │ │ ├── time.png │ │ │ └── search.png │ │ ├── Group B │ │ │ ├── AnotherObjcClass.m │ │ │ └── AnotherObjcClass.h │ │ └── ViewController.swift │ ├── ProjectUITests │ │ ├── Screenshots │ │ │ └── empty.png │ │ ├── Info.plist │ │ └── LoginTests.swift │ ├── Project.xcodeproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── MismatchingLibrary │ │ ├── MismatchingLibrary.swift │ │ └── MismatchingLibrary.h │ └── ProjectFramework │ │ ├── Header1.h │ │ ├── Header2.h │ │ ├── Header3.h │ │ ├── Info.plist │ │ └── ProjectFramework.h ├── ios_project_with_ui_tests │ ├── Project1.xcodeproj │ └── Project2.xcodeproj ├── ios_project_with_swift_packages │ ├── Project1.xcodeproj │ └── Project2.xcodeproj ├── xcode16_syncgroups_2 │ ├── AnotherSourceFolder │ │ └── Component.swift │ ├── Project │ │ ├── ProjectApp.swift │ │ └── ContentView.swift │ ├── Project.xcodeproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ └── ProjectTests │ │ └── ProjectTests.swift ├── app_with_platform_filters_1 │ ├── AppWithPlatformFilters │ │ ├── TVSourceFile.swift │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ ├── SourceFileWithFilters.swift │ │ ├── AppWithPlatformFiltersApp.swift │ │ ├── ContentView.swift │ │ └── AppWithPlatformFilters.entitlements │ ├── AppWithPlatformFilters.xcodeproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── MyFramework │ │ └── MyFramework.h ├── app_with_platform_filters_2 │ ├── AppWithPlatformFilters │ │ ├── TVSourceFile.swift │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ ├── SourceFileWithFilters.swift │ │ ├── AppWithPlatformFiltersApp.swift │ │ ├── ContentView.swift │ │ └── AppWithPlatformFilters.entitlements │ ├── AppWithPlatformFilters.xcodeproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── MyFramework │ │ └── MyFramework.h ├── ios_project_with_swift_packages_1 │ ├── App │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ └── AccentColor.colorset │ │ │ │ └── Contents.json │ │ ├── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ │ └── Contents.json │ │ ├── AppApp.swift │ │ └── ContentView.swift │ └── Project.xcodeproj │ │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── ios_project_with_swift_packages_2 │ ├── App │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ └── AccentColor.colorset │ │ │ │ └── Contents.json │ │ ├── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ │ └── Contents.json │ │ ├── AppApp.swift │ │ └── ContentView.swift │ └── Project.xcodeproj │ │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── ios_project_with_ui_tests_1 │ ├── MyApp │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ └── AccentColor.colorset │ │ │ │ └── Contents.json │ │ ├── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ │ └── Contents.json │ │ ├── MyAppApp.swift │ │ └── ContentView.swift │ ├── Project.xcodeproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── MyAppUITests │ │ └── Info.plist │ └── Project.swift ├── ios_project_with_ui_tests_2 │ ├── MyApp │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ └── AccentColor.colorset │ │ │ │ └── Contents.json │ │ ├── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ │ └── Contents.json │ │ ├── MyAppApp.swift │ │ └── ContentView.swift │ ├── Project.xcodeproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── MyAppUITests │ │ └── Info.plist │ └── Project.swift ├── xcode16_syncgroups_1 │ ├── Project │ │ ├── ProjectApp.swift │ │ └── ContentView.swift │ ├── Project.xcodeproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ └── ProjectTests │ │ └── ProjectTests.swift └── ios_project_invalid_paths │ └── Project.xcodeproj │ └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── .gitattributes ├── Scripts ├── stub.rb └── coverage.sh ├── Documentation ├── Resources │ ├── xcdiff.png │ ├── xcdiff-demo.png │ └── xcdiff-demo-v.png ├── README.md └── Release.md ├── .swiftformat ├── .mise.toml ├── .codecov.yml ├── CommandTests ├── Generated │ ├── unknown.1.b23a6a84.md │ ├── p1_p2_file_references_tag.2.97f35a57.md │ ├── p1_p2_source_trees_tag.2.2edb5903.md │ ├── p1_p2_configurations_tag.2.905c4072.md │ ├── non_existing_target.1.426358e4.md │ ├── p1_does_not_exist.1.429294f9.md │ ├── p1_p2_headers_tag_Project_target.0.911732e5.md │ ├── p1_p2_sources_tag_Project_target.2.a2b6eeb4.md │ ├── p1_p2_targets_tag.2.87422ee0.md │ ├── p2_does_not_exist.1.319dbe63.md │ ├── p1_p2_NewFramework_target.1.38b5ee4a.md │ ├── p1_p2_file_references_tag_Project_target.2.6867ba65.md │ ├── p1_p2_file_references_tag_console_format.2.061233ab.md │ ├── p1_p2_resources_tag_Project_target.2.fb256393.md │ ├── p1_p2_source_trees_tag_Project_target.2.22e39991.md │ ├── p1_p2_source_trees_tag_console_format.2.dd9e3e53.md │ ├── p1_p2_configurations_tag_Project_target.2.05c48867.md │ ├── p1_p2_configurations_tag_console_format.2.c7078894.md │ ├── p1_p2_file_references_tag_NewFramework_target.2.1eda851c.md │ ├── p1_p2_headers_tag_Project_target_verbose.0.38f1b3eb.md │ ├── non_existing_tag.1.1babe92b.md │ ├── p1_p2_NewFramework_target_verbose.1.41f31e6e.md │ ├── p1_p2_do_not_exist.1.98fc0060.md │ ├── p1_p2_file_references_tag_markdown_format.2.72a8d656.md │ ├── p1_p2_source_trees_tag_NewFramework_target.2.d8db452a.md │ ├── p1_p2_configurations_tag_NewFramework_target.2.d67b27a7.md │ ├── p1_p2_NewFramework_target_json_format.1.6281eb3a.md │ ├── p1_p2_headers_tag_Project_target_console_format.0.6d6ed065.md │ ├── p1_p2_plists_tag_NewFramework_target.1.704c98b4.md │ ├── p1_p2_source_trees_tag_markdown_format.2.9af8f61e.md │ ├── p1_p2_sources_tag_Project_target_console_format.2.b8cf6cab.md │ ├── p1_p2_NewFramework_target_console_format.1.c79021d5.md │ ├── p1_p2_configurations_tag_markdown_format.2.b11707b5.md │ ├── p1_p2_file_references_tag_Project_target_console_format.2.0dac7305.md │ ├── p1_p2_headers_tag_NewFramework_target.1.7d3a003d.md │ ├── p1_p2_linked_dependencies_tag_Project_target.2.5ee63a66.md │ ├── p1_p2_resources_tag_NewFramework_target.1.d4ececa6.md │ ├── p1_p2_settings_tag_NewFramework_target.1.29612643.md │ ├── p1_p2_sources_tag_NewFramework_target.1.ef53f387.md │ ├── p1_p2_targets_tag_Project_target.0.dad7e204.md │ ├── p1_p2_targets_tag_console_format.2.daca61fb.md │ ├── target_only_in_second_g_headers.1.0e3a7b19.md │ ├── p1_p2_NewFramework_target_markdown_format.1.2f8744c2.md │ ├── p1_p2_resources_tag_Project_target_console_format.2.cc5b96be.md │ ├── p1_p2_run_scripts_tag_NewFramework_target.1.30052ab6.md │ ├── p1_p2_NewFramework_target_json_format_verbose.1.5934444b.md │ ├── p1_p2_file_references_tag_NewFramework_target_console_format.2.4282243f.md │ ├── p1_p2_headers_tag_NewFramework_target_verbose.1.1645eba3.md │ ├── p1_p2_headers_tag_Project_target_console_format_verbose.0.06bc3a8e.md │ ├── p1_p2_plists_tag_NewFramework_target_verbose.1.53c0efdd.md │ ├── p1_p2_source_trees_tag_Project_target_console_format.2.10de8b6f.md │ ├── p1_p2_sources_tag_NewFramework_target_verbose.1.434ac337.md │ ├── p1_p2_targets_tag_NewFramework_target.2.4f0ab487.md │ ├── p1_p2_targets_tag_Project_target_verbose.0.955eed74.md │ ├── p1_p2_NewFramework_target_console_format_verbose.1.e602511d.md │ ├── p1_p2_NewFramework_target_markdown_format_verbose.1.15ad4840.md │ ├── p1_p2_configurations_tag_Project_target_console_format.2.02ad65f1.md │ ├── p1_p2_headers_tag_Project_target_markdown_format.0.8370a5bf.md │ ├── p1_p2_resources_tag_NewFramework_target_verbose.1.12d6ffec.md │ ├── p1_p2_settings_tag_NewFramework_target_verbose.1.e80ef86b.md │ ├── p1_p2_sources_tag_Project_target_markdown_format.2.e0e92787.md │ ├── p1_p2_file_references_tag_Project_target_markdown_format.2.c96d8386.md │ ├── p1_p2_linked_dependencies_tag_NewFramework_target.1.12d70214.md │ ├── p1_p2_plists_tag_NewFramework_target_json_format.1.9deaea7f.md │ ├── p1_p2_plists_tag_Project_target.2.795f5a51.md │ ├── p1_p2_resources_tag_Project_target_markdown_format.2.af30c3a0.md │ ├── p1_p2_run_scripts_tag_NewFramework_target_verbose.1.89d78c8a.md │ ├── p1_p2_source_trees_tag_NewFramework_target_console_format.2.f9bdd20b.md │ ├── p1_p2_configurations_tag_NewFramework_target_console_format.2.53e75de1.md │ ├── p1_p2_headers_tag_NewFramework_target_json_format.1.b33272ad.md │ ├── p1_p2_settings_tag_NewFramework_target_json_format.1.af55ee12.md │ ├── p1_p2_source_trees_tag_Project_target_markdown_format.2.663080b1.md │ ├── p1_p2_sources_tag_NewFramework_target_json_format.1.ac469878.md │ ├── p1_p2_configurations_tag_Project_target_markdown_format.2.9335c0dd.md │ ├── p1_p2_file_references_tag_NewFramework_target_markdown_format.2.67ed99b7.md │ ├── p1_p2_headers_tag_NewFramework_target_console_format.1.1a3c9d1f.md │ ├── p1_p2_headers_tag_NewFramework_target_markdown_format.1.5b6dbf3f.md │ ├── p1_p2_headers_tag_Project_target_markdown_format_verbose.0.23d01e13.md │ ├── p1_p2_plists_tag_NewFramework_target_console_format.1.9b316d7c.md │ ├── p1_p2_plists_tag_NewFramework_target_markdown_format.1.9be82ce5.md │ ├── p1_p2_resources_tag_NewFramework_target_json_format.1.ad5c5553.md │ ├── p1_p2_run_scripts_tag_NewFramework_target_json_format.1.8d53e8aa.md │ ├── p1_p2_settings_tag_NewFramework_target_console_format.1.81be3a1b.md │ ├── p1_p2_sources_tag_NewFramework_target_console_format.1.64e60fbf.md │ ├── p1_p2_sources_tag_NewFramework_target_markdown_format.1.6aa6cc2d.md │ ├── p1_p2_targets_tag_Project_target_console_format.0.be9ef2e3.md │ ├── p1_p2_targets_tag_markdown_format.2.7818a159.md │ ├── p1_p2_configurations_tag_verbose.2.12acd008.md │ ├── p1_p2_linked_dependencies_tag_NewFramework_target_verbose.1.00a9e66f.md │ ├── p1_p2_linked_dependencies_tag_Project_target_console_format.2.7855ca5e.md │ ├── p1_p2_plists_tag_NewFramework_target_json_format_verbose.1.a666867e.md │ ├── p1_p2_resources_tag_NewFramework_target_console_format.1.96130ae0.md │ ├── p1_p2_resources_tag_NewFramework_target_markdown_format.1.818975a8.md │ ├── p1_p2_settings_tag_NewFramework_target_markdown_format.1.86d189f7.md │ ├── p1_p2_source_trees_tag_NewFramework_target_markdown_format.2.36f0ad5b.md │ ├── p1_p2_configurations_tag_NewFramework_target_markdown_format.2.a67daabe.md │ ├── p1_p2_headers_tag_NewFramework_target_json_format_verbose.1.26e4f275.md │ ├── p1_p2_plists_tag_NewFramework_target_console_format_verbose.1.488f9070.md │ ├── p1_p2_resources_tag_NewFramework_target_json_format_verbose.1.09f3af23.md │ ├── p1_p2_run_scripts_tag_NewFramework_target_console_format.1.1fdd966d.md │ ├── p1_p2_run_scripts_tag_NewFramework_target_markdown_format.1.7c1a3a53.md │ ├── p1_p2_settings_tag_NewFramework_target_json_format_verbose.1.08beb39e.md │ ├── p1_p2_sources_tag_NewFramework_target_json_format_verbose.1.4283bcac.md │ ├── p1_p2_targets_tag_NewFramework_target_console_format.2.1adbc8af.md │ ├── p1_p2_headers_tag_NewFramework_target_console_format_verbose.1.49ee3509.md │ ├── p1_p2_headers_tag_NewFramework_target_markdown_format_verbose.1.3c1cfba2.md │ ├── p1_p2_plists_tag_NewFramework_target_markdown_format_verbose.1.26f73480.md │ ├── p1_p2_run_scripts_tag_NewFramework_target_json_format_verbose.1.46488720.md │ ├── p1_p2_settings_tag_NewFramework_target_console_format_verbose.1.aed53032.md │ ├── p1_p2_sources_tag_NewFramework_target_console_format_verbose.1.7dfa5455.md │ ├── p1_p2_sources_tag_NewFramework_target_markdown_format_verbose.1.2500c898.md │ ├── p1_p2_targets_tag_Project_target_console_format_verbose.0.8c12af18.md │ ├── p1_p2_linked_dependencies_tag_NewFramework_target_json_format.1.f9d8ee52.md │ ├── p1_p2_linked_dependencies_tag_Project_target_markdown_format.2.9e5c0d15.md │ ├── p1_p2_resources_tag_NewFramework_target_console_format_verbose.1.cda4dc90.md │ ├── p1_p2_resources_tag_NewFramework_target_markdown_format_verbose.1.ff2afe5f.md │ ├── p1_p2_run_scripts_tag_NewFramework_target_console_format_verbose.1.a1ddaf56.md │ ├── p1_p2_settings_tag_NewFramework_target_markdown_format_verbose.1.c8eec25c.md │ ├── p1_p2_linked_dependencies_tag_NewFramework_target_console_format.1.8d7d137e.md │ ├── p1_p2_linked_dependencies_tag_NewFramework_target_markdown_format.1.f5160665.md │ ├── p1_p2_plists_tag_Project_target_console_format.2.0bf1ed75.md │ ├── p1_p2_run_scripts_tag_NewFramework_target_markdown_format_verbose.1.a39cf85f.md │ ├── p1_p2_linked_dependencies_tag_NewFramework_target_json_format_verbose.1.a715ef05.md │ ├── p1_p2_targets_tag_Project_target_markdown_format.0.bfe1f492.md │ ├── p1_p2_configurations_tag_Project_target_verbose.2.82ded3c5.md │ ├── p1_p2_configurations_tag_console_format_verbose.2.08df2c23.md │ ├── p1_p2_linked_dependencies_tag_NewFramework_target_console_format_verbose.1.87b40e62.md │ ├── p1_p2_linked_dependencies_tag_NewFramework_target_markdown_format_verbose.1.29e5375b.md │ ├── p1_p2_targets_tag_NewFramework_target_markdown_format.2.08636ab2.md │ ├── p1_p2_run_scripts_tag_Project_target.2.c652102e.md │ ├── p1_p2_targets_tag_Project_target_markdown_format_verbose.0.43882321.md │ ├── p1_p2_configurations_tag_NewFramework_target_verbose.2.1fdc7cc0.md │ ├── p1_p2_plists_tag_Project_target_markdown_format.2.c93daa93.md │ ├── target_only_in_second_g_targets.2.27a0c180.md │ ├── p1_p2_configurations_tag_markdown_format_verbose.2.bdea6ea6.md │ ├── p1_p2_targets_tag_NewFramework_target_verbose.2.b067fb5d.md │ ├── p1_p2_configurations_tag_Project_target_console_format_verbose.2.a3575eeb.md │ ├── p1_p2_headers_tag.2.d1be72ae.md │ ├── p1_p2_sources_tag.2.8bedb64d.md │ ├── p1_p2_run_scripts_tag_Project_target_console_format.2.86651d78.md │ ├── p1_p2_configurations_tag_NewFramework_target_console_format_verbose.2.1a63f634.md │ ├── p1_p2_resources_tag.2.976bfc43.md │ ├── p1_p2_resources_tag_Project_target_verbose.2.823dbc62.md │ ├── p1_p2_configurations_tag_Project_target_markdown_format_verbose.2.7c544333.md │ ├── p1_p2_targets_tag_NewFramework_target_console_format_verbose.2.ce8ce9eb.md │ ├── p1_p2_configurations_tag_NewFramework_target_markdown_format_verbose.2.f2997123.md │ ├── p1_p2_headers_tag_console_format.2.3b586ea2.md │ ├── p1_p2_run_scripts_tag_Project_target_markdown_format.2.dd412257.md │ ├── p1_p2_sources_tag_console_format.2.827abd8f.md │ ├── p1_p2_resources_tag_console_format.2.c032ef31.md │ ├── p1_p2_resources_tag_Project_target_console_format_verbose.2.07555d5f.md │ ├── p1_p2_targets_tag_NewFramework_target_markdown_format_verbose.2.6c3fe65c.md │ ├── p1_p2_resources_tag_Project_target_markdown_format_verbose.2.9a696a38.md │ ├── p1_p2_linked_dependencies_tag.2.31201ec2.md │ ├── p1_p2_sources_tag_Project_target_verbose.2.918891a9.md │ ├── p1_p2_headers_tag_markdown_format.2.faef272e.md │ ├── p1_p2_sources_tag_markdown_format.2.c2c47513.md │ ├── p1_p2_headers_tag_Project_target_json_format.0.9c563bfc.md │ ├── p1_p2_linked_dependencies_tag_console_format.2.3a3d8aa6.md │ ├── p1_p2_configurations_tag_json_format.2.e2790a2f.md │ ├── p1_p2_resources_tag_markdown_format.2.93973806.md │ ├── p1_p2_run_scripts_tag.2.6a74f67b.md │ ├── test_filesystem_synchronized_groups.2.6832699d.md │ ├── p1_p2_configurations_tag_json_format_verbose.2.0bcbdde2.md │ ├── p1_p2_headers_tag_Project_target_json_format_verbose.0.af9ae37b.md │ ├── p1_p2_plists_tag.2.233c5215.md │ ├── p1_p2_sources_tag_Project_target_console_format_verbose.2.c35ee8fd.md │ ├── p1_p2_configurations_tag_Project_target_json_format.2.8327eb12.md │ ├── p1_p2_run_scripts_tag_console_format.2.863601f6.md │ ├── p1_p2_configurations_tag_NewFramework_target_json_format.2.335bae81.md │ ├── p1_p2_linked_dependencies_tag_Project_target_verbose.2.2230b532.md │ ├── p1_p2_configurations_tag_Project_target_json_format_verbose.2.aa13e39d.md │ ├── p1_p2_plists_tag_console_format.2.de92b270.md │ ├── p1_p2_sources_tag_Project_target_markdown_format_verbose.2.e75099e7.md │ ├── p1_p2_configurations_tag_NewFramework_target_json_format_verbose.2.a13c8b4a.md │ ├── p1_p2_linked_dependencies_tag_Project_target_console_format_verbose.2.121adc08.md │ ├── p1_p2_linked_dependencies_tag_markdown_format.2.b0497873.md │ ├── p1_p2_resources_tag_Project_target_json_format.2.b0b1c394.md │ ├── p1_p2_targets_tag_verbose.2.7f724cdf.md │ ├── p1_p2_resources_tag_Project_target_json_format_verbose.2.ea491851.md │ ├── p1_p2_linked_dependencies_tag_Project_target_markdown_format_verbose.2.923b5717.md │ ├── p1_p2_targets_tag_console_format_verbose.2.66404ebe.md │ ├── p1_p2_run_scripts_tag_markdown_format.2.d3f5c727.md │ ├── p1_p2_plists_tag_markdown_format.2.10cffa21.md │ ├── p1_p2_targets_tag_markdown_format_verbose.2.21ec7415.md │ ├── p1_p2_sources_tag_Project_target_json_format.2.574dd252.md │ ├── p1_p2_sources_tag_Project_target_json_format_verbose.2.5d7b3468.md │ ├── test_target_attributes.2.264aeded.md │ ├── p1_p2_linked_dependencies_tag_verbose.2.66130397.md │ ├── p1_p2_run_scripts_tag_Project_target_verbose.2.da061135.md │ ├── p1_p2_resources_tag_verbose.2.be954909.md │ ├── p1_p2_targets_tag_Project_target_json_format.0.cd839ca6.md │ ├── p1_p2_linked_dependencies_tag_Project_target_json_format.2.fcf15800.md │ ├── p1_p2_linked_dependencies_tag_console_format_verbose.2.d03a8f51.md │ ├── p1_p2_targets_tag_Project_target_json_format_verbose.0.f3b913a4.md │ ├── p1_p2_linked_dependencies_tag_Project_target_json_format_verbose.2.49648a9b.md │ ├── p1_p2_run_scripts_tag_Project_target_console_format_verbose.2.57c6423c.md │ ├── p1_p2_resources_tag_console_format_verbose.2.1cd00005.md │ ├── p1_p2_targets_tag_NewFramework_target_json_format.2.d055692b.md │ ├── p1_p2_targets_tag_NewFramework_target_json_format_verbose.2.cdc4be65.md │ ├── p1_p2_settings_tag_Project_target.2.58e47617.md │ ├── p1_p2_headers_tag_verbose.2.6cdf87d7.md │ ├── p1_p2_run_scripts_tag_Project_target_markdown_format_verbose.2.7f01b3b3.md │ ├── p1_p2_settings_tag_Project_target_console_format.2.cc632906.md │ ├── p1_p2_headers_tag_console_format_verbose.2.db45e192.md │ ├── p1_p2_linked_dependencies_tag_markdown_format_verbose.2.c82caaf9.md │ ├── p1_p2_resources_tag_markdown_format_verbose.2.9073cfbf.md │ ├── p1_p2_run_scripts_tag_verbose.2.d42c21b9.md │ ├── p1_p2_sources_tag_verbose.2.ea3e88b3.md │ ├── p1_p2_run_scripts_tag_console_format_verbose.2.de59bc4a.md │ ├── p1_p2_sources_tag_console_format_verbose.2.fb480f7d.md │ ├── p1_p2_settings_tag_Project_target_markdown_format.2.7789ca22.md │ ├── p1_p2_headers_tag_markdown_format_verbose.2.1aab2451.md │ ├── p1_p2_targets_tag_json_format.2.cf9b3ff2.md │ ├── p1_p2_targets_tag_json_format_verbose.2.839e77c9.md │ ├── p1_p2_plists_tag_Project_target_verbose.2.1bf81b97.md │ ├── p1_p2_sources_tag_markdown_format_verbose.2.7881e7f6.md │ ├── p1_p2_run_scripts_tag_markdown_format_verbose.2.d9b5d912.md │ ├── p1_p2_plists_tag_Project_target_console_format_verbose.2.d65d4699.md │ ├── p1_p2_file_references_tag_verbose.2.f3ef9001.md │ ├── p1_p2_plists_tag_Project_target_markdown_format_verbose.2.1beaa9b8.md │ └── p1_p2_file_references_tag_Project_target_verbose.2.c9193e01.md └── generated_test_commands.json ├── .swiftlint.yml ├── Sources ├── XCDiffCore │ ├── Library │ │ ├── GenericCompareResult.swift │ │ ├── ValueComparator.swift │ │ ├── Descriptors │ │ │ └── BuildFileDescriptor.swift │ │ └── Comparator.swift │ └── ResultRenderer │ │ ├── ResultRenderer.swift │ │ └── ProjectResultRenderer │ │ └── ProjectCompareResultRenderer.swift └── XCDiff │ └── main.swift └── Tests ├── XCDiffCommandTests └── Mocks │ └── FileSystemMock.swift └── XCDiffCoreTests ├── Mocks └── XcodeProjLoaderMock.swift └── Helpers └── PBXAggregateTargetBuilder.swift /Fixtures/ios_project_2/Project/Project.xcconfig: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/Project/Target.xcconfig: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | CommandTests/** linguist-generated=true -------------------------------------------------------------------------------- /Fixtures/Project1.xcodeproj: -------------------------------------------------------------------------------- 1 | ios_project_1/Project.xcodeproj -------------------------------------------------------------------------------- /Fixtures/Project2.xcodeproj: -------------------------------------------------------------------------------- 1 | ios_project_2/Project.xcodeproj -------------------------------------------------------------------------------- /Scripts/stub.rb: -------------------------------------------------------------------------------- 1 | # Stub file to satisfy CodeQL Analysis (Ruby) check. 2 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/ProjectTests/BarTests.swift: -------------------------------------------------------------------------------- 1 | 2 | import Foundation 3 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests/Project1.xcodeproj: -------------------------------------------------------------------------------- 1 | ../ios_project_with_ui_tests_1/Project.xcodeproj -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests/Project2.xcodeproj: -------------------------------------------------------------------------------- 1 | ../ios_project_with_ui_tests_2/Project.xcodeproj -------------------------------------------------------------------------------- /Fixtures/ios_project_2/README.md: -------------------------------------------------------------------------------- 1 | # README 2 | 3 | This file is not present in `ios_project_1`. 4 | 5 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages/Project1.xcodeproj: -------------------------------------------------------------------------------- 1 | ../ios_project_with_swift_packages_1/Project.xcodeproj -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages/Project2.xcodeproj: -------------------------------------------------------------------------------- 1 | ../ios_project_with_swift_packages_2/Project.xcodeproj -------------------------------------------------------------------------------- /Documentation/Resources/xcdiff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bloomberg/xcdiff/HEAD/Documentation/Resources/xcdiff.png -------------------------------------------------------------------------------- /.swiftformat: -------------------------------------------------------------------------------- 1 | --exclude Fixtures 2 | --swiftversion 5 3 | 4 | --disable enumNamespaces 5 | --disable wrapMultilineStatementBraces 6 | -------------------------------------------------------------------------------- /Documentation/Resources/xcdiff-demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bloomberg/xcdiff/HEAD/Documentation/Resources/xcdiff-demo.png -------------------------------------------------------------------------------- /Fixtures/ios_project_1/Project/Group A/ObjcClass.m: -------------------------------------------------------------------------------- 1 | 2 | #import "ObjcClass.h" 3 | 4 | @implementation ObjcClass 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/Project/Group A/ObjcClass.m: -------------------------------------------------------------------------------- 1 | 2 | #import "ObjcClass.h" 3 | 4 | @implementation ObjcClass 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /Documentation/Resources/xcdiff-demo-v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bloomberg/xcdiff/HEAD/Documentation/Resources/xcdiff-demo-v.png -------------------------------------------------------------------------------- /Fixtures/ios_project_1/Project/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Fixtures/ios_project_2/Project/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Fixtures/ios_project_1/Project/Resources/time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bloomberg/xcdiff/HEAD/Fixtures/ios_project_1/Project/Resources/time.png -------------------------------------------------------------------------------- /Fixtures/xcode16_syncgroups_2/AnotherSourceFolder/Component.swift: -------------------------------------------------------------------------------- 1 | 2 | final class Component { 3 | init() {} 4 | func doSomething() {} 5 | } 6 | -------------------------------------------------------------------------------- /.mise.toml: -------------------------------------------------------------------------------- 1 | [tools] 2 | swiftlint = "0.49.1" 3 | swiftformat = "0.50.3" 4 | 5 | [settings] 6 | jobs = 6 7 | http_timeout = "30" 8 | experimental = true 9 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_1/AppWithPlatformFilters/TVSourceFile.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | final class SomeClassAvailableOnTV { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_2/AppWithPlatformFilters/TVSourceFile.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | final class SomeClassAvailableOnTV { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/Project/Resources/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bloomberg/xcdiff/HEAD/Fixtures/ios_project_1/Project/Resources/search.png -------------------------------------------------------------------------------- /Fixtures/ios_project_2/Project/Resources/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bloomberg/xcdiff/HEAD/Fixtures/ios_project_2/Project/Resources/search.png -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_1/App/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_2/App/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_1/MyApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_2/MyApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | patch: 4 | default: 5 | threshold: 5% 6 | project: 7 | default: 8 | threshold: 0.5% 9 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/ProjectUITests/Screenshots/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bloomberg/xcdiff/HEAD/Fixtures/ios_project_1/ProjectUITests/Screenshots/empty.png -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_1/AppWithPlatformFilters/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_1/AppWithPlatformFilters/SourceFileWithFilters.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | final class SomeClassAvailableOnSomePlatforms { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_2/AppWithPlatformFilters/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_2/AppWithPlatformFilters/SourceFileWithFilters.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | final class SomeClassAvailableOnSomePlatforms { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_1/MyApp/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_2/MyApp/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_1/App/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_2/App/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/ProjectTests/Responses/ListResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "xcdiff", 3 | "item": [ 4 | "diff targets", 5 | "diff sources", 6 | "diff resources", 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/Project/Group A/ObjcClass.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | NS_ASSUME_NONNULL_BEGIN 5 | 6 | @interface ObjcClass : NSObject 7 | 8 | @end 9 | 10 | NS_ASSUME_NONNULL_END 11 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/Project/Group A/ObjcClass.h: -------------------------------------------------------------------------------- 1 | 2 | #import 3 | 4 | NS_ASSUME_NONNULL_BEGIN 5 | 6 | @interface ObjcClass : NSObject 7 | 8 | @end 9 | 10 | NS_ASSUME_NONNULL_END 11 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_1/App/AppApp.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | @main 4 | struct AppApp: App { 5 | var body: some Scene { 6 | WindowGroup { 7 | ContentView() 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_2/App/AppApp.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | @main 4 | struct AppApp: App { 5 | var body: some Scene { 6 | WindowGroup { 7 | ContentView() 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Fixtures/xcode16_syncgroups_1/Project/ProjectApp.swift: -------------------------------------------------------------------------------- 1 | 2 | import SwiftUI 3 | 4 | @main 5 | struct ProjectApp: App { 6 | var body: some Scene { 7 | WindowGroup { 8 | ContentView() 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Fixtures/xcode16_syncgroups_2/Project/ProjectApp.swift: -------------------------------------------------------------------------------- 1 | 2 | import SwiftUI 3 | 4 | @main 5 | struct ProjectApp: App { 6 | var body: some Scene { 7 | WindowGroup { 8 | ContentView() 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Fixtures/xcode16_syncgroups_1/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Fixtures/xcode16_syncgroups_2/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_1/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_2/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_1/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_2/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_1/MyApp/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_2/MyApp/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_1/AppWithPlatformFilters.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_2/AppWithPlatformFilters.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Fixtures/ios_project_invalid_paths/Project.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_1/App/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_2/App/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_1/AppWithPlatformFilters/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_2/AppWithPlatformFilters/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Documentation/README.md: -------------------------------------------------------------------------------- 1 | # Documentation 2 | 3 | - [CLI](CLI.md) 4 | - [Comparators](Comparators.md) 5 | - [ComparisonResult](ComparisonResult.md) 6 | - [Development](Development.md) 7 | - [Release](Release.md) 8 | - [Framework](Framework.md) 9 | - [Installation](Installation.md) 10 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_1/AppWithPlatformFilters/AppWithPlatformFiltersApp.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | @main 4 | struct AppWithPlatformFiltersApp: App { 5 | var body: some Scene { 6 | WindowGroup { 7 | ContentView() 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_2/AppWithPlatformFilters/AppWithPlatformFiltersApp.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | @main 4 | struct AppWithPlatformFiltersApp: App { 5 | var body: some Scene { 6 | WindowGroup { 7 | ContentView() 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /CommandTests/Generated/unknown.1.b23a6a84.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-unknown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | Error: Unknown option '-unknown' 12 | Usage: [options] 13 | See 'xcdiff --help' for more information. 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_file_references_tag.2.97f35a57.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "file_references"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ FILE_REFERENCES 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_source_trees_tag.2.2edb5903.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "source_trees"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ SOURCE_TREES > Root project 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag.2.905c4072.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ CONFIGURATIONS > Root project 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /Fixtures/xcode16_syncgroups_1/ProjectTests/ProjectTests.swift: -------------------------------------------------------------------------------- 1 | 2 | import Testing 3 | @testable import Project 4 | 5 | struct ProjectTests { 6 | 7 | @Test func example() async throws { 8 | // Write your test here and use APIs like `#expect(...)` to check expected conditions. 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Fixtures/xcode16_syncgroups_2/ProjectTests/ProjectTests.swift: -------------------------------------------------------------------------------- 1 | 2 | import Testing 3 | @testable import Project 4 | 5 | struct ProjectTests { 6 | 7 | @Test func example() async throws { 8 | // Write your test here and use APIs like `#expect(...)` to check expected conditions. 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /CommandTests/Generated/non_existing_target.1.426358e4.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-t", "NON_EXISTING"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NON_EXISTING" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_does_not_exist.1.429294f9.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "/not/existing/project1.xcodeproj", "-p2", "{ios_project_2}"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: -p1 "/not/existing/project1.xcodeproj" project does not exist 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_Project_target.0.911732e5.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "Project"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | ✅ HEADERS > "Project" target 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_Project_target.2.a2b6eeb4.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "Project"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ SOURCES > "Project" target 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag.2.87422ee0.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ TARGETS > NATIVE targets 12 | ❌ TARGETS > AGGREGATE targets 13 | 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p2_does_not_exist.1.319dbe63.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "/not/existing/project2.xcodeproj"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: -p2 "/not/existing/project2.xcodeproj" project does not exist 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/Project/Project.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_NewFramework_target.1.38b5ee4a.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-t", "NewFramework"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_file_references_tag_Project_target.2.6867ba65.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "file_references", "-t", "Project"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ FILE_REFERENCES 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_file_references_tag_console_format.2.061233ab.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "file_references", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ FILE_REFERENCES 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_Project_target.2.fb256393.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "Project"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ RESOURCES > "Project" target 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /.swiftlint.yml: -------------------------------------------------------------------------------- 1 | disabled_rules: 2 | - todo 3 | - trailing_comma 4 | 5 | included: 6 | - Sources/ 7 | - Tests/ 8 | 9 | excluded: 10 | - Fixtures/ 11 | 12 | identifier_name: 13 | excluded: 14 | - h1 15 | - h2 16 | - h3 17 | - p1 18 | - p2 19 | 20 | type_name: 21 | excluded: 22 | - T 23 | 24 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_source_trees_tag_Project_target.2.22e39991.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "source_trees", "-t", "Project"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ SOURCE_TREES > Root project 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_source_trees_tag_console_format.2.dd9e3e53.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "source_trees", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ SOURCE_TREES > Root project 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_Project_target.2.05c48867.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "Project"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ CONFIGURATIONS > Root project 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_console_format.2.c7078894.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ CONFIGURATIONS > Root project 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_file_references_tag_NewFramework_target.2.1eda851c.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "file_references", "-t", "NewFramework"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ FILE_REFERENCES 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_Project_target_verbose.0.38f1b3eb.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "Project", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | ✅ HEADERS > "Project" target 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/non_existing_tag.1.1babe92b.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets, unsupported, unsupported_too"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Unsupported tag(s) "UNSUPPORTED", "UNSUPPORTED_TOO" 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_NewFramework_target_verbose.1.41f31e6e.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-t", "NewFramework", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_do_not_exist.1.98fc0060.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "/not/existing/project1.xcodeproj", "-p2", "/not/existing/project2.xcodeproj"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: -p1 "/not/existing/project1.xcodeproj" project does not exist 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_file_references_tag_markdown_format.2.72a8d656.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "file_references", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ FILE_REFERENCES 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_source_trees_tag_NewFramework_target.2.d8db452a.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "source_trees", "-t", "NewFramework"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ SOURCE_TREES > Root project 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_1/AppWithPlatformFilters/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_2/AppWithPlatformFilters/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_NewFramework_target.2.d67b27a7.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "NewFramework"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ CONFIGURATIONS > Root project 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_NewFramework_target_json_format.1.6281eb3a.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-t", "NewFramework", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_Project_target_console_format.0.6d6ed065.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "Project", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | ✅ HEADERS > "Project" target 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_NewFramework_target.1.704c98b4.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "NewFramework"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_source_trees_tag_markdown_format.2.9af8f61e.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "source_trees", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ SOURCE_TREES > Root project 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_Project_target_console_format.2.b8cf6cab.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "Project", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ SOURCES > "Project" target 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_NewFramework_target_console_format.1.c79021d5.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-t", "NewFramework", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_markdown_format.2.b11707b5.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ CONFIGURATIONS > Root project 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_file_references_tag_Project_target_console_format.2.0dac7305.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "file_references", "-t", "Project", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ FILE_REFERENCES 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_NewFramework_target.1.7d3a003d.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "NewFramework"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_Project_target.2.5ee63a66.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "Project"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ LINKED_DEPENDENCIES > "Project" target 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_NewFramework_target.1.d4ececa6.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "NewFramework"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_settings_tag_NewFramework_target.1.29612643.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "settings", "-t", "NewFramework"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_NewFramework_target.1.ef53f387.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "NewFramework"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_Project_target.0.dad7e204.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "Project"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | ✅ TARGETS > NATIVE targets 12 | ✅ TARGETS > AGGREGATE targets 13 | 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_console_format.2.daca61fb.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ TARGETS > NATIVE targets 12 | ❌ TARGETS > AGGREGATE targets 13 | 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/target_only_in_second_g_headers.1.0e3a7b19.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "NewFramework", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/Project.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/Project.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_NewFramework_target_markdown_format.1.2f8744c2.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-t", "NewFramework", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_Project_target_console_format.2.cc5b96be.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "Project", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ RESOURCES > "Project" target 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_NewFramework_target.1.30052ab6.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "NewFramework"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_NewFramework_target_json_format_verbose.1.5934444b.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-t", "NewFramework", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_file_references_tag_NewFramework_target_console_format.2.4282243f.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "file_references", "-t", "NewFramework", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ FILE_REFERENCES 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_NewFramework_target_verbose.1.1645eba3.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "NewFramework", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_Project_target_console_format_verbose.0.06bc3a8e.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "Project", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | ✅ HEADERS > "Project" target 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_NewFramework_target_verbose.1.53c0efdd.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "NewFramework", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_source_trees_tag_Project_target_console_format.2.10de8b6f.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "source_trees", "-t", "Project", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ SOURCE_TREES > Root project 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_NewFramework_target_verbose.1.434ac337.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "NewFramework", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_NewFramework_target.2.4f0ab487.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "NewFramework"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ TARGETS > NATIVE targets 12 | ✅ TARGETS > AGGREGATE targets 13 | 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_Project_target_verbose.0.955eed74.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "Project", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | ✅ TARGETS > NATIVE targets 12 | ✅ TARGETS > AGGREGATE targets 13 | 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_NewFramework_target_console_format_verbose.1.e602511d.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-t", "NewFramework", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_NewFramework_target_markdown_format_verbose.1.15ad4840.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-t", "NewFramework", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_Project_target_console_format.2.02ad65f1.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "Project", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ CONFIGURATIONS > Root project 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_Project_target_markdown_format.0.8370a5bf.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "Project", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ✅ HEADERS > "Project" target 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_NewFramework_target_verbose.1.12d6ffec.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "NewFramework", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_settings_tag_NewFramework_target_verbose.1.e80ef86b.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "settings", "-t", "NewFramework", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_Project_target_markdown_format.2.e0e92787.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "Project", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ SOURCES > "Project" target 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /Fixtures/ios_project_invalid_paths/Project.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_1/App/ContentView.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | struct ContentView: View { 4 | var body: some View { 5 | Text("Hello, world!") 6 | .padding() 7 | } 8 | } 9 | 10 | struct ContentView_Previews: PreviewProvider { 11 | static var previews: some View { 12 | ContentView() 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_2/App/ContentView.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | struct ContentView: View { 4 | var body: some View { 5 | Text("Hello, world!") 6 | .padding() 7 | } 8 | } 9 | 10 | struct ContentView_Previews: PreviewProvider { 11 | static var previews: some View { 12 | ContentView() 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_1/Project.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_2/Project.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_file_references_tag_Project_target_markdown_format.2.c96d8386.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "file_references", "-t", "Project", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ FILE_REFERENCES 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_NewFramework_target.1.12d70214.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "NewFramework"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_NewFramework_target_json_format.1.9deaea7f.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "NewFramework", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_Project_target.2.795f5a51.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "Project"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ PLISTS > "Project" target 12 | ❌ PLISTS > "Project" target > Info.plist - Info.plist 13 | 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_Project_target_markdown_format.2.af30c3a0.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "Project", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ RESOURCES > "Project" target 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_NewFramework_target_verbose.1.89d78c8a.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "NewFramework", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_source_trees_tag_NewFramework_target_console_format.2.f9bdd20b.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "source_trees", "-t", "NewFramework", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ SOURCE_TREES > Root project 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_1/Project.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_swift_packages_2/Project.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_NewFramework_target_console_format.2.53e75de1.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "NewFramework", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ CONFIGURATIONS > Root project 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_NewFramework_target_json_format.1.b33272ad.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "NewFramework", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_settings_tag_NewFramework_target_json_format.1.af55ee12.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "settings", "-t", "NewFramework", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_source_trees_tag_Project_target_markdown_format.2.663080b1.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "source_trees", "-t", "Project", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ SOURCE_TREES > Root project 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_NewFramework_target_json_format.1.ac469878.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "NewFramework", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_Project_target_markdown_format.2.9335c0dd.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "Project", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ CONFIGURATIONS > Root project 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_file_references_tag_NewFramework_target_markdown_format.2.67ed99b7.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "file_references", "-t", "NewFramework", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ FILE_REFERENCES 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_NewFramework_target_console_format.1.1a3c9d1f.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "NewFramework", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_NewFramework_target_markdown_format.1.5b6dbf3f.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "NewFramework", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_Project_target_markdown_format_verbose.0.23d01e13.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "Project", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ✅ HEADERS > "Project" target 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_NewFramework_target_console_format.1.9b316d7c.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "NewFramework", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_NewFramework_target_markdown_format.1.9be82ce5.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "NewFramework", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_NewFramework_target_json_format.1.ad5c5553.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "NewFramework", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_NewFramework_target_json_format.1.8d53e8aa.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "NewFramework", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_settings_tag_NewFramework_target_console_format.1.81be3a1b.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "settings", "-t", "NewFramework", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_NewFramework_target_console_format.1.64e60fbf.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "NewFramework", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_NewFramework_target_markdown_format.1.6aa6cc2d.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "NewFramework", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_Project_target_console_format.0.be9ef2e3.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "Project", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | ✅ TARGETS > NATIVE targets 12 | ✅ TARGETS > AGGREGATE targets 13 | 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_markdown_format.2.7818a159.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ TARGETS > NATIVE targets 13 | 14 | 15 | ## ❌ TARGETS > AGGREGATE targets 16 | 17 | 18 | 19 | ``` 20 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_1/AppWithPlatformFilters.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_2/AppWithPlatformFilters.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_verbose.2.12acd008.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ CONFIGURATIONS > Root project 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • CUSTOM_NEW 16 | 17 | 18 | 19 | 20 | ``` 21 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_NewFramework_target_verbose.1.00a9e66f.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "NewFramework", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_Project_target_console_format.2.7855ca5e.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "Project", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ LINKED_DEPENDENCIES > "Project" target 12 | 13 | 14 | ``` 15 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_NewFramework_target_json_format_verbose.1.a666867e.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "NewFramework", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_NewFramework_target_console_format.1.96130ae0.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "NewFramework", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_NewFramework_target_markdown_format.1.818975a8.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "NewFramework", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_settings_tag_NewFramework_target_markdown_format.1.86d189f7.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "settings", "-t", "NewFramework", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_source_trees_tag_NewFramework_target_markdown_format.2.36f0ad5b.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "source_trees", "-t", "NewFramework", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ SOURCE_TREES > Root project 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_NewFramework_target_markdown_format.2.a67daabe.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "NewFramework", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ CONFIGURATIONS > Root project 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_NewFramework_target_json_format_verbose.1.26e4f275.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "NewFramework", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_NewFramework_target_console_format_verbose.1.488f9070.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "NewFramework", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_NewFramework_target_json_format_verbose.1.09f3af23.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "NewFramework", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_NewFramework_target_console_format.1.1fdd966d.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "NewFramework", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_NewFramework_target_markdown_format.1.7c1a3a53.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "NewFramework", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_settings_tag_NewFramework_target_json_format_verbose.1.08beb39e.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "settings", "-t", "NewFramework", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_NewFramework_target_json_format_verbose.1.4283bcac.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "NewFramework", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_NewFramework_target_console_format.2.1adbc8af.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "NewFramework", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ TARGETS > NATIVE targets 12 | ✅ TARGETS > AGGREGATE targets 13 | 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_NewFramework_target_console_format_verbose.1.49ee3509.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "NewFramework", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_NewFramework_target_markdown_format_verbose.1.3c1cfba2.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "NewFramework", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_NewFramework_target_markdown_format_verbose.1.26f73480.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "NewFramework", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_NewFramework_target_json_format_verbose.1.46488720.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "NewFramework", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_settings_tag_NewFramework_target_console_format_verbose.1.aed53032.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "settings", "-t", "NewFramework", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_NewFramework_target_console_format_verbose.1.7dfa5455.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "NewFramework", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_NewFramework_target_markdown_format_verbose.1.2500c898.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "NewFramework", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_Project_target_console_format_verbose.0.8c12af18.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "Project", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | ✅ TARGETS > NATIVE targets 12 | ✅ TARGETS > AGGREGATE targets 13 | 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_NewFramework_target_json_format.1.f9d8ee52.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "NewFramework", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_Project_target_markdown_format.2.9e5c0d15.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "Project", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ LINKED_DEPENDENCIES > "Project" target 13 | 14 | 15 | 16 | ``` 17 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_NewFramework_target_console_format_verbose.1.cda4dc90.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "NewFramework", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_NewFramework_target_markdown_format_verbose.1.ff2afe5f.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "NewFramework", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_NewFramework_target_console_format_verbose.1.a1ddaf56.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "NewFramework", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_settings_tag_NewFramework_target_markdown_format_verbose.1.c8eec25c.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "settings", "-t", "NewFramework", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_1/AppWithPlatformFilters/ContentView.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | struct ContentView: View { 4 | var body: some View { 5 | VStack { 6 | Image(systemName: "globe") 7 | .imageScale(.large) 8 | .foregroundStyle(.tint) 9 | Text("Hello, world!") 10 | } 11 | .padding() 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_2/AppWithPlatformFilters/ContentView.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | struct ContentView: View { 4 | var body: some View { 5 | VStack { 6 | Image(systemName: "globe") 7 | .imageScale(.large) 8 | .foregroundStyle(.tint) 9 | Text("Hello, world!") 10 | } 11 | .padding() 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_NewFramework_target_console_format.1.8d7d137e.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "NewFramework", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_NewFramework_target_markdown_format.1.f5160665.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "NewFramework", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_Project_target_console_format.2.0bf1ed75.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "Project", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ PLISTS > "Project" target 12 | ❌ PLISTS > "Project" target > Info.plist - Info.plist 13 | 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_NewFramework_target_markdown_format_verbose.1.a39cf85f.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "NewFramework", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_NewFramework_target_json_format_verbose.1.a715ef05.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "NewFramework", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_Project_target_markdown_format.0.bfe1f492.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "Project", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ✅ TARGETS > NATIVE targets 13 | 14 | 15 | ## ✅ TARGETS > AGGREGATE targets 16 | 17 | 18 | 19 | ``` 20 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_Project_target_verbose.2.82ded3c5.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "Project", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ CONFIGURATIONS > Root project 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • CUSTOM_NEW 16 | 17 | 18 | 19 | 20 | ``` 21 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_console_format_verbose.2.08df2c23.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ CONFIGURATIONS > Root project 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • CUSTOM_NEW 16 | 17 | 18 | 19 | 20 | ``` 21 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_NewFramework_target_console_format_verbose.1.87b40e62.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "NewFramework", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_NewFramework_target_markdown_format_verbose.1.29e5375b.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "NewFramework", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 1 8 | 9 | # Expected output 10 | ``` 11 | ERROR: Cannot find target "NewFramework" in both projects 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_NewFramework_target_markdown_format.2.08636ab2.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "NewFramework", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ TARGETS > NATIVE targets 13 | 14 | 15 | ## ✅ TARGETS > AGGREGATE targets 16 | 17 | 18 | 19 | ``` 20 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_Project_target.2.c652102e.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "Project"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ RUN_SCRIPTS > "Project" target > "Second script" build phase 12 | ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase 13 | 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_Project_target_markdown_format_verbose.0.43882321.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "Project", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ✅ TARGETS > NATIVE targets 13 | 14 | 15 | ## ✅ TARGETS > AGGREGATE targets 16 | 17 | 18 | 19 | ``` 20 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_1/AppWithPlatformFilters/AppWithPlatformFilters.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.network.client 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_2/AppWithPlatformFilters/AppWithPlatformFilters.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.network.client 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_NewFramework_target_verbose.2.1fdc7cc0.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "NewFramework", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ CONFIGURATIONS > Root project 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • CUSTOM_NEW 16 | 17 | 18 | 19 | 20 | ``` 21 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_Project_target_markdown_format.2.c93daa93.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "Project", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ PLISTS > "Project" target 13 | 14 | 15 | ## ❌ PLISTS > "Project" target > Info.plist - Info.plist 16 | 17 | 18 | 19 | ``` 20 | -------------------------------------------------------------------------------- /CommandTests/Generated/target_only_in_second_g_targets.2.27a0c180.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "NewFramework", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ TARGETS > NATIVE targets 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • NewFramework 16 | 17 | 18 | ✅ TARGETS > AGGREGATE targets 19 | 20 | 21 | ``` 22 | -------------------------------------------------------------------------------- /Fixtures/xcode16_syncgroups_1/Project/ContentView.swift: -------------------------------------------------------------------------------- 1 | 2 | import SwiftUI 3 | 4 | struct ContentView: View { 5 | var body: some View { 6 | VStack { 7 | Image(systemName: "globe") 8 | .imageScale(.large) 9 | .foregroundStyle(.tint) 10 | Text("Hello, world!") 11 | } 12 | .padding() 13 | } 14 | } 15 | 16 | #Preview { 17 | ContentView() 18 | } 19 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_markdown_format_verbose.2.bdea6ea6.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ CONFIGURATIONS > Root project 13 | 14 | 15 | ### ⚠️ Only in second (1): 16 | 17 | - `CUSTOM_NEW` 18 | 19 | 20 | 21 | 22 | ``` 23 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_NewFramework_target_verbose.2.b067fb5d.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "NewFramework", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ TARGETS > NATIVE targets 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • NewFramework 16 | 17 | 18 | ✅ TARGETS > AGGREGATE targets 19 | 20 | 21 | ``` 22 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_Project_target_console_format_verbose.2.a3575eeb.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "Project", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ CONFIGURATIONS > Root project 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • CUSTOM_NEW 16 | 17 | 18 | 19 | 20 | ``` 21 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag.2.d1be72ae.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ HEADERS > "MismatchingLibrary" target 12 | ✅ HEADERS > "Project" target 13 | ❌ HEADERS > "ProjectFramework" target 14 | ✅ HEADERS > "ProjectTests" target 15 | ✅ HEADERS > "ProjectUITests" target 16 | 17 | 18 | ``` 19 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag.2.8bedb64d.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ SOURCES > "MismatchingLibrary" target 12 | ❌ SOURCES > "Project" target 13 | ✅ SOURCES > "ProjectFramework" target 14 | ❌ SOURCES > "ProjectTests" target 15 | ❌ SOURCES > "ProjectUITests" target 16 | 17 | 18 | ``` 19 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_Project_target_console_format.2.86651d78.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "Project", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ RUN_SCRIPTS > "Project" target > "Second script" build phase 12 | ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase 13 | 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /Scripts/coverage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # don't pipe on failure 4 | set -o pipefail 5 | 6 | # exit on error 7 | trap 'exit' ERR 8 | 9 | # create coverage directory 10 | mkdir -p .coverage 11 | 12 | # export the coverage output to lcov format 13 | xcrun llvm-cov export -format="lcov" .build/debug/xcdiff -instr-profile .build/debug/codecov/default.profdata > ./.coverage/coverage.lcov 14 | 15 | echo "Coverage reports saved to the .coverage directory" 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_NewFramework_target_console_format_verbose.2.1a63f634.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "NewFramework", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ CONFIGURATIONS > Root project 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • CUSTOM_NEW 16 | 17 | 18 | 19 | 20 | ``` 21 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag.2.976bfc43.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ RESOURCES > "MismatchingLibrary" target 12 | ❌ RESOURCES > "Project" target 13 | ✅ RESOURCES > "ProjectFramework" target 14 | ❌ RESOURCES > "ProjectTests" target 15 | ❌ RESOURCES > "ProjectUITests" target 16 | 17 | 18 | ``` 19 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_Project_target_verbose.2.823dbc62.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "Project", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ RESOURCES > "Project" target 12 | 13 | ⚠️ Only in first (2): 14 | 15 | • Project/Group B/AViewController.xib 16 | • Project/Resources/time.png 17 | 18 | 19 | 20 | 21 | ``` 22 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_Project_target_markdown_format_verbose.2.7c544333.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "Project", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ CONFIGURATIONS > Root project 13 | 14 | 15 | ### ⚠️ Only in second (1): 16 | 17 | - `CUSTOM_NEW` 18 | 19 | 20 | 21 | 22 | ``` 23 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_NewFramework_target_console_format_verbose.2.ce8ce9eb.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "NewFramework", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ TARGETS > NATIVE targets 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • NewFramework 16 | 17 | 18 | ✅ TARGETS > AGGREGATE targets 19 | 20 | 21 | ``` 22 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_NewFramework_target_markdown_format_verbose.2.f2997123.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "NewFramework", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ CONFIGURATIONS > Root project 13 | 14 | 15 | ### ⚠️ Only in second (1): 16 | 17 | - `CUSTOM_NEW` 18 | 19 | 20 | 21 | 22 | ``` 23 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_console_format.2.3b586ea2.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ HEADERS > "MismatchingLibrary" target 12 | ✅ HEADERS > "Project" target 13 | ❌ HEADERS > "ProjectFramework" target 14 | ✅ HEADERS > "ProjectTests" target 15 | ✅ HEADERS > "ProjectUITests" target 16 | 17 | 18 | ``` 19 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_Project_target_markdown_format.2.dd412257.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "Project", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ RUN_SCRIPTS > "Project" target > "Second script" build phase 13 | 14 | 15 | ## ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase 16 | 17 | 18 | 19 | ``` 20 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_console_format.2.827abd8f.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ SOURCES > "MismatchingLibrary" target 12 | ❌ SOURCES > "Project" target 13 | ✅ SOURCES > "ProjectFramework" target 14 | ❌ SOURCES > "ProjectTests" target 15 | ❌ SOURCES > "ProjectUITests" target 16 | 17 | 18 | ``` 19 | -------------------------------------------------------------------------------- /Fixtures/xcode16_syncgroups_2/Project/ContentView.swift: -------------------------------------------------------------------------------- 1 | 2 | import SwiftUI 3 | 4 | struct ContentView: View { 5 | private let component = Component() 6 | 7 | var body: some View { 8 | VStack { 9 | Image(systemName: "globe") 10 | .imageScale(.large) 11 | .foregroundStyle(.tint) 12 | Text("Hello, world!") 13 | } 14 | .padding() 15 | } 16 | } 17 | 18 | #Preview { 19 | ContentView() 20 | } 21 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_console_format.2.c032ef31.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ RESOURCES > "MismatchingLibrary" target 12 | ❌ RESOURCES > "Project" target 13 | ✅ RESOURCES > "ProjectFramework" target 14 | ❌ RESOURCES > "ProjectTests" target 15 | ❌ RESOURCES > "ProjectUITests" target 16 | 17 | 18 | ``` 19 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_Project_target_console_format_verbose.2.07555d5f.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "Project", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ RESOURCES > "Project" target 12 | 13 | ⚠️ Only in first (2): 14 | 15 | • Project/Group B/AViewController.xib 16 | • Project/Resources/time.png 17 | 18 | 19 | 20 | 21 | ``` 22 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_NewFramework_target_markdown_format_verbose.2.6c3fe65c.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "NewFramework", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ TARGETS > NATIVE targets 13 | 14 | 15 | ### ⚠️ Only in second (1): 16 | 17 | - `NewFramework` 18 | 19 | 20 | 21 | ## ✅ TARGETS > AGGREGATE targets 22 | 23 | 24 | 25 | ``` 26 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_Project_target_markdown_format_verbose.2.9a696a38.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "Project", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ RESOURCES > "Project" target 13 | 14 | 15 | ### ⚠️ Only in first (2): 16 | 17 | - `Project/Group B/AViewController.xib` 18 | - `Project/Resources/time.png` 19 | 20 | 21 | 22 | 23 | ``` 24 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag.2.31201ec2.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ LINKED_DEPENDENCIES > "MismatchingLibrary" target 12 | ❌ LINKED_DEPENDENCIES > "Project" target 13 | ✅ LINKED_DEPENDENCIES > "ProjectFramework" target 14 | ✅ LINKED_DEPENDENCIES > "ProjectTests" target 15 | ✅ LINKED_DEPENDENCIES > "ProjectUITests" target 16 | 17 | 18 | ``` 19 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_Project_target_verbose.2.918891a9.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "Project", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ SOURCES > "Project" target 12 | 13 | ⚠️ Only in first (1): 14 | 15 | • Project/Group B/AnotherObjcClass.m 16 | 17 | 18 | ⚠️ Value mismatch (1): 19 | 20 | • Project/Group A/ObjcClass.m compiler flags 21 | ◦ nil 22 | ◦ -ObjC 23 | 24 | 25 | 26 | 27 | ``` 28 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_markdown_format.2.faef272e.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ HEADERS > "MismatchingLibrary" target 13 | 14 | 15 | ## ✅ HEADERS > "Project" target 16 | 17 | 18 | ## ❌ HEADERS > "ProjectFramework" target 19 | 20 | 21 | ## ✅ HEADERS > "ProjectTests" target 22 | 23 | 24 | ## ✅ HEADERS > "ProjectUITests" target 25 | 26 | 27 | 28 | ``` 29 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_markdown_format.2.c2c47513.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ✅ SOURCES > "MismatchingLibrary" target 13 | 14 | 15 | ## ❌ SOURCES > "Project" target 16 | 17 | 18 | ## ✅ SOURCES > "ProjectFramework" target 19 | 20 | 21 | ## ❌ SOURCES > "ProjectTests" target 22 | 23 | 24 | ## ❌ SOURCES > "ProjectUITests" target 25 | 26 | 27 | 28 | ``` 29 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_Project_target_json_format.0.9c563bfc.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "Project", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "\"Project\" target" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | 21 | ], 22 | "onlyInSecond" : [ 23 | 24 | ], 25 | "tag" : "headers" 26 | } 27 | ] 28 | 29 | ``` 30 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_console_format.2.3a3d8aa6.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ LINKED_DEPENDENCIES > "MismatchingLibrary" target 12 | ❌ LINKED_DEPENDENCIES > "Project" target 13 | ✅ LINKED_DEPENDENCIES > "ProjectFramework" target 14 | ✅ LINKED_DEPENDENCIES > "ProjectTests" target 15 | ✅ LINKED_DEPENDENCIES > "ProjectUITests" target 16 | 17 | 18 | ``` 19 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_json_format.2.e2790a2f.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "Root project" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | 21 | ], 22 | "onlyInSecond" : [ 23 | "CUSTOM_NEW" 24 | ], 25 | "tag" : "configurations" 26 | } 27 | ] 28 | 29 | ``` 30 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_markdown_format.2.93973806.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ✅ RESOURCES > "MismatchingLibrary" target 13 | 14 | 15 | ## ❌ RESOURCES > "Project" target 16 | 17 | 18 | ## ✅ RESOURCES > "ProjectFramework" target 19 | 20 | 21 | ## ❌ RESOURCES > "ProjectTests" target 22 | 23 | 24 | ## ❌ RESOURCES > "ProjectUITests" target 25 | 26 | 27 | 28 | ``` 29 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag.2.6a74f67b.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ RUN_SCRIPTS > "MismatchingLibrary" target 12 | ❌ RUN_SCRIPTS > "Project" target > "Second script" build phase 13 | ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase 14 | ✅ RUN_SCRIPTS > "ProjectFramework" target 15 | ✅ RUN_SCRIPTS > "ProjectTests" target 16 | ✅ RUN_SCRIPTS > "ProjectUITests" target 17 | 18 | 19 | ``` 20 | -------------------------------------------------------------------------------- /CommandTests/Generated/test_filesystem_synchronized_groups.2.6832699d.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{xcode16_syncgroups_1}", "-p2", "{xcode16_syncgroups_2}", "-g", "filesystem_synchronized_groups", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ FILESYSTEM_SYNCHRONIZED_GROUPS > "Project" target 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • AnotherSourceFolder 16 | 17 | 18 | ✅ FILESYSTEM_SYNCHRONIZED_GROUPS > "ProjectTests" target 19 | ✅ FILESYSTEM_SYNCHRONIZED_GROUPS > "ProjectUITests" target 20 | 21 | 22 | ``` 23 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_json_format_verbose.2.0bcbdde2.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "Root project" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | 21 | ], 22 | "onlyInSecond" : [ 23 | "CUSTOM_NEW" 24 | ], 25 | "tag" : "configurations" 26 | } 27 | ] 28 | 29 | ``` 30 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_Project_target_json_format_verbose.0.af9ae37b.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-t", "Project", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "\"Project\" target" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | 21 | ], 22 | "onlyInSecond" : [ 23 | 24 | ], 25 | "tag" : "headers" 26 | } 27 | ] 28 | 29 | ``` 30 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag.2.233c5215.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ PLISTS > "MismatchingLibrary" target 12 | ❌ PLISTS > "Project" target 13 | ❌ PLISTS > "Project" target > Info.plist - Info.plist 14 | ✅ PLISTS > "ProjectFramework" target > Info.plist - Info.plist 15 | ✅ PLISTS > "ProjectTests" target > Info.plist - Info.plist 16 | ✅ PLISTS > "ProjectUITests" target > Info.plist - Info.plist 17 | 18 | 19 | ``` 20 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_Project_target_console_format_verbose.2.c35ee8fd.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "Project", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ SOURCES > "Project" target 12 | 13 | ⚠️ Only in first (1): 14 | 15 | • Project/Group B/AnotherObjcClass.m 16 | 17 | 18 | ⚠️ Value mismatch (1): 19 | 20 | • Project/Group A/ObjcClass.m compiler flags 21 | ◦ nil 22 | ◦ -ObjC 23 | 24 | 25 | 26 | 27 | ``` 28 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_Project_target_json_format.2.8327eb12.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "Project", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "Root project" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | 21 | ], 22 | "onlyInSecond" : [ 23 | "CUSTOM_NEW" 24 | ], 25 | "tag" : "configurations" 26 | } 27 | ] 28 | 29 | ``` 30 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_console_format.2.863601f6.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ RUN_SCRIPTS > "MismatchingLibrary" target 12 | ❌ RUN_SCRIPTS > "Project" target > "Second script" build phase 13 | ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase 14 | ✅ RUN_SCRIPTS > "ProjectFramework" target 15 | ✅ RUN_SCRIPTS > "ProjectTests" target 16 | ✅ RUN_SCRIPTS > "ProjectUITests" target 17 | 18 | 19 | ``` 20 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_1/MyFramework/MyFramework.h: -------------------------------------------------------------------------------- 1 | // 2 | // MyFramework.h 3 | // MyFramework 4 | // 5 | // Created by Kassem Wridan on 11/11/2023. 6 | // 7 | 8 | #import 9 | 10 | //! Project version number for MyFramework. 11 | FOUNDATION_EXPORT double MyFrameworkVersionNumber; 12 | 13 | //! Project version string for MyFramework. 14 | FOUNDATION_EXPORT const unsigned char MyFrameworkVersionString[]; 15 | 16 | // In this header, you should import all the public headers of your framework using statements like #import 17 | 18 | 19 | -------------------------------------------------------------------------------- /Fixtures/app_with_platform_filters_2/MyFramework/MyFramework.h: -------------------------------------------------------------------------------- 1 | // 2 | // MyFramework.h 3 | // MyFramework 4 | // 5 | // Created by Kassem Wridan on 11/11/2023. 6 | // 7 | 8 | #import 9 | 10 | //! Project version number for MyFramework. 11 | FOUNDATION_EXPORT double MyFrameworkVersionNumber; 12 | 13 | //! Project version string for MyFramework. 14 | FOUNDATION_EXPORT const unsigned char MyFrameworkVersionString[]; 15 | 16 | // In this header, you should import all the public headers of your framework using statements like #import 17 | 18 | 19 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_NewFramework_target_json_format.2.335bae81.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "NewFramework", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "Root project" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | 21 | ], 22 | "onlyInSecond" : [ 23 | "CUSTOM_NEW" 24 | ], 25 | "tag" : "configurations" 26 | } 27 | ] 28 | 29 | ``` 30 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_Project_target_verbose.2.2230b532.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "Project", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ LINKED_DEPENDENCIES > "Project" target 12 | 13 | ⚠️ Only in second (2): 14 | 15 | • MismatchingLibrary.framework 16 | • NewFramework.framework 17 | 18 | 19 | ⚠️ Value mismatch (1): 20 | 21 | • ARKit.framework attributes 22 | ◦ required 23 | ◦ optional 24 | 25 | 26 | 27 | 28 | ``` 29 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_Project_target_json_format_verbose.2.aa13e39d.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "Project", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "Root project" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | 21 | ], 22 | "onlyInSecond" : [ 23 | "CUSTOM_NEW" 24 | ], 25 | "tag" : "configurations" 26 | } 27 | ] 28 | 29 | ``` 30 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_console_format.2.de92b270.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ PLISTS > "MismatchingLibrary" target 12 | ❌ PLISTS > "Project" target 13 | ❌ PLISTS > "Project" target > Info.plist - Info.plist 14 | ✅ PLISTS > "ProjectFramework" target > Info.plist - Info.plist 15 | ✅ PLISTS > "ProjectTests" target > Info.plist - Info.plist 16 | ✅ PLISTS > "ProjectUITests" target > Info.plist - Info.plist 17 | 18 | 19 | ``` 20 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_Project_target_markdown_format_verbose.2.e75099e7.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "Project", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ SOURCES > "Project" target 13 | 14 | 15 | ### ⚠️ Only in first (1): 16 | 17 | - `Project/Group B/AnotherObjcClass.m` 18 | 19 | 20 | ### ⚠️ Value mismatch (1): 21 | 22 | - `Project/Group A/ObjcClass.m compiler flags` 23 | - `nil` 24 | - `-ObjC` 25 | 26 | 27 | 28 | 29 | ``` 30 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_configurations_tag_NewFramework_target_json_format_verbose.2.a13c8b4a.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "configurations", "-t", "NewFramework", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "Root project" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | 21 | ], 22 | "onlyInSecond" : [ 23 | "CUSTOM_NEW" 24 | ], 25 | "tag" : "configurations" 26 | } 27 | ] 28 | 29 | ``` 30 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_Project_target_console_format_verbose.2.121adc08.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "Project", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ LINKED_DEPENDENCIES > "Project" target 12 | 13 | ⚠️ Only in second (2): 14 | 15 | • MismatchingLibrary.framework 16 | • NewFramework.framework 17 | 18 | 19 | ⚠️ Value mismatch (1): 20 | 21 | • ARKit.framework attributes 22 | ◦ required 23 | ◦ optional 24 | 25 | 26 | 27 | 28 | ``` 29 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_markdown_format.2.b0497873.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ✅ LINKED_DEPENDENCIES > "MismatchingLibrary" target 13 | 14 | 15 | ## ❌ LINKED_DEPENDENCIES > "Project" target 16 | 17 | 18 | ## ✅ LINKED_DEPENDENCIES > "ProjectFramework" target 19 | 20 | 21 | ## ✅ LINKED_DEPENDENCIES > "ProjectTests" target 22 | 23 | 24 | ## ✅ LINKED_DEPENDENCIES > "ProjectUITests" target 25 | 26 | 27 | 28 | ``` 29 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_Project_target_json_format.2.b0b1c394.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "Project", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "\"Project\" target" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | "Project\/Group B\/AViewController.xib", 21 | "Project\/Resources\/time.png" 22 | ], 23 | "onlyInSecond" : [ 24 | 25 | ], 26 | "tag" : "resources" 27 | } 28 | ] 29 | 30 | ``` 31 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_verbose.2.7f724cdf.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ TARGETS > NATIVE targets 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • NewFramework 16 | 17 | 18 | ⚠️ Value mismatch (1): 19 | 20 | • MismatchingLibrary product type 21 | ◦ com.apple.product-type.library.static 22 | ◦ com.apple.product-type.framework 23 | 24 | 25 | ❌ TARGETS > AGGREGATE targets 26 | 27 | ⚠️ Only in second (1): 28 | 29 | • NewAggregate 30 | 31 | 32 | 33 | 34 | ``` 35 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_Project_target_json_format_verbose.2.ea491851.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-t", "Project", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "\"Project\" target" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | "Project\/Group B\/AViewController.xib", 21 | "Project\/Resources\/time.png" 22 | ], 23 | "onlyInSecond" : [ 24 | 25 | ], 26 | "tag" : "resources" 27 | } 28 | ] 29 | 30 | ``` 31 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_Project_target_markdown_format_verbose.2.923b5717.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "Project", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ LINKED_DEPENDENCIES > "Project" target 13 | 14 | 15 | ### ⚠️ Only in second (2): 16 | 17 | - `MismatchingLibrary.framework` 18 | - `NewFramework.framework` 19 | 20 | 21 | ### ⚠️ Value mismatch (1): 22 | 23 | - `ARKit.framework attributes` 24 | - `required` 25 | - `optional` 26 | 27 | 28 | 29 | 30 | ``` 31 | -------------------------------------------------------------------------------- /CommandTests/generated_test_commands.json: -------------------------------------------------------------------------------- 1 | { 2 | "tags": [ 3 | "", 4 | "file_references", 5 | "targets", 6 | "headers", 7 | "resources", 8 | "run_scripts", 9 | "configurations", 10 | "settings", 11 | "sources", 12 | "source_trees", 13 | "linked_dependencies", 14 | "plists" 15 | ], 16 | "targets": [ 17 | "", 18 | "Project", 19 | "NewFramework" 20 | ], 21 | "formats": [ 22 | "", 23 | "console", 24 | "json", 25 | "markdown" 26 | ], 27 | "verbose": [ 28 | "", 29 | "-v" 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_console_format_verbose.2.66404ebe.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ TARGETS > NATIVE targets 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • NewFramework 16 | 17 | 18 | ⚠️ Value mismatch (1): 19 | 20 | • MismatchingLibrary product type 21 | ◦ com.apple.product-type.library.static 22 | ◦ com.apple.product-type.framework 23 | 24 | 25 | ❌ TARGETS > AGGREGATE targets 26 | 27 | ⚠️ Only in second (1): 28 | 29 | • NewAggregate 30 | 31 | 32 | 33 | 34 | ``` 35 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_markdown_format.2.d3f5c727.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ✅ RUN_SCRIPTS > "MismatchingLibrary" target 13 | 14 | 15 | ## ❌ RUN_SCRIPTS > "Project" target > "Second script" build phase 16 | 17 | 18 | ## ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase 19 | 20 | 21 | ## ✅ RUN_SCRIPTS > "ProjectFramework" target 22 | 23 | 24 | ## ✅ RUN_SCRIPTS > "ProjectTests" target 25 | 26 | 27 | ## ✅ RUN_SCRIPTS > "ProjectUITests" target 28 | 29 | 30 | 31 | ``` 32 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_markdown_format.2.10cffa21.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ PLISTS > "MismatchingLibrary" target 13 | 14 | 15 | ## ❌ PLISTS > "Project" target 16 | 17 | 18 | ## ❌ PLISTS > "Project" target > Info.plist - Info.plist 19 | 20 | 21 | ## ✅ PLISTS > "ProjectFramework" target > Info.plist - Info.plist 22 | 23 | 24 | ## ✅ PLISTS > "ProjectTests" target > Info.plist - Info.plist 25 | 26 | 27 | ## ✅ PLISTS > "ProjectUITests" target > Info.plist - Info.plist 28 | 29 | 30 | 31 | ``` 32 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_markdown_format_verbose.2.21ec7415.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ TARGETS > NATIVE targets 13 | 14 | 15 | ### ⚠️ Only in second (1): 16 | 17 | - `NewFramework` 18 | 19 | 20 | ### ⚠️ Value mismatch (1): 21 | 22 | - `MismatchingLibrary product type` 23 | - `com.apple.product-type.library.static` 24 | - `com.apple.product-type.framework` 25 | 26 | 27 | 28 | ## ❌ TARGETS > AGGREGATE targets 29 | 30 | 31 | ### ⚠️ Only in second (1): 32 | 33 | - `NewAggregate` 34 | 35 | 36 | 37 | 38 | ``` 39 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_Project_target_json_format.2.574dd252.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "Project", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "\"Project\" target" 15 | ], 16 | "differentValues" : [ 17 | { 18 | "context" : "Project\/Group A\/ObjcClass.m compiler flags", 19 | "first" : "nil", 20 | "second" : "-ObjC" 21 | } 22 | ], 23 | "onlyInFirst" : [ 24 | "Project\/Group B\/AnotherObjcClass.m" 25 | ], 26 | "onlyInSecond" : [ 27 | 28 | ], 29 | "tag" : "sources" 30 | } 31 | ] 32 | 33 | ``` 34 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/MismatchingLibrary/MismatchingLibrary.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | class MismatchingLibrary { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/MismatchingLibrary/MismatchingLibrary.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | class MismatchingLibrary { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_Project_target_json_format_verbose.2.5d7b3468.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-t", "Project", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "\"Project\" target" 15 | ], 16 | "differentValues" : [ 17 | { 18 | "context" : "Project\/Group A\/ObjcClass.m compiler flags", 19 | "first" : "nil", 20 | "second" : "-ObjC" 21 | } 22 | ], 23 | "onlyInFirst" : [ 24 | "Project\/Group B\/AnotherObjcClass.m" 25 | ], 26 | "onlyInSecond" : [ 27 | 28 | ], 29 | "tag" : "sources" 30 | } 31 | ] 32 | 33 | ``` 34 | -------------------------------------------------------------------------------- /CommandTests/Generated/test_target_attributes.2.264aeded.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_with_ui_tests_1}", "-p2", "{ios_project_with_ui_tests_2}", "-g", "attributes", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ ATTRIBUTES > Root project 12 | 13 | ⚠️ Only in first (1): 14 | 15 | • ORGANIZATIONNAME = MyOrg 16 | 17 | 18 | ⚠️ Only in second (1): 19 | 20 | • LastSwiftUpdateCheck = 1240 21 | 22 | 23 | ⚠️ Value mismatch (1): 24 | 25 | • LastUpgradeCheck 26 | ◦ 1240 27 | ◦ 1250 28 | 29 | 30 | ✅ ATTRIBUTES > "MyApp" target 31 | ❌ ATTRIBUTES > "MyAppUITests" target 32 | 33 | ⚠️ Value mismatch (1): 34 | 35 | • CreatedOnToolsVersion 36 | ◦ 12.4 37 | ◦ 12.5 38 | 39 | 40 | 41 | 42 | ``` 43 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_verbose.2.66130397.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ LINKED_DEPENDENCIES > "MismatchingLibrary" target 12 | ❌ LINKED_DEPENDENCIES > "Project" target 13 | 14 | ⚠️ Only in second (2): 15 | 16 | • MismatchingLibrary.framework 17 | • NewFramework.framework 18 | 19 | 20 | ⚠️ Value mismatch (1): 21 | 22 | • ARKit.framework attributes 23 | ◦ required 24 | ◦ optional 25 | 26 | 27 | ✅ LINKED_DEPENDENCIES > "ProjectFramework" target 28 | ✅ LINKED_DEPENDENCIES > "ProjectTests" target 29 | ✅ LINKED_DEPENDENCIES > "ProjectUITests" target 30 | 31 | 32 | ``` 33 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/ProjectFramework/Header1.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #ifndef Header1_h 18 | #define Header1_h 19 | 20 | 21 | #endif /* Header1_h */ 22 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/ProjectFramework/Header2.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #ifndef Header2_h 18 | #define Header2_h 19 | 20 | 21 | #endif /* Header2_h */ 22 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/ProjectFramework/Header3.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #ifndef Header3_h 18 | #define Header3_h 19 | 20 | 21 | #endif /* Header3_h */ 22 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/ProjectFramework/Header1.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #ifndef Header1_h 18 | #define Header1_h 19 | 20 | 21 | #endif /* Header1_h */ 22 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/ProjectFramework/Header2.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #ifndef Header2_h 18 | #define Header2_h 19 | 20 | 21 | #endif /* Header2_h */ 22 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/ProjectFramework/Header3.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #ifndef Header3_h 18 | #define Header3_h 19 | 20 | 21 | #endif /* Header3_h */ 22 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/ProjectFramework/Header4.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #ifndef Header4_h 18 | #define Header4_h 19 | 20 | 21 | #endif /* Header4_h */ 22 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_Project_target_verbose.2.da061135.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "Project", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ RUN_SCRIPTS > "Project" target > "Second script" build phase 12 | 13 | ⚠️ Value mismatch (1): 14 | 15 | • shellScript 16 | ◦ echo "First Hello, world!" 17 | 18 | ◦ echo "second script" 19 | 20 | 21 | 22 | ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase 23 | 24 | ⚠️ Value mismatch (2): 25 | 26 | • shellScript 27 | ◦ echo "Hello, World!" 28 | 29 | ◦ echo "Hello, world?" 30 | 31 | 32 | • showEnvVarsInLog 33 | ◦ true 34 | ◦ false 35 | 36 | 37 | 38 | 39 | ``` 40 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_verbose.2.be954909.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ RESOURCES > "MismatchingLibrary" target 12 | ❌ RESOURCES > "Project" target 13 | 14 | ⚠️ Only in first (2): 15 | 16 | • Project/Group B/AViewController.xib 17 | • Project/Resources/time.png 18 | 19 | 20 | ✅ RESOURCES > "ProjectFramework" target 21 | ❌ RESOURCES > "ProjectTests" target 22 | 23 | ⚠️ Only in second (1): 24 | 25 | • ProjectTests/Responses/ListResponse.json 26 | 27 | 28 | ❌ RESOURCES > "ProjectUITests" target 29 | 30 | ⚠️ Only in first (1): 31 | 32 | • ProjectUITests/Screenshots/empty.png 33 | 34 | 35 | 36 | 37 | ``` 38 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_Project_target_json_format.0.cd839ca6.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "Project", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "NATIVE targets" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | 21 | ], 22 | "onlyInSecond" : [ 23 | 24 | ], 25 | "tag" : "targets" 26 | }, 27 | { 28 | "context" : [ 29 | "AGGREGATE targets" 30 | ], 31 | "differentValues" : [ 32 | 33 | ], 34 | "onlyInFirst" : [ 35 | 36 | ], 37 | "onlyInSecond" : [ 38 | 39 | ], 40 | "tag" : "targets" 41 | } 42 | ] 43 | 44 | ``` 45 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/Project/Group B/AnotherObjcClass.m: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #import "AnotherObjcClass.h" 18 | 19 | @implementation AnotherObjcClass 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_Project_target_json_format.2.fcf15800.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "Project", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "\"Project\" target" 15 | ], 16 | "differentValues" : [ 17 | { 18 | "context" : "ARKit.framework attributes", 19 | "first" : "required", 20 | "second" : "optional" 21 | } 22 | ], 23 | "onlyInFirst" : [ 24 | 25 | ], 26 | "onlyInSecond" : [ 27 | "MismatchingLibrary.framework", 28 | "NewFramework.framework" 29 | ], 30 | "tag" : "linked_dependencies" 31 | } 32 | ] 33 | 34 | ``` 35 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_console_format_verbose.2.d03a8f51.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ LINKED_DEPENDENCIES > "MismatchingLibrary" target 12 | ❌ LINKED_DEPENDENCIES > "Project" target 13 | 14 | ⚠️ Only in second (2): 15 | 16 | • MismatchingLibrary.framework 17 | • NewFramework.framework 18 | 19 | 20 | ⚠️ Value mismatch (1): 21 | 22 | • ARKit.framework attributes 23 | ◦ required 24 | ◦ optional 25 | 26 | 27 | ✅ LINKED_DEPENDENCIES > "ProjectFramework" target 28 | ✅ LINKED_DEPENDENCIES > "ProjectTests" target 29 | ✅ LINKED_DEPENDENCIES > "ProjectUITests" target 30 | 31 | 32 | ``` 33 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_Project_target_json_format_verbose.0.f3b913a4.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "Project", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 0 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "NATIVE targets" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | 21 | ], 22 | "onlyInSecond" : [ 23 | 24 | ], 25 | "tag" : "targets" 26 | }, 27 | { 28 | "context" : [ 29 | "AGGREGATE targets" 30 | ], 31 | "differentValues" : [ 32 | 33 | ], 34 | "onlyInFirst" : [ 35 | 36 | ], 37 | "onlyInSecond" : [ 38 | 39 | ], 40 | "tag" : "targets" 41 | } 42 | ] 43 | 44 | ``` 45 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_Project_target_json_format_verbose.2.49648a9b.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-t", "Project", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "\"Project\" target" 15 | ], 16 | "differentValues" : [ 17 | { 18 | "context" : "ARKit.framework attributes", 19 | "first" : "required", 20 | "second" : "optional" 21 | } 22 | ], 23 | "onlyInFirst" : [ 24 | 25 | ], 26 | "onlyInSecond" : [ 27 | "MismatchingLibrary.framework", 28 | "NewFramework.framework" 29 | ], 30 | "tag" : "linked_dependencies" 31 | } 32 | ] 33 | 34 | ``` 35 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_Project_target_console_format_verbose.2.57c6423c.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "Project", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ RUN_SCRIPTS > "Project" target > "Second script" build phase 12 | 13 | ⚠️ Value mismatch (1): 14 | 15 | • shellScript 16 | ◦ echo "First Hello, world!" 17 | 18 | ◦ echo "second script" 19 | 20 | 21 | 22 | ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase 23 | 24 | ⚠️ Value mismatch (2): 25 | 26 | • shellScript 27 | ◦ echo "Hello, World!" 28 | 29 | ◦ echo "Hello, world?" 30 | 31 | 32 | • showEnvVarsInLog 33 | ◦ true 34 | ◦ false 35 | 36 | 37 | 38 | 39 | ``` 40 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/ProjectTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/ProjectTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_console_format_verbose.2.1cd00005.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ RESOURCES > "MismatchingLibrary" target 12 | ❌ RESOURCES > "Project" target 13 | 14 | ⚠️ Only in first (2): 15 | 16 | • Project/Group B/AViewController.xib 17 | • Project/Resources/time.png 18 | 19 | 20 | ✅ RESOURCES > "ProjectFramework" target 21 | ❌ RESOURCES > "ProjectTests" target 22 | 23 | ⚠️ Only in second (1): 24 | 25 | • ProjectTests/Responses/ListResponse.json 26 | 27 | 28 | ❌ RESOURCES > "ProjectUITests" target 29 | 30 | ⚠️ Only in first (1): 31 | 32 | • ProjectUITests/Screenshots/empty.png 33 | 34 | 35 | 36 | 37 | ``` 38 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_NewFramework_target_json_format.2.d055692b.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "NewFramework", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "NATIVE targets" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | 21 | ], 22 | "onlyInSecond" : [ 23 | "NewFramework" 24 | ], 25 | "tag" : "targets" 26 | }, 27 | { 28 | "context" : [ 29 | "AGGREGATE targets" 30 | ], 31 | "differentValues" : [ 32 | 33 | ], 34 | "onlyInFirst" : [ 35 | 36 | ], 37 | "onlyInSecond" : [ 38 | 39 | ], 40 | "tag" : "targets" 41 | } 42 | ] 43 | 44 | ``` 45 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/ProjectUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/ProjectUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/XCDiffCore/Library/GenericCompareResult.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2019 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | import Foundation 18 | 19 | public protocol GenericCompareResult: Encodable { 20 | func same() -> Bool 21 | } 22 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_NewFramework_target_json_format_verbose.2.cdc4be65.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-t", "NewFramework", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "NATIVE targets" 15 | ], 16 | "differentValues" : [ 17 | 18 | ], 19 | "onlyInFirst" : [ 20 | 21 | ], 22 | "onlyInSecond" : [ 23 | "NewFramework" 24 | ], 25 | "tag" : "targets" 26 | }, 27 | { 28 | "context" : [ 29 | "AGGREGATE targets" 30 | ], 31 | "differentValues" : [ 32 | 33 | ], 34 | "onlyInFirst" : [ 35 | 36 | ], 37 | "onlyInSecond" : [ 38 | 39 | ], 40 | "tag" : "targets" 41 | } 42 | ] 43 | 44 | ``` 45 | -------------------------------------------------------------------------------- /Sources/XCDiffCore/ResultRenderer/ResultRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2019 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | import Foundation 18 | 19 | protocol ResultRenderer { 20 | func render(_ result: ProjectCompareResult) throws -> String 21 | } 22 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_settings_tag_Project_target.2.58e47617.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "settings", "-t", "Project"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ SETTINGS > Root project > "Debug" configuration > Base configuration 12 | ❌ SETTINGS > Root project > "Debug" configuration > Values 13 | ✅ SETTINGS > Root project > "Release" configuration > Base configuration 14 | ❌ SETTINGS > Root project > "Release" configuration > Values 15 | ❌ SETTINGS > "Project" target > "Debug" configuration > Base configuration 16 | ❌ SETTINGS > "Project" target > "Debug" configuration > Values 17 | ✅ SETTINGS > "Project" target > "Release" configuration > Base configuration 18 | ❌ SETTINGS > "Project" target > "Release" configuration > Values 19 | 20 | 21 | ``` 22 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/NewFramework/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/ProjectFramework/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/ProjectFramework/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_1/MyAppUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_2/MyAppUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_verbose.2.6cdf87d7.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ HEADERS > "MismatchingLibrary" target 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • MismatchingLibrary/MismatchingLibrary.h 16 | 17 | 18 | ✅ HEADERS > "Project" target 19 | ❌ HEADERS > "ProjectFramework" target 20 | 21 | ⚠️ Only in second (1): 22 | 23 | • ProjectFramework/Header4.h 24 | 25 | 26 | ⚠️ Value mismatch (2): 27 | 28 | • ProjectFramework/Header1.h attributes 29 | ◦ Public 30 | ◦ nil (Project) 31 | 32 | • ProjectFramework/Header2.h attributes 33 | ◦ Private 34 | ◦ nil (Project) 35 | 36 | 37 | ✅ HEADERS > "ProjectTests" target 38 | ✅ HEADERS > "ProjectUITests" target 39 | 40 | 41 | ``` 42 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/Project/Group B/AnotherObjcClass.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #import 18 | 19 | NS_ASSUME_NONNULL_BEGIN 20 | 21 | @interface AnotherObjcClass : NSObject 22 | 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /Sources/XCDiffCore/Library/ValueComparator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2019 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | import Foundation 18 | 19 | protocol ValueComparator { 20 | associatedtype T: Comparable 21 | 22 | func compare(_ lha: T, _ rha: T) -> ComparisonResult 23 | } 24 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_Project_target_markdown_format_verbose.2.7f01b3b3.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-t", "Project", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ RUN_SCRIPTS > "Project" target > "Second script" build phase 13 | 14 | 15 | ### ⚠️ Value mismatch (1): 16 | 17 | - `shellScript` 18 | - `echo "First Hello, world!" 19 | ` 20 | - `echo "second script" 21 | ` 22 | 23 | 24 | 25 | ## ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase 26 | 27 | 28 | ### ⚠️ Value mismatch (2): 29 | 30 | - `shellScript` 31 | - `echo "Hello, World!" 32 | ` 33 | - `echo "Hello, world?" 34 | ` 35 | 36 | - `showEnvVarsInLog` 37 | - `true` 38 | - `false` 39 | 40 | 41 | 42 | 43 | ``` 44 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_settings_tag_Project_target_console_format.2.cc632906.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "settings", "-t", "Project", "-f", "console"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ SETTINGS > Root project > "Debug" configuration > Base configuration 12 | ❌ SETTINGS > Root project > "Debug" configuration > Values 13 | ✅ SETTINGS > Root project > "Release" configuration > Base configuration 14 | ❌ SETTINGS > Root project > "Release" configuration > Values 15 | ❌ SETTINGS > "Project" target > "Debug" configuration > Base configuration 16 | ❌ SETTINGS > "Project" target > "Debug" configuration > Values 17 | ✅ SETTINGS > "Project" target > "Release" configuration > Base configuration 18 | ❌ SETTINGS > "Project" target > "Release" configuration > Values 19 | 20 | 21 | ``` 22 | -------------------------------------------------------------------------------- /Sources/XCDiffCore/ResultRenderer/ProjectResultRenderer/ProjectCompareResultRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2019 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | import Foundation 18 | 19 | protocol ProjectCompareResultRenderer { 20 | func render(_ result: ProjectCompareResult) throws 21 | } 22 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_1/MyApp/MyAppApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2021 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | import SwiftUI 18 | 19 | @main 20 | struct MyAppApp: App { 21 | var body: some Scene { 22 | WindowGroup { 23 | ContentView() 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_2/MyApp/MyAppApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2021 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | import SwiftUI 18 | 19 | @main 20 | struct MyAppApp: App { 21 | var body: some Scene { 22 | WindowGroup { 23 | ContentView() 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_console_format_verbose.2.db45e192.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ HEADERS > "MismatchingLibrary" target 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • MismatchingLibrary/MismatchingLibrary.h 16 | 17 | 18 | ✅ HEADERS > "Project" target 19 | ❌ HEADERS > "ProjectFramework" target 20 | 21 | ⚠️ Only in second (1): 22 | 23 | • ProjectFramework/Header4.h 24 | 25 | 26 | ⚠️ Value mismatch (2): 27 | 28 | • ProjectFramework/Header1.h attributes 29 | ◦ Public 30 | ◦ nil (Project) 31 | 32 | • ProjectFramework/Header2.h attributes 33 | ◦ Private 34 | ◦ nil (Project) 35 | 36 | 37 | ✅ HEADERS > "ProjectTests" target 38 | ✅ HEADERS > "ProjectUITests" target 39 | 40 | 41 | ``` 42 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_linked_dependencies_tag_markdown_format_verbose.2.c82caaf9.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "linked_dependencies", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ✅ LINKED_DEPENDENCIES > "MismatchingLibrary" target 13 | 14 | 15 | ## ❌ LINKED_DEPENDENCIES > "Project" target 16 | 17 | 18 | ### ⚠️ Only in second (2): 19 | 20 | - `MismatchingLibrary.framework` 21 | - `NewFramework.framework` 22 | 23 | 24 | ### ⚠️ Value mismatch (1): 25 | 26 | - `ARKit.framework attributes` 27 | - `required` 28 | - `optional` 29 | 30 | 31 | 32 | ## ✅ LINKED_DEPENDENCIES > "ProjectFramework" target 33 | 34 | 35 | ## ✅ LINKED_DEPENDENCIES > "ProjectTests" target 36 | 37 | 38 | ## ✅ LINKED_DEPENDENCIES > "ProjectUITests" target 39 | 40 | 41 | 42 | ``` 43 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/MismatchingLibrary/MismatchingLibrary-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_resources_tag_markdown_format_verbose.2.9073cfbf.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "resources", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ✅ RESOURCES > "MismatchingLibrary" target 13 | 14 | 15 | ## ❌ RESOURCES > "Project" target 16 | 17 | 18 | ### ⚠️ Only in first (2): 19 | 20 | - `Project/Group B/AViewController.xib` 21 | - `Project/Resources/time.png` 22 | 23 | 24 | 25 | ## ✅ RESOURCES > "ProjectFramework" target 26 | 27 | 28 | ## ❌ RESOURCES > "ProjectTests" target 29 | 30 | 31 | ### ⚠️ Only in second (1): 32 | 33 | - `ProjectTests/Responses/ListResponse.json` 34 | 35 | 36 | 37 | ## ❌ RESOURCES > "ProjectUITests" target 38 | 39 | 40 | ### ⚠️ Only in first (1): 41 | 42 | - `ProjectUITests/Screenshots/empty.png` 43 | 44 | 45 | 46 | 47 | ``` 48 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_1/Project.swift: -------------------------------------------------------------------------------- 1 | import ProjectDescription 2 | 3 | let project = Project( 4 | name: "Project", 5 | targets: [ 6 | Target( 7 | name: "MyApp", 8 | platform: .iOS, 9 | product: .app, 10 | bundleId: "net.testing.trials.MyApp", 11 | infoPlist: .file(path: "MyApp/Info.plist"), 12 | sources: [ 13 | "MyApp/**" 14 | ] 15 | ), 16 | Target( 17 | name: "MyAppUITests", 18 | platform: .iOS, 19 | product: .uiTests, 20 | bundleId: "net.testing.trials.MyAppUITests", 21 | infoPlist: .file(path: "MyAppUITests/Info.plist"), 22 | sources: [ 23 | "MyAppUITests/**" 24 | ], 25 | dependencies: [ 26 | .target(name: "MyApp") 27 | ] 28 | ), 29 | ] 30 | ) 31 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_2/Project.swift: -------------------------------------------------------------------------------- 1 | import ProjectDescription 2 | 3 | let project = Project( 4 | name: "Project", 5 | targets: [ 6 | Target( 7 | name: "MyApp", 8 | platform: .iOS, 9 | product: .app, 10 | bundleId: "net.testing.trials.MyApp", 11 | infoPlist: .file(path: "MyApp/Info.plist"), 12 | sources: [ 13 | "MyApp/**" 14 | ] 15 | ), 16 | Target( 17 | name: "MyAppUITests", 18 | platform: .iOS, 19 | product: .uiTests, 20 | bundleId: "net.testing.trials.MyAppUITests", 21 | infoPlist: .file(path: "MyAppUITests/Info.plist"), 22 | sources: [ 23 | "MyAppUITests/**" 24 | ], 25 | dependencies: [ 26 | .target(name: "MyApp") 27 | ] 28 | ), 29 | ] 30 | ) 31 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_verbose.2.d42c21b9.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ RUN_SCRIPTS > "MismatchingLibrary" target 12 | ❌ RUN_SCRIPTS > "Project" target > "Second script" build phase 13 | 14 | ⚠️ Value mismatch (1): 15 | 16 | • shellScript 17 | ◦ echo "First Hello, world!" 18 | 19 | ◦ echo "second script" 20 | 21 | 22 | 23 | ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase 24 | 25 | ⚠️ Value mismatch (2): 26 | 27 | • shellScript 28 | ◦ echo "Hello, World!" 29 | 30 | ◦ echo "Hello, world?" 31 | 32 | 33 | • showEnvVarsInLog 34 | ◦ true 35 | ◦ false 36 | 37 | 38 | ✅ RUN_SCRIPTS > "ProjectFramework" target 39 | ✅ RUN_SCRIPTS > "ProjectTests" target 40 | ✅ RUN_SCRIPTS > "ProjectUITests" target 41 | 42 | 43 | ``` 44 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_verbose.2.ea3e88b3.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ SOURCES > "MismatchingLibrary" target 12 | ❌ SOURCES > "Project" target 13 | 14 | ⚠️ Only in first (1): 15 | 16 | • Project/Group B/AnotherObjcClass.m 17 | 18 | 19 | ⚠️ Value mismatch (1): 20 | 21 | • Project/Group A/ObjcClass.m compiler flags 22 | ◦ nil 23 | ◦ -ObjC 24 | 25 | 26 | ✅ SOURCES > "ProjectFramework" target 27 | ❌ SOURCES > "ProjectTests" target 28 | 29 | ⚠️ Only in first (1): 30 | 31 | • ProjectTests/BarTests.swift 32 | 33 | 34 | ❌ SOURCES > "ProjectUITests" target 35 | 36 | ⚠️ Only in first (1): 37 | 38 | • ProjectUITests/LoginTests.swift 39 | 40 | 41 | ⚠️ Only in second (1): 42 | 43 | • ProjectUITests/MetricsTests.swift 44 | 45 | 46 | 47 | 48 | ``` 49 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/Project/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | import UIKit 18 | 19 | class ViewController: UIViewController { 20 | 21 | override func viewDidLoad() { 22 | super.viewDidLoad() 23 | // Do any additional setup after loading the view. 24 | } 25 | 26 | 27 | } 28 | 29 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/Project/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | import UIKit 18 | 19 | class ViewController: UIViewController { 20 | 21 | override func viewDidLoad() { 22 | super.viewDidLoad() 23 | // Do any additional setup after loading the view. 24 | } 25 | 26 | 27 | } 28 | 29 | -------------------------------------------------------------------------------- /Documentation/Release.md: -------------------------------------------------------------------------------- 1 | # Release Process 2 | 3 | 1. Bump the version number in [Makefile](../Makefile) 4 | 2. Run `make update_version` to update version references in various source and markdown files 5 | 3. Make a pull request with the changes 6 | 4. Once merged, [draft a new release](https://github.com/bloomberg/xcdiff/releases/new) 7 | 5. Tag the release with the appropriate version 8 | 6. Use the version number as the release title 9 | 7. Populate the description with the recent changes since the last release. For convenience the GitHub built-in **Generate release notes** feature can be used, alternatively the following command can be used to generate a changelog summary: 10 | 11 | ```bash 12 | git log main...$(git describe --tags `git rev-list --tags --max-count=1`) --pretty=format:'- %s' 13 | ``` 14 | 8. Publish the release 15 | 9. Update homebrew formula via locally running `make update_homebrew` _(This publishes a PR to the homebrew core repo)_ 16 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_console_format_verbose.2.de59bc4a.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ RUN_SCRIPTS > "MismatchingLibrary" target 12 | ❌ RUN_SCRIPTS > "Project" target > "Second script" build phase 13 | 14 | ⚠️ Value mismatch (1): 15 | 16 | • shellScript 17 | ◦ echo "First Hello, world!" 18 | 19 | ◦ echo "second script" 20 | 21 | 22 | 23 | ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase 24 | 25 | ⚠️ Value mismatch (2): 26 | 27 | • shellScript 28 | ◦ echo "Hello, World!" 29 | 30 | ◦ echo "Hello, world?" 31 | 32 | 33 | • showEnvVarsInLog 34 | ◦ true 35 | ◦ false 36 | 37 | 38 | ✅ RUN_SCRIPTS > "ProjectFramework" target 39 | ✅ RUN_SCRIPTS > "ProjectTests" target 40 | ✅ RUN_SCRIPTS > "ProjectUITests" target 41 | 42 | 43 | ``` 44 | -------------------------------------------------------------------------------- /Sources/XCDiffCore/Library/Descriptors/BuildFileDescriptor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2023 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | import Foundation 17 | 18 | struct BuildFileDescriptor: Hashable, DiffComparable { 19 | var diffKey: String { 20 | name 21 | } 22 | 23 | let name: String 24 | let platformFilters: [String]? 25 | let attributes: [String] 26 | } 27 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_console_format_verbose.2.fb480f7d.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ✅ SOURCES > "MismatchingLibrary" target 12 | ❌ SOURCES > "Project" target 13 | 14 | ⚠️ Only in first (1): 15 | 16 | • Project/Group B/AnotherObjcClass.m 17 | 18 | 19 | ⚠️ Value mismatch (1): 20 | 21 | • Project/Group A/ObjcClass.m compiler flags 22 | ◦ nil 23 | ◦ -ObjC 24 | 25 | 26 | ✅ SOURCES > "ProjectFramework" target 27 | ❌ SOURCES > "ProjectTests" target 28 | 29 | ⚠️ Only in first (1): 30 | 31 | • ProjectTests/BarTests.swift 32 | 33 | 34 | ❌ SOURCES > "ProjectUITests" target 35 | 36 | ⚠️ Only in first (1): 37 | 38 | • ProjectUITests/LoginTests.swift 39 | 40 | 41 | ⚠️ Only in second (1): 42 | 43 | • ProjectUITests/MetricsTests.swift 44 | 45 | 46 | 47 | 48 | ``` 49 | -------------------------------------------------------------------------------- /Sources/XCDiff/main.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2019 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | import Foundation 18 | import XCDiffCommand 19 | 20 | func main() -> Int32 { 21 | let arguments = Array(CommandLine.arguments.dropFirst()) 22 | let commandRunner = CommandRunner() 23 | let code = commandRunner.run(with: arguments) 24 | return code 25 | } 26 | 27 | exit(main()) 28 | -------------------------------------------------------------------------------- /Sources/XCDiffCore/Library/Comparator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2019 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | import Foundation 18 | 19 | public protocol Comparator { 20 | var tag: String { get } 21 | 22 | func compare(_ first: ProjectDescriptor, 23 | _ second: ProjectDescriptor, 24 | parameters: ComparatorParameters) throws -> [CompareResult] 25 | } 26 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_settings_tag_Project_target_markdown_format.2.7789ca22.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "settings", "-t", "Project", "-f", "markdown"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ SETTINGS > Root project > "Debug" configuration > Base configuration 13 | 14 | 15 | ## ❌ SETTINGS > Root project > "Debug" configuration > Values 16 | 17 | 18 | ## ✅ SETTINGS > Root project > "Release" configuration > Base configuration 19 | 20 | 21 | ## ❌ SETTINGS > Root project > "Release" configuration > Values 22 | 23 | 24 | ## ❌ SETTINGS > "Project" target > "Debug" configuration > Base configuration 25 | 26 | 27 | ## ❌ SETTINGS > "Project" target > "Debug" configuration > Values 28 | 29 | 30 | ## ✅ SETTINGS > "Project" target > "Release" configuration > Base configuration 31 | 32 | 33 | ## ❌ SETTINGS > "Project" target > "Release" configuration > Values 34 | 35 | 36 | 37 | ``` 38 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_headers_tag_markdown_format_verbose.2.1aab2451.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "headers", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ HEADERS > "MismatchingLibrary" target 13 | 14 | 15 | ### ⚠️ Only in second (1): 16 | 17 | - `MismatchingLibrary/MismatchingLibrary.h` 18 | 19 | 20 | 21 | ## ✅ HEADERS > "Project" target 22 | 23 | 24 | ## ❌ HEADERS > "ProjectFramework" target 25 | 26 | 27 | ### ⚠️ Only in second (1): 28 | 29 | - `ProjectFramework/Header4.h` 30 | 31 | 32 | ### ⚠️ Value mismatch (2): 33 | 34 | - `ProjectFramework/Header1.h attributes` 35 | - `Public` 36 | - `nil (Project)` 37 | 38 | - `ProjectFramework/Header2.h attributes` 39 | - `Private` 40 | - `nil (Project)` 41 | 42 | 43 | 44 | ## ✅ HEADERS > "ProjectTests" target 45 | 46 | 47 | ## ✅ HEADERS > "ProjectUITests" target 48 | 49 | 50 | 51 | ``` 52 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_json_format.2.cf9b3ff2.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-f", "json"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "NATIVE targets" 15 | ], 16 | "differentValues" : [ 17 | { 18 | "context" : "MismatchingLibrary product type", 19 | "first" : "com.apple.product-type.library.static", 20 | "second" : "com.apple.product-type.framework" 21 | } 22 | ], 23 | "onlyInFirst" : [ 24 | 25 | ], 26 | "onlyInSecond" : [ 27 | "NewFramework" 28 | ], 29 | "tag" : "targets" 30 | }, 31 | { 32 | "context" : [ 33 | "AGGREGATE targets" 34 | ], 35 | "differentValues" : [ 36 | 37 | ], 38 | "onlyInFirst" : [ 39 | 40 | ], 41 | "onlyInSecond" : [ 42 | "NewAggregate" 43 | ], 44 | "tag" : "targets" 45 | } 46 | ] 47 | 48 | ``` 49 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_targets_tag_json_format_verbose.2.839e77c9.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "targets", "-f", "json", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | [ 12 | { 13 | "context" : [ 14 | "NATIVE targets" 15 | ], 16 | "differentValues" : [ 17 | { 18 | "context" : "MismatchingLibrary product type", 19 | "first" : "com.apple.product-type.library.static", 20 | "second" : "com.apple.product-type.framework" 21 | } 22 | ], 23 | "onlyInFirst" : [ 24 | 25 | ], 26 | "onlyInSecond" : [ 27 | "NewFramework" 28 | ], 29 | "tag" : "targets" 30 | }, 31 | { 32 | "context" : [ 33 | "AGGREGATE targets" 34 | ], 35 | "differentValues" : [ 36 | 37 | ], 38 | "onlyInFirst" : [ 39 | 40 | ], 41 | "onlyInSecond" : [ 42 | "NewAggregate" 43 | ], 44 | "tag" : "targets" 45 | } 46 | ] 47 | 48 | ``` 49 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_1/MyApp/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2021 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | import SwiftUI 17 | 18 | struct ContentView: View { 19 | var body: some View { 20 | Text("Hello, world!") 21 | .padding() 22 | } 23 | } 24 | 25 | struct ContentView_Previews: PreviewProvider { 26 | static var previews: some View { 27 | ContentView() 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Fixtures/ios_project_with_ui_tests_2/MyApp/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2021 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | import SwiftUI 17 | 18 | struct ContentView: View { 19 | var body: some View { 20 | Text("Hello, world!") 21 | .padding() 22 | } 23 | } 24 | 25 | struct ContentView_Previews: PreviewProvider { 26 | static var previews: some View { 27 | ContentView() 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_Project_target_verbose.2.1bf81b97.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "Project", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ PLISTS > "Project" target 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • Project.entitlements 16 | 17 | 18 | ❌ PLISTS > "Project" target > Info.plist - Info.plist 19 | 20 | ⚠️ Only in first (1): 21 | 22 | • LSApplicationCategoryType 23 | 24 | 25 | ⚠️ Only in second (1): 26 | 27 | • UISceneConfigurationName 28 | 29 | 30 | ⚠️ Value mismatch (3): 31 | 32 | • UIApplicationSceneManifest.UISceneConfigurations.UIWindowSceneSessionRoleApplication[0].UISceneDelegateClassName 33 | ◦ $(PRODUCT_BUNDLE_IDENTIFIER).AppSceneDelegate 34 | ◦ $(PRODUCT_MODULE_NAME).AppSceneDelegate 35 | 36 | • UIBackgroundModes 37 | ◦ fetch, voip 38 | ◦ remote-notification 39 | 40 | • UIRequiredDeviceCapabilities 41 | ◦ bluetooth-le 42 | ◦ nil 43 | 44 | 45 | 46 | 47 | ``` 48 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_sources_tag_markdown_format_verbose.2.7881e7f6.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "sources", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ✅ SOURCES > "MismatchingLibrary" target 13 | 14 | 15 | ## ❌ SOURCES > "Project" target 16 | 17 | 18 | ### ⚠️ Only in first (1): 19 | 20 | - `Project/Group B/AnotherObjcClass.m` 21 | 22 | 23 | ### ⚠️ Value mismatch (1): 24 | 25 | - `Project/Group A/ObjcClass.m compiler flags` 26 | - `nil` 27 | - `-ObjC` 28 | 29 | 30 | 31 | ## ✅ SOURCES > "ProjectFramework" target 32 | 33 | 34 | ## ❌ SOURCES > "ProjectTests" target 35 | 36 | 37 | ### ⚠️ Only in first (1): 38 | 39 | - `ProjectTests/BarTests.swift` 40 | 41 | 42 | 43 | ## ❌ SOURCES > "ProjectUITests" target 44 | 45 | 46 | ### ⚠️ Only in first (1): 47 | 48 | - `ProjectUITests/LoginTests.swift` 49 | 50 | 51 | ### ⚠️ Only in second (1): 52 | 53 | - `ProjectUITests/MetricsTests.swift` 54 | 55 | 56 | 57 | 58 | ``` 59 | -------------------------------------------------------------------------------- /Tests/XCDiffCommandTests/Mocks/FileSystemMock.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2019 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | @testable import XCDiffCommand 18 | 19 | final class FileSystemMock: FileSystem { 20 | var listCurrentDirectoryReturn = [String]() 21 | private(set) var listCurrentDirectoryCallsCount: Int = 0 22 | 23 | func listCurrentDirectory() throws -> [String] { 24 | listCurrentDirectoryCallsCount += 1 25 | return listCurrentDirectoryReturn 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_run_scripts_tag_markdown_format_verbose.2.d9b5d912.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "run_scripts", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ✅ RUN_SCRIPTS > "MismatchingLibrary" target 13 | 14 | 15 | ## ❌ RUN_SCRIPTS > "Project" target > "Second script" build phase 16 | 17 | 18 | ### ⚠️ Value mismatch (1): 19 | 20 | - `shellScript` 21 | - `echo "First Hello, world!" 22 | ` 23 | - `echo "second script" 24 | ` 25 | 26 | 27 | 28 | ## ❌ RUN_SCRIPTS > "Project" target > "ShellScript" build phase 29 | 30 | 31 | ### ⚠️ Value mismatch (2): 32 | 33 | - `shellScript` 34 | - `echo "Hello, World!" 35 | ` 36 | - `echo "Hello, world?" 37 | ` 38 | 39 | - `showEnvVarsInLog` 40 | - `true` 41 | - `false` 42 | 43 | 44 | 45 | ## ✅ RUN_SCRIPTS > "ProjectFramework" target 46 | 47 | 48 | ## ✅ RUN_SCRIPTS > "ProjectTests" target 49 | 50 | 51 | ## ✅ RUN_SCRIPTS > "ProjectUITests" target 52 | 53 | 54 | 55 | ``` 56 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_Project_target_console_format_verbose.2.d65d4699.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "Project", "-f", "console", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ PLISTS > "Project" target 12 | 13 | ⚠️ Only in second (1): 14 | 15 | • Project.entitlements 16 | 17 | 18 | ❌ PLISTS > "Project" target > Info.plist - Info.plist 19 | 20 | ⚠️ Only in first (1): 21 | 22 | • LSApplicationCategoryType 23 | 24 | 25 | ⚠️ Only in second (1): 26 | 27 | • UISceneConfigurationName 28 | 29 | 30 | ⚠️ Value mismatch (3): 31 | 32 | • UIApplicationSceneManifest.UISceneConfigurations.UIWindowSceneSessionRoleApplication[0].UISceneDelegateClassName 33 | ◦ $(PRODUCT_BUNDLE_IDENTIFIER).AppSceneDelegate 34 | ◦ $(PRODUCT_MODULE_NAME).AppSceneDelegate 35 | 36 | • UIBackgroundModes 37 | ◦ fetch, voip 38 | ◦ remote-notification 39 | 40 | • UIRequiredDeviceCapabilities 41 | ◦ bluetooth-le 42 | ◦ nil 43 | 44 | 45 | 46 | 47 | ``` 48 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/NewFramework/NewFramework.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #import 18 | 19 | //! Project version number for NewFramework. 20 | FOUNDATION_EXPORT double NewFrameworkVersionNumber; 21 | 22 | //! Project version string for NewFramework. 23 | FOUNDATION_EXPORT const unsigned char NewFrameworkVersionString[]; 24 | 25 | // In this header, you should import all the public headers of your framework using statements like #import 26 | 27 | 28 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/ProjectFramework/ProjectFramework.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #import 18 | 19 | //! Project version number for ProjectFramework. 20 | FOUNDATION_EXPORT double ProjectFrameworkVersionNumber; 21 | 22 | //! Project version string for ProjectFramework. 23 | FOUNDATION_EXPORT const unsigned char ProjectFrameworkVersionString[]; 24 | 25 | // In this header, you should import all the public headers of your framework using statements like #import 26 | 27 | 28 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/ProjectFramework/ProjectFramework.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #import 18 | 19 | //! Project version number for ProjectFramework. 20 | FOUNDATION_EXPORT double ProjectFrameworkVersionNumber; 21 | 22 | //! Project version string for ProjectFramework. 23 | FOUNDATION_EXPORT const unsigned char ProjectFrameworkVersionString[]; 24 | 25 | // In this header, you should import all the public headers of your framework using statements like #import 26 | 27 | 28 | -------------------------------------------------------------------------------- /Tests/XCDiffCoreTests/Mocks/XcodeProjLoaderMock.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2019 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | import PathKit 18 | @testable import XCDiffCore 19 | import XcodeProj 20 | 21 | final class XcodeProjLoaderMock: XcodeProjLoader { 22 | func load(at path: Path) throws -> XcodeProj { 23 | let pbxproj = PBXProjBuilder(name: "Project1", projectDirPath: path).build() 24 | let xcodeProj = XcodeProj(workspace: XCWorkspace(data: XCWorkspaceData(children: [])), pbxproj: pbxproj) 25 | return xcodeProj 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_file_references_tag_verbose.2.f3ef9001.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "file_references", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ FILE_REFERENCES 12 | 13 | ⚠️ Only in first (8): 14 | 15 | • Project/Group B/AViewController.xib 16 | • Project/Group B/AnotherObjcClass.h 17 | • Project/Group B/AnotherObjcClass.m 18 | • Project/Resources/time.png 19 | • ProjectTests/BarTests.swift 20 | • ProjectUITests/LoginTests.swift 21 | • ProjectUITests/Screenshots/empty.png 22 | • libMismatchingLibrary.a 23 | 24 | 25 | ⚠️ Only in second (12): 26 | 27 | • MismatchingLibrary.framework 28 | • MismatchingLibrary/MismatchingLibrary-Info.plist 29 | • NewFramework.framework 30 | • NewFramework/Info.plist 31 | • NewFramework/NewFramework.h 32 | • Project/Project.entitlements 33 | • Project/Project.xcconfig 34 | • Project/Target.xcconfig 35 | • ProjectFramework/Header4.h 36 | • ProjectTests/Responses/ListResponse.json 37 | • ProjectUITests/MetricsTests.swift 38 | • README.md 39 | 40 | 41 | 42 | 43 | ``` 44 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/ProjectUITests/LoginTests.swift: -------------------------------------------------------------------------------- 1 | 2 | import XCTest 3 | 4 | class LoginTests: XCTestCase { 5 | 6 | override func setUp() { 7 | // Put setup code here. This method is called before the invocation of each test method in the class. 8 | 9 | // In UI tests it is usually best to stop immediately when a failure occurs. 10 | continueAfterFailure = false 11 | 12 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 13 | XCUIApplication().launch() 14 | 15 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 16 | } 17 | 18 | override func tearDown() { 19 | // Put teardown code here. This method is called after the invocation of each test method in the class. 20 | } 21 | 22 | func testExample() { 23 | // Use recording to get started writing UI tests. 24 | // Use XCTAssert and related functions to verify your tests produce the correct results. 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/ProjectUITests/MetricsTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | class MetricsTests: XCTestCase { 4 | 5 | override func setUp() { 6 | // Put setup code here. This method is called before the invocation of each test method in the class. 7 | 8 | // In UI tests it is usually best to stop immediately when a failure occurs. 9 | continueAfterFailure = false 10 | 11 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 12 | XCUIApplication().launch() 13 | 14 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 15 | } 16 | 17 | override func tearDown() { 18 | // Put teardown code here. This method is called after the invocation of each test method in the class. 19 | } 20 | 21 | func testExample() { 22 | // Use recording to get started writing UI tests. 23 | // Use XCTAssert and related functions to verify your tests produce the correct results. 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_plists_tag_Project_target_markdown_format_verbose.2.1beaa9b8.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "plists", "-t", "Project", "-f", "markdown", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | 12 | ## ❌ PLISTS > "Project" target 13 | 14 | 15 | ### ⚠️ Only in second (1): 16 | 17 | - `Project.entitlements` 18 | 19 | 20 | 21 | ## ❌ PLISTS > "Project" target > Info.plist - Info.plist 22 | 23 | 24 | ### ⚠️ Only in first (1): 25 | 26 | - `LSApplicationCategoryType` 27 | 28 | 29 | ### ⚠️ Only in second (1): 30 | 31 | - `UISceneConfigurationName` 32 | 33 | 34 | ### ⚠️ Value mismatch (3): 35 | 36 | - `UIApplicationSceneManifest.UISceneConfigurations.UIWindowSceneSessionRoleApplication[0].UISceneDelegateClassName` 37 | - `$(PRODUCT_BUNDLE_IDENTIFIER).AppSceneDelegate` 38 | - `$(PRODUCT_MODULE_NAME).AppSceneDelegate` 39 | 40 | - `UIBackgroundModes` 41 | - `fetch, voip` 42 | - `remote-notification` 43 | 44 | - `UIRequiredDeviceCapabilities` 45 | - `bluetooth-le` 46 | - `nil` 47 | 48 | 49 | 50 | 51 | ``` 52 | -------------------------------------------------------------------------------- /Tests/XCDiffCoreTests/Helpers/PBXAggregateTargetBuilder.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2019 Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | import Foundation 18 | import XcodeProj 19 | 20 | final class PBXAggregateTargetBuilder { 21 | private var pbxtarget: PBXAggregateTarget 22 | private var objects: [PBXObject] = [] 23 | 24 | init(name: String) { 25 | pbxtarget = PBXAggregateTarget(name: name) 26 | objects.append(pbxtarget) 27 | } 28 | 29 | func build() -> (PBXAggregateTarget, [PBXObject]) { 30 | return (pbxtarget, objects) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Fixtures/ios_project_1/MismatchingLibrary/MismatchingLibrary.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #import 18 | 19 | //! Project version number for MismatchingLibrary. 20 | FOUNDATION_EXPORT double MismatchingLibraryVersionNumber; 21 | 22 | //! Project version string for MismatchingLibrary. 23 | FOUNDATION_EXPORT const unsigned char MismatchingLibraryVersionString[]; 24 | 25 | // In this header, you should import all the public headers of your framework using statements like #import 26 | 27 | 28 | -------------------------------------------------------------------------------- /Fixtures/ios_project_2/MismatchingLibrary/MismatchingLibrary.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright Bloomberg Finance L.P. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | #import 18 | 19 | //! Project version number for MismatchingLibrary. 20 | FOUNDATION_EXPORT double MismatchingLibraryVersionNumber; 21 | 22 | //! Project version string for MismatchingLibrary. 23 | FOUNDATION_EXPORT const unsigned char MismatchingLibraryVersionString[]; 24 | 25 | // In this header, you should import all the public headers of your framework using statements like #import 26 | 27 | 28 | -------------------------------------------------------------------------------- /CommandTests/Generated/p1_p2_file_references_tag_Project_target_verbose.2.c9193e01.md: -------------------------------------------------------------------------------- 1 | # Command 2 | ```json 3 | ["-p1", "{ios_project_1}", "-p2", "{ios_project_2}", "-g", "file_references", "-t", "Project", "-v"] 4 | ``` 5 | 6 | # Expected exit code 7 | 2 8 | 9 | # Expected output 10 | ``` 11 | ❌ FILE_REFERENCES 12 | 13 | ⚠️ Only in first (8): 14 | 15 | • Project/Group B/AViewController.xib 16 | • Project/Group B/AnotherObjcClass.h 17 | • Project/Group B/AnotherObjcClass.m 18 | • Project/Resources/time.png 19 | • ProjectTests/BarTests.swift 20 | • ProjectUITests/LoginTests.swift 21 | • ProjectUITests/Screenshots/empty.png 22 | • libMismatchingLibrary.a 23 | 24 | 25 | ⚠️ Only in second (12): 26 | 27 | • MismatchingLibrary.framework 28 | • MismatchingLibrary/MismatchingLibrary-Info.plist 29 | • NewFramework.framework 30 | • NewFramework/Info.plist 31 | • NewFramework/NewFramework.h 32 | • Project/Project.entitlements 33 | • Project/Project.xcconfig 34 | • Project/Target.xcconfig 35 | • ProjectFramework/Header4.h 36 | • ProjectTests/Responses/ListResponse.json 37 | • ProjectUITests/MetricsTests.swift 38 | • README.md 39 | 40 | 41 | 42 | 43 | ``` 44 | --------------------------------------------------------------------------------