릴리스 노트
제품 공지
Podfile 파일에서 다음을 사용하십시오.pod 'QCloudCOSXML'
Podfile 파일에서 다음을 사용하십시오.pod 'QCloudCOSXML/Transfer'

-ObjC-all_load

git clone https://github.com/tencentyun/qcloud-sdk-ios를 다운로드 합니다.source package.sh를 실행합니다.
#import <QCloudCOSXML/QCloudCOSXML.h>
import QCloudCOSXML
#import <QCloudCOSXML/QCloudCOSXMLTransfer.h>
import QCloudCOSXMLTransfer
QCloudSignatureProvider 프로토콜을 구현해야 합니다. 프로토콜에서 키를 얻은 후 매개변수continueBlock을 통해 키를 SDK에 콜백합니다.AppDelegate 또는 프로그램 싱글톤에 두는 것을 권장합니다.//AppDelegate.m//AppDelegate 는 QCloudSignatureProvider를 따라야 합니다.@interface AppDelegate()<QCloudSignatureProvider>@end@implementation AppDelegate- (BOOL)application:(UIApplication * )applicationdidFinishLaunchingWithOptions:(NSDictionary * )launchOptions {QCloudServiceConfiguration* configuration = [QCloudServiceConfiguration new];QCloudCOSXMLEndPoint* endpoint = [[QCloudCOSXMLEndPoint alloc] init];// 서비스 리전 약칭(예: 광저우 리전 ap-guangzhou)endpoint.regionName = @"COS_REGION";// HTTPS 사용endpoint.useHTTPS = true;configuration.endpoint = endpoint;// 키 제공자: 호스트configuration.signatureProvider = self;// COS 서비스 초기화 예시[QCloudCOSXMLService registerDefaultCOSXMLWithConfiguration:configuration];[QCloudCOSTransferMangerService registerDefaultCOSTransferMangerWithConfiguration:configuration];return YES;}// 서명을 얻는 메소드 게이트입니다. 임시 키를 얻고 서명을 계산하는 과정을 보여줍니다.// 서명 계산 과정을 사용자 정의할 수 있습니다.- (void) signatureWithFields:(QCloudSignatureFields*)filedsrequest:(QCloudBizHTTPRequest*)requesturlRequest:(NSMutableURLRequest*)urlRequstcompelete:(QCloudHTTPAuthentationContinueBlock)continueBlock{//백엔드 서버에서 가져온 임시 키를 여기에서 동기화합니다. 임시 키의 가용성을 최대한 보장하기 위해 임시 키를 가져오는 로직은 이곳에 배치하는 것을 강력히 권장합니다.//...QCloudCredential* credential = [QCloudCredential new];// 임시 키 SecretIdcredential.secretID = @"SECRETID";// 임시 키 SecretKeycredential.secretKey = @"SECRETKEY";// 임시 키 Tokencredential.token = @"TOKEN";/** 휴대폰 로컬 시간과의 편차가 너무 커서 서명이 부정확해지지 않도록 서버 시간을 서명 시작 시간으로 반환할 것을 권장합니다(매개변수 startTime과 expiredTime의 단위: 초).*/credential.startDate = [NSDate dateWithTimeIntervalSince1970:startTime]; // 단위: 초credential.expirationDate = [NSDate dateWithTimeIntervalSince1970:expiredTime]];// 단위: 초QCloudAuthentationV5Creator* creator = [[QCloudAuthentationV5Creator alloc]initWithCredential:credential];QCloudSignature *signature = [creator signatureForData:urlRequst];continueBlock(signature, nil);}@end
//AppDelegate.swift//AppDelegate 는 QCloudSignatureProvider를 따라야 합니다.class AppDelegate: UIResponder, UIApplicationDelegate,QCloudSignatureProvider {func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplication.LaunchOptionsKey: Any]?) -> Bool {let config = QCloudServiceConfiguration.init();let endpoint = QCloudCOSXMLEndPoint.init();//서비스 리전 약칭(예: 광저우 리전 ap-guangzhou)endpoint.regionName = "COS_REGION";// HTTPS 사용endpoint.useHTTPS = true;config.endpoint = endpoint;// 키 제공자: 호스트config.signatureProvider = self;// COS 서비스 초기화 예시QCloudCOSXMLService.registerDefaultCOSXML(with: config);QCloudCOSTransferMangerService.registerDefaultCOSTransferManger(with: config);return true}// 서명을 얻는 메소드 게이트입니다. 임시 키를 얻고 서명을 계산하는 과정을 보여줍니다.// 서명 계산 과정을 사용자 정의할 수 있습니다.func signature(with fileds: QCloudSignatureFields!,request: QCloudBizHTTPRequest!,urlRequest urlRequst: NSMutableURLRequest!,compelete continueBlock: QCloudHTTPAuthentationContinueBlock!) {//여기서 동기화하여 백엔드 서버에서 임시 키를 획득합니다.//...let credential = QCloudCredential.init();// 임시 키 SecretIdcredential.secretID = "SECRETID";// 임시 키 SecretKeycredential.secretKey = "SECRETKEY";// 임시 키 Tokencredential.token = "TOKEN";/** 휴대폰 로컬 시간과의 편차가 너무 커서 서명이 부정확해지지 않도록 서버 시간을 서명 시작 시간으로 반환할 것을 권장합니다(매개변수 startTime과 expiredTime의 단위: 초).*/credential.startDate = Date.init(timeIntervalSince1970: TimeInterval(startTime)!) DateFormatter().date(from: "startTime");credential.expirationDate = Date.init(timeIntervalSince1970: TimeInterval(expiredTime)!)let creator = QCloudAuthentationV5Creator.init(credential: credential);let signature = creator?.signature(forData: urlRequst);continueBlock(signature,nil);}}
QCloudCredentailFenceQueue의 스캐폴드를 제공합니다. 키가 만료된 후 스캐폴드는 키 만료 시간이 디바이스의 현재 시간보다 클 때까지 새 키를 얻기 위해 프로토콜을 다시 호출합니다.AppDelegate 또는 프로그램 싱글톤에 두는 것을 권장합니다. 스캐폴드를 사용하려면 다음 두 가지 프로토콜을 구현해야 합니다.//AppDelegate.m//AppDelegate는 QCloudSignatureProvider와//QCloudCredentailFenceQueueDelegate 프로토콜을 따라야 합니다.@interface AppDelegate()<QCloudSignatureProvider, QCloudCredentailFenceQueueDelegate>// 스캐폴드 인스턴스@property (nonatomic) QCloudCredentailFenceQueue* credentialFenceQueue;@end@implementation AppDelegate- (BOOL)application:(UIApplication * )applicationdidFinishLaunchingWithOptions:(NSDictionary * )launchOptions {QCloudServiceConfiguration* configuration = [QCloudServiceConfiguration new];QCloudCOSXMLEndPoint* endpoint = [[QCloudCOSXMLEndPoint alloc] init];// 서비스 리전 약칭(예: 광저우 리전 ap-guangzhou)endpoint.regionName = @"COS_REGION";// HTTPS 사용endpoint.useHTTPS = true;configuration.endpoint = endpoint;// 키 제공자: 호스트configuration.signatureProvider = self;// COS 서비스 초기화 예시[QCloudCOSXMLService registerDefaultCOSXMLWithConfiguration:configuration];[QCloudCOSTransferMangerService registerDefaultCOSTransferMangerWithConfiguration:configuration];// 임시 키 스캐폴드 초기화self.credentialFenceQueue = [QCloudCredentailFenceQueue new];self.credentialFenceQueue.delegate = self;return YES;}- (void) fenceQueue:(QCloudCredentailFenceQueue * )queue requestCreatorWithContinue:(QCloudCredentailFenceQueueContinue)continueBlock{//◊백엔드 서버에서 가져온 임시 키를 여기에서 동기화합니다. 임시 키의 가용성을 최대한 보장하기 위해 임시 키를 가져오는 로직은 이곳에 배치하는 것을 강력히 권장합니다.//...QCloudCredential* credential = [QCloudCredential new];// 임시 키 SecretIdcredential.secretID = @"SECRETID";// 임시 키 SecretKeycredential.secretKey = @"SECRETKEY";// 임시 키 Tokencredential.token = @"TOKEN";/** 휴대폰 로컬 시간과의 편차가 너무 커서 서명이 부정확해지지 않도록 서버 시간을 서명 시작 시간으로 반환할 것을 권장합니다(매개변수 startTime과 expiredTime의 단위: 초).*/credential.startDate = [NSDate dateWithTimeIntervalSince1970:startTime]; // 단위: 초credential.expirationDate = [NSDate dateWithTimeIntervalSince1970:expiredTime]];// 단위: 초QCloudAuthentationV5Creator* creator = [[QCloudAuthentationV5Creator alloc]initWithCredential:credential];continueBlock(creator, nil);}// 서명을 얻는 메소드 게이트입니다. 임시 키를 얻고 서명을 계산하는 과정을 보여줍니다.// 서명 계산 과정을 사용자 정의할 수 있습니다.- (void) signatureWithFields:(QCloudSignatureFields*)filedsrequest:(QCloudBizHTTPRequest*)requesturlRequest:(NSMutableURLRequest*)urlRequstcompelete:(QCloudHTTPAuthentationContinueBlock)continueBlock{[self.credentialFenceQueue performAction:^(QCloudAuthentationCreator *creator,NSError *error) {if (error) {continueBlock(nil, error);} else {QCloudSignature* signature = [creator signatureForData:urlRequst];continueBlock(signature, nil);}}];}@end
//AppDelegate.swift//AppDelegate는 QCloudSignatureProvider와//QCloudCredentailFenceQueueDelegate 프로토콜을 따라야 합니다.class AppDelegate: UIResponder, UIApplicationDelegate,QCloudSignatureProvider, QCloudCredentailFenceQueueDelegate {var credentialFenceQueue:QCloudCredentailFenceQueue?;func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplication.LaunchOptionsKey: Any]?) -> Bool {let config = QCloudServiceConfiguration.init();let endpoint = QCloudCOSXMLEndPoint.init();//서비스 리전 약칭, 예: 광저우 리전은 ap-guangzhouendpoint.regionName = "COS_REGION";// HTTPS 사용endpoint.useHTTPS = true;config.endpoint = endpoint;// 키 제공자: 호스트config.signatureProvider = self;// COS 서비스 초기화 예시QCloudCOSXMLService.registerDefaultCOSXML(with: config);QCloudCOSTransferMangerService.registerDefaultCOSTransferManger(with: config);// 임시 키 스캐폴드 초기화self.credentialFenceQueue = QCloudCredentailFenceQueue.init();self.credentialFenceQueue?.delegate = self;return true}func fenceQueue(_ queue: QCloudCredentailFenceQueue!,requestCreatorWithContinue continueBlock:QCloudCredentailFenceQueueContinue!) {//여기서 동기화하여 백엔드 서버에서 임시 키를 획득합니다.//...let credential = QCloudCredential.init();// 임시 키 SecretIdcredential.secretID = "SECRETID";// 임시 키 SecretKeycredential.secretKey = "SECRETKEY";// 임시 키 Tokencredential.token = "TOKEN";/** 휴대폰 로컬 시간과의 편차가 너무 커서 서명이 부정확해지지 않도록 서버 시간을 서명 시작 시간으로 반환할 것을 권장합니다(매개변수 startTime과 expiredTime의 단위: 초).*/credential.startDate = Date.init(timeIntervalSince1970: TimeInterval(startTime)!) DateFormatter().date(from: "startTime");credential.expirationDate = Date.init(timeIntervalSince1970: TimeInterval(expiredTime)!)let auth = QCloudAuthentationV5Creator.init(credential: credential);continueBlock(auth,nil);}// 서명을 얻는 메소드 게이트입니다. 임시 키를 얻고 서명을 계산하는 과정을 보여줍니다.// 서명 계산 과정을 사용자 정의할 수 있습니다.func signature(with fileds: QCloudSignatureFields!,request: QCloudBizHTTPRequest!,urlRequest urlRequst: NSMutableURLRequest!,compelete continueBlock: QCloudHTTPAuthentationContinueBlock!) {self.credentialFenceQueue?.performAction({ (creator, error) inif error != nil {continueBlock(nil,error!);}else{let signature = creator?.signature(forData: urlRequst);continueBlock(signature,nil);}})}}
QCloudServiceConfiguration이 변경된 경우, 아래 방법을 통해 새로운 인스턴스를 등록할 수 있습니다.+ (QCloudCOSTransferMangerService*) registerCOSTransferMangerWithConfiguration:(QCloudServiceConfig
QCloudCredentailFenceQueueDelegate 프로토콜을 실행하지 않아도 됩니다.- (void) signatureWithFields:(QCloudSignatureFields*)filedsrequest:(QCloudBizHTTPRequest*)requesturlRequest:(NSMutableURLRequest*)urlRequstcompelete:(QCloudHTTPAuthentationContinueBlock)continueBlock{QCloudCredential* credential = [QCloudCredential new];//SECRETID와 SECRETKEY는 CAM 콘솔에 로그인하여 조회 및 관리credential.secretID = @"SECRETID"; // 영구 키 SecretIdcredential.secretKey = @"SECRETKEY"; // 영구 키 SecretKey// 영구 키로 서명 계산QCloudAuthentationV5Creator* creator = [[QCloudAuthentationV5Creator alloc]initWithCredential:credential];QCloudSignature* signature = [creator signatureForData:urlRequst];continueBlock(signature, nil);}
func signature(with fileds: QCloudSignatureFields!,request: QCloudBizHTTPRequest!,urlRequest urlRequst: NSMutableURLRequest!,compelete continueBlock: QCloudHTTPAuthentationContinueBlock!) {let credential = QCloudCredential.init();//SECRETID와 SECRETKEY는 CAM 콘솔에 로그인하여 조회 및 관리credential.secretID = "SECRETID"; // 영구 키 SecretIdcredential.secretKey = "SECRETKEY"; // 영구 키 SecretKey// 영구 키로 서명 계산let auth = QCloudAuthentationV5Creator.init(credential: credential);let signature = auth?.signature(forData: urlRequst)continueBlock(signature,nil);}
QCloudCredentailFenceQueueDelegate 프로토콜을 실행하지 않아도 됩니다.- (void) signatureWithFields:(QCloudSignatureFields*)filedsrequest:(QCloudBizHTTPRequest*)requesturlRequest:(NSMutableURLRequest*)urlRequstcompelete:(QCloudHTTPAuthentationContinueBlock)continueBlock{// 서명 만료 시간NSDate *expiration = [[[NSDateFormatter alloc] init]dateFromString:@"expiredTime"];QCloudSignature *sign = [[QCloudSignature alloc] initWithSignature:@"백엔드에서 계산된 서명" expiration:expiration];continueBlock(signature, nil);}
func signature(with fileds: QCloudSignatureFields!,request: QCloudBizHTTPRequest!,urlRequest urlRequst: NSMutableURLRequest!,compelete continueBlock: QCloudHTTPAuthentationContinueBlock!) {// 서명 만료 시간let expiration = DateFormatter().date(from: "expiredTime");let sign = QCloudSignature.init(signature: "백엔드에서 계산된 서명",expiration: expiration);continueBlock(signature,nil);}
QCloudCOSXMLUploadObjectRequest* put = [QCloudCOSXMLUploadObjectRequest new];// 로컬 파일 경로NSURL* url = [NSURL fileURLWithPath:@"파일의 URL"];// BucketName-APPID 형식의 버킷 이름put.bucket = @"examplebucket-1250000000";// 객체 키, 객체의 COS 상의 전체 경로로, 디렉터리가 있을 경우 형식은 "video/xxx/movie.mp4"입니다.put.object = @"exampleobject";//업로드가 필요한 객체 콘텐츠입니다. NSData* 또는 NSURL* 유형의 변수를 전달할 수 있습니다.put.body = url;//업로드 진행률 수신[put setSendProcessBlock:^(int64_t bytesSent,int64_t totalBytesSent,int64_t totalBytesExpectedToSend) {// bytesSent 발송할 바이트 수(대용량 파일은 여러 번으로 나누어 발송해야 할 수 있습니다.)// totalBytesSent 발송한 바이트 수// totalBytesExpectedToSend 이번 업로드에서 발송할 총 바이트 수(파일 1개의 크기)}];//업로드 결과 수신[put setFinishBlock:^(id outputObject, NSError *error) {//outputObject에서 response의 etag 또는 사용자 정의 헤더 등 정보 획득 가능NSDictionary * result = (NSDictionary *)outputObject;}];[[QCloudCOSTransferMangerService defaultCOSTransferManager] UploadObject:put];
let put:QCloudCOSXMLUploadObjectRequest = QCloudCOSXMLUploadObjectRequest<AnyObject>();// BucketName-APPID 형식의 버킷 이름put.bucket = "examplebucket-1250000000";// 객체 키, 객체의 COS 상의 전체 경로로, 디렉터리가 있을 경우 형식은 "video/xxx/movie.mp4"입니다.put.object = "exampleobject";//업로드가 필요한 객체 콘텐츠입니다. NSData* 또는 NSURL* 유형의 변수를 전달할 수 있습니다.put.body = NSURL.fileURL(withPath: "Local File Path") as AnyObject;//업로드 결과 수신put.setFinish { (result, error) in// 업로드 결과 획득if error != nil{print(error!);}else{print(result!);}}//업로드 진행률 수신put.sendProcessBlock = { (bytesSent, totalBytesSent,totalBytesExpectedToSend) in// bytesSent 발송할 바이트 수(대용량 파일은 여러 번으로 나누어 발송해야 할 수 있습니다.)// totalBytesSent 발송한 바이트 수// totalBytesExpectedToSend 이번 업로드에서 발송할 총 바이트 수(파일 1개의 크기)};//업로드 매개변수 설정put.initMultipleUploadFinishBlock = {(multipleUploadInitResult, resumeData) in//멀티파트 업로드 초기화 완료 후 해당 block을 콜백합니다. 여기에서 resumeData를 획득할 수 있습니다.//또한 resumeData를 통해 멀티파트 업로드 요청을 생성할 수 있습니다.let resumeUploadRequest = QCloudCOSXMLUploadObjectRequest<AnyObject>.init(request: resumeData as Data?);}QCloudCOSTransferMangerService.defaultCOSTransferManager().uploadObject(put);
QCloudCOSXMLDownloadObjectRequest * request = [QCloudCOSXMLDownloadObjectRequest new];// BucketName-APPID 형식의 버킷 이름request.bucket = @"examplebucket-1250000000";// 객체 키, 객체의 COS 상의 전체 경로로, 디렉터리가 있을 경우 형식은 "video/xxx/movie.mp4"입니다.request.object = @"exampleobject";//다운로드할 경로 URL 설정, 설정 시 파일이 지정된 경로에 다운로드됩니다.request.downloadingURL = [NSURL fileURLWithPath:@"Local File Path"];//다운로드 결과 수신[request setFinishBlock:^(id outputObject, NSError *error) {//outputObject는 상응하는 모든 http 헤더를 포함합니다.NSDictionary* info = (NSDictionary *) outputObject;}];//다운로드 진행률 수신[request setDownProcessBlock:^(int64_t bytesDownload,int64_t totalBytesDownload,int64_t totalBytesExpectedToDownload) {// bytesDownload 이번에 다운로드할 바이트 수(대용량 파일은 여러 번으로 나누어 발송해야 할 수 있습니다.)// totalBytesDownload 다운로드한 바이트 수// totalBytesExpectedToDownload 이번 다운로드의 총 바이트 수(파일 1개의 크기)}];[[QCloudCOSTransferMangerService defaultCOSTransferManager] DownloadObject:request];
let request : QCloudCOSXMLDownloadObjectRequest = QCloudCOSXMLDownloadObjectRequest();// 파일이 위치한 버킷request.bucket = "examplebucket-1250000000";// 객체 키request.object = "exampleobject";//다운로드할 경로 URL 설정, 설정 시 파일이 지정된 경로에 다운로드됩니다.request.downloadingURL = NSURL.fileURL(withPath: "Local File Path") as URL?;//다운로드 진행률 수신request.sendProcessBlock = { (bytesDownload, totalBytesDownload,totalBytesExpectedToDownload) in// bytesDownload 이번에 다운로드할 바이트 수(대용량 파일은 여러 번으로 나누어 발송해야 할 수 있습니다.)// totalBytesDownload 다운로드한 바이트 수// totalBytesExpectedToDownload 이번 다운로드의 총 바이트 수(파일 1개의 크기)}//다운로드 결과 수신request.finishBlock = { (copyResult, error) inif error != nil{print(error!);}else{print(copyResult!);}}QCloudCOSTransferMangerService.defaultCOSTransferManager().downloadObject(request);
피드백