Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to upload photo, uploadPrefix, unrecognized selector #369

Open
nschild opened this issue Jan 31, 2022 · 2 comments
Open

Unable to upload photo, uploadPrefix, unrecognized selector #369

nschild opened this issue Jan 31, 2022 · 2 comments
Assignees
Labels

Comments

@nschild
Copy link

nschild commented Jan 31, 2022

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

@patrick-tolosa
Copy link
Contributor

@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?

@nschild
Copy link
Author

nschild commented Jan 31, 2022

@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants