fix(platform-ios): fix sourceDir detection - #1444

Merged
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection
Aug 5, 2021
Merged

fix(platform-ios): fix sourceDir detection#1444
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection

Conversation

@tido64

@tido64tido64 commented Jul 12, 2021

Copy link
Copy Markdown
Contributor

Summary:

This is a minimal changes version of #1436. After speaking with @grabbou, I learned that most of the props in config are going away, so we agreed to make as little changes as possible and instead focus on next.

Resolves#1435
Resolvesmicrosoft/react-native-test-app#375

Test Plan:

Curren tests should pass:

 PASS unit packages/platform-android/src/link/patches/__tests__/makeSettingsPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findMatchingSimulator.test.ts
PASS unit packages/platform-android/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/init/__tests__/template.test.ts
PASS unit packages/cli/src/tools/__tests__/packageManager-test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeaderSearchPath.test.ts
PASS unit packages/cli/src/commands/link/__tests__/link.test.ts
PASS unit packages/platform-android/src/commands/runAndroid/__tests__/runOnAllDevices.test.ts
PASS unit packages/cli/src/tools/windows/__tests__/androidWinHelpers.test.ts
PASS unit packages/cli/src/commands/upgrade/__tests__/upgrade.test.ts (5.274 s)
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathAndroid-test.ts
PASS unit packages/platform-ios/src/config/__tests__/findProject.test.ts
PASS unit packages/cli/src/commands/init/__tests__/editTemplate.test.ts (6.21 s)
PASS unit packages/platform-android/src/config/__tests__/findPackageClassName.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeBuildPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseXctraceIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/removePodEntry.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/writePlist.test.ts
PASS unit packages/cli/src/tools/__tests__/copyFiles.test.ts
PASS unit packages/platform-ios/src/link/__tests__/createGroup.test.ts
PASS unit packages/platform-android/src/config/__tests__/getDependencyConfig.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findLineToAddPod.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodspec.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidHomeEnvVariable.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathIOS-test.ts
PASS unit packages/platform-ios/src/link/__tests__/addSharedLibraries.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findXcodeProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getGroup.test.ts
PASS unit packages/platform-ios/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/filterPlatformAssetScales-test.ts
PASS unit packages/platform-ios/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeSharedLibrary.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findAssets-test.ts
PASS unit packages/cli/src/tools/config/__tests__/index-test.ts (12.208 s)
PASS unit packages/platform-ios/src/link-pods/__tests__/findMarkedLinesInPodfile.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeadersInFolder.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromLibraries.test.ts
PASS unit packages/platform-ios/src/link/__tests__/mapHeaderSearchPaths.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findPodTargetLine.test.ts
PASS unit packages/platform-android/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-android/src/config/__tests__/readManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makePackagePatch.test.ts
PASS unit packages/cli/src/commands/init/__tests__/validate.test.ts
PASS unit packages/platform-ios/src/link/__tests__/hasLibraryImported.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findProjectRoot-test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidStudio.test.ts (10.519 s)
PASS unit packages/platform-ios/src/link/__tests__/addProjectToLibraries.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/jdk.test.ts (13.899 s)
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidSDK.test.ts (13.944 s)
PASS unit packages/platform-ios/src/link/__tests__/addFileToProject.test.ts
PASS unit packages/platform-android/src/config/__tests__/findAndroidDir.test.ts
PASS unit packages/platform-android/src/config/__tests__/findManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeImportPatch.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeStringsPatch.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/getDependenciesFromPodfileLock.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getTargets.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidNDK.test.ts (11.249 s)
PASS unit packages/platform-ios/src/link/__tests__/getBuildProperty.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlistPath.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findDependencies-test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/applyParams.test.ts
PASS unit packages/tools/src/__tests__/groupFilesByType.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/normalizeProjectName.test.ts
PASS unit jest/__tests__/replaceProjectRootInOutput.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodfilePath.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlist.test.ts
PASS unit packages/cli/src/tools/__tests__/loadMetroConfig-test.ts
PASS unit packages/cli/src/commands/link/__tests__/makeHook.test.ts
1;
PASS e2e __e2e__/unknown.test.ts
PASS e2e __e2e__/default.test.ts
PASS e2e __e2e__/uninstall.test.ts (11.808 s)
PASS unit packages/cli/src/commands/info/__tests__/info.test.ts (8.752 s)
PASS e2e __e2e__/install.test.ts (10.138 s)
PASS e2e __e2e__/init.test.ts (30.857 s)
PASS e2e __e2e__/config.test.ts (135.075 s)
PASS e2e __e2e__/root.test.ts (138.565 s)
Test Suites: 2 skipped, 79 passed, 79 of 81 total
Tests: 10 skipped, 2 todo, 287 passed, 299 total
Snapshots: 28 passed, 28 total
Time: 147.844 s
Ran all test suites in 2 projects.

@thymikee

Copy link
Copy Markdown
Member

@grabbou wdyt?

@kelset

Copy link
Copy Markdown
Member

@thymikee is this blocked on @grabbou, or could we get it in? It's been open for a while 😓

@thymikee

Copy link
Copy Markdown
Member

I didn't have the time to properly review this yet, so would still like @grabbou or @Esemesek to take a look

@grabbou

Copy link
Copy Markdown
Member

Apologies for the waiting time. The reason I didn't act on this PR earlier was that I was thinking how to move forward with this one. Like @tido64 said, all the logic around sourceDir and projectPath is going away in the nearest future, as they are not needed for the autolinking. We only care about a Podfile.

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

Instead, I would work on adding a temporary configuration option to override what does not work. For example, we could allow overriding sourceDir or a podfile in case it didn't work out of the box.

// This is a temporary fix for #1435. In certain repos, the Xcode project can
// be generated by a tool. The only file that we can assume to exist on disk
// is `Podfile`.
const sourceDir = podfile ? path.dirname(podfile) : path.dirname(projectPath);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would not change this one to be honest, sourceDir is not needed for autolinking, so there's no need to adjust it for cases when xcodeproj doesn't exist. It is needed for legacy link command and in the case of a missing xcodeproj, that would fail anyway.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like it is being used for autolinking:

project_root=Pathname.new(config["project"]["ios"]["sourceDir"])

Without this change, we hit errors similar to this when running pod install:

[!] No podspec found for `ReactTestApp-DevSupport` in `..`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You’re right 😅

@grabbougrabbou closed this Aug 4, 2021
@grabbougrabbou reopened this Aug 4, 2021
@grabbougrabbou closed this Aug 4, 2021
@tido64

Copy link
Copy Markdown
ContributorAuthor

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

But it's not fundamentally changing how you're resolving a Podfile today. The logic is still the same for the success case. Only in the case of it failing, are we resorting to a glob search. I don't understand how that is a risk? If it was failing before, it wouldn't be any worse with the current change.

@grabbou

Copy link
Copy Markdown
Member

Reopening as it looks like that’s our only way to go in this case for time being.

@grabbougrabbou reopened this Aug 5, 2021
@grabbou

Copy link
Copy Markdown
Member

After taking another pass and your explanations @tido64, it looks good 👍

@grabbou
grabbou merged commit 59cfbd9 into react-native-community:masterAug 5, 2021
thymikee pushed a commit that referenced this pull request Aug 5, 2021
* fix(platform-ios): fix `sourceDir` detection
See also #1054 and #1436.
Resolves#1435.
* yarn lint --fix
@thymikee

Copy link
Copy Markdown
Member

@tido64 published @react-native-community/cli-platform-ios@5.0.2 with this fix as well. Thanks!

@tido64
tido64 deleted the tido/fix-sourcedir-detection branch August 6, 2021 19:33
@tido64

tido64 commented Aug 6, 2021

Copy link
Copy Markdown
ContributorAuthor

Thanks for backporting it, @thymikee. Did it get published? I don't see it in the feed yet: https://www.npmjs.com/package/@react-native-community/cli?activeTab=versions Never mind! I was looking at the wrong package 😛

@joshchoo

Copy link
Copy Markdown

Hi @tido64,

I'm facing a problem with podspec path resolution on one of the packages I'm using: react-native-emarsys-wrapper.
The package doesn't use auto-linking, and it defines a sample Podfile in sample/ios/Podfile.

This change causes sourceDir to resolve to sample/ios instead of ios because of the location of the sample Podfile. Consequently, native_modules.rb can't find the podspec file and logs the warning "use_native_modules! skipped the react-native dependency react-native-emarsys-wrapper. No podspec file was found".

I'm currently working around this by patching react-native-emarsys-wrapper to remove sample/ios/Podfile to avoid incorrect sourceDir resolution. Is there a better way to resolve sourceDir, such as editing react-native.config.js, to fix it? Or should I wait for this temporary fix to be removed?

Environment

  • React Native: 0.66.0

@tido64

Copy link
Copy Markdown
ContributorAuthor

@joshchoo: You can explicitly disable it in your react-native.config.js: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md#how-can-i-disable-autolinking-for-unsupported-library

This way you don't have to patch the package.

Is the sample folder an essential part of the package? Otherwise, I would exclude it from the published package. As far as I know, the "next" version that will make this temporary fix unnecessary is being worked on, but I don't have any other information.

@joshchoo

Copy link
Copy Markdown

@tido64, thanks for your help! Disabling autolinking via react-native.config.js works for my case.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

5 participants

@tido64@thymikee@kelset@grabbou@joshchoo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(platform-ios): fix sourceDir detection - #1444

Merged
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection
Aug 5, 2021
Merged

