Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
ad61499
FIxed all the compile time issues to run the test cases. added ui tes…
srikanth-vg Sep 8, 2026
e719379
created ios-test workflow
srikanth-vg Sep 9, 2026
f5f2a67
chore: dummy commit to trigger build
srikanth-vg Sep 9, 2026
6a94678
implemented generating test reports in pdf and md file for more reada…
srikanth-vg Sep 9, 2026
66c9a11
Updated the new step pdf engine
srikanth-vg Sep 9, 2026
2713370
creating zip for artifact
srikanth-vg Sep 9, 2026
f55248f
Separated unit and ui test cases and running the ui test cases in all…
srikanth-vg Sep 10, 2026
9a99481
trying to run the ui test cases parallelly 2 at a time
srikanth-vg Sep 10, 2026
68bb7b6
ignoring xcresult to artifact
srikanth-vg Sep 10, 2026
6466e8a
Updated script to capture and store the screenshots for failed test c…
srikanth-vg Sep 10, 2026
a2f7d90
Added failed test case for testing
srikanth-vg Sep 10, 2026
6bfca07
Added status of skipped devices in result
srikanth-vg Sep 10, 2026
58ec6b5
temp commit
srikanth-vg Sep 10, 2026
7a9fd33
for testing purpose stoped running all ui test cases in all devices a…
srikanth-vg Sep 10, 2026
a5caf41
updated the yaml
srikanth-vg Sep 10, 2026
734585b
updated report generations
srikanth-vg Sep 10, 2026
e346b37
Updated workflow
srikanth-vg Sep 11, 2026
2e29db5
Updated zip process
srikanth-vg Sep 11, 2026
2259bc2
not running the unit test cases and running the ui on two devices to …
srikanth-vg Sep 11, 2026
e5b2dbd
mad artifact override true
srikanth-vg Sep 11, 2026
fd35784
enabled unit test cases and running ui test cases in all devices reso…
srikanth-vg Sep 11, 2026
e46847e
updated report generation issues
srikanth-vg Sep 11, 2026
98f0a14
trying to fix the screenshots are not attched to report issue
srikanth-vg Sep 11, 2026
206895c
added custom testcase with capture each face
srikanth-vg Sep 11, 2026
d861f36
tring to add screenshot to report
srikanth-vg Sep 11, 2026
48386b3
FIxed all the compile time issues to run the test cases. added ui tes…
srikanth-vg Sep 8, 2026
93b247f
chore: dummy commit to trigger build
srikanth-vg Sep 9, 2026
b75a005
implemented generating test reports in pdf and md file for more reada…
srikanth-vg Sep 9, 2026
61c8435
creating zip for artifact
srikanth-vg Sep 9, 2026
3d1b1a1
Separated unit and ui test cases and running the ui test cases in all…
srikanth-vg Sep 10, 2026
27053e1
ignoring xcresult to artifact
srikanth-vg Sep 10, 2026
0df896f
Updated script to capture and store the screenshots for failed test c…
srikanth-vg Sep 10, 2026
075af53
temp commit
srikanth-vg Sep 10, 2026
6be8db8
for testing purpose stoped running all ui test cases in all devices a…
srikanth-vg Sep 10, 2026
f73b340
updated the yaml
srikanth-vg Sep 10, 2026
f5d6fb4
Updated workflow
srikanth-vg Sep 11, 2026
e474e68
Updated zip process
srikanth-vg Sep 11, 2026
10e3bc9
not running the unit test cases and running the ui on two devices to …
srikanth-vg Sep 11, 2026
9481ab5
mad artifact override true
srikanth-vg Sep 11, 2026
a28ecdf
enabled unit test cases and running ui test cases in all devices reso…
srikanth-vg Sep 11, 2026
34a13e7
Setup the mock API environment and implemented login test cases
srikanth-vg Sep 17, 2026
f477961
Fixed login flow failed test cases
srikanth-vg Sep 17, 2026
3e44a68
implemented missing ui test cases in login screen and fixed few issue…
srikanth-vg Sep 18, 2026
db54bf1
Implemented UI test cases for workspace screen
srikanth-vg Sep 18, 2026
1c3412a
Implemented UI test cases for profile screen
srikanth-vg Sep 21, 2026
e274d84
Implemented map view ui test cases
srikanth-vg Sep 21, 2026
f2e1dee
Added missing test cases
srikanth-vg Sep 28, 2026
0685ffb
Implemented long form test cases
srikanth-vg Sep 30, 2026
34dea5e
Added ui test. cases for accessibility mode
srikanth-vg Sep 30, 2026
0ce4d9f
Implemented ui test cases for undo edits flow
srikanth-vg Sep 30, 2026
d8766e0
implemented ui test cases for manage quests flow
srikanth-vg Sep 30, 2026
847810f
Implemented UI test cases for Satellite layer flow
srikanth-vg Sep 30, 2026
4b3d6c4
Added missing modules ui test cases
srikanth-vg Oct 1, 2026
bcbe6b7
Added schedule run on every friday to run all the test suite on all t…
srikanth-vg Oct 9, 2026
ad2adc6
Implemented Ui test cases for profile options
srikanth-vg Oct 9, 2026
8bee369
running only newest commit only
srikanth-vg Oct 9, 2026
fb920b8
test: run the job
srikanth-vg Oct 9, 2026
288fb2c
test: run the job
srikanth-vg Oct 9, 2026
838a825
test few temp pass and fail cases
srikanth-vg Oct 9, 2026
32e7758
change the artifact mechanism
srikanth-vg Oct 9, 2026
7681ff2
Uploading xcresult files in zip
srikanth-vg Oct 9, 2026
f01efb3
reverted temp test script
srikanth-vg Oct 9, 2026
64b7e03
Implemented unit test cases for the app
srikanth-vg Oct 19, 2026
bc66ba1
Fixed failed unit test case
srikanth-vg Oct 19, 2026
1da7dcc
Fixed recency related test cases and few failed test cases
srikanth-vg Oct 19, 2026
fb205da
Fixed action issues
srikanth-vg Oct 19, 2026
3ac415e
Updated yml
srikanth-vg Oct 19, 2026
791fb8d
Addressed faild test cases
srikanth-vg Oct 19, 2026
bdb6726
fixed few of the UI test case issue
srikanth-vg Oct 19, 2026
7d2ff5d
Fixed code coverage calculation issue
srikanth-vg Oct 21, 2026
3971a54
Fixed rest report rendaring issue and ignoring the failed tests after…
srikanth-vg Oct 22, 2026
f2b2fd3
Fixed workflow running cases
srikanth-vg Oct 22, 2026
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
69 changes: 69 additions & 0 deletions .github/scripts/publish-reports.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#!/usr/bin/env bash
# Attaches CI report files to the "ios-ci-reports" pre-release and links them from the job's
# summary page, then deletes that release's assets older than RETENTION_DAYS.
#
# Used instead of actions/upload-artifact: from this self-hosted runner its very first request
# (CreateArtifact, made before any bytes are sent) times out on every attempt, so no artifact is
# ever created. Release assets go through uploads.github.com instead, don't count against the
# artifact storage quota, and don't grow the git repo (the release only holds files). Same
# approach as the Android repo's .github/scripts/publish-reports.sh.
#
# Tag is "ios-ci-reports", not "ci-reports": an earlier workflow version pushed a *branch*
# called ci-reports to this repo, and a tag with the same name would be ambiguous.
#
# Needs the gh CLI on the runner and GH_TOKEN with contents: write (to create the release/tag
# and upload/delete its assets).
#
# Usage: publish-reports.sh <file> [<file> ...] (missing files are skipped with a warning)
set -euo pipefail

