239
+		05DFDC01228BE80000F4A7F7 /* libWeChatSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0572B2BF21E2FB3D00EAD2A2 /* libWeChatSDK.a */; };
240
+		05DFDC02228BE81400F4A7F7 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505AD0421DF109E00404071 /* libz.tbd */; };
241
+		05DFDC03228BE81C00F4A7F7 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505AD0221DF108300404071 /* CFNetwork.framework */; };
242
+		05DFDC04228BE82800F4A7F7 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFA21DF106000404071 /* libsqlite3.0.tbd */; };
243
+		05DFDC05228BE83500F4A7F7 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505AD0021DF107D00404071 /* CoreTelephony.framework */; };
244
+		05DFDC06228BE83A00F4A7F7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFE21DF107600404071 /* Security.framework */; };
245
+		05DFDC07228BE84700F4A7F7 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFC21DF106E00404071 /* libc++.tbd */; };
246
+		05DFDC08228BE8C600F4A7F7 /* RxDataSources.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBEB228BE53100F4A7F7 /* RxDataSources.framework */; };
254 247
 		05E80E3021DF65D5006368C4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 05E80E2F21DF65D4006368C4 /* Assets.xcassets */; };
255 248
 		05ED11C52251A90000FF3758 /* PhotoPurchaseRemoteAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05ED11C42251A90000FF3758 /* PhotoPurchaseRemoteAPI.swift */; };
256 249
 		05ED11C72252165700FF3758 /* Notification+wxPay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05ED11C62252165700FF3758 /* Notification+wxPay.swift */; };
@@ -302,26 +295,25 @@
302 295
 			dstPath = "";
303 296
 			dstSubfolderSpec = 10;
304 297
 			files = (
305
-				050D719E22531BBF0076CE06 /* Differentiator.framework in Embed Frameworks */,
306
-				050D719D22531BA60076CE06 /* SQLite.framework in Embed Frameworks */,
307
-				050D719B22531B860076CE06 /* RxSwift.framework in Embed Frameworks */,
308
-				050D719922531B780076CE06 /* RxCocoa.framework in Embed Frameworks */,
309
-				050D719722531B650076CE06 /* PullToRefresh.framework in Embed Frameworks */,
310
-				050D719522531B520076CE06 /* ObjectMapper.framework in Embed Frameworks */,
311
-				050D719022531B180076CE06 /* Kingfisher.framework in Embed Frameworks */,
312
-				050D719222531B360076CE06 /* Alamofire.framework in Embed Frameworks */,
313
-				050D718E22531AF40076CE06 /* RxDataSources.framework in Embed Frameworks */,
314
-				050D7184225317AD0076CE06 /* PaiaiDataKit.framework in Embed Frameworks */,
298
+				05B87D4F228E900A0098FE87 /* PaiaiDataKit.framework in Embed Frameworks */,
315 299
 				050D7188225317AD0076CE06 /* Paiai_iOS.framework in Embed Frameworks */,
316 300
 				050D7182225317AD0076CE06 /* PaiaiUIKit.framework in Embed Frameworks */,
317 301
 			);
318 302
 			name = "Embed Frameworks";
319 303
 			runOnlyForDeploymentPostprocessing = 0;
320 304
 		};
305
+		05B87D5B228E94260098FE87 /* CopyFiles */ = {
306
+			isa = PBXCopyFilesBuildPhase;
307
+			buildActionMask = 2147483647;
308
+			dstPath = "";
309
+			dstSubfolderSpec = 10;
310
+			files = (
311
+			);
312
+			runOnlyForDeploymentPostprocessing = 0;
313
+		};
321 314
 /* End PBXCopyFilesBuildPhase section */
322 315
 
323 316
 /* Begin PBXFileReference section */
