rejection of app in apple store by purpose string in your app’s expo-location

Please provide the following:

  1. SDK Version:44.0.0
  2. Platforms(Android/iOS/web/all): IOS
  3. Expo-location

The application was rejected because I did not provide enough information in the purpose text, I have modified app.json with the following information

but it still shows the default message, I am developing from windows 10, any help will be welcome

you should share a reproducible example or more info about your app. eg: run npx expo-env-info in your app

the following works as expected:

{
  "expo": {
    "name": "locationtest",
    "slug": "locationtest",
    "version": "1.0.0",
    "ios": {
      "supportsTablet": true,
      "infoPlist": {
        "NSLocationAlwaysUsageDescription": "lol test",
        "NSLocationAlwaysAndWhenInUseUsageDescription": "lol test 2"
      },
      "bundleIdentifier": "com.brents.locationtest"
    }
  }
}

Thanks for answering,this is the environment information
image
and this my app.json file

{
  "expo": {
    "name": "Location Operations",
    "slug": "Location-operations",
    "version": "1.0.2",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "owner": "location",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#000000"
    },
    "updates": {
      "fallbackToCacheTimeout": 0
    },
    "assetBundlePatterns": [
      "**/*"
    ],
    "plugins":[
      [
        "@react-native-voice/voice",
        {
          "microphonePermission": "Allow $(PRODUCT_NAME) to access your microphone",
          "speechRecogntionPermission": "Allow $(PRODUCT_NAME) to securely recognize user speech"
        }
      ]
    ],
    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "com.location.locationoperations",
      "buildNumber": "2",
      "infoPlist":{
        "NSCameraUsageDescription":"This app use the camera to take photos",
        "NSPhotoLibraryUsageDescription":"This app use storage from save photos",
        "NSLocationAlwaysAndWhenInUseUsageDescription":"This app uses geolocation to get your current location in the work area",
                "NSLocationAlwaysUsageDescription":"This app uses geolocation to get your current location in the work area",
        
        "UIBackgroundModes": [
          "location",
          "fetch"
        ]
      }
    },
    "android": {
      "package":"com.location.locationoperations",
      "versionCode": 2,
      "permissions": [
        "ACCESS_NETWORK_STATE",
        "ACCESS_WIFI_STATE",
        "ACCESS_BACKGROUND_LOCATION",
        "ACCESS_COARSE_LOCATION", 
        "ACCESS_FINE_LOCATION",
        "FOREGROUND_SERVICE"
      ]

    },
    "web": {
      "favicon": "./assets/favicon.png"
    }
  }
}

Again, thanks for the help

can you run expo config --type prebuild and share the output?

This is the result of what you ask me

