Skip to content

Commit 5ae62ba

Browse files
authored
Merge pull request #215 from zapcannon87/developer
release: 16.3.0
2 parents bff7bd4 + 76040c3 commit 5ae62ba

15 files changed

+957
-350
lines changed

LeanCloud.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 = 'LeanCloud'
3-
s.version = '16.2.0'
3+
s.version = '16.3.0'
44
s.license = { :type => 'Apache License, Version 2.0', :file => 'LICENSE' }
55
s.summary = 'LeanCloud Swift SDK'
66
s.homepage = 'https://leancloud.cn/'

LeanCloud.xcodeproj/project.pbxproj

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
11D9C101216DFB2D00A620B7 /* MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11D9C100216DFB2D00A620B7 /* MD5.swift */; };
2828
11FBD1E5215BDDCA00370C61 /* LCCoreTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11FBD1E4215BDDCA00370C61 /* LCCoreTestCase.swift */; };
2929
11FBD1E8215BEEB400370C61 /* test.zip in Resources */ = {isa = PBXBuildFile; fileRef = 11FBD1E7215BEEB400370C61 /* test.zip */; };
30-
8334561C1CE589E500D42725 /* LCEngineTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8334561B1CE589E500D42725 /* LCEngineTestCase.swift */; };
3130
8342FCC61C7B13A700C3CF15 /* LeanCloud.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8342FCBB1C7B13A700C3CF15 /* LeanCloud.framework */; };
3231
8342FCCB1C7B13A700C3CF15 /* BaseTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8342FCCA1C7B13A700C3CF15 /* BaseTestCase.swift */; };
3332
834EA7151D2A139A00108DDC /* LCUserTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 834EA7141D2A139A00108DDC /* LCUserTestCase.swift */; };
@@ -48,7 +47,6 @@
4847
835F5D741D7E6808004D1A0E /* Role.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835F5D501D7E6808004D1A0E /* Role.swift */; };
4948
835F5D751D7E6808004D1A0E /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835F5D511D7E6808004D1A0E /* String.swift */; };
5049
835F5D761D7E6808004D1A0E /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835F5D521D7E6808004D1A0E /* User.swift */; };
51-
835F5D771D7E6808004D1A0E /* Engine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835F5D531D7E6808004D1A0E /* Engine.swift */; };
5250
835F5D791D7E6808004D1A0E /* Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835F5D551D7E6808004D1A0E /* Extension.swift */; };
5351
835F5D7A1D7E6808004D1A0E /* LeanCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 835F5D561D7E6808004D1A0E /* LeanCloud.h */; settings = {ATTRIBUTES = (Public, ); }; };
5452
835F5D7B1D7E6808004D1A0E /* LeanCloud.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835F5D571D7E6808004D1A0E /* LeanCloud.swift */; };
@@ -88,10 +86,14 @@
8886
D34F1BB92268263000251BC8 /* IMLocalStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D34F1BB82268263000251BC8 /* IMLocalStorage.swift */; };
8987
D357B46522632A210002D14C /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D30A2F81224A069100C000D5 /* Starscream.framework */; };
9088
D357B46722632A510002D14C /* Starscream.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D30A2F81224A069100C000D5 /* Starscream.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
89+
D363342022CD9EC300995DC1 /* Engine.swift in Sources */ = {isa = PBXBuildFile; fileRef = D363341F22CD9EC300995DC1 /* Engine.swift */; };
90+
D363343622CDB0D300995DC1 /* LCEngineTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D363343522CDB0D300995DC1 /* LCEngineTestCase.swift */; };
9191
D3662F9222019B590046A390 /* test.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = D3662F9122019B590046A390 /* test.mp3 */; };
9292
D3665C3721FEAAC1005B44B0 /* IMMessageTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3665C3621FEAAC1005B44B0 /* IMMessageTestCase.swift */; };
9393
D3783A1221F453C3006F6635 /* IMConversationTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3783A1121F453C3006F6635 /* IMConversationTestCase.swift */; };
9494
D393EDBE21D38206001CBB2B /* IMMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D393EDBD21D38206001CBB2B /* IMMessage.swift */; };
95+
D39C50A822D4683C00CFCB43 /* Push.swift in Sources */ = {isa = PBXBuildFile; fileRef = D39C50A722D4683C00CFCB43 /* Push.swift */; };
96+
D39C50AA22D47BA700CFCB43 /* LCPushTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D39C50A922D47BA700CFCB43 /* LCPushTestCase.swift */; };
9597
D3AB32D8227D983E00DCE794 /* CaptchaClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3AB32D7227D983E00DCE794 /* CaptchaClient.swift */; };
9698
D3AC7BA821AE9C1A00C6C557 /* IMClientTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3AC7BA721AE9C1A00C6C557 /* IMClientTestCase.swift */; };
9799
D3AF1CB722681F1200A97566 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3AF1CA422681EF500A97566 /* FMDB.framework */; };
@@ -352,7 +354,6 @@
352354
11D9C100216DFB2D00A620B7 /* MD5.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MD5.swift; sourceTree = "<group>"; };
353355
11FBD1E4215BDDCA00370C61 /* LCCoreTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LCCoreTestCase.swift; sourceTree = "<group>"; };
354356
11FBD1E7215BEEB400370C61 /* test.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = test.zip; sourceTree = "<group>"; };
355-
8334561B1CE589E500D42725 /* LCEngineTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LCEngineTestCase.swift; sourceTree = "<group>"; };
356357
8342FCBB1C7B13A700C3CF15 /* LeanCloud.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LeanCloud.framework; sourceTree = BUILT_PRODUCTS_DIR; };
357358
8342FCC01C7B13A700C3CF15 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
358359
8342FCC51C7B13A700C3CF15 /* LeanCloudTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LeanCloudTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -376,7 +377,6 @@
376377
835F5D501D7E6808004D1A0E /* Role.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Role.swift; sourceTree = "<group>"; };
377378
835F5D511D7E6808004D1A0E /* String.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = String.swift; sourceTree = "<group>"; };
378379
835F5D521D7E6808004D1A0E /* User.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = "<group>"; };
379-
835F5D531D7E6808004D1A0E /* Engine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Engine.swift; sourceTree = "<group>"; };
380380
835F5D551D7E6808004D1A0E /* Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extension.swift; sourceTree = "<group>"; };
381381
835F5D561D7E6808004D1A0E /* LeanCloud.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LeanCloud.h; sourceTree = "<group>"; };
382382
835F5D571D7E6808004D1A0E /* LeanCloud.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LeanCloud.swift; sourceTree = "<group>"; };
@@ -414,11 +414,15 @@
414414
D33D36D722017DAC008C9BDA /* test.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = test.png; sourceTree = "<group>"; };
415415
D33D36DA22019197008C9BDA /* test.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = test.mp4; sourceTree = "<group>"; };
416416
D34F1BB82268263000251BC8 /* IMLocalStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IMLocalStorage.swift; sourceTree = "<group>"; };
417+
D363341F22CD9EC300995DC1 /* Engine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Engine.swift; sourceTree = "<group>"; };
418+
D363343522CDB0D300995DC1 /* LCEngineTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LCEngineTestCase.swift; sourceTree = "<group>"; };
417419
D3662F9122019B590046A390 /* test.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = test.mp3; sourceTree = "<group>"; };
418420
D3665C3621FEAAC1005B44B0 /* IMMessageTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IMMessageTestCase.swift; sourceTree = "<group>"; };
419421
D3783A1121F453C3006F6635 /* IMConversationTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IMConversationTestCase.swift; sourceTree = "<group>"; };
420422
D387262A217726B500DD8FBF /* SwiftProtobuf.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SwiftProtobuf.xcodeproj; path = SwiftProtobuf/SwiftProtobuf.xcodeproj; sourceTree = "<group>"; };
421423
D393EDBD21D38206001CBB2B /* IMMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IMMessage.swift; sourceTree = "<group>"; };
424+
D39C50A722D4683C00CFCB43 /* Push.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Push.swift; sourceTree = "<group>"; };
425+
D39C50A922D47BA700CFCB43 /* LCPushTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LCPushTestCase.swift; sourceTree = "<group>"; };
422426
D3AB32D7227D983E00DCE794 /* CaptchaClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaptchaClient.swift; sourceTree = "<group>"; };
423427
D3AC7BA721AE9C1A00C6C557 /* IMClientTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IMClientTestCase.swift; sourceTree = "<group>"; };
424428
D3AF1C8A22681EF500A97566 /* fmdb.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = fmdb.xcodeproj; path = fmdb/fmdb.xcodeproj; sourceTree = "<group>"; };
@@ -547,7 +551,6 @@
547551
1178D10E213F7B9600429131 /* LCAPITestCase.swift */,
548552
116A682521427442004141A5 /* LCRouterTestCase.swift */,
549553
8365CFA71D79849D006B856E /* LCTypeTestCase.swift */,
550-
8334561B1CE589E500D42725 /* LCEngineTestCase.swift */,
551554
83BC11D51CDD76E900D7E7A6 /* LCACLTestCase.swift */,
552555
83FAF0921CC4D1E400A84063 /* LCObjectTestCase.swift */,
553556
83D0DE6E1CC7B3FF00FC204E /* LCQueryTestCase.swift */,
@@ -556,6 +559,8 @@
556559
114E1E842153A3ED00DA7DB0 /* LCFileTestCase.swift */,
557560
118763AE2176EA3A0078645B /* LCInstallationTestCase.swift */,
558561
D3BBFB40225D944100B75BA1 /* LCLocalStorageContextTestCase.swift */,
562+
D363343522CDB0D300995DC1 /* LCEngineTestCase.swift */,
563+
D39C50A922D47BA700CFCB43 /* LCPushTestCase.swift */,
559564
D33A8DA921F577F2005B84A9 /* RTMBaseTestCase.swift */,
560565
1123922B2191669100ECCBCC /* RTMRouterTestCase.swift */,
561566
D3DAD03B218DA402008BCD37 /* RTMConnectionTestCase.swift */,
@@ -597,9 +602,10 @@
597602
835F5D611D7E6808004D1A0E /* Result.swift */,
598603
835F5D5D1D7E6808004D1A0E /* Query.swift */,
599604
835F5D431D7E6808004D1A0E /* CQLClient.swift */,
600-
835F5D531D7E6808004D1A0E /* Engine.swift */,
601605
835F5D631D7E6808004D1A0E /* SMSClient.swift */,
602606
D3AB32D7227D983E00DCE794 /* CaptchaClient.swift */,
607+
D363341F22CD9EC300995DC1 /* Engine.swift */,
608+
D39C50A722D4683C00CFCB43 /* Push.swift */,
603609
);
604610
path = Storage;
605611
sourceTree = "<group>";
@@ -1072,12 +1078,12 @@
10721078
835F5D6F1D7E6808004D1A0E /* GeoPoint.swift in Sources */,
10731079
835F5D841D7E6808004D1A0E /* Result.swift in Sources */,
10741080
D3AB32D8227D983E00DCE794 /* CaptchaClient.swift in Sources */,
1075-
835F5D771D7E6808004D1A0E /* Engine.swift in Sources */,
10761081
835F5D761D7E6808004D1A0E /* User.swift in Sources */,
10771082
D34F1BB92268263000251BC8 /* IMLocalStorage.swift in Sources */,
10781083
D393EDBE21D38206001CBB2B /* IMMessage.swift in Sources */,
10791084
114E1E772151FFB600DA7DB0 /* File.swift in Sources */,
10801085
11D9C0FA216DF63B00A620B7 /* Error.swift in Sources */,
1086+
D363342022CD9EC300995DC1 /* Engine.swift in Sources */,
10811087
835F5D701D7E6808004D1A0E /* Null.swift in Sources */,
10821088
11D9C101216DFB2D00A620B7 /* MD5.swift in Sources */,
10831089
835F5D6E1D7E6808004D1A0E /* Dictionary.swift in Sources */,
@@ -1104,6 +1110,7 @@
11041110
113D23D121901A71006B53EC /* RTMRouter.swift in Sources */,
11051111
835F5D831D7E6808004D1A0E /* HTTPClient.swift in Sources */,
11061112
119D16AF219A7FCE0023BFEF /* IMClient.swift in Sources */,
1113+
D39C50A822D4683C00CFCB43 /* Push.swift in Sources */,
11071114
835F5D801D7E6808004D1A0E /* Query.swift in Sources */,
11081115
D324CD9221774A9B003FA35F /* RTMConnection.swift in Sources */,
11091116
11D9C0FB216DF63B00A620B7 /* Application.swift in Sources */,
@@ -1130,10 +1137,11 @@
11301137
8352B5231D2BAAE600531785 /* LCRelationTestCase.swift in Sources */,
11311138
D3665C3721FEAAC1005B44B0 /* IMMessageTestCase.swift in Sources */,
11321139
83D0DE6F1CC7B3FF00FC204E /* LCQueryTestCase.swift in Sources */,
1140+
D363343622CDB0D300995DC1 /* LCEngineTestCase.swift in Sources */,
11331141
114E1E852153A3ED00DA7DB0 /* LCFileTestCase.swift in Sources */,
1142+
D39C50AA22D47BA700CFCB43 /* LCPushTestCase.swift in Sources */,
11341143
83BC11D61CDD76E900D7E7A6 /* LCACLTestCase.swift in Sources */,
11351144
1178D10F213F7B9600429131 /* LCAPITestCase.swift in Sources */,
1136-
8334561C1CE589E500D42725 /* LCEngineTestCase.swift in Sources */,
11371145
D3AC7BA821AE9C1A00C6C557 /* IMClientTestCase.swift in Sources */,
11381146
D3FE04522277EA6C0008C88A /* IMLocalStorageTestCase.swift in Sources */,
11391147
116A682621427442004141A5 /* LCRouterTestCase.swift in Sources */,

