Appflow ignores strings from config.xml (Bluetooth Usage Description)

Appflow has suddenly stopped including the bluetooth usage description in the info.plist file of the resulting ipa.

My Cordova config.xml includes these lines:

<config-file overwrite = "true" parent = "NSBluetoothAlwaysUsageDescription" platform = "ios" target = "* - Info.plist">
          <string> This app would like to access Bluetooth to use the remote control. </string>
      </config-file>
      <config-file overwrite = "true" parent = "NSBluetoothPeripheralUsageDescription" platform = "ios" target = "* - Info.plist">
          <string> This app would like to access Bluetooth to use the remote control. </string>
      </config-file>

Until 2 days ago my commits were built without problems, the resulting ipas include the strings in the info.plist however now, even building the commits prior to this Appflow bug, the resulting ipas have ignored the strings:

	<key>NSBluetoothAlwaysUsageDescription</key>
	<string></string>
	<key>NSBluetoothPeripheralUsageDescription</key>
	<string></string>

My ipa is rejected by Apple, since Apple requires a usage description for bluetooth. Apple Store Connect now says:
ITMS-90683: Missing Purpose String in Info.plist

Any ideas how to solve this? Thank you
NOTE: unzipping the ipa and editing the info.plist to include the string is not a solution, the ipa will not be installed after modifying the info.plist

Appflow is a payed System isn’t it? You should use you support you have then.

I tried support before using this forum, but the response was that my query is out of their reach and suggesting to upgrade to a higher plan or use this forum.

Although we understand your frustration this is outside of the level of support we can provide […] The level of support this requires is available through one of our Enterprise Support plans, which include consultation and advisory services. […] I recommend checking out the following resources: The Ionic Forum (extremely active Q&A forum, this is a great place to ask questions!)…

I think the problem is that Appflow has updated Xcode 11 and now Appflow is not working properly.

Attached screenshot comparing the 2 plist files created by Appflow for the same commit. You will see that one was created with the Xcode version 11A420a (2 days ago) and the other with the Xcode version 11E608c (1 day ago).

The new version of Xcode 11E608c as you can see ignores bluetooth usage description strings, therefore Apple rejects ipa.

If I choose to build with Xcode 10 on Appflow then the problem goes away, but Xcode 10 uses SDK 12.2 which is deprecated, Apple will only accept apps compiled with SDK 13.

Any ideas how I can build with a working version of Xcode 11 or some workaround?

Thank you

Sounds like this beyond HTML/CSS/JS changes. You’ll need to redeploy a binary for this.

@edriven Thanks for your reply. When you say:

You will need to redeploy a binary for this.

What do you mean exactly? could you be more explicit please?

PS: I still think that the problem is Xcode 11E because it is the only thing that has changed from one build to another build, but maybe I am wrong. In any case if I can’t access Xcode 11A or the Ionic people take time to solve this problem, does anyone know of a way to modify the info.plist or some other temporary solution?

I misread your problem. You’re trying to make binary for iOS. I thought you were trying to do Live Deploy.

Best advice would be to just do it on your own Mac. Ionic is MIA probably because of the conference they are trying to put on in two weeks.

@edriven thanks for the answer but I hired the Appflow payment service because it allows me to build the app in the cloud, because I don’t have a Mac.

Anyone with a similar problem using Appflow?
Any ideas how to solve this problem?
Maybe the problem is not Xcode… in which case does someone suggest another cause?

Thanks in advance

I have the same issue. Can you solve it? I have this message:

In config.xml

        <config-file overwrite="true" parent="NSBluetoothAlwaysUsageDescription" target="*-Info.plist">
            <string>Esta aplicación necesita acceso a tu sensor Bluetooth con propósitos de control de acceso</string>
        </config-file>

But is not in Info.plist file, i have to add it manually in XCode. It seems that file do not update when you do ionic build command.
image

In the second error, i have to update cordova-ios plugin, with all cordova plugins.

I am sure more and more users will be affected by this problem soon.

Appflow is sold as an alternative to which to migrate from Phonegap https://ionicframework.com/docs/appflow/cookbook/phonegap-build-migration, which will be obsolete this month, if Appflow does not allow to build with an Xcode 11A version there will be rain of complaints from July, date in which AppStore will permanently make Phonegap obsolete.

All those who use bluetooth will be affected by this problem and their apps will be rejected by the App Store Team.

The Appflow team should respond by providing a solution to this problem, for example by allowing you to choose the version of Xcode 11A to build your app.

If someone from the Appflow team reads this case please respond.

@MGA93 Could you please explain how you edit the .ipa built by Appflow in Xcode to prevent the App Store from rejecting the app? If I edit the info.plist file then the .ipa is no longer allowed to be installed, it is corrupt for iOS.

Any temporary alternative to solve this problem?

Thank you all

Oh sorry, I didn’t read that part (Appflow). I use ionic with Capacitor, and in the final part, I have to open Xcode and Android Studio for the Settings (for use sensors and permissions).

I am facing the same issue,
If i build my app with XCode 11, my usage descriptions (NSPhotoLibraryUsageDescription & NSCameraUsageDescription in my case) are empty while they are not if i build with XCode 10.

I my config file, i also add another key (GADApplicationIdentifier). This one is correctly added in the Info.plist

    <config-file target="*-Info.plist" parent="GADApplicationIdentifier">
        <string>blah</string>
    </config-file>

    <config-file parent="NSCameraUsageDescription" target="*-Info.plist" overwrite="true">
        <string>We use the camera if you choose to take a picture for your profile</string>
    </config-file>
    <config-file parent="NSPhotoLibraryUsageDescription" target="*-Info.plist" overwrite="true">
        <string>We use your photos if you choose to use a photo for your profile</string>
    </config-file>

So this is as if the 2 values were erased or overwritten.

Still no news on the subject?

I found a solution for my case.
I was using the plugin cordova-plugin-camera version 2.4.1. I updated it with version 4.0.1 (latest) and now the description usage is not empty anymore…

@Beesop do you access yourself the bluetooth feature or is it one of your plugins? If a plugin, did you try using latest version?

Hope this helps