fix(platform-ios): fix sourceDir detection#1444
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection

Conversation

@tido64

@tido64tido64 commented Jul 12, 2021

Copy link
Copy Markdown
Contributor

Summary:

This is a minimal changes version of #1436. After speaking with @grabbou, I learned that most of the props in config are going away, so we agreed to make as little changes as possible and instead focus on next.

Resolves#1435
Resolvesmicrosoft/react-native-test-app#375

Test Plan:

Curren tests should pass:

 PASS unit packages/platform-android/src/link/patches/__tests__/makeSettingsPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findMatchingSimulator.test.ts
PASS unit packages/platform-android/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/init/__tests__/template.test.ts
PASS unit packages/cli/src/tools/__tests__/packageManager-test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeaderSearchPath.test.ts
PASS unit packages/cli/src/commands/link/__tests__/link.test.ts
PASS unit packages/platform-android/src/commands/runAndroid/__tests__/runOnAllDevices.test.ts
PASS unit packages/cli/src/tools/windows/__tests__/androidWinHelpers.test.ts
PASS unit packages/cli/src/commands/upgrade/__tests__/upgrade.test.ts (5.274 s)
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathAndroid-test.ts
PASS unit packages/platform-ios/src/config/__tests__/findProject.test.ts
PASS unit packages/cli/src/commands/init/__tests__/editTemplate.test.ts (6.21 s)
PASS unit packages/platform-android/src/config/__tests__/findPackageClassName.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeBuildPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseXctraceIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/removePodEntry.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/writePlist.test.ts
PASS unit packages/cli/src/tools/__tests__/copyFiles.test.ts
PASS unit packages/platform-ios/src/link/__tests__/createGroup.test.ts
PASS unit packages/platform-android/src/config/__tests__/getDependencyConfig.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findLineToAddPod.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodspec.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidHomeEnvVariable.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathIOS-test.ts
PASS unit packages/platform-ios/src/link/__tests__/addSharedLibraries.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findXcodeProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getGroup.test.ts
PASS unit packages/platform-ios/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/filterPlatformAssetScales-test.ts
PASS unit packages/platform-ios/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeSharedLibrary.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findAssets-test.ts
PASS unit packages/cli/src/tools/config/__tests__/index-test.ts (12.208 s)
PASS unit packages/platform-ios/src/link-pods/__tests__/findMarkedLinesInPodfile.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeadersInFolder.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromLibraries.test.ts
PASS unit packages/platform-ios/src/link/__tests__/mapHeaderSearchPaths.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findPodTargetLine.test.ts
PASS unit packages/platform-android/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-android/src/config/__tests__/readManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makePackagePatch.test.ts
PASS unit packages/cli/src/commands/init/__tests__/validate.test.ts
PASS unit packages/platform-ios/src/link/__tests__/hasLibraryImported.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findProjectRoot-test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidStudio.test.ts (10.519 s)
PASS unit packages/platform-ios/src/link/__tests__/addProjectToLibraries.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/jdk.test.ts (13.899 s)
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidSDK.test.ts (13.944 s)
PASS unit packages/platform-ios/src/link/__tests__/addFileToProject.test.ts
PASS unit packages/platform-android/src/config/__tests__/findAndroidDir.test.ts
PASS unit packages/platform-android/src/config/__tests__/findManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeImportPatch.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeStringsPatch.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/getDependenciesFromPodfileLock.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getTargets.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidNDK.test.ts (11.249 s)
PASS unit packages/platform-ios/src/link/__tests__/getBuildProperty.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlistPath.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findDependencies-test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/applyParams.test.ts
PASS unit packages/tools/src/__tests__/groupFilesByType.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/normalizeProjectName.test.ts
PASS unit jest/__tests__/replaceProjectRootInOutput.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodfilePath.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlist.test.ts
PASS unit packages/cli/src/tools/__tests__/loadMetroConfig-test.ts
PASS unit packages/cli/src/commands/link/__tests__/makeHook.test.ts
1;
PASS e2e __e2e__/unknown.test.ts
PASS e2e __e2e__/default.test.ts
PASS e2e __e2e__/uninstall.test.ts (11.808 s)
PASS unit packages/cli/src/commands/info/__tests__/info.test.ts (8.752 s)
PASS e2e __e2e__/install.test.ts (10.138 s)
PASS e2e __e2e__/init.test.ts (30.857 s)
PASS e2e __e2e__/config.test.ts (135.075 s)
PASS e2e __e2e__/root.test.ts (138.565 s)
Test Suites: 2 skipped, 79 passed, 79 of 81 total
Tests: 10 skipped, 2 todo, 287 passed, 299 total
Snapshots: 28 passed, 28 total
Time: 147.844 s
Ran all test suites in 2 projects.

@thymikee

Copy link
Copy Markdown
Member

@grabbou wdyt?

@kelset

Copy link
Copy Markdown
Member

@thymikee is this blocked on @grabbou, or could we get it in? It's been open for a while 😓

@thymikee

Copy link
Copy Markdown
Member

I didn't have the time to properly review this yet, so would still like @grabbou or @Esemesek to take a look

@grabbou

Copy link
Copy Markdown
Member

Apologies for the waiting time. The reason I didn't act on this PR earlier was that I was thinking how to move forward with this one. Like @tido64 said, all the logic around sourceDir and projectPath is going away in the nearest future, as they are not needed for the autolinking. We only care about a Podfile.

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

Instead, I would work on adding a temporary configuration option to override what does not work. For example, we could allow overriding sourceDir or a podfile in case it didn't work out of the box.

// This is a temporary fix for #1435. In certain repos, the Xcode project can
// be generated by a tool. The only file that we can assume to exist on disk
// is `Podfile`.
const sourceDir = podfile ? path.dirname(podfile) : path.dirname(projectPath);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would not change this one to be honest, sourceDir is not needed for autolinking, so there's no need to adjust it for cases when xcodeproj doesn't exist. It is needed for legacy link command and in the case of a missing xcodeproj, that would fail anyway.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like it is being used for autolinking:

project_root=Pathname.new(config["project"]["ios"]["sourceDir"])

Without this change, we hit errors similar to this when running pod install:

[!] No podspec found for `ReactTestApp-DevSupport` in `..`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You’re right 😅

@grabbougrabbou closed this Aug 4, 2021
@grabbougrabbou reopened this Aug 4, 2021
@grabbougrabbou closed this Aug 4, 2021
@tido64

Copy link
Copy Markdown
ContributorAuthor

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

But it's not fundamentally changing how you're resolving a Podfile today. The logic is still the same for the success case. Only in the case of it failing, are we resorting to a glob search. I don't understand how that is a risk? If it was failing before, it wouldn't be any worse with the current change.

@grabbou

Copy link
Copy Markdown
Member

Reopening as it looks like that’s our only way to go in this case for time being.

@grabbougrabbou reopened this Aug 5, 2021
@grabbou

Copy link
Copy Markdown
Member

After taking another pass and your explanations @tido64, it looks good 👍

@grabbou
grabbou merged commit 59cfbd9 into react-native-community:masterAug 5, 2021
thymikee pushed a commit that referenced this pull request Aug 5, 2021
* fix(platform-ios): fix `sourceDir` detection
See also #1054 and #1436.
Resolves#1435.
* yarn lint --fix
@thymikee

Copy link
Copy Markdown
Member

@tido64 published @react-native-community/cli-platform-ios@5.0.2 with this fix as well. Thanks!

@tido64
tido64 deleted the tido/fix-sourcedir-detection branch August 6, 2021 19:33
@tido64

tido64 commented Aug 6, 2021

Copy link
Copy Markdown
ContributorAuthor

Thanks for backporting it, @thymikee. Did it get published? I don't see it in the feed yet: https://www.npmjs.com/package/@react-native-community/cli?activeTab=versions Never mind! I was looking at the wrong package 😛

@joshchoo

Copy link
Copy Markdown

Hi @tido64,

I'm facing a problem with podspec path resolution on one of the packages I'm using: react-native-emarsys-wrapper.
The package doesn't use auto-linking, and it defines a sample Podfile in sample/ios/Podfile.

This change causes sourceDir to resolve to sample/ios instead of ios because of the location of the sample Podfile. Consequently, native_modules.rb can't find the podspec file and logs the warning "use_native_modules! skipped the react-native dependency react-native-emarsys-wrapper. No podspec file was found".

I'm currently working around this by patching react-native-emarsys-wrapper to remove sample/ios/Podfile to avoid incorrect sourceDir resolution. Is there a better way to resolve sourceDir, such as editing react-native.config.js, to fix it? Or should I wait for this temporary fix to be removed?

Environment

  • React Native: 0.66.0

@tido64

Copy link
Copy Markdown
ContributorAuthor

@joshchoo: You can explicitly disable it in your react-native.config.js: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md#how-can-i-disable-autolinking-for-unsupported-library

This way you don't have to patch the package.

Is the sample folder an essential part of the package? Otherwise, I would exclude it from the published package. As far as I know, the "next" version that will make this temporary fix unnecessary is being worked on, but I don't have any other information.

@joshchoo

Copy link
Copy Markdown

@tido64, thanks for your help! Disabling autolinking via react-native.config.js works for my case.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

5 participants

@tido64@thymikee@kelset@grabbou@joshchoo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(platform-ios): fix sourceDir detection - #1444

Merged
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection
Aug 5, 2021
Merged

fix(platform-ios): fix sourceDir detection#1444
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection

Conversation

@tido64

@tido64tido64 commented Jul 12, 2021

Copy link
Copy Markdown
Contributor

