xcode-mcp-server 1.3.9__tar.gz → 1.3.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/PKG-INFO +1 -1
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/__init__.py +1 -1
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/build_project.py +182 -1
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/utils/build_log_parser.py +17 -8
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/.github/workflows/claude-code.yml +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/.github/workflows/claude-self-review.yml +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/.gitignore +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/CLAUDE.md +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/LICENSE +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/README.md +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/TODO.md +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/_venv-setup.sh +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/deploy-beta.sh +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/deploy.sh +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/dev.sh +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/fools-errand.md +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/info.sh +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/pyproject.toml +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/requirements.txt +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/run_local_for_claude.sh +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/scripts/cleanup_tests.sh +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/scripts/create_projects.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/scripts/create_real_projects.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/scripts/create_spm_projects.sh +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/scripts/create_xcode_projects.sh +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/scripts/run_all_tests.sh +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/scripts/setup_test_projects.sh +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/scripts/setup_tests.sh +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/Assets.xcassets/Contents.json +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/ContentView.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/iosEmptySwiftUIAppApp.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp/main.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/Assets.xcassets/Contents.json +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/ContentView.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/macosEmptySwiftUIAppApp.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/BrokenApp/BrokenApp/main.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/ConsoleApp/ConsoleApp/main.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/ConsoleApp/ConsoleApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/ConsoleApp/ConsoleApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/ConsoleApp/ConsoleApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/ConsoleApp/ConsoleApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SimpleApp/SimpleApp/main.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SimpleApp/SimpleApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SimpleApp/SimpleApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SimpleApp/SimpleApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SimpleApp/SimpleApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/Assets.xcassets/Contents.json +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/ContentView.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/macosEmptySwiftUIAppApp.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SwiftUITestApp/SwiftUITestApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SwiftUITestApp/SwiftUITestApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SwiftUITestApp/SwiftUITestApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/SwiftUITestApp/SwiftUITestApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/iOSTestApp/iOSTestApp/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/iOSTestApp/iOSTestApp/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/iOSTestApp/iOSTestApp/Assets.xcassets/Contents.json +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/iOSTestApp/iOSTestApp/ContentView.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/iOSTestApp/iOSTestApp/iosEmptySwiftUIAppApp.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/iOSTestApp/iOSTestApp.xcodeproj/project.pbxproj +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/iOSTestApp/iOSTestApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/iOSTestApp/iOSTestApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/test_projects/templates/iOSTestApp/iOSTestApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/tests/debug_build.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/tests/debug_test.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/tests/test_basic.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/tests/test_build.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/tests/test_fixed.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/tests/test_minimal.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/tests/test_runner.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/__main__.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/cli.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/config_manager.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/config_ui.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/exceptions.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/security.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/server.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/__init__.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/clean_project.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/create_project.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/debug_list_notification_history.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_active_run_destination.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_build_errors.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_build_results.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_directory_listing.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_directory_tree.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_latest_test_results.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_project_schemes.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_runtime_output.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_xcode_projects.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/list_booted_simulators.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/list_mac_app_windows.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/list_project_tests.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/list_run_destinations.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/list_running_mac_apps.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/run_project_tests.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/run_project_unmonitored.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/run_project_until_terminated.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/run_project_with_user_interaction.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/set_run_destination.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/stop_project.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/take_app_screenshot.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/take_simulator_screenshot.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/take_window_screenshot.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/take_xcode_screenshot.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/version.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/utils/__init__.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/utils/applescript.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/utils/decode_active_destination.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/utils/decode_xcode_recents.swift +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/utils/project_templates.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/utils/screenshot.py +0 -0
- {xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/utils/xcresult.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: xcode-mcp-server
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.10
|
|
4
4
|
Summary: Drew's MCP server for Xcode integration
|
|
5
5
|
Project-URL: Homepage, https://github.com/drewster99/xcode-mcp-server
|
|
6
6
|
Project-URL: Repository, https://github.com/drewster99/xcode-mcp-server
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""build_project tool - Build an Xcode project"""
|
|
3
3
|
|
|
4
|
+
import json
|
|
4
5
|
import os
|
|
6
|
+
import re
|
|
7
|
+
import sys
|
|
5
8
|
from typing import Optional
|
|
6
9
|
|
|
7
10
|
from xcode_mcp_server.server import mcp
|
|
@@ -17,6 +20,179 @@ from xcode_mcp_server.utils.applescript import (
|
|
|
17
20
|
show_warning_notification
|
|
18
21
|
)
|
|
19
22
|
from xcode_mcp_server.utils.xcresult import extract_build_errors_and_warnings
|
|
23
|
+
from xcode_mcp_server.utils.build_log_parser import (
|
|
24
|
+
find_derived_data_for_project,
|
|
25
|
+
aggregate_warnings_since_clean
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _supplement_with_xcactivitylog_warnings(
|
|
30
|
+
errors_json: str,
|
|
31
|
+
project_path: str,
|
|
32
|
+
include_warnings: Optional[bool],
|
|
33
|
+
regex_filter: Optional[str],
|
|
34
|
+
max_lines: int
|
|
35
|
+
) -> str:
|
|
36
|
+
"""
|
|
37
|
+
Supplement build results with comprehensive warnings from xcactivitylog files.
|
|
38
|
+
|
|
39
|
+
The AppleScript build log only contains warnings for files recompiled in the
|
|
40
|
+
current build. xcactivitylog files contain warnings from all builds since the
|
|
41
|
+
last clean, providing comprehensive coverage across incremental builds.
|
|
42
|
+
|
|
43
|
+
xcactivitylog is the primary source. Any errors or warnings from the AppleScript
|
|
44
|
+
build log not already present in xcactivitylog are preserved as supplements.
|
|
45
|
+
"""
|
|
46
|
+
from xcode_mcp_server.utils.xcresult import BUILD_WARNINGS_FORCED, BUILD_WARNINGS_ENABLED
|
|
47
|
+
|
|
48
|
+
if BUILD_WARNINGS_FORCED is not None:
|
|
49
|
+
show_warnings = BUILD_WARNINGS_FORCED
|
|
50
|
+
else:
|
|
51
|
+
show_warnings = include_warnings if include_warnings is not None else BUILD_WARNINGS_ENABLED
|
|
52
|
+
|
|
53
|
+
if not show_warnings:
|
|
54
|
+
return errors_json
|
|
55
|
+
|
|
56
|
+
try:
|
|
57
|
+
derived_data_path = find_derived_data_for_project(project_path)
|
|
58
|
+
if not derived_data_path:
|
|
59
|
+
return errors_json
|
|
60
|
+
|
|
61
|
+
logs_dir = os.path.join(derived_data_path, "Logs", "Build")
|
|
62
|
+
manifest_path = os.path.join(logs_dir, "LogStoreManifest.plist")
|
|
63
|
+
|
|
64
|
+
if not os.path.exists(manifest_path):
|
|
65
|
+
return errors_json
|
|
66
|
+
|
|
67
|
+
xcactivity_result = aggregate_warnings_since_clean(manifest_path, logs_dir)
|
|
68
|
+
xcactivity_items = xcactivity_result.get('aggregated_warnings', [])
|
|
69
|
+
|
|
70
|
+
if not xcactivity_items:
|
|
71
|
+
return errors_json
|
|
72
|
+
|
|
73
|
+
# Apply regex_filter to xcactivitylog items if provided
|
|
74
|
+
if regex_filter and regex_filter.strip():
|
|
75
|
+
filter_re = re.compile(regex_filter)
|
|
76
|
+
xcactivity_items = [
|
|
77
|
+
w for w in xcactivity_items
|
|
78
|
+
if filter_re.search(
|
|
79
|
+
f"{w['file']}:{w['line']}:{w['column']}: {w['type']}: {w['message']}"
|
|
80
|
+
)
|
|
81
|
+
]
|
|
82
|
+
if not xcactivity_items:
|
|
83
|
+
return errors_json
|
|
84
|
+
|
|
85
|
+
result = json.loads(errors_json)
|
|
86
|
+
existing_text = result.get('errors_and_warnings', '')
|
|
87
|
+
build_failed = result.get('summary', {}).get('build_failed', False)
|
|
88
|
+
|
|
89
|
+
# Parse error/warning lines from existing AppleScript result
|
|
90
|
+
error_re = re.compile(
|
|
91
|
+
r'(:\d+:\d+: error:)|(^error\s*:)|(:\s+error:)', re.IGNORECASE
|
|
92
|
+
)
|
|
93
|
+
warning_re = re.compile(
|
|
94
|
+
r'(:\d+:\d+: warning:)|(^warning\s*:)|(:\s+warning:)', re.IGNORECASE
|
|
95
|
+
)
|
|
96
|
+
flc_re = re.compile(r'(.+?):(\d+):(\d+): (?:warning|error):')
|
|
97
|
+
|
|
98
|
+
existing_lines = existing_text.split('\n')
|
|
99
|
+
applescript_error_lines = [l for l in existing_lines if error_re.search(l)]
|
|
100
|
+
applescript_warning_lines = [l for l in existing_lines if warning_re.search(l)]
|
|
101
|
+
|
|
102
|
+
# Build dedup set from xcactivitylog entries
|
|
103
|
+
xcact_keys = set()
|
|
104
|
+
for w in xcactivity_items:
|
|
105
|
+
xcact_keys.add((w['file'], w['line'], w['column']))
|
|
106
|
+
|
|
107
|
+
# Separate xcactivitylog items into error and warning text lines
|
|
108
|
+
xcact_error_lines = []
|
|
109
|
+
xcact_warning_lines = []
|
|
110
|
+
for w in xcactivity_items:
|
|
111
|
+
line = f"{w['file']}:{w['line']}:{w['column']}: {w['type']}: {w['message']}"
|
|
112
|
+
if w['type'] == 'error':
|
|
113
|
+
xcact_error_lines.append(line)
|
|
114
|
+
else:
|
|
115
|
+
xcact_warning_lines.append(line)
|
|
116
|
+
|
|
117
|
+
# Find AppleScript lines not already in xcactivitylog
|
|
118
|
+
extra_errors = []
|
|
119
|
+
for line in applescript_error_lines:
|
|
120
|
+
m = flc_re.match(line)
|
|
121
|
+
if m:
|
|
122
|
+
key = (m.group(1), int(m.group(2)), int(m.group(3)))
|
|
123
|
+
if key not in xcact_keys:
|
|
124
|
+
extra_errors.append(line)
|
|
125
|
+
else:
|
|
126
|
+
extra_errors.append(line)
|
|
127
|
+
|
|
128
|
+
extra_warnings = []
|
|
129
|
+
for line in applescript_warning_lines:
|
|
130
|
+
m = flc_re.match(line)
|
|
131
|
+
if m:
|
|
132
|
+
key = (m.group(1), int(m.group(2)), int(m.group(3)))
|
|
133
|
+
if key not in xcact_keys:
|
|
134
|
+
extra_warnings.append(line)
|
|
135
|
+
else:
|
|
136
|
+
extra_warnings.append(line)
|
|
137
|
+
|
|
138
|
+
# Combine: errors first (xcactivitylog + extras), then warnings
|
|
139
|
+
all_error_lines = xcact_error_lines + extra_errors
|
|
140
|
+
all_warning_lines = xcact_warning_lines + extra_warnings
|
|
141
|
+
total_errors = len(all_error_lines)
|
|
142
|
+
total_warnings = len(all_warning_lines)
|
|
143
|
+
|
|
144
|
+
# Apply max_lines with errors prioritized
|
|
145
|
+
combined = all_error_lines + all_warning_lines
|
|
146
|
+
displayed_errors = min(total_errors, max_lines)
|
|
147
|
+
displayed_warnings = max(0, min(total_warnings, max_lines - displayed_errors))
|
|
148
|
+
if len(combined) > max_lines:
|
|
149
|
+
combined = combined[:max_lines]
|
|
150
|
+
|
|
151
|
+
# Build count message
|
|
152
|
+
if build_failed:
|
|
153
|
+
if total_errors > 0 and total_warnings > 0:
|
|
154
|
+
count_msg = (
|
|
155
|
+
f"Build failed with {total_errors} error{'s' if total_errors != 1 else ''}"
|
|
156
|
+
f" and {total_warnings} warning{'s' if total_warnings != 1 else ''}."
|
|
157
|
+
)
|
|
158
|
+
elif total_errors > 0:
|
|
159
|
+
count_msg = f"Build failed with {total_errors} error{'s' if total_errors != 1 else ''}."
|
|
160
|
+
elif total_warnings > 0:
|
|
161
|
+
count_msg = (
|
|
162
|
+
f"Build failed with 0 recognized errors"
|
|
163
|
+
f" and {total_warnings} warning{'s' if total_warnings != 1 else ''}."
|
|
164
|
+
f" See full log for failure details."
|
|
165
|
+
)
|
|
166
|
+
else:
|
|
167
|
+
return errors_json
|
|
168
|
+
else:
|
|
169
|
+
if total_warnings > 0 and total_errors > 0:
|
|
170
|
+
count_msg = (
|
|
171
|
+
f"Build succeeded with {total_errors} error{'s' if total_errors != 1 else ''}"
|
|
172
|
+
f" and {total_warnings} warning{'s' if total_warnings != 1 else ''}."
|
|
173
|
+
)
|
|
174
|
+
elif total_warnings > 0:
|
|
175
|
+
count_msg = f"Build succeeded with {total_warnings} warning{'s' if total_warnings != 1 else ''}."
|
|
176
|
+
else:
|
|
177
|
+
return errors_json
|
|
178
|
+
|
|
179
|
+
if total_errors + total_warnings > max_lines:
|
|
180
|
+
count_msg += f" Showing first {len(combined)} of {total_errors + total_warnings}."
|
|
181
|
+
|
|
182
|
+
important_list = "\n".join(combined)
|
|
183
|
+
output_text = f"{count_msg}\n{important_list}" if combined else count_msg
|
|
184
|
+
|
|
185
|
+
result['summary']['total_errors'] = total_errors
|
|
186
|
+
result['summary']['total_warnings'] = total_warnings
|
|
187
|
+
result['summary']['showing_errors'] = displayed_errors
|
|
188
|
+
result['summary']['showing_warnings'] = displayed_warnings
|
|
189
|
+
result['errors_and_warnings'] = output_text
|
|
190
|
+
|
|
191
|
+
return json.dumps(result)
|
|
192
|
+
|
|
193
|
+
except Exception as e:
|
|
194
|
+
print(f"Debug: xcactivitylog supplement failed: {e}", file=sys.stderr)
|
|
195
|
+
return errors_json
|
|
20
196
|
|
|
21
197
|
|
|
22
198
|
@mcp.tool()
|
|
@@ -179,8 +355,13 @@ end tell
|
|
|
179
355
|
# Always extract and format errors/warnings (returns JSON)
|
|
180
356
|
errors_output = extract_build_errors_and_warnings(build_log, include_warnings, regex_filter, max_lines, build_status=build_status)
|
|
181
357
|
|
|
358
|
+
# Supplement with comprehensive warnings from xcactivitylog files
|
|
359
|
+
# (AppleScript build log only has warnings for files recompiled in this build)
|
|
360
|
+
errors_output = _supplement_with_xcactivitylog_warnings(
|
|
361
|
+
errors_output, normalized_path, include_warnings, regex_filter, max_lines
|
|
362
|
+
)
|
|
363
|
+
|
|
182
364
|
# Parse JSON to show appropriate notification
|
|
183
|
-
import json
|
|
184
365
|
try:
|
|
185
366
|
result = json.loads(errors_output)
|
|
186
367
|
summary = result.get("summary", {})
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/utils/build_log_parser.py
RENAMED
|
@@ -178,7 +178,7 @@ def aggregate_warnings_since_clean(manifest_path: str, logs_dir: str) -> Dict:
|
|
|
178
178
|
|
|
179
179
|
# Parse each build's xcactivitylog file
|
|
180
180
|
all_warnings = []
|
|
181
|
-
|
|
181
|
+
file_last_compiled: Dict[str, float] = {}
|
|
182
182
|
builds_analyzed = []
|
|
183
183
|
|
|
184
184
|
for build in builds_to_analyze:
|
|
@@ -190,19 +190,22 @@ def aggregate_warnings_since_clean(manifest_path: str, logs_dir: str) -> Dict:
|
|
|
190
190
|
|
|
191
191
|
warnings, compiled_files = parse_xcactivitylog(log_file)
|
|
192
192
|
|
|
193
|
-
# Track
|
|
194
|
-
|
|
193
|
+
# Track the latest build time each file was compiled in
|
|
194
|
+
build_time = build['timeStartedRecording']
|
|
195
|
+
for f in compiled_files:
|
|
196
|
+
if f not in file_last_compiled or build_time > file_last_compiled[f]:
|
|
197
|
+
file_last_compiled[f] = build_time
|
|
195
198
|
|
|
196
199
|
# Store warnings with build context
|
|
197
200
|
for warning in warnings:
|
|
198
201
|
warning['build_uuid'] = build['uuid']
|
|
199
|
-
warning['build_time'] =
|
|
202
|
+
warning['build_time'] = build_time
|
|
200
203
|
all_warnings.append(warning)
|
|
201
204
|
|
|
202
205
|
builds_analyzed.append({
|
|
203
206
|
'uuid': build['uuid'],
|
|
204
207
|
'title': build['title'],
|
|
205
|
-
'time':
|
|
208
|
+
'time': build_time,
|
|
206
209
|
'warnings_found': len(warnings),
|
|
207
210
|
'files_compiled': len(compiled_files)
|
|
208
211
|
})
|
|
@@ -226,11 +229,17 @@ def aggregate_warnings_since_clean(manifest_path: str, logs_dir: str) -> Dict:
|
|
|
226
229
|
# Sort by build time (descending) to get most recent first
|
|
227
230
|
file_warnings.sort(key=lambda x: x['build_time'], reverse=True)
|
|
228
231
|
|
|
229
|
-
# Get the most recent build time for this file
|
|
230
|
-
|
|
232
|
+
# Get the most recent build time for this file's warnings
|
|
233
|
+
most_recent_warning_time = file_warnings[0]['build_time']
|
|
234
|
+
|
|
235
|
+
# If this file was recompiled in a later build without warnings, the
|
|
236
|
+
# old warnings are stale — the file now compiles cleanly.
|
|
237
|
+
last_compiled = file_last_compiled.get(file_path)
|
|
238
|
+
if last_compiled is not None and last_compiled > most_recent_warning_time:
|
|
239
|
+
continue
|
|
231
240
|
|
|
232
241
|
# Keep only warnings from the most recent build
|
|
233
|
-
recent_warnings = [w for w in file_warnings if w['build_time'] ==
|
|
242
|
+
recent_warnings = [w for w in file_warnings if w['build_time'] == most_recent_warning_time]
|
|
234
243
|
|
|
235
244
|
# Track if file had warnings in multiple builds
|
|
236
245
|
unique_build_times = set(w['build_time'] for w in file_warnings)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_build_errors.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_build_results.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_directory_listing.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_directory_tree.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_latest_test_results.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_project_schemes.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_runtime_output.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/get_xcode_projects.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/list_booted_simulators.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/list_mac_app_windows.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/list_project_tests.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/list_run_destinations.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/list_running_mac_apps.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/run_project_tests.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/run_project_unmonitored.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/set_run_destination.py
RENAMED
|
File without changes
|
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/take_app_screenshot.py
RENAMED
|
File without changes
|
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/take_window_screenshot.py
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/tools/take_xcode_screenshot.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/utils/decode_xcode_recents.swift
RENAMED
|
File without changes
|
{xcode_mcp_server-1.3.9 → xcode_mcp_server-1.3.10}/xcode_mcp_server/utils/project_templates.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|