LeanCloudTests/BaseTestCase.swift

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,14 @@
77
//
88

99
import XCTest
10-
import LeanCloud
10+
@testable import LeanCloud
1111

1212
class BaseTestCase: XCTestCase {
1313

1414
static let timeout: TimeInterval = 60.0
1515

1616
let timeout: TimeInterval = 60.0
1717

18-
static var masterKey: String {
19-
if LCApplication.default.id == "S5vDI3IeCk1NLLiM1aFg3262-gzGzoHsz" {
20-
return "Q26gTodbyi1Ki7lM9vtncF6U,master"
21-
} else {
22-
XCTFail("default Application ID changed")
23-
return ""
24-
}
25-
}
26-
2718
override func setUp() {
2819
super.setUp()
2920

@@ -91,3 +82,23 @@ class BaseTestCase: XCTestCase {
9182
}
9283

9384
}
85+
86+
extension LCApplication {
87+
88+
var masterKey: String {
89+
switch self.id {
90+
case "S5vDI3IeCk1NLLiM1aFg3262-gzGzoHsz":
91+
return "Q26gTodbyi1Ki7lM9vtncF6U,master"
92+
default:
93+
fatalError()
94+
}
95+
}
96+
97+
var v2router: HTTPRouter {
98+
return HTTPRouter(
99+
application: self,
100+
configuration: HTTPRouter.Configuration(apiVersion: "1.2")
101+
)
102+
}
103+
104+
}

LeanCloudTests/IMClientTestCase.swift

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,22 @@ import XCTest
1111

1212
class IMClientTestCase: RTMBaseTestCase {
1313

14+
func testInitWithUser() {
15+
let user = LCUser()
16+
user.username = UUID().uuidString.lcString
17+
user.password = UUID().uuidString.lcString
18+
19+
XCTAssertTrue(user.signUp().isSuccess)
20+
21+
do {
22+
let client = try IMClient(user: user)
23+
XCTAssertNotNil(client.user)
24+
XCTAssertEqual(client.ID, user.objectId?.stringValue)
25+
} catch {
26+
XCTFail("\(error)")
27+
}
28+
}
29+
1430
func testDeinit() {
1531
do {
1632
let invalidID: String = Array<String>.init(repeating: "a", count: 65).joined()
@@ -484,6 +500,30 @@ class IMClientTestCase: RTMBaseTestCase {
484500

485501
XCTAssertEqual(client.convCollection.count, 2)
486502
}
503+
504+
func testInitWithUserAndOpenWithSignature() {
505+
let user = LCUser()
506+
user.username = UUID().uuidString.lcString
507+
user.password = UUID().uuidString.lcString
508+
509+
XCTAssertTrue(user.signUp().isSuccess)
510+
511+
if let sessionToken = user.sessionToken?.stringValue {
512+
513+
let signatureDelegator = SignatureDelegator()
514+
signatureDelegator.sessionToken = sessionToken
515+
516+
let client = try! IMClient(user: user, signatureDelegate: signatureDelegator)
517+
518+
expecting { (exp) in
519+
client.open(completion: { (result) in
520+
XCTAssertTrue(result.isSuccess)
521+
XCTAssertNil(result.error)
522+
exp.fulfill()
523+
})
524+
}
525+
}
526+
}
487527

488528
}
489529

@@ -519,4 +559,41 @@ extension IMClientTestCase {
519559
}
520560
}
521561

562+
class SignatureDelegator: IMSignatureDelegate {
563+
564+
var sessionToken: String?
565+
566+
func client(_ client: IMClient, action: IMSignature.Action, signatureHandler: @escaping (IMClient, IMSignature?) -> Void) {
567+
XCTAssertTrue(Thread.isMainThread)
568+
switch action {
569+
case .open:
570+
guard let sessionToken = self.sessionToken else {
571+
break
572+
}
573+
574+
let application = client.application
575+
let httpClient: HTTPClient = application.httpClient
576+
let url = application.v2router.route(path: "rtm/clients/sign", module: .api)!
577+
let parameters: [String: Any] = ["session_token": sessionToken]
578+
579+
let _ = httpClient.request(url: url, method: .get, parameters: parameters) { (response) in
580+
guard
581+
let value = response.value as? [String: Any],
582+
let client_id = value["client_id"] as? String,
583+
client_id == client.ID,
584+
let signature = value["signature"] as? String,
585+
let timestamp = value["timestamp"] as? Int64,
586+
let nonce = value["nonce"] as? String else
587+
{
588+
return
589+
}
590+
signatureHandler(client, IMSignature(signature: signature, timestamp: timestamp, nonce: nonce))
591+
}
592+
default:
593+
break
594+
}
595+
}
596+
597+
}
598+
522599
}

0 commit comments

Comments
 (0)