324
-		045F01541DED33DC00B80C87 /* Paiai.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Paiai.entitlements; sourceTree = "<group>"; };
325 317
 		0500C26421E8644E009A7013 /* NavigationBackViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBackViewController.swift; sourceTree = "<group>"; };
326 318
 		0505ACF821DF104500404071 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
327 319
 		0505ACFA21DF106000404071 /* libsqlite3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; };
@@ -334,15 +326,6 @@
334 326
 		0505B34F1F7E4B9A009E4ED2 /* NetworkApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkApi.swift; sourceTree = "<group>"; };
335 327
 		0506441E1F8D09C00035857E /* StatusModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusModel.swift; sourceTree = "<group>"; };
336 328
 		05087F6721B8F9530024A117 /* ContainerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContainerViewController.swift; sourceTree = "<group>"; };
337
-		050D718D22531AF40076CE06 /* RxDataSources.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxDataSources.framework; path = Carthage/Build/iOS/RxDataSources.framework; sourceTree = "<group>"; };
338
-		050D718F22531B180076CE06 /* Kingfisher.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kingfisher.framework; path = Carthage/Build/iOS/Kingfisher.framework; sourceTree = "<group>"; };
339
-		050D719122531B360076CE06 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Alamofire.framework; path = Carthage/Build/iOS/Alamofire.framework; sourceTree = "<group>"; };
340
-		050D719322531B440076CE06 /* Kingfisher.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kingfisher.framework; path = Carthage/Build/iOS/Kingfisher.framework; sourceTree = "<group>"; };
341
-		050D719422531B520076CE06 /* ObjectMapper.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ObjectMapper.framework; path = Carthage/Build/iOS/ObjectMapper.framework; sourceTree = "<group>"; };
342
-		050D719622531B650076CE06 /* PullToRefresh.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PullToRefresh.framework; path = Carthage/Build/iOS/PullToRefresh.framework; sourceTree = "<group>"; };
343
-		050D719822531B780076CE06 /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxCocoa.framework; path = Carthage/Build/iOS/RxCocoa.framework; sourceTree = "<group>"; };
344
-		050D719A22531B860076CE06 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = Carthage/Build/iOS/RxSwift.framework; sourceTree = "<group>"; };
345
-		050D719C22531BA60076CE06 /* SQLite.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SQLite.framework; path = Carthage/Build/iOS/SQLite.framework; sourceTree = "<group>"; };
346 329
 		050E210F21B8CE8A008E1352 /* AppCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinator.swift; sourceTree = "<group>"; };
347 330
 		050E211121B8F2D4008E1352 /* HomeCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCoordinator.swift; sourceTree = "<group>"; };
348 331
 		050E211321B8F39C008E1352 /* MineCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MineCoordinator.swift; sourceTree = "<group>"; };
@@ -372,17 +355,7 @@
372 355
 		05130FB421C9E7CE004EF1BE /* MessageItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageItem.swift; sourceTree = "<group>"; };
373 356
 		05130FB621C9E80F004EF1BE /* MessageListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageListItem.swift; sourceTree = "<group>"; };
374 357
 		05130FBB21C9F707004EF1BE /* Cartfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cartfile; sourceTree = "<group>"; };
375
-		05130FBD21CA194B004EF1BE /* Differentiator.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Differentiator.framework; path = Carthage/Build/iOS/Differentiator.framework; sourceTree = "<group>"; };
376
-		05130FC221CA1997004EF1BE /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxCocoa.framework; path = Carthage/Build/iOS/RxCocoa.framework; sourceTree = "<group>"; };
377
-		05130FC321CA1997004EF1BE /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = Carthage/Build/iOS/RxSwift.framework; sourceTree = "<group>"; };
378
-		05130FC421CA1997004EF1BE /* RxDataSources.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxDataSources.framework; path = Carthage/Build/iOS/RxDataSources.framework; sourceTree = "<group>"; };
379
-		05130FC521CA1997004EF1BE /* RxBlocking.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxBlocking.framework; path = Carthage/Build/iOS/RxBlocking.framework; sourceTree = "<group>"; };
380
-		05130FC621CA1997004EF1BE /* RxAtomic.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxAtomic.framework; path = Carthage/Build/iOS/RxAtomic.framework; sourceTree = "<group>"; };
381
-		05130FC721CA1997004EF1BE /* RxTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxTest.framework; path = Carthage/Build/iOS/RxTest.framework; sourceTree = "<group>"; };
382
-		05130FC821CA1997004EF1BE /* SQLite.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SQLite.framework; path = Carthage/Build/iOS/SQLite.framework; sourceTree = "<group>"; };
383
-		05130FC921CA1997004EF1BE /* ObjectMapper.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ObjectMapper.framework; path = Carthage/Build/iOS/ObjectMapper.framework; sourceTree = "<group>"; };
384 358
 		0513105F21CA1E53004EF1BE /* UIStoryboardExt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIStoryboardExt.swift; sourceTree = "<group>"; };
385
-		0513106121CA22B5004EF1BE /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Alamofire.framework; path = Carthage/Build/iOS/Alamofire.framework; sourceTree = "<group>"; };
386 359
 		0513106821CA34D6004EF1BE /* GroupDetailCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupDetailCoordinator.swift; sourceTree = "<group>"; };
387 360
 		0513106A21CA3545004EF1BE /* PhotoDetailCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoDetailCoordinator.swift; sourceTree = "<group>"; };
388 361
 		0513107221CA3907004EF1BE /* ActionSheetView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionSheetView.swift; sourceTree = "<group>"; };
@@ -395,13 +368,11 @@
395 368
 		0513109021CA3915004EF1BE /* NotificationExt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationExt.swift; sourceTree = "<group>"; };
396 369
 		0513109121CA3915004EF1BE /* QRCodeScanView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRCodeScanView.swift; sourceTree = "<group>"; };
397 370
 		0513109221CA3915004EF1BE /* QRCodeConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRCodeConfiguration.swift; sourceTree = "<group>"; };
398
-		051310B321CB5EC3004EF1BE /* Kingfisher.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kingfisher.framework; path = Carthage/Build/iOS/Kingfisher.framework; sourceTree = "<group>"; };
399 371
 		051310B721CB6958004EF1BE /* UserInfoStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoStore.swift; sourceTree = "<group>"; };
400 372
 		051310BF21CB6EF4004EF1BE /* UserInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfo.swift; sourceTree = "<group>"; };
401 373
 		051FA6682276FA4300A5ECC2 /* BaseCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseCoordinator.swift; sourceTree = "<group>"; };
402 374
 		051FA66B2277F03700A5ECC2 /* LoginCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginCoordinator.swift; sourceTree = "<group>"; };
403 375
 		0521145321F083F20047C55A /* ToastView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ToastView.swift; sourceTree = "<group>"; };
404
-		052BF1C721E344020010D270 /* PullToRefresh.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PullToRefresh.framework; path = Carthage/Build/iOS/PullToRefresh.framework; sourceTree = "<group>"; };
405 376
 		0530951A221AB3EC00408D34 /* GroupDetailMemeberView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupDetailMemeberView.swift; sourceTree = "<group>"; };
406 377
 		0535D6D821D32A89008D9403 /* WXUserInfoRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WXUserInfoRemoteAPI.swift; sourceTree = "<group>"; };
407 378
 		0535D6DA21D32A9E008D9403 /* GuestUserInfoRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuestUserInfoRemoteAPI.swift; sourceTree = "<group>"; };
@@ -484,6 +455,8 @@
484 455
 		05B2C62A21D750F1008063B3 /* FeedbackRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbackRemoteAPI.swift; sourceTree = "<group>"; };
485 456
 		05B2C62E21D754BD008063B3 /* GroupDetailRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupDetailRemoteAPI.swift; sourceTree = "<group>"; };
486 457
 		05B2C63021D75A1B008063B3 /* ContentResource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentResource.swift; sourceTree = "<group>"; };
458
+		05B87D6C228E9F140098FE87 /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxRelay.framework; path = Carthage/Build/iOS/RxRelay.framework; sourceTree = "<group>"; };
459
+		05B87D6E228EA2820098FE87 /* Differentiator.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Differentiator.framework; path = Carthage/Build/iOS/Differentiator.framework; sourceTree = "<group>"; };
487 460
 		05C0CEF821F8567C00993DE2 /* AlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertView.swift; sourceTree = "<group>"; };
488 461
 		05C0CEFA21F85A7700993DE2 /* ActionSheetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionSheetController.swift; sourceTree = "<group>"; };
489 462
 		05C0D98D21D22119000B7B2A /* PhotoThumbupUserItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoThumbupUserItem.swift; sourceTree = "<group>"; };
@@ -508,6 +481,13 @@
508 481
 		05D3A3C521FF010900A29A20 /* WebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = "<group>"; };
509 482
 		05D3A3CC22000C3900A29A20 /* GroupCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupCoordinator.swift; sourceTree = "<group>"; };
510 483
 		05D3A3CF2200288400A29A20 /* Storyboarded.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Storyboarded.swift; sourceTree = "<group>"; };
484
+		05DFDBEB228BE53100F4A7F7 /* RxDataSources.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxDataSources.framework; path = Carthage/Build/iOS/RxDataSources.framework; sourceTree = "<group>"; };
485
+		05DFDBEC228BE53100F4A7F7 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Alamofire.framework; path = Carthage/Build/iOS/Alamofire.framework; sourceTree = "<group>"; };
486
+		05DFDBED228BE53100F4A7F7 /* Kingfisher.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kingfisher.framework; path = Carthage/Build/iOS/Kingfisher.framework; sourceTree = "<group>"; };
487
+		05DFDBEE228BE53100F4A7F7 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = Carthage/Build/iOS/RxSwift.framework; sourceTree = "<group>"; };
488
+		05DFDBEF228BE53100F4A7F7 /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxCocoa.framework; path = Carthage/Build/iOS/RxCocoa.framework; sourceTree = "<group>"; };
489
+		05DFDBF0228BE53100F4A7F7 /* PullToRefresh.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PullToRefresh.framework; path = Carthage/Build/iOS/PullToRefresh.framework; sourceTree = "<group>"; };
490
+		05DFDBF1228BE53200F4A7F7 /* ObjectMapper.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ObjectMapper.framework; path = Carthage/Build/iOS/ObjectMapper.framework; sourceTree = "<group>"; };
511 491
 		05E80E2F21DF65D4006368C4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
512 492
 		05ED11C42251A90000FF3758 /* PhotoPurchaseRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoPurchaseRemoteAPI.swift; sourceTree = "<group>"; };
513 493
 		05ED11C62252165700FF3758 /* Notification+wxPay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Notification+wxPay.swift"; sourceTree = "<group>"; };
@@ -574,20 +554,20 @@
574 554
 			isa = PBXFrameworksBuildPhase;
575 555
 			buildActionMask = 2147483647;
576 556
 			files = (
577
-				0505AD0521DF109E00404071 /* libz.tbd in Frameworks */,
578
-				0505AD0321DF108300404071 /* CFNetwork.framework in Frameworks */,
579
-				0505AD0121DF107D00404071 /* CoreTelephony.framework in Frameworks */,
580
-				0505ACFF21DF107600404071 /* Security.framework in Frameworks */,
581
-				0505ACFD21DF106F00404071 /* libc++.tbd in Frameworks */,
582
-				0505ACFB21DF106000404071 /* libsqlite3.0.tbd in Frameworks */,
583
-				0505ACF921DF104500404071 /* SystemConfiguration.framework in Frameworks */,
584
-				0513104C21CA1BAD004EF1BE /* SQLite.framework in Frameworks */,
585
-				0513104A21CA1BAD004EF1BE /* RxSwift.framework in Frameworks */,
586
-				0513104821CA1BAD004EF1BE /* RxCocoa.framework in Frameworks */,
587
-				0513106221CA22B6004EF1BE /* Alamofire.framework in Frameworks */,
588
-				0513104521CA1BAD004EF1BE /* ObjectMapper.framework in Frameworks */,
589
-				0513104921CA1BAD004EF1BE /* RxDataSources.framework in Frameworks */,
590
-				0572B2C621E2FB3E00EAD2A2 /* libWeChatSDK.a in Frameworks */,
557
+				05DFDC06228BE83A00F4A7F7 /* Security.framework in Frameworks */,
558
+				05BEBE62228E87C300541855 /* SystemConfiguration.framework in Frameworks */,
559
+				05DFDBFD228BE7CA00F4A7F7 /* Alamofire.framework in Frameworks */,
560
+				05BEBE60228E87B300541855 /* RxCocoa.framework in Frameworks */,
561
+				05DFDBFE228BE7CC00F4A7F7 /* Kingfisher.framework in Frameworks */,
562
+				05DFDBFF228BE7CE00F4A7F7 /* ObjectMapper.framework in Frameworks */,
563
+				05DFDC00228BE7E400F4A7F7 /* RxSwift.framework in Frameworks */,
564
+				05DFDC01228BE80000F4A7F7 /* libWeChatSDK.a in Frameworks */,
565
+				05DFDC02228BE81400F4A7F7 /* libz.tbd in Frameworks */,
566
+				05DFDC03228BE81C00F4A7F7 /* CFNetwork.framework in Frameworks */,
567
+				05DFDC04228BE82800F4A7F7 /* libsqlite3.0.tbd in Frameworks */,
568
+				05DFDC05228BE83500F4A7F7 /* CoreTelephony.framework in Frameworks */,
569
+				05DFDC07228BE84700F4A7F7 /* libc++.tbd in Frameworks */,
570
+				05DFDC08228BE8C600F4A7F7 /* RxDataSources.framework in Frameworks */,
591 571
 			);
