Issue
I had a similar issue with Android where I had to change the build version in the node_modules
of build.gradle
to match the SDK version used by the expo. See the solution here: https://stackoverflow.com/a/77389132/2150879
Now I'm seeing a different type of error with ios during expo's prebuild
command complaining about not finding objective-c code, I don't even know where to begin where to start looking at why this is happening...
The Command
npx expo prebuild --platform ios
Azure's Error Output
Installing using npm
> npm install
- Config syncing
Using node to generate images. This is much slower than using native packages.
› Optionally you can stop the process and try again after successfully running `npm install -g sharp-cli`.
- Config syncing
✖ Config sync failed
Error: [ios.appDelegate]: withIosAppDelegateBaseMod: Cannot modify AppDelegate because it is not in objective-c
Error: [ios.appDelegate]: withIosAppDelegateBaseMod: Cannot modify AppDelegate because it is not in objective-c
at /Users/runner/work/1/s/node_modules/react-native-msal/plugin/build/withIosReactNativeMSAL.js:35:19
at action (/Users/runner/work/1/s/node_modules/react-native-msal/node_modules/@expo/config-plugins/build/plugins/withMod.js:235:29)
at interceptingMod (/Users/runner/work/1/s/node_modules/react-native-msal/node_modules/@expo/config-plugins/build/plugins/withMod.js:126:27)
at action (/Users/runner/work/1/s/node_modules/@expo/config-plugins/build/plugins/withMod.js:206:14)
at async interceptingMod (/Users/runner/work/1/s/node_modules/@expo/config-plugins/build/plugins/withMod.js:105:21)
at async action (/Users/runner/work/1/s/node_modules/@expo/config-plugins/build/plugins/createBaseMod.js:61:21)
at async interceptingMod (/Users/runner/work/1/s/node_modules/@expo/config-plugins/build/plugins/withMod.js:105:21)
at async evalModsAsync (/Users/runner/work/1/s/node_modules/@expo/config-plugins/build/plugins/mod-compiler.js:202:25)
at async Object.compileModsAsync (/Users/runner/work/1/s/node_modules/@expo/config-plugins/build/plugins/mod-compiler.js:124:10)
at async configureProjectAsync (/Users/runner/work/1/s/node_modules/@expo/cli/build/src/prebuild/configureProjectAsync.js:54:15)
Error traced to node_modules\react-native-msal\plugin\build\withIosReactNativeMSAL.js
const withAppDelegateConfig = (config) => {
return (0, config_plugins_1.withAppDelegate)(config, (mod) => {
if (mod.modResults.language === 'objc') {
mod.modResults.contents = setAppDelegate(mod.modResults.contents);
}
else {
throw new Error('Cannot modify AppDelegate because it is not in objective-c'); // <---- error comes from here
}
return mod;
});
};
Expo Config app.json
{
"expo": {
"name": "my project",
"slug": "my-project",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/images/qa-icon-1024.png",
"userInterfaceStyle": "light",
"backgroundColor": "#001689",
"splash": {
"image": "./assets/images/qa-splash.png",
"resizeMode": "contain",
"backgroundColor": "#001689"
},
"assetBundlePatterns": ["**/*"],
"ios": {
"supportsTablet": true,
"bundleIdentifier": "com.example.mysite",
"buildNumber": "1.0.0"
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/images/qa-icon-1024.png",
"backgroundColor": "#001689"
},
"package": "com.example.mysite",
"versionCode": 1
},
"web": {
"favicon": "./assets/favicon.png"
},
"extra": {
"eas": {
"projectId": "my_uuid"
}
},
"plugins": [
[
"expo-build-properties",
{
"android": {
"minSdkVersion": 23,
"compileSdkVersion": 33,
"targetSdkVersion": 33,
"buildToolsVersion": "33.0.0"
},
"ios": {
"deploymentTarget": "13.0"
}
}
],
[
"react-native-msal",
{
"androidPackageSignatureHash": "my_key"
}
]
]
}
}
Package.json to show package versions
{
"name": "my-project",
"version": "1.0.0",
"main": "node_modules/expo/AppEntry.js",
"scripts": {
"start": "expo start --port 8082",
"android": "expo run:android --port 8082",
"ios": "expo run:ios",
"web": "expo start --web"
},
"dependencies": {
"@react-navigation/native": "^6.1.9",
"@react-navigation/stack": "^6.3.20",
"axios": "^1.6.2",
"expo": "^49.0.21",
"expo-build-properties": "^0.8.3",
"expo-secure-store": "~12.3.1",
"expo-splash-screen": "~0.20.5",
"expo-status-bar": "~1.6.0",
"expo-system-ui": "^2.6.0",
"formik": "^2.4.2",
"react": "18.2.0",
"react-native": "0.72.6",
"react-native-gesture-handler": "~2.12.0",
"react-native-get-random-values": "~1.9.0",
"react-native-msal": "^4.0.4",
"react-native-reanimated": "^3.6.1",
"react-native-safe-area-context": "4.6.3",
"react-native-screens": "^3.27.0",
"uuid": "^9.0.1",
"yup": "^1.2.0",
"zustand": "^4.4.6"
},
"devDependencies": {
"@babel/core": "^7.20.0",
"@babel/preset-env": "^7.22.9",
"@types/node": "^20.4.2",
"@types/react": "~18.2.14",
"@types/uuid": "^9.0.7",
"@typescript-eslint/eslint-plugin": "^6.1.0",
"@typescript-eslint/parser": "^6.1.0",
"babel-plugin-jest-hoist": "^29.5.0",
"babel-plugin-module-resolver": "^5.0.0",
"eslint": "^8.45.0",
"eslint-config-prettier": "^8.8.0",
"eslint-plugin-header": "^3.1.1",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsdoc": "^46.4.4",
"eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-prettier": "^5.0.0",
"eslint-plugin-react": "^7.32.2",
"eslint-plugin-react-hooks": "^4.6.0",
"typescript": "^5.1.3"
},
"private": true
}
Solution
I threw in a hack to console.log(mod.modResults.language)
to see what the value actually was as to why this condition was false. It looks like the value was objcpp
. It seemed so close to the objc
value that all I did was change the line.
node_modules/react-native-msal/plugin/build/withIosReactNativeMSAL.js
change
if (mod.modResults.language === 'objc') {
to
if (mod.modResults.language === 'objcpp') {
Now it works. I can see the last code push for this line was 2 years ago, so maybe it wasn't updated and a bug needs to be filed. This is a duck-tape solution, but at least it works.
Answered By - Fiddle Freak
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.