Summary:

This is a minimal changes version of #1436. After speaking with @grabbou, I learned that most of the props in config are going away, so we agreed to make as little changes as possible and instead focus on next.

Resolves#1435
Resolvesmicrosoft/react-native-test-app#375

Test Plan:

Curren tests should pass:

 PASS unit packages/platform-android/src/link/patches/__tests__/makeSettingsPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findMatchingSimulator.test.ts
PASS unit packages/platform-android/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/init/__tests__/template.test.ts
PASS unit packages/cli/src/tools/__tests__/packageManager-test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeaderSearchPath.test.ts
PASS unit packages/cli/src/commands/link/__tests__/link.test.ts
PASS unit packages/platform-android/src/commands/runAndroid/__tests__/runOnAllDevices.test.ts
PASS unit packages/cli/src/tools/windows/__tests__/androidWinHelpers.test.ts
PASS unit packages/cli/src/commands/upgrade/__tests__/upgrade.test.ts (5.274 s)
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathAndroid-test.ts
PASS unit packages/platform-ios/src/config/__tests__/findProject.test.ts
PASS unit packages/cli/src/commands/init/__tests__/editTemplate.test.ts (6.21 s)
PASS unit packages/platform-android/src/config/__tests__/findPackageClassName.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeBuildPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseXctraceIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/removePodEntry.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/writePlist.test.ts
PASS unit packages/cli/src/tools/__tests__/copyFiles.test.ts
PASS unit packages/platform-ios/src/link/__tests__/createGroup.test.ts
PASS unit packages/platform-android/src/config/__tests__/getDependencyConfig.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findLineToAddPod.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodspec.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidHomeEnvVariable.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathIOS-test.ts
PASS unit packages/platform-ios/src/link/__tests__/addSharedLibraries.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findXcodeProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getGroup.test.ts
PASS unit packages/platform-ios/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/filterPlatformAssetScales-test.ts
PASS unit packages/platform-ios/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeSharedLibrary.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findAssets-test.ts
PASS unit packages/cli/src/tools/config/__tests__/index-test.ts (12.208 s)
PASS unit packages/platform-ios/src/link-pods/__tests__/findMarkedLinesInPodfile.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeadersInFolder.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromLibraries.test.ts
PASS unit packages/platform-ios/src/link/__tests__/mapHeaderSearchPaths.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findPodTargetLine.test.ts
PASS unit packages/platform-android/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-android/src/config/__tests__/readManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makePackagePatch.test.ts
PASS unit packages/cli/src/commands/init/__tests__/validate.test.ts
PASS unit packages/platform-ios/src/link/__tests__/hasLibraryImported.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findProjectRoot-test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidStudio.test.ts (10.519 s)
PASS unit packages/platform-ios/src/link/__tests__/addProjectToLibraries.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/jdk.test.ts (13.899 s)
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidSDK.test.ts (13.944 s)
PASS unit packages/platform-ios/src/link/__tests__/addFileToProject.test.ts
PASS unit packages/platform-android/src/config/__tests__/findAndroidDir.test.ts
PASS unit packages/platform-android/src/config/__tests__/findManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeImportPatch.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeStringsPatch.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/getDependenciesFromPodfileLock.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getTargets.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidNDK.test.ts (11.249 s)
PASS unit packages/platform-ios/src/link/__tests__/getBuildProperty.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlistPath.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findDependencies-test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/applyParams.test.ts
PASS unit packages/tools/src/__tests__/groupFilesByType.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/normalizeProjectName.test.ts
PASS unit jest/__tests__/replaceProjectRootInOutput.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodfilePath.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlist.test.ts
PASS unit packages/cli/src/tools/__tests__/loadMetroConfig-test.ts
PASS unit packages/cli/src/commands/link/__tests__/makeHook.test.ts
1;
PASS e2e __e2e__/unknown.test.ts
PASS e2e __e2e__/default.test.ts
PASS e2e __e2e__/uninstall.test.ts (11.808 s)
PASS unit packages/cli/src/commands/info/__tests__/info.test.ts (8.752 s)
PASS e2e __e2e__/install.test.ts (10.138 s)
PASS e2e __e2e__/init.test.ts (30.857 s)
PASS e2e __e2e__/config.test.ts (135.075 s)
PASS e2e __e2e__/root.test.ts (138.565 s)
Test Suites: 2 skipped, 79 passed, 79 of 81 total
Tests: 10 skipped, 2 todo, 287 passed, 299 total
Snapshots: 28 passed, 28 total
Time: 147.844 s
Ran all test suites in 2 projects.

@thymikee

Copy link
Copy Markdown
Member

@grabbou wdyt?

@kelset

Copy link
Copy Markdown
Member

@thymikee is this blocked on @grabbou, or could we get it in? It's been open for a while 😓

@thymikee

Copy link
Copy Markdown
Member

I didn't have the time to properly review this yet, so would still like @grabbou or @Esemesek to take a look

@grabbou

Copy link
Copy Markdown
Member

Apologies for the waiting time. The reason I didn't act on this PR earlier was that I was thinking how to move forward with this one. Like @tido64 said, all the logic around sourceDir and projectPath is going away in the nearest future, as they are not needed for the autolinking. We only care about a Podfile.

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

Instead, I would work on adding a temporary configuration option to override what does not work. For example, we could allow overriding sourceDir or a podfile in case it didn't work out of the box.

// This is a temporary fix for #1435. In certain repos, the Xcode project can
// be generated by a tool. The only file that we can assume to exist on disk
// is `Podfile`.
const sourceDir = podfile ? path.dirname(podfile) : path.dirname(projectPath);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would not change this one to be honest, sourceDir is not needed for autolinking, so there's no need to adjust it for cases when xcodeproj doesn't exist. It is needed for legacy link command and in the case of a missing xcodeproj, that would fail anyway.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like it is being used for autolinking:

project_root=Pathname.new(config["project"]["ios"]["sourceDir"])

Without this change, we hit errors similar to this when running pod install:

[!] No podspec found for `ReactTestApp-DevSupport` in `..`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You’re right 😅

@grabbougrabbou closed this Aug 4, 2021
@grabbougrabbou reopened this Aug 4, 2021
@grabbougrabbou closed this Aug 4, 2021
@tido64

Copy link
Copy Markdown
ContributorAuthor

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

But it's not fundamentally changing how you're resolving a Podfile today. The logic is still the same for the success case. Only in the case of it failing, are we resorting to a glob search. I don't understand how that is a risk? If it was failing before, it wouldn't be any worse with the current change.

@grabbou

Copy link
Copy Markdown
Member

Reopening as it looks like that’s our only way to go in this case for time being.

@grabbougrabbou reopened this Aug 5, 2021
@grabbou

Copy link
Copy Markdown
Member

After taking another pass and your explanations @tido64, it looks good 👍

@grabbou
grabbou merged commit 59cfbd9 into react-native-community:masterAug 5, 2021
thymikee pushed a commit that referenced this pull request Aug 5, 2021
* fix(platform-ios): fix `sourceDir` detection
See also #1054 and #1436.
Resolves#1435.
* yarn lint --fix
@thymikee

Copy link
Copy Markdown
Member

@tido64 published @react-native-community/cli-platform-ios@5.0.2 with this fix as well. Thanks!

@tido64
tido64 deleted the tido/fix-sourcedir-detection branch August 6, 2021 19:33
@tido64

tido64 commented Aug 6, 2021

Copy link
Copy Markdown
ContributorAuthor

Thanks for backporting it, @thymikee. Did it get published? I don't see it in the feed yet: https://www.npmjs.com/package/@react-native-community/cli?activeTab=versions Never mind! I was looking at the wrong package 😛

@joshchoo

Copy link
Copy Markdown

Hi @tido64,

I'm facing a problem with podspec path resolution on one of the packages I'm using: react-native-emarsys-wrapper.
The package doesn't use auto-linking, and it defines a sample Podfile in sample/ios/Podfile.

This change causes sourceDir to resolve to sample/ios instead of ios because of the location of the sample Podfile. Consequently, native_modules.rb can't find the podspec file and logs the warning "use_native_modules! skipped the react-native dependency react-native-emarsys-wrapper. No podspec file was found".

I'm currently working around this by patching react-native-emarsys-wrapper to remove sample/ios/Podfile to avoid incorrect sourceDir resolution. Is there a better way to resolve sourceDir, such as editing react-native.config.js, to fix it? Or should I wait for this temporary fix to be removed?

Environment

  • React Native: 0.66.0

@tido64

Copy link
Copy Markdown
ContributorAuthor

@joshchoo: You can explicitly disable it in your react-native.config.js: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md#how-can-i-disable-autolinking-for-unsupported-library

This way you don't have to patch the package.

Is the sample folder an essential part of the package? Otherwise, I would exclude it from the published package. As far as I know, the "next" version that will make this temporary fix unnecessary is being worked on, but I don't have any other information.

@joshchoo

Copy link
Copy Markdown

@tido64, thanks for your help! Disabling autolinking via react-native.config.js works for my case.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

5 participants

@tido64@thymikee@kelset@grabbou@joshchoo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(platform-ios): fix sourceDir detection - #1444

Merged
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection
Aug 5, 2021
Merged

fix(platform-ios): fix sourceDir detection#1444
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection

Conversation

@tido64

@tido64tido64 commented Jul 12, 2021

Copy link
Copy Markdown
Contributor

Summary:

This is a minimal changes version of #1436. After speaking with @grabbou, I learned that most of the props in config are going away, so we agreed to make as little changes as possible and instead focus on next.