592 572
 			runOnlyForDeploymentPostprocessing = 0;
593 573
 		};
@@ -595,13 +575,12 @@
595 575
 			isa = PBXFrameworksBuildPhase;
596 576
 			buildActionMask = 2147483647;
597 577
 			files = (
598
-				052BF1C921E344280010D270 /* PullToRefresh.framework in Frameworks */,
599 578
 				0513105E21CA1D95004EF1BE /* PaiaiUIKit.framework in Frameworks */,
600 579
 				0513105D21CA1D95004EF1BE /* PaiaiDataKit.framework in Frameworks */,
601
-				0513105021CA1BED004EF1BE /* RxSwift.framework in Frameworks */,
602
-				0513104E21CA1BED004EF1BE /* RxCocoa.framework in Frameworks */,
603
-				051310B521CB5EDD004EF1BE /* Kingfisher.framework in Frameworks */,
604
-				0513104F21CA1BED004EF1BE /* RxDataSources.framework in Frameworks */,
580
+				05DFDBF9228BE7A200F4A7F7 /* PullToRefresh.framework in Frameworks */,
581
+				05DFDBFA228BE7A700F4A7F7 /* RxCocoa.framework in Frameworks */,
582
+				05DFDBFB228BE7AA00F4A7F7 /* RxDataSources.framework in Frameworks */,
583
+				05DFDBFC228BE7AE00F4A7F7 /* RxSwift.framework in Frameworks */,
605 584
 			);
606 585
 			runOnlyForDeploymentPostprocessing = 0;
607 586
 		};
@@ -609,23 +588,25 @@
609 588
 			isa = PBXFrameworksBuildPhase;
610 589
 			buildActionMask = 2147483647;
611 590
 			files = (
612
-				050D717E2253162C0076CE06 /* RxDataSources.framework in Frameworks */,
591
+				05B87D6F228EA2820098FE87 /* Differentiator.framework in Frameworks */,
592
+				05B87D6D228E9F140098FE87 /* RxRelay.framework in Frameworks */,
613 593
 				0505AD0D21DF34E100404071 /* CoreTelephony.framework in Frameworks */,
594
+				05B87D64228E94F00098FE87 /* RxSwift.framework in Frameworks */,
614 595
 				0505AD0C21DF34B600404071 /* libsqlite3.0.tbd in Frameworks */,
596
+				05BEBE63228E87C700541855 /* SystemConfiguration.framework in Frameworks */,
597
+				05B87D5F228E94AA0098FE87 /* Kingfisher.framework in Frameworks */,
615 598
 				0505AD0B21DF348F00404071 /* libc++.tbd in Frameworks */,
599
+				05B87D60228E94AC0098FE87 /* ObjectMapper.framework in Frameworks */,
616 600
 				0505AD0A21DF347400404071 /* CFNetwork.framework in Frameworks */,
617 601
 				050D7187225317AD0076CE06 /* Paiai_iOS.framework in Frameworks */,
602
+				05B87D61228E94E90098FE87 /* PullToRefresh.framework in Frameworks */,
603
+				05B87D5E228E94A70098FE87 /* Alamofire.framework in Frameworks */,
618 604
 				0505AD0921DF345E00404071 /* Security.framework in Frameworks */,
605
+				05B87D62228E94EB0098FE87 /* RxCocoa.framework in Frameworks */,
619 606
 				0505AD0621DF342F00404071 /* libz.tbd in Frameworks */,
620 607
 				050D7181225317AD0076CE06 /* PaiaiUIKit.framework in Frameworks */,
608
+				05B87D63228E94EE0098FE87 /* RxDataSources.framework in Frameworks */,
621 609
 				050D7183225317AD0076CE06 /* PaiaiDataKit.framework in Frameworks */,
622
-				051310B421CB5EC3004EF1BE /* Kingfisher.framework in Frameworks */,
623
-				052BF1C821E344020010D270 /* PullToRefresh.framework in Frameworks */,
624
-				0513109C21CA4103004EF1BE /* Alamofire.framework in Frameworks */,
625
-				0513109F21CA4103004EF1BE /* ObjectMapper.framework in Frameworks */,
626
-				051310A221CA4103004EF1BE /* RxCocoa.framework in Frameworks */,
627
-				051310A421CA4103004EF1BE /* RxSwift.framework in Frameworks */,
628
-				051310A621CA4103004EF1BE /* SQLite.framework in Frameworks */,
629 610
 			);
