Skip to content

autoLinking doesn't work with monorepo #537

@yozman

Description

@yozman

Environment

info Fetching system and libraries information...
System:
    OS: macOS 10.14.5
    CPU: (4) x64 Intel(R) Core(TM) i5-4690 CPU @ 3.50GHz
    Memory: 4.87 GB / 20.00 GB
    Shell: 5.3 - /bin/zsh
  Binaries:
    Node: 12.4.0 - ~/.nvm/versions/node/v12.4.0/bin/node
    Yarn: 1.16.0 - ~/.nvm/versions/node/v12.4.0/bin/yarn
    npm: 6.9.0 - ~/.nvm/versions/node/v12.4.0/bin/npm
  SDKs:
    iOS SDK:
      Platforms: iOS 12.2, macOS 10.14, tvOS 12.2, watchOS 5.2
    Android SDK:
      API Levels: 27, 28, 29
      Build Tools: 27.0.3, 28.0.3, 29.0.0
      System Images: android-27 | Intel x86 Atom_64, android-28 | Intel x86 Atom_64, android-29 | Intel x86 Atom_64
  IDEs:
    Android Studio: 3.4 AI-183.6156.11.34.5522156
    Xcode: 10.2.1/10E1001 - /usr/bin/xcodebuild
  npmPackages:
    react: 16.8.6 => 16.8.6 
    react-native: 0.60.0 => 0.60.0

Description

I have a project use monorepo with yarn workspace feature.
it's fail when I cd ios && pod install.