tag="ios-ci-reports"
retention_days=14

command -v gh >/dev/null || { echo "::error::gh CLI not found on this runner (brew install gh)"; exit 1; }

files=()
for f in "$@"; do
if [ -f "$f" ]; then files+=("$f"); else echo "::warning::$f not found - skipping"; fi
done
if [ "${#files[@]}" -eq 0 ]; then
echo "::warning::no report files to publish"
exit 0
fi

# Two runs (e.g. a push and the Friday schedule) can race to create the release the first time -
# if the create fails, the other run has won the race, as long as the release exists now
if ! gh release view "$tag" >/dev/null 2>&1; then
gh release create "$tag" --prerelease --target "$GITHUB_SHA" --title "iOS CI reports" \
--notes "Test report files from iOS CI runs, linked from each run's summary page. Files older than $retention_days days are deleted automatically." \
|| gh release view "$tag" >/dev/null
fi

base_url="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/download/$tag"
{
echo "## Test reports"
echo "Attached to the [$tag]($GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/tag/$tag) pre-release, kept for $retention_days days:"
} >> "$GITHUB_STEP_SUMMARY"

for file in "${files[@]}"; do
# run id + attempt in the name, since all runs share this one release (a re-run gets its own
# file instead of replacing the reports of the attempt before it)
name="${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-$(basename "$file")"
staged="$RUNNER_TEMP/$name"
cp "$file" "$staged"
gh release upload "$tag" "$staged" --clobber
rm -f "$staged"
echo "- [$name]($base_url/$name)" >> "$GITHUB_STEP_SUMMARY"
echo "published: $base_url/$name"
done