Resolves#1435
Resolvesmicrosoft/react-native-test-app#375

Test Plan:

Curren tests should pass:

 PASS unit packages/platform-android/src/link/patches/__tests__/makeSettingsPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findMatchingSimulator.test.ts
PASS unit packages/platform-android/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/init/__tests__/template.test.ts
PASS unit packages/cli/src/tools/__tests__/packageManager-test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeaderSearchPath.test.ts
PASS unit packages/cli/src/commands/link/__tests__/link.test.ts
PASS unit packages/platform-android/src/commands/runAndroid/__tests__/runOnAllDevices.test.ts
PASS unit packages/cli/src/tools/windows/__tests__/androidWinHelpers.test.ts
PASS unit packages/cli/src/commands/upgrade/__tests__/upgrade.test.ts (5.274 s)
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathAndroid-test.ts
PASS unit packages/platform-ios/src/config/__tests__/findProject.test.ts
PASS unit packages/cli/src/commands/init/__tests__/editTemplate.test.ts (6.21 s)
PASS unit packages/platform-android/src/config/__tests__/findPackageClassName.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeBuildPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseXctraceIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/removePodEntry.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/writePlist.test.ts
PASS unit packages/cli/src/tools/__tests__/copyFiles.test.ts
PASS unit packages/platform-ios/src/link/__tests__/createGroup.test.ts
PASS unit packages/platform-android/src/config/__tests__/getDependencyConfig.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findLineToAddPod.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodspec.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidHomeEnvVariable.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathIOS-test.ts
PASS unit packages/platform-ios/src/link/__tests__/addSharedLibraries.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findXcodeProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getGroup.test.ts
PASS unit packages/platform-ios/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/filterPlatformAssetScales-test.ts
PASS unit packages/platform-ios/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeSharedLibrary.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findAssets-test.ts
PASS unit packages/cli/src/tools/config/__tests__/index-test.ts (12.208 s)
PASS unit packages/platform-ios/src/link-pods/__tests__/findMarkedLinesInPodfile.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeadersInFolder.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromLibraries.test.ts
PASS unit packages/platform-ios/src/link/__tests__/mapHeaderSearchPaths.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findPodTargetLine.test.ts
PASS unit packages/platform-android/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-android/src/config/__tests__/readManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makePackagePatch.test.ts
PASS unit packages/cli/src/commands/init/__tests__/validate.test.ts
PASS unit packages/platform-ios/src/link/__tests__/hasLibraryImported.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findProjectRoot-test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidStudio.test.ts (10.519 s)
PASS unit packages/platform-ios/src/link/__tests__/addProjectToLibraries.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/jdk.test.ts (13.899 s)
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidSDK.test.ts (13.944 s)
PASS unit packages/platform-ios/src/link/__tests__/addFileToProject.test.ts
PASS unit packages/platform-android/src/config/__tests__/findAndroidDir.test.ts
PASS unit packages/platform-android/src/config/__tests__/findManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeImportPatch.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeStringsPatch.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/getDependenciesFromPodfileLock.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getTargets.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidNDK.test.ts (11.249 s)
PASS unit packages/platform-ios/src/link/__tests__/getBuildProperty.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlistPath.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findDependencies-test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/applyParams.test.ts
PASS unit packages/tools/src/__tests__/groupFilesByType.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/normalizeProjectName.test.ts
PASS unit jest/__tests__/replaceProjectRootInOutput.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodfilePath.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlist.test.ts
PASS unit packages/cli/src/tools/__tests__/loadMetroConfig-test.ts
PASS unit packages/cli/src/commands/link/__tests__/makeHook.test.ts
1;
PASS e2e __e2e__/unknown.test.ts
PASS e2e __e2e__/default.test.ts
PASS e2e __e2e__/uninstall.test.ts (11.808 s)
PASS unit packages/cli/src/commands/info/__tests__/info.test.ts (8.752 s)
PASS e2e __e2e__/install.test.ts (10.138 s)
PASS e2e __e2e__/init.test.ts (30.857 s)
PASS e2e __e2e__/config.test.ts (135.075 s)
PASS e2e __e2e__/root.test.ts (138.565 s)
Test Suites: 2 skipped, 79 passed, 79 of 81 total
Tests: 10 skipped, 2 todo, 287 passed, 299 total
Snapshots: 28 passed, 28 total
Time: 147.844 s
Ran all test suites in 2 projects.

@thymikee

Copy link
Copy Markdown
Member

@grabbou wdyt?

@kelset

Copy link
Copy Markdown
Member

@thymikee is this blocked on @grabbou, or could we get it in? It's been open for a while 😓

@thymikee

Copy link
Copy Markdown
Member

I didn't have the time to properly review this yet, so would still like @grabbou or @Esemesek to take a look

@grabbou

Copy link
Copy Markdown
Member

Apologies for the waiting time. The reason I didn't act on this PR earlier was that I was thinking how to move forward with this one. Like @tido64 said, all the logic around sourceDir and projectPath is going away in the nearest future, as they are not needed for the autolinking. We only care about a Podfile.

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

Instead, I would work on adding a temporary configuration option to override what does not work. For example, we could allow overriding sourceDir or a podfile in case it didn't work out of the box.

// This is a temporary fix for #1435. In certain repos, the Xcode project can
// be generated by a tool. The only file that we can assume to exist on disk
// is `Podfile`.
const sourceDir = podfile ? path.dirname(podfile) : path.dirname(projectPath);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would not change this one to be honest, sourceDir is not needed for autolinking, so there's no need to adjust it for cases when xcodeproj doesn't exist. It is needed for legacy link command and in the case of a missing xcodeproj, that would fail anyway.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like it is being used for autolinking:

project_root=Pathname.new(config["project"]["ios"]["sourceDir"])

Without this change, we hit errors similar to this when running pod install:

[!] No podspec found for `ReactTestApp-DevSupport` in `..`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You’re right 😅

@grabbougrabbou closed this Aug 4, 2021
@grabbougrabbou reopened this Aug 4, 2021
@grabbougrabbou closed this Aug 4, 2021
@tido64

Copy link
Copy Markdown
ContributorAuthor

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

But it's not fundamentally changing how you're resolving a Podfile today. The logic is still the same for the success case. Only in the case of it failing, are we resorting to a glob search. I don't understand how that is a risk? If it was failing before, it wouldn't be any worse with the current change.

@grabbou

Copy link
Copy Markdown
Member

Reopening as it looks like that’s our only way to go in this case for time being.

@grabbougrabbou reopened this Aug 5, 2021
@grabbou

Copy link
Copy Markdown
Member

After taking another pass and your explanations @tido64, it looks good 👍

@grabbou
grabbou merged commit 59cfbd9 into react-native-community:masterAug 5, 2021
thymikee pushed a commit that referenced this pull request Aug 5, 2021
* fix(platform-ios): fix `sourceDir` detection
See also #1054 and #1436.
Resolves#1435.
* yarn lint --fix
@thymikee

Copy link
Copy Markdown
Member

@tido64 published @react-native-community/cli-platform-ios@5.0.2 with this fix as well. Thanks!

@tido64
tido64 deleted the tido/fix-sourcedir-detection branch August 6, 2021 19:33
@tido64

tido64 commented Aug 6, 2021

Copy link
Copy Markdown
ContributorAuthor

Thanks for backporting it, @thymikee. Did it get published? I don't see it in the feed yet: https://www.npmjs.com/package/@react-native-community/cli?activeTab=versions Never mind! I was looking at the wrong package 😛

@joshchoo

Copy link
Copy Markdown

Hi @tido64,

I'm facing a problem with podspec path resolution on one of the packages I'm using: react-native-emarsys-wrapper.
The package doesn't use auto-linking, and it defines a sample Podfile in sample/ios/Podfile.

This change causes sourceDir to resolve to sample/ios instead of ios because of the location of the sample Podfile. Consequently, native_modules.rb can't find the podspec file and logs the warning "use_native_modules! skipped the react-native dependency react-native-emarsys-wrapper. No podspec file was found".

I'm currently working around this by patching react-native-emarsys-wrapper to remove sample/ios/Podfile to avoid incorrect sourceDir resolution. Is there a better way to resolve sourceDir, such as editing react-native.config.js, to fix it? Or should I wait for this temporary fix to be removed?

Environment

  • React Native: 0.66.0

@tido64

Copy link
Copy Markdown
ContributorAuthor

@joshchoo: You can explicitly disable it in your react-native.config.js: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md#how-can-i-disable-autolinking-for-unsupported-library

This way you don't have to patch the package.

Is the sample folder an essential part of the package? Otherwise, I would exclude it from the published package. As far as I know, the "next" version that will make this temporary fix unnecessary is being worked on, but I don't have any other information.

@joshchoo

Copy link
Copy Markdown

@tido64, thanks for your help! Disabling autolinking via react-native.config.js works for my case.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

5 participants

@tido64@thymikee@kelset@grabbou@joshchoo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(platform-ios): fix sourceDir detection - #1444

Merged
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection
Aug 5, 2021
Merged

fix(platform-ios): fix sourceDir detection#1444
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection

Conversation

@tido64

@tido64tido64 commented Jul 12, 2021

Copy link
Copy Markdown
Contributor

Summary:

This is a minimal changes version of #1436. After speaking with @grabbou, I learned that most of the props in config are going away, so we agreed to make as little changes as possible and instead focus on next.

Resolves#1435
Resolvesmicrosoft/react-native-test-app#375

Test Plan:

Curren tests should pass:

 PASS unit packages/platform-android/src/link/patches/__tests__/makeSettingsPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findMatchingSimulator.test.ts
PASS unit packages/platform-android/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/init/__tests__/template.test.ts
PASS unit packages/cli/src/tools/__tests__/packageManager-test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeaderSearchPath.test.ts
PASS unit packages/cli/src/commands/link/__tests__/link.test.ts
PASS unit packages/platform-android/src/commands/runAndroid/__tests__/runOnAllDevices.test.ts
PASS unit packages/cli/src/tools/windows/__tests__/androidWinHelpers.test.ts
PASS unit packages/cli/src/commands/upgrade/__tests__/upgrade.test.ts (5.274 s)
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathAndroid-test.ts
PASS unit packages/platform-ios/src/config/__tests__/findProject.test.ts
PASS unit packages/cli/src/commands/init/__tests__/editTemplate.test.ts (6.21 s)
PASS unit packages/platform-android/src/config/__tests__/findPackageClassName.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeBuildPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseXctraceIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/removePodEntry.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/writePlist.test.ts
PASS unit packages/cli/src/tools/__tests__/copyFiles.test.ts
PASS unit packages/platform-ios/src/link/__tests__/createGroup.test.ts
PASS unit packages/platform-android/src/config/__tests__/getDependencyConfig.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findLineToAddPod.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodspec.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidHomeEnvVariable.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathIOS-test.ts
PASS unit packages/platform-ios/src/link/__tests__/addSharedLibraries.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findXcodeProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getGroup.test.ts
PASS unit packages/platform-ios/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/filterPlatformAssetScales-test.ts
PASS unit packages/platform-ios/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeSharedLibrary.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findAssets-test.ts
PASS unit packages/cli/src/tools/config/__tests__/index-test.ts (12.208 s)
PASS unit packages/platform-ios/src/link-pods/__tests__/findMarkedLinesInPodfile.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeadersInFolder.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromLibraries.test.ts
PASS unit packages/platform-ios/src/link/__tests__/mapHeaderSearchPaths.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findPodTargetLine.test.ts
PASS unit packages/platform-android/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-android/src/config/__tests__/readManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makePackagePatch.test.ts
PASS unit packages/cli/src/commands/init/__tests__/validate.test.ts
PASS unit packages/platform-ios/src/link/__tests__/hasLibraryImported.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findProjectRoot-test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidStudio.test.ts (10.519 s)
PASS unit packages/platform-ios/src/link/__tests__/addProjectToLibraries.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/jdk.test.ts (13.899 s)
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidSDK.test.ts (13.944 s)
PASS unit packages/platform-ios/src/link/__tests__/addFileToProject.test.ts
PASS unit packages/platform-android/src/config/__tests__/findAndroidDir.test.ts
PASS unit packages/platform-android/src/config/__tests__/findManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeImportPatch.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeStringsPatch.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/getDependenciesFromPodfileLock.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getTargets.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidNDK.test.ts (11.249 s)
PASS unit packages/platform-ios/src/link/__tests__/getBuildProperty.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlistPath.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findDependencies-test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/applyParams.test.ts
PASS unit packages/tools/src/__tests__/groupFilesByType.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/normalizeProjectName.test.ts
PASS unit jest/__tests__/replaceProjectRootInOutput.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodfilePath.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlist.test.ts
PASS unit packages/cli/src/tools/__tests__/loadMetroConfig-test.ts
PASS unit packages/cli/src/commands/link/__tests__/makeHook.test.ts
1;
PASS e2e __e2e__/unknown.test.ts
PASS e2e __e2e__/default.test.ts
PASS e2e __e2e__/uninstall.test.ts (11.808 s)
PASS unit packages/cli/src/commands/info/__tests__/info.test.ts (8.752 s)
PASS e2e __e2e__/install.test.ts (10.138 s)
PASS e2e __e2e__/init.test.ts (30.857 s)
PASS e2e __e2e__/config.test.ts (135.075 s)
PASS e2e __e2e__/root.test.ts (138.565 s)
Test Suites: 2 skipped, 79 passed, 79 of 81 total
Tests: 10 skipped, 2 todo, 287 passed, 299 total
Snapshots: 28 passed, 28 total
Time: 147.844 s
Ran all test suites in 2 projects.

@thymikee

Copy link
Copy Markdown
Member

@grabbou wdyt?

@kelset

Copy link
Copy Markdown
Member

@thymikee is this blocked on @grabbou, or could we get it in? It's been open for a while 😓

@thymikee

Copy link
Copy Markdown
Member

I didn't have the time to properly review this yet, so would still like @grabbou or @Esemesek to take a look

@grabbou

Copy link
Copy Markdown
Member

Apologies for the waiting time. The reason I didn't act on this PR earlier was that I was thinking how to move forward with this one. Like @tido64 said, all the logic around sourceDir and projectPath is going away in the nearest future, as they are not needed for the autolinking. We only care about a Podfile.

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

Instead, I would work on adding a temporary configuration option to override what does not work. For example, we could allow overriding sourceDir or a podfile in case it didn't work out of the box.

// This is a temporary fix for #1435. In certain repos, the Xcode project can
// be generated by a tool. The only file that we can assume to exist on disk
// is `Podfile`.
const sourceDir = podfile ? path.dirname(podfile) : path.dirname(projectPath);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would not change this one to be honest, sourceDir is not needed for autolinking, so there's no need to adjust it for cases when xcodeproj doesn't exist. It is needed for legacy link command and in the case of a missing xcodeproj, that would fail anyway.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like it is being used for autolinking:

project_root=Pathname.new(config["project"]["ios"]["sourceDir"])

Without this change, we hit errors similar to this when running pod install:

[!] No podspec found for `ReactTestApp-DevSupport` in `..`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You’re right 😅

@grabbougrabbou closed this Aug 4, 2021
@grabbougrabbou reopened this Aug 4, 2021
@grabbougrabbou closed this Aug 4, 2021
@tido64

Copy link
Copy Markdown
ContributorAuthor

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

But it's not fundamentally changing how you're resolving a Podfile today. The logic is still the same for the success case. Only in the case of it failing, are we resorting to a glob search. I don't understand how that is a risk? If it was failing before, it wouldn't be any worse with the current change.

@grabbou

Copy link
Copy Markdown
Member

Reopening as it looks like that’s our only way to go in this case for time being.

@grabbougrabbou reopened this Aug 5, 2021
@grabbou

Copy link
Copy Markdown
Member

After taking another pass and your explanations @tido64, it looks good 👍

@grabbou
grabbou merged commit 59cfbd9 into react-native-community:masterAug 5, 2021
thymikee pushed a commit that referenced this pull request Aug 5, 2021
* fix(platform-ios): fix `sourceDir` detection
See also #1054 and #1436.
Resolves#1435.
* yarn lint --fix
@thymikee

Copy link
Copy Markdown
Member

@tido64 published @react-native-community/cli-platform-ios@5.0.2 with this fix as well. Thanks!

@tido64
tido64 deleted the tido/fix-sourcedir-detection branch August 6, 2021 19:33
@tido64

tido64 commented Aug 6, 2021

Copy link
Copy Markdown
ContributorAuthor

Thanks for backporting it, @thymikee. Did it get published? I don't see it in the feed yet: https://www.npmjs.com/package/@react-native-community/cli?activeTab=versions Never mind! I was looking at the wrong package 😛

@joshchoo

Copy link
Copy Markdown

Hi @tido64,

I'm facing a problem with podspec path resolution on one of the packages I'm using: react-native-emarsys-wrapper.
The package doesn't use auto-linking, and it defines a sample Podfile in sample/ios/Podfile.

This change causes sourceDir to resolve to sample/ios instead of ios because of the location of the sample Podfile. Consequently, native_modules.rb can't find the podspec file and logs the warning "use_native_modules! skipped the react-native dependency react-native-emarsys-wrapper. No podspec file was found".

I'm currently working around this by patching react-native-emarsys-wrapper to remove sample/ios/Podfile to avoid incorrect sourceDir resolution. Is there a better way to resolve sourceDir, such as editing react-native.config.js, to fix it? Or should I wait for this temporary fix to be removed?

Environment

  • React Native: 0.66.0

@tido64

Copy link
Copy Markdown
ContributorAuthor

@joshchoo: You can explicitly disable it in your react-native.config.js: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md#how-can-i-disable-autolinking-for-unsupported-library

This way you don't have to patch the package.

Is the sample folder an essential part of the package? Otherwise, I would exclude it from the published package. As far as I know, the "next" version that will make this temporary fix unnecessary is being worked on, but I don't have any other information.

@joshchoo

Copy link
Copy Markdown

@tido64, thanks for your help! Disabling autolinking via react-native.config.js works for my case.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

5 participants

@tido64@thymikee@kelset@grabbou@joshchoo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(platform-ios): fix sourceDir detection - #1444

Merged
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection
Aug 5, 2021
Merged

fix(platform-ios): fix sourceDir detection#1444
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection

Conversation

@tido64

@tido64tido64 commented Jul 12, 2021

Copy link
Copy Markdown
Contributor

Summary:

This is a minimal changes version of #1436. After speaking with @grabbou, I learned that most of the props in config are going away, so we agreed to make as little changes as possible and instead focus on next.

Resolves#1435
Resolvesmicrosoft/react-native-test-app#375

Test Plan:

Curren tests should pass:

 PASS unit packages/platform-android/src/link/patches/__tests__/makeSettingsPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findMatchingSimulator.test.ts
