Skip to content

document autolinking setup for libraries with example app but no yarn workspaces #1137

Description

@vonovak

This is a continuation of #1100. While I'm able to build the react-native-community/datetimepicker example project, autolinking of native modules does not work on android (didn't try ios yet) 😩

EDIT: I'm not sure if it's because of custom project.android.sourceDir, might be unrelated

It's possible I'm doing something wrong (configuring the cli wrong). Using RN 0.62.2 and cli 4.8.0. My react-native-config.js

constroot=process.cwd();module.exports={dependencies: {datetimepicker: {
root,},},project: {android: {sourceDir: './example/android',},},};

why autolinking does not work? It's because the datetimepicker dependency of the example project is not found by

def reactNativeConfigOutput =this.getCommandOutput(reactNativeConfigCommand, this.root)

it's because the output of react-native config is different based on where it's executed from:

running `react-native config` from repo root

vojta@Vojta-MacBook-Pro datetimepicker (fix/ios-module-rn-62)*$ pwd
/Users/vojta/dev/_own/datetimepicker
vojta@Vojta-MacBook-Pro datetimepicker (fix/ios-module-rn-62)*$ node -e "console.log(require('react-native/cli').bin);"
/Users/vojta/dev/_own/datetimepicker/node_modules/@react-native-community/cli/build/bin.js
vojta@Vojta-MacBook-Pro datetimepicker (fix/ios-module-rn-62)*$ /Users/vojta/dev/_own/datetimepicker/node_modules/@react-native-community/cli/build/bin.js config
{
"root": "/Users/vojta/dev/_own/datetimepicker",
"reactNativePath": "/Users/vojta/dev/_own/datetimepicker/node_modules/react-native",
"dependencies": {
"datetimepicker": {
"root": "/Users/vojta/dev/_own/datetimepicker",
"name": "datetimepicker",
"platforms": {
"ios": {
"sourceDir": "/Users/vojta/dev/_own/datetimepicker/ios",
"folder": "/Users/vojta/dev/_own/datetimepicker",
"pbxprojPath": "/Users/vojta/dev/_own/datetimepicker/ios/RNDateTimePicker.xcodeproj/project.pbxproj",
"podfile": null,
"podspecPath": "/Users/vojta/dev/_own/datetimepicker/RNDateTimePicker.podspec",
"projectPath": "/Users/vojta/dev/_own/datetimepicker/ios/RNDateTimePicker.xcodeproj",
"projectName": "RNDateTimePicker.xcodeproj",
"libraryFolder": "Libraries",
"sharedLibraries": [],
"plist": [],
"scriptPhases": []
},
"android": {
"sourceDir": "/Users/vojta/dev/_own/datetimepicker/android",
"folder": "/Users/vojta/dev/_own/datetimepicker",
"packageImportPath": "import com.reactcommunity.rndatetimepicker.RNDateTimePickerPackage;",
"packageInstance": "new RNDateTimePickerPackage()"
}
},
"assets": [],
"hooks": {},
"params": []
}
},
"commands": [
...
],
"options": [
...
]
},
{
"name": "log-android",
"description": "starts logkitty"
},
{
"name": "run-android",
"description": "builds your app and starts it on a connected Android emulator or device",
"options": [
...
]
}
],
"assets": [],
"platforms": {
"ios": {},
"android": {}
},
"project": {
"ios": {
"sourceDir": "/Users/vojta/dev/_own/datetimepicker/ios",
"folder": "/Users/vojta/dev/_own/datetimepicker",
"pbxprojPath": "/Users/vojta/dev/_own/datetimepicker/ios/RNDateTimePicker.xcodeproj/project.pbxproj",
"podfile": null,
"podspecPath": "/Users/vojta/dev/_own/datetimepicker/RNDateTimePicker.podspec",
"projectPath": "/Users/vojta/dev/_own/datetimepicker/ios/RNDateTimePicker.xcodeproj",
"projectName": "RNDateTimePicker.xcodeproj",
"libraryFolder": "Libraries",
"sharedLibraries": [],
"plist": [],
"scriptPhases": []
},
"android": {
"sourceDir": "/Users/vojta/dev/_own/datetimepicker/example/android",
"isFlat": true,
"folder": "/Users/vojta/dev/_own/datetimepicker",
"stringsPath": "/Users/vojta/dev/_own/datetimepicker/example/android/app/src/main/res/values/strings.xml",
"manifestPath": "/Users/vojta/dev/_own/datetimepicker/example/android/app/src/main/AndroidManifest.xml",
"buildGradlePath": "/Users/vojta/dev/_own/datetimepicker/example/android/build.gradle",
"settingsGradlePath": "/Users/vojta/dev/_own/datetimepicker/example/android/settings.gradle",
"assetsPath": "/Users/vojta/dev/_own/datetimepicker/example/android/app/src/main/assets",
"mainFilePath": "/Users/vojta/dev/_own/datetimepicker/example/android/app/src/main/java/com/example/MainApplication.java",
"packageName": "com.example",
"packageFolder": "com/example",
"appName": "app"
}
}
}

