Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Missing UIViewController traces with Xcode 16 #4523

Merged
merged 2 commits into from
Nov 11, 2024

Conversation

philipphofmann
Copy link
Member

📜 Description

Xcode 16 introduces a new flag ENABLE_DEBUG_DYLIB. If this flag is enabled, debug builds of app and app extension targets on supported platforms and SDKs will be built with the main binary code in a separate “NAME.debug.dylib”. Our swizzling logic for UIViewControllers sometimes skipped swizzling the UIViewControllers in that debug.dylib binary. This is fixed now, by swizzling all matching inAppInclude binary images that the binary image cache returns and not only the first one.

💡 Motivation and Context

A customer reported this problem.

💚 How did you test it?

Unit tests and sample app with Xcode 16.

📝 Checklist

You have to check all boxes before merging:

  • I reviewed the submitted code.
  • I added tests to verify the changes.
  • No new PII added or SDK only sends newly added PII if sendDefaultPII is enabled.
  • I updated the docs if needed.
  • Review from the native team if needed.
  • No breaking change or entry added to the changelog.
  • No breaking change for hybrid SDKs or communicated to hybrid SDKs.

🔮 Next steps

Xcode 16 introduces a new flag ENABLE_DEBUG_DYLIB. If this flag is
enabled, debug builds of app and app extension targets on supported
platforms and SDKs will be built with the main binary code in a separate
“NAME.debug.dylib”. Our swizzling logic for UIViewControllers sometimes
skipped swizzling the UIViewControllers in that debug.dylib binary. This
is fixed now, by swizzling all matching inAppInclude binary images that
the binary image cache returns and not only the first one.
Copy link

github-actions bot commented Nov 11, 2024

🚨 Detected changes in high risk code 🚨

High-risk code can easily blow up and is hard to test. We had severe bugs in the past. Be extra careful when changing these files, and have an extra careful look at these:

  • Sources/Sentry/SentrySubClassFinder.m
  • Sources/Sentry/SentryUIViewControllerSwizzling.m

Copy link

codecov bot commented Nov 11, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 91.516%. Comparing base (4509e9c) to head (ac5db3b).
Report is 1 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@              Coverage Diff              @@
##              main     #4523       +/-   ##
=============================================
+ Coverage   91.513%   91.516%   +0.003%     
=============================================
  Files          615       615               
  Lines        69460     69512       +52     
  Branches     24896     24924       +28     
=============================================
+ Hits         63565     63615       +50     
- Misses        5802      5804        +2     
  Partials        93        93               
Files with missing lines Coverage Δ
Sources/Sentry/SentryBinaryImageCache.m 100.000% <100.000%> (ø)
Sources/Sentry/SentrySubClassFinder.m 94.545% <100.000%> (+0.101%) ⬆️
Sources/Sentry/SentryUIViewControllerSwizzling.m 90.070% <100.000%> (+0.142%) ⬆️
...troller/SentryUIViewControllerSwizzlingTests.swift 99.328% <100.000%> (+0.089%) ⬆️
...ests/SentryTests/SentryBinaryImageCacheTests.swift 100.000% <100.000%> (ø)

... and 9 files with indirect coverage changes


Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 4509e9c...ac5db3b. Read the comment docs.

Copy link

github-actions bot commented Nov 11, 2024

Performance metrics 🚀

  Plain With Sentry Diff
Startup time 1216.98 ms 1245.76 ms 28.78 ms
Size 22.30 KiB 730.30 KiB 708.00 KiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
6bc5ae5 1207.23 ms 1216.66 ms 9.43 ms
65e48e0 1223.68 ms 1238.96 ms 15.28 ms
5616e0a 1224.12 ms 1249.86 ms 25.74 ms
6943de0 1230.02 ms 1235.32 ms 5.30 ms
3db3e35 1233.52 ms 1256.43 ms 22.90 ms
aea5987 1223.84 ms 1244.39 ms 20.55 ms
ed49f0c 1245.67 ms 1261.15 ms 15.48 ms
20a828b 1211.33 ms 1228.00 ms 16.67 ms
af1f4dd 1225.39 ms 1245.48 ms 20.09 ms
50bb751 1234.10 ms 1248.29 ms 14.19 ms

App size

Revision Plain With Sentry Diff
6bc5ae5 20.76 KiB 401.39 KiB 380.63 KiB
65e48e0 21.90 KiB 708.34 KiB 686.44 KiB
5616e0a 22.85 KiB 407.44 KiB 384.59 KiB
6943de0 20.76 KiB 393.33 KiB 372.57 KiB
3db3e35 21.58 KiB 419.21 KiB 397.63 KiB
aea5987 21.58 KiB 418.13 KiB 396.54 KiB
ed49f0c 21.58 KiB 632.13 KiB 610.55 KiB
20a828b 21.58 KiB 670.99 KiB 649.41 KiB
af1f4dd 22.85 KiB 414.71 KiB 391.86 KiB
50bb751 21.58 KiB 417.86 KiB 396.27 KiB

Previous results on branch: fix/missing-xcode-16-ui-view-controller-traces

Startup times

Revision Plain With Sentry Diff
c002ee0 1221.09 ms 1227.81 ms 6.73 ms

App size

Revision Plain With Sentry Diff
c002ee0 21.90 KiB 730.30 KiB 708.39 KiB

Copy link

github-actions bot commented Nov 11, 2024

🚨 Detected changes in high risk code 🚨

High-risk code can easily blow up and is hard to test. We had severe bugs in the past. Be extra careful when changing these files, and have an extra careful look at these:

  • Sources/Sentry/SentrySubClassFinder.m
  • Sources/Sentry/SentryUIViewControllerSwizzling.m

@philipphofmann philipphofmann merged commit a34f08c into main Nov 11, 2024
65 checks passed
@philipphofmann philipphofmann deleted the fix/missing-xcode-16-ui-view-controller-traces branch November 11, 2024 15:19
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