Skip to content

Commit 5d86b84

Browse files
YangSen-qnYangSen-qn
andauthored
Resume Upload default use v2 (#452)
* resume version, default to v2 --------- Co-authored-by: YangSen-qn <[email protected]>
1 parent 1df2273 commit 5d86b84

File tree

17 files changed

+114
-66
lines changed

17 files changed

+114
-66
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
#Changelog
2+
## 8.9.0 (2025-06-12)
3+
- 分片上传默认使用 V2 接口
4+
25
## 8.8.1(2024-10-25)
36
- 处理 iOS 18 PHAssetResource 信息 fetch 失败而导致异常问题
47

Qiniu

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit 9873e07232c9c6cb13126fe3312d619fcfa5a0a1

Qiniu.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'Qiniu'
3-
s.version = '8.8.1'
3+
s.version = '8.9.0'
44
s.summary = 'Qiniu Resource Storage SDK for iOS and Mac'
55
s.homepage = 'https://github.com/qiniu/objc-sdk'
66
s.social_media_url = 'http://weibo.com/qiniutek'

QiniuDemo/Podfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ target "QiniuDemo" do
44
platform :ios, "10.0"
55

66
# pod 'Qiniu', '~> 7.4.0'
7-
# pod 'Qiniu', '7.1.7'
7+
# pod 'Qiniu', '8.8.0'
88
pod 'Qiniu',:path => '../'
99
pod 'HappyDNS',:path => '../../happy-dns-objc'
1010
pod 'TZImagePickerController', '~> 3.8.7'

QiniuDemo/QiniuDemo.xcodeproj/project.pbxproj

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
26F62ADDD5B6306E978C9A3F /* libPods-QiniuDemoTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 14CB2139715DD7B6FD5B146E /* libPods-QiniuDemoTests.a */; };
1111
45169DF22C3D263200737759 /* Uploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 45169DF12C3D263200737759 /* Uploader.m */; };
1212
4561F02C28D9A6F80098A697 /* UploadResource_14M.zip in Resources */ = {isa = PBXBuildFile; fileRef = 4561F02B28D9A6F80098A697 /* UploadResource_14M.zip */; };
13-
45E6080929ADD57100634200 /* UploadResource_1G.zip in Resources */ = {isa = PBXBuildFile; fileRef = 45E6080829ADD57100634200 /* UploadResource_1G.zip */; };
1413
93D230241C86D7F700434F6D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D230231C86D7F700434F6D /* main.m */; };
1514
93D230271C86D7F700434F6D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D230261C86D7F700434F6D /* AppDelegate.m */; };
1615
93D2302A1C86D7F700434F6D /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D230291C86D7F700434F6D /* ViewController.m */; };
@@ -47,7 +46,6 @@
4746
45169DF12C3D263200737759 /* Uploader.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Uploader.m; sourceTree = "<group>"; };
4847
4561F02B28D9A6F80098A697 /* UploadResource_14M.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = UploadResource_14M.zip; sourceTree = "<group>"; };
4948
4561F02F28D9AB090098A697 /* Configure.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Configure.h; sourceTree = "<group>"; };
50-
45E6080829ADD57100634200 /* UploadResource_1G.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = UploadResource_1G.zip; sourceTree = "<group>"; };
5149
6B9BC5A8D93F988C1240E05F /* libPods-QiniuDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-QiniuDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
5250
93D2301F1C86D7F700434F6D /* QiniuDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = QiniuDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
5351
93D230231C86D7F700434F6D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
@@ -97,18 +95,9 @@
9795
/* End PBXFrameworksBuildPhase section */
9896