{
  name: 'Location Operations',
  slug: 'Location-operations',
  version: '1.0.2',
  orientation: 'portrait',
  icon: './assets/iconsion.png',
  owner: 'location',
  assetBundlePatterns: [
    '**/*'
  ],
  plugins: [
    [
      '@react-native-voice/voice',
      {
        microphonePermission: 'Allow $(PRODUCT_NAME) to access your microphone',
        speechRecogntionPermission: 'Allow $(PRODUCT_NAME) to securely recognize user speech'
      }
    ]
  ],
  description: undefined,
  sdkVersion: '44.0.0',
  platforms: [
    'ios',
    'android',
    'web'
  ],
  splash: {
    image: './assets/splash.png',
    resizeMode: 'contain',
    backgroundColor: '#000000'
  },
  updates: {
    fallbackToCacheTimeout: 0
  },
  ios: {
    supportsTablet: true,
    bundleIdentifier: 'com.location.locationoperations',
    buildNumber: '2',
    infoPlist: {
      NSCameraUsageDescription: 'This app use the camera to take photos',
      NSPhotoLibraryUsageDescription: 'This app use storage from save photos',
      NSLocationAlwaysAndWhenInUseUsageDescription: 'This app uses geolocation to get your current location in the work area',
      NSLocationAlwaysUsageDescription: 'This app uses geolocation to get your current location in the work area',
      UIBackgroundModes: [
        'location',
        'fetch'
      ]
    }
  },
  android: {
    package: 'com.location.locationoperations',
    versionCode: 2,
    permissions: [
      'ACCESS_NETWORK_STATE',
      'ACCESS_WIFI_STATE',
      'ACCESS_BACKGROUND_LOCATION',
      'ACCESS_COARSE_LOCATION',
      'ACCESS_FINE_LOCATION',
      'FOREGROUND_SERVICE',
      'android.permission.RECORD_AUDIO',
      'android.permission.MODIFY_AUDIO_SETTINGS',
      'android.permission.CAMERA',
      'android.permission.READ_EXTERNAL_STORAGE',
      'android.permission.WRITE_EXTERNAL_STORAGE',
      'android.permission.INTERNET',
      'android.permission.ACCESS_COARSE_LOCATION',
      'android.permission.ACCESS_FINE_LOCATION',
      'android.permission.FOREGROUND_SERVICE'
    ]
  },
  web: {
    favicon: './assets/favicon.png'
  },
  _internal: {
    isDebug: false,
    projectRoot: 'E:\\movil\\location',
    staticConfigPath: 'E:\\movil\\location\\app.json',
    packageJsonPath: 'E:\\movil\\location\\package.json',
    autolinkedModules: [
      'expo',
      'expo-application',
      'expo-av',
      'expo-camera',
      'expo-constants',
      'expo-error-recovery',
      'expo-file-system',
      'expo-font',
      'expo-image-loader',
      'expo-image-manipulator',
      'expo-json-utils',
      'expo-keep-awake',
      'expo-localization',
      'expo-location',
      'expo-manifests',
      'expo-modules-core',
      'expo-splash-screen',
      'expo-structured-headers',
      'expo-task-manager',
      'expo-updates',
      'expo-updates-interface',
      'expo-web-browser',
      'unimodules-app-loader',
      'unimodules-task-manager-interface'
    ],
    dynamicConfigPath: {},
    pluginHistory: {
      '@react-native-voice/voice': {
        name: '@react-native-voice/voice',
        version: '3.2.4'
      },
      'react-native-maps': {
        name: 'react-native-maps',
        version: 'UNVERSIONED'
      },
      'expo-ads-admob': {
        name: 'expo-ads-admob',
        version: 'UNVERSIONED'
      },
      'expo-apple-authentication': {
        name: 'expo-apple-authentication',
        version: 'UNVERSIONED'
      },
      'expo-contacts': {
        name: 'expo-contacts',
        version: 'UNVERSIONED'
      },
      'expo-notifications': {
        name: 'expo-notifications',
        version: 'UNVERSIONED'
      },
      'expo-updates': {
        name: 'expo-updates',
        version: '0.11.7'
      },
      'expo-branch': {
        name: 'expo-branch',
        version: 'UNVERSIONED'
      },
      'expo-document-picker': {
        name: 'expo-document-picker',
        version: 'UNVERSIONED'
      },
      'expo-facebook': {
        name: 'expo-facebook',
        version: 'UNVERSIONED'
      },
      'expo-system-ui': {
        name: 'expo-system-ui',
        version: 'UNVERSIONED'
      },
      'expo-splash-screen': {
        name: 'expo-splash-screen',
        version: '0.14.2'
      },
      'expo-navigation-bar': {
        name: 'expo-navigation-bar',
        version: 'UNVERSIONED'
      },
      'expo-av': {
        name: 'expo-av',
        version: '10.2.1'
      },
      'expo-camera': {
        name: 'expo-camera',
        version: '12.1.2'
      },
      'expo-file-system': {
        name: 'expo-file-system',
        version: '13.1.4'
      },
      'expo-location': {
        name: 'expo-location',
        version: '14.0.2'
      },
      'expo-task-manager': {
        name: 'expo-task-manager',
        version: '10.1.1'
      }
    }
  },
  mods: {
    ios: {
      infoPlist: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      dangerous: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      appDelegate: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      entitlements: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      expoPlist: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      xcodeproj: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      podfileProperties: [AsyncFunction: interceptingMod] {
        isProvider: false
      }
    },
    android: {
      manifest: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      colors: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      dangerous: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      strings: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      styles: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      colorsNight: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      projectBuildGradle: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      gradleProperties: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      settingsGradle: [AsyncFunction: interceptingMod] {
        isProvider: false
      },
      appBuildGradle: [AsyncFunction: interceptingMod] {
        isProvider: false
      }
    }
  },
  androidStatusBar: {
    backgroundColor: '#000000'
  }
}

Hi @winiro

I see you’re using the bare workflow. Did you intend to use the bare workflow instead of the managed workflow?

To be honest, it’s my first application in expo, and everything had flowed without problems, I didn’t know what to answer your question, because I learned what was necessary to develop the app, and this was the first inconvenience that I couldn’t solve

Did you perhaps run expo run:android or expo run:ios at any point?

That has the side effect of turning your app into a “bare” workflow app. That is not necessarily a problem, but it has consequences that you may not be aware of. e.g. changes you make to app.json may no longer take effect when you build the app.

See the following post for what you can do about it.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.