Detected React Native module pods for RNRippleView, react-native-video, and react-native-webview
Analyzing dependencies
Fetching podspec for `DoubleConversion` from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`
Fetching podspec for `Folly` from `../node_modules/react-native/third-party-podspecs/Folly.podspec`
Fetching podspec for `RNRippleView` from `../`
[!] No podspec found for `RNRippleView` in `../`

then I run react-native config

Details
{
  "root": "/Users/flyboy/.dee/yozman/yoboto-app",
  "reactNativePath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native",
  "dependencies": {
    "react-native-touchable-ripple": {
      "root": "/Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple",
      "name": "react-native-touchable-ripple",
      "platforms": {
        "ios": {
          "sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple/ios",
          "folder": "/Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple",
          "pbxprojPath": "/Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple/ios/RNRippleView.xcodeproj/project.pbxproj",
          "podfile": null,
          "podspecPath": "/Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple/RNRippleView.podspec",
          "projectPath": "/Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple/ios/RNRippleView.xcodeproj",
          "projectName": "RNRippleView.xcodeproj",
          "libraryFolder": "Libraries",
          "sharedLibraries": [],
          "plist": []
        },
        "android": null
      },
      "assets": [],
      "hooks": {},
      "params": []
    },
    "react-native-video": {
      "root": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video",
      "name": "react-native-video",
      "platforms": {
        "ios": {
          "sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video/ios",
          "folder": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video",
          "pbxprojPath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video/ios/RCTVideo.xcodeproj/project.pbxproj",
          "podfile": null,
          "podspecPath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video/react-native-video.podspec",
          "projectPath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video/ios/RCTVideo.xcodeproj",
          "projectName": "RCTVideo.xcodeproj",
          "libraryFolder": "Libraries",
          "sharedLibraries": [],
          "plist": []
        },
        "android": {
          "sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video/android-exoplayer",
          "folder": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-video",
          "packageImportPath": "import com.brentvatne.react.ReactVideoPackage;",
          "packageInstance": "new ReactVideoPackage()"
        }
      },
      "assets": [],
      "hooks": {},
      "params": []
    },
    "react-native-webview": {
      "root": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview",
      "name": "react-native-webview",
      "platforms": {
        "ios": {
          "sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview/ios",
          "folder": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview",
          "pbxprojPath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview/ios/RNCWebView.xcodeproj/project.pbxproj",
          "podfile": null,
          "podspecPath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview/react-native-webview.podspec",
          "projectPath": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview/ios/RNCWebView.xcodeproj",
          "projectName": "RNCWebView.xcodeproj",
          "libraryFolder": "Libraries",
          "sharedLibraries": [],
          "plist": []
        },
        "android": {
          "sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview/android",
          "folder": "/Users/flyboy/.dee/yozman/yoboto-app/node_modules/react-native-webview",
          "packageImportPath": "import com.reactnativecommunity.webview.RNCWebViewPackage;",
          "packageInstance": "new RNCWebViewPackage()"
        }
      },
      "assets": [],
      "hooks": {},
      "params": []
    }
  },
  "commands": [
    {
      "name": "log-ios",
      "description": "starts iOS device syslog tail"
    },
    {
      "name": "run-ios",
      "description": "builds your app and starts it on iOS simulator",
      "examples": [
        {
          "desc": "Run on a different simulator, e.g. iPhone 5",
          "cmd": "react-native run-ios --simulator \"iPhone 5\""
        },
        {
          "desc": "Pass a non-standard location of iOS directory",
          "cmd": "react-native run-ios --project-path \"./app/ios\""
        },
        {
          "desc": "Run on a connected device, e.g. Max's iPhone",
          "cmd": "react-native run-ios --device \"Max's iPhone\""
        },
        {
          "desc": "Run on the AppleTV simulator",
          "cmd": "react-native run-ios --simulator \"Apple TV\"  --scheme \"helloworld-tvOS\""
        }
      ],
      "options": [
        {
          "name": "--simulator [string]",
          "description": "Explicitly set simulator to use. Optionally include iOS version betweenparenthesis at the end to match an exact version: \"iPhone 6 (10.0)\"",
          "default": "iPhone X"
        },
        {
          "name": "--configuration [string]",
          "description": "Explicitly set the scheme configuration to use",
          "default": "Debug"
        },
        {
          "name": "--scheme [string]",
          "description": "Explicitly set Xcode scheme to use"
        },
        {
          "name": "--project-path [string]",
          "description": "Path relative to project root where the Xcode project (.xcodeproj) lives.",
          "default": "ios"
        },
        {
          "name": "--device [string]",
          "description": "Explicitly set device to use by name.  The value is not required if you have a single device connected."
        },
        {
          "name": "--udid [string]",
          "description": "Explicitly set device to use by udid"
        },
        {
          "name": "--no-packager",
          "description": "Do not launch packager while building"
        },
        {
          "name": "--verbose",
          "description": "Do not use xcpretty even if installed"
        },
        {
          "name": "--port [number]",
          "default": 8081
        },
        {
          "name": "--terminal [string]",
          "description": "Launches the Metro Bundler in a new window using the specified terminal path."
        }
      ]
    },
    {
      "name": "log-android",
      "description": "starts logkitty"
    },
    {
      "name": "run-android",
      "description": "builds your app and starts it on a connected Android emulator or device",
      "options": [
        {
          "name": "--root [string]",
          "description": "Override the root directory for the android build (which contains the android directory)",
          "default": ""
        },
        {
          "name": "--variant [string]",
          "description": "Specify your app's build variant",
          "default": "debug"
        },
        {
          "name": "--appFolder [string]",
          "description": "Specify a different application folder name for the android source. If not, we assume is \"app\"",
          "default": "app"
        },
        {
          "name": "--appId [string]",
          "description": "Specify an applicationId to launch after build.",
          "default": ""
        },
        {
          "name": "--appIdSuffix [string]",
          "description": "Specify an applicationIdSuffix to launch after build.",
          "default": ""
        },
        {
          "name": "--main-activity [string]",
          "description": "Name of the activity to start",
          "default": "MainActivity"
        },
        {
          "name": "--deviceId [string]",
          "description": "builds your app and starts it on a specific device/simulator with the given device id (listed by running \"adb devices\" on the command line)."
        },
        {
          "name": "--no-packager",
          "description": "Do not launch packager while building"
        },
        {
          "name": "--port [number]",
          "default": 8081
        },
        {
          "name": "--terminal [string]",
          "description": "Launches the Metro Bundler in a new window using the specified terminal path."
        },
        {
          "name": "--tasks [list]",
          "description": "Run custom Gradle tasks. By default it's \"installDebug\""
        },
        {
          "name": "--no-jetifier",
          "description": "Do not run \"jetifier\" – the AndroidX transition tool. By default it runs before Gradle to ease working with libraries that don't support AndroidX yet. See more at: https://www.npmjs.com/package/jetifier.",
          "default": false
        }
      ]
    }
  ],
  "assets": [],
  "platforms": {
    "ios": {},
    "android": {}
  },
  "haste": {
    "providesModuleNodeModules": [
      "react-native"
    ],
    "platforms": [
      "ios",
      "android"
    ]
  },
  "project": {
    "ios": {
      "sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/ios",
      "folder": "/Users/flyboy/.dee/yozman/yoboto-app",
      "pbxprojPath": "/Users/flyboy/.dee/yozman/yoboto-app/ios/yoboto.xcodeproj/project.pbxproj",
      "podfile": "/Users/flyboy/.dee/yozman/yoboto-app/ios/Podfile",
      "podspecPath": null,
      "projectPath": "/Users/flyboy/.dee/yozman/yoboto-app/ios/yoboto.xcodeproj",
      "projectName": "yoboto.xcodeproj",
      "libraryFolder": "Libraries",
      "sharedLibraries": [],
      "plist": []
    },
    "android": {
      "sourceDir": "/Users/flyboy/.dee/yozman/yoboto-app/android/app",
      "isFlat": false,
      "folder": "/Users/flyboy/.dee/yozman/yoboto-app",
      "stringsPath": "/Users/flyboy/.dee/yozman/yoboto-app/android/app/src/main/res/values/strings.xml",
      "manifestPath": "/Users/flyboy/.dee/yozman/yoboto-app/android/app/src/main/AndroidManifest.xml",
      "buildGradlePath": "/Users/flyboy/.dee/yozman/yoboto-app/android/app/build.gradle",
      "settingsGradlePath": "/Users/flyboy/.dee/yozman/yoboto-app/android/settings.gradle",
      "assetsPath": "/Users/flyboy/.dee/yozman/yoboto-app/android/app/src/main/assets",
      "mainFilePath": "/Users/flyboy/.dee/yozman/yoboto-app/android/app/src/main/java/com/yoboto/MainApplication.java",
      "packageName": "com.yoboto"
    }
  }
}

I guess this comes with this commit c9aec25

# Use relative path
absolute_podspec_path = File.dirname(podspec_path)
relative_podspec_path = File.join(root, absolute_podspec_path.partition('node_modules').last(2).join())
pod spec.name, :path => relative_podspec_path

for podspec RNRippleView at #L46 absolute_podspec_path is /Users/flyboy/.dee/yozman/yoboto-app/packages/react-native-touchable-ripple/RNRippleView.podspec.
it's already relative_path and doesn't contain character node_modules.
so relative_podspec_path at #L47 will be not correct.

Reproducible Demo

Metadata

Metadata

Assignees

No one assigned

    Labels

    autolinkbugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions