Skip to content

Commit fc6557e

Browse files
ci: Use xcrun for crash UI test (#5512)
XCTest isn't built for crashing during tests. Instead of using XCTest to press a button and let a test app crash, we now use UserDefaults to tell the test app to crash during launch. We then simply launch the app again and wait to see if it keeps running. This is basically the same as the testCrash of the SwiftUITestSample without using XCTests.
1 parent 32e7197 commit fc6557e

File tree

13 files changed

+322
-9
lines changed

13 files changed

+322
-9
lines changed

.github/workflows/ui-tests-critical.yml

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,28 @@ jobs:
4848
xcode: "16.2"
4949
command:
5050
- fastlane_command: ui_critical_tests_ios_swiftui_envelope
51-
- fastlane_command: ui_critical_tests_ios_swiftui_crash
51+
52+
run-swiftui-crash-test:
53+
name: Run SwiftUI Crash Test
54+
runs-on: macos-15
55+
steps:
56+
- uses: actions/checkout@v4
57+
58+
- run: ./scripts/ci-select-xcode.sh 16.2
59+
60+
- run: make init-ci-build
61+
- run: make xcode-ci
62+
63+
- name: Boot simulator
64+
run: ./scripts/ci-boot-simulator.sh
65+
66+
- name: Run SwiftUI Crash Test
67+
run: |
68+
./TestSamples/SwiftUICrashTest/test-crash-and-relaunch.sh --screenshots-dir "swiftui-crash-test-screenshots"
69+
70+
- name: Upload SwiftUI Crash Test Screenshots
71+
uses: actions/upload-artifact@v4
72+
if: always()
73+
with:
74+
name: swiftui-crash-test-screenshots
75+
path: swiftui-crash-test-screenshots

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ Samples/visionOS-Swift/visionOS-Swift.xcodeproj
9696
Samples/watchOS-Swift/watchOS-Swift.xcodeproj
9797
Samples/SentrySampleShared/SentrySampleShared.xcodeproj
9898
TestSamples/SwiftUITestSample/SwiftUITestSample.xcodeproj
99+
TestSamples/SwiftUICrashTest/SwiftUICrashTest.xcodeproj
99100

100101
Sentry.xcframework*
101102
Sentry-Dynamic.xcframework*

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,3 +188,4 @@ xcode-ci:
188188
xcodegen --spec Samples/visionOS-Swift/visionOS-Swift.yml
189189
xcodegen --spec Samples/watchOS-Swift/watchOS-Swift.yml
190190
xcodegen --spec TestSamples/SwiftUITestSample/SwiftUITestSample.yml
191+
xcodegen --spec TestSamples/SwiftUICrashTest/SwiftUICrashTest.yml

Sentry.xcworkspace/contents.xcworkspacedata

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include "../SwiftUITestSample/Shared/Config/Architectures.xcconfig"
2+
#include "../SwiftUITestSample/Shared/Config/BuildOptions.xcconfig"
3+
#include "../SwiftUITestSample/Shared/Config/Deployment.xcconfig"
4+
#include "../SwiftUITestSample/Shared/Config/Linking.xcconfig"
5+
#include "../SwiftUITestSample/Shared/Config/Localization.xcconfig"
6+
#include "../SwiftUITestSample/Shared/Config/Packaging.xcconfig"
7+
#include "../SwiftUITestSample/Shared/Config/SearchPaths.xcconfig"
8+
#include "../SwiftUITestSample/Shared/Config/Signing.xcconfig"
9+
#include "../SwiftUITestSample/Shared/Config/Versioning.xcconfig"
10+
#include "../SwiftUITestSample/Shared/Config/CodeGeneration.xcconfig"
11+
#include "../SwiftUITestSample/Shared/Config/ClangLanguage.xcconfig"
12+
#include "../SwiftUITestSample/Shared/Config/ClangCppLanguage.xcconfig"
13+
#include "../SwiftUITestSample/Shared/Config/ClangModules.xcconfig"
14+
#include "../SwiftUITestSample/Shared/Config/ClangObjCLanguage.xcconfig"
15+
#include "../SwiftUITestSample/Shared/Config/ClangPreprocessing.xcconfig"
16+
#include "../SwiftUITestSample/Shared/Config/ClangWarnings.xcconfig"
17+
#include "../SwiftUITestSample/Shared/Config/ClangWarningsCpp.xcconfig"
18+
#include "../SwiftUITestSample/Shared/Config/ClangWarningsObjC.xcconfig"
19+
#include "../SwiftUITestSample/Shared/Config/AssetCatalog.xcconfig"
20+
#include "../SwiftUITestSample/Shared/Config/ClangAnalyzer.xcconfig"
21+
#include "../SwiftUITestSample/Shared/Config/Swift.xcconfig"
22+
#include "../SwiftUITestSample/Shared/Config/Metal.xcconfig"
23+
24+
PRODUCT_NAME = SwiftUICrashTest
25+
PRODUCT_BUNDLE_IDENTIFIER = io.sentry.tests.SwiftUICrashTest
26+
GENERATE_INFOPLIST_FILE = YES
27+
28+
SUPPORTED_PLATFORMS = iphoneos iphonesimulator
29+
MARKETING_VERSION = 1
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: SwiftUICrashTest
2+
createIntermediateGroups: true
3+
generateEmptyDirectories: true
4+
configs:
5+
Debug: debug
6+
Release: release
7+
projectReferences:
8+
Sentry:
9+
path: ../../Sentry.xcodeproj
10+
fileGroups:
11+
- SwiftUICrashTest.yml
12+
options:
13+
bundleIdPrefix: io.sentry
14+
targets:
15+
SwiftUICrashTest:
16+
type: application
17+
platform: auto
18+
dependencies:
19+
- target: Sentry/Sentry
20+
sources:
21+
- SwiftUICrashTest
22+
configFiles:
23+
Debug: SwiftUICrashTest.xcconfig
24+
Release: SwiftUICrashTest.xcconfig
25+
26+
schemes:
27+
SwiftUICrashTest:
28+
build:
29+
targets:
30+
SwiftUICrashTest: all
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"colors": [
3+
{
4+
"idiom": "universal"
5+
}
6+
],
7+
"info": {
8+
"author": "xcode",
9+
"version": 1
10+
}
11+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"images": [
3+
{
4+
"idiom": "universal",
5+
"platform": "ios",
6+
"size": "1024x1024"
7+
},
8+
{
9+
"appearances": [
10+
{
11+
"appearance": "luminosity",
12+
"value": "dark"
13+
}
14+
],
15+
"idiom": "universal",
16+
"platform": "ios",
17+
"size": "1024x1024"
18+
},
19+
{
20+
"appearances": [
21+
{
22+
"appearance": "luminosity",
23+
"value": "tinted"
24+
}
25+
],
26+
"idiom": "universal",
27+
"platform": "ios",
28+
"size": "1024x1024"
29+
}
30+
],
31+
"info": {
32+
"author": "xcode",
33+
"version": 1
34+
}
35+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"info": {
3+
"author": "xcode",
4+
"version": 1
5+
}
6+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import Sentry
2+
import SwiftUI
3+
4+
struct ContentView: View {
5+
var body: some View {
6+
VStack {
7+
Image(systemName: "globe")
8+
.imageScale(.large)
9+
.foregroundStyle(.tint)
10+
Text("Hello, world!")
11+
}
12+
.padding()
13+
}
14+
}
15+
16+
#Preview {
17+
ContentView()
18+
}

0 commit comments

Comments
 (0)