diff --git a/.yarn/patches/@react-native-harness-coverage-ios-npm-1.3.0-38903ba033.patch b/.yarn/patches/@react-native-harness-coverage-ios-npm-1.3.0-38903ba033.patch new file mode 100644 index 00000000..ad2ca881 --- /dev/null +++ b/.yarn/patches/@react-native-harness-coverage-ios-npm-1.3.0-38903ba033.patch @@ -0,0 +1,17 @@ +diff --git a/HarnessCoverage.podspec b/HarnessCoverage.podspec +index e6b988069a9f5d3306f7d5ce81cbfd9ddf307166..4465df21ef9a717735b38b72f9a0144be492e8ba 100644 +--- a/HarnessCoverage.podspec ++++ b/HarnessCoverage.podspec +@@ -10,9 +10,9 @@ Pod::Spec.new do |s| + s.name = "HarnessCoverage" + s.version = package["version"] + s.summary = package["description"] +- s.homepage = package["homepage"] +- s.license = package["license"] +- s.authors = package["author"] ++ s.homepage = package["homepage"] || "https://github.com/callstackincubator/react-native-harness" ++ s.license = package["license"] || "MIT" ++ s.authors = package["author"] || "Callstack" + + s.platforms = { :ios => "13.0" } + s.source = { :git => "https://github.com/callstackincubator/react-native-harness.git", :tag => "#{s.version}" } diff --git a/.yarn/patches/@react-native-harness-platform-apple-npm-1.3.0-73562dda66.patch b/.yarn/patches/@react-native-harness-platform-apple-npm-1.3.0-73562dda66.patch new file mode 100644 index 00000000..a957da4b --- /dev/null +++ b/.yarn/patches/@react-native-harness-platform-apple-npm-1.3.0-73562dda66.patch @@ -0,0 +1,40 @@ +diff --git a/dist/coverage-collector.js b/dist/coverage-collector.js +index c50c3147561f112fbf2e1cc34ac2e30442f8132b..c7af0645c3b429f44451044cfde40ce9912c3eee 100644 +--- a/dist/coverage-collector.js ++++ b/dist/coverage-collector.js +@@ -65,6 +65,21 @@ export const findAppExecutable = async (appBundlePath) => { + } + return path.join(appBundlePath, executableName); + }; ++const detectBinaryArch = async (binaryPath) => { ++ try { ++ const { stdout } = await spawn('lipo', ['-archs', binaryPath]); ++ const archs = stdout.trim().split(/\s+/); ++ if (archs.length > 1) { ++ const { stdout: hostArch } = await spawn('uname', ['-m']); ++ const arch = hostArch.trim(); ++ logger.debug(`[coverage] Universal binary detected (${archs.join(', ')}), using -arch ${arch}`); ++ return arch; ++ } ++ } ++ catch { ++ } ++ return null; ++}; + export const generateLcov = async (options) => { + const { profdataPath, binaryPath, outputPath, sourceFilters } = options; + const args = [ +@@ -72,8 +87,12 @@ export const generateLcov = async (options) => { + 'export', + '-format=lcov', + `-instr-profile=${profdataPath}`, +- binaryPath, + ]; ++ const arch = await detectBinaryArch(binaryPath); ++ if (arch) { ++ args.push(`-arch=${arch}`); ++ } ++ args.push(binaryPath); + if (sourceFilters) { + for (const filter of sourceFilters) { + args.push(`--sources=${filter}`); diff --git a/example/package.json b/example/package.json index 4dab3e13..155b51e6 100644 --- a/example/package.json +++ b/example/package.json @@ -34,6 +34,7 @@ "@react-native-community/cli": "19.1.2", "@react-native-community/cli-platform-android": "19.1.2", "@react-native-community/cli-platform-ios": "19.1.2", + "@react-native-harness/coverage-ios": "1.3.0", "@react-native-harness/platform-android": "1.3.0", "@react-native-harness/platform-apple": "1.3.0", "@react-native/babel-preset": "0.80.3", diff --git a/example/rn-harness.config.mjs b/example/rn-harness.config.mjs index 07e71e45..1f5fd337 100644 --- a/example/rn-harness.config.mjs +++ b/example/rn-harness.config.mjs @@ -24,4 +24,11 @@ export default { }), ], defaultRunner: 'ios', + coverage: { + native: { + ios: { + pods: ['RNRive'], + }, + }, + }, }; diff --git a/package.json b/package.json index 2c29c786..51f77cc3 100644 --- a/package.json +++ b/package.json @@ -196,6 +196,8 @@ }, "resolutions": { "core-js-compat": "^3.40.0", - "browserslist": "^4.24.4" + "browserslist": "^4.24.4", + "@react-native-harness/platform-apple@1.3.0": "patch:@react-native-harness/platform-apple@npm%3A1.3.0#./.yarn/patches/@react-native-harness-platform-apple-npm-1.3.0-73562dda66.patch", + "@react-native-harness/coverage-ios@1.3.0": "patch:@react-native-harness/coverage-ios@npm%3A1.3.0#./.yarn/patches/@react-native-harness-coverage-ios-npm-1.3.0-38903ba033.patch" } } diff --git a/yarn.lock b/yarn.lock index cf9fda98..90252623 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4627,6 +4627,28 @@ __metadata: languageName: node linkType: hard +"@react-native-harness/coverage-ios@npm:1.3.0": + version: 1.3.0 + resolution: "@react-native-harness/coverage-ios@npm:1.3.0" + dependencies: + tslib: ^2.3.0 + peerDependencies: + react-native: "*" + checksum: 9122359cd8d2efebdcd3cf4abb6e7a825785e2ea7a1d54f8f0a5502a0c81a3a6aa5685940cf0fe8aac83a0bf0bb9078f63aa51ddca2d1a31ff7e05b1a2e226d2 + languageName: node + linkType: hard + +"@react-native-harness/coverage-ios@patch:@react-native-harness/coverage-ios@npm%3A1.3.0#./.yarn/patches/@react-native-harness-coverage-ios-npm-1.3.0-38903ba033.patch::locator=%40rive-app%2Freact-native%40workspace%3A.": + version: 1.3.0 + resolution: "@react-native-harness/coverage-ios@patch:@react-native-harness/coverage-ios@npm%3A1.3.0#./.yarn/patches/@react-native-harness-coverage-ios-npm-1.3.0-38903ba033.patch::version=1.3.0&hash=82a9c4&locator=%40rive-app%2Freact-native%40workspace%3A." + dependencies: + tslib: ^2.3.0 + peerDependencies: + react-native: "*" + checksum: b486c7a5c26f0acd7f75322e89f9afd107823b83d06ad3173a6a0406f48cf5811e6847174104e5ee575405b1934e0c0f6c6bfa87555a4406babd54ca31c3dc4b + languageName: node + linkType: hard + "@react-native-harness/jest@npm:1.3.0": version: 1.3.0 resolution: "@react-native-harness/jest@npm:1.3.0" @@ -4686,6 +4708,20 @@ __metadata: languageName: node linkType: hard +"@react-native-harness/platform-apple@patch:@react-native-harness/platform-apple@npm%3A1.3.0#./.yarn/patches/@react-native-harness-platform-apple-npm-1.3.0-73562dda66.patch::locator=%40rive-app%2Freact-native%40workspace%3A.": + version: 1.3.0 + resolution: "@react-native-harness/platform-apple@patch:@react-native-harness/platform-apple@npm%3A1.3.0#./.yarn/patches/@react-native-harness-platform-apple-npm-1.3.0-73562dda66.patch::version=1.3.0&hash=e90e19&locator=%40rive-app%2Freact-native%40workspace%3A." + dependencies: + "@react-native-harness/config": 1.3.0 + "@react-native-harness/platforms": 1.3.0 + "@react-native-harness/tools": 1.3.0 + tslib: ^2.3.0 + yargs: ^17.7.2 + zod: ^3.25.67 + checksum: aaef0a4f1e0f6a4fe56004384d766bdbc9efd31ea4d8dc203d7db1c1ef52d170a467f5b6b8be6ec4931afff118868e54bc60b740fa0940eac959dbfd93e31f06 + languageName: node + linkType: hard + "@react-native-harness/platforms@npm:1.3.0": version: 1.3.0 resolution: "@react-native-harness/platforms@npm:1.3.0" @@ -17361,6 +17397,7 @@ __metadata: "@react-native-community/cli": 19.1.2 "@react-native-community/cli-platform-android": 19.1.2 "@react-native-community/cli-platform-ios": 19.1.2 + "@react-native-harness/coverage-ios": 1.3.0 "@react-native-harness/platform-android": 1.3.0 "@react-native-harness/platform-apple": 1.3.0 "@react-native-picker/picker": ^2.11.4