Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,13 @@ jobs:
name: Tests
runs-on: macos-15
timeout-minutes: 25
env:
DEVELOPER_DIR: /Applications/Xcode_16.4.app/Contents/Developer
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Initialize selected Xcode
timeout-minutes: 5
run: /bin/bash scripts/prepare_ci_xcode.sh
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
with:
python-version: "3.13"
Expand All @@ -29,6 +34,8 @@ jobs:
run: |
python -m pip install --disable-pip-version-check --upgrade pip
python -m pip install --disable-pip-version-check --editable .
- name: Verify Apple-tool readiness
run: python -m scripts.verify_apple_tool_readiness
- name: Run test suite
run: python -m unittest discover -s tests -v
- name: Validate Python modules
Expand All @@ -45,3 +52,7 @@ jobs:
env:
QT_QPA_PLATFORM: offscreen
run: python -m ios_developer_toolkit --toolkit-internal-smoke-test
- name: Validate workspace layouts and themes
env:
QT_QPA_PLATFORM: offscreen
run: python -m ios_developer_toolkit --toolkit-internal-ui-check "$RUNNER_TEMP/ui-check"
34 changes: 34 additions & 0 deletions .github/workflows/frozen-macos-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,35 @@ on:
pull_request:
paths:
- ".github/workflows/frozen-macos-smoke.yml"
- ".github/workflows/release-macos.yml"
- "LICENSE"
- "SOURCE_AVAILABILITY.md"
- "THIRD_PARTY_NOTICES.md"
- "ios_developer_toolkit/**"
- "macos/**"
- "packaging/**"
- "requirements/**"
- "scripts/build_macos_release.sh"
- "scripts/prepare_ci_xcode.sh"
- "scripts/patch_nuitka_probe.py"
- "scripts/build_qt_cocoa_plugin.py"
- "scripts/verify_qt_cocoa_accessibility.py"
- "scripts/qt_cocoa_packaging.py"
- "scripts/qt-cocoa-ownership-6.9.3.patch"
- "scripts/build_restore_helpers.sh"
- "scripts/build_restore_helpers_vendor.sh"
- "scripts/restore_helpers_verified_tls.patch"
- "scripts/embed_restore_helpers.py"
- "scripts/restore_helper_metadata.py"
- "scripts/archive_restore_helper_sources.py"
- "scripts/augment_restore_helper_sbom.py"
- "scripts/verify_restore_helpers.py"
- "scripts/verify_archived_restore_sources.py"
- "scripts/collect_third_party_licenses.py"
- "scripts/verify_release_metadata.py"
- "scripts/verify_macos_bundle.py"
- "scripts/verify_command_catalog.py"
- "scripts/verify_apple_tool_readiness.py"
- "pyproject.toml"
- "tests/**"
push:
Expand Down Expand Up @@ -42,8 +62,13 @@ jobs:
python_architecture: x64
runs-on: ${{ matrix.runner }}
timeout-minutes: 90
env:
DEVELOPER_DIR: /Applications/Xcode_16.4.app/Contents/Developer
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Initialize selected Xcode
timeout-minutes: 5
run: /bin/bash scripts/prepare_ci_xcode.sh
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
with:
python-version: "3.13"
Expand All @@ -55,6 +80,14 @@ jobs:
key: nuitka-${{ runner.os }}-${{ matrix.architecture }}-${{ hashFiles('pyproject.toml', 'requirements/**', 'packaging/**') }}
restore-keys: |
nuitka-${{ runner.os }}-${{ matrix.architecture }}-
- name: Prepare native helper build tools
env:
HOMEBREW_NO_AUTO_UPDATE: "1"
run: |
brew install autoconf automake libtool pkg-config cmake sevenzip
for tool in autoconf autom4te automake glibtoolize pkg-config cmake 7zz; do
command -v "$tool"
done
- name: Build the frozen application and run embedded checks
env:
MACOSX_DEPLOYMENT_TARGET: "13.0"
Expand All @@ -66,3 +99,4 @@ jobs:
run: |
find "$RUNNER_TEMP/release-smoke" -maxdepth 1 -type f -name '*.zip' -size +0c -print -quit | grep -q .
find "$RUNNER_TEMP/release-smoke" -maxdepth 1 -type f -name '*.cdx.json' -size +0c -print -quit | grep -q .
find "$RUNNER_TEMP/release-smoke" -maxdepth 1 -type f -name '*.tar.gz' -size +0c -print -quit | grep -q .
22 changes: 21 additions & 1 deletion .github/workflows/release-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,13 @@ jobs:
python_architecture: x64
runs-on: ${{ matrix.runner }}
timeout-minutes: 90
env:
DEVELOPER_DIR: /Applications/Xcode_16.4.app/Contents/Developer
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Initialize selected Xcode
timeout-minutes: 5
run: /bin/bash scripts/prepare_ci_xcode.sh
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
with:
python-version: "3.13"
Expand All @@ -36,17 +41,32 @@ jobs:
key: nuitka-${{ runner.os }}-${{ matrix.architecture }}-${{ hashFiles('pyproject.toml', 'requirements/**', 'packaging/**') }}
restore-keys: |
nuitka-${{ runner.os }}-${{ matrix.architecture }}-
- name: Prepare native helper build tools
env:
HOMEBREW_NO_AUTO_UPDATE: "1"
run: |
brew install autoconf automake libtool pkg-config cmake sevenzip
for tool in autoconf autom4te automake glibtoolize pkg-config cmake 7zz; do
command -v "$tool"
done
- name: Build and verify native application
env:
MACOSX_DEPLOYMENT_TARGET: "13.0"
NUITKA_CACHE_DIR: ${{ runner.temp }}/nuitka-cache
run: ./scripts/build_macos_release.sh "${GITHUB_REF_NAME#v}" release-assets python3
- name: Verify architecture-specific helper source archive
env:
TOOLKIT_ARCHITECTURE: ${{ matrix.architecture }}
run: |
test -s "release-assets/iOS-Developer-Toolkit-restore-helper-sources-${GITHUB_REF_NAME}-macOS-${TOOLKIT_ARCHITECTURE}.tar.gz"
test -s "release-assets/iOS-Developer-Toolkit-qt-cocoa-sources-${GITHUB_REF_NAME}-macOS-${TOOLKIT_ARCHITECTURE}.tar.gz"
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
with:
name: macos-${{ matrix.architecture }}
path: |
release-assets/*.zip
release-assets/*.cdx.json
release-assets/*.tar.gz
if-no-files-found: error

release:
Expand All @@ -68,7 +88,7 @@ jobs:
merge-multiple: true
- name: Create checksums
working-directory: release-assets
run: sha256sum *.zip *.cdx.json > SHA256SUMS.txt
run: sha256sum *.zip *.cdx.json *.tar.gz > SHA256SUMS.txt
- name: Attest build provenance
uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2
with:
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
.venv/
venv/
build/
build-output/
dist/
site/
output/
Expand Down Expand Up @@ -46,6 +47,7 @@ nuitka-crash-report.xml
*.cer
*.dmg
*.ipa
*.ipsw
*.mobileconfig
*.trustcache
BuildManifest.plist
Expand Down
20 changes: 17 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,29 @@ Use a bug report for reproducible defects, a feature request for a bounded workf

## Development setup

The supported development host is macOS 13 or later with Python 3.10 or later. Create an isolated environment and install the project in editable mode:
The application supports macOS 13 or later with Python 3.10 through 3.13. Building
the native Cocoa accessibility repair requires Python 3.13, CMake, `7zz`, and Xcode
command-line tools. Use Python 3.13 for this development setup:

```bash
python3 -m venv venv
python3.13 -m venv venv
venv/bin/python -m pip install --disable-pip-version-check --upgrade pip
venv/bin/python -m pip install --disable-pip-version-check --editable .
```

Launch from source with:
Before a native GUI launch, build and install the verified Cocoa accessibility
repair into this environment. CMake, `7zz`, and Xcode command-line tools must be
available. The build uses checksum-pinned Qt 6.9.3 source and SDK downloads and
requires the native accessibility verifier to pass:

```bash
venv/bin/python scripts/build_qt_cocoa_plugin.py --output build-output/qt-cocoa-repair --python "$PWD/venv/bin/python"
venv/bin/python -c 'from pathlib import Path; from scripts.qt_cocoa_packaging import install_qt_cocoa_plugin; print(install_qt_cocoa_plugin(Path("build-output/qt-cocoa-repair"), Path("venv")))'
```

Install once per fresh environment; the installer preserves the stock plugin and
rejects repeated replacement. Offscreen source tests do not need this native
repair. Launch the repaired source environment with:

```bash
venv/bin/python -m ios_developer_toolkit
Expand Down
Loading
Loading