Application iOS rejected on the App Store

Please provide the following:

  1. SDK 38:
  2. Platforms(iOS):

Guideline 2.1 - Information Needed

We have started the review of your app, but we are not able to continue because we need additional information about your app.

Next Steps

To help us proceed with the review of your app, please review the following questions and provide as much detailed information as you can.

  • Who is the target audience?
  • Please explain the features and functionality of the app.
  • Does your app access any paid content or services?
  • Describe any paid content or services in the app and the payment methods used to pay for them.
  • Do individual customers pay for the content or services or does a company purchase them for its users?
  • Is this app meant for use in one company or for many client companies?
  • Is this app meant for internal use (employees, partners, etc.) of one specific company?
  • How do users obtain an account?
  • Are there fees involved with creating an account?

Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage

We noticed that your app requests the user’s consent to access their contacts and photos but does not clarify the use of the contacts and photos in the applicable purpose string.

Next Steps

Please revise the relevant purpose string in your app’s Info.plist file to specify why the app is requesting access to the user’s contacts and photos. You can modify your app’s Info.plist file using the property list editor in Xcode.

To help users understand why your app is requesting access to their personal data, all permission request alerts in your app should specify how your app will use the requested feature.

Hey @aasprilla,

You’ll want to add custom strings in your app.json file under ios.infoPlist Deploying to App Stores - Expo Documentation to remedy this situation.

Cheers,
Adam

Hello dear Adam,
I really appreciate your answer and help.
This is what I did, but it does not work for me in the simulator and I changed the configuration

//App.json

“ios”: {
“bundleIdentifier”: “com.teamaal.brokerhoods”,
“supportsTablet”: false,
“buildNumber”: “1.0.3”,
“infoPlist”: {
“CFBundleAllowMixedLocalizations”: true,
“CFBundleLocalizations”: [“es”, “en”],
“CFBundleDevelopmentRegion”: “es”
}
},
“locales”: {
“es”: “./languages/espanol.json”,
“en”: “./languages/english.json”
},

//Languajes… english.json
{
“CFBundleDisplayName”: “BrokerHood”,
“NSContactsUsageDescription”: "BrokerHood needs to access your contacts to share offers ",
“NSPhotoLibraryUsageDescription”: "BrokerHood needs to access your gallery to upload photos of your offers ",
“NSLocationWhenInUseUsageDescription”: "BrokerHood needs to access your location to facilitate the arrival at the property "
}

Thanks in advance!

In order for changes to app.json to take effect, you need to build a new binary.

1 Like

Ok dear @adamjnav,

I’ve already rebuilt the binary

Successfully built standalone app: https://expo.io/artifacts/05631cd7-ea78-464e-9161-dd3d24bf315a

I will test directly on my phone then, I let you know how it turns out.

It didn’t work out, I don’t know what I’m making a bad friend.

Thank you very much!

Can you share a formatted version of your app.json by using the code block? (it’s the </> icon in the toolbar when you post)

Hi @adamjnav,

Of course friend, there you have it … thank you very much!

{
  "expo": {
    "name": "Brokerhoods",
    "slug": "Brokerhoods",
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "updates": {
      "fallbackToCacheTimeout": 0
    },
    "assetBundlePatterns": ["**/*"],
    "ios": {
      "bundleIdentifier": "com.teamaal.brokerhoods",
      "supportsTablet": false,
      "buildNumber": "1.0.3",
      "infoPlist": {
        "CFBundleAllowMixedLocalizations": true,
        "CFBundleLocalizations": ["es", "en"],
        "CFBundleDevelopmentRegion": "es"
      }
    },
    "locales": {
      "es": "./languages/espanol.json",
      "en": "./languages/english.json"
    },
    "android": {
      "package": "com.aalteam.brokerhoods",
      "versionCode": 2,
      "permissions": [
        "CAMERA_ROLL",
        "READ_EXTERNAL_STORAGE",
        "WRITE_EXTERNAL_STORAGE",
        "LOCATION",
        "ACCESS_COARSE_LOCATION",
        "ACCESS_FINE_LOCATION",
        "NOTIFICATIONS"
      ]
    },
    "web": {
      "favicon": "./assets/favicon.png"
    },
    "description": "Entorno de pruebas"
  }
}

