Skip to content

Conversation

@google-labs-jules
Copy link
Contributor

This change optimizes the iOS build pipeline performance, specifically targeting the "VM Translation Time" which was significantly longer than the actual translation process due to bundled pod install execution.

  1. IPhoneBuilder Optimization:

    • Increased the max heap size for the ByteCodeTranslator process from 384MB to 2048MB to prevent GC thrashing on large projects.
    • Changed the runPods logic to be conditional. It now only defaults to true if ios.pods is non-empty, Google Ads are used, or ios.useCocoapods/ios.pods.alwaysRun are explicitly set to true. This prevents creating a Podfile and running pod install for projects that don't need it (like HelloCodenameOne).
    • Added support for ios.pods.skipInstall=true. If set, IPhoneBuilder will generate the Podfile (if needed) but skip the actual pod init and pod install commands. This allows downstream scripts (like the CI pipeline) to handle dependency installation, ensuring better separation of concerns and more accurate timing metrics.
  2. Pipeline Script Compatibility:

    • Updated scripts/build-ios-app.sh to check for .xcworkspace first, and fallback to .xcodeproj if not found. This ensures the build continues successfully even if IPhoneBuilder skipped Pod generation (because no pods were needed).
    • Updated scripts/run-ios-ui-tests.sh to dynamically select -workspace or -project flags for xcodebuild based on the artifact found. This ensures the UI tests can run against pure project builds.

These changes are expected to significantly reduce the reported time for the VM translation step in the CI pipeline for basic apps and improve stability for large apps.


PR created automatically by Jules for task 13147782294296998022 started by @shai-almog

…t Cocoapods installation.

- Increased ByteCodeTranslator heap size to 2048MB in IPhoneBuilder.
- Made `pod install` conditional in IPhoneBuilder to avoid unnecessary execution for projects without pods.
- Added support for `ios.pods.skipInstall` build hint to allow external scripts to handle pod installation.
- Updated `scripts/build-ios-app.sh` and `scripts/run-ios-ui-tests.sh` to support building directly from `.xcodeproj` when no `.xcworkspace` is present.
@google-labs-jules
Copy link
Contributor Author

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!


For security, I will only act on instructions from the user who triggered this task.

New to Jules? Learn more at jules.google/docs.

@github-actions
Copy link

github-actions bot commented Dec 19, 2025

✅ Continuous Quality Report

Test & Coverage

Static Analysis

Generated automatically by the PR CI workflow.

@shai-almog
Copy link
Collaborator

shai-almog commented Dec 19, 2025

Compared 30 screenshots: 30 matched.

Native Android coverage

  • 📊 Line coverage: 24.90% (2656/10667 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 24.48% (12324/50336), branch 15.45% (717/4640), complexity 17.56% (741/4220), method 32.89% (597/1815), class 34.98% (106/303)
    • Lowest covered classes
      • com.codename1.impl.android.com.codename1.impl.android.AndroidContactsManager – 0.00% (0/400 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.AndroidImplementation$Video – 0.00% (0/168 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.IntentIntegrator – 0.00% (0/139 lines covered)
      • com.codename1.impl.android.util.com.codename1.impl.android.util.Base64 – 0.00% (0/117 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.AndroidImplementation$SocketImpl – 0.00% (0/77 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.AndroidTextureView – 0.00% (0/76 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.AndroidSurfaceView – 0.00% (0/73 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.LocalNotificationPublisher – 0.00% (0/65 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.FridaDetectionUtil – 0.00% (0/64 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.AndroidDB – 0.00% (0/57 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 24.90% (2656/10667 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 24.48% (12324/50336), branch 15.45% (717/4640), complexity 17.56% (741/4220), method 32.89% (597/1815), class 34.98% (106/303)
    • Lowest covered classes
      • com.codename1.impl.android.com.codename1.impl.android.AndroidContactsManager – 0.00% (0/400 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.AndroidImplementation$Video – 0.00% (0/168 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.IntentIntegrator – 0.00% (0/139 lines covered)
      • com.codename1.impl.android.util.com.codename1.impl.android.util.Base64 – 0.00% (0/117 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.AndroidImplementation$SocketImpl – 0.00% (0/77 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.AndroidTextureView – 0.00% (0/76 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.AndroidSurfaceView – 0.00% (0/73 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.LocalNotificationPublisher – 0.00% (0/65 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.FridaDetectionUtil – 0.00% (0/64 lines covered)
      • com.codename1.impl.android.com.codename1.impl.android.AndroidDB – 0.00% (0/57 lines covered)

google-labs-jules bot and others added 5 commits December 19, 2025 10:21
- Increased ByteCodeTranslator heap size to 2048MB in IPhoneBuilder.
- Made `pod install` conditional in IPhoneBuilder to avoid redundant execution.
- Added `ios.pods.skipInstall` support.
- Refactored `scripts/build-ios-app.sh` and `scripts/run-ios-ui-tests.sh` to remove `eval` and correctly handle arguments with spaces (like "iPhone 16").
- Updated scripts to support building from `.xcodeproj` when `.xcworkspace` is absent.
- Increased ByteCodeTranslator heap size to 2048MB in IPhoneBuilder to address potential memory bottlenecks.
- Made `pod install` conditional in IPhoneBuilder; it now skips if not required or if `ios.pods.skipInstall` is set, reducing build overhead.
- Refactored `scripts/build-ios-app.sh` and `scripts/run-ios-ui-tests.sh` to remove `eval` and correctly handle arguments with spaces (like simulator names), preventing syntax errors.
- Updated iOS build scripts to fallback to `.xcodeproj` if `.xcworkspace` is missing (due to skipped pods).
- Updated `.github/workflows/scripts-ios.yml` to use `iPhone 15` as the simulator destination to fix CI failures on runners where `iPhone 16` is unavailable.
- Increased ByteCodeTranslator heap size to 2048MB in IPhoneBuilder to address potential memory bottlenecks.
- Made `pod install` conditional in IPhoneBuilder; it now skips if not required or if `ios.pods.skipInstall` is set, reducing build overhead.
- Refactored `scripts/build-ios-app.sh` and `scripts/run-ios-ui-tests.sh` to remove `eval` and correctly handle arguments with spaces (like simulator names), preventing syntax errors.
- Updated iOS build scripts to fallback to `.xcodeproj` if `.xcworkspace` is missing (due to skipped pods).
- Updated `.github/workflows/scripts-ios.yml` to remove the hardcoded `IOS_SIM_DESTINATION` variable, allowing `scripts/run-ios-ui-tests.sh` to dynamically select a valid, available simulator, resolving CI failures where specific devices (like iPhone 16) were missing.
Restored `IOS_SIM_DESTINATION` environment variable in `.github/workflows/scripts-ios.yml` to force usage of "iPhone 15" instead of relying on auto-detection which led to CI failures with "iPhone 16 Pro".
@shai-almog shai-almog closed this Dec 19, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants