You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ma...@apache.org on 2026/09/09 09:49:26 UTC
(cordova-plugin-file) branch master updated: fix(ios): Use recommended `stringBy...` methods (#658)
This is an automated email from the ASF dual-hosted git repository.
GitToTheHub pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-plugin-file.git
The following commit(s) were added to refs/heads/master by this push:
new 6f9f745 fix(ios): Use recommended `stringBy...` methods (#658)
6f9f745 is described below
commit 6f9f745d985286803b6f71aee100597798baf1f2
Author: Manuel Beck <ma...@outlook.de>
AuthorDate: Wed Sep 9 11:49:20 2026 +0200
fix(ios): Use recommended `stringBy...` methods (#658)
* fix(ios): Use recommended `stringBy...` methods
- Instead using the deprecated `stringByReplacingPercentEscapesUsingEncoding` method use `stringByRemovingPercentEncoding` which is available since iOS 7
- Instead using the deprecated `stringByAddingPercentEscapesUsingEncoding` method use `stringByAddingPercentEncodingWithAllowedCharacters:` with the parameter `[NSCharacterSet URLPathAllowedCharacterSet]` which is available since iOS 7
* fix(ios): don't ecape `:` in `encodePath:``, add documentation
- The iOS tests failed because the PR encodes a complete cdvfile: URI as though it were only a path. `:` would be encoded and would produce for e.g.`cdvfile%3A//localhost/bundle/`.
---
src/ios/CDVFile.m | 13 ++++++++++---
src/ios/CDVLocalFilesystem.m | 9 ++++++++-
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/src/ios/CDVFile.m b/src/ios/CDVFile.m
index 62a77d1..8338c16 100644
--- a/src/ios/CDVFile.m
+++ b/src/ios/CDVFile.m
@@ -595,11 +595,18 @@ NSString* const kCDVFilesystemURLPrefix = @"cdvfile";
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
}
-//encode path with percent escapes
+/**
+ * Encode a complete URI with percent escapes. Keep ':' unescaped so the
+ * cdvfile:// scheme remains recognizable after decoding an already-encoded URI.
+ */
-(NSString *)encodePath:(NSString *)path
{
- NSString *decodedPath = [path stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //decode incase it's already encoded to avoid encoding twice
- return [decodedPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+ NSString *decodedPath = [path stringByRemovingPercentEncoding]; //decode incase it's already encoded to avoid encoding twice
+ NSMutableCharacterSet *allowedCharacters = [[NSCharacterSet URLPathAllowedCharacterSet] mutableCopy];
+ // URLPathAllowedCharacterSet would escape the ':' in the URI scheme,
+ // so we add it back to the allowed characters.
+ [allowedCharacters addCharactersInString:@":"];
+ return [decodedPath stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
}
diff --git a/src/ios/CDVLocalFilesystem.m b/src/ios/CDVLocalFilesystem.m
index c340ce0..e6c948d 100644
--- a/src/ios/CDVLocalFilesystem.m
+++ b/src/ios/CDVLocalFilesystem.m
@@ -122,10 +122,17 @@
return [self filesystemPathForFullPath:url.fullPath];
}
+/**
+ * CDVLocalFilesystem represents any registered local filesystem, such as
+ * temporary, persistent, documents, or bundle storage. Its public URL form is
+ * a cdvfile URI containing the filesystem name and the relative path.
+ * Escape the path before adding the cdvfile URI scheme and authority; the path
+ * must be encoded separately because it does not contain the URI scheme.
+ */
- (CDVFilesystemURL *)URLforFullPath:(NSString *)fullPath
{
if (fullPath) {
- NSString* escapedPath = [fullPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+ NSString* escapedPath = [fullPath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLPathAllowedCharacterSet]];
if ([fullPath hasPrefix:@"/"]) {
return [CDVFilesystemURL fileSystemURLWithString:[NSString stringWithFormat:@"%@://localhost/%@%@", kCDVFilesystemURLPrefix, self.name, escapedPath]];
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org