From f2e71f7d031f616a1786bdd56f6e01b6e68a7513 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 28 Nov 2024 10:34:14 +1100 Subject: [PATCH 1/6] Add `.editorconfig` --- .editorconfig | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..5a91fc9 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# Apply to all files +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +# Ruby specific rules +[{*.rb,Fastfile,Gemfile}] +indent_style = space +indent_size = 2 + +[*.{swift,h,m}] +indent_style = space +indent_size = 4 From a2579133545fade62baf6dfdaec0673a40c7776d Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 28 Nov 2024 10:35:02 +1100 Subject: [PATCH 2/6] Add `Makefile` with tasks to open projects and run unit tests --- Makefile | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ea8b39c --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +# TODO: Use newer Sim. Sticking with it at the moment because we know it works in the existing GitHub action setup. +SIMULATOR_NAME ?= iPhone 14 +SIMULATOR_OS ?= latest +XCODE_PATH ?= /Applications/Xcode.app + +# Convenience to open the lib and demo project with Xcode, given it's not in the root. +open: + open -a $(XCODE_PATH) ./Demo/ParselyDemo.xcodeproj + +# TODO: Move off xcpretty to xcbeautify. Sticking with it at the moment because we know it works in the existing GitHub action setup. +test: + set -o pipefail \ + && xcodebuild test \ + -project Demo/ParselyDemo.xcodeproj \ + -scheme ParselyDemo \ + -sdk iphonesimulator \ + -destination 'platform=iOS Simulator,name=$(SIMULATOR_NAME),OS=$(SIMULATOR_OS)' \ + | xcpretty From 2346ec125d3e57974fe803931c49eecbef096957 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 28 Nov 2024 10:35:33 +1100 Subject: [PATCH 3/6] Use `make test` in GH Action --- .github/workflows/ios.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index e715ef5..1e176e3 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -34,11 +34,4 @@ jobs: with: xcode-version: ${{ matrix.xcode }} - name: Build and Test - run: | - xcodebuild test \ - -project Demo/ParselyDemo.xcodeproj \ - -scheme ParselyDemo \ - -sdk iphonesimulator \ - -destination 'platform=iOS Simulator,name=iPhone 14,OS=latest' \ - | xcpretty \ - && exit ${PIPESTATUS[0]} + run: make test From 6cc170ecf146ddfd0ae36939af53e9062831346f Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 28 Nov 2024 10:43:11 +1100 Subject: [PATCH 4/6] Set up SwiftLint and add `make format` --- .gitignore | 4 ++++ .swiftlint.yml | 7 +++++++ Makefile | 4 ++++ 3 files changed, 15 insertions(+) create mode 100644 .swiftlint.yml diff --git a/.gitignore b/.gitignore index 58f360b..a08e021 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,7 @@ xcuserdata/* # Ruby tooling vendor/bundle + + +# SwiftLint Remote Config Cache +.swiftlint/RemoteConfigCache \ No newline at end of file diff --git a/.swiftlint.yml b/.swiftlint.yml new file mode 100644 index 0000000..81eecbd --- /dev/null +++ b/.swiftlint.yml @@ -0,0 +1,7 @@ +swiftlint_version: 0.57.0 + +parent_config: https://raw.githubusercontent.com/Automattic/swiftlint-config/b497131f8d0fddbf3b23278cfc4ef8d86c9bcb20/.swiftlint.yml +remote_timeout: 10.0 + +excluded: + - .build diff --git a/Makefile b/Makefile index ea8b39c..e48ec50 100644 --- a/Makefile +++ b/Makefile @@ -16,3 +16,7 @@ test: -sdk iphonesimulator \ -destination 'platform=iOS Simulator,name=$(SIMULATOR_NAME),OS=$(SIMULATOR_OS)' \ | xcpretty + +# TODO: Add automation to set up SwiftLint +format: + swiftlint --fix --format From 86c56f1053d803dbca75eb3a8fcdd60c6e8b0d54 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 28 Nov 2024 11:13:59 +1100 Subject: [PATCH 5/6] Make sure "sending event" log msg and event dump are in the same line This way, we avoid other `os_log` calls getting in between `os_log` and `dump` and breaking the association between the two which makes the logs harder to understand. --- Sources/Track.swift | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Sources/Track.swift b/Sources/Track.swift index 9292c73..94ae2e8 100644 --- a/Sources/Track.swift +++ b/Sources/Track.swift @@ -22,8 +22,7 @@ class Track { parselyTracker.startFlushTimer(); pixel.beacon(event: event) - os_log("Sending an event from Track", log: OSLog.tracker, type:.debug) - dump(event.toDict()) + os_log_sending_event(event) } func pageview(url: String, urlref: String = "", metadata: ParselyMetadata?, extra_data: Dictionary?, idsite: String) { @@ -82,3 +81,18 @@ class Track { videoManager.sendHeartbeats() } } + +/// Utitlity to log sending event with a dump of the event. +private func os_log_sending_event(_ event: Event, log: OSLog = .tracker, type: OSLogType = .debug) { + var eventDump = DumpOutput() + dump(event.toDict(), to: &eventDump) + os_log("Sending an event from Track:\n%@", log: log, type: type, eventDump.content) +} + +private struct DumpOutput: TextOutputStream { + private(set) var content = "" + + mutating func write(_ string: String) { + content.append(string) + } +} From db0661fb4ea24f68f8222bb7cb1ca468326f7339 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Thu, 28 Nov 2024 12:04:40 +1100 Subject: [PATCH 6/6] Add failing test to validate CI picks it up --- Tests/EngagedTimeTests.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tests/EngagedTimeTests.swift b/Tests/EngagedTimeTests.swift index fa4bd27..c5a9e31 100644 --- a/Tests/EngagedTimeTests.swift +++ b/Tests/EngagedTimeTests.swift @@ -6,6 +6,10 @@ class EngagedTimeTests: ParselyTestCase { let testUrl: String = "http://parsely-stuff.com" + func testFailOnPurpose() { + XCTAssert(false) + } + func testHeartbeatFn() { let parsely = makePareslyTracker() let engagedTime = EngagedTime(trackerInstance: parsely)