630 611
 			runOnlyForDeploymentPostprocessing = 0;
631 612
 		};
@@ -1260,15 +1241,6 @@
1260 1241
 		6CEBD0F61CA8D680004DBDE0 = {
1261 1242
 			isa = PBXGroup;
1262 1243
 			children = (
1263
-				050D719A22531B860076CE06 /* RxSwift.framework */,
1264
-				050D719C22531BA60076CE06 /* SQLite.framework */,
1265
-				050D719822531B780076CE06 /* RxCocoa.framework */,
1266
-				050D719622531B650076CE06 /* PullToRefresh.framework */,
1267
-				050D719422531B520076CE06 /* ObjectMapper.framework */,
1268
-				050D719322531B440076CE06 /* Kingfisher.framework */,
1269
-				050D719122531B360076CE06 /* Alamofire.framework */,
1270
-				050D718F22531B180076CE06 /* Kingfisher.framework */,
1271
-				050D718D22531AF40076CE06 /* RxDataSources.framework */,
1272 1244
 				05130FBB21C9F707004EF1BE /* Cartfile */,
1273 1245
 				3864C06C1CAD27EC0048ADAD /* Swift-bridge.h */,
1274 1246
 				6CEBD1011CA8D680004DBDE0 /* Paiai */,
@@ -1295,7 +1267,6 @@
1295 1267
 		6CEBD1011CA8D680004DBDE0 /* Paiai */ = {
1296 1268
 			isa = PBXGroup;
1297 1269
 			children = (
1298
-				045F01541DED33DC00B80C87 /* Paiai.entitlements */,
1299 1270
 				6CEBD1021CA8D680004DBDE0 /* AppDelegate.swift */,
1300 1271
 				6CEBD10E1CA8D680004DBDE0 /* Info.plist */,
1301 1272
 				A69FFB8C1E7018CC0006FEE0 /* LaunchScreen.storyboard */,
@@ -1308,7 +1279,15 @@
1308 1279
 		7737858CEE753530C312F2CB /* Frameworks */ = {
1309 1280
 			isa = PBXGroup;
1310 1281
 			children = (
1311
-				052BF1C721E344020010D270 /* PullToRefresh.framework */,
1282
+				05B87D6E228EA2820098FE87 /* Differentiator.framework */,
1283
+				05B87D6C228E9F140098FE87 /* RxRelay.framework */,
1284
+				05DFDBEC228BE53100F4A7F7 /* Alamofire.framework */,
1285
+				05DFDBED228BE53100F4A7F7 /* Kingfisher.framework */,
1286
+				05DFDBF1228BE53200F4A7F7 /* ObjectMapper.framework */,
1287
+				05DFDBF0228BE53100F4A7F7 /* PullToRefresh.framework */,
1288
+				05DFDBEF228BE53100F4A7F7 /* RxCocoa.framework */,
1289
+				05DFDBEB228BE53100F4A7F7 /* RxDataSources.framework */,
1290
+				05DFDBEE228BE53100F4A7F7 /* RxSwift.framework */,
1312 1291
 				0505AD0421DF109E00404071 /* libz.tbd */,
1313 1292
 				0505AD0221DF108300404071 /* CFNetwork.framework */,
1314 1293
 				0505AD0021DF107D00404071 /* CoreTelephony.framework */,
@@ -1316,17 +1295,6 @@
1316 1295
 				0505ACFC21DF106E00404071 /* libc++.tbd */,
1317 1296
 				0505ACFA21DF106000404071 /* libsqlite3.0.tbd */,
1318 1297
 				0505ACF821DF104500404071 /* SystemConfiguration.framework */,
1319
-				051310B321CB5EC3004EF1BE /* Kingfisher.framework */,
1320
-				0513106121CA22B5004EF1BE /* Alamofire.framework */,
1321
-				05130FC921CA1997004EF1BE /* ObjectMapper.framework */,
1322
-				05130FC621CA1997004EF1BE /* RxAtomic.framework */,
1323
-				05130FC521CA1997004EF1BE /* RxBlocking.framework */,
1324
-				05130FC221CA1997004EF1BE /* RxCocoa.framework */,
1325
-				05130FC421CA1997004EF1BE /* RxDataSources.framework */,
1326
-				05130FC321CA1997004EF1BE /* RxSwift.framework */,
1327
-				05130FC721CA1997004EF1BE /* RxTest.framework */,
1328
-				05130FC821CA1997004EF1BE /* SQLite.framework */,
1329
-				05130FBD21CA194B004EF1BE /* Differentiator.framework */,
1330 1298
 			);
1331 1299
 			name = Frameworks;
1332 1300
 			sourceTree = "<group>";
@@ -1427,6 +1395,7 @@
1427 1395
 				05130F8A21C9E5E8004EF1BE /* Sources */,
1428 1396
 				05130F8B21C9E5E8004EF1BE /* Frameworks */,
1429 1397
 				05130F8C21C9E5E8004EF1BE /* Resources */,
1398
+				05B87D5B228E94260098FE87 /* CopyFiles */,
1430 1399
 			);
1431 1400
 			buildRules = (
1432 1401
 			);
@@ -1497,7 +1466,7 @@
1497 1466
 								enabled = 0;
1498 1467
 							};
1499 1468
 							com.apple.Keychain = {
1500
-								enabled = 1;
1469
+								enabled = 0;
1501 1470
 							};
1502 1471
 							com.apple.Maps.iOS = {
1503 1472
 								enabled = 0;
@@ -1564,6 +1533,7 @@
1564 1533
 			buildActionMask = 2147483647;
1565 1534
 			files = (
1566 1535
 				05E80E3021DF65D5006368C4 /* Assets.xcassets in Resources */,
1536
+				05BEBE3E228E51D800541855 /* LaunchScreen.storyboard in Resources */,
1567 1537
 			);
1568 1538
 			runOnlyForDeploymentPostprocessing = 0;
1569 1539
 		};
@@ -1575,8 +1545,9 @@
1575 1545
 			buildActionMask = 12;
1576 1546
 			files = (
1577 1547
 			);
1548
+			inputFileListPaths = (
1549
+			);
1578 1550
 			inputPaths = (
1579
-				"$(SRCROOT)/Carthage/Build/iOS/SQLite.framework",
1580 1551
 				"$(SRCROOT)/Carthage/Build/iOS/RxCocoa.framework",
1581 1552
 				"$(SRCROOT)/Carthage/Build/iOS/RxSwift.framework",
1582 1553
 				"$(SRCROOT)/Carthage/Build/iOS/RxDataSources.framework",
@@ -1584,21 +1555,24 @@
1584 1555
 				"$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework",
1585 1556
 				"$(SRCROOT)/Carthage/Build/iOS/Kingfisher.framework",
1586 1557
 				"$(SRCROOT)/Carthage/Build/iOS/PullToRefresh.framework",
1558
+				"$(SRCROOT)/Carthage/Build/iOS/Differentiator.framework",
1559
+				"$(SRCROOT)/Carthage/Build/iOS/RxRelay.framework",
1587 1560
 			);
1588 1561
 			name = "Run Script";
1589 1562
 			outputPaths = (
1590
-				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SQLite.framework",
1591
-				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxCocoa.framework",
1592 1563
 				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxSwift.framework",
1593 1564
 				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxDataSources.framework",
1594 1565
 				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ObjectMapper.framework",
1595 1566
 				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Alamofire.framework",
1596 1567
 				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Kingfisher.framework",
1597 1568
 				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/PullToRefresh.framework",
1569
+				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxCocoa.framework",
1570
+				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Differentiator.framework",
1571
+				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxRelay.framework",
1598 1572
 			);
1599 1573
 			runOnlyForDeploymentPostprocessing = 0;
1600 1574
 			shellPath = /bin/sh;
1601
-			shellScript = "/usr/local/bin/carthage copy-frameworks\n";
1575
+			shellScript = "/usr/local/bin/carthage copy-frameworks\n\n#!/usr/bin/env bash\n\nAPP_PATH=\"${TARGET_BUILD_DIR}/${WRAPPER_NAME}\"\n\n# This script loops through the frameworks embedded in the application and\n# removes unused architectures.\nfind \"$APP_PATH\" -name '*.framework' -type d | while read -r FRAMEWORK\ndo\nFRAMEWORK_EXECUTABLE_NAME=$(defaults read \"$FRAMEWORK/Info.plist\" CFBundleExecutable)\nFRAMEWORK_EXECUTABLE_PATH=\"$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME\"\n\nif [ ! -f \"${FRAMEWORK_EXECUTABLE_PATH}\" ]; then\ncontinue\nfi\n\nif xcrun lipo -info \"${FRAMEWORK_EXECUTABLE_PATH}\" | grep --silent \"Non-fat\"; then\necho \"Framework non-fat, skipping: $FRAMEWORK_EXECUTABLE_NAME\"\ncontinue\nfi\n\necho \"Thinning framework $FRAMEWORK_EXECUTABLE_NAME\"\n\nEXTRACTED_ARCHS=()\n\nfor ARCH in $ARCHS\ndo\necho \"Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME\"\nxcrun lipo -extract \"$ARCH\" \"$FRAMEWORK_EXECUTABLE_PATH\" -o \"$FRAMEWORK_EXECUTABLE_PATH-$ARCH\"\nEXTRACTED_ARCHS+=(\"$FRAMEWORK_EXECUTABLE_PATH-$ARCH\")\ndone\n\necho \"Merging extracted architectures: ${ARCHS}\"\nxcrun lipo -o \"$FRAMEWORK_EXECUTABLE_PATH-merged\" -create \"${EXTRACTED_ARCHS[@]}\"\nrm \"${EXTRACTED_ARCHS[@]}\"\n\necho \"Replacing original executable with thinned version\"\nrm \"$FRAMEWORK_EXECUTABLE_PATH\"\nmv \"$FRAMEWORK_EXECUTABLE_PATH-merged\" \"$FRAMEWORK_EXECUTABLE_PATH\"\ndone\n";
1602 1576
 		};
1603 1577
 /* End PBXShellScriptBuildPhase section */
1604 1578
 
@@ -1912,6 +1886,10 @@
1912 1886
 				DYLIB_COMPATIBILITY_VERSION = 1;
1913 1887
 				DYLIB_CURRENT_VERSION = 1;
1914 1888
 				DYLIB_INSTALL_NAME_BASE = "@rpath";
1889
+				FRAMEWORK_SEARCH_PATHS = (
1890
+					"$(inherited)",
1891
+					"$(PROJECT_DIR)/Carthage/Build/iOS",
1892
+				);
1915 1893
 				GCC_C_LANGUAGE_STANDARD = gnu11;
1916 1894
 				INFOPLIST_FILE = PaiaiUIKit/Info.plist;
1917 1895
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -1952,7 +1930,12 @@
1952 1930
 				DYLIB_COMPATIBILITY_VERSION = 1;
1953 1931
 				DYLIB_CURRENT_VERSION = 1;
1954 1932
 				DYLIB_INSTALL_NAME_BASE = "@rpath";
1933
+				FRAMEWORK_SEARCH_PATHS = (
1934
+					"$(inherited)",
1935
+					"$(PROJECT_DIR)/Carthage/Build/iOS",
1936
+				);
1955 1937
 				GCC_C_LANGUAGE_STANDARD = gnu11;
1938
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
1956 1939
 				INFOPLIST_FILE = PaiaiUIKit/Info.plist;
1957 1940
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1958 1941
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
@@ -1967,6 +1950,7 @@
1967 1950
 				SKIP_INSTALL = YES;
1968 1951
 				SWIFT_VERSION = 5.0;
1969 1952
 				TARGETED_DEVICE_FAMILY = 1;
1953
+				VALID_ARCHS = "arm64 arm64e armv7s";
1970 1954
 				VERSIONING_SYSTEM = "apple-generic";
1971 1955
 				VERSION_INFO_PREFIX = "";
1972 1956
 			};
@@ -1994,12 +1978,14 @@
1994 1978
 				FRAMEWORK_SEARCH_PATHS = (
1995 1979
 					"$(inherited)",
1996 1980
 					"$(PROJECT_DIR)/Carthage/Build/iOS",
1981
+					"$(PROJECT_DIR)",
1997 1982
 				);
1998 1983
 				GCC_C_LANGUAGE_STANDARD = gnu11;
1999 1984
 				HEADER_SEARCH_PATHS = "";
2000 1985
 				INFOPLIST_FILE = PaiaiDataKit/Info.plist;
2001 1986
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
2002 1987
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1988
+				LD_GENERATE_MAP_FILE = YES;
2003 1989
 				LD_RUNPATH_SEARCH_PATHS = (
2004 1990
 					"$(inherited)",
2005 1991
 					"@executable_path/Frameworks",
@@ -2047,12 +2033,15 @@
2047 2033
 				FRAMEWORK_SEARCH_PATHS = (
2048 2034
 					"$(inherited)",
2049 2035
 					"$(PROJECT_DIR)/Carthage/Build/iOS",
2036
+					"$(PROJECT_DIR)",
2050 2037
 				);
2051 2038
 				GCC_C_LANGUAGE_STANDARD = gnu11;
2039
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
2052 2040
 				HEADER_SEARCH_PATHS = "";
2053 2041
 				INFOPLIST_FILE = PaiaiDataKit/Info.plist;
2054 2042
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
2055 2043
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
2044
+				LD_GENERATE_MAP_FILE = YES;
2056 2045
 				LD_RUNPATH_SEARCH_PATHS = (
2057 2046
 					"$(inherited)",
2058 2047
 					"@executable_path/Frameworks",
@@ -2069,6 +2058,7 @@
2069 2058
 				SWIFT_OBJC_BRIDGING_HEADER = "";
2070 2059
 				SWIFT_VERSION = 5.0;
2071 2060
 				TARGETED_DEVICE_FAMILY = "1,2";
2061
+				VALID_ARCHS = "arm64 arm64e armv7s";
2072 2062
 				VERSIONING_SYSTEM = "apple-generic";
2073 2063
 				VERSION_INFO_PREFIX = "";
2074 2064
 			};
@@ -2094,6 +2084,7 @@
2094 2084
 				FRAMEWORK_SEARCH_PATHS = (
2095 2085
 					"$(inherited)",
2096 2086
 					"$(PROJECT_DIR)/Carthage/Build/iOS",
2087
+					"$(PROJECT_DIR)",
2097 2088
 				);
2098 2089
 				GCC_C_LANGUAGE_STANDARD = gnu11;
2099 2090
 				INFOPLIST_FILE = Paiai_iOS/Info.plist;
@@ -2112,6 +2103,7 @@
2112 2103
 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
2113 2104
 				SWIFT_VERSION = 5.0;
2114 2105
 				TARGETED_DEVICE_FAMILY = 1;
2106
+				VALID_ARCHS = "arm64 arm64e armv7s";
2115 2107
 				VERSIONING_SYSTEM = "apple-generic";
2116 2108
 				VERSION_INFO_PREFIX = "";
2117 2109
 			};
@@ -2138,8 +2130,10 @@
2138 2130
 				FRAMEWORK_SEARCH_PATHS = (
2139 2131
 					"$(inherited)",
2140 2132
 					"$(PROJECT_DIR)/Carthage/Build/iOS",
2133
+					"$(PROJECT_DIR)",
2141 2134
 				);
2142 2135
 				GCC_C_LANGUAGE_STANDARD = gnu11;
2136
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
2143 2137
 				INFOPLIST_FILE = Paiai_iOS/Info.plist;
2144 2138
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
2145 2139
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
@@ -2154,6 +2148,7 @@
2154 2148
 				SKIP_INSTALL = YES;
2155 2149
 				SWIFT_VERSION = 5.0;
2156 2150
 				TARGETED_DEVICE_FAMILY = 1;
2151
+				VALID_ARCHS = "arm64 arm64e armv7s";
2157 2152
 				VERSIONING_SYSTEM = "apple-generic";
2158 2153
 				VERSION_INFO_PREFIX = "";
2159 2154
 			};