PASS unit packages/platform-android/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/init/__tests__/template.test.ts
PASS unit packages/cli/src/tools/__tests__/packageManager-test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeaderSearchPath.test.ts
PASS unit packages/cli/src/commands/link/__tests__/link.test.ts
PASS unit packages/platform-android/src/commands/runAndroid/__tests__/runOnAllDevices.test.ts
PASS unit packages/cli/src/tools/windows/__tests__/androidWinHelpers.test.ts
PASS unit packages/cli/src/commands/upgrade/__tests__/upgrade.test.ts (5.274 s)
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathAndroid-test.ts
PASS unit packages/platform-ios/src/config/__tests__/findProject.test.ts
PASS unit packages/cli/src/commands/init/__tests__/editTemplate.test.ts (6.21 s)
PASS unit packages/platform-android/src/config/__tests__/findPackageClassName.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeBuildPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseXctraceIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/removePodEntry.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/writePlist.test.ts
PASS unit packages/cli/src/tools/__tests__/copyFiles.test.ts
PASS unit packages/platform-ios/src/link/__tests__/createGroup.test.ts
PASS unit packages/platform-android/src/config/__tests__/getDependencyConfig.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findLineToAddPod.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodspec.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidHomeEnvVariable.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathIOS-test.ts
PASS unit packages/platform-ios/src/link/__tests__/addSharedLibraries.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findXcodeProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getGroup.test.ts
PASS unit packages/platform-ios/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/filterPlatformAssetScales-test.ts
PASS unit packages/platform-ios/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeSharedLibrary.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findAssets-test.ts
PASS unit packages/cli/src/tools/config/__tests__/index-test.ts (12.208 s)
PASS unit packages/platform-ios/src/link-pods/__tests__/findMarkedLinesInPodfile.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeadersInFolder.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromLibraries.test.ts
PASS unit packages/platform-ios/src/link/__tests__/mapHeaderSearchPaths.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findPodTargetLine.test.ts
PASS unit packages/platform-android/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-android/src/config/__tests__/readManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makePackagePatch.test.ts
PASS unit packages/cli/src/commands/init/__tests__/validate.test.ts
PASS unit packages/platform-ios/src/link/__tests__/hasLibraryImported.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findProjectRoot-test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidStudio.test.ts (10.519 s)
PASS unit packages/platform-ios/src/link/__tests__/addProjectToLibraries.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/jdk.test.ts (13.899 s)
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidSDK.test.ts (13.944 s)
PASS unit packages/platform-ios/src/link/__tests__/addFileToProject.test.ts
PASS unit packages/platform-android/src/config/__tests__/findAndroidDir.test.ts
PASS unit packages/platform-android/src/config/__tests__/findManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeImportPatch.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeStringsPatch.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/getDependenciesFromPodfileLock.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getTargets.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidNDK.test.ts (11.249 s)
PASS unit packages/platform-ios/src/link/__tests__/getBuildProperty.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlistPath.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findDependencies-test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/applyParams.test.ts
PASS unit packages/tools/src/__tests__/groupFilesByType.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/normalizeProjectName.test.ts
PASS unit jest/__tests__/replaceProjectRootInOutput.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodfilePath.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlist.test.ts
PASS unit packages/cli/src/tools/__tests__/loadMetroConfig-test.ts
PASS unit packages/cli/src/commands/link/__tests__/makeHook.test.ts
1;
PASS e2e __e2e__/unknown.test.ts
PASS e2e __e2e__/default.test.ts
PASS e2e __e2e__/uninstall.test.ts (11.808 s)
PASS unit packages/cli/src/commands/info/__tests__/info.test.ts (8.752 s)
PASS e2e __e2e__/install.test.ts (10.138 s)
PASS e2e __e2e__/init.test.ts (30.857 s)
PASS e2e __e2e__/config.test.ts (135.075 s)
PASS e2e __e2e__/root.test.ts (138.565 s)
Test Suites: 2 skipped, 79 passed, 79 of 81 total
Tests: 10 skipped, 2 todo, 287 passed, 299 total
Snapshots: 28 passed, 28 total
Time: 147.844 s
Ran all test suites in 2 projects.

@thymikee

Copy link
Copy Markdown
Member

@grabbou wdyt?

@kelset

Copy link
Copy Markdown
Member

@thymikee is this blocked on @grabbou, or could we get it in? It's been open for a while 😓

@thymikee

Copy link
Copy Markdown
Member

I didn't have the time to properly review this yet, so would still like @grabbou or @Esemesek to take a look

@grabbou

Copy link
Copy Markdown
Member

Apologies for the waiting time. The reason I didn't act on this PR earlier was that I was thinking how to move forward with this one. Like @tido64 said, all the logic around sourceDir and projectPath is going away in the nearest future, as they are not needed for the autolinking. We only care about a Podfile.

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

Instead, I would work on adding a temporary configuration option to override what does not work. For example, we could allow overriding sourceDir or a podfile in case it didn't work out of the box.

// This is a temporary fix for #1435. In certain repos, the Xcode project can
// be generated by a tool. The only file that we can assume to exist on disk
// is `Podfile`.
const sourceDir = podfile ? path.dirname(podfile) : path.dirname(projectPath);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would not change this one to be honest, sourceDir is not needed for autolinking, so there's no need to adjust it for cases when xcodeproj doesn't exist. It is needed for legacy link command and in the case of a missing xcodeproj, that would fail anyway.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like it is being used for autolinking:

project_root=Pathname.new(config["project"]["ios"]["sourceDir"])

Without this change, we hit errors similar to this when running pod install:

[!] No podspec found for `ReactTestApp-DevSupport` in `..`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You’re right 😅

@grabbougrabbou closed this Aug 4, 2021
@grabbougrabbou reopened this Aug 4, 2021
@grabbougrabbou closed this Aug 4, 2021
@tido64

Copy link
Copy Markdown
ContributorAuthor

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

But it's not fundamentally changing how you're resolving a Podfile today. The logic is still the same for the success case. Only in the case of it failing, are we resorting to a glob search. I don't understand how that is a risk? If it was failing before, it wouldn't be any worse with the current change.

@grabbou

Copy link
Copy Markdown
Member

Reopening as it looks like that’s our only way to go in this case for time being.

@grabbougrabbou reopened this Aug 5, 2021
@grabbou

Copy link
Copy Markdown
Member

After taking another pass and your explanations @tido64, it looks good 👍

@grabbou
grabbou merged commit 59cfbd9 into react-native-community:masterAug 5, 2021
thymikee pushed a commit that referenced this pull request Aug 5, 2021
* fix(platform-ios): fix `sourceDir` detection
See also #1054 and #1436.
Resolves#1435.
* yarn lint --fix
@thymikee

Copy link
Copy Markdown
Member

@tido64 published @react-native-community/cli-platform-ios@5.0.2 with this fix as well. Thanks!

@tido64
tido64 deleted the tido/fix-sourcedir-detection branch August 6, 2021 19:33
@tido64

tido64 commented Aug 6, 2021

Copy link
Copy Markdown
ContributorAuthor

Thanks for backporting it, @thymikee. Did it get published? I don't see it in the feed yet: https://www.npmjs.com/package/@react-native-community/cli?activeTab=versions Never mind! I was looking at the wrong package 😛

@joshchoo

Copy link
Copy Markdown

Hi @tido64,

I'm facing a problem with podspec path resolution on one of the packages I'm using: react-native-emarsys-wrapper.
The package doesn't use auto-linking, and it defines a sample Podfile in sample/ios/Podfile.

This change causes sourceDir to resolve to sample/ios instead of ios because of the location of the sample Podfile. Consequently, native_modules.rb can't find the podspec file and logs the warning "use_native_modules! skipped the react-native dependency react-native-emarsys-wrapper. No podspec file was found".

I'm currently working around this by patching react-native-emarsys-wrapper to remove sample/ios/Podfile to avoid incorrect sourceDir resolution. Is there a better way to resolve sourceDir, such as editing react-native.config.js, to fix it? Or should I wait for this temporary fix to be removed?

Environment

  • React Native: 0.66.0

@tido64

Copy link
Copy Markdown
ContributorAuthor

@joshchoo: You can explicitly disable it in your react-native.config.js: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md#how-can-i-disable-autolinking-for-unsupported-library

This way you don't have to patch the package.

Is the sample folder an essential part of the package? Otherwise, I would exclude it from the published package. As far as I know, the "next" version that will make this temporary fix unnecessary is being worked on, but I don't have any other information.

@joshchoo

Copy link
Copy Markdown

@tido64, thanks for your help! Disabling autolinking via react-native.config.js works for my case.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

5 participants

@tido64@thymikee@kelset@grabbou@joshchoo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(platform-ios): fix sourceDir detection - #1444

Merged
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection
Aug 5, 2021
Merged

fix(platform-ios): fix sourceDir detection#1444
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection

Conversation

@tido64

@tido64tido64 commented Jul 12, 2021

Copy link
Copy Markdown
Contributor

Summary:

This is a minimal changes version of #1436. After speaking with @grabbou, I learned that most of the props in config are going away, so we agreed to make as little changes as possible and instead focus on next.

Resolves#1435
Resolvesmicrosoft/react-native-test-app#375

Test Plan:

Curren tests should pass:

 PASS unit packages/platform-android/src/link/patches/__tests__/makeSettingsPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findMatchingSimulator.test.ts
