apache / cordova-common

Apache Cordova Common Tooling Library
https://cordova.apache.org/
Apache License 2.0
39 stars 46 forks source link

<resource-file /> tag copies a folder and its content when declared in a plugin.xml file, but the folder without its content when declared in a config.xml #213

Open guirip opened 4 years ago

guirip commented 4 years ago

Bug Report

Problem

What is expected to happen?

In the cordova project, at the same level as the config.xml file I have a folder named 'ios-resources', which contains a 'en.lproj' folder. This 'en.lproj' folder contains a file InfoPlist.strings.

In the config.xml, I have this:

    <platform name="ios">
        <resource-file src="ios-resources/en.lproj" target="en.lproj" />
    </platform>

I expect the 'en.lproj' folder and its content to be added to the XCode project.

What does actually happen?

I notice that the folder en.lproj is created in platforms/ios/[APP NAME]/Resources/en.lproj/ but it is empty.

If I run cordova prepare, this warning appears:

Overwriting existing resource file at platforms/ios/[APP NAME]/Resources/en.lproj

Information

important: If you declare the same thing in the context of a cordova plugin, then the 'en.lproj' folder AND its content are successfully added to the XCode project...

Command or Code

cordova create test-resourcefile-bug
cd test-resourcefile-bug/
mkdir ios-resources
mkdir ios-resources/en.lproj
vim ios-resources/en.lproj/InfoPlist.strings

Write:

"CFBundleDisplayName" = "APP RESOURCE-FILE BUG"; "NSCameraUsageDescription" = "The app would like to access the camera to scan barcodes and QR codes.";

Then: vim config.xml

Add the following tag to platform tag where attribute name is "ios":

<resource-file src="ios-resources/en.lproj" target="en.lproj" />

Finally:

cordova platform add ios@5.1.1
cordova prepare
ll platforms/ios/HelloCordova/Resources/en.lproj/

The destination folder is still empty, the above cordova platform add command has output a warning message about overwriting the en.lproj folder:

Using cordova-fetch for cordova-ios@5.1.1 Adding ios project... Creating Cordova project for the iOS platform: Path: platforms/ios Package: io.cordova.hellocordova Name: HelloCordova iOS project created with cordova-ios@5.1.1 Installing "cordova-plugin-whitelist" for ios Overwriting existing resource file at platforms/ios/HelloCordova/Resources/en.lproj --save flag or autosave detected Saving ios@~5.1.1 into config.xml file ...

Environment, Platform, Device

Issue noticed on cordova-ios, but I have no idea if cordova android has this problem too.

Version information

cordova -v

8.1.2 (cordova-lib@8.1.1)

cordova iOS platform version:

ios@5.1.1

cordova plugins:

cordova-android-support-gradle-release cordova-plugin-androidx cordova-plugin-androidx-adapter cordova-plugin-camera cordova-plugin-cookie-manager cordova-plugin-device cordova-plugin-file cordova-plugin-file-transfer cordova-plugin-inappbrowser cordova-plugin-ionic-keyboard cordova-plugin-ionic-webview cordova-plugin-splashscreen cordova-plugin-statusbar cordova-plugin-urloverride cordova-plugin-whitelist cordova-plugin-wkwebview-inject-cookie phonegap-plugin-barcodescanner pushwoosh-cordova-plugin

Checklist

monurakkaya commented 4 years ago

+1

dpogue commented 2 months ago

The root of this issue is actually in cordova-common's FileUpdater, where it will create a directory but not populate it: https://github.com/apache/cordova-common/blob/d7f71e69726ef152fb85312895c99d8f3aa069fc/src/FileUpdater.js#L83-L88

Going to move this issue to that repository for followup.