Unable to upload photo, uploadPrefix, unrecognized selector
Bug report for Cloudinary iOS SDK
Before proceeding, please update to latest version and test if the issue persists
Describe the bug in a sentence or two.
Trying to upload file. Upgraded to react native 0.64.x and not working now. Do you know what this error means?
Issue Type (Can be multiple)
[ ] Build - Can’t install or import the SDK [ ] Performance - Performance issues [ x] Behaviour - Functions aren’t working as expected (Such as generate URL) [ ] Documentation - Inconsistency between the docs and behaviour [ ] Other (Specify)
Steps to reproduce
idik
Error screenshots or Stack Trace (if applicable)
Exception '-[Cloudinary.CLDConfiguration initWithCloudName:apiKey:apiSecret:privateCdn:secure:cdnSubdomain:secureCdnSubdomain:secureDistribution:cname:uploadPrefix:]: unrecognized selector sent to instance 0x282d25400' was thrown while invoking uploadFile on target CloudinaryModule with params (
"file:///var/mobile/Containers/Data/Application/6A8045F7-2399-4A2E-AED7-AE1D45131797/tmp/E10380FD-B9C5-4682-B7A0-319DF783D857.jpg",
{ ...}
30130,
30131
)
callstack: (
0 CoreFoundation 0x000000018189d110 16FAA70C-278C-3561-859E-CEC407C2DC7C + 626960
1 libobjc.A.dylib 0x000000019a0d7d64 objc_exception_throw + 60
2 CoreFoundation 0x000000018197a0c4 16FAA70C-278C-3561-859E-CEC407C2DC7C + 1532100
3 CoreFoundation 0x0000000181832524 16FAA70C-278C-3561-859E-CEC407C2DC7C + 189732
4 CoreFoundation 0x0000000181831660 _CF_forwarding_prep_0 + 96
5 myapp 0x000000010293bf9c -[RNTCloudinaryManager uploadFile:fileData:uploadFileWithResolver:rejecter:] + 180
6 CoreFoundation 0x00000001818263a4 16FAA70C-278C-3561-859E-CEC407C2DC7C + 140196
7 CoreFoundation 0x0000000181843b74 16FAA70C-278C-3561-859E-CEC407C2DC7C + 260980
8 CoreFoundation 0x000000018187a9d4 16FAA70C-278C-3561-859E-CEC407C2DC7C + 485844
9 myapp 0x0000000102ca5228 -[RCTModuleMethod invokeWithBridge:module:arguments:] + 1696
10 myapp 0x0000000102d113a4 _ZN8facebook5reactL11invokeInnerEP9RCTBridgeP13RCTModuleDatajRKN5folly7dynamicEiN12_GLOBAL__N_117SchedulingContextE + 1088
11 myapp 0x0000000102d10da4 _ZZN8facebook5react15RCTNativeModule6invokeEjON5folly7dynamicEiENK3$_0clEv + 128
12 myapp 0x0000000102d10d18 ___ZN8facebook5react15RCTNativeModule6invokeEjON5folly7dynamicEi_block_invoke + 28
13 libdispatch.dylib 0x00000001069706d4 _dispatch_call_block_and_release + 32
14 libdispatch.dylib 0x00000001069723b4 _dispatch_client_callout + 20
15 libdispatch.dylib 0x000000010697a540 _dispatch_lane_serial_drain + 988
16 libdispatch.dylib 0x000000010697b290 _dispatch_lane_invoke + 428
17 libdispatch.dylib 0x0000000106987e20 _dispatch_workloop_worker_thread + 916
18 libsystem_pthread.dylib 0x00000001f22730f4 _pthread_wqthread + 288
19 libsystem_pthread.dylib 0x00000001f2272e94 start_wqthread + 8
)
RCTFatal
facebook::react::invokeInner(RCTBridge*, RCTModuleData*, unsigned int, folly::dynamic const&, int, (anonymous namespace)::SchedulingContext)
facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&, int)::$_0::operator()() const
invocation function for block in facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&, int)
_dispatch_call_block_and_release
_dispatch_client_callout
_dispatch_lane_serial_drain
_dispatch_lane_invoke
_dispatch_workloop_worker_thread
_pthread_wqthread
start_wqthread
Build/Dependency management
[x ] Cocoa-Pods [ ] Carthage [ ] Manual import [ ] Other (Specify)
Is the issue reproducible only on a specific device?
[x ] No [ ] Yes (specify model + iOS version)
Versions and Libraries (fill in the version numbers)
iOS Cloudinary SDK version - 3.1.0 OSX (on the dev environment) - 11.6 XCode - 13.2.1 Swift - 5 Target iOS - 12.1
Repository If possible, please provide a link to a reproducible repository that showcases the problem
@nschild
Can you please provide more context on what you're trying to do? Is this issue with React Native, or the Cloudinary IOS SDK?
@patrick-tolosa Thanks for the response, Although I did upgrade react native, I dont know what would be the cause of the error as the data that is sent to the cloudinary sdk looks the same. I did update ios recently as well and since the cloudinary sdk is throwing the error, I thought I would start here.
Below is the sdk implementation, all we are doing is uplaoding a file, pretty simple.
// RNTCloudinaryManager.m
#import "RNTCloudinaryManager.h"
#import <React/RCTBridgeModule.h>
#import <React/RCTConvert.h>
#import <Cloudinary-Swift.h>
@implementation RNTCloudinaryManager
RCT_EXPORT_MODULE(CloudinaryModule);
RCT_EXPORT_METHOD(uploadFile:(NSString *)filePath
fileData:(NSDictionary *)fileData
uploadFileWithResolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject) {
if (!_cloudinary) {
NSString *cloudinaryCloudName = [[[NSBundle mainBundle] infoDictionary] objectForKey: @"CLOUDINARY_CLOUD_NAME"];
CLDConfiguration *config;
config = [[CLDConfiguration alloc] initWithCloudName:cloudinaryCloudName apiKey:nil apiSecret:nil privateCdn:false secure:false cdnSubdomain:false secureCdnSubdomain:false secureDistribution:nil cname:nil uploadPrefix:nil];
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfig.HTTPMaximumConnectionsPerHost = 1;
sessionConfig.timeoutIntervalForRequest = 1800; // 30mins to prevent timeouts for large uploads
sessionConfig.timeoutIntervalForResource = 1800; // 30mins to prevent timeouts for large uploads
_cloudinary = [[CLDCloudinary alloc] initWithConfiguration:config networkAdapter:nil sessionConfiguration:sessionConfig];
}
NSURL *fileUrl = [RCTConvert NSURL:filePath];
NSString *resourceType = [fileData objectForKey:@"resourceType"];
NSString *context = [fileData objectForKey:@"context"];
NSString *uploadPreset = [NSString stringWithFormat:@"%@%@", @"default-", resourceType];
CLDUploader *uploader = [_cloudinary createUploader];
CLDUploadRequestParams *params = [[CLDUploadRequestParams alloc] init];
[ params setResourceTypeFromString:resourceType ];
[ params setContext:context ];
[ uploader
uploadLargeWithUrl:fileUrl
uploadPreset:uploadPreset
params:params
chunkSize:20 * 1024 * 1024
progress:^void(NSProgress *progressResult) {
// TODO: Can pass percentComplete value to RN in the future if we want to display a progress bar in the UI
// double percentComplete = [progressResult fractionCompleted];
// NSLog(@"Cloudinary uploader: progress percent completed %f", percentComplete);
if ([progressResult isFinished]) {
NSLog(@"Cloudinary uploader progress: finished");
NSDictionary *dictRes = @{ @"ok":@YES };
resolve(dictRes);
}
}
completionHandler:^(CLDUploadResult *uploadResult, NSError *errorResult) {
if (uploadResult) {
// not in use by app - see progress handler above
// cloudinary API was very long time to return 200 response, or would time-out, due to time required for video rotation fix
}
if (errorResult) {
NSLog(@"Cloudinary uploader error: %@", [errorResult localizedDescription]);
reject([NSString stringWithFormat:@"%li", (long)[errorResult code]], [errorResult localizedDescription], errorResult);
}
}
];
}
@end