PASS unit packages/platform-android/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/init/__tests__/template.test.ts
PASS unit packages/cli/src/tools/__tests__/packageManager-test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeaderSearchPath.test.ts
PASS unit packages/cli/src/commands/link/__tests__/link.test.ts
PASS unit packages/platform-android/src/commands/runAndroid/__tests__/runOnAllDevices.test.ts
PASS unit packages/cli/src/tools/windows/__tests__/androidWinHelpers.test.ts
PASS unit packages/cli/src/commands/upgrade/__tests__/upgrade.test.ts (5.274 s)
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathAndroid-test.ts
PASS unit packages/platform-ios/src/config/__tests__/findProject.test.ts
PASS unit packages/cli/src/commands/init/__tests__/editTemplate.test.ts (6.21 s)
PASS unit packages/platform-android/src/config/__tests__/findPackageClassName.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeBuildPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseXctraceIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/removePodEntry.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/writePlist.test.ts
PASS unit packages/cli/src/tools/__tests__/copyFiles.test.ts
PASS unit packages/platform-ios/src/link/__tests__/createGroup.test.ts
PASS unit packages/platform-android/src/config/__tests__/getDependencyConfig.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findLineToAddPod.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodspec.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidHomeEnvVariable.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathIOS-test.ts
PASS unit packages/platform-ios/src/link/__tests__/addSharedLibraries.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findXcodeProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getGroup.test.ts
PASS unit packages/platform-ios/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/filterPlatformAssetScales-test.ts
PASS unit packages/platform-ios/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeSharedLibrary.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findAssets-test.ts
PASS unit packages/cli/src/tools/config/__tests__/index-test.ts (12.208 s)
PASS unit packages/platform-ios/src/link-pods/__tests__/findMarkedLinesInPodfile.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeadersInFolder.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromLibraries.test.ts
PASS unit packages/platform-ios/src/link/__tests__/mapHeaderSearchPaths.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findPodTargetLine.test.ts
PASS unit packages/platform-android/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-android/src/config/__tests__/readManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makePackagePatch.test.ts
PASS unit packages/cli/src/commands/init/__tests__/validate.test.ts
PASS unit packages/platform-ios/src/link/__tests__/hasLibraryImported.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findProjectRoot-test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidStudio.test.ts (10.519 s)
PASS unit packages/platform-ios/src/link/__tests__/addProjectToLibraries.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/jdk.test.ts (13.899 s)
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidSDK.test.ts (13.944 s)
PASS unit packages/platform-ios/src/link/__tests__/addFileToProject.test.ts
PASS unit packages/platform-android/src/config/__tests__/findAndroidDir.test.ts
PASS unit packages/platform-android/src/config/__tests__/findManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeImportPatch.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeStringsPatch.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/getDependenciesFromPodfileLock.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getTargets.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidNDK.test.ts (11.249 s)
PASS unit packages/platform-ios/src/link/__tests__/getBuildProperty.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlistPath.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findDependencies-test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/applyParams.test.ts
PASS unit packages/tools/src/__tests__/groupFilesByType.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/normalizeProjectName.test.ts
PASS unit jest/__tests__/replaceProjectRootInOutput.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodfilePath.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlist.test.ts
PASS unit packages/cli/src/tools/__tests__/loadMetroConfig-test.ts
PASS unit packages/cli/src/commands/link/__tests__/makeHook.test.ts
1;
PASS e2e __e2e__/unknown.test.ts
PASS e2e __e2e__/default.test.ts
PASS e2e __e2e__/uninstall.test.ts (11.808 s)
PASS unit packages/cli/src/commands/info/__tests__/info.test.ts (8.752 s)
PASS e2e __e2e__/install.test.ts (10.138 s)
PASS e2e __e2e__/init.test.ts (30.857 s)
PASS e2e __e2e__/config.test.ts (135.075 s)
PASS e2e __e2e__/root.test.ts (138.565 s)
Test Suites: 2 skipped, 79 passed, 79 of 81 total
Tests: 10 skipped, 2 todo, 287 passed, 299 total
Snapshots: 28 passed, 28 total
Time: 147.844 s
Ran all test suites in 2 projects.

@thymikee

Copy link
Copy Markdown
Member

@grabbou wdyt?

@kelset

Copy link
Copy Markdown
Member

@thymikee is this blocked on @grabbou, or could we get it in? It's been open for a while 😓

@thymikee

Copy link
Copy Markdown
Member

I didn't have the time to properly review this yet, so would still like @grabbou or @Esemesek to take a look

@grabbou

Copy link
Copy Markdown
Member

Apologies for the waiting time. The reason I didn't act on this PR earlier was that I was thinking how to move forward with this one. Like @tido64 said, all the logic around sourceDir and projectPath is going away in the nearest future, as they are not needed for the autolinking. We only care about a Podfile.

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

Instead, I would work on adding a temporary configuration option to override what does not work. For example, we could allow overriding sourceDir or a podfile in case it didn't work out of the box.

// This is a temporary fix for #1435. In certain repos, the Xcode project can
// be generated by a tool. The only file that we can assume to exist on disk
// is `Podfile`.
const sourceDir = podfile ? path.dirname(podfile) : path.dirname(projectPath);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would not change this one to be honest, sourceDir is not needed for autolinking, so there's no need to adjust it for cases when xcodeproj doesn't exist. It is needed for legacy link command and in the case of a missing xcodeproj, that would fail anyway.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like it is being used for autolinking:

project_root=Pathname.new(config["project"]["ios"]["sourceDir"])

Without this change, we hit errors similar to this when running pod install:

[!] No podspec found for `ReactTestApp-DevSupport` in `..`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You’re right 😅

@grabbougrabbou closed this Aug 4, 2021
@grabbougrabbou reopened this Aug 4, 2021
@grabbougrabbou closed this Aug 4, 2021
@tido64

Copy link
Copy Markdown
ContributorAuthor

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

But it's not fundamentally changing how you're resolving a Podfile today. The logic is still the same for the success case. Only in the case of it failing, are we resorting to a glob search. I don't understand how that is a risk? If it was failing before, it wouldn't be any worse with the current change.

@grabbou

Copy link
Copy Markdown
Member

Reopening as it looks like that’s our only way to go in this case for time being.

@grabbougrabbou reopened this Aug 5, 2021
@grabbou

Copy link
Copy Markdown
Member

After taking another pass and your explanations @tido64, it looks good 👍

@grabbou
grabbou merged commit 59cfbd9 into react-native-community:masterAug 5, 2021
thymikee pushed a commit that referenced this pull request Aug 5, 2021
* fix(platform-ios): fix `sourceDir` detection
See also #1054 and #1436.
Resolves#1435.
* yarn lint --fix
@thymikee

Copy link
Copy Markdown
Member

@tido64 published @react-native-community/cli-platform-ios@5.0.2 with this fix as well. Thanks!

@tido64
tido64 deleted the tido/fix-sourcedir-detection branch August 6, 2021 19:33
@tido64

tido64 commented Aug 6, 2021

Copy link
Copy Markdown
ContributorAuthor

Thanks for backporting it, @thymikee. Did it get published? I don't see it in the feed yet: https://www.npmjs.com/package/@react-native-community/cli?activeTab=versions Never mind! I was looking at the wrong package 😛

@joshchoo

Copy link
Copy Markdown

Hi @tido64,

I'm facing a problem with podspec path resolution on one of the packages I'm using: react-native-emarsys-wrapper.
The package doesn't use auto-linking, and it defines a sample Podfile in sample/ios/Podfile.

This change causes sourceDir to resolve to sample/ios instead of ios because of the location of the sample Podfile. Consequently, native_modules.rb can't find the podspec file and logs the warning "use_native_modules! skipped the react-native dependency react-native-emarsys-wrapper. No podspec file was found".

I'm currently working around this by patching react-native-emarsys-wrapper to remove sample/ios/Podfile to avoid incorrect sourceDir resolution. Is there a better way to resolve sourceDir, such as editing react-native.config.js, to fix it? Or should I wait for this temporary fix to be removed?

Environment

  • React Native: 0.66.0

@tido64

Copy link
Copy Markdown
ContributorAuthor

@joshchoo: You can explicitly disable it in your react-native.config.js: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md#how-can-i-disable-autolinking-for-unsupported-library

This way you don't have to patch the package.

Is the sample folder an essential part of the package? Otherwise, I would exclude it from the published package. As far as I know, the "next" version that will make this temporary fix unnecessary is being worked on, but I don't have any other information.

@joshchoo

Copy link
Copy Markdown

@tido64, thanks for your help! Disabling autolinking via react-native.config.js works for my case.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

5 participants

@tido64@thymikee@kelset@grabbou@joshchoo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(platform-ios): fix sourceDir detection - #1444

Merged
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection
Aug 5, 2021
Merged

fix(platform-ios): fix sourceDir detection#1444
grabbou merged 2 commits into
react-native-community:masterfrom
tido64:tido/fix-sourcedir-detection

Conversation

@tido64

@tido64tido64 commented Jul 12, 2021

Copy link
Copy Markdown
Contributor

Summary:

This is a minimal changes version of #1436. After speaking with @grabbou, I learned that most of the props in config are going away, so we agreed to make as little changes as possible and instead focus on next.

Resolves#1435
Resolvesmicrosoft/react-native-test-app#375

Test Plan:

Curren tests should pass:

 PASS unit packages/platform-android/src/link/patches/__tests__/makeSettingsPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findMatchingSimulator.test.ts