# Delete assets older than the retention window. BSD date (macOS runner) first, GNU date as a
# fallback. Paginated by release id: the release object itself only embeds a limited asset list.
cutoff=$(date -u -v-"${retention_days}"d +%Y-%m-%dT%H:%M:%SZ 2>/dev/null \
|| date -u -d "$retention_days days ago" +%Y-%m-%dT%H:%M:%SZ)
release_id=$(gh api "repos/$GITHUB_REPOSITORY/releases/tags/$tag" --jq .id)
gh api --paginate "repos/$GITHUB_REPOSITORY/releases/$release_id/assets?per_page=100" \
--jq ".[] | select(.created_at < \"$cutoff\") | .id" |
while read -r id; do
gh api -X DELETE "repos/$GITHUB_REPOSITORY/releases/assets/$id" || echo "::warning::couldn't delete old asset $id"
done
454 changes: 454 additions & 0 deletions .github/workflows/ios-tests.yml

Large diffs are not rendered by default.

12 changes: 10 additions & 2 deletions GoInfoGame.xctestplan
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,13 @@
}
],
"defaultOptions" : {
"codeCoverage" : false,
"targetForVariableExpansion" : {
"containerPath" : "container:GoInfoGame.xcodeproj",
"identifier" : "FAD5C4EE2AFCBE700040C61A",
"name" : "GoInfoGame"
}
},
"uiTestingScreenshotsLifetime" : "deleteOnSuccess",
"userAttachmentLifetime" : "deleteOnSuccess"
},
"testTargets" : [
{
Expand All @@ -23,6 +24,13 @@
"identifier" : "FAD5C5042AFCBE720040C61A",
"name" : "GoInfoGameTests"
}
},
{
"target" : {
"containerPath" : "container:GoInfoGame.xcodeproj",
"identifier" : "FAD5C50E2AFCBE720040C61A",
"name" : "GoInfoGameUITests"
}
}
],
"version" : 1
Expand Down
394 changes: 350 additions & 44 deletions GoInfoGame/GoInfoGame.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

33 changes: 32 additions & 1 deletion GoInfoGame/GoInfoGame/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import SwiftUI
import FirebaseCore
import RealmSwift

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
Expand All @@ -15,7 +16,37 @@ class AppDelegate: UIResponder, UIApplicationDelegate {

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.


// Absolute first thing, before anything else on this or any other thread has a
// chance to run: force Realm's schema to be computed once, synchronously, here.
// RLMSchema.sharedSchema (a process-wide singleton, cached for the rest of the
// process once computed) discovers Realm's model classes by walking every
// Objective-C class currently loaded via RLMRegisterClassLocalNames. If that walk
// races with something else registering a class on another thread - which is
// routine seconds later, once Firebase/StoreKit/etc. are initializing and
// SceneDelegate.sceneDidBecomeActive fires NotesSubmissionManager and
// FeatureSubmissionManager's resumePendingUploads(), each opening its own
// Task.detached that can independently trigger this same first-ever Realm access -
// class_getSuperclass can read a pointer the runtime is mutating out from under it
// and crash with EXC_BAD_ACCESS (seen as a crash inside
// RLMRegisterClassLocalNames/RLMIsObjectSubclass). Doing it here, alone, before any
// of that concurrent activity starts, means every later access - including the ones
// from those detached tasks - just reuses the cached schema and never repeats the
// race. Intermittent, because it depends on how the OS scheduler happens to
// interleave threads on a given launch; far more likely to surface under a UI test
// suite, which launches a fresh process (and so re-triggers this one-time
// computation) dozens of times in a row.
_ = try? Realm(configuration: RealmConfig.configuration)

// Before anything else: a UI test run needs its stubs registered ahead of the
// first request, and ApiManager.shared is created lazily by whoever asks first.
// Reset first: SceneDelegate picks its root view from `loggedIn`, so stale state
// has to be gone before the scene connects.
#if DEBUG
UITestStubs.resetStateIfNeeded()
UITestStubs.installIfNeeded()
#endif

//clear DB to avoid overlap of data after workspace selection
// DatabaseConnector.shared.clearDB()
validateAccessToken()
Expand Down
Loading
Loading