From 32f925f71773240466b4e5ee5103d46c4436ff0c Mon Sep 17 00:00:00 2001 From: hoangatuan Date: Sat, 2 Dec 2023 21:24:50 +0800 Subject: [PATCH 1/2] update docs --- Docs/XCUITests.md | 43 ++++++++++++++++++ LeaksCheckerUITests/LeaksCheckerUITests.swift | 30 +++++++++++- MemoryLeaksCheck.xcodeproj/project.pbxproj | 11 +++-- .../UserInterfaceState.xcuserstate | Bin 0 -> 17936 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 8 ++-- .../xcschemes/LeaksCheckerUITests.xcscheme | 3 +- .../xcschemes/xcschememanagement.plist | 40 ++++++++++++++++ resources/xcuitests.png | Bin 0 -> 59441 bytes 8 files changed, 125 insertions(+), 10 deletions(-) create mode 100644 Docs/XCUITests.md create mode 100644 MemoryLeaksCheck.xcodeproj/project.xcworkspace/xcuserdata/tuanhoang.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 MemoryLeaksCheck.xcodeproj/xcuserdata/tuanhoang.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 resources/xcuitests.png diff --git a/Docs/XCUITests.md b/Docs/XCUITests.md new file mode 100644 index 0000000..88b6e38 --- /dev/null +++ b/Docs/XCUITests.md @@ -0,0 +1,43 @@ + +# XCUITests + +After the tests finish execution, the essential thing that we need is the simulator needs to stay alive. +The problem with `XCUITests` is that after testing finish execution, it quit the simulator. + +# Things I've tried: + +1. Trying to find a way to preserve the running program after tests finish running + +- I can't find any way to preserve the running program. + +2. At the end of a test, run shell script to generate `memgraph` before the running program quit + +For this idea, I put a breakpoint before the test finish execution. Then we can custom that breakpoint to execute a shell script command. +However, when running on CI, we will execute test using script, not from Xcode. So, using breakpoint to execute shell script will not work for CI + +=> Only work on Xcode + +3. From Xcode13, Apple provide `-enablePerformanceTestsDiagnostics` to generate memgraph after a test finish executing. + +```bash + xcodebuild test -project MemoryLeaksCheck.xcodeproj \ + -scheme LeaksCheckerUITests \ + -destination platform=iOS,name="Tuan iPhone" \ + -enablePerformanceTestsDiagnostics YES +``` + +> Note: In the scheme configuration, open `Options` under `Test`, unselect "Delete if test succeeds" for Attachments. + + + +However, **this only works for real device, not for simulator.** + +Based on [Apple docs](https://developer.apple.com/documentation/xcode-release-notes/xcode-13-release-notes) + +> xcodebuild has a new option -enablePerformanceTestsDiagnostics YES that collects diagnostics for Performance XCTests. The option collects a ktrace file for non-XCTMemoryMetrics, and a series of memory graphs for XCTMemoryMetrics. xcodebuild attaches diagnostics to the generated xcresult bundle. **Note that memory graph collection isn’t available in simulated devices. (64495534)** + +=> Only work on local with real device, doesn't work on CI + +# Conclusion + +XCUITests is not appropriate for this approach. (for now) diff --git a/LeaksCheckerUITests/LeaksCheckerUITests.swift b/LeaksCheckerUITests/LeaksCheckerUITests.swift index 80cffe8..19239f4 100644 --- a/LeaksCheckerUITests/LeaksCheckerUITests.swift +++ b/LeaksCheckerUITests/LeaksCheckerUITests.swift @@ -17,7 +17,9 @@ final class LeaksCheckerUITests: XCTestCase { super.tearDown() } - func testExample() throws { + /// This is a solution to generate memgraph using breakpoint. + /// => this solution only work when you running test using Xcode. + func testExample_usingBreakpointToGenrateMemgraph() throws { // UI tests must launch the application that they test. app = XCUIApplication(bundleIdentifier: "Hoang-Anh-Tuan.MemoryLeaksCheck") @@ -41,5 +43,31 @@ final class LeaksCheckerUITests: XCTestCase { /// - Parameters: The parameters is passed in the shell script is the program name, which is our app name. For this project, the app name is *MemoryLeaksCheck*. debugPrint("Start checking for leaks... πŸ”Ž") } + + /// This test will generate memgraph via command line. However, it only works on physical device, not simulator. + /// For more info, please read README. + func testExample() throws { + let app = XCUIApplication() + let options = XCTMeasureOptions() + + measure( + metrics: [XCTMemoryMetric(application: app)], + options: options + ) { + app.launch() + startMeasuring() + + app.staticTexts["Abandoned Memory Example"].tap() + app.buttons["Scenarios"].tap() + app.staticTexts["Leaks Memory Example"].tap() + + let simulateLogoutThenLoginActionButton = app.buttons["Simulate Logout then Login Action"] + simulateLogoutThenLoginActionButton.tap() + simulateLogoutThenLoginActionButton.tap() + simulateLogoutThenLoginActionButton.tap() + simulateLogoutThenLoginActionButton.tap() + } + } + } diff --git a/MemoryLeaksCheck.xcodeproj/project.pbxproj b/MemoryLeaksCheck.xcodeproj/project.pbxproj index 880e558..ea52167 100644 --- a/MemoryLeaksCheck.xcodeproj/project.pbxproj +++ b/MemoryLeaksCheck.xcodeproj/project.pbxproj @@ -166,6 +166,7 @@ }; 4CBC59372AC3299B00D83CA5 = { CreatedOnToolsVersion = 14.2; + TestTargetID = 4C28E3C92ABEDFFB0004394E; }; }; }; @@ -382,7 +383,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = RCQA85T6C2; + DEVELOPMENT_TEAM = 98D3824HFQ; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = MemoryLeaksCheck/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -414,7 +415,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = RCQA85T6C2; + DEVELOPMENT_TEAM = 98D3824HFQ; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = MemoryLeaksCheck/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -444,7 +445,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = RCQA85T6C2; + DEVELOPMENT_TEAM = 98D3824HFQ; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 14.0; MARKETING_VERSION = 1.0; @@ -457,6 +458,7 @@ SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; + TEST_TARGET_NAME = MemoryLeaksCheck; }; name = Debug; }; @@ -465,7 +467,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = RCQA85T6C2; + DEVELOPMENT_TEAM = 98D3824HFQ; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 14.0; MARKETING_VERSION = 1.0; @@ -478,6 +480,7 @@ SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; + TEST_TARGET_NAME = MemoryLeaksCheck; }; name = Release; }; diff --git a/MemoryLeaksCheck.xcodeproj/project.xcworkspace/xcuserdata/tuanhoang.xcuserdatad/UserInterfaceState.xcuserstate b/MemoryLeaksCheck.xcodeproj/project.xcworkspace/xcuserdata/tuanhoang.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..6f1b1da432762f6c49603c79e7b27917e8afb15e GIT binary patch literal 17936 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 literal 0 HcmV?d00001 diff --git a/MemoryLeaksCheck.xcodeproj/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist b/MemoryLeaksCheck.xcodeproj/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist index e2b1154..a2bdc4f 100644 --- a/MemoryLeaksCheck.xcodeproj/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/MemoryLeaksCheck.xcodeproj/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist @@ -8,16 +8,16 @@ BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> + shouldUseLaunchSchemeArgsEnv = "YES" + userAttachmentLifetime = "keepAlways"> + + + + SchemeUserState + + LeaksCheckerUITests.xcscheme_^#shared#^_ + + orderHint + 0 + + MemoryLeaksCheck.xcscheme_^#shared#^_ + + orderHint + 1 + + SnapKitPlayground (Playground) 1.xcscheme + + isShown + + orderHint + 3 + + SnapKitPlayground (Playground) 2.xcscheme + + isShown + + orderHint + 4 + + SnapKitPlayground (Playground).xcscheme + + isShown + + orderHint + 2 + + + + diff --git a/resources/xcuitests.png b/resources/xcuitests.png new file mode 100644 index 0000000000000000000000000000000000000000..ab351c35b337b3c4fcae0f0a9b6148c07d4d3b35 GIT binary patch literal 59441 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π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 F_&>=1@-_ef literal 0 HcmV?d00001 From 5ed759c7bb5c5c6938d250b0c5472f1e9f49f2a4 Mon Sep 17 00:00:00 2001 From: hoangatuan Date: Sat, 2 Dec 2023 21:27:16 +0800 Subject: [PATCH 2/2] update docs --- README.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index d92ac18..6af59fc 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,10 @@ Learn more about `Maestro` [here](https://maestro.mobile.dev/) leaksdetector -processName $YOUR_APP_NAME -e $SUPPORTED_TESTING_FRAMEWORKS -d $PATH_TO_DANGER_FILE ``` -## Current support testing frameworks +## Current testing frameworks - [Maestro](https://maestro.mobile.dev/) βœ… -- [XCUITest](https://developer.apple.com/documentation/xctest) (In progress βš™οΈ) +- [XCUITest](https://developer.apple.com/documentation/xctest) (XCUITest is not supported. Read more [here](./Docs/XCUITests.md)) ❌ ## How it works @@ -40,11 +40,7 @@ Find more about `leaks` tool and `memgraph` [here](https://developer.apple.com/v ## Why I used Maestro? 1. I need a testing tool which doesn't kill the program after the testing finished execution. And Maestro support that. Also Maestro is very easy to integrate & use. -2. I've tried to used XCUItest, which is really promissing. Based on this [WWDC video](https://developer.apple.com/videos/play/wwdc2021/10180/) from Apple, XCUITest even *allows us to capture the stacktrace where leaks occur & generate a memgraph*. However, I've tried to follow the video but Xcode didn't generate any memgraph. - - => I'm working on this. - - I've posted some questions on [swiftforum](https://forums.swift.org/t/xctest-doesnt-generate-memgraph-file-after-ui-test-finish-execution/67982) and [developer.apple](https://developer.apple.com/forums/thread/738659). If you have any ideas, feel free to reply on the threads +2. XCUITest can not preserve running program after test execution. Read more at [here](./Docs/XCUITests.md) ## How to support your testing frameworks