PASS unit packages/platform-android/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/init/__tests__/template.test.ts
PASS unit packages/cli/src/tools/__tests__/packageManager-test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeaderSearchPath.test.ts
PASS unit packages/cli/src/commands/link/__tests__/link.test.ts
PASS unit packages/platform-android/src/commands/runAndroid/__tests__/runOnAllDevices.test.ts
PASS unit packages/cli/src/tools/windows/__tests__/androidWinHelpers.test.ts
PASS unit packages/cli/src/commands/upgrade/__tests__/upgrade.test.ts (5.274 s)
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathAndroid-test.ts
PASS unit packages/platform-ios/src/config/__tests__/findProject.test.ts
PASS unit packages/cli/src/commands/init/__tests__/editTemplate.test.ts (6.21 s)
PASS unit packages/platform-android/src/config/__tests__/findPackageClassName.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeBuildPatch.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseXctraceIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/parseIOSDevicesList.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/removePodEntry.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/writePlist.test.ts
PASS unit packages/cli/src/tools/__tests__/copyFiles.test.ts
PASS unit packages/platform-ios/src/link/__tests__/createGroup.test.ts
PASS unit packages/platform-android/src/config/__tests__/getDependencyConfig.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findLineToAddPod.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodspec.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidHomeEnvVariable.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/getAssetDestPathIOS-test.ts
PASS unit packages/platform-ios/src/link/__tests__/addSharedLibraries.test.ts
PASS unit packages/platform-ios/src/commands/runIOS/__tests__/findXcodeProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getGroup.test.ts
PASS unit packages/platform-ios/src/config/__tests__/getProjectConfig.test.ts
PASS unit packages/cli/src/commands/bundle/__tests__/filterPlatformAssetScales-test.ts
PASS unit packages/platform-ios/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromProject.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeSharedLibrary.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findAssets-test.ts
PASS unit packages/cli/src/tools/config/__tests__/index-test.ts (12.208 s)
PASS unit packages/platform-ios/src/link-pods/__tests__/findMarkedLinesInPodfile.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getHeadersInFolder.test.ts
PASS unit packages/platform-ios/src/link/__tests__/removeProjectFromLibraries.test.ts
PASS unit packages/platform-ios/src/link/__tests__/mapHeaderSearchPaths.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/findPodTargetLine.test.ts
PASS unit packages/platform-android/src/link/__tests__/isInstalled.test.ts
PASS unit packages/platform-android/src/config/__tests__/readManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makePackagePatch.test.ts
PASS unit packages/cli/src/commands/init/__tests__/validate.test.ts
PASS unit packages/platform-ios/src/link/__tests__/hasLibraryImported.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findProjectRoot-test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidStudio.test.ts (10.519 s)
PASS unit packages/platform-ios/src/link/__tests__/addProjectToLibraries.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/jdk.test.ts (13.899 s)
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidSDK.test.ts (13.944 s)
PASS unit packages/platform-ios/src/link/__tests__/addFileToProject.test.ts
PASS unit packages/platform-android/src/config/__tests__/findAndroidDir.test.ts
PASS unit packages/platform-android/src/config/__tests__/findManifest.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeImportPatch.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/makeStringsPatch.test.ts
PASS unit packages/platform-ios/src/link-pods/__tests__/getDependenciesFromPodfileLock.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getTargets.test.ts
PASS unit packages/cli/src/commands/doctor/healthchecks/__tests__/androidNDK.test.ts (11.249 s)
PASS unit packages/platform-ios/src/link/__tests__/getBuildProperty.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlistPath.test.ts
PASS unit packages/cli/src/tools/config/__tests__/findDependencies-test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/applyParams.test.ts
PASS unit packages/tools/src/__tests__/groupFilesByType.test.ts
PASS unit packages/platform-android/src/link/patches/__tests__/normalizeProjectName.test.ts
PASS unit jest/__tests__/replaceProjectRootInOutput.test.ts
PASS unit packages/platform-ios/src/config/__tests__/findPodfilePath.test.ts
PASS unit packages/platform-ios/src/link/__tests__/getPlist.test.ts
PASS unit packages/cli/src/tools/__tests__/loadMetroConfig-test.ts
PASS unit packages/cli/src/commands/link/__tests__/makeHook.test.ts
1;
PASS e2e __e2e__/unknown.test.ts
PASS e2e __e2e__/default.test.ts
PASS e2e __e2e__/uninstall.test.ts (11.808 s)
PASS unit packages/cli/src/commands/info/__tests__/info.test.ts (8.752 s)
PASS e2e __e2e__/install.test.ts (10.138 s)
PASS e2e __e2e__/init.test.ts (30.857 s)
PASS e2e __e2e__/config.test.ts (135.075 s)
PASS e2e __e2e__/root.test.ts (138.565 s)
Test Suites: 2 skipped, 79 passed, 79 of 81 total
Tests: 10 skipped, 2 todo, 287 passed, 299 total
Snapshots: 28 passed, 28 total
Time: 147.844 s
Ran all test suites in 2 projects.

@thymikee

Copy link
Copy Markdown
Member

@grabbou wdyt?

@kelset

Copy link
Copy Markdown
Member

@thymikee is this blocked on @grabbou, or could we get it in? It's been open for a while 😓

@thymikee

Copy link
Copy Markdown
Member

I didn't have the time to properly review this yet, so would still like @grabbou or @Esemesek to take a look

@grabbou

Copy link
Copy Markdown
Member

Apologies for the waiting time. The reason I didn't act on this PR earlier was that I was thinking how to move forward with this one. Like @tido64 said, all the logic around sourceDir and projectPath is going away in the nearest future, as they are not needed for the autolinking. We only care about a Podfile.

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

Instead, I would work on adding a temporary configuration option to override what does not work. For example, we could allow overriding sourceDir or a podfile in case it didn't work out of the box.

// This is a temporary fix for #1435. In certain repos, the Xcode project can
// be generated by a tool. The only file that we can assume to exist on disk
// is `Podfile`.
const sourceDir = podfile ? path.dirname(podfile) : path.dirname(projectPath);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would not change this one to be honest, sourceDir is not needed for autolinking, so there's no need to adjust it for cases when xcodeproj doesn't exist. It is needed for legacy link command and in the case of a missing xcodeproj, that would fail anyway.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like it is being used for autolinking:

project_root=Pathname.new(config["project"]["ios"]["sourceDir"])

Without this change, we hit errors similar to this when running pod install:

[!] No podspec found for `ReactTestApp-DevSupport` in `..`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You’re right 😅

@grabbougrabbou closed this Aug 4, 2021
@grabbougrabbou reopened this Aug 4, 2021
@grabbougrabbou closed this Aug 4, 2021
@tido64

Copy link
Copy Markdown
ContributorAuthor

That said, I am hesitant to add additional complexity to something that already works, as well as change the way we resolve a Podfile - at the risk of breaking this for our other users.

But it's not fundamentally changing how you're resolving a Podfile today. The logic is still the same for the success case. Only in the case of it failing, are we resorting to a glob search. I don't understand how that is a risk? If it was failing before, it wouldn't be any worse with the current change.

@grabbou

Copy link
Copy Markdown
Member

Reopening as it looks like that’s our only way to go in this case for time being.

@grabbougrabbou reopened this Aug 5, 2021
@grabbou

Copy link
Copy Markdown
Member

After taking another pass and your explanations @tido64, it looks good 👍

@grabbou
grabbou merged commit 59cfbd9 into react-native-community:masterAug 5, 2021
thymikee pushed a commit that referenced this pull request Aug 5, 2021
* fix(platform-ios): fix `sourceDir` detection
See also #1054 and #1436.
Resolves#1435.
* yarn lint --fix
@thymikee

Copy link
Copy Markdown
Member

@tido64 published @react-native-community/cli-platform-ios@5.0.2 with this fix as well. Thanks!

@tido64
tido64 deleted the tido/fix-sourcedir-detection branch August 6, 2021 19:33
@tido64

tido64 commented Aug 6, 2021

Copy link
Copy Markdown
ContributorAuthor

Thanks for backporting it, @thymikee. Did it get published? I don't see it in the feed yet: https://www.npmjs.com/package/@react-native-community/cli?activeTab=versions Never mind! I was looking at the wrong package 😛

@joshchoo

Copy link
Copy Markdown

Hi @tido64,

I'm facing a problem with podspec path resolution on one of the packages I'm using: react-native-emarsys-wrapper.
The package doesn't use auto-linking, and it defines a sample Podfile in sample/ios/Podfile.

This change causes sourceDir to resolve to sample/ios instead of ios because of the location of the sample Podfile. Consequently, native_modules.rb can't find the podspec file and logs the warning "use_native_modules! skipped the react-native dependency react-native-emarsys-wrapper. No podspec file was found".

I'm currently working around this by patching react-native-emarsys-wrapper to remove sample/ios/Podfile to avoid incorrect sourceDir resolution. Is there a better way to resolve sourceDir, such as editing react-native.config.js, to fix it? Or should I wait for this temporary fix to be removed?

Environment

  • React Native: 0.66.0

@tido64

Copy link
Copy Markdown
ContributorAuthor

@joshchoo: You can explicitly disable it in your react-native.config.js: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md#how-can-i-disable-autolinking-for-unsupported-library

This way you don't have to patch the package.

Is the sample folder an essential part of the package? Otherwise, I would exclude it from the published package. As far as I know, the "next" version that will make this temporary fix unnecessary is being worked on, but I don't have any other information.

@joshchoo

Copy link
Copy Markdown

@tido64, thanks for your help! Disabling autolinking via react-native.config.js works for my case.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

5 participants

@tido64@thymikee@kelset@grabbou@joshchoo