9997
/* Begin PBXGroup section */
100-
37C097D5D636357AA82067EF /* Resources */ = {
101-
isa = PBXGroup;
102-
children = (
103-
);
104-
name = Resources;
105-
path = QiniuDemo/Resources;
106-
sourceTree = "<group>";
107-
};
10898
4561F02A28D9A6F80098A697 /* DemoResource */ = {
10999
isa = PBXGroup;
110100
children = (
111-
45E6080829ADD57100634200 /* UploadResource_1G.zip */,
112101
4561F02B28D9A6F80098A697 /* UploadResource_14M.zip */,
113102
4561F02F28D9AB090098A697 /* Configure.h */,
114103
);
@@ -144,7 +133,6 @@
144133
93D230201C86D7F700434F6D /* Products */,
145134
63D8EA8E5532E578D972E007 /* Pods */,
146135
7E4EA7693FD8983C455E9490 /* Frameworks */,
147-
37C097D5D636357AA82067EF /* Resources */,
148136
);
149137
sourceTree = "<group>";
150138
};
@@ -312,7 +300,6 @@
312300
buildActionMask = 2147483647;
313301
files = (
314302
93D230321C86D7F700434F6D /* LaunchScreen.storyboard in Resources */,
315-
45E6080929ADD57100634200 /* UploadResource_1G.zip in Resources */,
316303
4561F02C28D9A6F80098A697 /* UploadResource_14M.zip in Resources */,
317304
93D2302F1C86D7F700434F6D /* Assets.xcassets in Resources */,
318305
93D2302D1C86D7F700434F6D /* Main.storyboard in Resources */,

QiniuDemo/QiniuDemo/ViewController.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ typedef NS_ENUM(NSInteger, UploadState){
2323
UploadStateUploading,
2424
UploadStateCancelling
2525
};
26-
@interface DnsItem : NSObject <QNIDnsNetworkAddress,TZImagePickerControllerDelegate>
26+
@interface DnsItem : NSObject <QNIDnsNetworkAddress>
2727
@property(nonatomic, copy)NSString *hostValue;
2828
@property(nonatomic, copy)NSString *ipValue;
2929
@property(nonatomic, strong)NSNumber *ttlValue;
@@ -33,7 +33,7 @@ @interface DnsItem : NSObject <QNIDnsNetworkAddress,TZImagePickerControllerDeleg
3333
@implementation DnsItem
3434
@end
3535

36-
@interface ViewController () <UINavigationControllerDelegate, UIImagePickerControllerDelegate, QNDnsDelegate>
36+
@interface ViewController () <UINavigationControllerDelegate, UIImagePickerControllerDelegate, TZImagePickerControllerDelegate>
3737

3838
@property (nonatomic, weak) IBOutlet UIButton* chooseBtn;
3939
@property (nonatomic, weak) IBOutlet UIButton* uploadBtn;
@@ -144,7 +144,7 @@ - (void)uploadImageToQNFilePath:(NSString *)filePath complete:(dispatch_block_t)
144144
self.token = @"5cJEzNSnh3PjOHZR_E0u1HCkXw4Bw1ZSuWQI9ufz:-ul1AJ8Fvpc7WhtpVT91Pvdfreo=:eyJzY29wZSI6InpvbmUwLXNwYWNlIiwiZGVhZGxpbmUiOjM0MzM3NDYyNTl9";
145145

146146

147-
QNConfiguration *configuration = [QNConfiguration build:^(QNConfigurationBuilder *builder) {
147+
QNConfiguration *configuration = [QNConfiguration buildV2:^(QNConfigurationBuilder *builder) {
148148
builder.timeoutInterval = 90;
149149
builder.retryMax = 1;
150150
// builder.useHttps = NO;
@@ -255,7 +255,7 @@ - (PHAsset *)getPHAssert {
255255
option.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
256256

257257
__block PHAsset *phAsset = nil;
258-
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionSubtypeAny subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
258+
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
259259
for (PHAssetCollection *collection in smartAlbums) {
260260
// 有可能是PHCollectionList类的的对象,过滤掉
261261
if (![collection isKindOfClass:[PHAssetCollection class]]) continue;

QiniuSDK.xcodeproj/project.pbxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,7 @@
637637
4551E55E24CE81DA00447285 /* QNInetAddress.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QNInetAddress.m; sourceTree = "<group>"; };
638638
4551E56524D0065100447285 /* NSData+QNMD5.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSData+QNMD5.h"; sourceTree = "<group>"; };
639639
4551E56624D0065100447285 /* NSData+QNMD5.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSData+QNMD5.m"; sourceTree = "<group>"; };
640+
45B03B702DF80281002148CE /* libHappyDNS-macOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libHappyDNS-macOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
640641
45CBC6C22AA9B05A00962B47 /* QNFixZoneTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QNFixZoneTest.m; sourceTree = "<group>"; };
641642
45CBC6D02ABA9FFF00962B47 /* QNCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QNCache.h; sourceTree = "<group>"; };
642643
45CBC6D12ABA9FFF00962B47 /* QNCache.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QNCache.m; sourceTree = "<group>"; };
@@ -954,6 +955,7 @@
954955
A955AABD20BF51BFE5032419 /* Frameworks */ = {
955956
isa = PBXGroup;
956957
children = (
958+
45B03B702DF80281002148CE /* libHappyDNS-macOS.a */,
957959
F14D0FE3BA304F86A17EDF33 /* libPods-QiniuSDK_Mac.a */,
958960
D15EA855D2DBDE6728E87462 /* libPods-QiniuSDK_MacTests.a */,
959961
43AF08370B1B79540BB41B4B /* libPods-QiniuSDK_iOS.a */,

QiniuSDK/Collect/QNUploadInfoReporter.m

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,17 @@ - (void)report:(NSString *)jsonString token:(NSString *)token {
116116
}
117117

118118
- (void)saveReportJsonString:(NSString *)jsonString {
119-
NSString *finalRecordInfo = [jsonString stringByAppendingString:@"\n"];
120119
NSFileManager *fileManager = [NSFileManager defaultManager];
120+
if (![fileManager fileExistsAtPath:self.config.recordDirectory]) {
121+
NSError *err;
122+
[fileManager createDirectoryAtPath:self.config.recordDirectory withIntermediateDirectories:YES attributes:nil error:&err];
123+
if (err) {
124+
NSLog(@"create record directory failed, please check record directory: %@", err.localizedDescription);
125+
return;
126+
}
127+
}
128+
129+
NSString *finalRecordInfo = [jsonString stringByAppendingString:@"\n"];
121130
if (![fileManager fileExistsAtPath:self.recorderFilePath]) {
122131
// 如果recordFile不存在,创建文件并写入首行,首次不上传
123132
[finalRecordInfo writeToFile:_recorderFilePath atomically:YES encoding:NSUTF8StringEncoding error:nil];

QiniuSDK/Storage/QNConfiguration.h

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#import <Foundation/Foundation.h>
1010
#import "QNRecorderDelegate.h"
1111
#import "QNDns.h"
12+
#import "QNDefine.h"
1213

1314
/**
1415
* 断点上传时的分块大小
@@ -133,13 +134,29 @@ typedef void (^QNConfigurationBuilderBlock)(QNConfigurationBuilder *builder);
133134
/**
134135
* 默认配置
135136
*/
136-
+ (instancetype)defaultConfiguration;
137+
+ (instancetype)defaultConfiguration kQNDeprecated("use defaultConfigurationV2 instead");
138+
139+
/**
140+
* 默认配置
141+
*
142+
* 此默认配置中分片上传使用分片V2,如果是私/专有云场景,请注意确认服务端是否支持分片V2
143+
*/
144+
+ (instancetype)defaultConfigurationV2;
137145

138146
/**
139147
* 使用 QNConfigurationBuilder 进行配置
140148
* @param block 配置block
141149
*/
142-
+ (instancetype)build:(QNConfigurationBuilderBlock)block;
150+
+ (instancetype)build:(QNConfigurationBuilderBlock)block kQNDeprecated("use buildV2 instead");
151+
152+
/**
153+
* 使用 QNConfigurationBuilder 进行配置
154+
* 配置中分片上传默认使用分片V2,如果是私/专有云场景,请注意确认服务端是否支持分片V2
155+
* 分片V2上传更快效率更高
156+
*
157+
* @param block 配置block
158+
*/
159+
+ (instancetype)buildV2:(QNConfigurationBuilderBlock)block;
143160

144161
@end
145162

QiniuSDK/Storage/QNConfiguration.m

Lines changed: 48 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,67 @@
1717
const UInt32 kQNDefaultDnsCacheTime = 2 * 60;
1818

1919

20+
@interface QNConfigurationBuilder()
21+
@end
22+
@implementation QNConfigurationBuilder
23+
24+
- (instancetype)init {
25+
if (self = [super init]) {
26+
_zone = [[QNAutoZone alloc] init];
27+
_chunkSize = 2 * 1024 * 1024;
28+
_putThreshold = 4 * 1024 * 1024;
29+
_retryMax = 1;
30+
_timeoutInterval = 90;
31+
_retryInterval = 0.5;
32+
33+
_recorder = nil;
34+
_recorderKeyGen = nil;
35+
36+
_proxy = nil;
37+
_converter = nil;
38+
39+
_useHttps = YES;
40+
_allowBackupHost = YES;
41+
_accelerateUploading = NO;
42+
_useConcurrentResumeUpload = NO;
43+
_resumeUploadVersion = QNResumeUploadVersionV1;
44+
_concurrentTaskCount = 3;
45+
}
46+
return self;
47+
}
48+
49+
+ (instancetype)defaultBuilder {
50+
QNConfigurationBuilder *builder = [[QNConfigurationBuilder alloc] init];
51+
builder.resumeUploadVersion = QNResumeUploadVersionV2;
52+
return builder;
53+
}
54+
55+
@end
56+
2057
@implementation QNConfiguration
2158

2259
+ (instancetype)defaultConfiguration{
2360
QNConfigurationBuilder *builder = [[QNConfigurationBuilder alloc] init];
2461
return [[QNConfiguration alloc] initWithBuilder:builder];
2562
}
2663

64+
+ (instancetype)defaultConfigurationV2{
65+
QNConfigurationBuilder *builder = [QNConfigurationBuilder defaultBuilder];
66+
return [[QNConfiguration alloc] initWithBuilder:builder];
67+
}
68+
2769
+ (instancetype)build:(QNConfigurationBuilderBlock)block {
2870
QNConfigurationBuilder *builder = [[QNConfigurationBuilder alloc] init];
2971
block(builder);
3072
return [[QNConfiguration alloc] initWithBuilder:builder];
3173
}
3274

75+
+ (instancetype)buildV2:(QNConfigurationBuilderBlock)block {
76+
QNConfigurationBuilder *builder = [QNConfigurationBuilder defaultBuilder];
77+
block(builder);
78+
return [[QNConfiguration alloc] initWithBuilder:builder];
79+
}
80+
3381
- (instancetype)initWithBuilder:(QNConfigurationBuilder *)builder {
3482
if (self = [super init]) {
3583
_useConcurrentResumeUpload = builder.useConcurrentResumeUpload;
@@ -262,32 +310,4 @@ - (void)setDefaultConnectCheckUrls:(NSArray *)defaultConnectCheckUrls {
262310

263311
@end
264312

265-
@implementation QNConfigurationBuilder
266-
267-
- (instancetype)init {
268-
if (self = [super init]) {
269-
_zone = [[QNAutoZone alloc] init];
270-
_chunkSize = 2 * 1024 * 1024;
271-
_putThreshold = 4 * 1024 * 1024;
272-
_retryMax = 1;
273-
_timeoutInterval = 90;
274-
_retryInterval = 0.5;
275-
276-
_recorder = nil;
277-
_recorderKeyGen = nil;
278-
279-
_proxy = nil;
280-
_converter = nil;
281-
282-
_useHttps = YES;
283-
_allowBackupHost = YES;
284-
_accelerateUploading = NO;
285-
_useConcurrentResumeUpload = NO;
286-
_resumeUploadVersion = QNResumeUploadVersionV1;
287-
_concurrentTaskCount = 3;
288-
}
289-
return self;
290-
}
291-
292-
@end
293313

QiniuSDK/Storage/QNUploadManager.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#import <Foundation/Foundation.h>
1010

1111
#import "QNRecorderDelegate.h"
12+
#import "QNDefine.h"
1213

1314
@class QNResponseInfo;
1415
@class QNUploadOption;
@@ -39,7 +40,7 @@ typedef void (^QNUpCompletionHandler)(QNResponseInfo *info, NSString *key, NSDic
3940
*
4041
* @return 上传管理类实例
4142
*/
42-
- (instancetype)init;
43+
- (instancetype)init kQNDeprecated("use initWithConfiguration instead");
4344

4445
/**
4546
* 使用一个持久化的记录接口进行记录的构造方法
@@ -48,7 +49,7 @@ typedef void (^QNUpCompletionHandler)(QNResponseInfo *info, NSString *key, NSDic
4849
*
4950
* @return 上传管理类实例
5051
*/
51-
- (instancetype)initWithRecorder:(id<QNRecorderDelegate>)recorder;
52+
- (instancetype)initWithRecorder:(id<QNRecorderDelegate>)recorder kQNDeprecated("use initWithConfiguration instead");
5253

5354
/**
5455
* 使用持久化记录接口以及持久化key生成函数的构造方法,默认情况下使用上传存储的key, 如果key为nil或者有特殊字符比如/,建议使用自己的生成函数
@@ -59,7 +60,7 @@ typedef void (^QNUpCompletionHandler)(QNResponseInfo *info, NSString *key, NSDic
5960
* @return 上传管理类实例
6061
*/
6162
- (instancetype)initWithRecorder:(id<QNRecorderDelegate>)recorder
62-
recorderKeyGenerator:(QNRecorderKeyGenerator)recorderKeyGenerator;
63+
recorderKeyGenerator:(QNRecorderKeyGenerator)recorderKeyGenerator kQNDeprecated("use initWithConfiguration instead");
6364

6465
/**
6566
* 使用配置信息生成上传实例

QiniuSDK/Utils/QNVersion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@
1111
/**
1212
* sdk 版本
1313
*/
14-
static NSString *const kQiniuVersion = @"8.8.1";
14+
static NSString *const kQiniuVersion = @"8.9.0";

QiniuSDKTests/QNCFHttpClientTest.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,15 @@ - (void)testHttpsGet{
4545
}
4646

4747
- (void)testHttpGetByIP{
48-
NSURL *url = [NSURL URLWithString:@"http://218.98.28.19/v3/query?ak=jH983zIUFIP1OVumiBVGeAfiLYJvwrF45S-t22eu&bucket=zone0-space"];
48+
NSURL *url = [NSURL URLWithString:@"http://101.251.144.177/v3/query?ak=jH983zIUFIP1OVumiBVGeAfiLYJvwrF45S-t22eu&bucket=zone0-space"];
4949
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
5050
request.qn_domain = @"uc.qbox.me";
5151

5252
[self request:request];
5353
}
5454

5555
- (void)testHttpsGetByIP{
56-
NSURL *url = [NSURL URLWithString:@"https://218.98.28.19/v3/query?ak=jH983zIUFIP1OVumiBVGeAfiLYJvwrF45S-t22eu&bucket=zone0-space"];
56+
NSURL *url = [NSURL URLWithString:@"https://101.251.144.177/v3/query?ak=jH983zIUFIP1OVumiBVGeAfiLYJvwrF45S-t22eu&bucket=zone0-space"];
5757
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
5858
request.qn_domain = @"uc.qbox.me";
5959

QiniuSDKTests/QNConfigurationTest.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ - (void)tearDown {
2323
// Put teardown code here. This method is called after the invocation of each test method in the class.
2424
}
2525

26+
- (void)testConfigDefaultConfig {
27+
QNConfiguration *cfg = [QNConfiguration buildV2:^(QNConfigurationBuilder *builder) {
28+
}];
29+
XCTAssertTrue(cfg.resumeUploadVersion == QNResumeUploadVersionV2, @"config default resumeUploadVersion error");
30+
}
31+
32+
2633
- (void)testGlobalDefaultConfig {
2734
QNGlobalConfiguration *cfg = [QNGlobalConfiguration shared];
2835
cfg.udpDnsIpv4Servers = nil;

QiniuSDKTests/QNResumeUploadTest.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ - (void)tearDown {
3636
}
3737

3838
- (void)testSwitchRegionV1 {
39-
QNConfiguration *config = [QNConfiguration build:^(QNConfigurationBuilder *builder) {
39+
QNConfiguration *config = [QNConfiguration buildV2:^(QNConfigurationBuilder *builder) {
4040
builder.resumeUploadVersion = QNResumeUploadVersionV1;
4141
builder.useConcurrentResumeUpload = NO;
4242
builder.useHttps = YES;
@@ -52,7 +52,7 @@ - (void)testSwitchRegionV1 {
5252
- (void)testCancelV1 {
5353
float cancelPercent = 0.1;
5454

55-
QNConfiguration *config = [QNConfiguration build:^(QNConfigurationBuilder *builder) {
55+
QNConfiguration *config = [QNConfiguration buildV2:^(QNConfigurationBuilder *builder) {
5656
builder.resumeUploadVersion = QNResumeUploadVersionV1;
5757
builder.useConcurrentResumeUpload = NO;
5858
builder.useHttps = YES;

0 commit comments

Comments
 (0)