mirror of
https://github.com/cagnulein/qdomyos-zwift.git
synced 2026-02-17 16:07:43 +01:00
Xcode cloud scripts (#4321)
* Add CI scripts for iOS Qt 5.15.2 build process Introduced three CI scripts: ci_post_clone.sh for setting up Qt 5.15.2 and patched libraries, ci_pre_xcodebuild.sh for running qmake and restoring WatchOS references, and ci_post_xcodebuild.sh for post-build verification and artifact logging. These scripts automate the iOS build environment setup and validation for QDomyos-Zwift. * Update ci_post_clone.sh * Update ci_post_clone.sh * Enforce exact Qt 5.15.2 install and Xcode Cloud fixes Update CI scripts to strictly require and verify Qt 5.15.2, using aqt or Homebrew with version pinning. Add robust error handling for incorrect Qt versions, ensure patched Bluetooth libraries are present, and improve messaging. In pre-xcodebuild, verify Qt version, add Xcode Cloud build location fixes via xcconfig and pbxproj edits, and enhance error handling for project configuration. * Update ci_post_clone.sh * Use local Homebrew formula for Qt 5.15.2 installation Updated the CI post-clone script to install Qt 5.15.2 using a local Homebrew formula instead of downloading it from an external source. Added the qt5.rb formula to the repository under ci-scripts/homebrew-formulas for reproducible and reliable builds. * Update ci_post_clone.sh * Update ci_post_clone.sh * Update ci_post_clone.sh * Update ci_post_clone.sh * Update ci_post_clone.sh * Update ci_post_clone.sh * Update ci_post_clone.sh * Update ci_post_clone.sh * Update ci_post_clone.sh * Update ci_post_clone.sh * Update ci_post_clone.sh * Update ci_post_clone.sh * Update ci_post_clone.sh * Initial commit Project files added to set up the initial codebase. * Update project.pbxproj * Revert "Update project.pbxproj" This reverts commitf17455cfe7. * Revert "Initial commit" This reverts commit91c30cc8b1. * relative paths * relative paths * porting from aradar xcode project * Update project.pbxproj * Add Xcode workspace configuration files Added initial Xcode workspace files including contents.xcworkspacedata, IDEWorkspaceChecks.plist, and SwiftPM Package.resolved for project setup and dependency management. * Update project.pbxproj * Update project.pbxproj * Update project.pbxproj * Create PrivacyInfo.xcprivacy * Create PrivacyInfo.xcprivacy * Revert "Create PrivacyInfo.xcprivacy" This reverts commit5a8fb9dee5. * Revert "Update project.pbxproj" This reverts commite160c9bf6e. * Reapply "Update project.pbxproj" This reverts commit1cf0092c57. * Revert "Create PrivacyInfo.xcprivacy" This reverts commite0ede5d42d. * Revert "Update project.pbxproj" This reverts commite160c9bf6e. * Revert "Update project.pbxproj" This reverts commitf8025155cc. * Revert "Update project.pbxproj" This reverts commitac4d5f5fc0. * Revert "Add Xcode workspace configuration files" This reverts commita3aacc002b. * Revert "Update project.pbxproj" This reverts commitd5e68987e6. * Revert "porting from aradar xcode project" This reverts commit21f489b86d. * Revert "relative paths" This reverts commit2002677955. * Revert "relative paths" This reverts commit4da17e3ae9. * trying to don't change the full directory structure * Update _ci_pre_xcodebuild.sh * Update project.pbxproj * Persist and load Qt environment for CI scripts ci_post_clone.sh now saves the Qt environment variables to a persistent file (/tmp/qt_env.sh) after installation or detection. ci_pre_xcodebuild.sh is renamed and updated to load this environment file, ensuring consistent Qt configuration across CI steps. Additional debug output is added for troubleshooting. * Update ci_pre_xcodebuild.sh * Update project.pbxproj * Update ci_pre_xcodebuild.sh * Update ci_pre_xcodebuild.sh * debug * Update ci_post_clone.sh * Update project.pbxproj * Update project.pbxproj * Update ci_pre_xcodebuild.sh * Update project.pbxproj * Update project.pbxproj * Update qdomyos-zwift.pri * Update qdomyos-zwift.pri * Update qdomyos-zwift.pri * Update qdomyos-zwift.pro * Update qdomyos-zwift.pri * Update qdomyos-zwift.pri * fake xcode * foxing * Revert "foxing" This reverts commit5dd813b2f5. * Update ci_pre_xcodebuild.sh * Update ci_pre_xcodebuild.sh * signing * Update qdomyos-zwift.pro * Update ci_pre_xcodebuild.sh * Update ci_pre_xcodebuild.sh * Update ci_pre_xcodebuild.sh * Update ci_pre_xcodebuild.sh * Update ci_pre_xcodebuild.sh * Update ci_pre_xcodebuild.sh * relative path * Update project.pbxproj * Update project.pbxproj * moc relative * signing * root project * Update qdomyos-zwift.pro * Update ci_pre_xcodebuild.sh * Update ci_pre_xcodebuild.sh * Fix Xcode Cloud build: symlink to correct project with code signing qmake regenerates src/qdomyoszwift.xcodeproj without code signing during make, causing build failures. After make completes, we now: - Delete the corrupted project in src/ - Create symlink to the correct project in build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/ - xcodebuild now uses the project with proper code signing configuration Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fix: Create fake xcodebuild BEFORE make to prevent circular failure The previous fix failed because: 1. make was calling xcodebuild with corrupted project 2. xcodebuild failed due to code signing 3. make exited with error 4. Script never reached symlink creation (circular problem) This fix: 1. Creates fake xcodebuild BEFORE make starts 2. make completes successfully (fake xcodebuild returns success) 3. Script continues and creates symlink to correct project 4. Removes fake xcodebuild from PATH 5. Real xcodebuild (from Xcode Cloud) uses symlinked project with code signing Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fix: Use absolute paths to avoid git repo not found error Problems fixed: 1. Script not executable - added chmod +x 2. cd .. after make went to wrong directory → git repo not found 3. find ../src failed after make → wrong directory Solution: - Save PROJECT_ROOT absolute path at start - Use "$PROJECT_ROOT" instead of cd .. - Use "$PROJECT_ROOT/src" instead of ../src - Made script executable (755) Now script can find git repo and source files regardless of where make leaves us. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Add missing QZWidgetExtension.entitlements from master Xcode build was failing with: "Build input file cannot be found: QZWidgetExtension.entitlements" This file exists in master but was missing from xcode-cloud-scripts branch. Copied from master to fix the build error. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Resolve merge conflict: use master version of settings.local.json * Copy ALL Qt-generated files from src/ to build directory Problem: qmake/make generates files (moc_*.cpp, qrc_*.cpp, qmltyperegistrations, etc.) in src/ but Xcode expects them in build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/ Solution: After make completes, copy all generated files to build directory: - MOC files (moc_*.cpp, moc_*.cpp.json) - QRC files (qrc_*.cpp) - Object files (*.o, *.a) - QML type registrations (*_qmltyperegistrations.*) - Metatypes (*_metatypes.json, *.qmltypes) - Plugin imports (*_plugin_import.cpp) This matches the local build directory structure. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fix file copy timing - move AFTER git restore Critical bug fix: The file copy from src/ to build/ was happening BEFORE git checkout, which was then wiping out the copied files. Changes: - Move file copy to AFTER git checkout to preserve generated files - Add -print flag to show which files are being copied - Add verification step to confirm qdomyoszwift_qmltyperegistrations.cpp exists This ensures Qt-generated files (MOC, QML type registrations, etc.) are properly available in the build directory for Xcode to find them. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fix qmltyperegistrations filename mismatch Critical fix: qmake generates qdomyos-zwift_qmltyperegistrations.cpp (with hyphen) but Xcode project expects qdomyoszwift_qmltyperegistrations.cpp (no hyphen). Added: - Copy/rename step to create the non-hyphenated version Xcode expects - Handle both .cpp and .o files - Verification output to confirm file exists Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Add symlink for Qt path compatibility - fix httpserver module The Qt archive contains .pri files with hardcoded absolute paths from local development machine (/Users/cagnulein/Qt/5.15.2/). When extracted on Xcode Cloud to /tmp/Qt-5.15.2/, qmake can't find httpserver and other modules because it looks in the original path. Solution: Create symlink from original path to Xcode Cloud path so qmake can find all modules including httpserver. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fix hardcoded paths in .pri files instead of using symlinks Replace sudo symlink approach (requires password) with direct path replacement in .pri files using sed. - Find all .pri files in Qt installation - Replace /Users/cagnulein/Qt/5.15.2 with /tmp/Qt-5.15.2 - Verify httpserver module .pri file is findable after fix This allows qmake to find httpserver and other modules without requiring elevated privileges. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fix Qt library relative paths in Xcode project The Xcode project contains relative paths to Qt libraries like: ../../Qt/5.15.2/ios/qml/Qt/labs/calendar/libqtlabscalendarplugin.a These relative paths don't resolve correctly on Xcode Cloud. Solution: After git restore, use sed to replace relative Qt paths with absolute paths pointing to /tmp/Qt-5.15.2/ios/ This fixes the "library 'qtlabscalendarplugin' not found" error. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Add Qt/labs/calendar to library search paths The qtlabscalendarplugin library exists but wasn't in the linker's search paths, causing "library not found" error. Changes: - Add ls verification to confirm library file exists - Add /tmp/Qt-5.15.2/ios/qml/Qt/labs/calendar to LIBRARY_SEARCH_PATHS - Add debugging output to show calendar path references This ensures the linker can find libqtlabscalendarplugin.a during linking. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Add all necessary Qt library search paths Instead of adding only calendar path, add ALL common Qt iOS library paths that might be missing from the committed Xcode project: - Qt/labs/* (calendar, platform) - QtCharts, QtWebView, QtPositioning, QtLocation, QtMultimedia - plugins/* (platforms, webview, texttospeech, geoservices, sqldrivers, mediaservice, playlistformats, audio) This should fix "library not found" errors for qios_debug and other Qt libraries that qmake expects to find in these directories. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Replace debug Qt libraries with release versions The Qt package only contains release libraries, not debug versions. The Xcode project has some references to _debug libraries which causes the linker to look for debug versions of ALL Qt libraries, including qios_debug which doesn't exist. Solution: Use sed to replace all _debug library references with release versions: - lib*_debug.a -> lib*.a (file references) - -l*_debug -> -l* (linker flags) This fixes "library 'qios_debug' not found" and similar errors. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Change all scheme configurations to Release Xcode Cloud was building in Debug mode, looking for debug Qt libraries (_debug suffix) which don't exist in the Qt package (only release libs). Changed all scheme actions to use Release configuration: - TestAction: Debug -> Release - LaunchAction: Debug -> Release - AnalyzeAction: Debug -> Release - ArchiveAction: already Release This ensures Xcode Cloud builds with release Qt libraries. qDebug output will still work in Release builds. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Download and install missing qmldbg libraries The Qt package is missing libqmldbg_debugger.a and libqmldbg_nativedebugger.a which are needed for linking. Solution: Download the missing libraries from GitHub release and install them in /tmp/Qt-5.15.2/ios/plugins/qmltooling/ This fixes "Library 'qmldbg_debugger' not found" error. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fail build if qmldbg libraries are not found - Add exit 1 after error messages if files are not found - Show contents after zip extraction for debugging - Create target directory before moving files If the required libraries cannot be installed, the build must fail immediately rather than continuing without them. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Download both qmldbg library files separately - Download libqmldbg_debugger.a.zip (new file with correct version) - Download libqmldbg_debugger.zip (has nativedebugger files) - Use _debug version of nativedebugger as fallback if release not found - Show all extracted files for debugging - Fail fast if required files are missing This ensures both libqmldbg_debugger.a and libqmldbg_nativedebugger.a are properly installed. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Reorganize Xcode Cloud CI configuration to use dynamic project modifications This commit reorganizes the CI setup to keep project files clean and apply all modifications via CI scripts: Changes: 1. ci_post_clone.sh: Added secret.h generation from Xcode Cloud environment variables - Generates secret.h with STRAVA_SECRET_KEY, PELOTON_SECRET_KEY, SMTP credentials, etc. - Generates cesium-key.js if CESIUMKEY environment variable is provided - Matches the pattern used in GitHub workflows 2. ci_pre_xcodebuild.sh: Enhanced with comprehensive project file modifications - Added path fixes for local development paths -> Xcode Cloud paths - Added scheme modification from Debug to Release configuration - Preserved existing fixes: _debug suffix removal, library search paths, qmltyperegistrations 3. project.pbxproj and qdomyoszwift.xcscheme: Reverted to master branch versions - Project files now stay clean in the repository - All environment-specific modifications done dynamically in CI scripts 4. ci_post_xcodebuild.sh: Removed (no longer needed) Benefits: - Clean project files in repository (easier to maintain and review) - All CI-specific modifications isolated in CI scripts - Easier to debug and update CI configuration - Consistent with GitHub workflow patterns Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fix legacy build locations error by removing SYMROOT in CI script After reverting project.pbxproj to master, SYMROOT settings were restored causing: "Packages are not supported when using legacy build locations" Solution: Remove SYMROOT and OBJROOT lines dynamically in ci_pre_xcodebuild.sh instead of committing the change to project.pbxproj. This keeps project files clean while fixing the Swift package compatibility issue. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Create workspace settings to disable legacy build locations The error "Packages are not supported when using legacy build locations" requires both: 1. Removing SYMROOT from project.pbxproj 2. Creating WorkspaceSettings.xcsettings and IDEWorkspaceChecks.plist These workspace files force Xcode to use the modern build system and disable legacy build locations, enabling Swift Package Manager support. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Move legacy build locations fix to ci_post_clone.sh Xcode Cloud executes scripts in this order: 1. ci_post_clone.sh 2. xcodebuild -resolvePackageDependencies (was failing here) 3. ci_pre_xcodebuild.sh (never reached) The workspace settings and SYMROOT removal must happen in ci_post_clone.sh BEFORE Xcode Cloud tries to resolve package dependencies. This fixes: "Packages are not supported when using legacy build locations" Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fix absolute paths for resource files (Default-568h@2x.png) After reverting project.pbxproj to master, resource files like Default-568h@2x.png have absolute paths from local development machine: /Users/cagnulein/qdomyos-zwift/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/qdomyoszwift.xcodeproj/ These paths don't exist on Xcode Cloud. Convert them to relative paths: qdomyoszwift.xcodeproj/Default-568h@2x.png Added fix to both ci_post_clone.sh and ci_pre_xcodebuild.sh to ensure paths are correct throughout the build process. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fix resource file paths and sourceTree for LaunchScreen.storyboard Resource files have both absolute paths and sourceTree = "<absolute>" which prevents Xcode Cloud from finding them. Changed the fix to: 1. Convert absolute paths to relative (remove local machine prefix) 2. Change sourceTree from "<absolute>" to "<group>" This allows Xcode to find resource files relative to their group in the project structure. Fixes: Default-568h@2x.png, LaunchScreen.storyboard, and other resources Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fix sed syntax to keep quotes in resource file paths The sed was removing quotes from paths causing parse errors: path = Default-568h@2x.png (WRONG - causes parse error) Fixed to maintain quotes: path = "Default-568h@2x.png" (CORRECT) This prevents "project is damaged and cannot be opened" error. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Use SOURCE_ROOT for resource file paths instead of <group> Changed sourceTree from <group> to SOURCE_ROOT with full relative path: - path = "build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/qdomyoszwift.xcodeproj/Default-568h@2x.png" - sourceTree = SOURCE_ROOT On Xcode Cloud, SOURCE_ROOT = /Volumes/workspace/repository/, so files will be found at the correct location. Tested locally before committing to verify sed produces valid output. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fix all paths to match working version exactly Tested locally to ensure output matches the working version exactly. All key files verified: ✓ Default-568h@2x.png: MATCH ✓ LaunchScreen.storyboard: MATCH ✓ Qt5Core: MATCH ✓ virtualbike.cpp: MATCH Path fixes applied in correct order: 1. Qt paths: /Users/cagnulein/Qt/5.15.2/ios/ -> /tmp/Qt-5.15.2/ios/ 2. Source paths: /Users/cagnulein/qdomyos-zwift/src/ -> ../src/ 3. General: /Users/cagnulein/qdomyos-zwift/ -> /Volumes/workspace/repository/ 4. sourceTree fix: ../src/* files use <group> not <absolute> Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Revert project files to updated master Previous revert used outdated master missing sportstechrower and filesearcher. Now reverting to updated master that includes all recent files. Tested locally - all files match working version: ✓ sportstechrower.cpp: MATCH ✓ filesearcher.cpp: MATCH ✓ Default-568h@2x.png: MATCH ✓ virtualbike.cpp: MATCH Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Fix QZWidget extension version to match app version Changed MARKETING_VERSION from 1.0 to 2.20 for QZWidgetExtension to fix error: CFBundleShortVersionString Mismatch App version: 2.20 Widget version: 2.20 (was 1.0) Build number (1285) should be configured in Xcode Cloud dashboard. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Use echo instead of heredoc for secret.h generation Changed from heredoc (cat << EOF) to echo statements to match GitHub workflow exactly. This should fix potential escaping issues with environment variables like PELOTON_SECRET_KEY. Now identical to GitHub workflow approach. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Add permissions for Bash commands in settings --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,8 +3,9 @@
|
||||
"allow": [
|
||||
"Bash(tshark:*)",
|
||||
"Bash(find:*)",
|
||||
"Bash(python3:*)",
|
||||
"Bash(git log:*)"
|
||||
"Bash(python3:*)",
|
||||
"Bash(git log:*)",
|
||||
"Bash(git ls-tree:*)"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>NSPrivacyAccessedAPITypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>NSPrivacyAccessedAPIType</key>
|
||||
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
||||
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||
<array>
|
||||
<string>CA92.1</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,285 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "=== QDomyos-Zwift CI Post Clone Script ==="
|
||||
echo "Installing Qt 5.15.2 EXACTLY and preparing environment"
|
||||
|
||||
# Exit if not on macOS (sanity check)
|
||||
if [[ "$OSTYPE" != "darwin"* ]]; then
|
||||
echo "ERROR: This script must run on macOS"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Apply Xcode Cloud network workarounds
|
||||
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||
export GIT_HTTP_MAX_REQUESTS=1
|
||||
|
||||
# Check if Qt 5.15.2 is already installed
|
||||
if command -v qmake &> /dev/null; then
|
||||
QT_VERSION=$(qmake -v | grep -o "5\.[0-9]*\.[0-9]*" | head -1)
|
||||
if [[ "$QT_VERSION" == "5.15.2" ]]; then
|
||||
echo "Qt 5.15.2 already installed - PERFECT!"
|
||||
export QT_DIR=$(dirname $(dirname $(which qmake)))
|
||||
export PATH="$QT_DIR/bin:$PATH"
|
||||
|
||||
# CRITICAL: Save Qt path to persistent file for next script
|
||||
echo "Saving existing Qt installation path for ci_pre_xcodebuild.sh..."
|
||||
echo "export QT_DIR=\"$QT_DIR\"" > /tmp/qt_env.sh
|
||||
echo "export PATH=\"$QT_DIR/bin:/tmp/Qt-5.15.2/ios/bin:/private/tmp/Qt-5.15.2/ios/bin:\$PATH\"" >> /tmp/qt_env.sh
|
||||
chmod +x /tmp/qt_env.sh
|
||||
else
|
||||
echo "WRONG Qt version found: $QT_VERSION"
|
||||
echo "MUST install Qt 5.15.2 exactly"
|
||||
# Uninstall wrong version
|
||||
brew uninstall --ignore-dependencies qt@5 qt || echo "No Qt to uninstall"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Force install Qt 5.15.2 EXACTLY
|
||||
if ! command -v qmake &> /dev/null || [[ "$(qmake -v | grep -o "5\.[0-9]*\.[0-9]*" | head -1)" != "5.15.2" ]]; then
|
||||
echo "Installing Qt 5.15.2 EXACTLY - NO OTHER VERSION ACCEPTED"
|
||||
|
||||
# Method 1: Use aqt (Another Qt Installer) to get exact version
|
||||
echo "Installing aqt (Another Qt Installer) for exact Qt version control..."
|
||||
python3 -m pip install aqt || echo "aqt installation failed, trying homebrew method"
|
||||
|
||||
if command -v aqt &> /dev/null; then
|
||||
echo "Using aqt to install Qt 5.15.2 exactly..."
|
||||
aqt install-qt mac desktop 5.15.2 --outputdir /usr/local/Qt
|
||||
export QT_DIR="/usr/local/Qt/5.15.2/clang_64"
|
||||
export PATH="$QT_DIR/bin:$PATH"
|
||||
|
||||
# CRITICAL: Save Qt path to persistent file for next script
|
||||
echo "Saving aqt Qt installation path for ci_pre_xcodebuild.sh..."
|
||||
echo "export QT_DIR=\"/usr/local/Qt/5.15.2/clang_64\"" > /tmp/qt_env.sh
|
||||
echo "export PATH=\"/usr/local/Qt/5.15.2/clang_64/bin:/tmp/Qt-5.15.2/ios/bin:/private/tmp/Qt-5.15.2/ios/bin:\$PATH\"" >> /tmp/qt_env.sh
|
||||
chmod +x /tmp/qt_env.sh
|
||||
else
|
||||
echo "aqt failed, using precompiled Qt 5.15.2 from GitHub..."
|
||||
|
||||
# Download precompiled Qt 5.15.2 from your GitHub release
|
||||
echo "Downloading precompiled Qt 5.15.2 from GitHub..."
|
||||
cd /tmp
|
||||
curl -L "https://github.com/cagnulein/qt5.15.2/releases/download/qt-5.15.2/qt-5.15.2.tar.xz" -o qt-5.15.2.tar.xz
|
||||
|
||||
if [[ -f "qt-5.15.2.tar.xz" ]]; then
|
||||
echo "Extracting precompiled Qt 5.15.2..."
|
||||
tar -mxf qt-5.15.2.tar.xz
|
||||
|
||||
cd 5.15.2 || { echo "Extraction failed or directory not found"; exit 1; }
|
||||
|
||||
# Debug: Check extraction result
|
||||
echo "Contents after extraction:"
|
||||
ls -la
|
||||
|
||||
# Install to temp location (no sudo needed)
|
||||
echo "Setting up Qt 5.15.2..."
|
||||
mkdir -p /tmp/Qt-5.15.2
|
||||
|
||||
# Files are extracted directly - copy Qt directories
|
||||
echo "Files extracted directly, copying Qt directories..."
|
||||
|
||||
# Copy the Qt directories we need
|
||||
if [[ -d "ios" ]]; then
|
||||
cp -R ios /tmp/Qt-5.15.2/
|
||||
echo "Copied ios directory"
|
||||
fi
|
||||
|
||||
if [[ -d "clang_64" ]]; then
|
||||
cp -R clang_64 /tmp/Qt-5.15.2/
|
||||
echo "Copied clang_64 directory"
|
||||
fi
|
||||
|
||||
if [[ -d "qthttpserver" ]]; then
|
||||
cp -R qthttpserver /tmp/Qt-5.15.2/
|
||||
echo "Copied qthttpserver directory"
|
||||
fi
|
||||
|
||||
if [[ -f "sha1s.txt" ]]; then
|
||||
cp sha1s.txt /tmp/Qt-5.15.2/
|
||||
echo "Copied sha1s.txt"
|
||||
fi
|
||||
|
||||
# Set environment for iOS development - support both /tmp and /private/tmp
|
||||
export QT_DIR="/tmp/Qt-5.15.2/ios"
|
||||
export PATH="$QT_DIR/bin:$PATH"
|
||||
|
||||
# CRITICAL: Save Qt path to persistent file for next script
|
||||
echo "Saving Qt installation path for ci_pre_xcodebuild.sh..."
|
||||
echo "export QT_DIR=\"/tmp/Qt-5.15.2/ios\"" > /tmp/qt_env.sh
|
||||
echo "export PATH=\"/tmp/Qt-5.15.2/ios/bin:/private/tmp/Qt-5.15.2/ios/bin:\$PATH\"" >> /tmp/qt_env.sh
|
||||
chmod +x /tmp/qt_env.sh
|
||||
|
||||
echo "Qt 5.15.2 precompiled installation completed"
|
||||
|
||||
# CRITICAL: Fix hardcoded paths in .pri files
|
||||
# The Qt archive contains .pri files with absolute paths from local machine
|
||||
# Replace them with the Xcode Cloud installation path
|
||||
echo "Fixing hardcoded paths in Qt .pri files..."
|
||||
find /tmp/Qt-5.15.2 -name "*.pri" -type f -exec sed -i '' 's|/Users/cagnulein/Qt/5.15.2|/tmp/Qt-5.15.2|g' {} \;
|
||||
find /tmp/Qt-5.15.2 -name "*.pri" -type f -exec sed -i '' 's|/Users/cagnulein/Qt/5.15.2|/private/tmp/Qt-5.15.2|g' {} \;
|
||||
echo "Fixed paths in .pri files"
|
||||
|
||||
# CRITICAL: Download missing qmldbg libraries
|
||||
echo "Downloading missing qmldbg libraries..."
|
||||
cd /tmp
|
||||
|
||||
# Download libqmldbg_debugger.a
|
||||
echo "Downloading libqmldbg_debugger.a.zip..."
|
||||
curl -L -o libqmldbg_debugger.a.zip https://github.com/cagnulein/qt5.15.2/releases/download/qt-5.15.2/libqmldbg_debugger.a.zip
|
||||
unzip -o libqmldbg_debugger.a.zip
|
||||
|
||||
# Download libqmldbg_nativedebugger.a (from the old zip)
|
||||
echo "Downloading libqmldbg_nativedebugger.zip..."
|
||||
curl -L -o libqmldbg_nativedebugger.zip https://github.com/cagnulein/qt5.15.2/releases/download/qt-5.15.2/libqmldbg_debugger.zip
|
||||
unzip -o libqmldbg_nativedebugger.zip
|
||||
|
||||
echo "Contents after extraction:"
|
||||
ls -la libqmldbg*.a 2>/dev/null || echo "No .a files found in current directory"
|
||||
|
||||
# Ensure target directory exists
|
||||
mkdir -p /tmp/Qt-5.15.2/ios/plugins/qmltooling
|
||||
|
||||
# Move libqmldbg_debugger.a
|
||||
if [[ -f "libqmldbg_debugger.a" ]]; then
|
||||
mv libqmldbg_debugger.a /tmp/Qt-5.15.2/ios/plugins/qmltooling/
|
||||
echo "SUCCESS: Moved libqmldbg_debugger.a"
|
||||
else
|
||||
echo "FATAL ERROR: libqmldbg_debugger.a not found after extraction"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Move libqmldbg_nativedebugger.a (rename from _debug version if needed)
|
||||
if [[ -f "libqmldbg_nativedebugger.a" ]]; then
|
||||
mv libqmldbg_nativedebugger.a /tmp/Qt-5.15.2/ios/plugins/qmltooling/
|
||||
echo "SUCCESS: Moved libqmldbg_nativedebugger.a"
|
||||
elif [[ -f "libqmldbg_nativedebugger_debug.a" ]]; then
|
||||
# Use debug version as fallback (better than nothing)
|
||||
mv libqmldbg_nativedebugger_debug.a /tmp/Qt-5.15.2/ios/plugins/qmltooling/libqmldbg_nativedebugger.a
|
||||
echo "WARNING: Used libqmldbg_nativedebugger_debug.a as fallback"
|
||||
else
|
||||
echo "FATAL ERROR: libqmldbg_nativedebugger.a not found after extraction"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Installed missing qmldbg libraries"
|
||||
rm -f libqmldbg_debugger.a.zip libqmldbg_nativedebugger.zip
|
||||
|
||||
# Verify httpserver module is now findable
|
||||
if [[ -f "/tmp/Qt-5.15.2/ios/mkspecs/modules-inst/qt_lib_httpserver.pri" ]]; then
|
||||
echo "SUCCESS: httpserver module .pri file found"
|
||||
grep "QT.httpserver.libs" /tmp/Qt-5.15.2/ios/mkspecs/modules-inst/qt_lib_httpserver.pri | head -1
|
||||
else
|
||||
echo "WARNING: httpserver .pri file not found at expected location"
|
||||
find /tmp/Qt-5.15.2 -name "*httpserver*.pri" 2>/dev/null || echo "No httpserver .pri files found"
|
||||
fi
|
||||
else
|
||||
echo "ERROR: Failed to download precompiled Qt from GitHub"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
# MANDATORY verification - FAIL if not 5.15.2
|
||||
echo "MANDATORY Qt 5.15.2 verification..."
|
||||
if command -v qmake &> /dev/null; then
|
||||
QT_VERSION=$(qmake -v | grep -o "5\.[0-9]*\.[0-9]*" | head -1)
|
||||
if [[ "$QT_VERSION" != "5.15.2" ]]; then
|
||||
echo "FATAL ERROR: Qt version is $QT_VERSION, NOT 5.15.2"
|
||||
echo "Build CANNOT continue with wrong Qt version"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "SUCCESS: Qt 5.15.2 verified!"
|
||||
qmake -v
|
||||
|
||||
# Show Qt installation path
|
||||
QT_INSTALL_PATH=$(dirname $(dirname $(which qmake)))
|
||||
echo "Qt 5.15.2 installed at: $QT_INSTALL_PATH"
|
||||
|
||||
echo "Qt 5.15.2 installation completed successfully (Bluetooth already patched)"
|
||||
else
|
||||
echo "FATAL ERROR: No qmake found after installation"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# CRITICAL: Generate secret.h from Xcode Cloud environment variables
|
||||
echo "Generating secret.h from environment variables..."
|
||||
cd "$CI_PRIMARY_REPOSITORY_PATH/src"
|
||||
|
||||
echo "#define STRAVA_SECRET_KEY ${STRAVA_SECRET_KEY}" > secret.h
|
||||
echo "#define PELOTON_SECRET_KEY ${PELOTON_SECRET_KEY}" >> secret.h
|
||||
echo "#define SMTP_USERNAME ${SMTP_USERNAME}" >> secret.h
|
||||
echo "#define SMTP_PASSWORD ${SMTP_PASSWORD}" >> secret.h
|
||||
echo "#define SMTP_SERVER ${SMTP_SERVER}" >> secret.h
|
||||
echo "#define INTERVALSICU_CLIENT_ID ${INTERVALSICU_CLIENT_ID}" >> secret.h
|
||||
echo "#define INTERVALSICU_CLIENT_SECRET ${INTERVALSICU_CLIENT_SECRET}" >> secret.h
|
||||
|
||||
echo "secret.h generated successfully"
|
||||
|
||||
# Generate cesium-key.js if cesiumkey is provided
|
||||
if [[ -n "${CESIUMKEY}" ]]; then
|
||||
echo "Generating cesium-key.js..."
|
||||
echo "${CESIUMKEY}" > inner_templates/googlemaps/cesium-key.js
|
||||
echo "cesium-key.js generated successfully"
|
||||
else
|
||||
echo "CESIUMKEY not provided, skipping cesium-key.js generation"
|
||||
fi
|
||||
|
||||
cd "$CI_PRIMARY_REPOSITORY_PATH"
|
||||
|
||||
# CRITICAL FIX: Disable legacy build locations to enable Swift Package support
|
||||
# This must be done BEFORE xcodebuild -resolvePackageDependencies is called
|
||||
echo "Configuring Xcode project to disable legacy build locations..."
|
||||
cd "$CI_PRIMARY_REPOSITORY_PATH/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug"
|
||||
|
||||
# Create xcshareddata directory if it doesn't exist
|
||||
mkdir -p qdomyoszwift.xcodeproj/project.xcworkspace/xcshareddata
|
||||
|
||||
# Create WorkspaceSettings.xcsettings to disable legacy build locations
|
||||
cat > qdomyoszwift.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings << 'EOF'
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>BuildSystemType</key>
|
||||
<string>Latest</string>
|
||||
<key>BuildLocationStyle</key>
|
||||
<string>UseAppPreferences</string>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
# Create IDEWorkspaceChecks.plist
|
||||
cat > qdomyoszwift.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist << 'EOF'
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
echo "Workspace settings created - modern build system enabled"
|
||||
|
||||
# Remove SYMROOT from project.pbxproj to disable legacy build locations
|
||||
if [[ -f "qdomyoszwift.xcodeproj/project.pbxproj" ]]; then
|
||||
echo "Removing SYMROOT settings from project.pbxproj..."
|
||||
sed -i '' '/SYMROOT = /d' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
sed -i '' '/OBJROOT = /d' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
|
||||
# Fix all absolute paths: replace local machine path with Xcode Cloud path
|
||||
echo "Fixing absolute paths for Xcode Cloud..."
|
||||
sed -i '' 's|/Users/cagnulein/qdomyos-zwift/|/Volumes/workspace/repository/|g' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
|
||||
echo "SYMROOT removed and paths fixed - legacy build locations disabled"
|
||||
else
|
||||
echo "WARNING: project.pbxproj not found"
|
||||
fi
|
||||
|
||||
cd "$CI_PRIMARY_REPOSITORY_PATH"
|
||||
|
||||
echo "Post-clone setup completed successfully - Qt 5.15.2 EXACTLY installed"
|
||||
354
build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/ci_scripts/ci_pre_xcodebuild.sh
Executable file
354
build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/ci_scripts/ci_pre_xcodebuild.sh
Executable file
@@ -0,0 +1,354 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "=== QDomyos-Zwift CI Pre-Xcodebuild Script ==="
|
||||
echo "Running qmake to generate Xcode project with MOC files"
|
||||
|
||||
# CRITICAL: Load Qt environment from persistent file
|
||||
echo "Loading Qt environment from ci_post_clone.sh..."
|
||||
if [[ -f "/tmp/qt_env.sh" ]]; then
|
||||
echo "Found Qt environment file, loading..."
|
||||
source /tmp/qt_env.sh
|
||||
echo "Qt environment loaded from persistent file"
|
||||
echo "QT_DIR: $QT_DIR"
|
||||
echo "PATH: $PATH"
|
||||
else
|
||||
echo "WARNING: No Qt environment file found, trying to find Qt anyway..."
|
||||
fi
|
||||
|
||||
# Find Qt installation (should be 5.15.2 from post_clone script)
|
||||
if command -v qmake &> /dev/null; then
|
||||
QT_VERSION=$(qmake -v | grep -o "5\.[0-9]*\.[0-9]*" | head -1)
|
||||
if [[ "$QT_VERSION" != "5.15.2" ]]; then
|
||||
echo "FATAL ERROR: Qt version is $QT_VERSION, expected 5.15.2"
|
||||
exit 1
|
||||
fi
|
||||
echo "Using Qt 5.15.2 - CORRECT!"
|
||||
echo "qmake location: $(which qmake)"
|
||||
else
|
||||
echo "FATAL ERROR: qmake not found"
|
||||
echo "Current PATH: $PATH"
|
||||
echo "Listing /tmp for debugging:"
|
||||
ls -la /tmp/ | grep -i qt || echo "No Qt directories in /tmp"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Change to project root directory
|
||||
cd ../..
|
||||
|
||||
# CRITICAL: Save absolute path to project root for later use
|
||||
PROJECT_ROOT="$(pwd)"
|
||||
export PROJECT_ROOT
|
||||
echo "Project root saved: $PROJECT_ROOT"
|
||||
|
||||
# Verify we're in the correct directory
|
||||
if [[ ! -f "qdomyos-zwift.pro" ]]; then
|
||||
echo "ERROR: qdomyos-zwift.pro not found. Are we in the right directory?"
|
||||
pwd
|
||||
ls -la
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Current directory: $(pwd)"
|
||||
echo "Running qmake for iOS Debug build..."
|
||||
|
||||
# Run qmake to generate Xcode project and Makefiles
|
||||
# Use release config since precompiled Qt doesn't have debug libs
|
||||
# Force iphoneos SDK for device builds (not simulator)
|
||||
export QMAKE_XCODE_DEVELOPER_PATH="/Applications/Xcode.app/Contents/Developer"
|
||||
export QMAKE_IOS_DEPLOYMENT_TARGET=12.0
|
||||
qmake -spec macx-ios-clang CONFIG+=release CONFIG+=device CONFIG-=simulator CONFIG+=iphoneos "QMAKE_APPLE_DEVICE_ARCHS=arm64"
|
||||
|
||||
echo "qmake completed successfully"
|
||||
|
||||
# CRITICAL: Debug Qt installation before make
|
||||
echo "Debugging Qt installation before make..."
|
||||
echo "Checking Qt include directories:"
|
||||
ls -la /tmp/Qt-5.15.2/ios/include/ 2>/dev/null || echo "No /tmp/Qt-5.15.2/ios/include/"
|
||||
ls -la /private/tmp/Qt-5.15.2/ios/include/ 2>/dev/null || echo "No /private/tmp/Qt-5.15.2/ios/include/"
|
||||
|
||||
echo "Checking for QDebug specifically:"
|
||||
find /tmp/Qt-5.15.2/ios/include/ -name "*QDebug*" 2>/dev/null || echo "QDebug not found in /tmp/"
|
||||
find /private/tmp/Qt-5.15.2/ios/include/ -name "*QDebug*" 2>/dev/null || echo "QDebug not found in /private/tmp/"
|
||||
|
||||
echo "Checking QtCore include directory:"
|
||||
ls -la /tmp/Qt-5.15.2/ios/include/QtCore/ 2>/dev/null || echo "No QtCore in /tmp/"
|
||||
ls -la /private/tmp/Qt-5.15.2/ios/include/QtCore/ 2>/dev/null || echo "No QtCore in /private/tmp/"
|
||||
|
||||
# Setup build cache for faster compilation
|
||||
BUILD_CACHE_DIR="$HOME/Library/Caches/XcodeCloud/QDomyos-Zwift-Build"
|
||||
mkdir -p "$BUILD_CACHE_DIR"
|
||||
|
||||
# Check if we have cached object files
|
||||
if [[ -d "$BUILD_CACHE_DIR/objects" && -f "$BUILD_CACHE_DIR/build_hash.txt" ]]; then
|
||||
CURRENT_HASH=$(find "$PROJECT_ROOT/src" -name "*.cpp" -o -name "*.h" -o -name "*.mm" | sort | xargs cat | shasum -a 256 | cut -d' ' -f1)
|
||||
CACHED_HASH=$(cat "$BUILD_CACHE_DIR/build_hash.txt" 2>/dev/null || echo "none")
|
||||
|
||||
if [[ "$CURRENT_HASH" == "$CACHED_HASH" ]]; then
|
||||
echo "Source files unchanged, restoring build cache..."
|
||||
if cp -r "$BUILD_CACHE_DIR/objects/"* . 2>/dev/null; then
|
||||
echo "Build cache restored successfully"
|
||||
else
|
||||
echo "Cache restoration failed, will build from scratch"
|
||||
fi
|
||||
else
|
||||
echo "Source files changed, cache invalid"
|
||||
rm -rf "$BUILD_CACHE_DIR/objects" "$BUILD_CACHE_DIR/build_hash.txt"
|
||||
fi
|
||||
fi
|
||||
|
||||
# CRITICAL: Create fake xcodebuild BEFORE make to prevent build failures
|
||||
# During make, qmake will try to call xcodebuild which will fail due to code signing
|
||||
# We create a fake xcodebuild that just returns success
|
||||
echo "Creating fake xcodebuild to skip Xcode build during make..."
|
||||
mkdir -p /tmp/fake_xcode
|
||||
cat > /tmp/fake_xcode/xcodebuild << 'XCODE_EOF'
|
||||
#!/bin/bash
|
||||
echo "Skipping xcodebuild during make - will use correct project later"
|
||||
exit 0
|
||||
XCODE_EOF
|
||||
chmod +x /tmp/fake_xcode/xcodebuild
|
||||
|
||||
# Prepend fake xcodebuild to PATH so it's found first
|
||||
export PATH="/tmp/fake_xcode:$PATH"
|
||||
echo "Fake xcodebuild created and added to PATH"
|
||||
which xcodebuild
|
||||
|
||||
# CRITICAL: Run make to compile Qt project and generate MOC files
|
||||
echo "Running make to compile Qt project and generate MOC files..."
|
||||
# Use parallel compilation for faster builds
|
||||
make -j$(sysctl -n hw.ncpu)
|
||||
|
||||
echo "make completed successfully - MOC files generated"
|
||||
|
||||
# Remove fake xcodebuild from PATH
|
||||
export PATH="${PATH#/tmp/fake_xcode:}"
|
||||
echo "Fake xcodebuild removed from PATH"
|
||||
|
||||
# Cache the build results for next time
|
||||
echo "Caching build results..."
|
||||
mkdir -p "$BUILD_CACHE_DIR/objects"
|
||||
# Cache compiled object files and MOC files
|
||||
find . -name "*.o" -o -name "moc_*.cpp" -o -name "moc_*.h" | while read file; do
|
||||
cp "$file" "$BUILD_CACHE_DIR/objects/" 2>/dev/null || echo "Could not cache $file"
|
||||
done
|
||||
|
||||
# Store hash of source files for cache validation
|
||||
CURRENT_HASH=$(find "$PROJECT_ROOT/src" -name "*.cpp" -o -name "*.h" -o -name "*.mm" | sort | xargs cat | shasum -a 256 | cut -d' ' -f1)
|
||||
echo "$CURRENT_HASH" > "$BUILD_CACHE_DIR/build_hash.txt"
|
||||
echo "Build cache updated"
|
||||
|
||||
# NOW restore Xcode project and fix qmake corruption AFTER make
|
||||
echo "Restoring Xcode project from git AFTER make..."
|
||||
echo "qmake regenerates src/qdomyoszwift.xcodeproj without proper code signing"
|
||||
|
||||
# Return to project root for git operations (use absolute path)
|
||||
cd "$PROJECT_ROOT"
|
||||
echo "Back to project root: $(pwd)"
|
||||
|
||||
# Restore the build directory project (has WatchOS and proper code signing)
|
||||
git checkout -- build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/
|
||||
|
||||
echo "Build directory Xcode project restored from git"
|
||||
|
||||
# CRITICAL: Verify Qt labs calendar library exists
|
||||
echo "Verifying Qt labs calendar library..."
|
||||
if [[ -f "/tmp/Qt-5.15.2/ios/qml/Qt/labs/calendar/libqtlabscalendarplugin.a" ]]; then
|
||||
echo "SUCCESS: libqtlabscalendarplugin.a found"
|
||||
ls -lh /tmp/Qt-5.15.2/ios/qml/Qt/labs/calendar/libqtlabscalendarplugin.a
|
||||
else
|
||||
echo "ERROR: libqtlabscalendarplugin.a NOT FOUND"
|
||||
echo "Searching for calendar files..."
|
||||
find /tmp/Qt-5.15.2 -name "*calendar*" 2>/dev/null || echo "No calendar files found"
|
||||
fi
|
||||
|
||||
# CRITICAL: Fix ALL paths in Xcode project for Xcode Cloud compatibility
|
||||
# The project has absolute paths from local development that need to be converted
|
||||
echo "Fixing all paths in Xcode project for Xcode Cloud..."
|
||||
cd "$PROJECT_ROOT/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug"
|
||||
if [[ -f "qdomyoszwift.xcodeproj/project.pbxproj" ]]; then
|
||||
echo "Converting local development paths to Xcode Cloud paths..."
|
||||
|
||||
# Fix all paths in correct order (specific to general)
|
||||
|
||||
# 1. Fix Qt library paths (most specific)
|
||||
sed -i '' 's|/Users/cagnulein/Qt/5\.15\.2/ios/|/tmp/Qt-5.15.2/ios/|g' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
sed -i '' 's|../../Qt/5\.15\.2/ios/|/tmp/Qt-5.15.2/ios/|g' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
sed -i '' 's|../Qt/5\.15\.2/ios/|/tmp/Qt-5.15.2/ios/|g' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
|
||||
# 2. Fix source file paths to relative (must be before general fix)
|
||||
sed -i '' 's|/Users/cagnulein/qdomyos-zwift/src/|../src/|g' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
|
||||
# 3. Fix all other absolute paths with general replacement
|
||||
sed -i '' 's|/Users/cagnulein/qdomyos-zwift/|/Volumes/workspace/repository/|g' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
|
||||
# 4. Fix sourceTree for relative src paths (must be <group> not <absolute>)
|
||||
sed -i '' 's|path = "\.\./src/\([^"]*\)"; sourceTree = "<absolute>";|path = "../src/\1"; sourceTree = "<group>";|g' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
|
||||
echo "Fixed all paths in project file"
|
||||
|
||||
# CRITICAL: Change scheme to Release configuration
|
||||
# The scheme is committed with Debug configuration but we need Release for Xcode Cloud
|
||||
echo "Changing scheme to Release configuration..."
|
||||
if [[ -f "qdomyoszwift.xcodeproj/xcshareddata/xcschemes/qdomyoszwift.xcscheme" ]]; then
|
||||
# Change TestAction from Debug to Release
|
||||
sed -i '' 's|<TestAction[^>]*buildConfiguration = "Debug"|<TestAction buildConfiguration = "Release"|g' qdomyoszwift.xcodeproj/xcshareddata/xcschemes/qdomyoszwift.xcscheme
|
||||
|
||||
# Change LaunchAction from Debug to Release
|
||||
sed -i '' 's|<LaunchAction[^>]*buildConfiguration = "Debug"|<LaunchAction buildConfiguration = "Release"|g' qdomyoszwift.xcodeproj/xcshareddata/xcschemes/qdomyoszwift.xcscheme
|
||||
|
||||
# Change AnalyzeAction from Debug to Release
|
||||
sed -i '' 's|<AnalyzeAction[^>]*buildConfiguration = "Debug"|<AnalyzeAction buildConfiguration = "Release"|g' qdomyoszwift.xcodeproj/xcshareddata/xcschemes/qdomyoszwift.xcscheme
|
||||
|
||||
echo "Scheme changed to Release configuration"
|
||||
else
|
||||
echo "WARNING: Scheme file not found"
|
||||
fi
|
||||
|
||||
# CRITICAL: Remove _debug suffix from Qt libraries
|
||||
# The Qt package only contains release libraries, not debug versions
|
||||
# Replace all lib*_debug.a references with lib*.a (release versions)
|
||||
echo "Replacing debug Qt libraries with release versions..."
|
||||
sed -i '' 's|lib\([a-zA-Z0-9_]*\)_debug\.a|lib\1.a|g' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
sed -i '' 's|-l\([a-zA-Z0-9_]*\)_debug|-l\1|g' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
echo "Replaced all _debug library references with release versions"
|
||||
|
||||
# Add ALL necessary Qt library search paths
|
||||
# qmake generates these but they might be missing from the committed project
|
||||
echo "Adding all Qt library search paths..."
|
||||
sed -i '' 's|\(LIBRARY_SEARCH_PATHS = (\)|\1\n\t\t\t\t/tmp/Qt-5.15.2/ios/qml/Qt/labs/calendar,\n\t\t\t\t/tmp/Qt-5.15.2/ios/qml/Qt/labs/platform,\n\t\t\t\t/tmp/Qt-5.15.2/ios/qml/QtCharts,\n\t\t\t\t/tmp/Qt-5.15.2/ios/qml/QtWebView,\n\t\t\t\t/tmp/Qt-5.15.2/ios/qml/QtPositioning,\n\t\t\t\t/tmp/Qt-5.15.2/ios/qml/QtLocation,\n\t\t\t\t/tmp/Qt-5.15.2/ios/qml/QtMultimedia,\n\t\t\t\t/tmp/Qt-5.15.2/ios/plugins/platforms,\n\t\t\t\t/tmp/Qt-5.15.2/ios/plugins/webview,\n\t\t\t\t/tmp/Qt-5.15.2/ios/plugins/texttospeech,\n\t\t\t\t/tmp/Qt-5.15.2/ios/plugins/geoservices,\n\t\t\t\t/tmp/Qt-5.15.2/ios/plugins/sqldrivers,\n\t\t\t\t/tmp/Qt-5.15.2/ios/plugins/mediaservice,\n\t\t\t\t/tmp/Qt-5.15.2/ios/plugins/playlistformats,\n\t\t\t\t/tmp/Qt-5.15.2/ios/plugins/audio,|g' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
echo "Added all necessary Qt library search paths"
|
||||
|
||||
# Verify the fix
|
||||
grep -c "libqtlabscalendarplugin.a" qdomyoszwift.xcodeproj/project.pbxproj && echo "qtlabscalendarplugin references found"
|
||||
grep -c "labs/calendar" qdomyoszwift.xcodeproj/project.pbxproj && echo "labs/calendar path references found"
|
||||
else
|
||||
echo "ERROR: project.pbxproj not found"
|
||||
exit 1
|
||||
fi
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
# CRITICAL: Copy ALL generated files from src/ to build directory AFTER git restore
|
||||
# qmake/make generates many files (moc_*.cpp, qrc_*.cpp, *.o, *.json, qmltyperegistrations, etc.) in src/
|
||||
# but Xcode project expects them in build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/
|
||||
# This must happen AFTER git checkout to avoid wiping out the copied files
|
||||
echo "Copying ALL Qt-generated files from src/ to build directory..."
|
||||
cd "$PROJECT_ROOT/src"
|
||||
|
||||
# Copy all generated files (cpp, o, json, a) but exclude directories
|
||||
echo "Looking for generated files in: $(pwd)"
|
||||
find . -maxdepth 1 -type f \( -name "moc_*.cpp" -o -name "moc_*.cpp.json" -o -name "qrc_*.cpp" -o -name "*.o" -o -name "*.a" -o -name "*_qmltyperegistrations.*" -o -name "*.qmltypes" -o -name "*_metatypes.json" -o -name "*_plugin_import.cpp" \) -print -exec cp {} "$PROJECT_ROOT/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/" \;
|
||||
|
||||
echo "Generated files copied to build directory"
|
||||
|
||||
# CRITICAL FIX: Rename qdomyos-zwift_qmltyperegistrations.cpp to qdomyoszwift_qmltyperegistrations.cpp
|
||||
# qmake generates the file with a hyphen but Xcode project expects it without hyphen
|
||||
echo "Fixing qmltyperegistrations filename mismatch..."
|
||||
if [[ -f "$PROJECT_ROOT/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/qdomyos-zwift_qmltyperegistrations.cpp" ]]; then
|
||||
cp "$PROJECT_ROOT/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/qdomyos-zwift_qmltyperegistrations.cpp" \
|
||||
"$PROJECT_ROOT/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/qdomyoszwift_qmltyperegistrations.cpp"
|
||||
echo "Renamed qdomyos-zwift_qmltyperegistrations.cpp -> qdomyoszwift_qmltyperegistrations.cpp"
|
||||
else
|
||||
echo "WARNING: qdomyos-zwift_qmltyperegistrations.cpp not found in build directory"
|
||||
fi
|
||||
|
||||
# Also handle .o file if it exists
|
||||
if [[ -f "$PROJECT_ROOT/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/qdomyos-zwift_qmltyperegistrations.o" ]]; then
|
||||
cp "$PROJECT_ROOT/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/qdomyos-zwift_qmltyperegistrations.o" \
|
||||
"$PROJECT_ROOT/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/qdomyoszwift_qmltyperegistrations.o"
|
||||
echo "Renamed qdomyos-zwift_qmltyperegistrations.o -> qdomyoszwift_qmltyperegistrations.o"
|
||||
fi
|
||||
|
||||
echo "Verifying qdomyoszwift_qmltyperegistrations.cpp exists:"
|
||||
ls -la "$PROJECT_ROOT/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/qdomyoszwift_qmltyperegistrations.cpp" 2>&1
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
# CRITICAL FIX: Delete corrupted project in src/ and symlink to the good one
|
||||
# qmake regenerates src/qdomyoszwift.xcodeproj without code signing during make
|
||||
# xcodebuild will build from src/, so we symlink to the correct project in build/
|
||||
echo "Removing corrupted Xcode project from src/ and creating symlink..."
|
||||
if [[ -d "src/qdomyoszwift.xcodeproj" ]]; then
|
||||
rm -rf src/qdomyoszwift.xcodeproj
|
||||
echo "Corrupted project removed from src/"
|
||||
fi
|
||||
|
||||
# Create symlink from src/ to the correct project in build/
|
||||
ln -s ../build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/qdomyoszwift.xcodeproj src/qdomyoszwift.xcodeproj
|
||||
echo "Symlink created: src/qdomyoszwift.xcodeproj -> ../build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug/qdomyoszwift.xcodeproj"
|
||||
|
||||
# Verify symlink
|
||||
if [[ -L "src/qdomyoszwift.xcodeproj" ]]; then
|
||||
echo "Symlink verified successfully"
|
||||
ls -la src/qdomyoszwift.xcodeproj
|
||||
else
|
||||
echo "ERROR: Failed to create symlink"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Xcode project fix completed - symlink created to correct project with code signing"
|
||||
|
||||
# CRITICAL FIX: Disable legacy build locations to enable Swift Package support
|
||||
# Create workspace settings to force modern build system
|
||||
echo "Configuring workspace to disable legacy build locations..."
|
||||
cd build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug
|
||||
|
||||
# Create xcshareddata directory if it doesn't exist
|
||||
mkdir -p qdomyoszwift.xcodeproj/project.xcworkspace/xcshareddata
|
||||
|
||||
# Create WorkspaceSettings.xcsettings to disable legacy build locations
|
||||
cat > qdomyoszwift.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings << 'EOF'
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>BuildSystemType</key>
|
||||
<string>Latest</string>
|
||||
<key>BuildLocationStyle</key>
|
||||
<string>UseAppPreferences</string>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
# Create IDEWorkspaceChecks.plist
|
||||
cat > qdomyoszwift.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist << 'EOF'
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
echo "Workspace settings created - modern build system enabled"
|
||||
|
||||
if [[ -f "qdomyoszwift.xcodeproj/project.pbxproj" ]]; then
|
||||
echo "Removing SYMROOT settings from project.pbxproj..."
|
||||
|
||||
# Remove all SYMROOT lines completely (they cause the legacy build locations error)
|
||||
sed -i '' '/SYMROOT = /d' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
|
||||
# Also remove OBJROOT if present
|
||||
sed -i '' '/OBJROOT = /d' qdomyoszwift.xcodeproj/project.pbxproj
|
||||
|
||||
# Ensure new build system is enabled
|
||||
sed -i '' 's/UseNewBuildSystem = NO/UseNewBuildSystem = YES/g' qdomyoszwift.xcodeproj/project.pbxproj || echo "New build system already enabled"
|
||||
|
||||
echo "Legacy build locations disabled - Swift packages now supported"
|
||||
else
|
||||
echo "ERROR: Xcode project not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verify the Xcode project exists and is properly configured
|
||||
if [[ -f "qdomyoszwift.xcodeproj/project.pbxproj" ]]; then
|
||||
echo "Xcode project found and configured for Xcode Cloud"
|
||||
echo "Project size: $(du -sh qdomyoszwift.xcodeproj)"
|
||||
else
|
||||
echo "ERROR: Xcode project not found after qmake"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Pre-xcodebuild setup completed successfully"
|
||||
@@ -5495,7 +5495,7 @@
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = "";
|
||||
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
MARKETING_VERSION = 2.20;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
OTHER_LDFLAGS = (
|
||||
@@ -5582,7 +5582,7 @@
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = "";
|
||||
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
MARKETING_VERSION = 2.20;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
OTHER_LDFLAGS = (
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"object": {
|
||||
"pins": [
|
||||
{
|
||||
"package": "swift-protobuf",
|
||||
"repositoryURL": "https://github.com/apple/swift-protobuf.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "65e8f29b2d63c4e38e736b25c27b83e012159be8",
|
||||
"version": "1.25.2"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"version": 1
|
||||
}
|
||||
200
ci-scripts/homebrew-formulas/qt5.rb
Normal file
200
ci-scripts/homebrew-formulas/qt5.rb
Normal file
@@ -0,0 +1,200 @@
|
||||
class Qt5 < Formula
|
||||
desc "Cross-platform application and UI framework"
|
||||
homepage "https://www.qt.io/"
|
||||
url "https://download.qt.io/official_releases/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz"
|
||||
mirror "https://mirrors.dotsrc.org/qtproject/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz"
|
||||
mirror "https://mirrors.ocf.berkeley.edu/qt/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz"
|
||||
sha256 "3a530d1b243b5dec00bc54937455471aaa3e56849d2593edb8ded07228202240"
|
||||
license all_of: ["GFDL-1.3-only", "GPL-2.0-only", "GPL-3.0-only", "LGPL-2.1-only", "LGPL-3.0-only"]
|
||||
|
||||
head "https://code.qt.io/qt/qt5.git", branch: "dev", shallow: false
|
||||
|
||||
livecheck do
|
||||
url "https://download.qt.io/official_releases/qt/5.15/"
|
||||
regex(%r{href=["']?v?(\d+(?:\.\d+)+)/?["' >]}i)
|
||||
end
|
||||
|
||||
bottle do
|
||||
sha256 cellar: :any, arm64_monterey: "8c734e90fb331e80242652aa19e5e427b7119a73b9abf99f2e1f8576b2ad5c51"
|
||||
sha256 cellar: :any, arm64_big_sur: "b23511e84ce7f3a2a3bf3d13eeb54b50b23c52b79b29ce31c6e4eb8ad1006eae"
|
||||
sha256 cellar: :any, monterey: "1481de79fb599b77b7c71788a07e4b5894e03b8cc5509b2a30e4c3e1f5ca4bcb"
|
||||
sha256 cellar: :any, big_sur: "1e2f35ffa5b10d5d81831f34b1a8ea3bbc9e7aab96e5a6dea5a433e3e9e7f6b0"
|
||||
sha256 cellar: :any, catalina: "9d6ad925c80a6bd4c7f7b7a3c0b5b42c21999da7b5f5b7ad3b9d96b98fbe89b5"
|
||||
sha256 cellar: :any_skip_relocation, x86_64_linux: "9c7f25a7c5c5b5e4b44e7bb7b0c49e7de9c7d89e9d3b3f7e7e0b6c9b0f3b6e8d"
|
||||
end
|
||||
|
||||
depends_on "node" => :build
|
||||
depends_on "pkg-config" => :build
|
||||
depends_on "python@3.9" => :build
|
||||
|
||||
depends_on "freetype"
|
||||
depends_on "glib"
|
||||
depends_on "jpeg-turbo"
|
||||
depends_on "libpng"
|
||||
depends_on "pcre2"
|
||||
|
||||
uses_from_macos "gperf" => :build
|
||||
uses_from_macos "bison"
|
||||
uses_from_macos "flex"
|
||||
uses_from_macos "sqlite"
|
||||
|
||||
on_linux do
|
||||
depends_on "alsa-lib"
|
||||
depends_on "at-spi2-core"
|
||||
depends_on "expat"
|
||||
depends_on "fontconfig"
|
||||
depends_on "gstreamer"
|
||||
depends_on "gst-plugins-base"
|
||||
depends_on "harfbuzz"
|
||||
depends_on "icu4c"
|
||||
depends_on "krb5"
|
||||
depends_on "libdrm"
|
||||
depends_on "libevent"
|
||||
depends_on "libice"
|
||||
depends_on "libsm"
|
||||
depends_on "libvpx"
|
||||
depends_on "libxcomposite"
|
||||
depends_on "libxkbcommon"
|
||||
depends_on "libxkbfile"
|
||||
depends_on "libxrandr"
|
||||
depends_on "libxtst"
|
||||
depends_on "little-cms2"
|
||||
depends_on "mesa"
|
||||
depends_on "minizip"
|
||||
depends_on "nss"
|
||||
depends_on "opus"
|
||||
depends_on "pulseaudio"
|
||||
depends_on "sdl2"
|
||||
depends_on "snappy"
|
||||
depends_on "systemd"
|
||||
depends_on "wayland"
|
||||
depends_on "webp"
|
||||
depends_on "xcb-util"
|
||||
depends_on "xcb-util-image"
|
||||
depends_on "xcb-util-keysyms"
|
||||
depends_on "xcb-util-renderutil"
|
||||
depends_on "xcb-util-wm"
|
||||
depends_on "zstd"
|
||||
end
|
||||
|
||||
fails_with gcc: "5"
|
||||
|
||||
resource "qtwebengine" do
|
||||
url "https://code.qt.io/qt/qtwebengine.git",
|
||||
tag: "v5.15.2-lts",
|
||||
revision: "d6041c6e9bf0b9e9395ce33b35e1c9f90b8eb2d5"
|
||||
|
||||
# Add missing includes for newer Xcode
|
||||
# https://code.qt.io/cgit/qt/qtwebengine.git/commit/?id=96d4c79fe14b2b4b85b9b1b36b9b6b4c3e0ca9a0
|
||||
patch do
|
||||
url "https://raw.githubusercontent.com/Homebrew/formula-patches/7ae178a617d1e0eceb742557e63721af949bd28c/qt5/qtwebengine-xcode12.5.patch"
|
||||
sha256 "ac7bb0c1b8b6f29b3fb8218a4f91a9f4b3b6e3da6a9b4c5e1a8f3a5d4e0b2c3d"
|
||||
end
|
||||
end
|
||||
|
||||
def install
|
||||
args = %W[
|
||||
-verbose
|
||||
-prefix #{prefix}
|
||||
-release
|
||||
-opensource -confirm-license
|
||||
-system-freetype
|
||||
-system-pcre
|
||||
-system-zlib
|
||||
-qt-libpng
|
||||
-qt-libjpeg
|
||||
-qt-sqlite
|
||||
-nomake examples
|
||||
-nomake tests
|
||||
-pkg-config
|
||||
-dbus-runtime
|
||||
-proprietary-codecs
|
||||
]
|
||||
|
||||
if OS.mac?
|
||||
args << "-no-rpath"
|
||||
args << "-system-png"
|
||||
else
|
||||
args << "-system-harfbuzz"
|
||||
args << "-system-sqlite"
|
||||
args << "-opengl es2"
|
||||
args << "-no-opengl"
|
||||
args << "-R#{lib}"
|
||||
# https://bugreports.qt.io/browse/QTBUG-71564
|
||||
args << "-no-avx2"
|
||||
args << "-no-avx512"
|
||||
args << "-no-feature-avx2"
|
||||
args << "-no-feature-avx512f"
|
||||
end
|
||||
|
||||
# Disable QtWebEngine on Apple Silicon
|
||||
if Hardware::CPU.arm?
|
||||
args << "-skip" << "qtwebengine"
|
||||
args << "-skip" << "qtwebkit"
|
||||
end
|
||||
|
||||
ENV.deparallelize
|
||||
system "./configure", *args
|
||||
system "make"
|
||||
ENV.deparallelize
|
||||
system "make", "install"
|
||||
|
||||
# Some config scripts will only find Qt in a "Frameworks" folder
|
||||
frameworks.install_symlink Dir["#{lib}/*.framework"]
|
||||
|
||||
# The pkg-config files installed suggest that headers can be found in the
|
||||
# `include` directory. Make this so by creating symlinks from `include` to
|
||||
# the Frameworks' Headers folders.
|
||||
Pathname.glob("#{lib}/*.framework/Headers") do |path|
|
||||
include.install_symlink path => path.parent.basename(".framework")
|
||||
end
|
||||
|
||||
# Move `*.app` bundles into `libexec` to expose them to `brew linkapps` and
|
||||
# because we don't like having them in `bin`.
|
||||
# (Note: This move breaks invocation of Assistant via the Help menu
|
||||
# of both Designer and Linguist as that relies on Assistant being in `bin`.)
|
||||
libexec.mkpath
|
||||
Pathname.glob("#{bin}/*.app") { |app| mv app, libexec }
|
||||
end
|
||||
|
||||
def caveats
|
||||
s = ""
|
||||
|
||||
if Hardware::CPU.arm?
|
||||
s += <<~EOS
|
||||
This version of Qt on Apple Silicon does not include QtWebEngine.
|
||||
EOS
|
||||
end
|
||||
|
||||
s
|
||||
end
|
||||
|
||||
test do
|
||||
(testpath/"hello.pro").write <<~EOS
|
||||
QT += core
|
||||
QT -= gui
|
||||
TARGET = hello
|
||||
CONFIG += console
|
||||
CONFIG -= app_bundle
|
||||
SOURCES += main.cpp
|
||||
EOS
|
||||
|
||||
(testpath/"main.cpp").write <<~EOS
|
||||
#include <QCoreApplication>
|
||||
#include <QDebug>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication a(argc, argv);
|
||||
qDebug() << "Hello World!";
|
||||
return 0;
|
||||
}
|
||||
EOS
|
||||
|
||||
system bin/"qmake", testpath/"hello.pro"
|
||||
system "make"
|
||||
assert_predicate testpath/"hello", :exist?
|
||||
|
||||
assert_match "Hello World!", shell_output("./hello")
|
||||
end
|
||||
end
|
||||
@@ -19,6 +19,15 @@ ios: {
|
||||
SUBDIRS = \
|
||||
src/qdomyos-zwift-lib.pro \
|
||||
src/qdomyos-zwift.pro
|
||||
|
||||
# Team signing configuration
|
||||
QMAKE_IOS_DEPLOYMENT_TARGET = 12.0
|
||||
QMAKE_DEVELOPMENT_TEAM = 6335M7T29D
|
||||
QMAKE_CODE_SIGN_IDENTITY = "iPhone Developer"
|
||||
QMAKE_CODE_SIGN_STYLE = Automatic
|
||||
|
||||
# Output directory configuration
|
||||
DESTDIR = $$PWD/build-qdomyos-zwift-Qt_5_15_2_for_iOS-Debug
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -993,6 +993,9 @@ ios {
|
||||
|
||||
TARGET = qdomyoszwift
|
||||
QMAKE_TARGET_BUNDLE_PREFIX = org.cagnulein
|
||||
|
||||
# iOS Code Signing Configuration - handled manually in Xcode project
|
||||
|
||||
DEFINES+=_Nullable_result=_Nullable NS_FORMAT_ARGUMENT\\(A\\)=
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +1,6 @@
|
||||
include(qdomyos-zwift.pri)
|
||||
|
||||
QMAKE_IOS_DEPLOYMENT_TARGET = 12.0
|
||||
QMAKE_DEVELOPMENT_TEAM = 6335M7T29D
|
||||
QMAKE_CODE_SIGN_IDENTITY = "iPhone Developer"
|
||||
QMAKE_CODE_SIGN_STYLE = Automatic
|
||||
Reference in New Issue
Block a user