@@ -2209,6 +2204,7 @@
2209 2204
 				GCC_WARN_UNUSED_FUNCTION = YES;
2210 2205
 				GCC_WARN_UNUSED_VARIABLE = YES;
2211 2206
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
2207
+				LD_GENERATE_MAP_FILE = YES;
2212 2208
 				MTL_ENABLE_DEBUG_INFO = YES;
2213 2209
 				ONLY_ACTIVE_ARCH = YES;
2214 2210
 				OTHER_LDFLAGS = (
@@ -2264,6 +2260,7 @@
2264 2260
 				GCC_WARN_UNUSED_FUNCTION = YES;
2265 2261
 				GCC_WARN_UNUSED_VARIABLE = YES;
2266 2262
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
2263
+				LD_GENERATE_MAP_FILE = YES;
2267 2264
 				MTL_ENABLE_DEBUG_INFO = NO;
2268 2265
 				OTHER_LDFLAGS = (
2269 2266
 					"-Objc",
@@ -2284,17 +2281,17 @@
2284 2281
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
2285 2282
 				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
2286 2283
 				CLANG_ENABLE_MODULES = NO;
2287
-				CODE_SIGN_ENTITLEMENTS = PaiAi/PaiAi.entitlements;
2288 2284
 				CODE_SIGN_IDENTITY = "iPhone Developer";
2289 2285
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
2290 2286
 				CODE_SIGN_STYLE = Automatic;
2291 2287
 				DEFINES_MODULE = YES;
2292
-				DEVELOPMENT_TEAM = RSJ4N8U2LM;
2288
+				DEVELOPMENT_TEAM = Q38447SL4M;
2293 2289
 				ENABLE_BITCODE = NO;
2294 2290
 				FRAMEWORK_SEARCH_PATHS = (
2295 2291
 					"$(inherited)",
2296 2292
 					"$(PROJECT_DIR)/Paiai",
2297 2293
 					"$(PROJECT_DIR)/Carthage/Build/iOS",
2294
+					"$(PROJECT_DIR)",
2298 2295
 				);
2299 2296
 				GCC_PREFIX_HEADER = "";
2300 2297
 				GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
@@ -2305,6 +2302,7 @@
2305 2302
 				);
2306 2303
 				INFOPLIST_FILE = PaiAi/Info.plist;
2307 2304
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
2305
+				LD_GENERATE_MAP_FILE = YES;
2308 2306
 				LD_RUNPATH_SEARCH_PATHS = (
2309 2307
 					"$(inherited)",
2310 2308
 					"@executable_path/Frameworks",
@@ -2315,6 +2313,7 @@
2315 2313
 				);
2316 2314
 				MACH_O_TYPE = mh_execute;
2317 2315
 				ONLY_ACTIVE_ARCH = YES;
2316
+				OTHER_CODE_SIGN_FLAGS = "--deep";
2318 2317
 				OTHER_LDFLAGS = "-all_load";
2319 2318
 				OTHER_SWIFT_FLAGS = "-DDEBUG";
2320 2319
 				PRODUCT_BUNDLE_IDENTIFIER = com.PaiAi.PaiAi;
@@ -2335,18 +2334,19 @@
2335 2334
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
2336 2335
 				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
2337 2336
 				CLANG_ENABLE_MODULES = NO;
2338
-				CODE_SIGN_ENTITLEMENTS = PaiAi/PaiAi.entitlements;
2339 2337
 				CODE_SIGN_IDENTITY = "iPhone Developer";
2340 2338
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
2341 2339
 				CODE_SIGN_STYLE = Automatic;
2342 2340
 				DEBUG_INFORMATION_FORMAT = dwarf;
2343 2341
 				DEFINES_MODULE = YES;
2344
-				DEVELOPMENT_TEAM = RSJ4N8U2LM;
2342
+				DEVELOPMENT_TEAM = Q38447SL4M;
2345 2343
 				FRAMEWORK_SEARCH_PATHS = (
2346 2344
 					"$(inherited)",
2347 2345
 					"$(PROJECT_DIR)/Paiai",
2348 2346
 					"$(PROJECT_DIR)/Carthage/Build/iOS",
2347
+					"$(PROJECT_DIR)",
2349 2348
 				);
2349
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
2350 2350
 				GCC_PREFIX_HEADER = "";
2351 2351
 				HEADER_SEARCH_PATHS = (
2352 2352
 					"$(PROJECT_DIR)/Paiai/wxSDK/WXApi.h",
@@ -2355,6 +2355,7 @@
2355 2355
 				);
2356 2356
 				INFOPLIST_FILE = PaiAi/Info.plist;
2357 2357
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
2358
+				LD_GENERATE_MAP_FILE = YES;
2358 2359
 				LD_RUNPATH_SEARCH_PATHS = (
2359 2360
 					"$(inherited)",
2360 2361
 					"@executable_path/Frameworks",
@@ -2365,6 +2366,7 @@
2365 2366
 				);
2366 2367
 				MACH_O_TYPE = mh_execute;
2367 2368
 				ONLY_ACTIVE_ARCH = YES;
2369
+				OTHER_CODE_SIGN_FLAGS = "--deep";
2368 2370
 				OTHER_LDFLAGS = "-all_load";
2369 2371
 				OTHER_SWIFT_FLAGS = "";
2370 2372
 				PRODUCT_BUNDLE_IDENTIFIER = com.PaiAi.PaiAi;
@@ -2374,6 +2376,7 @@
2374 2376
 				SWIFT_OBJC_BRIDGING_HEADER = "Swift-bridge.h";
2375 2377
 				SWIFT_VERSION = 5.0;
2376 2378
 				USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/**";
2379
+				VALID_ARCHS = "arm64 arm64e armv7s";
2377 2380
 			};
2378 2381
 			name = Release;
2379 2382
 		};

BIN
PaiAi/Paiai.xcodeproj/project.xcworkspace/xcuserdata/FFIB.xcuserdatad/UserInterfaceState.xcuserstate


+ 0 - 12
PaiAi/Paiai.xcodeproj/xcuserdata/FFIB.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -2,16 +2,4 @@
2 2
 <Bucket
3 3
    type = "1"
4 4
    version = "2.0">
5
-   <Breakpoints>
6
-      <BreakpointProxy
7
-         BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
8
-         <BreakpointContent
9
-            shouldBeEnabled = "Yes"
10
-            ignoreCount = "0"
11
-            continueAfterRunningActions = "No"
12
-            scope = "0"
13
-            stopOnStyle = "0">
14
-         </BreakpointContent>
15
-      </BreakpointProxy>
16
-   </Breakpoints>
17 5
 </Bucket>

+ 2 - 2
PaiAi/Paiai.xcodeproj/xcuserdata/FFIB.xcuserdatad/xcschemes/PaiAi.xcscheme

@@ -104,10 +104,10 @@
104 104
       </BuildableProductRunnable>
105 105
    </ProfileAction>
106 106
    <AnalyzeAction
107
-      buildConfiguration = "Debug">
107
+      buildConfiguration = "Release">
108 108
    </AnalyzeAction>
109 109
    <ArchiveAction
110
-      buildConfiguration = "Debug"
110
+      buildConfiguration = "Release"
111 111
       revealArchiveInOrganizer = "YES">
112 112
    </ArchiveAction>
113 113
 </Scheme>

BIN
PaiAi/Paiai/Assets.xcassets/.DS_Store


BIN
PaiAi/Paiai/Assets.xcassets/module/login/guide1.imageset/8778FB9773576108C6D5109F23D69C69.png


BIN
PaiAi/Paiai/Assets.xcassets/module/login/guide2.imageset/A4494A157AB20FA47B8B96993319B3E9.png


BIN
PaiAi/Paiai/Assets.xcassets/module/login/guide3.imageset/862B9012863929D278CBEF1E3A118E6D.png


+ 1 - 1
PaiAi/Paiai/Info.plist

@@ -62,7 +62,7 @@
62 62
 		</dict>
63 63
 	</array>
64 64
 	<key>CFBundleVersion</key>
65
-	<string>1</string>
65
+	<string>3</string>
66 66
 	<key>LSApplicationCategoryType</key>
67 67
 	<string></string>
68 68
 	<key>LSApplicationQueriesSchemes</key>

+ 0 - 10
PaiAi/Paiai/Paiai.entitlements

@@ -1,10 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
-<plist version="1.0">
4
-<dict>
5
-	<key>keychain-access-groups</key>
6
-	<array>
7
-		<string>$(AppIdentifierPrefix)com.Paiai.Paiai</string>
8
-	</array>
9
-</dict>
10
-</plist>

+ 6 - 7
PaiAi/PaiaiDataKit/DataLayer/Repositories/Remote/Reusable/NetWork/NetworkApi.swift

@@ -31,10 +31,7 @@ class NetworkApi {
31 31
             return
32 32
         }
33 33
 
34
-        if err.isSessionDeinitializedError
35
-            || err.isSessionInvalidatedError
36
-            || err.isInvalidURLError
37
-            || err.isRequestAdaptationError {
34
+        if err.isInvalidURLError {
38 35
             Toast.show(message: "客户端网络请求出错")
39 36
         } else if err.isParameterEncoderError || err.isParameterEncodingError {
40 37
             Toast.show(message: "客户端参数编码出错")
@@ -46,9 +43,11 @@ class NetworkApi {
46 43
             Toast.show(message: "服务器返回数据出错")
47 44
         } else if err.isServerTrustEvaluationError {
48 45
             Toast.show(message: "服务器验证错误")
49
-        } else if err.isRequestRetryError {
50
-            Toast.show(message: "客户端重试出错")
51
-        } else if err.isExplicitlyCancelledError {
46
+        }
47
+//        else if err.isRequestRetryError {
48
+//            Toast.show(message: "客户端重试出错")
49
+//        }
50
+        else if err.isExplicitlyCancelledError {
52 51
             return
53 52
         } else {
54 53
             Toast.show(message: "网络出现未知错误")

+ 9 - 3
PaiAi/PaiaiDataKit/DataLayer/Repositories/Remote/WXUserInfoRemoteAPI.swift

@@ -60,8 +60,8 @@ struct WXUserInfoRemoteAPI: UserInfoRemoteAPI {
60 60
                 }
61 61
                 switch errcode {
62 62
                 case 0:
63
-                    observer(.success(["appid": WXAppid, "secret": WXSecret,
64
-                                       "code": code, "grant_type": "authorization_code"]))
63
+                    return observer(.success(["appid": WXAppid, "secret": WXSecret,
64
+                                              "code": code, "grant_type": "authorization_code"]))
65 65
                 case -4:
66 66
                     Toast.show(message: "您拒绝授权,登录失败")
67 67
                 case -2:
@@ -89,12 +89,18 @@ struct WXUserInfoRemoteAPI: UserInfoRemoteAPI {
89 89
 
90 90
         return NetworkApi.share.get(resource: resource)
91 91
     }
92
+    
93
+    fileprivate func pareseWXUserInfo(json: JSON) -> [String: Any]? {
94
+        var data = json
95
+        data.removeValue(forKey: "privilege")
96
+        return data
97
+    }
92 98
 
93 99
     fileprivate func getWXUserInfo(param: [String: String]) -> Single<[String: Any]> {
94 100
         let resource = ContentResource<[String: Any]>(host: "https://api.weixin.qq.com",
95 101
                                                       path: .wxUserInfo,
96 102
                                                       parameter: param,
97
-                                                      parseJSON: { $0 })
103
+                                                      parseJSON: pareseWXUserInfo)
98 104
         return NetworkApi.share.get(resource: resource)
99 105
     }
100 106
 

+ 1 - 0
PaiAi/PaiaiDataKit/PaiaiDataKit.h

@@ -18,3 +18,4 @@ FOUNDATION_EXPORT const unsigned char PaiaiDataKitVersionString[];
18 18
 
19 19
 //微信SDK头文件
20 20
 #import "WXApi.h"
21
+#import "WechatAuthSDK.h"

+ 44 - 20
PaiAi/PaiaiDataKit/PresentLayer/PhotoDetail/PhotoDetailItemViewModel.swift

@@ -27,41 +27,65 @@ public final class PhotoDetailItemViewModel {
27 27
 
28 28
         self.item.subscribe(onNext: {[unowned self] (photoItem) in
29 29
             self.repository = PhotoDetailRepository(photoId: photoItem.photo_id, groupId: photoItem.group_id)
30
-            self.loadCommentItems().concat(self.loadThumbupUserItems()).subscribe(onCompleted: {
31
-                var val = self.item.value
32
-                val.comment_num = self.commentItems.value.count
33
-                val.thumbup_num = self.thumbupItems.value.count
34
-                self.item.accept(val)
35
-
36
-                let userInfo = [PhotoItemsOperator.key: PhotoItemsOperator.update(val.photo_id, val)]
37
-                NotificationCenter.default.post(name: .PhotoItemsChanged,
38
-                                                object: nil,
39
-                                                userInfo: userInfo)
40
-            }).disposed(by: self.disposeBag)
30
+            self.loadThumbupAndComment()
31
+//            Observable.zip(self.loadCommentItems(), self.loadThumbupUserItems()).subscribe(onNext: { _ in
32
+//                <#code#>
33
+//            }, onError: <#T##((Error) -> Void)?##((Error) -> Void)?##(Error) -> Void#>, onCompleted: <#T##(() -> Void)?##(() -> Void)?##() -> Void#>, onDisposed: <#T##(() -> Void)?##(() -> Void)?##() -> Void#>)
34
+//                .subscribe(onCompleted: {
35
+//
36
+//                var val = self.item.value
37
+//                val.comment_num = self.commentItems.value.count
38
+//                val.thumbup_num = self.thumbupItems.value.count
39
+//                self.item.accept(val)
40
+//
41
+//                let userInfo = [PhotoItemsOperator.key: PhotoItemsOperator.update(val.photo_id, val)]
42
+//                NotificationCenter.default.post(name: .PhotoItemsChanged,
43
+//                                                object: nil,
44
+//                                                userInfo: userInfo)
45
+//            }).disposed(by: self.disposeBag)
41 46
         }).disposed(by: disposeBag)
42 47
     }
43
-
44
-    private func loadThumbupUserItems() -> Completable {
45
-        return repository.loadThumbups().do(onSuccess: { (items) in
46
-            self.thumbupItems.accept(items)
47
-        }).asCompletable()
48
+    
49
+    private func loadThumbupAndComment() {
50
+        print(#function)
51
+        Single.zip(repository.loadComments(), repository.loadThumbups()).subscribe(onSuccess: {[unowned self] (commentItems, thumbupItems) in
52
+            self.commentItems.accept(commentItems)
53
+            self.thumbupItems.accept(thumbupItems)
54
+            self.update()
55
+        }).disposed(by: disposeBag)
56
+    }
57
+    
58
+    private func loadThumbupUserItems() -> Single<[PhotoThumbupUserItem]>  {
59
+        return repository.loadThumbups()
48 60
     }
49 61
 
50
-    private func loadCommentItems() -> Completable {
51
-        return repository.loadComments().do(onSuccess: { (items) in
52
-            self.commentItems.accept(items)
53
-        }).asCompletable()
62
+    private func loadCommentItems() -> Single<[PhotoCommentItem]>  {
63
+        return repository.loadComments()
64
+    }
65
+    
66
+    private func update() {
67
+        var val = self.item.value
68
+        val.comment_num = self.commentItems.value.count
69
+        val.thumbup_num = self.thumbupItems.value.count
70
+        let userInfo = [PhotoItemsOperator.key: PhotoItemsOperator.update(val.photo_id, val)]
71
+        NotificationCenter.default.post(name: .PhotoItemsChanged,
72
+                                        object: nil,
73
+                                        userInfo: userInfo)
54 74
     }
55 75
 
56 76
     public func submitThumbup() {
57 77
         repository.submitThumbup().subscribe(onSuccess: { items in
58 78
             self.thumbupItems.accept(items)
79
+            self.update()
59 80
         }).disposed(by: disposeBag)
60 81
     }
61 82
 
62 83
     public func submitComment(text: String) {
63 84
         repository.submitComment(text: text).subscribe(onSuccess: { (items) in
64 85
             self.commentItems.accept(items)
86
+            self.update()
65 87
         }).disposed(by: disposeBag)
66 88
     }
89
+    
90
+    
67 91
 }

+ 1 - 0
PaiAi/PaiaiDataKit/PresentLayer/PhotoDetail/PhotoDetailViewModel.swift

@@ -127,6 +127,7 @@ public final class PhotoDetailViewModel {
127 127
     }
128 128
 
129 129
     public func willShow(index: Int) {
130
+        print(index)
130 131
         currIndex = index
131 132
         _hasGetPrice.accept(false)
132 133
         itemViewModel.item.accept(_items.value[index])

+ 1 - 1
PaiAi/PaiaiUIKit/Reusable/UIKit/WaterfallFlowLayout/WaterfallFlowLayout.swift

@@ -125,7 +125,7 @@ public final class WaterfallFlowLayout: UICollectionViewLayout {
125 125
     }
126 126
     
127 127
     /// called at collectionView reload
128
-    func setNeedsLayout() {
128
+    public func setNeedsLayout() {
129 129
         isNeedLayout = true
130 130
     }
131 131
 }

+ 6 - 1
PaiAi/Paiai_iOS/App/Home/HomeViewController.swift

@@ -31,6 +31,10 @@ final class HomeViewController: UIViewController {
31 31
     override func viewDidAppear(_ animated: Bool) {
32 32
         super.viewDidAppear(animated)
33 33
     }
34
+    
35
+    override func viewDidDisappear(_ animated: Bool) {
36
+        super.viewDidDisappear(animated)
37
+    }
34 38
 
35 39
     func initalize() {
36 40
         collectionView.register(UINib(nibName: "PhotoCell",
@@ -95,7 +99,8 @@ fileprivate extension HomeViewController {
95 99
 
96 100
     func bindViewModelToRefreshing() {
97 101
         viewModel.isLoading
98
-            .subscribe(onNext: {[unowned self] flag in
102
+            .asDriver(onErrorJustReturn: true)
103
+            .drive(onNext: {[unowned self] flag in
99 104
                 if flag {
100 105
                     self.collectionView.endRefreshing(at: .top)
101 106
                 } else {

adminSystem - Gogs: Go Git Service

Nessuna descrizione

license 1.1KB

    The MIT License (MIT) Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.