Englis.json

{
  "CFBundleDisplayName": "BrokerHood",
  "NSContactsUsageDescription": "BrokerHood needs to access your contacts to share offers ",
  "NSPhotoLibraryUsageDescription": "BrokerHood needs to access your gallery to upload photos of your offers ",
  "NSLocationWhenInUseUsageDescription": "BrokerHood needs to access your location to facilitate the arrival at the property "
}

Espanol.json

{
  "CFBundleDisplayName": "BrokerHood",
  "NSContactsUsageDescription": "BrokerHood necesita acceder a tus contactos para compartir ofertas ",
  "NSPhotoLibraryUsageDescription": "BrokerHood necesita acceder a tu galerĂ­a para subir las fotos de tus ofertas ",
  "NSLocationWhenInUseUsageDescription": "BrokerHood necesita acceder a tu ubicacion para facilitar la llegara a la propiedad "
}```

Everything looks to be in order. Regarding the screenshot above, is that from the standalone app you built or were you in the Expo Client? If you were in the Client, the dialogs are controlled by the Expo Client so you’ll see an alert like that. To see if your strings are working, you’ll need to run it via the standalone app either in a simulator with a simulator build via expo build:ios -t simulator or using an archive build on TestFlight.

Now getting friends because the messages kept coming out, then I’m going to generate a simulator build and proceed to upload the changes to the store.

I really appreciate your support @adamjnav!

Do you speak spanish?

Happy to be of service. As for the spanish, I’m afraid it is very poor. :upside_down_face:

Hello dear friend @adamjnav

I am pleased to inform you that, as you told me, it worked, and that right now I am going to publish.

I am new to this and it is the first time that I publish, so very grateful!

And your Spanish is so poor like my english!

A hug!

Sorry @adamjnav,

Now update the SDK to 38 and when generating the new app-bundle to upload the update to Google Play I get the following error… No genera el apk ni el aab

Thanks in advance!

Could not find google-services.json while looking in [src/nullnull/debug, src/debug/nullnull, src/nullnull, src/debug, src/nullnullDebug]
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
Could not find google-services.json while looking in [src/nullnull/release, src/release/nullnull, src/nullnull, src/release, src/nullnullRelease]
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
> Task :app:preBuild UP-TO-DATE
> Task :app:extractProguardFiles
> Task :app:preReleaseBuild
> Task :app:compileReleaseRenderscript NO-SOURCE
> Task :app:generateReleaseResValues
> Task :app:generateReleaseResources
> Task :app:processReleaseGoogleServices
Parsing json file: /app/turtle/workingdir/android/sdk38/android-shell-app/app/google-services.json
> Task :app:checkReleaseManifest
> Task :app:createReleaseCompatibleScreenManifests
> Task :app:mainApkListPersistenceRelease
> Task :app:processReleaseManifest
/app/turtle/workingdir/android/sdk38/android-shell-app/app/src/main/AndroidManifest.xml:30:1-89 Warning:
	uses-permission#android.permission.WRITE_CONTACTS was tagged at AndroidManifest.xml:30 to remove other declarations but no other declaration present
/app/turtle/workingdir/android/sdk38/android-shell-app/app/src/main/AndroidManifest.xml:34:1-91 Warning:
	uses-permission#android.permission.READ_PHONE_STATE was tagged at AndroidManifest.xml:34 to remove other declarations but no other declaration present
/app/turtle/workingdir/android/sdk38/android-shell-app/app/src/main/AndroidManifest.xml:35:1-87 Warning:
	uses-permission#android.permission.RECORD_AUDIO was tagged at AndroidManifest.xml:35 to remove other declarations but no other declaration present
/app/turtle/workingdir/android/sdk38/android-shell-app/app/src/main/AndroidManifest.xml:38:1-83 Warning:
	uses-permission#android.permission.READ_SMS was tagged at AndroidManifest.xml:38 to remove other declarations but no other declaration present
/app/turtle/workingdir/android/sdk38/android-shell-app/app/src/main/AndroidManifest.xml:18:9-27:20 Warning:
	provider#expo.modules.filesystem.FileSystemFileProvider@android:authorities was tagged at AndroidManifest.xml:18 to replace other declarations but no other declaration present
> Task :app:mergeReleaseShaders
> Task :app:compileReleaseShaders
> Task :app:generateReleaseAssets
> Task :app:mergeReleaseAssets
> Task :app:mergeReleaseJniLibFolders
> Task :app:generateReleaseBuildConfig
> Task :app:compileReleaseAidl NO-SOURCE
> Task :app:javaPreCompileRelease
> Task :app:processReleaseJavaRes NO-SOURCE
> Task :app:validateSigningRelease
> Task :app:collectReleaseDependencies
> Task :app:configureReleaseDependencies
> Task :app:signingConfigWriterRelease
> Task :app:mergeReleaseNativeLibs
> Task :app:stripReleaseDebugSymbols
> Task :app:mergeReleaseResources
> Task :app:processReleaseResources
> Task :app:compileReleaseJavaWithJavac
> Task :app:mergeReleaseGeneratedProguardFiles
> Task :app:bundleReleaseResources
> Task :app:mergeReleaseJavaResource
> Task :app:transformClassesAndResourcesWithR8ForRelease
> Task :app:buildReleasePreBundle
> Task :app:packageReleaseBundle
> Task :app:signReleaseBundle FAILED
[stderr] FAILURE: Build failed with an exception.
[stderr] * What went wrong:
[stderr] Execution failed for task ':app:signReleaseBundle'.
[stderr] > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
[stderr]    > Failed to read key aalteam-android71071301146 from store "/tmp/turtle/keystore-5569e0c3-4ad5-4b2b-a53e-70458ed5b230.jks": Invalid keystore format
[stderr] * Try:
[stderr] Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
[stderr] * Get more help at https://help.gradle.org
[stderr] BUILD FAILED in 5m 23s
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings
29 actionable tasks: 29 executed
Error: ./gradlew exited with non-zero code: 1
    at ChildProcess.completionListener (/app/turtle/node_modules/@expo/xdl/node_modules/@expo/spawn-async/build/spawnAsync.js:52:23)
    at Object.onceWrapper (events.js:418:26)
    at ChildProcess.emit (events.js:311:20)
    at ChildProcess.EventEmitter.emit (domain.js:482:12)
    at maybeClose (internal/child_process.js:1021:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)
    ...
    at spawnAsync (/app/turtle/node_modules/@expo/xdl/node_modules/@expo/spawn-async/build/spawnAsync.js:17:21)
    at spawnAsyncThrowError (/app/turtle/node_modules/@expo/xdl/build/detach/ExponentTools.js:190:45)
    at buildShellAppAsync (/app/turtle/node_modules/@expo/xdl/build/detach/AndroidShellApp.js:891:11)
    at async Object.createAndroidShellAppAsync (/app/turtle/node_modules/@expo/xdl/build/detach/AndroidShellApp.js:385:5)
    at async runShellAppBuilder (/app/turtle/build/builders/android.js:83:9)
    at async Object.buildAndroid [as android] (/app/turtle/build/builders/android.js:31:28)
    at async build (/app/turtle/build/jobManager.js:158:24)
    at async processJob (/app/turtle/build/jobManager.js:103:32)
    at async Object.doJob (/app/turtle/build/jobManager.js:35:5)
    at async main (/app/turtle/build/server.js:44:13)

Hey @aasprilla,

Glad to hear that the first problem got resolved. I was going to redirect you to this post for the second issue google-services.json not found error - #19 by aasprilla but it seems you’ve already found it yourself.

Cheers,
Adam

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