running `react-native config` from /example

vojta@Vojta-MacBook-Pro android (fix/ios-module-rn-62)*$ pwd
/Users/vojta/dev/_own/datetimepicker/example/android
vojta@Vojta-MacBook-Pro android (fix/ios-module-rn-62)*$ node -e "console.log(require('react-native/cli').bin);"
/Users/vojta/dev/_own/datetimepicker/node_modules/@react-native-community/cli/build/bin.js
vojta@Vojta-MacBook-Pro android (fix/ios-module-rn-62)*$ /Users/vojta/dev/_own/datetimepicker/node_modules/@react-native-community/cli/build/bin.js config
{
"root": "/Users/vojta/dev/_own/datetimepicker",
"reactNativePath": "/Users/vojta/dev/_own/datetimepicker/node_modules/react-native",
"dependencies": {},
"commands": [
{
"name": "log-ios",
"description": "starts iOS device syslog tail"
},
{
"name": "run-ios",
"description": "builds your app and starts it on iOS simulator",
"examples": [
...
],
"options": [
...
]
},
{
"name": "log-android",
"description": "starts logkitty"
},
{
"name": "run-android",
"description": "builds your app and starts it on a connected Android emulator or device",
"options": [
...
]
}
],
"assets": [],
"platforms": {
"ios": {},
"android": {}
},
"project": {
"ios": {
"sourceDir": "/Users/vojta/dev/_own/datetimepicker/ios",
"folder": "/Users/vojta/dev/_own/datetimepicker",
"pbxprojPath": "/Users/vojta/dev/_own/datetimepicker/ios/RNDateTimePicker.xcodeproj/project.pbxproj",
"podfile": null,
"podspecPath": "/Users/vojta/dev/_own/datetimepicker/RNDateTimePicker.podspec",
"projectPath": "/Users/vojta/dev/_own/datetimepicker/ios/RNDateTimePicker.xcodeproj",
"projectName": "RNDateTimePicker.xcodeproj",
"libraryFolder": "Libraries",
"sharedLibraries": [],
"plist": [],
"scriptPhases": []
},
"android": {
"sourceDir": "/Users/vojta/dev/_own/datetimepicker/example/android",
"isFlat": true,
"folder": "/Users/vojta/dev/_own/datetimepicker",
"stringsPath": "/Users/vojta/dev/_own/datetimepicker/example/android/app/src/main/res/values/strings.xml",
"manifestPath": "/Users/vojta/dev/_own/datetimepicker/example/android/app/src/main/AndroidManifest.xml",
"buildGradlePath": "/Users/vojta/dev/_own/datetimepicker/example/android/build.gradle",
"settingsGradlePath": "/Users/vojta/dev/_own/datetimepicker/example/android/settings.gradle",
"assetsPath": "/Users/vojta/dev/_own/datetimepicker/example/android/app/src/main/assets",
"mainFilePath": "/Users/vojta/dev/_own/datetimepicker/example/android/app/src/main/java/com/example/MainApplication.java",
"packageName": "com.example",
"packageFolder": "com/example",
"appName": "app"
}
}
}

At this point, I'm not sure if this is a bug or a feature. 😄 How do I make this work? What is the right way to link a library with its example project? Thank you!

Metadata

Metadata

Assignees

No one assigned

    Labels

    docsDocumentation changegood first issueGood for newcomersno-stale-botThis issue cannot be marked as stale by stale bot

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions