xuguohong

idfa请求参数添加sdksimplename和gamesimplename

Showing 332 changed files with 11290 additions and 8 deletions
No preview for this file type
...@@ -466,7 +466,7 @@ ...@@ -466,7 +466,7 @@
466 isa = XCBuildConfiguration; 466 isa = XCBuildConfiguration;
467 buildSettings = { 467 buildSettings = {
468 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 468 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
469 - CODE_SIGN_IDENTITY = "iPhone Developer: Yufeng Wang (N5VLW9NRUG)"; 469 + CODE_SIGN_IDENTITY = "iPhone Developer: Feng Zhang (4LYC35G22K)";
470 DEAD_CODE_STRIPPING = NO; 470 DEAD_CODE_STRIPPING = NO;
471 ENABLE_BITCODE = NO; 471 ENABLE_BITCODE = NO;
472 FRAMEWORK_SEARCH_PATHS = ( 472 FRAMEWORK_SEARCH_PATHS = (
...@@ -484,9 +484,9 @@ ...@@ -484,9 +484,9 @@
484 ); 484 );
485 ONLY_ACTIVE_ARCH = NO; 485 ONLY_ACTIVE_ARCH = NO;
486 OTHER_LDFLAGS = ""; 486 OTHER_LDFLAGS = "";
487 - PRODUCT_BUNDLE_IDENTIFIER = com.jian.wuji; 487 + PRODUCT_BUNDLE_IDENTIFIER = yhjy.mhtx.ios;
488 PRODUCT_NAME = "$(TARGET_NAME)"; 488 PRODUCT_NAME = "$(TARGET_NAME)";
489 - PROVISIONING_PROFILE = "e6d180fd-5532-4218-bf56-0c1afa8ea0b4"; 489 + PROVISIONING_PROFILE = "f746a8a9-526c-4114-b2d6-c8fa351e323a";
490 TARGETED_DEVICE_FAMILY = 2; 490 TARGETED_DEVICE_FAMILY = 2;
491 VALID_ARCHS = "arm64 armv7s"; 491 VALID_ARCHS = "arm64 armv7s";
492 }; 492 };
...@@ -496,7 +496,7 @@ ...@@ -496,7 +496,7 @@
496 isa = XCBuildConfiguration; 496 isa = XCBuildConfiguration;
497 buildSettings = { 497 buildSettings = {
498 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 498 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
499 - CODE_SIGN_IDENTITY = "iPhone Developer: Yufeng Wang (N5VLW9NRUG)"; 499 + CODE_SIGN_IDENTITY = "iPhone Developer: Feng Zhang (4LYC35G22K)";
500 DEAD_CODE_STRIPPING = NO; 500 DEAD_CODE_STRIPPING = NO;
501 ENABLE_BITCODE = NO; 501 ENABLE_BITCODE = NO;
502 FRAMEWORK_SEARCH_PATHS = ( 502 FRAMEWORK_SEARCH_PATHS = (
...@@ -514,9 +514,9 @@ ...@@ -514,9 +514,9 @@
514 ); 514 );
515 ONLY_ACTIVE_ARCH = NO; 515 ONLY_ACTIVE_ARCH = NO;
516 OTHER_LDFLAGS = ""; 516 OTHER_LDFLAGS = "";
517 - PRODUCT_BUNDLE_IDENTIFIER = com.jian.wuji; 517 + PRODUCT_BUNDLE_IDENTIFIER = yhjy.mhtx.ios;
518 PRODUCT_NAME = "$(TARGET_NAME)"; 518 PRODUCT_NAME = "$(TARGET_NAME)";
519 - PROVISIONING_PROFILE = "e6d180fd-5532-4218-bf56-0c1afa8ea0b4"; 519 + PROVISIONING_PROFILE = "f746a8a9-526c-4114-b2d6-c8fa351e323a";
520 TARGETED_DEVICE_FAMILY = 2; 520 TARGETED_DEVICE_FAMILY = 2;
521 VALID_ARCHS = "arm64 armv7s"; 521 VALID_ARCHS = "arm64 armv7s";
522 }; 522 };
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
32 32
33 #define REPORT_URL @"https://statistic.public.sdk.gzyouai.com/sdk/statistic" //http://183.57.76.181:9030/sdk/statistic 33 #define REPORT_URL @"https://statistic.public.sdk.gzyouai.com/sdk/statistic" //http://183.57.76.181:9030/sdk/statistic
34 34
35 -#define REPORT_IDFA_URL @"https://statistic.public.sdk.gzyouai.com/sdk/last_channel?idfa=" //@"http://183.57.76.181:9030/sdk/last_channel?idfa="// 35 +#define REPORT_IDFA_URL @"https://statistic.public.sdk.gzyouai.com/sdk/last_channel?idfa=%@&sdkSimpleName=%@&gameSimpleName=%@" //@"http://183.57.76.181:9030/sdk/last_channel?idfa="//
36 36
37 #define REPORT_OPEN @"open" 37 #define REPORT_OPEN @"open"
38 #define REPORT_ENTER @"enter" 38 #define REPORT_ENTER @"enter"
......
1 +// !$*UTF8*$!
2 +{
3 + archiveVersion = 1;
4 + classes = {
5 + };
6 + objectVersion = 46;
7 + objects = {
8 +
9 +/* Begin PBXBuildFile section */
10 + 30C5475DA8C44BC2399095C8 /* SDKInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 808C463EAECB4A4BB6BB2004 /* SDKInterface.m */; };
11 + 3B404515BB7BFCD33A9B0E24 /* WSSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE784E00A1B96BCBC08E3129 /* WSSDK.framework */; };
12 + 50954B5EAC6C16851E424C62 /* WSSDKBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 87AC47478D1103BBD023A1DD /* WSSDKBundle.bundle */; };
13 + 621048FF8BF94EBC43AFAF74 /* WSSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE784E00A1B96BCBC08E3129 /* WSSDK.framework */; };
14 + 6C0D4A4DA615A3CAB008ECFD /* WSSDKBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 87AC47478D1103BBD023A1DD /* WSSDKBundle.bundle */; };
15 + 6C6B413AA6BC55551D978E35 /* pool_setting in Resources */ = {isa = PBXBuildFile; fileRef = 70DE4E99A139BD7CDDF57F75 /* pool_setting */; };
16 + 809C497DA5E8F078C739BD79 /* pool_setting in Resources */ = {isa = PBXBuildFile; fileRef = 70DE4E99A139BD7CDDF57F75 /* pool_setting */; };
17 + 80AE40FA805C0B970AB08460 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82CD4C4DA8AFBE3304D3B851 /* AdSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
18 + 8425EC1A1F0E3CBD00B0D868 /* PoolSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8425EC191F0E3CBD00B0D868 /* PoolSdk.framework */; settings = {ASSET_TAGS = (); }; };
19 + 847EE5E21EE9007E003A4B7B /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 847EE5E11EE9007E003A4B7B /* MainViewController.m */; settings = {ASSET_TAGS = (); }; };
20 + 8484E4F51EE7E0DC00B402D1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8484E4F21EE7E0DC00B402D1 /* AppDelegate.m */; settings = {ASSET_TAGS = (); }; };
21 + 8484E4F61EE7E0DC00B402D1 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8484E4F41EE7E0DC00B402D1 /* ViewController.m */; settings = {ASSET_TAGS = (); }; };
22 + 8484E4FC1EE7E1D800B402D1 /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E4FB1EE7E1D800B402D1 /* libsqlite3.dylib */; };
23 + 8484E4FE1EE7E1F700B402D1 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E4FD1EE7E1F700B402D1 /* CoreTelephony.framework */; };
24 + 8484E5001EE7E20C00B402D1 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E4FF1EE7E20C00B402D1 /* CFNetwork.framework */; };
25 + 8484E5021EE7E21F00B402D1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5011EE7E21F00B402D1 /* UIKit.framework */; };
26 + 8484E5041EE7E24400B402D1 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5031EE7E24400B402D1 /* StoreKit.framework */; };
27 + 8484E5061EE7E24A00B402D1 /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5051EE7E24A00B402D1 /* CoreMotion.framework */; };
28 + 8484E5081EE7E25600B402D1 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5071EE7E25600B402D1 /* CoreText.framework */; };
29 + 8484E50A1EE7E26200B402D1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5091EE7E26200B402D1 /* Security.framework */; };
30 + 8484E50C1EE7E27100B402D1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E50B1EE7E27100B402D1 /* CoreGraphics.framework */; };
31 + 8484E50E1EE7E28000B402D1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E50D1EE7E28000B402D1 /* QuartzCore.framework */; };
32 + 8484E5101EE7E29A00B402D1 /* libc++.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E50F1EE7E29A00B402D1 /* libc++.1.dylib */; };
33 + 8484E5121EE7E2B800B402D1 /* libz.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5111EE7E2B800B402D1 /* libz.1.dylib */; };
34 + 8484E5141EE7E2DE00B402D1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5131EE7E2DE00B402D1 /* Foundation.framework */; };
35 + 8484E5161EE7E36800B402D1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5151EE7E36800B402D1 /* SystemConfiguration.framework */; };
36 + 943045609C15BF800DB95AE4 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 35E1420FB0608659E1D07688 /* MBProgressHUD.m */; };
37 + 96154CB3AA02C1A6FED23EBB /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82CD4C4DA8AFBE3304D3B851 /* AdSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
38 + 9BAB460C801471DBF2697BAE /* SDKInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 808C463EAECB4A4BB6BB2004 /* SDKInterface.m */; };
39 + 9D374AC1B1728FFB09B7CD98 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 35E1420FB0608659E1D07688 /* MBProgressHUD.m */; };
40 + BB5F3C8E1C1811BC00DA339D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = BB5F3C8D1C1811BC00DA339D /* main.m */; };
41 + BB5F3C971C1811BC00DA339D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BB5F3C951C1811BC00DA339D /* Main.storyboard */; };
42 + BB5F3C9C1C1811BC00DA339D /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB5F3C9A1C1811BC00DA339D /* LaunchScreen.xib */; };
43 + BB5F3CA81C1811BC00DA339D /* DemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = BB5F3CA71C1811BC00DA339D /* DemoTests.m */; };
44 +/* End PBXBuildFile section */
45 +
46 +/* Begin PBXContainerItemProxy section */
47 + BB5F3CA21C1811BC00DA339D /* PBXContainerItemProxy */ = {
48 + isa = PBXContainerItemProxy;
49 + containerPortal = BB5F3C801C1811BC00DA339D /* Project object */;
50 + proxyType = 1;
51 + remoteGlobalIDString = BB5F3C871C1811BC00DA339D;
52 + remoteInfo = Demo;
53 + };
54 +/* End PBXContainerItemProxy section */
55 +
56 +/* Begin PBXCopyFilesBuildPhase section */
57 + 84398BFB1C4C83EC0082D774 /* Embed Frameworks */ = {
58 + isa = PBXCopyFilesBuildPhase;
59 + buildActionMask = 2147483647;
60 + dstPath = "";
61 + dstSubfolderSpec = 10;
62 + files = (
63 + );
64 + name = "Embed Frameworks";
65 + runOnlyForDeploymentPostprocessing = 0;
66 + };
67 +/* End PBXCopyFilesBuildPhase section */
68 +
69 +/* Begin PBXFileReference section */
70 + 0EA7410EBF281C739B6EA853 /* SDKInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SDKInterface.h; path = poolsdk_file/poolsdk_play800/SDK/SDKInterface.h; sourceTree = SOURCE_ROOT; };
71 + 35E1420FB0608659E1D07688 /* MBProgressHUD.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBProgressHUD.m; path = poolsdk_file/poolsdk_play800/SDK/MBProgressHUD/MBProgressHUD.m; sourceTree = SOURCE_ROOT; };
72 + 70DE4E99A139BD7CDDF57F75 /* pool_setting */ = {isa = PBXFileReference; lastKnownFileType = "?"; name = pool_setting; path = poolsdk_file/poolsdk_play800/SDK/pool_setting; sourceTree = SOURCE_ROOT; };
73 + 808C463EAECB4A4BB6BB2004 /* SDKInterface.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDKInterface.m; path = poolsdk_file/poolsdk_play800/SDK/SDKInterface.m; sourceTree = SOURCE_ROOT; };
74 + 82CD4C4DA8AFBE3304D3B851 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; };
75 + 8425EC191F0E3CBD00B0D868 /* PoolSdk.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = PoolSdk.framework; sourceTree = "<group>"; };
76 + 847EE5E01EE9007E003A4B7B /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = "<group>"; };
77 + 847EE5E11EE9007E003A4B7B /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = "<group>"; };
78 + 8484E4F11EE7E0DC00B402D1 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
79 + 8484E4F21EE7E0DC00B402D1 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
80 + 8484E4F31EE7E0DC00B402D1 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
81 + 8484E4F41EE7E0DC00B402D1 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
82 + 8484E4FB1EE7E1D800B402D1 /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = ../../../../../../../../usr/lib/libsqlite3.dylib; sourceTree = "<group>"; };
83 + 8484E4FD1EE7E1F700B402D1 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };
84 + 8484E4FF1EE7E20C00B402D1 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; };
85 + 8484E5011EE7E21F00B402D1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
86 + 8484E5031EE7E24400B402D1 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
87 + 8484E5051EE7E24A00B402D1 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
88 + 8484E5071EE7E25600B402D1 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
89 + 8484E5091EE7E26200B402D1 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
90 + 8484E50B1EE7E27100B402D1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
91 + 8484E50D1EE7E28000B402D1 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
92 + 8484E50F1EE7E29A00B402D1 /* libc++.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libc++.1.dylib"; path = "../../../../../../../../usr/lib/libc++.1.dylib"; sourceTree = "<group>"; };
93 + 8484E5111EE7E2B800B402D1 /* libz.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.dylib; path = ../../../../../../../../usr/lib/libz.1.dylib; sourceTree = "<group>"; };
94 + 8484E5131EE7E2DE00B402D1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
95 + 8484E5151EE7E36800B402D1 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
96 + 87AC47478D1103BBD023A1DD /* WSSDKBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = WSSDKBundle.bundle; path = poolsdk_file/poolsdk_play800/SDK/WSSDKBundle.bundle; sourceTree = SOURCE_ROOT; };
97 + A484405786EA19C4B447AA93 /* MBProgressHUD.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBProgressHUD.h; path = poolsdk_file/poolsdk_play800/SDK/MBProgressHUD/MBProgressHUD.h; sourceTree = SOURCE_ROOT; };
98 + BB5F3C881C1811BC00DA339D /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; };
99 + BB5F3C8D1C1811BC00DA339D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
100 + BB5F3C961C1811BC00DA339D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
101 + BB5F3C9B1C1811BC00DA339D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
102 + BB5F3CA11C1811BC00DA339D /* DemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
103 + BB5F3CA61C1811BC00DA339D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
104 + BB5F3CA71C1811BC00DA339D /* DemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DemoTests.m; sourceTree = "<group>"; };
105 + CE784E00A1B96BCBC08E3129 /* WSSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WSSDK.framework; path = poolsdk_file/poolsdk_play800/SDK/WSSDK.framework; sourceTree = SOURCE_ROOT; };
106 +/* End PBXFileReference section */
107 +
108 +/* Begin PBXFrameworksBuildPhase section */
109 + BB5F3C851C1811BC00DA339D /* Frameworks */ = {
110 + isa = PBXFrameworksBuildPhase;
111 + buildActionMask = 2147483647;
112 + files = (
113 + 8484E5161EE7E36800B402D1 /* SystemConfiguration.framework in Frameworks */,
114 + 8484E4FC1EE7E1D800B402D1 /* libsqlite3.dylib in Frameworks */,
115 + 8484E5121EE7E2B800B402D1 /* libz.1.dylib in Frameworks */,
116 + 8484E5101EE7E29A00B402D1 /* libc++.1.dylib in Frameworks */,
117 + 8484E5001EE7E20C00B402D1 /* CFNetwork.framework in Frameworks */,
118 + 8484E5061EE7E24A00B402D1 /* CoreMotion.framework in Frameworks */,
119 + 8484E5021EE7E21F00B402D1 /* UIKit.framework in Frameworks */,
120 + 8484E50C1EE7E27100B402D1 /* CoreGraphics.framework in Frameworks */,
121 + 8484E5081EE7E25600B402D1 /* CoreText.framework in Frameworks */,
122 + 8484E50E1EE7E28000B402D1 /* QuartzCore.framework in Frameworks */,
123 + 8484E5141EE7E2DE00B402D1 /* Foundation.framework in Frameworks */,
124 + 8484E50A1EE7E26200B402D1 /* Security.framework in Frameworks */,
125 + 8484E5041EE7E24400B402D1 /* StoreKit.framework in Frameworks */,
126 + 8425EC1A1F0E3CBD00B0D868 /* PoolSdk.framework in Frameworks */,
127 + 8484E4FE1EE7E1F700B402D1 /* CoreTelephony.framework in Frameworks */,
128 + 621048FF8BF94EBC43AFAF74 /* WSSDK.framework in Frameworks */,
129 + 80AE40FA805C0B970AB08460 /* AdSupport.framework in Frameworks */,
130 + );
131 + runOnlyForDeploymentPostprocessing = 0;
132 + };
133 + BB5F3C9E1C1811BC00DA339D /* Frameworks */ = {
134 + isa = PBXFrameworksBuildPhase;
135 + buildActionMask = 2147483647;
136 + files = (
137 + 3B404515BB7BFCD33A9B0E24 /* WSSDK.framework in Frameworks */,
138 + 96154CB3AA02C1A6FED23EBB /* AdSupport.framework in Frameworks */,
139 + );
140 + runOnlyForDeploymentPostprocessing = 0;
141 + };
142 +/* End PBXFrameworksBuildPhase section */
143 +
144 +/* Begin PBXGroup section */
145 + 218244E19195FB06A542F74A /* Frameworks */ = {
146 + isa = PBXGroup;
147 + children = (
148 + 82CD4C4DA8AFBE3304D3B851 /* AdSupport.framework */,
149 + );
150 + name = Frameworks;
151 + sourceTree = "<group>";
152 + };
153 + 7620454B80248959F0CA5CEE /* MBProgressHUD */ = {
154 + isa = PBXGroup;
155 + children = (
156 + 35E1420FB0608659E1D07688 /* MBProgressHUD.m */,
157 + A484405786EA19C4B447AA93 /* MBProgressHUD.h */,
158 + );
159 + name = MBProgressHUD;
160 + path = poolsdk_file/poolsdk_play800/SDK/MBProgressHUD;
161 + sourceTree = SOURCE_ROOT;
162 + };
163 + 8476DF631C4DD70500EC42BA /* poolsdk_file */ = {
164 + isa = PBXGroup;
165 + children = (
166 + );
167 + name = poolsdk_file;
168 + sourceTree = "<group>";
169 + };
170 + BB5F3C7F1C1811BC00DA339D = {
171 + isa = PBXGroup;
172 + children = (
173 + 8484E5151EE7E36800B402D1 /* SystemConfiguration.framework */,
174 + 8484E5131EE7E2DE00B402D1 /* Foundation.framework */,
175 + 8484E5111EE7E2B800B402D1 /* libz.1.dylib */,
176 + 8484E50F1EE7E29A00B402D1 /* libc++.1.dylib */,
177 + 8484E50D1EE7E28000B402D1 /* QuartzCore.framework */,
178 + 8484E50B1EE7E27100B402D1 /* CoreGraphics.framework */,
179 + 8484E5091EE7E26200B402D1 /* Security.framework */,
180 + 8484E5071EE7E25600B402D1 /* CoreText.framework */,
181 + 8484E5051EE7E24A00B402D1 /* CoreMotion.framework */,
182 + 8484E5031EE7E24400B402D1 /* StoreKit.framework */,
183 + 8484E5011EE7E21F00B402D1 /* UIKit.framework */,
184 + 8484E4FF1EE7E20C00B402D1 /* CFNetwork.framework */,
185 + 8484E4FD1EE7E1F700B402D1 /* CoreTelephony.framework */,
186 + 8484E4FB1EE7E1D800B402D1 /* libsqlite3.dylib */,
187 + 8476DF631C4DD70500EC42BA /* poolsdk_file */,
188 + BB5F3C8A1C1811BC00DA339D /* Demo */,
189 + BB5F3CA41C1811BC00DA339D /* DemoTests */,
190 + BB5F3C891C1811BC00DA339D /* Products */,
191 + D869437E85630602807E5FD6 /* SDK */,
192 + 218244E19195FB06A542F74A /* Frameworks */,
193 + );
194 + sourceTree = "<group>";
195 + };
196 + BB5F3C891C1811BC00DA339D /* Products */ = {
197 + isa = PBXGroup;
198 + children = (
199 + BB5F3C881C1811BC00DA339D /* Demo.app */,
200 + BB5F3CA11C1811BC00DA339D /* DemoTests.xctest */,
201 + );
202 + name = Products;
203 + sourceTree = "<group>";
204 + };
205 + BB5F3C8A1C1811BC00DA339D /* Demo */ = {
206 + isa = PBXGroup;
207 + children = (
208 + 8425EC191F0E3CBD00B0D868 /* PoolSdk.framework */,
209 + 8484E4F11EE7E0DC00B402D1 /* AppDelegate.h */,
210 + 8484E4F21EE7E0DC00B402D1 /* AppDelegate.m */,
211 + 8484E4F31EE7E0DC00B402D1 /* ViewController.h */,
212 + 8484E4F41EE7E0DC00B402D1 /* ViewController.m */,
213 + 847EE5E01EE9007E003A4B7B /* MainViewController.h */,
214 + 847EE5E11EE9007E003A4B7B /* MainViewController.m */,
215 + BB5F3C951C1811BC00DA339D /* Main.storyboard */,
216 + BB5F3C9A1C1811BC00DA339D /* LaunchScreen.xib */,
217 + BB5F3C8B1C1811BC00DA339D /* Supporting Files */,
218 + );
219 + path = Demo;
220 + sourceTree = "<group>";
221 + };
222 + BB5F3C8B1C1811BC00DA339D /* Supporting Files */ = {
223 + isa = PBXGroup;
224 + children = (
225 + BB5F3C8D1C1811BC00DA339D /* main.m */,
226 + );
227 + name = "Supporting Files";
228 + sourceTree = "<group>";
229 + };
230 + BB5F3CA41C1811BC00DA339D /* DemoTests */ = {
231 + isa = PBXGroup;
232 + children = (
233 + BB5F3CA71C1811BC00DA339D /* DemoTests.m */,
234 + BB5F3CA51C1811BC00DA339D /* Supporting Files */,
235 + );
236 + path = DemoTests;
237 + sourceTree = "<group>";
238 + };
239 + BB5F3CA51C1811BC00DA339D /* Supporting Files */ = {
240 + isa = PBXGroup;
241 + children = (
242 + BB5F3CA61C1811BC00DA339D /* Info.plist */,
243 + );
244 + name = "Supporting Files";
245 + sourceTree = "<group>";
246 + };
247 + D869437E85630602807E5FD6 /* SDK */ = {
248 + isa = PBXGroup;
249 + children = (
250 + 0EA7410EBF281C739B6EA853 /* SDKInterface.h */,
251 + 70DE4E99A139BD7CDDF57F75 /* pool_setting */,
252 + 808C463EAECB4A4BB6BB2004 /* SDKInterface.m */,
253 + 7620454B80248959F0CA5CEE /* MBProgressHUD */,
254 + CE784E00A1B96BCBC08E3129 /* WSSDK.framework */,
255 + 87AC47478D1103BBD023A1DD /* WSSDKBundle.bundle */,
256 + );
257 + name = SDK;
258 + path = poolsdk_file/poolsdk_play800/SDK;
259 + sourceTree = SOURCE_ROOT;
260 + };
261 +/* End PBXGroup section */
262 +
263 +/* Begin PBXNativeTarget section */
264 + BB5F3C871C1811BC00DA339D /* Demo */ = {
265 + isa = PBXNativeTarget;
266 + buildConfigurationList = BB5F3CAB1C1811BC00DA339D /* Build configuration list for PBXNativeTarget "Demo" */;
267 + buildPhases = (
268 + BB5F3C841C1811BC00DA339D /* Sources */,
269 + BB5F3C851C1811BC00DA339D /* Frameworks */,
270 + BB5F3C861C1811BC00DA339D /* Resources */,
271 + 84398BFB1C4C83EC0082D774 /* Embed Frameworks */,
272 + );
273 + buildRules = (
274 + );
275 + dependencies = (
276 + );
277 + name = Demo;
278 + productName = Demo;
279 + productReference = BB5F3C881C1811BC00DA339D /* Demo.app */;
280 + productType = "com.apple.product-type.application";
281 + };
282 + BB5F3CA01C1811BC00DA339D /* DemoTests */ = {
283 + isa = PBXNativeTarget;
284 + buildConfigurationList = BB5F3CAE1C1811BC00DA339D /* Build configuration list for PBXNativeTarget "DemoTests" */;
285 + buildPhases = (
286 + BB5F3C9D1C1811BC00DA339D /* Sources */,
287 + BB5F3C9E1C1811BC00DA339D /* Frameworks */,
288 + BB5F3C9F1C1811BC00DA339D /* Resources */,
289 + );
290 + buildRules = (
291 + );
292 + dependencies = (
293 + BB5F3CA31C1811BC00DA339D /* PBXTargetDependency */,
294 + );
295 + name = DemoTests;
296 + productName = DemoTests;
297 + productReference = BB5F3CA11C1811BC00DA339D /* DemoTests.xctest */;
298 + productType = "com.apple.product-type.bundle.unit-test";
299 + };
300 +/* End PBXNativeTarget section */
301 +
302 +/* Begin PBXProject section */
303 + BB5F3C801C1811BC00DA339D /* Project object */ = {
304 + isa = PBXProject;
305 + attributes = {
306 + LastUpgradeCheck = 0640;
307 + ORGANIZATIONNAME = winFan;
308 + TargetAttributes = {
309 + BB5F3C871C1811BC00DA339D = {
310 + CreatedOnToolsVersion = 6.4;
311 + };
312 + BB5F3CA01C1811BC00DA339D = {
313 + CreatedOnToolsVersion = 6.4;
314 + TestTargetID = BB5F3C871C1811BC00DA339D;
315 + };
316 + };
317 + };
318 + buildConfigurationList = BB5F3C831C1811BC00DA339D /* Build configuration list for PBXProject "Demo_play800" */;
319 + compatibilityVersion = "Xcode 3.2";
320 + developmentRegion = English;
321 + hasScannedForEncodings = 0;
322 + knownRegions = (
323 + en,
324 + Base,
325 + );
326 + mainGroup = BB5F3C7F1C1811BC00DA339D;
327 + productRefGroup = BB5F3C891C1811BC00DA339D /* Products */;
328 + projectDirPath = "";
329 + projectRoot = "";
330 + targets = (
331 + BB5F3C871C1811BC00DA339D /* Demo */,
332 + BB5F3CA01C1811BC00DA339D /* DemoTests */,
333 + );
334 + };
335 +/* End PBXProject section */
336 +
337 +/* Begin PBXResourcesBuildPhase section */
338 + BB5F3C861C1811BC00DA339D /* Resources */ = {
339 + isa = PBXResourcesBuildPhase;
340 + buildActionMask = 2147483647;
341 + files = (
342 + BB5F3C971C1811BC00DA339D /* Main.storyboard in Resources */,
343 + BB5F3C9C1C1811BC00DA339D /* LaunchScreen.xib in Resources */,
344 + 809C497DA5E8F078C739BD79 /* pool_setting in Resources */,
345 + 50954B5EAC6C16851E424C62 /* WSSDKBundle.bundle in Resources */,
346 + );
347 + runOnlyForDeploymentPostprocessing = 0;
348 + };
349 + BB5F3C9F1C1811BC00DA339D /* Resources */ = {
350 + isa = PBXResourcesBuildPhase;
351 + buildActionMask = 2147483647;
352 + files = (
353 + 6C6B413AA6BC55551D978E35 /* pool_setting in Resources */,
354 + 6C0D4A4DA615A3CAB008ECFD /* WSSDKBundle.bundle in Resources */,
355 + );
356 + runOnlyForDeploymentPostprocessing = 0;
357 + };
358 +/* End PBXResourcesBuildPhase section */
359 +
360 +/* Begin PBXSourcesBuildPhase section */
361 + BB5F3C841C1811BC00DA339D /* Sources */ = {
362 + isa = PBXSourcesBuildPhase;
363 + buildActionMask = 2147483647;
364 + files = (
365 + 8484E4F51EE7E0DC00B402D1 /* AppDelegate.m in Sources */,
366 + 847EE5E21EE9007E003A4B7B /* MainViewController.m in Sources */,
367 + BB5F3C8E1C1811BC00DA339D /* main.m in Sources */,
368 + 8484E4F61EE7E0DC00B402D1 /* ViewController.m in Sources */,
369 + 30C5475DA8C44BC2399095C8 /* SDKInterface.m in Sources */,
370 + 9D374AC1B1728FFB09B7CD98 /* MBProgressHUD.m in Sources */,
371 + );
372 + runOnlyForDeploymentPostprocessing = 0;
373 + };
374 + BB5F3C9D1C1811BC00DA339D /* Sources */ = {
375 + isa = PBXSourcesBuildPhase;
376 + buildActionMask = 2147483647;
377 + files = (
378 + BB5F3CA81C1811BC00DA339D /* DemoTests.m in Sources */,
379 + 9BAB460C801471DBF2697BAE /* SDKInterface.m in Sources */,
380 + 943045609C15BF800DB95AE4 /* MBProgressHUD.m in Sources */,
381 + );
382 + runOnlyForDeploymentPostprocessing = 0;
383 + };
384 +/* End PBXSourcesBuildPhase section */
385 +
386 +/* Begin PBXTargetDependency section */
387 + BB5F3CA31C1811BC00DA339D /* PBXTargetDependency */ = {
388 + isa = PBXTargetDependency;
389 + target = BB5F3C871C1811BC00DA339D /* Demo */;
390 + targetProxy = BB5F3CA21C1811BC00DA339D /* PBXContainerItemProxy */;
391 + };
392 +/* End PBXTargetDependency section */
393 +
394 +/* Begin PBXVariantGroup section */
395 + BB5F3C951C1811BC00DA339D /* Main.storyboard */ = {
396 + isa = PBXVariantGroup;
397 + children = (
398 + BB5F3C961C1811BC00DA339D /* Base */,
399 + );
400 + name = Main.storyboard;
401 + sourceTree = "<group>";
402 + };
403 + BB5F3C9A1C1811BC00DA339D /* LaunchScreen.xib */ = {
404 + isa = PBXVariantGroup;
405 + children = (
406 + BB5F3C9B1C1811BC00DA339D /* Base */,
407 + );
408 + name = LaunchScreen.xib;
409 + sourceTree = "<group>";
410 + };
411 +/* End PBXVariantGroup section */
412 +
413 +/* Begin XCBuildConfiguration section */
414 + BB5F3CA91C1811BC00DA339D /* Debug */ = {
415 + isa = XCBuildConfiguration;
416 + buildSettings = {
417 + ALWAYS_SEARCH_USER_PATHS = NO;
418 + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "";
419 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
420 + CLANG_CXX_LIBRARY = "libc++";
421 + CLANG_ENABLE_MODULES = YES;
422 + CLANG_ENABLE_OBJC_ARC = YES;
423 + CLANG_WARN_BOOL_CONVERSION = YES;
424 + CLANG_WARN_CONSTANT_CONVERSION = YES;
425 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
426 + CLANG_WARN_EMPTY_BODY = YES;
427 + CLANG_WARN_ENUM_CONVERSION = YES;
428 + CLANG_WARN_INT_CONVERSION = YES;
429 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
430 + CLANG_WARN_UNREACHABLE_CODE = YES;
431 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
432 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
433 + COPY_PHASE_STRIP = NO;
434 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
435 + ENABLE_BITCODE = NO;
436 + ENABLE_STRICT_OBJC_MSGSEND = YES;
437 + FRAMEWORK_SEARCH_PATHS = "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"";
438 + GCC_C_LANGUAGE_STANDARD = gnu99;
439 + GCC_DYNAMIC_NO_PIC = NO;
440 + GCC_NO_COMMON_BLOCKS = YES;
441 + GCC_OPTIMIZATION_LEVEL = 0;
442 + GCC_PREPROCESSOR_DEFINITIONS = (
443 + "DEBUG=1",
444 + "$(inherited)",
445 + );
446 + GCC_SYMBOLS_PRIVATE_EXTERN = NO;
447 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
448 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
449 + GCC_WARN_UNDECLARED_SELECTOR = YES;
450 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
451 + GCC_WARN_UNUSED_FUNCTION = YES;
452 + GCC_WARN_UNUSED_VARIABLE = YES;
453 + HEADER_SEARCH_PATHS = (
454 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"",
455 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK/MBProgressHUD\"",
456 + );
457 + INFOPLIST_FILE = poolsdk_file/poolsdk_play800/Info.plist;
458 + IPHONEOS_DEPLOYMENT_TARGET = 8.4;
459 + LIBRARY_SEARCH_PATHS = "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"";
460 + MTL_ENABLE_DEBUG_INFO = YES;
461 + ONLY_ACTIVE_ARCH = YES;
462 + OTHER_LDFLAGS = "-ObjC";
463 + PRODUCT_BUNDLE_IDENTIFIER = com.hubing.qyj01;
464 + SDKROOT = iphoneos;
465 + };
466 + name = Debug;
467 + };
468 + BB5F3CAA1C1811BC00DA339D /* Release */ = {
469 + isa = XCBuildConfiguration;
470 + buildSettings = {
471 + ALWAYS_SEARCH_USER_PATHS = NO;
472 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
473 + CLANG_CXX_LIBRARY = "libc++";
474 + CLANG_ENABLE_MODULES = YES;
475 + CLANG_ENABLE_OBJC_ARC = YES;
476 + CLANG_WARN_BOOL_CONVERSION = YES;
477 + CLANG_WARN_CONSTANT_CONVERSION = YES;
478 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
479 + CLANG_WARN_EMPTY_BODY = YES;
480 + CLANG_WARN_ENUM_CONVERSION = YES;
481 + CLANG_WARN_INT_CONVERSION = YES;
482 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
483 + CLANG_WARN_UNREACHABLE_CODE = YES;
484 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
485 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
486 + COPY_PHASE_STRIP = NO;
487 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
488 + ENABLE_BITCODE = NO;
489 + ENABLE_NS_ASSERTIONS = NO;
490 + ENABLE_STRICT_OBJC_MSGSEND = YES;
491 + FRAMEWORK_SEARCH_PATHS = "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"";
492 + GCC_C_LANGUAGE_STANDARD = gnu99;
493 + GCC_NO_COMMON_BLOCKS = YES;
494 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
495 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
496 + GCC_WARN_UNDECLARED_SELECTOR = YES;
497 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
498 + GCC_WARN_UNUSED_FUNCTION = YES;
499 + GCC_WARN_UNUSED_VARIABLE = YES;
500 + HEADER_SEARCH_PATHS = (
501 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"",
502 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK/MBProgressHUD\"",
503 + );
504 + INFOPLIST_FILE = poolsdk_file/poolsdk_play800/Info.plist;
505 + IPHONEOS_DEPLOYMENT_TARGET = 8.4;
506 + LIBRARY_SEARCH_PATHS = "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"";
507 + MTL_ENABLE_DEBUG_INFO = NO;
508 + OTHER_LDFLAGS = "-ObjC";
509 + PRODUCT_BUNDLE_IDENTIFIER = com.hubing.qyj01;
510 + SDKROOT = iphoneos;
511 + VALIDATE_PRODUCT = YES;
512 + };
513 + name = Release;
514 + };
515 + BB5F3CAC1C1811BC00DA339D /* Debug */ = {
516 + isa = XCBuildConfiguration;
517 + buildSettings = {
518 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
519 + CODE_SIGN_IDENTITY = "iPhone Developer: yalin qiu (L8S4MNKW95)";
520 + DEAD_CODE_STRIPPING = NO;
521 + ENABLE_BITCODE = NO;
522 + FRAMEWORK_SEARCH_PATHS = (
523 + "$(inherited)",
524 + "$(PROJECT_DIR)/Demo",
525 + "$(PROJECT_DIR)/poolsdk_file/poolsdk",
526 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"",
527 + );
528 + HEADER_SEARCH_PATHS = (
529 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"",
530 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK/MBProgressHUD\"",
531 + );
532 + INFOPLIST_FILE = poolsdk_file/poolsdk_play800/Info.plist;
533 + IPHONEOS_DEPLOYMENT_TARGET = 8.1;
534 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
535 + LIBRARY_SEARCH_PATHS = (
536 + "$(inherited)",
537 + "$(PROJECT_DIR)/Demo",
538 + "$(PROJECT_DIR)/poolsdk_file/poolsdk",
539 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"",
540 + );
541 + ONLY_ACTIVE_ARCH = NO;
542 + OTHER_LDFLAGS = "-ObjC";
543 + PRODUCT_BUNDLE_IDENTIFIER = com.mhtxyszt.ios;
544 + PRODUCT_NAME = "$(TARGET_NAME)";
545 + PROVISIONING_PROFILE = "d339d2d6-e1a9-4970-ad15-51d2672522a4";
546 + TARGETED_DEVICE_FAMILY = 2;
547 + VALID_ARCHS = "arm64 armv7s";
548 + };
549 + name = Debug;
550 + };
551 + BB5F3CAD1C1811BC00DA339D /* Release */ = {
552 + isa = XCBuildConfiguration;
553 + buildSettings = {
554 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
555 + CODE_SIGN_IDENTITY = "iPhone Developer: yalin qiu (L8S4MNKW95)";
556 + DEAD_CODE_STRIPPING = NO;
557 + ENABLE_BITCODE = NO;
558 + FRAMEWORK_SEARCH_PATHS = (
559 + "$(inherited)",
560 + "$(PROJECT_DIR)/Demo",
561 + "$(PROJECT_DIR)/poolsdk_file/poolsdk",
562 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"",
563 + );
564 + HEADER_SEARCH_PATHS = (
565 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"",
566 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK/MBProgressHUD\"",
567 + );
568 + INFOPLIST_FILE = poolsdk_file/poolsdk_play800/Info.plist;
569 + IPHONEOS_DEPLOYMENT_TARGET = 8.1;
570 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
571 + LIBRARY_SEARCH_PATHS = (
572 + "$(inherited)",
573 + "$(PROJECT_DIR)/Demo",
574 + "$(PROJECT_DIR)/poolsdk_file/poolsdk",
575 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"",
576 + );
577 + ONLY_ACTIVE_ARCH = NO;
578 + OTHER_LDFLAGS = "-ObjC";
579 + PRODUCT_BUNDLE_IDENTIFIER = com.mhtxyszt.ios;
580 + PRODUCT_NAME = "$(TARGET_NAME)";
581 + PROVISIONING_PROFILE = "d339d2d6-e1a9-4970-ad15-51d2672522a4";
582 + TARGETED_DEVICE_FAMILY = 2;
583 + VALID_ARCHS = "arm64 armv7s";
584 + };
585 + name = Release;
586 + };
587 + BB5F3CAF1C1811BC00DA339D /* Debug */ = {
588 + isa = XCBuildConfiguration;
589 + buildSettings = {
590 + BUNDLE_LOADER = "$(TEST_HOST)";
591 + ENABLE_BITCODE = NO;
592 + FRAMEWORK_SEARCH_PATHS = (
593 + "$(SDKROOT)/Developer/Library/Frameworks",
594 + "$(inherited)",
595 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"",
596 + );
597 + GCC_PREPROCESSOR_DEFINITIONS = (
598 + "DEBUG=1",
599 + "$(inherited)",
600 + );
601 + HEADER_SEARCH_PATHS = (
602 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"",
603 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK/MBProgressHUD\"",
604 + );
605 + INFOPLIST_FILE = poolsdk_file/poolsdk_play800/Info.plist;
606 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
607 + LIBRARY_SEARCH_PATHS = "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"";
608 + OTHER_LDFLAGS = "-ObjC";
609 + PRODUCT_BUNDLE_IDENTIFIER = com.hubing.qyj01;
610 + PRODUCT_NAME = "$(TARGET_NAME)";
611 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo.app/Demo";
612 + };
613 + name = Debug;
614 + };
615 + BB5F3CB01C1811BC00DA339D /* Release */ = {
616 + isa = XCBuildConfiguration;
617 + buildSettings = {
618 + BUNDLE_LOADER = "$(TEST_HOST)";
619 + ENABLE_BITCODE = NO;
620 + FRAMEWORK_SEARCH_PATHS = (
621 + "$(SDKROOT)/Developer/Library/Frameworks",
622 + "$(inherited)",
623 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"",
624 + );
625 + HEADER_SEARCH_PATHS = (
626 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"",
627 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK/MBProgressHUD\"",
628 + );
629 + INFOPLIST_FILE = poolsdk_file/poolsdk_play800/Info.plist;
630 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
631 + LIBRARY_SEARCH_PATHS = "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_play800/SDK\"";
632 + OTHER_LDFLAGS = "-ObjC";
633 + PRODUCT_BUNDLE_IDENTIFIER = com.hubing.qyj01;
634 + PRODUCT_NAME = "$(TARGET_NAME)";
635 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo.app/Demo";
636 + };
637 + name = Release;
638 + };
639 +/* End XCBuildConfiguration section */
640 +
641 +/* Begin XCConfigurationList section */
642 + BB5F3C831C1811BC00DA339D /* Build configuration list for PBXProject "Demo_play800" */ = {
643 + isa = XCConfigurationList;
644 + buildConfigurations = (
645 + BB5F3CA91C1811BC00DA339D /* Debug */,
646 + BB5F3CAA1C1811BC00DA339D /* Release */,
647 + );
648 + defaultConfigurationIsVisible = 0;
649 + defaultConfigurationName = Release;
650 + };
651 + BB5F3CAB1C1811BC00DA339D /* Build configuration list for PBXNativeTarget "Demo" */ = {
652 + isa = XCConfigurationList;
653 + buildConfigurations = (
654 + BB5F3CAC1C1811BC00DA339D /* Debug */,
655 + BB5F3CAD1C1811BC00DA339D /* Release */,
656 + );
657 + defaultConfigurationIsVisible = 0;
658 + defaultConfigurationName = Release;
659 + };
660 + BB5F3CAE1C1811BC00DA339D /* Build configuration list for PBXNativeTarget "DemoTests" */ = {
661 + isa = XCConfigurationList;
662 + buildConfigurations = (
663 + BB5F3CAF1C1811BC00DA339D /* Debug */,
664 + BB5F3CB01C1811BC00DA339D /* Release */,
665 + );
666 + defaultConfigurationIsVisible = 0;
667 + defaultConfigurationName = Release;
668 + };
669 +/* End XCConfigurationList section */
670 + };
671 + rootObject = BB5F3C801C1811BC00DA339D /* Project object */;
672 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Workspace
3 + version = "1.0">
4 + <FileRef
5 + location = "self:Demo.xcodeproj">
6 + </FileRef>
7 +</Workspace>
1 +{
2 + "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "D1584AEF25B5C21395F515B62C90B71E0ACB26B2",
3 + "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
4 + "5b13317c-0110-4367-8746-06bc6aadd3cd++2397" : {
5 +
6 + }
7 + },
8 + "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
9 + "D1584AEF25B5C21395F515B62C90B71E0ACB26B2" : 0,
10 + "5b13317c-0110-4367-8746-06bc6aadd3cd++2397" : 0
11 + },
12 + "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "8119CC7B-EDC1-4646-9378-8ECAC2EEB94B",
13 + "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
14 + "D1584AEF25B5C21395F515B62C90B71E0ACB26B2" : "public_sdk_ios\/",
15 + "5b13317c-0110-4367-8746-06bc6aadd3cd++2397" : "youai_foolsdk_ios\/"
16 + },
17 + "DVTSourceControlWorkspaceBlueprintNameKey" : "Demo",
18 + "DVTSourceControlWorkspaceBlueprintVersion" : 204,
19 + "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "PoolSdk_Demo\/Demo.xcodeproj",
20 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
21 + {
22 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "svn:\/\/10.21.210.99",
23 + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Subversion",
24 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "5b13317c-0110-4367-8746-06bc6aadd3cd++2397"
25 + },
26 + {
27 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "ssh:\/\/106.75.192.252:10022\/public_service\/public_sdk_ios.git",
28 + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
29 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "D1584AEF25B5C21395F515B62C90B71E0ACB26B2"
30 + }
31 + ]
32 +}
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Bucket
3 + type = "1"
4 + version = "2.0">
5 + <Breakpoints>
6 + <BreakpointProxy
7 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
8 + <BreakpointContent
9 + shouldBeEnabled = "Yes"
10 + ignoreCount = "0"
11 + continueAfterRunningActions = "No"
12 + filePath = "../PoolSdk/PoolSdk/SDKInterface.m"
13 + timestampString = "471440051.171901"
14 + startingColumnNumber = "9223372036854775807"
15 + endingColumnNumber = "9223372036854775807"
16 + startingLineNumber = "77"
17 + endingLineNumber = "77"
18 + landmarkName = "-receiveLoginMessage:"
19 + landmarkType = "5">
20 + </BreakpointContent>
21 + </BreakpointProxy>
22 + <BreakpointProxy
23 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
24 + <BreakpointContent
25 + shouldBeEnabled = "Yes"
26 + ignoreCount = "0"
27 + continueAfterRunningActions = "No"
28 + filePath = "../PoolSdk/PoolSdk/SDKInterface.m"
29 + timestampString = "471440051.171901"
30 + startingColumnNumber = "9223372036854775807"
31 + endingColumnNumber = "9223372036854775807"
32 + startingLineNumber = "43"
33 + endingLineNumber = "43"
34 + landmarkName = "-SDKloginSDK"
35 + landmarkType = "5">
36 + </BreakpointContent>
37 + </BreakpointProxy>
38 + </Breakpoints>
39 +</Bucket>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Scheme
3 + LastUpgradeVersion = "0640"
4 + version = "1.3">
5 + <BuildAction
6 + parallelizeBuildables = "YES"
7 + buildImplicitDependencies = "YES">
8 + <BuildActionEntries>
9 + <BuildActionEntry
10 + buildForTesting = "YES"
11 + buildForRunning = "YES"
12 + buildForProfiling = "YES"
13 + buildForArchiving = "YES"
14 + buildForAnalyzing = "YES">
15 + <BuildableReference
16 + BuildableIdentifier = "primary"
17 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
18 + BuildableName = "Demo.app"
19 + BlueprintName = "Demo"
20 + ReferencedContainer = "container:Demo.xcodeproj">
21 + </BuildableReference>
22 + </BuildActionEntry>
23 + <BuildActionEntry
24 + buildForTesting = "YES"
25 + buildForRunning = "YES"
26 + buildForProfiling = "NO"
27 + buildForArchiving = "NO"
28 + buildForAnalyzing = "YES">
29 + <BuildableReference
30 + BuildableIdentifier = "primary"
31 + BlueprintIdentifier = "BB5F3CA01C1811BC00DA339D"
32 + BuildableName = "DemoTests.xctest"
33 + BlueprintName = "DemoTests"
34 + ReferencedContainer = "container:Demo.xcodeproj">
35 + </BuildableReference>
36 + </BuildActionEntry>
37 + </BuildActionEntries>
38 + </BuildAction>
39 + <TestAction
40 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
41 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
42 + shouldUseLaunchSchemeArgsEnv = "YES"
43 + buildConfiguration = "Debug">
44 + <Testables>
45 + <TestableReference
46 + skipped = "NO">
47 + <BuildableReference
48 + BuildableIdentifier = "primary"
49 + BlueprintIdentifier = "BB5F3CA01C1811BC00DA339D"
50 + BuildableName = "DemoTests.xctest"
51 + BlueprintName = "DemoTests"
52 + ReferencedContainer = "container:Demo.xcodeproj">
53 + </BuildableReference>
54 + </TestableReference>
55 + </Testables>
56 + <MacroExpansion>
57 + <BuildableReference
58 + BuildableIdentifier = "primary"
59 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
60 + BuildableName = "Demo.app"
61 + BlueprintName = "Demo"
62 + ReferencedContainer = "container:Demo.xcodeproj">
63 + </BuildableReference>
64 + </MacroExpansion>
65 + </TestAction>
66 + <LaunchAction
67 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
68 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
69 + launchStyle = "0"
70 + useCustomWorkingDirectory = "NO"
71 + buildConfiguration = "Debug"
72 + ignoresPersistentStateOnLaunch = "NO"
73 + debugDocumentVersioning = "YES"
74 + allowLocationSimulation = "YES">
75 + <BuildableProductRunnable
76 + runnableDebuggingMode = "0">
77 + <BuildableReference
78 + BuildableIdentifier = "primary"
79 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
80 + BuildableName = "Demo.app"
81 + BlueprintName = "Demo"
82 + ReferencedContainer = "container:Demo.xcodeproj">
83 + </BuildableReference>
84 + </BuildableProductRunnable>
85 + <AdditionalOptions>
86 + </AdditionalOptions>
87 + </LaunchAction>
88 + <ProfileAction
89 + shouldUseLaunchSchemeArgsEnv = "YES"
90 + savedToolIdentifier = ""
91 + useCustomWorkingDirectory = "NO"
92 + buildConfiguration = "Release"
93 + debugDocumentVersioning = "YES">
94 + <BuildableProductRunnable
95 + runnableDebuggingMode = "0">
96 + <BuildableReference
97 + BuildableIdentifier = "primary"
98 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
99 + BuildableName = "Demo.app"
100 + BlueprintName = "Demo"
101 + ReferencedContainer = "container:Demo.xcodeproj">
102 + </BuildableReference>
103 + </BuildableProductRunnable>
104 + </ProfileAction>
105 + <AnalyzeAction
106 + buildConfiguration = "Debug">
107 + </AnalyzeAction>
108 + <ArchiveAction
109 + buildConfiguration = "Release"
110 + revealArchiveInOrganizer = "YES">
111 + </ArchiveAction>
112 +</Scheme>
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>SchemeUserState</key>
6 + <dict>
7 + <key>Demo.xcscheme</key>
8 + <dict>
9 + <key>orderHint</key>
10 + <integer>0</integer>
11 + </dict>
12 + </dict>
13 + <key>SuppressBuildableAutocreation</key>
14 + <dict>
15 + <key>BB5F3C871C1811BC00DA339D</key>
16 + <dict>
17 + <key>primary</key>
18 + <true/>
19 + </dict>
20 + <key>BB5F3CA01C1811BC00DA339D</key>
21 + <dict>
22 + <key>primary</key>
23 + <true/>
24 + </dict>
25 + </dict>
26 +</dict>
27 +</plist>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Bucket
3 + type = "1"
4 + version = "2.0">
5 + <Breakpoints>
6 + <BreakpointProxy
7 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
8 + <BreakpointContent
9 + shouldBeEnabled = "No"
10 + ignoreCount = "0"
11 + continueAfterRunningActions = "No"
12 + filePath = "Demo/SDKInterface.h"
13 + timestampString = "474775745.083759"
14 + startingColumnNumber = "9223372036854775807"
15 + endingColumnNumber = "9223372036854775807"
16 + startingLineNumber = "9"
17 + endingLineNumber = "9"
18 + landmarkName = "@interface SDKInterface"
19 + landmarkType = "2">
20 + </BreakpointContent>
21 + </BreakpointProxy>
22 + </Breakpoints>
23 +</Bucket>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Scheme
3 + LastUpgradeVersion = "0700"
4 + version = "1.3">
5 + <BuildAction
6 + parallelizeBuildables = "YES"
7 + buildImplicitDependencies = "YES">
8 + <BuildActionEntries>
9 + <BuildActionEntry
10 + buildForTesting = "YES"
11 + buildForRunning = "YES"
12 + buildForProfiling = "YES"
13 + buildForArchiving = "YES"
14 + buildForAnalyzing = "YES">
15 + <BuildableReference
16 + BuildableIdentifier = "primary"
17 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
18 + BuildableName = "Demo.app"
19 + BlueprintName = "Demo"
20 + ReferencedContainer = "container:Demo.xcodeproj">
21 + </BuildableReference>
22 + </BuildActionEntry>
23 + </BuildActionEntries>
24 + </BuildAction>
25 + <TestAction
26 + buildConfiguration = "Debug"
27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29 + shouldUseLaunchSchemeArgsEnv = "YES">
30 + <Testables>
31 + <TestableReference
32 + skipped = "NO">
33 + <BuildableReference
34 + BuildableIdentifier = "primary"
35 + BlueprintIdentifier = "BB5F3CA01C1811BC00DA339D"
36 + BuildableName = "DemoTests.xctest"
37 + BlueprintName = "DemoTests"
38 + ReferencedContainer = "container:Demo.xcodeproj">
39 + </BuildableReference>
40 + </TestableReference>
41 + </Testables>
42 + <MacroExpansion>
43 + <BuildableReference
44 + BuildableIdentifier = "primary"
45 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
46 + BuildableName = "Demo.app"
47 + BlueprintName = "Demo"
48 + ReferencedContainer = "container:Demo_play800.xcodeproj">
49 + </BuildableReference>
50 + </MacroExpansion>
51 + <AdditionalOptions>
52 + </AdditionalOptions>
53 + </TestAction>
54 + <LaunchAction
55 + buildConfiguration = "Debug"
56 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
57 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
58 + launchStyle = "0"
59 + useCustomWorkingDirectory = "NO"
60 + ignoresPersistentStateOnLaunch = "NO"
61 + debugDocumentVersioning = "YES"
62 + debugServiceExtension = "internal"
63 + allowLocationSimulation = "YES">
64 + <BuildableProductRunnable
65 + runnableDebuggingMode = "0">
66 + <BuildableReference
67 + BuildableIdentifier = "primary"
68 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
69 + BuildableName = "Demo.app"
70 + BlueprintName = "Demo"
71 + ReferencedContainer = "container:Demo_play800.xcodeproj">
72 + </BuildableReference>
73 + </BuildableProductRunnable>
74 + <AdditionalOptions>
75 + </AdditionalOptions>
76 + </LaunchAction>
77 + <ProfileAction
78 + buildConfiguration = "Release"
79 + shouldUseLaunchSchemeArgsEnv = "YES"
80 + savedToolIdentifier = ""
81 + useCustomWorkingDirectory = "NO"
82 + debugDocumentVersioning = "YES">
83 + <BuildableProductRunnable
84 + runnableDebuggingMode = "0">
85 + <BuildableReference
86 + BuildableIdentifier = "primary"
87 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
88 + BuildableName = "Demo.app"
89 + BlueprintName = "Demo"
90 + ReferencedContainer = "container:Demo.xcodeproj">
91 + </BuildableReference>
92 + </BuildableProductRunnable>
93 + </ProfileAction>
94 + <AnalyzeAction
95 + buildConfiguration = "Debug">
96 + </AnalyzeAction>
97 + <ArchiveAction
98 + buildConfiguration = "Release"
99 + revealArchiveInOrganizer = "YES">
100 + </ArchiveAction>
101 +</Scheme>
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>SchemeUserState</key>
6 + <dict>
7 + <key>Demo.xcscheme</key>
8 + <dict>
9 + <key>orderHint</key>
10 + <integer>0</integer>
11 + </dict>
12 + </dict>
13 + <key>SuppressBuildableAutocreation</key>
14 + <dict>
15 + <key>BB5F3C871C1811BC00DA339D</key>
16 + <dict>
17 + <key>primary</key>
18 + <true/>
19 + </dict>
20 + <key>BB5F3CA01C1811BC00DA339D</key>
21 + <dict>
22 + <key>primary</key>
23 + <true/>
24 + </dict>
25 + </dict>
26 +</dict>
27 +</plist>
1 +// !$*UTF8*$!
2 +{
3 + archiveVersion = 1;
4 + classes = {
5 + };
6 + objectVersion = 46;
7 + objects = {
8 +
9 +/* Begin PBXBuildFile section */
10 + 00ED411ABD0B426880B101D7 /* libc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E984069BEA942145F157BA0 /* libc++.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
11 + 055B4E74A0E1D0A362C40F1B /* QYGameSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15574824A11223CBB9D1D8EE /* QYGameSDK.framework */; };
12 + 05D04F299E662535A9DFBDAF /* AppleIap.m in Sources */ = {isa = PBXBuildFile; fileRef = 36544DBAA62CEBB313C92D3A /* AppleIap.m */; };
13 + 08554FFEBF30A06D1A90B306 /* QYGameSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15574824A11223CBB9D1D8EE /* QYGameSDK.framework */; };
14 + 0DD84DCE951921AF3C8918B4 /* QYGameSDK.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F1004ED7B5BB76E8B9C8130A /* QYGameSDK.bundle */; };
15 + 28B24CB6A081625DE08061F7 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 52B24D53B8475C78BBA761CB /* Info.plist */; };
16 + 33B74DFF8036BBBBF4437716 /* IAPShare.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E214225ACAED044B48FE926 /* IAPShare.m */; };
17 + 44F048EBBCDA6364C0594F75 /* IAPHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 874C46758FFCBB88B7031B42 /* IAPHelper.m */; };
18 + 49BC4611A7BDF894F4027344 /* pool_setting in Resources */ = {isa = PBXBuildFile; fileRef = BDBD484281B34761A4799C2C /* pool_setting */; };
19 + 4EF64CED9DDE0EE30F8379FE /* QYGameSDK.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F1004ED7B5BB76E8B9C8130A /* QYGameSDK.bundle */; };
20 + 4F3546A69FCB92B2CD5AF4A7 /* AppleIap.m in Sources */ = {isa = PBXBuildFile; fileRef = 36544DBAA62CEBB313C92D3A /* AppleIap.m */; };
21 + 53284282BB7D5CFF54D809A9 /* IAPHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 874C46758FFCBB88B7031B42 /* IAPHelper.m */; };
22 + 5A8C4FF0AD7A038290460F42 /* IAPShare.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E214225ACAED044B48FE926 /* IAPShare.m */; };
23 + 5CB94776B81A8546E2087FB0 /* NSString+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F0B4ABE96C1160EC3CD2387 /* NSString+Base64.m */; };
24 + 60E0418FA45110BCD738E7AC /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DBA2400187320F26ABB6BD25 /* libz.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
25 + 62BB40048F58BF831FCFA061 /* SFHFKeychainUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A7540E69560C577F77690F8 /* SFHFKeychainUtils.m */; };
26 + 64924775A22BC91855BA6C0E /* KeychainAccessGroups.plist in Resources */ = {isa = PBXBuildFile; fileRef = 04E74CD9829D943EEAF57513 /* KeychainAccessGroups.plist */; };
27 + 679D450088CAA685ABDFC594 /* ReYunTrack.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 39BA47359BA7237E622A0E4D /* ReYunTrack.a */; };
28 + 698948CE8A09FCBB43B26568 /* qyUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = AC374BA18A28D1FF46EDCBE9 /* qyUtils.m */; };
29 + 7EE549C5B985FB2B881E06F1 /* SDKInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = E3E047ECB40028DAEB2AF850 /* SDKInterface.m */; };
30 + 812D453CB5E596D4C19B1C16 /* qyUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = AC374BA18A28D1FF46EDCBE9 /* qyUtils.m */; };
31 + 8425EC1A1F0E3CBD00B0D868 /* PoolSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8425EC191F0E3CBD00B0D868 /* PoolSdk.framework */; settings = {ASSET_TAGS = (); }; };
32 + 847EE5E21EE9007E003A4B7B /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 847EE5E11EE9007E003A4B7B /* MainViewController.m */; settings = {ASSET_TAGS = (); }; };
33 + 8484E4F51EE7E0DC00B402D1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8484E4F21EE7E0DC00B402D1 /* AppDelegate.m */; settings = {ASSET_TAGS = (); }; };
34 + 8484E4F61EE7E0DC00B402D1 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8484E4F41EE7E0DC00B402D1 /* ViewController.m */; settings = {ASSET_TAGS = (); }; };
35 + 8484E4FC1EE7E1D800B402D1 /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E4FB1EE7E1D800B402D1 /* libsqlite3.dylib */; };
36 + 8484E4FE1EE7E1F700B402D1 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E4FD1EE7E1F700B402D1 /* CoreTelephony.framework */; };
37 + 8484E5001EE7E20C00B402D1 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E4FF1EE7E20C00B402D1 /* CFNetwork.framework */; };
38 + 8484E5021EE7E21F00B402D1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5011EE7E21F00B402D1 /* UIKit.framework */; };
39 + 8484E5041EE7E24400B402D1 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5031EE7E24400B402D1 /* StoreKit.framework */; };
40 + 8484E5061EE7E24A00B402D1 /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5051EE7E24A00B402D1 /* CoreMotion.framework */; };
41 + 8484E5081EE7E25600B402D1 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5071EE7E25600B402D1 /* CoreText.framework */; };
42 + 8484E50A1EE7E26200B402D1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5091EE7E26200B402D1 /* Security.framework */; };
43 + 8484E50C1EE7E27100B402D1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E50B1EE7E27100B402D1 /* CoreGraphics.framework */; };
44 + 8484E50E1EE7E28000B402D1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E50D1EE7E28000B402D1 /* QuartzCore.framework */; };
45 + 8484E5101EE7E29A00B402D1 /* libc++.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E50F1EE7E29A00B402D1 /* libc++.1.dylib */; };
46 + 8484E5121EE7E2B800B402D1 /* libz.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5111EE7E2B800B402D1 /* libz.1.dylib */; };
47 + 8484E5141EE7E2DE00B402D1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5131EE7E2DE00B402D1 /* Foundation.framework */; };
48 + 8484E5161EE7E36800B402D1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5151EE7E36800B402D1 /* SystemConfiguration.framework */; };
49 + 86234DA0B00E02E158BFA711 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 52B24D53B8475C78BBA761CB /* Info.plist */; };
50 + 88754BCA9E81E8C7970224A0 /* p2y9y_private.plist in Resources */ = {isa = PBXBuildFile; fileRef = D7E34CDF8B1D29BAC01E9E19 /* p2y9y_private.plist */; };
51 + 8FE34560B3120BDD939C8E94 /* libc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E984069BEA942145F157BA0 /* libc++.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
52 + B1754F38957F9964DE899FF9 /* SDKInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = E3E047ECB40028DAEB2AF850 /* SDKInterface.m */; };
53 + BB5F3C8E1C1811BC00DA339D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = BB5F3C8D1C1811BC00DA339D /* main.m */; };
54 + BB5F3C971C1811BC00DA339D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BB5F3C951C1811BC00DA339D /* Main.storyboard */; };
55 + BB5F3C9C1C1811BC00DA339D /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB5F3C9A1C1811BC00DA339D /* LaunchScreen.xib */; };
56 + BB5F3CA81C1811BC00DA339D /* DemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = BB5F3CA71C1811BC00DA339D /* DemoTests.m */; };
57 + C33642EF934E05A46D4BCF0D /* KeychainAccessGroups.plist in Resources */ = {isa = PBXBuildFile; fileRef = 04E74CD9829D943EEAF57513 /* KeychainAccessGroups.plist */; };
58 + C6AE4075A91CDC778FAD02B5 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DBA2400187320F26ABB6BD25 /* libz.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
59 + CBB24CA78BE8527437FB3FA6 /* NSString+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F0B4ABE96C1160EC3CD2387 /* NSString+Base64.m */; };
60 + CDAB48FE92FF7F6A03C1329A /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF4567A2F6514A38657FC9 /* AdSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
61 + D08D40B8A871D0B9E76D6218 /* pool_setting in Resources */ = {isa = PBXBuildFile; fileRef = BDBD484281B34761A4799C2C /* pool_setting */; };
62 + F00A4BD3AB498078181BF2C4 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1CF4567A2F6514A38657FC9 /* AdSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
63 + F3CD4B5D867341B41D796511 /* SFHFKeychainUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A7540E69560C577F77690F8 /* SFHFKeychainUtils.m */; };
64 + F4EF4980A8658303408DF4C1 /* ReYunTrack.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 39BA47359BA7237E622A0E4D /* ReYunTrack.a */; };
65 + FECC456CBA21A0B67FC4AA28 /* p2y9y_private.plist in Resources */ = {isa = PBXBuildFile; fileRef = D7E34CDF8B1D29BAC01E9E19 /* p2y9y_private.plist */; };
66 +/* End PBXBuildFile section */
67 +
68 +/* Begin PBXContainerItemProxy section */
69 + BB5F3CA21C1811BC00DA339D /* PBXContainerItemProxy */ = {
70 + isa = PBXContainerItemProxy;
71 + containerPortal = BB5F3C801C1811BC00DA339D /* Project object */;
72 + proxyType = 1;
73 + remoteGlobalIDString = BB5F3C871C1811BC00DA339D;
74 + remoteInfo = Demo;
75 + };
76 +/* End PBXContainerItemProxy section */
77 +
78 +/* Begin PBXCopyFilesBuildPhase section */
79 + 84398BFB1C4C83EC0082D774 /* Embed Frameworks */ = {
80 + isa = PBXCopyFilesBuildPhase;
81 + buildActionMask = 2147483647;
82 + dstPath = "";
83 + dstSubfolderSpec = 10;
84 + files = (
85 + );
86 + name = "Embed Frameworks";
87 + runOnlyForDeploymentPostprocessing = 0;
88 + };
89 +/* End PBXCopyFilesBuildPhase section */
90 +
91 +/* Begin PBXFileReference section */
92 + 04E74CD9829D943EEAF57513 /* KeychainAccessGroups.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = KeychainAccessGroups.plist; path = poolsdk_file/poolsdk_qianyou/SDK/KeychainAccessGroups.plist; sourceTree = SOURCE_ROOT; };
93 + 11A648F09EAAAAC3049109A8 /* NSString+Base64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "NSString+Base64.h"; path = "poolsdk_file/poolsdk_qianyou/SDK/iaphelper/NSString+Base64.h"; sourceTree = SOURCE_ROOT; };
94 + 15574824A11223CBB9D1D8EE /* QYGameSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QYGameSDK.framework; path = poolsdk_file/poolsdk_qianyou/SDK/QYGameSDK.framework; sourceTree = SOURCE_ROOT; };
95 + 173C4351892F18A915D09FB4 /* qyUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = qyUtils.h; path = poolsdk_file/poolsdk_qianyou/SDK/qyUtils.h; sourceTree = SOURCE_ROOT; };
96 + 1A7540E69560C577F77690F8 /* SFHFKeychainUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SFHFKeychainUtils.m; path = poolsdk_file/poolsdk_qianyou/SDK/iaphelper/SFHFKeychainUtils.m; sourceTree = SOURCE_ROOT; };
97 + 31104845AD4F24C62AEA09CA /* ReYunTrack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ReYunTrack.h; path = poolsdk_file/poolsdk_qianyou/SDK/ReYunTrack.h; sourceTree = SOURCE_ROOT; };
98 + 36544DBAA62CEBB313C92D3A /* AppleIap.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = AppleIap.m; path = poolsdk_file/poolsdk_qianyou/SDK/AppleIap.m; sourceTree = SOURCE_ROOT; };
99 + 39BA47359BA7237E622A0E4D /* ReYunTrack.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = ReYunTrack.a; path = poolsdk_file/poolsdk_qianyou/SDK/ReYunTrack.a; sourceTree = SOURCE_ROOT; };
100 + 3E214225ACAED044B48FE926 /* IAPShare.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = IAPShare.m; path = poolsdk_file/poolsdk_qianyou/SDK/iaphelper/IAPShare.m; sourceTree = SOURCE_ROOT; };
101 + 52B24D53B8475C78BBA761CB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = poolsdk_file/poolsdk_qianyou/SDK/Info.plist; sourceTree = SOURCE_ROOT; };
102 + 7716471A9268C6D1C09AAFD3 /* AppleIap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppleIap.h; path = poolsdk_file/poolsdk_qianyou/SDK/AppleIap.h; sourceTree = SOURCE_ROOT; };
103 + 7E984069BEA942145F157BA0 /* libc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libc++.dylib"; path = "/usr/lib/libc++.dylib"; sourceTree = "<absolute>"; };
104 + 7F0B4ABE96C1160EC3CD2387 /* NSString+Base64.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "NSString+Base64.m"; path = "poolsdk_file/poolsdk_qianyou/SDK/iaphelper/NSString+Base64.m"; sourceTree = SOURCE_ROOT; };
105 + 80484C4EB439A887361D8A39 /* SDKInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SDKInterface.h; path = poolsdk_file/poolsdk_qianyou/SDK/SDKInterface.h; sourceTree = SOURCE_ROOT; };
106 + 8425EC191F0E3CBD00B0D868 /* PoolSdk.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = PoolSdk.framework; sourceTree = "<group>"; };
107 + 847EE5E01EE9007E003A4B7B /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = "<group>"; };
108 + 847EE5E11EE9007E003A4B7B /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = "<group>"; };
109 + 8484E4F11EE7E0DC00B402D1 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
110 + 8484E4F21EE7E0DC00B402D1 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
111 + 8484E4F31EE7E0DC00B402D1 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
112 + 8484E4F41EE7E0DC00B402D1 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
113 + 8484E4FB1EE7E1D800B402D1 /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = ../../../../../../../../usr/lib/libsqlite3.dylib; sourceTree = "<group>"; };
114 + 8484E4FD1EE7E1F700B402D1 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };
115 + 8484E4FF1EE7E20C00B402D1 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; };
116 + 8484E5011EE7E21F00B402D1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
117 + 8484E5031EE7E24400B402D1 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
118 + 8484E5051EE7E24A00B402D1 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
119 + 8484E5071EE7E25600B402D1 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
120 + 8484E5091EE7E26200B402D1 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
121 + 8484E50B1EE7E27100B402D1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
122 + 8484E50D1EE7E28000B402D1 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
123 + 8484E50F1EE7E29A00B402D1 /* libc++.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libc++.1.dylib"; path = "../../../../../../../../usr/lib/libc++.1.dylib"; sourceTree = "<group>"; };
124 + 8484E5111EE7E2B800B402D1 /* libz.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.dylib; path = ../../../../../../../../usr/lib/libz.1.dylib; sourceTree = "<group>"; };
125 + 8484E5131EE7E2DE00B402D1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
126 + 8484E5151EE7E36800B402D1 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
127 + 874C46758FFCBB88B7031B42 /* IAPHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = IAPHelper.m; path = poolsdk_file/poolsdk_qianyou/SDK/iaphelper/IAPHelper.m; sourceTree = SOURCE_ROOT; };
128 + AC374BA18A28D1FF46EDCBE9 /* qyUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = qyUtils.m; path = poolsdk_file/poolsdk_qianyou/SDK/qyUtils.m; sourceTree = SOURCE_ROOT; };
129 + AC4E46BC8E52A487FB748229 /* IAPShare.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IAPShare.h; path = poolsdk_file/poolsdk_qianyou/SDK/iaphelper/IAPShare.h; sourceTree = SOURCE_ROOT; };
130 + B1CF4567A2F6514A38657FC9 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; };
131 + BB5F3C881C1811BC00DA339D /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; };
132 + BB5F3C8D1C1811BC00DA339D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
133 + BB5F3C961C1811BC00DA339D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
134 + BB5F3C9B1C1811BC00DA339D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
135 + BB5F3CA11C1811BC00DA339D /* DemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
136 + BB5F3CA61C1811BC00DA339D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
137 + BB5F3CA71C1811BC00DA339D /* DemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DemoTests.m; sourceTree = "<group>"; };
138 + BDBD484281B34761A4799C2C /* pool_setting */ = {isa = PBXFileReference; lastKnownFileType = "?"; name = pool_setting; path = poolsdk_file/poolsdk_qianyou/SDK/pool_setting; sourceTree = SOURCE_ROOT; };
139 + C4DE49828AD373CB12607318 /* SFHFKeychainUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SFHFKeychainUtils.h; path = poolsdk_file/poolsdk_qianyou/SDK/iaphelper/SFHFKeychainUtils.h; sourceTree = SOURCE_ROOT; };
140 + D471429BB881D0FC1376867A /* IAPHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IAPHelper.h; path = poolsdk_file/poolsdk_qianyou/SDK/iaphelper/IAPHelper.h; sourceTree = SOURCE_ROOT; };
141 + D7E34CDF8B1D29BAC01E9E19 /* p2y9y_private.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = p2y9y_private.plist; path = poolsdk_file/poolsdk_qianyou/SDK/p2y9y_private.plist; sourceTree = SOURCE_ROOT; };
142 + DBA2400187320F26ABB6BD25 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
143 + E3E047ECB40028DAEB2AF850 /* SDKInterface.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDKInterface.m; path = poolsdk_file/poolsdk_qianyou/SDK/SDKInterface.m; sourceTree = SOURCE_ROOT; };
144 + F1004ED7B5BB76E8B9C8130A /* QYGameSDK.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = QYGameSDK.bundle; path = poolsdk_file/poolsdk_qianyou/SDK/QYGameSDK.bundle; sourceTree = SOURCE_ROOT; };
145 +/* End PBXFileReference section */
146 +
147 +/* Begin PBXFrameworksBuildPhase section */
148 + BB5F3C851C1811BC00DA339D /* Frameworks */ = {
149 + isa = PBXFrameworksBuildPhase;
150 + buildActionMask = 2147483647;
151 + files = (
152 + 8484E5161EE7E36800B402D1 /* SystemConfiguration.framework in Frameworks */,
153 + 8484E4FC1EE7E1D800B402D1 /* libsqlite3.dylib in Frameworks */,
154 + 8484E5121EE7E2B800B402D1 /* libz.1.dylib in Frameworks */,
155 + 8484E5101EE7E29A00B402D1 /* libc++.1.dylib in Frameworks */,
156 + 8484E5001EE7E20C00B402D1 /* CFNetwork.framework in Frameworks */,
157 + 8484E5061EE7E24A00B402D1 /* CoreMotion.framework in Frameworks */,
158 + 8484E5021EE7E21F00B402D1 /* UIKit.framework in Frameworks */,
159 + 8484E50C1EE7E27100B402D1 /* CoreGraphics.framework in Frameworks */,
160 + 8484E5081EE7E25600B402D1 /* CoreText.framework in Frameworks */,
161 + 8484E50E1EE7E28000B402D1 /* QuartzCore.framework in Frameworks */,
162 + 8484E5141EE7E2DE00B402D1 /* Foundation.framework in Frameworks */,
163 + 8484E50A1EE7E26200B402D1 /* Security.framework in Frameworks */,
164 + 8484E5041EE7E24400B402D1 /* StoreKit.framework in Frameworks */,
165 + 8425EC1A1F0E3CBD00B0D868 /* PoolSdk.framework in Frameworks */,
166 + 8484E4FE1EE7E1F700B402D1 /* CoreTelephony.framework in Frameworks */,
167 + 679D450088CAA685ABDFC594 /* ReYunTrack.a in Frameworks */,
168 + 055B4E74A0E1D0A362C40F1B /* QYGameSDK.framework in Frameworks */,
169 + F00A4BD3AB498078181BF2C4 /* AdSupport.framework in Frameworks */,
170 + 60E0418FA45110BCD738E7AC /* libz.dylib in Frameworks */,
171 + 00ED411ABD0B426880B101D7 /* libc++.dylib in Frameworks */,
172 + );
173 + runOnlyForDeploymentPostprocessing = 0;
174 + };
175 + BB5F3C9E1C1811BC00DA339D /* Frameworks */ = {
176 + isa = PBXFrameworksBuildPhase;
177 + buildActionMask = 2147483647;
178 + files = (
179 + F4EF4980A8658303408DF4C1 /* ReYunTrack.a in Frameworks */,
180 + 08554FFEBF30A06D1A90B306 /* QYGameSDK.framework in Frameworks */,
181 + CDAB48FE92FF7F6A03C1329A /* AdSupport.framework in Frameworks */,
182 + C6AE4075A91CDC778FAD02B5 /* libz.dylib in Frameworks */,
183 + 8FE34560B3120BDD939C8E94 /* libc++.dylib in Frameworks */,
184 + );
185 + runOnlyForDeploymentPostprocessing = 0;
186 + };
187 +/* End PBXFrameworksBuildPhase section */
188 +
189 +/* Begin PBXGroup section */
190 + 131D468BAB1053B0BA2A87B0 /* Frameworks */ = {
191 + isa = PBXGroup;
192 + children = (
193 + B1CF4567A2F6514A38657FC9 /* AdSupport.framework */,
194 + );
195 + name = Frameworks;
196 + sourceTree = "<group>";
197 + };
198 + 2DD240129D2AA24D5E28005F /* SDK */ = {
199 + isa = PBXGroup;
200 + children = (
201 + BDBD484281B34761A4799C2C /* pool_setting */,
202 + D7E34CDF8B1D29BAC01E9E19 /* p2y9y_private.plist */,
203 + 31104845AD4F24C62AEA09CA /* ReYunTrack.h */,
204 + 52B24D53B8475C78BBA761CB /* Info.plist */,
205 + 173C4351892F18A915D09FB4 /* qyUtils.h */,
206 + 39BA47359BA7237E622A0E4D /* ReYunTrack.a */,
207 + 7716471A9268C6D1C09AAFD3 /* AppleIap.h */,
208 + AC374BA18A28D1FF46EDCBE9 /* qyUtils.m */,
209 + E3E047ECB40028DAEB2AF850 /* SDKInterface.m */,
210 + 04E74CD9829D943EEAF57513 /* KeychainAccessGroups.plist */,
211 + 36544DBAA62CEBB313C92D3A /* AppleIap.m */,
212 + 80484C4EB439A887361D8A39 /* SDKInterface.h */,
213 + A3404A019DF6FDD4B6170E49 /* iaphelper */,
214 + F1004ED7B5BB76E8B9C8130A /* QYGameSDK.bundle */,
215 + 15574824A11223CBB9D1D8EE /* QYGameSDK.framework */,
216 + );
217 + name = SDK;
218 + path = poolsdk_file/poolsdk_qianyou/SDK;
219 + sourceTree = SOURCE_ROOT;
220 + };
221 + 8476DF631C4DD70500EC42BA /* poolsdk_file */ = {
222 + isa = PBXGroup;
223 + children = (
224 + );
225 + name = poolsdk_file;
226 + sourceTree = "<group>";
227 + };
228 + A3404A019DF6FDD4B6170E49 /* iaphelper */ = {
229 + isa = PBXGroup;
230 + children = (
231 + 874C46758FFCBB88B7031B42 /* IAPHelper.m */,
232 + C4DE49828AD373CB12607318 /* SFHFKeychainUtils.h */,
233 + D471429BB881D0FC1376867A /* IAPHelper.h */,
234 + 1A7540E69560C577F77690F8 /* SFHFKeychainUtils.m */,
235 + 7F0B4ABE96C1160EC3CD2387 /* NSString+Base64.m */,
236 + 11A648F09EAAAAC3049109A8 /* NSString+Base64.h */,
237 + AC4E46BC8E52A487FB748229 /* IAPShare.h */,
238 + 3E214225ACAED044B48FE926 /* IAPShare.m */,
239 + );
240 + name = iaphelper;
241 + path = poolsdk_file/poolsdk_qianyou/SDK/iaphelper;
242 + sourceTree = SOURCE_ROOT;
243 + };
244 + BB5F3C7F1C1811BC00DA339D = {
245 + isa = PBXGroup;
246 + children = (
247 + 8484E5151EE7E36800B402D1 /* SystemConfiguration.framework */,
248 + 8484E5131EE7E2DE00B402D1 /* Foundation.framework */,
249 + 8484E5111EE7E2B800B402D1 /* libz.1.dylib */,
250 + 8484E50F1EE7E29A00B402D1 /* libc++.1.dylib */,
251 + 8484E50D1EE7E28000B402D1 /* QuartzCore.framework */,
252 + 8484E50B1EE7E27100B402D1 /* CoreGraphics.framework */,
253 + 8484E5091EE7E26200B402D1 /* Security.framework */,
254 + 8484E5071EE7E25600B402D1 /* CoreText.framework */,
255 + 8484E5051EE7E24A00B402D1 /* CoreMotion.framework */,
256 + 8484E5031EE7E24400B402D1 /* StoreKit.framework */,
257 + 8484E5011EE7E21F00B402D1 /* UIKit.framework */,
258 + 8484E4FF1EE7E20C00B402D1 /* CFNetwork.framework */,
259 + 8484E4FD1EE7E1F700B402D1 /* CoreTelephony.framework */,
260 + 8484E4FB1EE7E1D800B402D1 /* libsqlite3.dylib */,
261 + 8476DF631C4DD70500EC42BA /* poolsdk_file */,
262 + BB5F3C8A1C1811BC00DA339D /* Demo */,
263 + BB5F3CA41C1811BC00DA339D /* DemoTests */,
264 + BB5F3C891C1811BC00DA339D /* Products */,
265 + 2DD240129D2AA24D5E28005F /* SDK */,
266 + 131D468BAB1053B0BA2A87B0 /* Frameworks */,
267 + C47346B2A89A2ADCE6E06B2C /* Libraries */,
268 + );
269 + sourceTree = "<group>";
270 + };
271 + BB5F3C891C1811BC00DA339D /* Products */ = {
272 + isa = PBXGroup;
273 + children = (
274 + BB5F3C881C1811BC00DA339D /* Demo.app */,
275 + BB5F3CA11C1811BC00DA339D /* DemoTests.xctest */,
276 + );
277 + name = Products;
278 + sourceTree = "<group>";
279 + };
280 + BB5F3C8A1C1811BC00DA339D /* Demo */ = {
281 + isa = PBXGroup;
282 + children = (
283 + 8425EC191F0E3CBD00B0D868 /* PoolSdk.framework */,
284 + 8484E4F11EE7E0DC00B402D1 /* AppDelegate.h */,
285 + 8484E4F21EE7E0DC00B402D1 /* AppDelegate.m */,
286 + 8484E4F31EE7E0DC00B402D1 /* ViewController.h */,
287 + 8484E4F41EE7E0DC00B402D1 /* ViewController.m */,
288 + 847EE5E01EE9007E003A4B7B /* MainViewController.h */,
289 + 847EE5E11EE9007E003A4B7B /* MainViewController.m */,
290 + BB5F3C951C1811BC00DA339D /* Main.storyboard */,
291 + BB5F3C9A1C1811BC00DA339D /* LaunchScreen.xib */,
292 + BB5F3C8B1C1811BC00DA339D /* Supporting Files */,
293 + );
294 + path = Demo;
295 + sourceTree = "<group>";
296 + };
297 + BB5F3C8B1C1811BC00DA339D /* Supporting Files */ = {
298 + isa = PBXGroup;
299 + children = (
300 + BB5F3C8D1C1811BC00DA339D /* main.m */,
301 + );
302 + name = "Supporting Files";
303 + sourceTree = "<group>";
304 + };
305 + BB5F3CA41C1811BC00DA339D /* DemoTests */ = {
306 + isa = PBXGroup;
307 + children = (
308 + BB5F3CA71C1811BC00DA339D /* DemoTests.m */,
309 + BB5F3CA51C1811BC00DA339D /* Supporting Files */,
310 + );
311 + path = DemoTests;
312 + sourceTree = "<group>";
313 + };
314 + BB5F3CA51C1811BC00DA339D /* Supporting Files */ = {
315 + isa = PBXGroup;
316 + children = (
317 + BB5F3CA61C1811BC00DA339D /* Info.plist */,
318 + );
319 + name = "Supporting Files";
320 + sourceTree = "<group>";
321 + };
322 + C47346B2A89A2ADCE6E06B2C /* Libraries */ = {
323 + isa = PBXGroup;
324 + children = (
325 + DBA2400187320F26ABB6BD25 /* libz.dylib */,
326 + 7E984069BEA942145F157BA0 /* libc++.dylib */,
327 + );
328 + name = Libraries;
329 + sourceTree = "<group>";
330 + };
331 +/* End PBXGroup section */
332 +
333 +/* Begin PBXNativeTarget section */
334 + BB5F3C871C1811BC00DA339D /* Demo */ = {
335 + isa = PBXNativeTarget;
336 + buildConfigurationList = BB5F3CAB1C1811BC00DA339D /* Build configuration list for PBXNativeTarget "Demo" */;
337 + buildPhases = (
338 + BB5F3C841C1811BC00DA339D /* Sources */,
339 + BB5F3C851C1811BC00DA339D /* Frameworks */,
340 + BB5F3C861C1811BC00DA339D /* Resources */,
341 + 84398BFB1C4C83EC0082D774 /* Embed Frameworks */,
342 + );
343 + buildRules = (
344 + );
345 + dependencies = (
346 + );
347 + name = Demo;
348 + productName = Demo;
349 + productReference = BB5F3C881C1811BC00DA339D /* Demo.app */;
350 + productType = "com.apple.product-type.application";
351 + };
352 + BB5F3CA01C1811BC00DA339D /* DemoTests */ = {
353 + isa = PBXNativeTarget;
354 + buildConfigurationList = BB5F3CAE1C1811BC00DA339D /* Build configuration list for PBXNativeTarget "DemoTests" */;
355 + buildPhases = (
356 + BB5F3C9D1C1811BC00DA339D /* Sources */,
357 + BB5F3C9E1C1811BC00DA339D /* Frameworks */,
358 + BB5F3C9F1C1811BC00DA339D /* Resources */,
359 + );
360 + buildRules = (
361 + );
362 + dependencies = (
363 + BB5F3CA31C1811BC00DA339D /* PBXTargetDependency */,
364 + );
365 + name = DemoTests;
366 + productName = DemoTests;
367 + productReference = BB5F3CA11C1811BC00DA339D /* DemoTests.xctest */;
368 + productType = "com.apple.product-type.bundle.unit-test";
369 + };
370 +/* End PBXNativeTarget section */
371 +
372 +/* Begin PBXProject section */
373 + BB5F3C801C1811BC00DA339D /* Project object */ = {
374 + isa = PBXProject;
375 + attributes = {
376 + LastUpgradeCheck = 0640;
377 + ORGANIZATIONNAME = winFan;
378 + TargetAttributes = {
379 + BB5F3C871C1811BC00DA339D = {
380 + CreatedOnToolsVersion = 6.4;
381 + };
382 + BB5F3CA01C1811BC00DA339D = {
383 + CreatedOnToolsVersion = 6.4;
384 + TestTargetID = BB5F3C871C1811BC00DA339D;
385 + };
386 + };
387 + };
388 + buildConfigurationList = BB5F3C831C1811BC00DA339D /* Build configuration list for PBXProject "Demo_qianyou" */;
389 + compatibilityVersion = "Xcode 3.2";
390 + developmentRegion = English;
391 + hasScannedForEncodings = 0;
392 + knownRegions = (
393 + en,
394 + Base,
395 + );
396 + mainGroup = BB5F3C7F1C1811BC00DA339D;
397 + productRefGroup = BB5F3C891C1811BC00DA339D /* Products */;
398 + projectDirPath = "";
399 + projectRoot = "";
400 + targets = (
401 + BB5F3C871C1811BC00DA339D /* Demo */,
402 + BB5F3CA01C1811BC00DA339D /* DemoTests */,
403 + );
404 + };
405 +/* End PBXProject section */
406 +
407 +/* Begin PBXResourcesBuildPhase section */
408 + BB5F3C861C1811BC00DA339D /* Resources */ = {
409 + isa = PBXResourcesBuildPhase;
410 + buildActionMask = 2147483647;
411 + files = (
412 + BB5F3C971C1811BC00DA339D /* Main.storyboard in Resources */,
413 + BB5F3C9C1C1811BC00DA339D /* LaunchScreen.xib in Resources */,
414 + D08D40B8A871D0B9E76D6218 /* pool_setting in Resources */,
415 + 88754BCA9E81E8C7970224A0 /* p2y9y_private.plist in Resources */,
416 + 28B24CB6A081625DE08061F7 /* Info.plist in Resources */,
417 + 64924775A22BC91855BA6C0E /* KeychainAccessGroups.plist in Resources */,
418 + 0DD84DCE951921AF3C8918B4 /* QYGameSDK.bundle in Resources */,
419 + );
420 + runOnlyForDeploymentPostprocessing = 0;
421 + };
422 + BB5F3C9F1C1811BC00DA339D /* Resources */ = {
423 + isa = PBXResourcesBuildPhase;
424 + buildActionMask = 2147483647;
425 + files = (
426 + 49BC4611A7BDF894F4027344 /* pool_setting in Resources */,
427 + FECC456CBA21A0B67FC4AA28 /* p2y9y_private.plist in Resources */,
428 + 86234DA0B00E02E158BFA711 /* Info.plist in Resources */,
429 + C33642EF934E05A46D4BCF0D /* KeychainAccessGroups.plist in Resources */,
430 + 4EF64CED9DDE0EE30F8379FE /* QYGameSDK.bundle in Resources */,
431 + );
432 + runOnlyForDeploymentPostprocessing = 0;
433 + };
434 +/* End PBXResourcesBuildPhase section */
435 +
436 +/* Begin PBXSourcesBuildPhase section */
437 + BB5F3C841C1811BC00DA339D /* Sources */ = {
438 + isa = PBXSourcesBuildPhase;
439 + buildActionMask = 2147483647;
440 + files = (
441 + 8484E4F51EE7E0DC00B402D1 /* AppDelegate.m in Sources */,
442 + 847EE5E21EE9007E003A4B7B /* MainViewController.m in Sources */,
443 + BB5F3C8E1C1811BC00DA339D /* main.m in Sources */,
444 + 8484E4F61EE7E0DC00B402D1 /* ViewController.m in Sources */,
445 + 812D453CB5E596D4C19B1C16 /* qyUtils.m in Sources */,
446 + B1754F38957F9964DE899FF9 /* SDKInterface.m in Sources */,
447 + 4F3546A69FCB92B2CD5AF4A7 /* AppleIap.m in Sources */,
448 + 53284282BB7D5CFF54D809A9 /* IAPHelper.m in Sources */,
449 + F3CD4B5D867341B41D796511 /* SFHFKeychainUtils.m in Sources */,
450 + 5CB94776B81A8546E2087FB0 /* NSString+Base64.m in Sources */,
451 + 33B74DFF8036BBBBF4437716 /* IAPShare.m in Sources */,
452 + );
453 + runOnlyForDeploymentPostprocessing = 0;
454 + };
455 + BB5F3C9D1C1811BC00DA339D /* Sources */ = {
456 + isa = PBXSourcesBuildPhase;
457 + buildActionMask = 2147483647;
458 + files = (
459 + BB5F3CA81C1811BC00DA339D /* DemoTests.m in Sources */,
460 + 698948CE8A09FCBB43B26568 /* qyUtils.m in Sources */,
461 + 7EE549C5B985FB2B881E06F1 /* SDKInterface.m in Sources */,
462 + 05D04F299E662535A9DFBDAF /* AppleIap.m in Sources */,
463 + 44F048EBBCDA6364C0594F75 /* IAPHelper.m in Sources */,
464 + 62BB40048F58BF831FCFA061 /* SFHFKeychainUtils.m in Sources */,
465 + CBB24CA78BE8527437FB3FA6 /* NSString+Base64.m in Sources */,
466 + 5A8C4FF0AD7A038290460F42 /* IAPShare.m in Sources */,
467 + );
468 + runOnlyForDeploymentPostprocessing = 0;
469 + };
470 +/* End PBXSourcesBuildPhase section */
471 +
472 +/* Begin PBXTargetDependency section */
473 + BB5F3CA31C1811BC00DA339D /* PBXTargetDependency */ = {
474 + isa = PBXTargetDependency;
475 + target = BB5F3C871C1811BC00DA339D /* Demo */;
476 + targetProxy = BB5F3CA21C1811BC00DA339D /* PBXContainerItemProxy */;
477 + };
478 +/* End PBXTargetDependency section */
479 +
480 +/* Begin PBXVariantGroup section */
481 + BB5F3C951C1811BC00DA339D /* Main.storyboard */ = {
482 + isa = PBXVariantGroup;
483 + children = (
484 + BB5F3C961C1811BC00DA339D /* Base */,
485 + );
486 + name = Main.storyboard;
487 + sourceTree = "<group>";
488 + };
489 + BB5F3C9A1C1811BC00DA339D /* LaunchScreen.xib */ = {
490 + isa = PBXVariantGroup;
491 + children = (
492 + BB5F3C9B1C1811BC00DA339D /* Base */,
493 + );
494 + name = LaunchScreen.xib;
495 + sourceTree = "<group>";
496 + };
497 +/* End PBXVariantGroup section */
498 +
499 +/* Begin XCBuildConfiguration section */
500 + BB5F3CA91C1811BC00DA339D /* Debug */ = {
501 + isa = XCBuildConfiguration;
502 + buildSettings = {
503 + ALWAYS_SEARCH_USER_PATHS = NO;
504 + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "";
505 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
506 + CLANG_CXX_LIBRARY = "libc++";
507 + CLANG_ENABLE_MODULES = YES;
508 + CLANG_ENABLE_OBJC_ARC = YES;
509 + CLANG_WARN_BOOL_CONVERSION = YES;
510 + CLANG_WARN_CONSTANT_CONVERSION = YES;
511 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
512 + CLANG_WARN_EMPTY_BODY = YES;
513 + CLANG_WARN_ENUM_CONVERSION = YES;
514 + CLANG_WARN_INT_CONVERSION = YES;
515 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
516 + CLANG_WARN_UNREACHABLE_CODE = YES;
517 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
518 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
519 + COPY_PHASE_STRIP = NO;
520 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
521 + ENABLE_BITCODE = NO;
522 + ENABLE_STRICT_OBJC_MSGSEND = YES;
523 + FRAMEWORK_SEARCH_PATHS = "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"";
524 + GCC_C_LANGUAGE_STANDARD = gnu99;
525 + GCC_DYNAMIC_NO_PIC = NO;
526 + GCC_NO_COMMON_BLOCKS = YES;
527 + GCC_OPTIMIZATION_LEVEL = 0;
528 + GCC_PREPROCESSOR_DEFINITIONS = (
529 + "DEBUG=1",
530 + "$(inherited)",
531 + );
532 + GCC_SYMBOLS_PRIVATE_EXTERN = NO;
533 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
534 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
535 + GCC_WARN_UNDECLARED_SELECTOR = YES;
536 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
537 + GCC_WARN_UNUSED_FUNCTION = YES;
538 + GCC_WARN_UNUSED_VARIABLE = YES;
539 + HEADER_SEARCH_PATHS = (
540 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"",
541 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK/iaphelper\"",
542 + );
543 + INFOPLIST_FILE = poolsdk_file/poolsdk_qianyou/Info.plist;
544 + IPHONEOS_DEPLOYMENT_TARGET = 8.4;
545 + LIBRARY_SEARCH_PATHS = "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"";
546 + MTL_ENABLE_DEBUG_INFO = YES;
547 + ONLY_ACTIVE_ARCH = YES;
548 + OTHER_LDFLAGS = "-ObjC";
549 + PRODUCT_BUNDLE_IDENTIFIER = com.pfd.jiankefy;
550 + SDKROOT = iphoneos;
551 + };
552 + name = Debug;
553 + };
554 + BB5F3CAA1C1811BC00DA339D /* Release */ = {
555 + isa = XCBuildConfiguration;
556 + buildSettings = {
557 + ALWAYS_SEARCH_USER_PATHS = NO;
558 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
559 + CLANG_CXX_LIBRARY = "libc++";
560 + CLANG_ENABLE_MODULES = YES;
561 + CLANG_ENABLE_OBJC_ARC = YES;
562 + CLANG_WARN_BOOL_CONVERSION = YES;
563 + CLANG_WARN_CONSTANT_CONVERSION = YES;
564 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
565 + CLANG_WARN_EMPTY_BODY = YES;
566 + CLANG_WARN_ENUM_CONVERSION = YES;
567 + CLANG_WARN_INT_CONVERSION = YES;
568 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
569 + CLANG_WARN_UNREACHABLE_CODE = YES;
570 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
571 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
572 + COPY_PHASE_STRIP = NO;
573 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
574 + ENABLE_BITCODE = NO;
575 + ENABLE_NS_ASSERTIONS = NO;
576 + ENABLE_STRICT_OBJC_MSGSEND = YES;
577 + FRAMEWORK_SEARCH_PATHS = "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"";
578 + GCC_C_LANGUAGE_STANDARD = gnu99;
579 + GCC_NO_COMMON_BLOCKS = YES;
580 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
581 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
582 + GCC_WARN_UNDECLARED_SELECTOR = YES;
583 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
584 + GCC_WARN_UNUSED_FUNCTION = YES;
585 + GCC_WARN_UNUSED_VARIABLE = YES;
586 + HEADER_SEARCH_PATHS = (
587 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"",
588 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK/iaphelper\"",
589 + );
590 + INFOPLIST_FILE = poolsdk_file/poolsdk_qianyou/Info.plist;
591 + IPHONEOS_DEPLOYMENT_TARGET = 8.4;
592 + LIBRARY_SEARCH_PATHS = "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"";
593 + MTL_ENABLE_DEBUG_INFO = NO;
594 + OTHER_LDFLAGS = "-ObjC";
595 + PRODUCT_BUNDLE_IDENTIFIER = com.pfd.jiankefy;
596 + SDKROOT = iphoneos;
597 + VALIDATE_PRODUCT = YES;
598 + };
599 + name = Release;
600 + };
601 + BB5F3CAC1C1811BC00DA339D /* Debug */ = {
602 + isa = XCBuildConfiguration;
603 + buildSettings = {
604 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
605 + CODE_SIGN_IDENTITY = "iPhone Developer: lin pan (V5X25H8T33)";
606 + DEAD_CODE_STRIPPING = NO;
607 + ENABLE_BITCODE = NO;
608 + FRAMEWORK_SEARCH_PATHS = (
609 + "$(inherited)",
610 + "$(PROJECT_DIR)/Demo",
611 + "$(PROJECT_DIR)/poolsdk_file/poolsdk",
612 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"",
613 + );
614 + HEADER_SEARCH_PATHS = (
615 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"",
616 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK/iaphelper\"",
617 + );
618 + INFOPLIST_FILE = poolsdk_file/poolsdk_qianyou/Info.plist;
619 + IPHONEOS_DEPLOYMENT_TARGET = 8.1;
620 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
621 + LIBRARY_SEARCH_PATHS = (
622 + "$(inherited)",
623 + "$(PROJECT_DIR)/Demo",
624 + "$(PROJECT_DIR)/poolsdk_file/poolsdk",
625 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"",
626 + );
627 + ONLY_ACTIVE_ARCH = NO;
628 + OTHER_LDFLAGS = "-ObjC";
629 + PRODUCT_BUNDLE_IDENTIFIER = com.jhap.fengxian;
630 + PRODUCT_NAME = "$(TARGET_NAME)";
631 + PROVISIONING_PROFILE = "abd43790-4dbb-48ef-b278-e016140bf864";
632 + TARGETED_DEVICE_FAMILY = 2;
633 + VALID_ARCHS = "arm64 armv7s";
634 + };
635 + name = Debug;
636 + };
637 + BB5F3CAD1C1811BC00DA339D /* Release */ = {
638 + isa = XCBuildConfiguration;
639 + buildSettings = {
640 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
641 + CODE_SIGN_IDENTITY = "iPhone Developer: lin pan (V5X25H8T33)";
642 + DEAD_CODE_STRIPPING = NO;
643 + ENABLE_BITCODE = NO;
644 + FRAMEWORK_SEARCH_PATHS = (
645 + "$(inherited)",
646 + "$(PROJECT_DIR)/Demo",
647 + "$(PROJECT_DIR)/poolsdk_file/poolsdk",
648 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"",
649 + );
650 + HEADER_SEARCH_PATHS = (
651 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"",
652 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK/iaphelper\"",
653 + );
654 + INFOPLIST_FILE = poolsdk_file/poolsdk_qianyou/Info.plist;
655 + IPHONEOS_DEPLOYMENT_TARGET = 8.1;
656 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
657 + LIBRARY_SEARCH_PATHS = (
658 + "$(inherited)",
659 + "$(PROJECT_DIR)/Demo",
660 + "$(PROJECT_DIR)/poolsdk_file/poolsdk",
661 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"",
662 + );
663 + ONLY_ACTIVE_ARCH = NO;
664 + OTHER_LDFLAGS = "-ObjC";
665 + PRODUCT_BUNDLE_IDENTIFIER = com.jhap.fengxian;
666 + PRODUCT_NAME = "$(TARGET_NAME)";
667 + PROVISIONING_PROFILE = "abd43790-4dbb-48ef-b278-e016140bf864";
668 + TARGETED_DEVICE_FAMILY = 2;
669 + VALID_ARCHS = "arm64 armv7s";
670 + };
671 + name = Release;
672 + };
673 + BB5F3CAF1C1811BC00DA339D /* Debug */ = {
674 + isa = XCBuildConfiguration;
675 + buildSettings = {
676 + BUNDLE_LOADER = "$(TEST_HOST)";
677 + ENABLE_BITCODE = NO;
678 + FRAMEWORK_SEARCH_PATHS = (
679 + "$(SDKROOT)/Developer/Library/Frameworks",
680 + "$(inherited)",
681 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"",
682 + );
683 + GCC_PREPROCESSOR_DEFINITIONS = (
684 + "DEBUG=1",
685 + "$(inherited)",
686 + );
687 + HEADER_SEARCH_PATHS = (
688 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"",
689 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK/iaphelper\"",
690 + );
691 + INFOPLIST_FILE = poolsdk_file/poolsdk_qianyou/Info.plist;
692 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
693 + LIBRARY_SEARCH_PATHS = "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"";
694 + OTHER_LDFLAGS = "-ObjC";
695 + PRODUCT_BUNDLE_IDENTIFIER = com.pfd.jiankefy;
696 + PRODUCT_NAME = "$(TARGET_NAME)";
697 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo.app/Demo";
698 + };
699 + name = Debug;
700 + };
701 + BB5F3CB01C1811BC00DA339D /* Release */ = {
702 + isa = XCBuildConfiguration;
703 + buildSettings = {
704 + BUNDLE_LOADER = "$(TEST_HOST)";
705 + ENABLE_BITCODE = NO;
706 + FRAMEWORK_SEARCH_PATHS = (
707 + "$(SDKROOT)/Developer/Library/Frameworks",
708 + "$(inherited)",
709 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"",
710 + );
711 + HEADER_SEARCH_PATHS = (
712 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"",
713 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK/iaphelper\"",
714 + );
715 + INFOPLIST_FILE = poolsdk_file/poolsdk_qianyou/Info.plist;
716 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
717 + LIBRARY_SEARCH_PATHS = "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_qianyou/SDK\"";
718 + OTHER_LDFLAGS = "-ObjC";
719 + PRODUCT_BUNDLE_IDENTIFIER = com.pfd.jiankefy;
720 + PRODUCT_NAME = "$(TARGET_NAME)";
721 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo.app/Demo";
722 + };
723 + name = Release;
724 + };
725 +/* End XCBuildConfiguration section */
726 +
727 +/* Begin XCConfigurationList section */
728 + BB5F3C831C1811BC00DA339D /* Build configuration list for PBXProject "Demo_qianyou" */ = {
729 + isa = XCConfigurationList;
730 + buildConfigurations = (
731 + BB5F3CA91C1811BC00DA339D /* Debug */,
732 + BB5F3CAA1C1811BC00DA339D /* Release */,
733 + );
734 + defaultConfigurationIsVisible = 0;
735 + defaultConfigurationName = Release;
736 + };
737 + BB5F3CAB1C1811BC00DA339D /* Build configuration list for PBXNativeTarget "Demo" */ = {
738 + isa = XCConfigurationList;
739 + buildConfigurations = (
740 + BB5F3CAC1C1811BC00DA339D /* Debug */,
741 + BB5F3CAD1C1811BC00DA339D /* Release */,
742 + );
743 + defaultConfigurationIsVisible = 0;
744 + defaultConfigurationName = Release;
745 + };
746 + BB5F3CAE1C1811BC00DA339D /* Build configuration list for PBXNativeTarget "DemoTests" */ = {
747 + isa = XCConfigurationList;
748 + buildConfigurations = (
749 + BB5F3CAF1C1811BC00DA339D /* Debug */,
750 + BB5F3CB01C1811BC00DA339D /* Release */,
751 + );
752 + defaultConfigurationIsVisible = 0;
753 + defaultConfigurationName = Release;
754 + };
755 +/* End XCConfigurationList section */
756 + };
757 + rootObject = BB5F3C801C1811BC00DA339D /* Project object */;
758 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Workspace
3 + version = "1.0">
4 + <FileRef
5 + location = "self:Demo.xcodeproj">
6 + </FileRef>
7 +</Workspace>
1 +{
2 + "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "D1584AEF25B5C21395F515B62C90B71E0ACB26B2",
3 + "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
4 + "5b13317c-0110-4367-8746-06bc6aadd3cd++2397" : {
5 +
6 + }
7 + },
8 + "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
9 + "D1584AEF25B5C21395F515B62C90B71E0ACB26B2" : 0,
10 + "5b13317c-0110-4367-8746-06bc6aadd3cd++2397" : 0
11 + },
12 + "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "8119CC7B-EDC1-4646-9378-8ECAC2EEB94B",
13 + "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
14 + "D1584AEF25B5C21395F515B62C90B71E0ACB26B2" : "public_sdk_ios\/",
15 + "5b13317c-0110-4367-8746-06bc6aadd3cd++2397" : "youai_foolsdk_ios\/"
16 + },
17 + "DVTSourceControlWorkspaceBlueprintNameKey" : "Demo",
18 + "DVTSourceControlWorkspaceBlueprintVersion" : 204,
19 + "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "PoolSdk_Demo\/Demo.xcodeproj",
20 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
21 + {
22 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "svn:\/\/10.21.210.99",
23 + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Subversion",
24 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "5b13317c-0110-4367-8746-06bc6aadd3cd++2397"
25 + },
26 + {
27 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "ssh:\/\/106.75.192.252:10022\/public_service\/public_sdk_ios.git",
28 + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
29 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "D1584AEF25B5C21395F515B62C90B71E0ACB26B2"
30 + }
31 + ]
32 +}
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Bucket
3 + type = "1"
4 + version = "2.0">
5 + <Breakpoints>
6 + <BreakpointProxy
7 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
8 + <BreakpointContent
9 + shouldBeEnabled = "Yes"
10 + ignoreCount = "0"
11 + continueAfterRunningActions = "No"
12 + filePath = "../PoolSdk/PoolSdk/SDKInterface.m"
13 + timestampString = "471440051.171901"
14 + startingColumnNumber = "9223372036854775807"
15 + endingColumnNumber = "9223372036854775807"
16 + startingLineNumber = "77"
17 + endingLineNumber = "77"
18 + landmarkName = "-receiveLoginMessage:"
19 + landmarkType = "5">
20 + </BreakpointContent>
21 + </BreakpointProxy>
22 + <BreakpointProxy
23 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
24 + <BreakpointContent
25 + shouldBeEnabled = "Yes"
26 + ignoreCount = "0"
27 + continueAfterRunningActions = "No"
28 + filePath = "../PoolSdk/PoolSdk/SDKInterface.m"
29 + timestampString = "471440051.171901"
30 + startingColumnNumber = "9223372036854775807"
31 + endingColumnNumber = "9223372036854775807"
32 + startingLineNumber = "43"
33 + endingLineNumber = "43"
34 + landmarkName = "-SDKloginSDK"
35 + landmarkType = "5">
36 + </BreakpointContent>
37 + </BreakpointProxy>
38 + </Breakpoints>
39 +</Bucket>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Scheme
3 + LastUpgradeVersion = "0640"
4 + version = "1.3">
5 + <BuildAction
6 + parallelizeBuildables = "YES"
7 + buildImplicitDependencies = "YES">
8 + <BuildActionEntries>
9 + <BuildActionEntry
10 + buildForTesting = "YES"
11 + buildForRunning = "YES"
12 + buildForProfiling = "YES"
13 + buildForArchiving = "YES"
14 + buildForAnalyzing = "YES">
15 + <BuildableReference
16 + BuildableIdentifier = "primary"
17 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
18 + BuildableName = "Demo.app"
19 + BlueprintName = "Demo"
20 + ReferencedContainer = "container:Demo.xcodeproj">
21 + </BuildableReference>
22 + </BuildActionEntry>
23 + <BuildActionEntry
24 + buildForTesting = "YES"
25 + buildForRunning = "YES"
26 + buildForProfiling = "NO"
27 + buildForArchiving = "NO"
28 + buildForAnalyzing = "YES">
29 + <BuildableReference
30 + BuildableIdentifier = "primary"
31 + BlueprintIdentifier = "BB5F3CA01C1811BC00DA339D"
32 + BuildableName = "DemoTests.xctest"
33 + BlueprintName = "DemoTests"
34 + ReferencedContainer = "container:Demo.xcodeproj">
35 + </BuildableReference>
36 + </BuildActionEntry>
37 + </BuildActionEntries>
38 + </BuildAction>
39 + <TestAction
40 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
41 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
42 + shouldUseLaunchSchemeArgsEnv = "YES"
43 + buildConfiguration = "Debug">
44 + <Testables>
45 + <TestableReference
46 + skipped = "NO">
47 + <BuildableReference
48 + BuildableIdentifier = "primary"
49 + BlueprintIdentifier = "BB5F3CA01C1811BC00DA339D"
50 + BuildableName = "DemoTests.xctest"
51 + BlueprintName = "DemoTests"
52 + ReferencedContainer = "container:Demo.xcodeproj">
53 + </BuildableReference>
54 + </TestableReference>
55 + </Testables>
56 + <MacroExpansion>
57 + <BuildableReference
58 + BuildableIdentifier = "primary"
59 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
60 + BuildableName = "Demo.app"
61 + BlueprintName = "Demo"
62 + ReferencedContainer = "container:Demo.xcodeproj">
63 + </BuildableReference>
64 + </MacroExpansion>
65 + </TestAction>
66 + <LaunchAction
67 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
68 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
69 + launchStyle = "0"
70 + useCustomWorkingDirectory = "NO"
71 + buildConfiguration = "Debug"
72 + ignoresPersistentStateOnLaunch = "NO"
73 + debugDocumentVersioning = "YES"
74 + allowLocationSimulation = "YES">
75 + <BuildableProductRunnable
76 + runnableDebuggingMode = "0">
77 + <BuildableReference
78 + BuildableIdentifier = "primary"
79 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
80 + BuildableName = "Demo.app"
81 + BlueprintName = "Demo"
82 + ReferencedContainer = "container:Demo.xcodeproj">
83 + </BuildableReference>
84 + </BuildableProductRunnable>
85 + <AdditionalOptions>
86 + </AdditionalOptions>
87 + </LaunchAction>
88 + <ProfileAction
89 + shouldUseLaunchSchemeArgsEnv = "YES"
90 + savedToolIdentifier = ""
91 + useCustomWorkingDirectory = "NO"
92 + buildConfiguration = "Release"
93 + debugDocumentVersioning = "YES">
94 + <BuildableProductRunnable
95 + runnableDebuggingMode = "0">
96 + <BuildableReference
97 + BuildableIdentifier = "primary"
98 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
99 + BuildableName = "Demo.app"
100 + BlueprintName = "Demo"
101 + ReferencedContainer = "container:Demo.xcodeproj">
102 + </BuildableReference>
103 + </BuildableProductRunnable>
104 + </ProfileAction>
105 + <AnalyzeAction
106 + buildConfiguration = "Debug">
107 + </AnalyzeAction>
108 + <ArchiveAction
109 + buildConfiguration = "Release"
110 + revealArchiveInOrganizer = "YES">
111 + </ArchiveAction>
112 +</Scheme>
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>SchemeUserState</key>
6 + <dict>
7 + <key>Demo.xcscheme</key>
8 + <dict>
9 + <key>orderHint</key>
10 + <integer>0</integer>
11 + </dict>
12 + </dict>
13 + <key>SuppressBuildableAutocreation</key>
14 + <dict>
15 + <key>BB5F3C871C1811BC00DA339D</key>
16 + <dict>
17 + <key>primary</key>
18 + <true/>
19 + </dict>
20 + <key>BB5F3CA01C1811BC00DA339D</key>
21 + <dict>
22 + <key>primary</key>
23 + <true/>
24 + </dict>
25 + </dict>
26 +</dict>
27 +</plist>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Bucket
3 + type = "1"
4 + version = "2.0">
5 + <Breakpoints>
6 + <BreakpointProxy
7 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
8 + <BreakpointContent
9 + shouldBeEnabled = "No"
10 + ignoreCount = "0"
11 + continueAfterRunningActions = "No"
12 + filePath = "Demo/SDKInterface.h"
13 + timestampString = "474775745.083759"
14 + startingColumnNumber = "9223372036854775807"
15 + endingColumnNumber = "9223372036854775807"
16 + startingLineNumber = "9"
17 + endingLineNumber = "9"
18 + landmarkName = "@interface SDKInterface"
19 + landmarkType = "2">
20 + </BreakpointContent>
21 + </BreakpointProxy>
22 + </Breakpoints>
23 +</Bucket>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Scheme
3 + LastUpgradeVersion = "0700"
4 + version = "1.3">
5 + <BuildAction
6 + parallelizeBuildables = "YES"
7 + buildImplicitDependencies = "YES">
8 + <BuildActionEntries>
9 + <BuildActionEntry
10 + buildForTesting = "YES"
11 + buildForRunning = "YES"
12 + buildForProfiling = "YES"
13 + buildForArchiving = "YES"
14 + buildForAnalyzing = "YES">
15 + <BuildableReference
16 + BuildableIdentifier = "primary"
17 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
18 + BuildableName = "Demo.app"
19 + BlueprintName = "Demo"
20 + ReferencedContainer = "container:Demo.xcodeproj">
21 + </BuildableReference>
22 + </BuildActionEntry>
23 + </BuildActionEntries>
24 + </BuildAction>
25 + <TestAction
26 + buildConfiguration = "Debug"
27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29 + shouldUseLaunchSchemeArgsEnv = "YES">
30 + <Testables>
31 + <TestableReference
32 + skipped = "NO">
33 + <BuildableReference
34 + BuildableIdentifier = "primary"
35 + BlueprintIdentifier = "BB5F3CA01C1811BC00DA339D"
36 + BuildableName = "DemoTests.xctest"
37 + BlueprintName = "DemoTests"
38 + ReferencedContainer = "container:Demo.xcodeproj">
39 + </BuildableReference>
40 + </TestableReference>
41 + </Testables>
42 + <MacroExpansion>
43 + <BuildableReference
44 + BuildableIdentifier = "primary"
45 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
46 + BuildableName = "Demo.app"
47 + BlueprintName = "Demo"
48 + ReferencedContainer = "container:Demo_qianyou.xcodeproj">
49 + </BuildableReference>
50 + </MacroExpansion>
51 + <AdditionalOptions>
52 + </AdditionalOptions>
53 + </TestAction>
54 + <LaunchAction
55 + buildConfiguration = "Debug"
56 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
57 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
58 + launchStyle = "0"
59 + useCustomWorkingDirectory = "NO"
60 + ignoresPersistentStateOnLaunch = "NO"
61 + debugDocumentVersioning = "YES"
62 + debugServiceExtension = "internal"
63 + allowLocationSimulation = "YES">
64 + <BuildableProductRunnable
65 + runnableDebuggingMode = "0">
66 + <BuildableReference
67 + BuildableIdentifier = "primary"
68 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
69 + BuildableName = "Demo.app"
70 + BlueprintName = "Demo"
71 + ReferencedContainer = "container:Demo_qianyou.xcodeproj">
72 + </BuildableReference>
73 + </BuildableProductRunnable>
74 + <AdditionalOptions>
75 + </AdditionalOptions>
76 + </LaunchAction>
77 + <ProfileAction
78 + buildConfiguration = "Release"
79 + shouldUseLaunchSchemeArgsEnv = "YES"
80 + savedToolIdentifier = ""
81 + useCustomWorkingDirectory = "NO"
82 + debugDocumentVersioning = "YES">
83 + <BuildableProductRunnable
84 + runnableDebuggingMode = "0">
85 + <BuildableReference
86 + BuildableIdentifier = "primary"
87 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
88 + BuildableName = "Demo.app"
89 + BlueprintName = "Demo"
90 + ReferencedContainer = "container:Demo.xcodeproj">
91 + </BuildableReference>
92 + </BuildableProductRunnable>
93 + </ProfileAction>
94 + <AnalyzeAction
95 + buildConfiguration = "Debug">
96 + </AnalyzeAction>
97 + <ArchiveAction
98 + buildConfiguration = "Release"
99 + revealArchiveInOrganizer = "YES">
100 + </ArchiveAction>
101 +</Scheme>
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>SchemeUserState</key>
6 + <dict>
7 + <key>Demo.xcscheme</key>
8 + <dict>
9 + <key>orderHint</key>
10 + <integer>0</integer>
11 + </dict>
12 + </dict>
13 + <key>SuppressBuildableAutocreation</key>
14 + <dict>
15 + <key>BB5F3C871C1811BC00DA339D</key>
16 + <dict>
17 + <key>primary</key>
18 + <true/>
19 + </dict>
20 + <key>BB5F3CA01C1811BC00DA339D</key>
21 + <dict>
22 + <key>primary</key>
23 + <true/>
24 + </dict>
25 + </dict>
26 +</dict>
27 +</plist>
1 +// !$*UTF8*$!
2 +{
3 + archiveVersion = 1;
4 + classes = {
5 + };
6 + objectVersion = 46;
7 + objects = {
8 +
9 +/* Begin PBXBuildFile section */
10 + 062345E1ABBB2C3A1EA9E1F2 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 670744858A16F1E10BED4D2F /* libz.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
11 + 09AF4E77893C0BA8841245D0 /* XYPieChartView.m in Sources */ = {isa = PBXBuildFile; fileRef = EBFB427996200FC54A3045DB /* XYPieChartView.m */; };
12 + 127444478785CA14E7328ED1 /* PieChart.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC434797A41AC5D23300700C /* PieChart.xcassets */; };
13 + 13FD46848A3CE9D9E564946D /* fackCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D654BEBA260D144E8633F22 /* fackCode.m */; };
14 + 1FC74435B2B0750A9DCEEB37 /* XYCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = 66AA42DD8FC39BDB25ADB114 /* XYCommon.m */; };
15 + 267147A68AD62661516F573D /* WindowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D4C4C799DEA8F12A8F30A46 /* WindowView.m */; };
16 + 29B847B48A5485BBA979C37E /* WindowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D4C4C799DEA8F12A8F30A46 /* WindowView.m */; };
17 + 2B8147E399B4D416BAA09CD3 /* PieChart.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC434797A41AC5D23300700C /* PieChart.xcassets */; };
18 + 2B8547CA80D8BB38EA373D46 /* fackCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D654BEBA260D144E8633F22 /* fackCode.m */; };
19 + 3C2D4C2FB2D96D1F99C5A6C9 /* SDKInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = A95249E2B785F433C16E09F8 /* SDKInterface.m */; };
20 + 3CB147188BBF0C063422B202 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 140841E5B239D3B5760E985F /* AdSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
21 + 422C4A6EA9CA17F79D5EB241 /* XPResource.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D366468492FF60FB3E21CF13 /* XPResource.bundle */; };
22 + 56204E5EA4C3440A19D43D1D /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 140841E5B239D3B5760E985F /* AdSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
23 + 56E74E558ECB8D40CEA1B6EF /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 670744858A16F1E10BED4D2F /* libz.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
24 + 599C405BA8C060143D9D7888 /* XYRotatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 31144476A790C2AC4F721359 /* XYRotatedView.m */; };
25 + 59E74770A02276B354EC89A5 /* MGBSHud.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4FCE454BA44F6CB4494BBA4A /* MGBSHud.framework */; };
26 + 5E394907BA3B085B67618D42 /* jcore-ios-1.1.5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B01B4227837DFD459FB4745F /* jcore-ios-1.1.5.a */; };
27 + 5FC24674978F969595C45038 /* UIView+extension.m in Sources */ = {isa = PBXBuildFile; fileRef = B769446CB4990B0D877A6DDC /* UIView+extension.m */; };
28 + 62494352808F98BB9C4C41D8 /* XpSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60BB4D1682AC2DC26E5526AA /* XpSDK.framework */; };
29 + 64184F768F82486A1E3613B8 /* pool_setting in Resources */ = {isa = PBXBuildFile; fileRef = 15454ABBB8A907B323BB22F1 /* pool_setting */; };
30 + 66A643648B8D01F6C74F9250 /* jcore-ios-1.1.5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B01B4227837DFD459FB4745F /* jcore-ios-1.1.5.a */; };
31 + 6F01485BB3F7DF232F9E1D13 /* XYRenderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 533C4F378D03742608E60D83 /* XYRenderView.m */; };
32 + 6F6D41F89A6F826A7E0B375A /* XYCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = 66AA42DD8FC39BDB25ADB114 /* XYCommon.m */; };
33 + 71294E4DA73F36A2288EA87B /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 977A46CA88A90F03FC5F2803 /* libresolv.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
34 + 8425EC1A1F0E3CBD00B0D868 /* PoolSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8425EC191F0E3CBD00B0D868 /* PoolSdk.framework */; settings = {ASSET_TAGS = (); }; };
35 + 847EE5E21EE9007E003A4B7B /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 847EE5E11EE9007E003A4B7B /* MainViewController.m */; settings = {ASSET_TAGS = (); }; };
36 + 8484E4F51EE7E0DC00B402D1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8484E4F21EE7E0DC00B402D1 /* AppDelegate.m */; settings = {ASSET_TAGS = (); }; };
37 + 8484E4F61EE7E0DC00B402D1 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8484E4F41EE7E0DC00B402D1 /* ViewController.m */; settings = {ASSET_TAGS = (); }; };
38 + 8484E4FC1EE7E1D800B402D1 /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E4FB1EE7E1D800B402D1 /* libsqlite3.dylib */; };
39 + 8484E4FE1EE7E1F700B402D1 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E4FD1EE7E1F700B402D1 /* CoreTelephony.framework */; };
40 + 8484E5001EE7E20C00B402D1 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E4FF1EE7E20C00B402D1 /* CFNetwork.framework */; };
41 + 8484E5021EE7E21F00B402D1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5011EE7E21F00B402D1 /* UIKit.framework */; };
42 + 8484E5041EE7E24400B402D1 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5031EE7E24400B402D1 /* StoreKit.framework */; };
43 + 8484E5061EE7E24A00B402D1 /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5051EE7E24A00B402D1 /* CoreMotion.framework */; };
44 + 8484E5081EE7E25600B402D1 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5071EE7E25600B402D1 /* CoreText.framework */; };
45 + 8484E50A1EE7E26200B402D1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5091EE7E26200B402D1 /* Security.framework */; };
46 + 8484E50C1EE7E27100B402D1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E50B1EE7E27100B402D1 /* CoreGraphics.framework */; };
47 + 8484E50E1EE7E28000B402D1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E50D1EE7E28000B402D1 /* QuartzCore.framework */; };
48 + 8484E5101EE7E29A00B402D1 /* libc++.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E50F1EE7E29A00B402D1 /* libc++.1.dylib */; };
49 + 8484E5121EE7E2B800B402D1 /* libz.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5111EE7E2B800B402D1 /* libz.1.dylib */; };
50 + 8484E5141EE7E2DE00B402D1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5131EE7E2DE00B402D1 /* Foundation.framework */; };
51 + 8484E5161EE7E36800B402D1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8484E5151EE7E36800B402D1 /* SystemConfiguration.framework */; };
52 + 84F0C99F1FA09F810040A023 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F0C99E1FA09F810040A023 /* libz.tbd */; };
53 + 85C04DF3BFE09FFF96EBA77A /* janalytics-ios-1.1.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 20DA476E8534421C70684D5F /* janalytics-ios-1.1.3.a */; };
54 + 9188459BA6A0CA1391B1FBC6 /* MGBSHudBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E7D24D03B3D638309F02B3CE /* MGBSHudBundle.bundle */; };
55 + 97734FA4943D07CDAA6ED1BA /* XYPieChartView.m in Sources */ = {isa = PBXBuildFile; fileRef = EBFB427996200FC54A3045DB /* XYPieChartView.m */; };
56 + A7AE42EF96A061B10279A235 /* UIView+extension.m in Sources */ = {isa = PBXBuildFile; fileRef = B769446CB4990B0D877A6DDC /* UIView+extension.m */; };
57 + BB5F3C8E1C1811BC00DA339D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = BB5F3C8D1C1811BC00DA339D /* main.m */; };
58 + BB5F3C971C1811BC00DA339D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BB5F3C951C1811BC00DA339D /* Main.storyboard */; };
59 + BB5F3C9C1C1811BC00DA339D /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB5F3C9A1C1811BC00DA339D /* LaunchScreen.xib */; };
60 + BB5F3CA81C1811BC00DA339D /* DemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = BB5F3CA71C1811BC00DA339D /* DemoTests.m */; };
61 + C07A4C128CE68CB25D747E88 /* SDKInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = A95249E2B785F433C16E09F8 /* SDKInterface.m */; };
62 + C539499BBF90B8D50986C190 /* XpSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60BB4D1682AC2DC26E5526AA /* XpSDK.framework */; };
63 + DA8942D39DC50DCB14520E99 /* XYRotatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 31144476A790C2AC4F721359 /* XYRotatedView.m */; };
64 + DFB2415285FE66C5C2252043 /* XPResource.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D366468492FF60FB3E21CF13 /* XPResource.bundle */; };
65 + E3A648679F39E19D4DB52E5A /* pool_setting in Resources */ = {isa = PBXBuildFile; fileRef = 15454ABBB8A907B323BB22F1 /* pool_setting */; };
66 + E8D04121932CC01CB18679F1 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 977A46CA88A90F03FC5F2803 /* libresolv.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
67 + F69D4FC486A805D305FEDFA9 /* MGBSHudBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E7D24D03B3D638309F02B3CE /* MGBSHudBundle.bundle */; };
68 + FC3B468EAE1A5CC796F20029 /* MGBSHud.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4FCE454BA44F6CB4494BBA4A /* MGBSHud.framework */; };
69 + FE8C4E4A977421AB7F93D60D /* XYRenderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 533C4F378D03742608E60D83 /* XYRenderView.m */; };
70 + FED24FFF8CD5ED3018ED195C /* janalytics-ios-1.1.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 20DA476E8534421C70684D5F /* janalytics-ios-1.1.3.a */; };
71 +/* End PBXBuildFile section */
72 +
73 +/* Begin PBXContainerItemProxy section */
74 + BB5F3CA21C1811BC00DA339D /* PBXContainerItemProxy */ = {
75 + isa = PBXContainerItemProxy;
76 + containerPortal = BB5F3C801C1811BC00DA339D /* Project object */;
77 + proxyType = 1;
78 + remoteGlobalIDString = BB5F3C871C1811BC00DA339D;
79 + remoteInfo = Demo;
80 + };
81 +/* End PBXContainerItemProxy section */
82 +
83 +/* Begin PBXCopyFilesBuildPhase section */
84 + 84398BFB1C4C83EC0082D774 /* Embed Frameworks */ = {
85 + isa = PBXCopyFilesBuildPhase;
86 + buildActionMask = 2147483647;
87 + dstPath = "";
88 + dstSubfolderSpec = 10;
89 + files = (
90 + );
91 + name = "Embed Frameworks";
92 + runOnlyForDeploymentPostprocessing = 0;
93 + };
94 +/* End PBXCopyFilesBuildPhase section */
95 +
96 +/* Begin PBXFileReference section */
97 + 140841E5B239D3B5760E985F /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; };
98 + 15454ABBB8A907B323BB22F1 /* pool_setting */ = {isa = PBXFileReference; lastKnownFileType = "?"; name = pool_setting; path = poolsdk_file/poolsdk_xipu/SDK/pool_setting; sourceTree = SOURCE_ROOT; };
99 + 1D654BEBA260D144E8633F22 /* fackCode.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = fackCode.m; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/fackCode.m; sourceTree = SOURCE_ROOT; };
100 + 1D854BA0A305791979583706 /* XYRenderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = XYRenderView.h; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView/XYRenderView.h; sourceTree = SOURCE_ROOT; };
101 + 20DA476E8534421C70684D5F /* janalytics-ios-1.1.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "janalytics-ios-1.1.3.a"; path = "poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics/janalytics-ios-1.1.3.a"; sourceTree = SOURCE_ROOT; };
102 + 2ADA47C2A7A76E56A793B5F9 /* SDKInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SDKInterface.h; path = poolsdk_file/poolsdk_xipu/SDK/SDKInterface.h; sourceTree = SOURCE_ROOT; };
103 + 31144476A790C2AC4F721359 /* XYRotatedView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = XYRotatedView.m; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView/XYRotatedView.m; sourceTree = SOURCE_ROOT; };
104 + 3ED94C959D56902AFE93BD06 /* XYPieChartView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = XYPieChartView.h; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView/XYPieChartView.h; sourceTree = SOURCE_ROOT; };
105 + 44204E0983A9F8C22AFD69F9 /* UIView+extension.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "UIView+extension.h"; path = "poolsdk_file/poolsdk_xipu/SDK/ResourceCode/UIView+extension.h"; sourceTree = SOURCE_ROOT; };
106 + 4FCE454BA44F6CB4494BBA4A /* MGBSHud.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MGBSHud.framework; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MGBSHudFramework/MGBSHud.framework; sourceTree = SOURCE_ROOT; };
107 + 533C4F378D03742608E60D83 /* XYRenderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = XYRenderView.m; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView/XYRenderView.m; sourceTree = SOURCE_ROOT; };
108 + 60BB4D1682AC2DC26E5526AA /* XpSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XpSDK.framework; path = poolsdk_file/poolsdk_xipu/SDK/XpSDK.framework; sourceTree = SOURCE_ROOT; };
109 + 66AA42DD8FC39BDB25ADB114 /* XYCommon.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = XYCommon.m; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView/XYCommon.m; sourceTree = SOURCE_ROOT; };
110 + 670744858A16F1E10BED4D2F /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
111 + 6E7F426C95B67B9394D1957D /* XYCommon.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = XYCommon.h; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView/XYCommon.h; sourceTree = SOURCE_ROOT; };
112 + 70DC4E4DBE2136652B461E82 /* XYRotatedView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = XYRotatedView.h; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView/XYRotatedView.h; sourceTree = SOURCE_ROOT; };
113 + 7D4C4C799DEA8F12A8F30A46 /* WindowView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = WindowView.m; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/WindowView.m; sourceTree = SOURCE_ROOT; };
114 + 8425EC191F0E3CBD00B0D868 /* PoolSdk.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = PoolSdk.framework; sourceTree = "<group>"; };
115 + 847EE5E01EE9007E003A4B7B /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = "<group>"; };
116 + 847EE5E11EE9007E003A4B7B /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = "<group>"; };
117 + 8484E4F11EE7E0DC00B402D1 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
118 + 8484E4F21EE7E0DC00B402D1 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
119 + 8484E4F31EE7E0DC00B402D1 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
120 + 8484E4F41EE7E0DC00B402D1 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
121 + 8484E4FB1EE7E1D800B402D1 /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = ../../../../../../../../usr/lib/libsqlite3.dylib; sourceTree = "<group>"; };
122 + 8484E4FD1EE7E1F700B402D1 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };
123 + 8484E4FF1EE7E20C00B402D1 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; };
124 + 8484E5011EE7E21F00B402D1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
125 + 8484E5031EE7E24400B402D1 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
126 + 8484E5051EE7E24A00B402D1 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
127 + 8484E5071EE7E25600B402D1 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
128 + 8484E5091EE7E26200B402D1 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
129 + 8484E50B1EE7E27100B402D1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
130 + 8484E50D1EE7E28000B402D1 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
131 + 8484E50F1EE7E29A00B402D1 /* libc++.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libc++.1.dylib"; path = "../../../../../../../../usr/lib/libc++.1.dylib"; sourceTree = "<group>"; };
132 + 8484E5111EE7E2B800B402D1 /* libz.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.dylib; path = ../../../../../../../../usr/lib/libz.1.dylib; sourceTree = "<group>"; };
133 + 8484E5131EE7E2DE00B402D1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
134 + 8484E5151EE7E36800B402D1 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
135 + 84F0C99E1FA09F810040A023 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
136 + 977A46CA88A90F03FC5F2803 /* libresolv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libresolv.dylib; path = /usr/lib/libresolv.dylib; sourceTree = "<absolute>"; };
137 + A248420B81CF10FBA8286985 /* WindowView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WindowView.h; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/WindowView.h; sourceTree = SOURCE_ROOT; };
138 + A3C24294BC587B180D4FAC5B /* JANALYTICSService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JANALYTICSService.h; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics/JANALYTICSService.h; sourceTree = SOURCE_ROOT; };
139 + A95249E2B785F433C16E09F8 /* SDKInterface.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDKInterface.m; path = poolsdk_file/poolsdk_xipu/SDK/SDKInterface.m; sourceTree = SOURCE_ROOT; };
140 + B01B4227837DFD459FB4745F /* jcore-ios-1.1.5.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "jcore-ios-1.1.5.a"; path = "poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics/jcore-ios-1.1.5.a"; sourceTree = SOURCE_ROOT; };
141 + B67F46B0AB01BC8F30D0DD2A /* fackCode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fackCode.h; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/fackCode.h; sourceTree = SOURCE_ROOT; };
142 + B769446CB4990B0D877A6DDC /* UIView+extension.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "UIView+extension.m"; path = "poolsdk_file/poolsdk_xipu/SDK/ResourceCode/UIView+extension.m"; sourceTree = SOURCE_ROOT; };
143 + BB5F3C881C1811BC00DA339D /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; };
144 + BB5F3C8D1C1811BC00DA339D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
145 + BB5F3C961C1811BC00DA339D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
146 + BB5F3C9B1C1811BC00DA339D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
147 + BB5F3CA11C1811BC00DA339D /* DemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
148 + BB5F3CA61C1811BC00DA339D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
149 + BB5F3CA71C1811BC00DA339D /* DemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DemoTests.m; sourceTree = "<group>"; };
150 + CD484B898BDF5F21ED20EF1F /* JANALYTICSEventObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JANALYTICSEventObject.h; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics/JANALYTICSEventObject.h; sourceTree = SOURCE_ROOT; };
151 + D366468492FF60FB3E21CF13 /* XPResource.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = XPResource.bundle; path = poolsdk_file/poolsdk_xipu/SDK/XPResource.bundle; sourceTree = SOURCE_ROOT; };
152 + E7D24D03B3D638309F02B3CE /* MGBSHudBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = MGBSHudBundle.bundle; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MGBSHudFramework/MGBSHudBundle.bundle; sourceTree = SOURCE_ROOT; };
153 + EBFB427996200FC54A3045DB /* XYPieChartView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = XYPieChartView.m; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView/XYPieChartView.m; sourceTree = SOURCE_ROOT; };
154 + EC434797A41AC5D23300700C /* PieChart.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = PieChart.xcassets; path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView/PieChart.xcassets; sourceTree = SOURCE_ROOT; };
155 +/* End PBXFileReference section */
156 +
157 +/* Begin PBXFrameworksBuildPhase section */
158 + BB5F3C851C1811BC00DA339D /* Frameworks */ = {
159 + isa = PBXFrameworksBuildPhase;
160 + buildActionMask = 2147483647;
161 + files = (
162 + 84F0C99F1FA09F810040A023 /* libz.tbd in Frameworks */,
163 + 8484E5161EE7E36800B402D1 /* SystemConfiguration.framework in Frameworks */,
164 + 8484E4FC1EE7E1D800B402D1 /* libsqlite3.dylib in Frameworks */,
165 + 8484E5121EE7E2B800B402D1 /* libz.1.dylib in Frameworks */,
166 + 8484E5101EE7E29A00B402D1 /* libc++.1.dylib in Frameworks */,
167 + 8484E5001EE7E20C00B402D1 /* CFNetwork.framework in Frameworks */,
168 + 8484E5061EE7E24A00B402D1 /* CoreMotion.framework in Frameworks */,
169 + 8484E5021EE7E21F00B402D1 /* UIKit.framework in Frameworks */,
170 + 8484E50C1EE7E27100B402D1 /* CoreGraphics.framework in Frameworks */,
171 + 8484E5081EE7E25600B402D1 /* CoreText.framework in Frameworks */,
172 + 8484E50E1EE7E28000B402D1 /* QuartzCore.framework in Frameworks */,
173 + 8484E5141EE7E2DE00B402D1 /* Foundation.framework in Frameworks */,
174 + 8484E50A1EE7E26200B402D1 /* Security.framework in Frameworks */,
175 + 8484E5041EE7E24400B402D1 /* StoreKit.framework in Frameworks */,
176 + 8425EC1A1F0E3CBD00B0D868 /* PoolSdk.framework in Frameworks */,
177 + 8484E4FE1EE7E1F700B402D1 /* CoreTelephony.framework in Frameworks */,
178 + FED24FFF8CD5ED3018ED195C /* janalytics-ios-1.1.3.a in Frameworks */,
179 + 66A643648B8D01F6C74F9250 /* jcore-ios-1.1.5.a in Frameworks */,
180 + 59E74770A02276B354EC89A5 /* MGBSHud.framework in Frameworks */,
181 + 62494352808F98BB9C4C41D8 /* XpSDK.framework in Frameworks */,
182 + 3CB147188BBF0C063422B202 /* AdSupport.framework in Frameworks */,
183 + 062345E1ABBB2C3A1EA9E1F2 /* libz.dylib in Frameworks */,
184 + E8D04121932CC01CB18679F1 /* libresolv.dylib in Frameworks */,
185 + );
186 + runOnlyForDeploymentPostprocessing = 0;
187 + };
188 + BB5F3C9E1C1811BC00DA339D /* Frameworks */ = {
189 + isa = PBXFrameworksBuildPhase;
190 + buildActionMask = 2147483647;
191 + files = (
192 + 85C04DF3BFE09FFF96EBA77A /* janalytics-ios-1.1.3.a in Frameworks */,
193 + 5E394907BA3B085B67618D42 /* jcore-ios-1.1.5.a in Frameworks */,
194 + FC3B468EAE1A5CC796F20029 /* MGBSHud.framework in Frameworks */,
195 + C539499BBF90B8D50986C190 /* XpSDK.framework in Frameworks */,
196 + 56204E5EA4C3440A19D43D1D /* AdSupport.framework in Frameworks */,
197 + 56E74E558ECB8D40CEA1B6EF /* libz.dylib in Frameworks */,
198 + 71294E4DA73F36A2288EA87B /* libresolv.dylib in Frameworks */,
199 + );
200 + runOnlyForDeploymentPostprocessing = 0;
201 + };
202 +/* End PBXFrameworksBuildPhase section */
203 +
204 +/* Begin PBXGroup section */
205 + 3BD745448926286BB529B20C /* MGBSHudFramework */ = {
206 + isa = PBXGroup;
207 + children = (
208 + 4FCE454BA44F6CB4494BBA4A /* MGBSHud.framework */,
209 + E7D24D03B3D638309F02B3CE /* MGBSHudBundle.bundle */,
210 + );
211 + name = MGBSHudFramework;
212 + path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MGBSHudFramework;
213 + sourceTree = SOURCE_ROOT;
214 + };
215 + 5F36493A8587902411A078CB /* Frameworks */ = {
216 + isa = PBXGroup;
217 + children = (
218 + 84F0C99E1FA09F810040A023 /* libz.tbd */,
219 + 140841E5B239D3B5760E985F /* AdSupport.framework */,
220 + );
221 + name = Frameworks;
222 + sourceTree = "<group>";
223 + };
224 + 77D9440780B15FA42220F2A5 /* Libraries */ = {
225 + isa = PBXGroup;
226 + children = (
227 + 670744858A16F1E10BED4D2F /* libz.dylib */,
228 + 977A46CA88A90F03FC5F2803 /* libresolv.dylib */,
229 + );
230 + name = Libraries;
231 + sourceTree = "<group>";
232 + };
233 + 8476DF631C4DD70500EC42BA /* poolsdk_file */ = {
234 + isa = PBXGroup;
235 + children = (
236 + );
237 + name = poolsdk_file;
238 + sourceTree = "<group>";
239 + };
240 + 9FAA4C389D3997D4813CD6A8 /* JGStatistics */ = {
241 + isa = PBXGroup;
242 + children = (
243 + 20DA476E8534421C70684D5F /* janalytics-ios-1.1.3.a */,
244 + A3C24294BC587B180D4FAC5B /* JANALYTICSService.h */,
245 + CD484B898BDF5F21ED20EF1F /* JANALYTICSEventObject.h */,
246 + B01B4227837DFD459FB4745F /* jcore-ios-1.1.5.a */,
247 + );
248 + name = JGStatistics;
249 + path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics;
250 + sourceTree = SOURCE_ROOT;
251 + };
252 + A0EA44058D9D904443DB0C01 /* SDK */ = {
253 + isa = PBXGroup;
254 + children = (
255 + 2ADA47C2A7A76E56A793B5F9 /* SDKInterface.h */,
256 + 15454ABBB8A907B323BB22F1 /* pool_setting */,
257 + A95249E2B785F433C16E09F8 /* SDKInterface.m */,
258 + BAF04CC6B0E99F3AFE4063BD /* ResourceCode */,
259 + D366468492FF60FB3E21CF13 /* XPResource.bundle */,
260 + 60BB4D1682AC2DC26E5526AA /* XpSDK.framework */,
261 + );
262 + name = SDK;
263 + path = poolsdk_file/poolsdk_xipu/SDK;
264 + sourceTree = SOURCE_ROOT;
265 + };
266 + BAF04CC6B0E99F3AFE4063BD /* ResourceCode */ = {
267 + isa = PBXGroup;
268 + children = (
269 + B67F46B0AB01BC8F30D0DD2A /* fackCode.h */,
270 + A248420B81CF10FBA8286985 /* WindowView.h */,
271 + 1D654BEBA260D144E8633F22 /* fackCode.m */,
272 + 7D4C4C799DEA8F12A8F30A46 /* WindowView.m */,
273 + B769446CB4990B0D877A6DDC /* UIView+extension.m */,
274 + 44204E0983A9F8C22AFD69F9 /* UIView+extension.h */,
275 + 9FAA4C389D3997D4813CD6A8 /* JGStatistics */,
276 + 3BD745448926286BB529B20C /* MGBSHudFramework */,
277 + FD554497B71E4F8FEDC9E5F0 /* MMCategory */,
278 + CDD84C40A9CF4231DD162B10 /* PieChartView */,
279 + );
280 + name = ResourceCode;
281 + path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode;
282 + sourceTree = SOURCE_ROOT;
283 + };
284 + BB5F3C7F1C1811BC00DA339D = {
285 + isa = PBXGroup;
286 + children = (
287 + 8484E5151EE7E36800B402D1 /* SystemConfiguration.framework */,
288 + 8484E5131EE7E2DE00B402D1 /* Foundation.framework */,
289 + 8484E5111EE7E2B800B402D1 /* libz.1.dylib */,
290 + 8484E50F1EE7E29A00B402D1 /* libc++.1.dylib */,
291 + 8484E50D1EE7E28000B402D1 /* QuartzCore.framework */,
292 + 8484E50B1EE7E27100B402D1 /* CoreGraphics.framework */,
293 + 8484E5091EE7E26200B402D1 /* Security.framework */,
294 + 8484E5071EE7E25600B402D1 /* CoreText.framework */,
295 + 8484E5051EE7E24A00B402D1 /* CoreMotion.framework */,
296 + 8484E5031EE7E24400B402D1 /* StoreKit.framework */,
297 + 8484E5011EE7E21F00B402D1 /* UIKit.framework */,
298 + 8484E4FF1EE7E20C00B402D1 /* CFNetwork.framework */,
299 + 8484E4FD1EE7E1F700B402D1 /* CoreTelephony.framework */,
300 + 8484E4FB1EE7E1D800B402D1 /* libsqlite3.dylib */,
301 + 8476DF631C4DD70500EC42BA /* poolsdk_file */,
302 + BB5F3C8A1C1811BC00DA339D /* Demo */,
303 + BB5F3CA41C1811BC00DA339D /* DemoTests */,
304 + BB5F3C891C1811BC00DA339D /* Products */,
305 + A0EA44058D9D904443DB0C01 /* SDK */,
306 + 5F36493A8587902411A078CB /* Frameworks */,
307 + 77D9440780B15FA42220F2A5 /* Libraries */,
308 + );
309 + sourceTree = "<group>";
310 + };
311 + BB5F3C891C1811BC00DA339D /* Products */ = {
312 + isa = PBXGroup;
313 + children = (
314 + BB5F3C881C1811BC00DA339D /* Demo.app */,
315 + BB5F3CA11C1811BC00DA339D /* DemoTests.xctest */,
316 + );
317 + name = Products;
318 + sourceTree = "<group>";
319 + };
320 + BB5F3C8A1C1811BC00DA339D /* Demo */ = {
321 + isa = PBXGroup;
322 + children = (
323 + 8425EC191F0E3CBD00B0D868 /* PoolSdk.framework */,
324 + 8484E4F11EE7E0DC00B402D1 /* AppDelegate.h */,
325 + 8484E4F21EE7E0DC00B402D1 /* AppDelegate.m */,
326 + 8484E4F31EE7E0DC00B402D1 /* ViewController.h */,
327 + 8484E4F41EE7E0DC00B402D1 /* ViewController.m */,
328 + 847EE5E01EE9007E003A4B7B /* MainViewController.h */,
329 + 847EE5E11EE9007E003A4B7B /* MainViewController.m */,
330 + BB5F3C951C1811BC00DA339D /* Main.storyboard */,
331 + BB5F3C9A1C1811BC00DA339D /* LaunchScreen.xib */,
332 + BB5F3C8B1C1811BC00DA339D /* Supporting Files */,
333 + );
334 + path = Demo;
335 + sourceTree = "<group>";
336 + };
337 + BB5F3C8B1C1811BC00DA339D /* Supporting Files */ = {
338 + isa = PBXGroup;
339 + children = (
340 + BB5F3C8D1C1811BC00DA339D /* main.m */,
341 + );
342 + name = "Supporting Files";
343 + sourceTree = "<group>";
344 + };
345 + BB5F3CA41C1811BC00DA339D /* DemoTests */ = {
346 + isa = PBXGroup;
347 + children = (
348 + BB5F3CA71C1811BC00DA339D /* DemoTests.m */,
349 + BB5F3CA51C1811BC00DA339D /* Supporting Files */,
350 + );
351 + path = DemoTests;
352 + sourceTree = "<group>";
353 + };
354 + BB5F3CA51C1811BC00DA339D /* Supporting Files */ = {
355 + isa = PBXGroup;
356 + children = (
357 + BB5F3CA61C1811BC00DA339D /* Info.plist */,
358 + );
359 + name = "Supporting Files";
360 + sourceTree = "<group>";
361 + };
362 + CDD84C40A9CF4231DD162B10 /* PieChartView */ = {
363 + isa = PBXGroup;
364 + children = (
365 + 533C4F378D03742608E60D83 /* XYRenderView.m */,
366 + 1D854BA0A305791979583706 /* XYRenderView.h */,
367 + EBFB427996200FC54A3045DB /* XYPieChartView.m */,
368 + 3ED94C959D56902AFE93BD06 /* XYPieChartView.h */,
369 + 66AA42DD8FC39BDB25ADB114 /* XYCommon.m */,
370 + 70DC4E4DBE2136652B461E82 /* XYRotatedView.h */,
371 + 6E7F426C95B67B9394D1957D /* XYCommon.h */,
372 + 31144476A790C2AC4F721359 /* XYRotatedView.m */,
373 + EC434797A41AC5D23300700C /* PieChart.xcassets */,
374 + );
375 + name = PieChartView;
376 + path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView;
377 + sourceTree = SOURCE_ROOT;
378 + };
379 + FD554497B71E4F8FEDC9E5F0 /* MMCategory */ = {
380 + isa = PBXGroup;
381 + children = (
382 + );
383 + name = MMCategory;
384 + path = poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MMCategory;
385 + sourceTree = SOURCE_ROOT;
386 + };
387 +/* End PBXGroup section */
388 +
389 +/* Begin PBXNativeTarget section */
390 + BB5F3C871C1811BC00DA339D /* Demo */ = {
391 + isa = PBXNativeTarget;
392 + buildConfigurationList = BB5F3CAB1C1811BC00DA339D /* Build configuration list for PBXNativeTarget "Demo" */;
393 + buildPhases = (
394 + BB5F3C841C1811BC00DA339D /* Sources */,
395 + BB5F3C851C1811BC00DA339D /* Frameworks */,
396 + BB5F3C861C1811BC00DA339D /* Resources */,
397 + 84398BFB1C4C83EC0082D774 /* Embed Frameworks */,
398 + );
399 + buildRules = (
400 + );
401 + dependencies = (
402 + );
403 + name = Demo;
404 + productName = Demo;
405 + productReference = BB5F3C881C1811BC00DA339D /* Demo.app */;
406 + productType = "com.apple.product-type.application";
407 + };
408 + BB5F3CA01C1811BC00DA339D /* DemoTests */ = {
409 + isa = PBXNativeTarget;
410 + buildConfigurationList = BB5F3CAE1C1811BC00DA339D /* Build configuration list for PBXNativeTarget "DemoTests" */;
411 + buildPhases = (
412 + BB5F3C9D1C1811BC00DA339D /* Sources */,
413 + BB5F3C9E1C1811BC00DA339D /* Frameworks */,
414 + BB5F3C9F1C1811BC00DA339D /* Resources */,
415 + );
416 + buildRules = (
417 + );
418 + dependencies = (
419 + BB5F3CA31C1811BC00DA339D /* PBXTargetDependency */,
420 + );
421 + name = DemoTests;
422 + productName = DemoTests;
423 + productReference = BB5F3CA11C1811BC00DA339D /* DemoTests.xctest */;
424 + productType = "com.apple.product-type.bundle.unit-test";
425 + };
426 +/* End PBXNativeTarget section */
427 +
428 +/* Begin PBXProject section */
429 + BB5F3C801C1811BC00DA339D /* Project object */ = {
430 + isa = PBXProject;
431 + attributes = {
432 + LastUpgradeCheck = 0640;
433 + ORGANIZATIONNAME = winFan;
434 + TargetAttributes = {
435 + BB5F3C871C1811BC00DA339D = {
436 + CreatedOnToolsVersion = 6.4;
437 + };
438 + BB5F3CA01C1811BC00DA339D = {
439 + CreatedOnToolsVersion = 6.4;
440 + TestTargetID = BB5F3C871C1811BC00DA339D;
441 + };
442 + };
443 + };
444 + buildConfigurationList = BB5F3C831C1811BC00DA339D /* Build configuration list for PBXProject "Demo_xipu" */;
445 + compatibilityVersion = "Xcode 3.2";
446 + developmentRegion = English;
447 + hasScannedForEncodings = 0;
448 + knownRegions = (
449 + en,
450 + Base,
451 + );
452 + mainGroup = BB5F3C7F1C1811BC00DA339D;
453 + productRefGroup = BB5F3C891C1811BC00DA339D /* Products */;
454 + projectDirPath = "";
455 + projectRoot = "";
456 + targets = (
457 + BB5F3C871C1811BC00DA339D /* Demo */,
458 + BB5F3CA01C1811BC00DA339D /* DemoTests */,
459 + );
460 + };
461 +/* End PBXProject section */
462 +
463 +/* Begin PBXResourcesBuildPhase section */
464 + BB5F3C861C1811BC00DA339D /* Resources */ = {
465 + isa = PBXResourcesBuildPhase;
466 + buildActionMask = 2147483647;
467 + files = (
468 + BB5F3C971C1811BC00DA339D /* Main.storyboard in Resources */,
469 + BB5F3C9C1C1811BC00DA339D /* LaunchScreen.xib in Resources */,
470 + E3A648679F39E19D4DB52E5A /* pool_setting in Resources */,
471 + F69D4FC486A805D305FEDFA9 /* MGBSHudBundle.bundle in Resources */,
472 + 127444478785CA14E7328ED1 /* PieChart.xcassets in Resources */,
473 + 422C4A6EA9CA17F79D5EB241 /* XPResource.bundle in Resources */,
474 + );
475 + runOnlyForDeploymentPostprocessing = 0;
476 + };
477 + BB5F3C9F1C1811BC00DA339D /* Resources */ = {
478 + isa = PBXResourcesBuildPhase;
479 + buildActionMask = 2147483647;
480 + files = (
481 + 64184F768F82486A1E3613B8 /* pool_setting in Resources */,
482 + 9188459BA6A0CA1391B1FBC6 /* MGBSHudBundle.bundle in Resources */,
483 + 2B8147E399B4D416BAA09CD3 /* PieChart.xcassets in Resources */,
484 + DFB2415285FE66C5C2252043 /* XPResource.bundle in Resources */,
485 + );
486 + runOnlyForDeploymentPostprocessing = 0;
487 + };
488 +/* End PBXResourcesBuildPhase section */
489 +
490 +/* Begin PBXSourcesBuildPhase section */
491 + BB5F3C841C1811BC00DA339D /* Sources */ = {
492 + isa = PBXSourcesBuildPhase;
493 + buildActionMask = 2147483647;
494 + files = (
495 + 8484E4F51EE7E0DC00B402D1 /* AppDelegate.m in Sources */,
496 + 847EE5E21EE9007E003A4B7B /* MainViewController.m in Sources */,
497 + BB5F3C8E1C1811BC00DA339D /* main.m in Sources */,
498 + 8484E4F61EE7E0DC00B402D1 /* ViewController.m in Sources */,
499 + 3C2D4C2FB2D96D1F99C5A6C9 /* SDKInterface.m in Sources */,
500 + 13FD46848A3CE9D9E564946D /* fackCode.m in Sources */,
501 + 29B847B48A5485BBA979C37E /* WindowView.m in Sources */,
502 + A7AE42EF96A061B10279A235 /* UIView+extension.m in Sources */,
503 + FE8C4E4A977421AB7F93D60D /* XYRenderView.m in Sources */,
504 + 97734FA4943D07CDAA6ED1BA /* XYPieChartView.m in Sources */,
505 + 6F6D41F89A6F826A7E0B375A /* XYCommon.m in Sources */,
506 + 599C405BA8C060143D9D7888 /* XYRotatedView.m in Sources */,
507 + );
508 + runOnlyForDeploymentPostprocessing = 0;
509 + };
510 + BB5F3C9D1C1811BC00DA339D /* Sources */ = {
511 + isa = PBXSourcesBuildPhase;
512 + buildActionMask = 2147483647;
513 + files = (
514 + BB5F3CA81C1811BC00DA339D /* DemoTests.m in Sources */,
515 + C07A4C128CE68CB25D747E88 /* SDKInterface.m in Sources */,
516 + 2B8547CA80D8BB38EA373D46 /* fackCode.m in Sources */,
517 + 267147A68AD62661516F573D /* WindowView.m in Sources */,
518 + 5FC24674978F969595C45038 /* UIView+extension.m in Sources */,
519 + 6F01485BB3F7DF232F9E1D13 /* XYRenderView.m in Sources */,
520 + 09AF4E77893C0BA8841245D0 /* XYPieChartView.m in Sources */,
521 + 1FC74435B2B0750A9DCEEB37 /* XYCommon.m in Sources */,
522 + DA8942D39DC50DCB14520E99 /* XYRotatedView.m in Sources */,
523 + );
524 + runOnlyForDeploymentPostprocessing = 0;
525 + };
526 +/* End PBXSourcesBuildPhase section */
527 +
528 +/* Begin PBXTargetDependency section */
529 + BB5F3CA31C1811BC00DA339D /* PBXTargetDependency */ = {
530 + isa = PBXTargetDependency;
531 + target = BB5F3C871C1811BC00DA339D /* Demo */;
532 + targetProxy = BB5F3CA21C1811BC00DA339D /* PBXContainerItemProxy */;
533 + };
534 +/* End PBXTargetDependency section */
535 +
536 +/* Begin PBXVariantGroup section */
537 + BB5F3C951C1811BC00DA339D /* Main.storyboard */ = {
538 + isa = PBXVariantGroup;
539 + children = (
540 + BB5F3C961C1811BC00DA339D /* Base */,
541 + );
542 + name = Main.storyboard;
543 + sourceTree = "<group>";
544 + };
545 + BB5F3C9A1C1811BC00DA339D /* LaunchScreen.xib */ = {
546 + isa = PBXVariantGroup;
547 + children = (
548 + BB5F3C9B1C1811BC00DA339D /* Base */,
549 + );
550 + name = LaunchScreen.xib;
551 + sourceTree = "<group>";
552 + };
553 +/* End PBXVariantGroup section */
554 +
555 +/* Begin XCBuildConfiguration section */
556 + BB5F3CA91C1811BC00DA339D /* Debug */ = {
557 + isa = XCBuildConfiguration;
558 + buildSettings = {
559 + ALWAYS_SEARCH_USER_PATHS = NO;
560 + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "";
561 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
562 + CLANG_CXX_LIBRARY = "libc++";
563 + CLANG_ENABLE_MODULES = YES;
564 + CLANG_ENABLE_OBJC_ARC = YES;
565 + CLANG_WARN_BOOL_CONVERSION = YES;
566 + CLANG_WARN_CONSTANT_CONVERSION = YES;
567 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
568 + CLANG_WARN_EMPTY_BODY = YES;
569 + CLANG_WARN_ENUM_CONVERSION = YES;
570 + CLANG_WARN_INT_CONVERSION = YES;
571 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
572 + CLANG_WARN_UNREACHABLE_CODE = YES;
573 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
574 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
575 + COPY_PHASE_STRIP = NO;
576 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
577 + ENABLE_BITCODE = NO;
578 + ENABLE_STRICT_OBJC_MSGSEND = YES;
579 + FRAMEWORK_SEARCH_PATHS = (
580 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
581 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MGBSHudFramework\"",
582 + );
583 + GCC_C_LANGUAGE_STANDARD = gnu99;
584 + GCC_DYNAMIC_NO_PIC = NO;
585 + GCC_NO_COMMON_BLOCKS = YES;
586 + GCC_OPTIMIZATION_LEVEL = 0;
587 + GCC_PREPROCESSOR_DEFINITIONS = (
588 + "DEBUG=1",
589 + "$(inherited)",
590 + );
591 + GCC_SYMBOLS_PRIVATE_EXTERN = NO;
592 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
593 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
594 + GCC_WARN_UNDECLARED_SELECTOR = YES;
595 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
596 + GCC_WARN_UNUSED_FUNCTION = YES;
597 + GCC_WARN_UNUSED_VARIABLE = YES;
598 + HEADER_SEARCH_PATHS = (
599 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
600 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode\"",
601 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics\"",
602 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MMCategory\"",
603 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView\"",
604 + );
605 + INFOPLIST_FILE = poolsdk_file/poolsdk_xipu/Info.plist;
606 + IPHONEOS_DEPLOYMENT_TARGET = 8.4;
607 + LIBRARY_SEARCH_PATHS = (
608 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
609 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics\"",
610 + );
611 + MTL_ENABLE_DEBUG_INFO = YES;
612 + ONLY_ACTIVE_ARCH = YES;
613 + OTHER_LDFLAGS = "-ObjC";
614 + PRODUCT_BUNDLE_IDENTIFIER = com.cangjianjianghu.cjjh;
615 + SDKROOT = iphoneos;
616 + };
617 + name = Debug;
618 + };
619 + BB5F3CAA1C1811BC00DA339D /* Release */ = {
620 + isa = XCBuildConfiguration;
621 + buildSettings = {
622 + ALWAYS_SEARCH_USER_PATHS = NO;
623 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
624 + CLANG_CXX_LIBRARY = "libc++";
625 + CLANG_ENABLE_MODULES = YES;
626 + CLANG_ENABLE_OBJC_ARC = YES;
627 + CLANG_WARN_BOOL_CONVERSION = YES;
628 + CLANG_WARN_CONSTANT_CONVERSION = YES;
629 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
630 + CLANG_WARN_EMPTY_BODY = YES;
631 + CLANG_WARN_ENUM_CONVERSION = YES;
632 + CLANG_WARN_INT_CONVERSION = YES;
633 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
634 + CLANG_WARN_UNREACHABLE_CODE = YES;
635 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
636 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
637 + COPY_PHASE_STRIP = NO;
638 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
639 + ENABLE_BITCODE = NO;
640 + ENABLE_NS_ASSERTIONS = NO;
641 + ENABLE_STRICT_OBJC_MSGSEND = YES;
642 + FRAMEWORK_SEARCH_PATHS = (
643 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
644 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MGBSHudFramework\"",
645 + );
646 + GCC_C_LANGUAGE_STANDARD = gnu99;
647 + GCC_NO_COMMON_BLOCKS = YES;
648 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
649 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
650 + GCC_WARN_UNDECLARED_SELECTOR = YES;
651 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
652 + GCC_WARN_UNUSED_FUNCTION = YES;
653 + GCC_WARN_UNUSED_VARIABLE = YES;
654 + HEADER_SEARCH_PATHS = (
655 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
656 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode\"",
657 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics\"",
658 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MMCategory\"",
659 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView\"",
660 + );
661 + INFOPLIST_FILE = poolsdk_file/poolsdk_xipu/Info.plist;
662 + IPHONEOS_DEPLOYMENT_TARGET = 8.4;
663 + LIBRARY_SEARCH_PATHS = (
664 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
665 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics\"",
666 + );
667 + MTL_ENABLE_DEBUG_INFO = NO;
668 + OTHER_LDFLAGS = "-ObjC";
669 + PRODUCT_BUNDLE_IDENTIFIER = com.cangjianjianghu.cjjh;
670 + SDKROOT = iphoneos;
671 + VALIDATE_PRODUCT = YES;
672 + };
673 + name = Release;
674 + };
675 + BB5F3CAC1C1811BC00DA339D /* Debug */ = {
676 + isa = XCBuildConfiguration;
677 + buildSettings = {
678 + CODE_SIGN_IDENTITY = "iPhone Developer: Xu Cao (YQXG4Q6H57)";
679 + DEAD_CODE_STRIPPING = NO;
680 + ENABLE_BITCODE = NO;
681 + FRAMEWORK_SEARCH_PATHS = (
682 + "$(inherited)",
683 + "$(PROJECT_DIR)/Demo",
684 + "$(PROJECT_DIR)/poolsdk_file/poolsdk",
685 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
686 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MGBSHudFramework\"",
687 + );
688 + HEADER_SEARCH_PATHS = (
689 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
690 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode\"",
691 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics\"",
692 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MMCategory\"",
693 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView\"",
694 + );
695 + INFOPLIST_FILE = poolsdk_file/poolsdk_xipu/Info.plist;
696 + IPHONEOS_DEPLOYMENT_TARGET = 8.1;
697 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
698 + LIBRARY_SEARCH_PATHS = (
699 + "$(inherited)",
700 + "$(PROJECT_DIR)/Demo",
701 + "$(PROJECT_DIR)/poolsdk_file/poolsdk",
702 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
703 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics\"",
704 + );
705 + ONLY_ACTIVE_ARCH = NO;
706 + OTHER_LDFLAGS = "-ObjC";
707 + PRODUCT_BUNDLE_IDENTIFIER = com.cangjianjianghu.cjjh;
708 + PRODUCT_NAME = "$(TARGET_NAME)";
709 + PROVISIONING_PROFILE = "ffdc584b-0e7d-46fc-ab64-d1cd9def2f2d";
710 + TARGETED_DEVICE_FAMILY = 2;
711 + VALID_ARCHS = "arm64 armv7s";
712 + };
713 + name = Debug;
714 + };
715 + BB5F3CAD1C1811BC00DA339D /* Release */ = {
716 + isa = XCBuildConfiguration;
717 + buildSettings = {
718 + CODE_SIGN_IDENTITY = "iPhone Developer: Xu Cao (YQXG4Q6H57)";
719 + DEAD_CODE_STRIPPING = NO;
720 + ENABLE_BITCODE = NO;
721 + FRAMEWORK_SEARCH_PATHS = (
722 + "$(inherited)",
723 + "$(PROJECT_DIR)/Demo",
724 + "$(PROJECT_DIR)/poolsdk_file/poolsdk",
725 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
726 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MGBSHudFramework\"",
727 + );
728 + HEADER_SEARCH_PATHS = (
729 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
730 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode\"",
731 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics\"",
732 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MMCategory\"",
733 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView\"",
734 + );
735 + INFOPLIST_FILE = poolsdk_file/poolsdk_xipu/Info.plist;
736 + IPHONEOS_DEPLOYMENT_TARGET = 8.1;
737 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
738 + LIBRARY_SEARCH_PATHS = (
739 + "$(inherited)",
740 + "$(PROJECT_DIR)/Demo",
741 + "$(PROJECT_DIR)/poolsdk_file/poolsdk",
742 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
743 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics\"",
744 + );
745 + ONLY_ACTIVE_ARCH = NO;
746 + OTHER_LDFLAGS = "-ObjC";
747 + PRODUCT_BUNDLE_IDENTIFIER = com.cangjianjianghu.cjjh;
748 + PRODUCT_NAME = "$(TARGET_NAME)";
749 + PROVISIONING_PROFILE = "ffdc584b-0e7d-46fc-ab64-d1cd9def2f2d";
750 + TARGETED_DEVICE_FAMILY = 2;
751 + VALID_ARCHS = "arm64 armv7s";
752 + };
753 + name = Release;
754 + };
755 + BB5F3CAF1C1811BC00DA339D /* Debug */ = {
756 + isa = XCBuildConfiguration;
757 + buildSettings = {
758 + BUNDLE_LOADER = "$(TEST_HOST)";
759 + ENABLE_BITCODE = NO;
760 + FRAMEWORK_SEARCH_PATHS = (
761 + "$(SDKROOT)/Developer/Library/Frameworks",
762 + "$(inherited)",
763 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
764 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MGBSHudFramework\"",
765 + );
766 + GCC_PREPROCESSOR_DEFINITIONS = (
767 + "DEBUG=1",
768 + "$(inherited)",
769 + );
770 + HEADER_SEARCH_PATHS = (
771 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
772 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode\"",
773 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics\"",
774 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MMCategory\"",
775 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView\"",
776 + );
777 + INFOPLIST_FILE = poolsdk_file/poolsdk_xipu/Info.plist;
778 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
779 + LIBRARY_SEARCH_PATHS = (
780 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
781 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics\"",
782 + );
783 + OTHER_LDFLAGS = "-ObjC";
784 + PRODUCT_BUNDLE_IDENTIFIER = com.cangjianjianghu.cjjh;
785 + PRODUCT_NAME = "$(TARGET_NAME)";
786 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo.app/Demo";
787 + };
788 + name = Debug;
789 + };
790 + BB5F3CB01C1811BC00DA339D /* Release */ = {
791 + isa = XCBuildConfiguration;
792 + buildSettings = {
793 + BUNDLE_LOADER = "$(TEST_HOST)";
794 + ENABLE_BITCODE = NO;
795 + FRAMEWORK_SEARCH_PATHS = (
796 + "$(SDKROOT)/Developer/Library/Frameworks",
797 + "$(inherited)",
798 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
799 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MGBSHudFramework\"",
800 + );
801 + HEADER_SEARCH_PATHS = (
802 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
803 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode\"",
804 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics\"",
805 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/MMCategory\"",
806 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/PieChartView\"",
807 + );
808 + INFOPLIST_FILE = poolsdk_file/poolsdk_xipu/Info.plist;
809 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
810 + LIBRARY_SEARCH_PATHS = (
811 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK\"",
812 + "\"$(PROJECT_DIR)/poolsdk_file/poolsdk_xipu/SDK/ResourceCode/JGStatistics\"",
813 + );
814 + OTHER_LDFLAGS = "-ObjC";
815 + PRODUCT_BUNDLE_IDENTIFIER = com.cangjianjianghu.cjjh;
816 + PRODUCT_NAME = "$(TARGET_NAME)";
817 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo.app/Demo";
818 + };
819 + name = Release;
820 + };
821 +/* End XCBuildConfiguration section */
822 +
823 +/* Begin XCConfigurationList section */
824 + BB5F3C831C1811BC00DA339D /* Build configuration list for PBXProject "Demo_xipu" */ = {
825 + isa = XCConfigurationList;
826 + buildConfigurations = (
827 + BB5F3CA91C1811BC00DA339D /* Debug */,
828 + BB5F3CAA1C1811BC00DA339D /* Release */,
829 + );
830 + defaultConfigurationIsVisible = 0;
831 + defaultConfigurationName = Release;
832 + };
833 + BB5F3CAB1C1811BC00DA339D /* Build configuration list for PBXNativeTarget "Demo" */ = {
834 + isa = XCConfigurationList;
835 + buildConfigurations = (
836 + BB5F3CAC1C1811BC00DA339D /* Debug */,
837 + BB5F3CAD1C1811BC00DA339D /* Release */,
838 + );
839 + defaultConfigurationIsVisible = 0;
840 + defaultConfigurationName = Release;
841 + };
842 + BB5F3CAE1C1811BC00DA339D /* Build configuration list for PBXNativeTarget "DemoTests" */ = {
843 + isa = XCConfigurationList;
844 + buildConfigurations = (
845 + BB5F3CAF1C1811BC00DA339D /* Debug */,
846 + BB5F3CB01C1811BC00DA339D /* Release */,
847 + );
848 + defaultConfigurationIsVisible = 0;
849 + defaultConfigurationName = Release;
850 + };
851 +/* End XCConfigurationList section */
852 + };
853 + rootObject = BB5F3C801C1811BC00DA339D /* Project object */;
854 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Workspace
3 + version = "1.0">
4 + <FileRef
5 + location = "self:Demo.xcodeproj">
6 + </FileRef>
7 +</Workspace>
1 +{
2 + "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "D1584AEF25B5C21395F515B62C90B71E0ACB26B2",
3 + "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
4 + "5b13317c-0110-4367-8746-06bc6aadd3cd++2397" : {
5 +
6 + }
7 + },
8 + "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
9 + "D1584AEF25B5C21395F515B62C90B71E0ACB26B2" : 0,
10 + "5b13317c-0110-4367-8746-06bc6aadd3cd++2397" : 0
11 + },
12 + "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "8119CC7B-EDC1-4646-9378-8ECAC2EEB94B",
13 + "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
14 + "D1584AEF25B5C21395F515B62C90B71E0ACB26B2" : "public_sdk_ios\/",
15 + "5b13317c-0110-4367-8746-06bc6aadd3cd++2397" : "youai_foolsdk_ios\/"
16 + },
17 + "DVTSourceControlWorkspaceBlueprintNameKey" : "Demo",
18 + "DVTSourceControlWorkspaceBlueprintVersion" : 204,
19 + "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "PoolSdk_Demo\/Demo.xcodeproj",
20 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
21 + {
22 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "svn:\/\/10.21.210.99",
23 + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Subversion",
24 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "5b13317c-0110-4367-8746-06bc6aadd3cd++2397"
25 + },
26 + {
27 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "ssh:\/\/106.75.192.252:10022\/public_service\/public_sdk_ios.git",
28 + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
29 + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "D1584AEF25B5C21395F515B62C90B71E0ACB26B2"
30 + }
31 + ]
32 +}
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Bucket
3 + type = "1"
4 + version = "2.0">
5 + <Breakpoints>
6 + <BreakpointProxy
7 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
8 + <BreakpointContent
9 + shouldBeEnabled = "Yes"
10 + ignoreCount = "0"
11 + continueAfterRunningActions = "No"
12 + filePath = "../PoolSdk/PoolSdk/SDKInterface.m"
13 + timestampString = "471440051.171901"
14 + startingColumnNumber = "9223372036854775807"
15 + endingColumnNumber = "9223372036854775807"
16 + startingLineNumber = "77"
17 + endingLineNumber = "77"
18 + landmarkName = "-receiveLoginMessage:"
19 + landmarkType = "5">
20 + </BreakpointContent>
21 + </BreakpointProxy>
22 + <BreakpointProxy
23 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
24 + <BreakpointContent
25 + shouldBeEnabled = "Yes"
26 + ignoreCount = "0"
27 + continueAfterRunningActions = "No"
28 + filePath = "../PoolSdk/PoolSdk/SDKInterface.m"
29 + timestampString = "471440051.171901"
30 + startingColumnNumber = "9223372036854775807"
31 + endingColumnNumber = "9223372036854775807"
32 + startingLineNumber = "43"
33 + endingLineNumber = "43"
34 + landmarkName = "-SDKloginSDK"
35 + landmarkType = "5">
36 + </BreakpointContent>
37 + </BreakpointProxy>
38 + </Breakpoints>
39 +</Bucket>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Scheme
3 + LastUpgradeVersion = "0640"
4 + version = "1.3">
5 + <BuildAction
6 + parallelizeBuildables = "YES"
7 + buildImplicitDependencies = "YES">
8 + <BuildActionEntries>
9 + <BuildActionEntry
10 + buildForTesting = "YES"
11 + buildForRunning = "YES"
12 + buildForProfiling = "YES"
13 + buildForArchiving = "YES"
14 + buildForAnalyzing = "YES">
15 + <BuildableReference
16 + BuildableIdentifier = "primary"
17 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
18 + BuildableName = "Demo.app"
19 + BlueprintName = "Demo"
20 + ReferencedContainer = "container:Demo.xcodeproj">
21 + </BuildableReference>
22 + </BuildActionEntry>
23 + <BuildActionEntry
24 + buildForTesting = "YES"
25 + buildForRunning = "YES"
26 + buildForProfiling = "NO"
27 + buildForArchiving = "NO"
28 + buildForAnalyzing = "YES">
29 + <BuildableReference
30 + BuildableIdentifier = "primary"
31 + BlueprintIdentifier = "BB5F3CA01C1811BC00DA339D"
32 + BuildableName = "DemoTests.xctest"
33 + BlueprintName = "DemoTests"
34 + ReferencedContainer = "container:Demo.xcodeproj">
35 + </BuildableReference>
36 + </BuildActionEntry>
37 + </BuildActionEntries>
38 + </BuildAction>
39 + <TestAction
40 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
41 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
42 + shouldUseLaunchSchemeArgsEnv = "YES"
43 + buildConfiguration = "Debug">
44 + <Testables>
45 + <TestableReference
46 + skipped = "NO">
47 + <BuildableReference
48 + BuildableIdentifier = "primary"
49 + BlueprintIdentifier = "BB5F3CA01C1811BC00DA339D"
50 + BuildableName = "DemoTests.xctest"
51 + BlueprintName = "DemoTests"
52 + ReferencedContainer = "container:Demo.xcodeproj">
53 + </BuildableReference>
54 + </TestableReference>
55 + </Testables>
56 + <MacroExpansion>
57 + <BuildableReference
58 + BuildableIdentifier = "primary"
59 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
60 + BuildableName = "Demo.app"
61 + BlueprintName = "Demo"
62 + ReferencedContainer = "container:Demo.xcodeproj">
63 + </BuildableReference>
64 + </MacroExpansion>
65 + </TestAction>
66 + <LaunchAction
67 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
68 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
69 + launchStyle = "0"
70 + useCustomWorkingDirectory = "NO"
71 + buildConfiguration = "Debug"
72 + ignoresPersistentStateOnLaunch = "NO"
73 + debugDocumentVersioning = "YES"
74 + allowLocationSimulation = "YES">
75 + <BuildableProductRunnable
76 + runnableDebuggingMode = "0">
77 + <BuildableReference
78 + BuildableIdentifier = "primary"
79 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
80 + BuildableName = "Demo.app"
81 + BlueprintName = "Demo"
82 + ReferencedContainer = "container:Demo.xcodeproj">
83 + </BuildableReference>
84 + </BuildableProductRunnable>
85 + <AdditionalOptions>
86 + </AdditionalOptions>
87 + </LaunchAction>
88 + <ProfileAction
89 + shouldUseLaunchSchemeArgsEnv = "YES"
90 + savedToolIdentifier = ""
91 + useCustomWorkingDirectory = "NO"
92 + buildConfiguration = "Release"
93 + debugDocumentVersioning = "YES">
94 + <BuildableProductRunnable
95 + runnableDebuggingMode = "0">
96 + <BuildableReference
97 + BuildableIdentifier = "primary"
98 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
99 + BuildableName = "Demo.app"
100 + BlueprintName = "Demo"
101 + ReferencedContainer = "container:Demo.xcodeproj">
102 + </BuildableReference>
103 + </BuildableProductRunnable>
104 + </ProfileAction>
105 + <AnalyzeAction
106 + buildConfiguration = "Debug">
107 + </AnalyzeAction>
108 + <ArchiveAction
109 + buildConfiguration = "Release"
110 + revealArchiveInOrganizer = "YES">
111 + </ArchiveAction>
112 +</Scheme>
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>SchemeUserState</key>
6 + <dict>
7 + <key>Demo.xcscheme</key>
8 + <dict>
9 + <key>orderHint</key>
10 + <integer>0</integer>
11 + </dict>
12 + </dict>
13 + <key>SuppressBuildableAutocreation</key>
14 + <dict>
15 + <key>BB5F3C871C1811BC00DA339D</key>
16 + <dict>
17 + <key>primary</key>
18 + <true/>
19 + </dict>
20 + <key>BB5F3CA01C1811BC00DA339D</key>
21 + <dict>
22 + <key>primary</key>
23 + <true/>
24 + </dict>
25 + </dict>
26 +</dict>
27 +</plist>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Bucket
3 + type = "1"
4 + version = "2.0">
5 + <Breakpoints>
6 + <BreakpointProxy
7 + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
8 + <BreakpointContent
9 + shouldBeEnabled = "No"
10 + ignoreCount = "0"
11 + continueAfterRunningActions = "No"
12 + filePath = "Demo/SDKInterface.h"
13 + timestampString = "474775745.083759"
14 + startingColumnNumber = "9223372036854775807"
15 + endingColumnNumber = "9223372036854775807"
16 + startingLineNumber = "9"
17 + endingLineNumber = "9"
18 + landmarkName = "@interface SDKInterface"
19 + landmarkType = "2">
20 + </BreakpointContent>
21 + </BreakpointProxy>
22 + </Breakpoints>
23 +</Bucket>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Scheme
3 + LastUpgradeVersion = "0700"
4 + version = "1.3">
5 + <BuildAction
6 + parallelizeBuildables = "YES"
7 + buildImplicitDependencies = "YES">
8 + <BuildActionEntries>
9 + <BuildActionEntry
10 + buildForTesting = "YES"
11 + buildForRunning = "YES"
12 + buildForProfiling = "YES"
13 + buildForArchiving = "YES"
14 + buildForAnalyzing = "YES">
15 + <BuildableReference
16 + BuildableIdentifier = "primary"
17 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
18 + BuildableName = "Demo.app"
19 + BlueprintName = "Demo"
20 + ReferencedContainer = "container:Demo.xcodeproj">
21 + </BuildableReference>
22 + </BuildActionEntry>
23 + </BuildActionEntries>
24 + </BuildAction>
25 + <TestAction
26 + buildConfiguration = "Debug"
27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29 + shouldUseLaunchSchemeArgsEnv = "YES">
30 + <Testables>
31 + <TestableReference
32 + skipped = "NO">
33 + <BuildableReference
34 + BuildableIdentifier = "primary"
35 + BlueprintIdentifier = "BB5F3CA01C1811BC00DA339D"
36 + BuildableName = "DemoTests.xctest"
37 + BlueprintName = "DemoTests"
38 + ReferencedContainer = "container:Demo.xcodeproj">
39 + </BuildableReference>
40 + </TestableReference>
41 + </Testables>
42 + <MacroExpansion>
43 + <BuildableReference
44 + BuildableIdentifier = "primary"
45 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
46 + BuildableName = "Demo.app"
47 + BlueprintName = "Demo"
48 + ReferencedContainer = "container:Demo_xipu.xcodeproj">
49 + </BuildableReference>
50 + </MacroExpansion>
51 + <AdditionalOptions>
52 + </AdditionalOptions>
53 + </TestAction>
54 + <LaunchAction
55 + buildConfiguration = "Debug"
56 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
57 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
58 + launchStyle = "0"
59 + useCustomWorkingDirectory = "NO"
60 + ignoresPersistentStateOnLaunch = "NO"
61 + debugDocumentVersioning = "YES"
62 + debugServiceExtension = "internal"
63 + allowLocationSimulation = "YES">
64 + <BuildableProductRunnable
65 + runnableDebuggingMode = "0">
66 + <BuildableReference
67 + BuildableIdentifier = "primary"
68 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
69 + BuildableName = "Demo.app"
70 + BlueprintName = "Demo"
71 + ReferencedContainer = "container:Demo_xipu.xcodeproj">
72 + </BuildableReference>
73 + </BuildableProductRunnable>
74 + <AdditionalOptions>
75 + </AdditionalOptions>
76 + </LaunchAction>
77 + <ProfileAction
78 + buildConfiguration = "Release"
79 + shouldUseLaunchSchemeArgsEnv = "YES"
80 + savedToolIdentifier = ""
81 + useCustomWorkingDirectory = "NO"
82 + debugDocumentVersioning = "YES">
83 + <BuildableProductRunnable
84 + runnableDebuggingMode = "0">
85 + <BuildableReference
86 + BuildableIdentifier = "primary"
87 + BlueprintIdentifier = "BB5F3C871C1811BC00DA339D"
88 + BuildableName = "Demo.app"
89 + BlueprintName = "Demo"
90 + ReferencedContainer = "container:Demo.xcodeproj">
91 + </BuildableReference>
92 + </BuildableProductRunnable>
93 + </ProfileAction>
94 + <AnalyzeAction
95 + buildConfiguration = "Debug">
96 + </AnalyzeAction>
97 + <ArchiveAction
98 + buildConfiguration = "Release"
99 + revealArchiveInOrganizer = "YES">
100 + </ArchiveAction>
101 +</Scheme>
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>SchemeUserState</key>
6 + <dict>
7 + <key>Demo.xcscheme</key>
8 + <dict>
9 + <key>orderHint</key>
10 + <integer>0</integer>
11 + </dict>
12 + </dict>
13 + <key>SuppressBuildableAutocreation</key>
14 + <dict>
15 + <key>BB5F3C871C1811BC00DA339D</key>
16 + <dict>
17 + <key>primary</key>
18 + <true/>
19 + </dict>
20 + <key>BB5F3CA01C1811BC00DA339D</key>
21 + <dict>
22 + <key>primary</key>
23 + <true/>
24 + </dict>
25 + </dict>
26 +</dict>
27 +</plist>
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>323G75TBBT.com.pfd.jiankefy</string>
8 + </array>
9 +</dict>
10 +</plist>
1 +import shutil
2 +import os
3 +import plistlib
4 +
5 +import config
6 +import json
7 +import packageProj
8 +
9 +from mod_pbxproj import XcodeProject
10 +
11 +
12 +gameProjName = config.gameProjName
13 +channelName = "play800"
14 +#copy dir xcodeproj
15 +copyNewDirName = gameProjName + '_' + channelName + '.xcodeproj'
16 +currentPath = os.path.abspath('.')
17 +currentPath += '/' + copyNewDirName
18 +
19 +
20 +if os.path.exists(currentPath):
21 + shutil.rmtree(currentPath)
22 +
23 +shutil.copytree(gameProjName + '.xcodeproj',currentPath)
24 +
25 +project = XcodeProject.Load(copyNewDirName + '/project.pbxproj')
26 +
27 +project.add_other_ldflags('-ObjC')
28 +
29 +channelRootPath = config.channelRootPath#'poolsdk_file'
30 +
31 +frameworksPath = '$(PROJECT_DIR)/' + channelRootPath + '/poolsdk_' + channelName + '/SDK'
32 +print(frameworksPath);
33 +#add header search path
34 +project.add_header_search_paths(frameworksPath, recursive=False)
35 +project.add_header_search_paths(frameworksPath + '/MBProgressHUD', recursive=False)
36 +#add framework search path
37 +project.add_framework_search_paths(frameworksPath, recursive=False)
38 +#add library search path
39 +project.add_library_search_paths(frameworksPath, recursive=False)
40 +
41 +#add poolsdk_xy dir all file into project
42 +project.remove_group_by_name('poolsdk')
43 +frameworkRelativePath = project.add_folder(channelRootPath + '/poolsdk_' + channelName + '/SDK')
44 +
45 +#ignore_unknown_type
46 +project.add_file_if_doesnt_exist('pool_setting',parent=frameworkRelativePath, weak=True,ignore_unknown_type=True)
47 +
48 +
49 +systemFrameworks = project.get_or_create_group('Frameworks')
50 +#add system framework
51 +project.add_file_if_doesnt_exist('System/Library/Frameworks/StoreKit.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
52 +project.add_file_if_doesnt_exist('System/Library/Frameworks/AdSupport.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
53 +project.add_file_if_doesnt_exist('System/Library/Frameworks/QuartzCore.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
54 +project.add_file_if_doesnt_exist('System/Library/Frameworks/Foundation.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
55 +project.add_file_if_doesnt_exist('System/Library/Frameworks/UIKit.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
56 +project.add_file_if_doesnt_exist('System/Library/Frameworks/SystemConfiguration.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
57 +project.add_file_if_doesnt_exist('System/Library/Frameworks/CoreGraphics.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
58 +
59 +#modify info.plist reference path
60 +project.add_single_valued_flag('INFOPLIST_FILE',channelRootPath + '/poolsdk_' + channelName + '/Info.plist')
61 +
62 +project.add_single_valued_flag('ENABLE_BITCODE', 'NO')
63 +
64 +readInfoPlistFilePath = channelRootPath + '/poolsdk/Info.plist'
65 +writeInfoFilePath = channelRootPath + '/poolsdk_' + channelName + '/Info.plist'
66 +infoContent = plistlib.readPlist(readInfoPlistFilePath)
67 +
68 +channelInfoPath = channelRootPath + '/poolsdk_' + channelName + '/Info_' + channelName + '.plist'
69 +
70 +#read pool_setting file
71 +settingFile = open(channelRootPath + '/poolsdk_' + channelName + '/SDK/pool_setting','rw')
72 +try:
73 + settingFileContent = settingFile.read( )
74 +finally:
75 + settingFile.close( )
76 +#json op
77 +jsonStr = json.loads(settingFileContent)
78 +
79 +#modify bundle id
80 +project.add_single_valued_flag('PRODUCT_BUNDLE_IDENTIFIER',jsonStr["appScheme"])
81 +
82 +#set info.plist channel parame
83 +#absolutionInfoPath = os.path.abspath('.') + '/' + channelInfoPath
84 +#commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :yayawan_game_id '" + gameId + ' ' + absolutionInfoPath)
85 +
86 +#read channel info plist content
87 +channelInfoContent = plistlib.readPlist(channelInfoPath)
88 +#update and add info.plist content
89 +infoContent.update(channelInfoContent)
90 +#write
91 +plistlib.writePlist(infoContent,writeInfoFilePath)
92 +
93 +project.save()
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>CFBundleDevelopmentRegion</key>
6 + <string>en</string>
7 + <key>CFBundleExecutable</key>
8 + <string>$(EXECUTABLE_NAME)</string>
9 + <key>CFBundleIdentifier</key>
10 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11 + <key>CFBundleInfoDictionaryVersion</key>
12 + <string>6.0</string>
13 + <key>CFBundleName</key>
14 + <string>$(PRODUCT_NAME)</string>
15 + <key>CFBundlePackageType</key>
16 + <string>APPL</string>
17 + <key>CFBundleShortVersionString</key>
18 + <string>1.0</string>
19 + <key>CFBundleSignature</key>
20 + <string>????</string>
21 + <key>CFBundleURLTypes</key>
22 + <array>
23 + <dict>
24 + <key>CFBundleTypeRole</key>
25 + <string>Editor</string>
26 + <key>CFBundleURLSchemes</key>
27 + <array>
28 + <string>com.youai.sdk</string>
29 + </array>
30 + </dict>
31 + </array>
32 + <key>CFBundleVersion</key>
33 + <string>1</string>
34 + <key>LSRequiresIPhoneOS</key>
35 + <true/>
36 + <key>NSAppTransportSecurity</key>
37 + <dict>
38 + <key>NSAllowsArbitraryLoads</key>
39 + <true/>
40 + </dict>
41 + <key>UILaunchStoryboardName</key>
42 + <string>LaunchScreen</string>
43 + <key>UIMainStoryboardFile</key>
44 + <string>Main</string>
45 + <key>UIRequiredDeviceCapabilities</key>
46 + <array>
47 + <string>armv7</string>
48 + </array>
49 + <key>UISupportedInterfaceOrientations</key>
50 + <array>
51 + <string>UIInterfaceOrientationLandscapeLeft</string>
52 + <string>UIInterfaceOrientationLandscapeRight</string>
53 + </array>
54 +</dict>
55 +</plist>
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>NSAppTransportSecurity</key>
6 + <dict>
7 + <key>NSAllowsArbitraryLoads</key>
8 + <true/>
9 + </dict>
10 +</dict>
11 +</plist>
1 +//
2 +// MBProgressHUD.h
3 +// Version 0.8
4 +// Created by Matej Bukovinski on 2.4.09.
5 +//
6 +
7 +// This code is distributed under the terms and conditions of the MIT license.
8 +
9 +// Copyright (c) 2013 Matej Bukovinski
10 +//
11 +// Permission is hereby granted, free of charge, to any person obtaining a copy
12 +// of this software and associated documentation files (the "Software"), to deal
13 +// in the Software without restriction, including without limitation the rights
14 +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 +// copies of the Software, and to permit persons to whom the Software is
16 +// furnished to do so, subject to the following conditions:
17 +//
18 +// The above copyright notice and this permission notice shall be included in
19 +// all copies or substantial portions of the Software.
20 +//
21 +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 +// THE SOFTWARE.
28 +
29 +#import <Foundation/Foundation.h>
30 +#import <UIKit/UIKit.h>
31 +#import <CoreGraphics/CoreGraphics.h>
32 +
33 +@protocol MBProgressHUDDelegate;
34 +
35 +
36 +typedef enum {
37 + /** Progress is shown using an UIActivityIndicatorView. This is the default. */
38 + MBProgressHUDModeIndeterminate,
39 + /** Progress is shown using a round, pie-chart like, progress view. */
40 + MBProgressHUDModeDeterminate,
41 + /** Progress is shown using a horizontal progress bar */
42 + MBProgressHUDModeDeterminateHorizontalBar,
43 + /** Progress is shown using a ring-shaped progress view. */
44 + MBProgressHUDModeAnnularDeterminate,
45 + /** Shows a custom view */
46 + MBProgressHUDModeCustomView,
47 + /** Shows only labels */
48 + MBProgressHUDModeText
49 +} MBProgressHUDMode;
50 +
51 +typedef enum {
52 + /** Opacity animation */
53 + MBProgressHUDAnimationFade,
54 + /** Opacity + scale animation */
55 + MBProgressHUDAnimationZoom,
56 + MBProgressHUDAnimationZoomOut = MBProgressHUDAnimationZoom,
57 + MBProgressHUDAnimationZoomIn
58 +} MBProgressHUDAnimation;
59 +
60 +
61 +#ifndef MB_INSTANCETYPE
62 +#if __has_feature(objc_instancetype)
63 + #define MB_INSTANCETYPE instancetype
64 +#else
65 + #define MB_INSTANCETYPE id
66 +#endif
67 +#endif
68 +
69 +#ifndef MB_STRONG
70 +#if __has_feature(objc_arc)
71 + #define MB_STRONG strong
72 +#else
73 + #define MB_STRONG retain
74 +#endif
75 +#endif
76 +
77 +#ifndef MB_WEAK
78 +#if __has_feature(objc_arc_weak)
79 + #define MB_WEAK weak
80 +#elif __has_feature(objc_arc)
81 + #define MB_WEAK unsafe_unretained
82 +#else
83 + #define MB_WEAK assign
84 +#endif
85 +#endif
86 +
87 +#if NS_BLOCKS_AVAILABLE
88 +typedef void (^MBProgressHUDCompletionBlock)();
89 +#endif
90 +
91 +
92 +/**
93 + * Displays a simple HUD window containing a progress indicator and two optional labels for short messages.
94 + *
95 + * This is a simple drop-in class for displaying a progress HUD view similar to Apple's private UIProgressHUD class.
96 + * The MBProgressHUD window spans over the entire space given to it by the initWithFrame constructor and catches all
97 + * user input on this region, thereby preventing the user operations on components below the view. The HUD itself is
98 + * drawn centered as a rounded semi-transparent view which resizes depending on the user specified content.
99 + *
100 + * This view supports four modes of operation:
101 + * - MBProgressHUDModeIndeterminate - shows a UIActivityIndicatorView
102 + * - MBProgressHUDModeDeterminate - shows a custom round progress indicator
103 + * - MBProgressHUDModeAnnularDeterminate - shows a custom annular progress indicator
104 + * - MBProgressHUDModeCustomView - shows an arbitrary, user specified view (@see customView)
105 + *
106 + * All three modes can have optional labels assigned:
107 + * - If the labelText property is set and non-empty then a label containing the provided content is placed below the
108 + * indicator view.
109 + * - If also the detailsLabelText property is set then another label is placed below the first label.
110 + */
111 +@interface MBProgressHUD : UIView
112 +
113 +/**
114 + * Creates a new HUD, adds it to provided view and shows it. The counterpart to this method is hideHUDForView:animated:.
115 + *
116 + * @param view The view that the HUD will be added to
117 + * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use
118 + * animations while appearing.
119 + * @return A reference to the created HUD.
120 + *
121 + * @see hideHUDForView:animated:
122 + * @see animationType
123 + */
124 ++ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated;
125 +
126 +/**
127 + * Finds the top-most HUD subview and hides it. The counterpart to this method is showHUDAddedTo:animated:.
128 + *
129 + * @param view The view that is going to be searched for a HUD subview.
130 + * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use
131 + * animations while disappearing.
132 + * @return YES if a HUD was found and removed, NO otherwise.
133 + *
134 + * @see showHUDAddedTo:animated:
135 + * @see animationType
136 + */
137 ++ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated;
138 +
139 +/**
140 + * Finds all the HUD subviews and hides them.
141 + *
142 + * @param view The view that is going to be searched for HUD subviews.
143 + * @param animated If set to YES the HUDs will disappear using the current animationType. If set to NO the HUDs will not use
144 + * animations while disappearing.
145 + * @return the number of HUDs found and removed.
146 + *
147 + * @see hideHUDForView:animated:
148 + * @see animationType
149 + */
150 ++ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated;
151 +
152 +/**
153 + * Finds the top-most HUD subview and returns it.
154 + *
155 + * @param view The view that is going to be searched.
156 + * @return A reference to the last HUD subview discovered.
157 + */
158 ++ (MB_INSTANCETYPE)HUDForView:(UIView *)view;
159 +
160 +/**
161 + * Finds all HUD subviews and returns them.
162 + *
163 + * @param view The view that is going to be searched.
164 + * @return All found HUD views (array of MBProgressHUD objects).
165 + */
166 ++ (NSArray *)allHUDsForView:(UIView *)view;
167 +
168 +/**
169 + * A convenience constructor that initializes the HUD with the window's bounds. Calls the designated constructor with
170 + * window.bounds as the parameter.
171 + *
172 + * @param window The window instance that will provide the bounds for the HUD. Should be the same instance as
173 + * the HUD's superview (i.e., the window that the HUD will be added to).
174 + */
175 +- (id)initWithWindow:(UIWindow *)window;
176 +
177 +/**
178 + * A convenience constructor that initializes the HUD with the view's bounds. Calls the designated constructor with
179 + * view.bounds as the parameter
180 + *
181 + * @param view The view instance that will provide the bounds for the HUD. Should be the same instance as
182 + * the HUD's superview (i.e., the view that the HUD will be added to).
183 + */
184 +- (id)initWithView:(UIView *)view;
185 +
186 +/**
187 + * Display the HUD. You need to make sure that the main thread completes its run loop soon after this method call so
188 + * the user interface can be updated. Call this method when your task is already set-up to be executed in a new thread
189 + * (e.g., when using something like NSOperation or calling an asynchronous call like NSURLRequest).
190 + *
191 + * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use
192 + * animations while appearing.
193 + *
194 + * @see animationType
195 + */
196 +- (void)show:(BOOL)animated;
197 +
198 +/**
199 + * Hide the HUD. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to
200 + * hide the HUD when your task completes.
201 + *
202 + * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use
203 + * animations while disappearing.
204 + *
205 + * @see animationType
206 + */
207 +- (void)hide:(BOOL)animated;
208 +
209 +/**
210 + * Hide the HUD after a delay. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to
211 + * hide the HUD when your task completes.
212 + *
213 + * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use
214 + * animations while disappearing.
215 + * @param delay Delay in seconds until the HUD is hidden.
216 + *
217 + * @see animationType
218 + */
219 +- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay;
220 +
221 +/**
222 + * Shows the HUD while a background task is executing in a new thread, then hides the HUD.
223 + *
224 + * This method also takes care of autorelease pools so your method does not have to be concerned with setting up a
225 + * pool.
226 + *
227 + * @param method The method to be executed while the HUD is shown. This method will be executed in a new thread.
228 + * @param target The object that the target method belongs to.
229 + * @param object An optional object to be passed to the method.
230 + * @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will not use
231 + * animations while (dis)appearing.
232 + */
233 +- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated;
234 +
235 +#if NS_BLOCKS_AVAILABLE
236 +
237 +/**
238 + * Shows the HUD while a block is executing on a background queue, then hides the HUD.
239 + *
240 + * @see showAnimated:whileExecutingBlock:onQueue:completionBlock:
241 + */
242 +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block;
243 +
244 +/**
245 + * Shows the HUD while a block is executing on a background queue, then hides the HUD.
246 + *
247 + * @see showAnimated:whileExecutingBlock:onQueue:completionBlock:
248 + */
249 +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(MBProgressHUDCompletionBlock)completion;
250 +
251 +/**
252 + * Shows the HUD while a block is executing on the specified dispatch queue, then hides the HUD.
253 + *
254 + * @see showAnimated:whileExecutingBlock:onQueue:completionBlock:
255 + */
256 +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue;
257 +
258 +/**
259 + * Shows the HUD while a block is executing on the specified dispatch queue, executes completion block on the main queue, and then hides the HUD.
260 + *
261 + * @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will
262 + * not use animations while (dis)appearing.
263 + * @param block The block to be executed while the HUD is shown.
264 + * @param queue The dispatch queue on which the block should be executed.
265 + * @param completion The block to be executed on completion.
266 + *
267 + * @see completionBlock
268 + */
269 +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue
270 + completionBlock:(MBProgressHUDCompletionBlock)completion;
271 +
272 +/**
273 + * A block that gets called after the HUD was completely hidden.
274 + */
275 +@property (copy) MBProgressHUDCompletionBlock completionBlock;
276 +
277 +#endif
278 +
279 +/**
280 + * MBProgressHUD operation mode. The default is MBProgressHUDModeIndeterminate.
281 + *
282 + * @see MBProgressHUDMode
283 + */
284 +@property (assign) MBProgressHUDMode mode;
285 +
286 +/**
287 + * The animation type that should be used when the HUD is shown and hidden.
288 + *
289 + * @see MBProgressHUDAnimation
290 + */
291 +@property (assign) MBProgressHUDAnimation animationType;
292 +
293 +/**
294 + * The UIView (e.g., a UIImageView) to be shown when the HUD is in MBProgressHUDModeCustomView.
295 + * For best results use a 37 by 37 pixel view (so the bounds match the built in indicator bounds).
296 + */
297 +@property (MB_STRONG) UIView *customView;
298 +
299 +/**
300 + * The HUD delegate object.
301 + *
302 + * @see MBProgressHUDDelegate
303 + */
304 +@property (MB_WEAK) id<MBProgressHUDDelegate> delegate;
305 +
306 +/**
307 + * An optional short message to be displayed below the activity indicator. The HUD is automatically resized to fit
308 + * the entire text. If the text is too long it will get clipped by displaying "..." at the end. If left unchanged or
309 + * set to @"", then no message is displayed.
310 + */
311 +@property (copy) NSString *labelText;
312 +
313 +/**
314 + * An optional details message displayed below the labelText message. This message is displayed only if the labelText
315 + * property is also set and is different from an empty string (@""). The details text can span multiple lines.
316 + */
317 +@property (copy) NSString *detailsLabelText;
318 +
319 +/**
320 + * The opacity of the HUD window. Defaults to 0.8 (80% opacity).
321 + */
322 +@property (assign) float opacity;
323 +
324 +/**
325 + * The color of the HUD window. Defaults to black. If this property is set, color is set using
326 + * this UIColor and the opacity property is not used. using retain because performing copy on
327 + * UIColor base colors (like [UIColor greenColor]) cause problems with the copyZone.
328 + */
329 +@property (MB_STRONG) UIColor *color;
330 +
331 +/**
332 + * The x-axis offset of the HUD relative to the centre of the superview.
333 + */
334 +@property (assign) float xOffset;
335 +
336 +/**
337 + * The y-axis offset of the HUD relative to the centre of the superview.
338 + */
339 +@property (assign) float yOffset;
340 +
341 +/**
342 + * The amount of space between the HUD edge and the HUD elements (labels, indicators or custom views).
343 + * Defaults to 20.0
344 + */
345 +@property (assign) float margin;
346 +
347 +/**
348 + * The corner radius for th HUD
349 + * Defaults to 10.0
350 + */
351 +@property (assign) float cornerRadius;
352 +
353 +/**
354 + * Cover the HUD background view with a radial gradient.
355 + */
356 +@property (assign) BOOL dimBackground;
357 +
358 +/*
359 + * Grace period is the time (in seconds) that the invoked method may be run without
360 + * showing the HUD. If the task finishes before the grace time runs out, the HUD will
361 + * not be shown at all.
362 + * This may be used to prevent HUD display for very short tasks.
363 + * Defaults to 0 (no grace time).
364 + * Grace time functionality is only supported when the task status is known!
365 + * @see taskInProgress
366 + */
367 +@property (assign) float graceTime;
368 +
369 +/**
370 + * The minimum time (in seconds) that the HUD is shown.
371 + * This avoids the problem of the HUD being shown and than instantly hidden.
372 + * Defaults to 0 (no minimum show time).
373 + */
374 +@property (assign) float minShowTime;
375 +
376 +/**
377 + * Indicates that the executed operation is in progress. Needed for correct graceTime operation.
378 + * If you don't set a graceTime (different than 0.0) this does nothing.
379 + * This property is automatically set when using showWhileExecuting:onTarget:withObject:animated:.
380 + * When threading is done outside of the HUD (i.e., when the show: and hide: methods are used directly),
381 + * you need to set this property when your task starts and completes in order to have normal graceTime
382 + * functionality.
383 + */
384 +@property (assign) BOOL taskInProgress;
385 +
386 +/**
387 + * Removes the HUD from its parent view when hidden.
388 + * Defaults to NO.
389 + */
390 +@property (assign) BOOL removeFromSuperViewOnHide;
391 +
392 +/**
393 + * Font to be used for the main label. Set this property if the default is not adequate.
394 + */
395 +@property (MB_STRONG) UIFont* labelFont;
396 +
397 +/**
398 + * Color to be used for the main label. Set this property if the default is not adequate.
399 + */
400 +@property (MB_STRONG) UIColor* labelColor;
401 +
402 +/**
403 + * Font to be used for the details label. Set this property if the default is not adequate.
404 + */
405 +@property (MB_STRONG) UIFont* detailsLabelFont;
406 +
407 +/**
408 + * Color to be used for the details label. Set this property if the default is not adequate.
409 + */
410 +@property (MB_STRONG) UIColor* detailsLabelColor;
411 +
412 +/**
413 + * The progress of the progress indicator, from 0.0 to 1.0. Defaults to 0.0.
414 + */
415 +@property (assign) float progress;
416 +
417 +/**
418 + * The minimum size of the HUD bezel. Defaults to CGSizeZero (no minimum size).
419 + */
420 +@property (assign) CGSize minSize;
421 +
422 +/**
423 + * Force the HUD dimensions to be equal if possible.
424 + */
425 +@property (assign, getter = isSquare) BOOL square;
426 +
427 +@end
428 +
429 +
430 +@protocol MBProgressHUDDelegate <NSObject>
431 +
432 +@optional
433 +
434 +/**
435 + * Called after the HUD was fully hidden from the screen.
436 + */
437 +- (void)hudWasHidden:(MBProgressHUD *)hud;
438 +
439 +@end
440 +
441 +
442 +/**
443 + * A progress view for showing definite progress by filling up a circle (pie chart).
444 + */
445 +@interface MBRoundProgressView : UIView
446 +
447 +/**
448 + * Progress (0.0 to 1.0)
449 + */
450 +@property (nonatomic, assign) float progress;
451 +
452 +/**
453 + * Indicator progress color.
454 + * Defaults to white [UIColor whiteColor]
455 + */
456 +@property (nonatomic, MB_STRONG) UIColor *progressTintColor;
457 +
458 +/**
459 + * Indicator background (non-progress) color.
460 + * Defaults to translucent white (alpha 0.1)
461 + */
462 +@property (nonatomic, MB_STRONG) UIColor *backgroundTintColor;
463 +
464 +/*
465 + * Display mode - NO = round or YES = annular. Defaults to round.
466 + */
467 +@property (nonatomic, assign, getter = isAnnular) BOOL annular;
468 +
469 +@end
470 +
471 +
472 +/**
473 + * A flat bar progress view.
474 + */
475 +@interface MBBarProgressView : UIView
476 +
477 +/**
478 + * Progress (0.0 to 1.0)
479 + */
480 +@property (nonatomic, assign) float progress;
481 +
482 +/**
483 + * Bar border line color.
484 + * Defaults to white [UIColor whiteColor].
485 + */
486 +@property (nonatomic, MB_STRONG) UIColor *lineColor;
487 +
488 +/**
489 + * Bar background color.
490 + * Defaults to clear [UIColor clearColor];
491 + */
492 +@property (nonatomic, MB_STRONG) UIColor *progressRemainingColor;
493 +
494 +/**
495 + * Bar progress color.
496 + * Defaults to white [UIColor whiteColor].
497 + */
498 +@property (nonatomic, MB_STRONG) UIColor *progressColor;
499 +
500 +@end
1 +//
2 +// MBProgressHUD.m
3 +// Version 0.8
4 +// Created by Matej Bukovinski on 2.4.09.
5 +//
6 +
7 +#import "MBProgressHUD.h"
8 +#import <tgmath.h>
9 +
10 +
11 +#if __has_feature(objc_arc)
12 + #define MB_AUTORELEASE(exp) exp
13 + #define MB_RELEASE(exp) exp
14 + #define MB_RETAIN(exp) exp
15 +#else
16 + #define MB_AUTORELEASE(exp) [exp autorelease]
17 + #define MB_RELEASE(exp) [exp release]
18 + #define MB_RETAIN(exp) [exp retain]
19 +#endif
20 +
21 +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000
22 + #define MBLabelAlignmentCenter NSTextAlignmentCenter
23 +#else
24 + #define MBLabelAlignmentCenter UITextAlignmentCenter
25 +#endif
26 +
27 +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
28 + #define MB_TEXTSIZE(text, font) [text length] > 0 ? [text \
29 + sizeWithAttributes:@{NSFontAttributeName:font}] : CGSizeZero;
30 +#else
31 + #define MB_TEXTSIZE(text, font) [text length] > 0 ? [text sizeWithFont:font] : CGSizeZero;
32 +#endif
33 +
34 +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
35 + #define MB_MULTILINE_TEXTSIZE(text, font, maxSize, mode) [text length] > 0 ? [text \
36 + boundingRectWithSize:maxSize options:(NSStringDrawingUsesLineFragmentOrigin) \
37 + attributes:@{NSFontAttributeName:font} context:nil].size : CGSizeZero;
38 +#else
39 + #define MB_MULTILINE_TEXTSIZE(text, font, maxSize, mode) [text length] > 0 ? [text \
40 + sizeWithFont:font constrainedToSize:maxSize lineBreakMode:mode] : CGSizeZero;
41 +#endif
42 +
43 +
44 +static const CGFloat kPadding = 4.f;
45 +static const CGFloat kLabelFontSize = 16.f;
46 +static const CGFloat kDetailsLabelFontSize = 12.f;
47 +
48 +
49 +@interface MBProgressHUD ()
50 +
51 +- (void)setupLabels;
52 +- (void)registerForKVO;
53 +- (void)unregisterFromKVO;
54 +- (NSArray *)observableKeypaths;
55 +- (void)registerForNotifications;
56 +- (void)unregisterFromNotifications;
57 +- (void)updateUIForKeypath:(NSString *)keyPath;
58 +- (void)hideUsingAnimation:(BOOL)animated;
59 +- (void)showUsingAnimation:(BOOL)animated;
60 +- (void)done;
61 +- (void)updateIndicators;
62 +- (void)handleGraceTimer:(NSTimer *)theTimer;
63 +- (void)handleMinShowTimer:(NSTimer *)theTimer;
64 +- (void)setTransformForCurrentOrientation:(BOOL)animated;
65 +- (void)cleanUp;
66 +- (void)launchExecution;
67 +- (void)deviceOrientationDidChange:(NSNotification *)notification;
68 +- (void)hideDelayed:(NSNumber *)animated;
69 +
70 +@property (atomic, MB_STRONG) UIView *indicator;
71 +@property (atomic, MB_STRONG) NSTimer *graceTimer;
72 +@property (atomic, MB_STRONG) NSTimer *minShowTimer;
73 +@property (atomic, MB_STRONG) NSDate *showStarted;
74 +@property (atomic, assign) CGSize size;
75 +
76 +@end
77 +
78 +
79 +@implementation MBProgressHUD {
80 + BOOL useAnimation;
81 + SEL methodForExecution;
82 + id targetForExecution;
83 + id objectForExecution;
84 + UILabel *label;
85 + UILabel *detailsLabel;
86 + BOOL isFinished;
87 + CGAffineTransform rotationTransform;
88 +}
89 +
90 +#pragma mark - Properties
91 +
92 +@synthesize animationType;
93 +@synthesize delegate;
94 +@synthesize opacity;
95 +@synthesize color;
96 +@synthesize labelFont;
97 +@synthesize labelColor;
98 +@synthesize detailsLabelFont;
99 +@synthesize detailsLabelColor;
100 +@synthesize indicator;
101 +@synthesize xOffset;
102 +@synthesize yOffset;
103 +@synthesize minSize;
104 +@synthesize square;
105 +@synthesize margin;
106 +@synthesize dimBackground;
107 +@synthesize graceTime;
108 +@synthesize minShowTime;
109 +@synthesize graceTimer;
110 +@synthesize minShowTimer;
111 +@synthesize taskInProgress;
112 +@synthesize removeFromSuperViewOnHide;
113 +@synthesize customView;
114 +@synthesize showStarted;
115 +@synthesize mode;
116 +@synthesize labelText;
117 +@synthesize detailsLabelText;
118 +@synthesize progress;
119 +@synthesize size;
120 +#if NS_BLOCKS_AVAILABLE
121 +@synthesize completionBlock;
122 +#endif
123 +
124 +#pragma mark - Class methods
125 +
126 ++ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated {
127 + MBProgressHUD *hud = [[self alloc] initWithView:view];
128 + [view addSubview:hud];
129 + [hud show:animated];
130 + return MB_AUTORELEASE(hud);
131 +}
132 +
133 ++ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated {
134 + MBProgressHUD *hud = [self HUDForView:view];
135 + if (hud != nil) {
136 + hud.removeFromSuperViewOnHide = YES;
137 + [hud hide:animated];
138 + return YES;
139 + }
140 + return NO;
141 +}
142 +
143 ++ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated {
144 + NSArray *huds = [MBProgressHUD allHUDsForView:view];
145 + for (MBProgressHUD *hud in huds) {
146 + hud.removeFromSuperViewOnHide = YES;
147 + [hud hide:animated];
148 + }
149 + return [huds count];
150 +}
151 +
152 ++ (MB_INSTANCETYPE)HUDForView:(UIView *)view {
153 + NSEnumerator *subviewsEnum = [view.subviews reverseObjectEnumerator];
154 + for (UIView *subview in subviewsEnum) {
155 + if ([subview isKindOfClass:self]) {
156 + return (MBProgressHUD *)subview;
157 + }
158 + }
159 + return nil;
160 +}
161 +
162 ++ (NSArray *)allHUDsForView:(UIView *)view {
163 + NSMutableArray *huds = [NSMutableArray array];
164 + NSArray *subviews = view.subviews;
165 + for (UIView *aView in subviews) {
166 + if ([aView isKindOfClass:self]) {
167 + [huds addObject:aView];
168 + }
169 + }
170 + return [NSArray arrayWithArray:huds];
171 +}
172 +
173 +#pragma mark - Lifecycle
174 +
175 +- (id)initWithFrame:(CGRect)frame {
176 + self = [super initWithFrame:frame];
177 + if (self) {
178 + // Set default values for properties
179 + self.animationType = MBProgressHUDAnimationFade;
180 + self.mode = MBProgressHUDModeIndeterminate;
181 + self.labelText = nil;
182 + self.detailsLabelText = nil;
183 + self.opacity = 0.8f;
184 + self.color = nil;
185 + self.labelFont = [UIFont boldSystemFontOfSize:kLabelFontSize];
186 + self.labelColor = [UIColor whiteColor];
187 + self.detailsLabelFont = [UIFont boldSystemFontOfSize:kDetailsLabelFontSize];
188 + self.detailsLabelColor = [UIColor whiteColor];
189 + self.xOffset = 0.0f;
190 + self.yOffset = 0.0f;
191 + self.dimBackground = NO;
192 + self.margin = 20.0f;
193 + self.cornerRadius = 10.0f;
194 + self.graceTime = 0.0f;
195 + self.minShowTime = 0.0f;
196 + self.removeFromSuperViewOnHide = NO;
197 + self.minSize = CGSizeZero;
198 + self.square = NO;
199 + self.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin
200 + | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
201 +
202 + // Transparent background
203 + self.opaque = NO;
204 + self.backgroundColor = [UIColor clearColor];
205 + // Make it invisible for now
206 + self.alpha = 0.0f;
207 +
208 + taskInProgress = NO;
209 + rotationTransform = CGAffineTransformIdentity;
210 +
211 + [self setupLabels];
212 + [self updateIndicators];
213 + [self registerForKVO];
214 + [self registerForNotifications];
215 + }
216 + return self;
217 +}
218 +
219 +- (id)initWithView:(UIView *)view {
220 + NSAssert(view, @"View must not be nil.");
221 + return [self initWithFrame:view.bounds];
222 +}
223 +
224 +- (id)initWithWindow:(UIWindow *)window {
225 + return [self initWithView:window];
226 +}
227 +
228 +- (void)dealloc {
229 + [self unregisterFromNotifications];
230 + [self unregisterFromKVO];
231 +#if !__has_feature(objc_arc)
232 + [color release];
233 + [indicator release];
234 + [label release];
235 + [detailsLabel release];
236 + [labelText release];
237 + [detailsLabelText release];
238 + [graceTimer release];
239 + [minShowTimer release];
240 + [showStarted release];
241 + [customView release];
242 +#if NS_BLOCKS_AVAILABLE
243 + [completionBlock release];
244 +#endif
245 + [super dealloc];
246 +#endif
247 +}
248 +
249 +#pragma mark - Show & hide
250 +
251 +- (void)show:(BOOL)animated {
252 + useAnimation = animated;
253 + // If the grace time is set postpone the HUD display
254 + if (self.graceTime > 0.0) {
255 + self.graceTimer = [NSTimer scheduledTimerWithTimeInterval:self.graceTime target:self
256 + selector:@selector(handleGraceTimer:) userInfo:nil repeats:NO];
257 + }
258 + // ... otherwise show the HUD imediately
259 + else {
260 + [self setNeedsDisplay];
261 + [self showUsingAnimation:useAnimation];
262 + }
263 +}
264 +
265 +- (void)hide:(BOOL)animated {
266 + useAnimation = animated;
267 + // If the minShow time is set, calculate how long the hud was shown,
268 + // and pospone the hiding operation if necessary
269 + if (self.minShowTime > 0.0 && showStarted) {
270 + NSTimeInterval interv = [[NSDate date] timeIntervalSinceDate:showStarted];
271 + if (interv < self.minShowTime) {
272 + self.minShowTimer = [NSTimer scheduledTimerWithTimeInterval:(self.minShowTime - interv) target:self
273 + selector:@selector(handleMinShowTimer:) userInfo:nil repeats:NO];
274 + return;
275 + }
276 + }
277 + // ... otherwise hide the HUD immediately
278 + [self hideUsingAnimation:useAnimation];
279 +}
280 +
281 +- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay {
282 + [self performSelector:@selector(hideDelayed:) withObject:[NSNumber numberWithBool:animated] afterDelay:delay];
283 +}
284 +
285 +- (void)hideDelayed:(NSNumber *)animated {
286 + [self hide:[animated boolValue]];
287 +}
288 +
289 +#pragma mark - Timer callbacks
290 +
291 +- (void)handleGraceTimer:(NSTimer *)theTimer {
292 + // Show the HUD only if the task is still running
293 + if (taskInProgress) {
294 + [self setNeedsDisplay];
295 + [self showUsingAnimation:useAnimation];
296 + }
297 +}
298 +
299 +- (void)handleMinShowTimer:(NSTimer *)theTimer {
300 + [self hideUsingAnimation:useAnimation];
301 +}
302 +
303 +#pragma mark - View Hierrarchy
304 +
305 +- (void)didMoveToSuperview {
306 + // We need to take care of rotation ourselfs if we're adding the HUD to a window
307 + if ([self.superview isKindOfClass:[UIWindow class]]) {
308 + [self setTransformForCurrentOrientation:NO];
309 + }
310 +}
311 +
312 +#pragma mark - Internal show & hide operations
313 +
314 +- (void)showUsingAnimation:(BOOL)animated {
315 + if (animated && animationType == MBProgressHUDAnimationZoomIn) {
316 + self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(0.5f, 0.5f));
317 + } else if (animated && animationType == MBProgressHUDAnimationZoomOut) {
318 + self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(1.5f, 1.5f));
319 + }
320 + self.showStarted = [NSDate date];
321 + // Fade in
322 + if (animated) {
323 + [UIView beginAnimations:nil context:NULL];
324 + [UIView setAnimationDuration:0.30];
325 + self.alpha = 1.0f;
326 + if (animationType == MBProgressHUDAnimationZoomIn || animationType == MBProgressHUDAnimationZoomOut) {
327 + self.transform = rotationTransform;
328 + }
329 + [UIView commitAnimations];
330 + }
331 + else {
332 + self.alpha = 1.0f;
333 + }
334 +}
335 +
336 +- (void)hideUsingAnimation:(BOOL)animated {
337 + // Fade out
338 + if (animated && showStarted) {
339 + [UIView beginAnimations:nil context:NULL];
340 + [UIView setAnimationDuration:0.30];
341 + [UIView setAnimationDelegate:self];
342 + [UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];
343 + // 0.02 prevents the hud from passing through touches during the animation the hud will get completely hidden
344 + // in the done method
345 + if (animationType == MBProgressHUDAnimationZoomIn) {
346 + self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(1.5f, 1.5f));
347 + } else if (animationType == MBProgressHUDAnimationZoomOut) {
348 + self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(0.5f, 0.5f));
349 + }
350 +
351 + self.alpha = 0.02f;
352 + [UIView commitAnimations];
353 + }
354 + else {
355 + self.alpha = 0.0f;
356 + [self done];
357 + }
358 + self.showStarted = nil;
359 +}
360 +
361 +- (void)animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void*)context {
362 + [self done];
363 +}
364 +
365 +- (void)done {
366 + isFinished = YES;
367 + self.alpha = 0.0f;
368 + if (removeFromSuperViewOnHide) {
369 + [self removeFromSuperview];
370 + }
371 +#if NS_BLOCKS_AVAILABLE
372 + if (self.completionBlock) {
373 + self.completionBlock();
374 + self.completionBlock = NULL;
375 + }
376 +#endif
377 + if ([delegate respondsToSelector:@selector(hudWasHidden:)]) {
378 + [delegate performSelector:@selector(hudWasHidden:) withObject:self];
379 + }
380 +}
381 +
382 +#pragma mark - Threading
383 +
384 +- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated {
385 + methodForExecution = method;
386 + targetForExecution = MB_RETAIN(target);
387 + objectForExecution = MB_RETAIN(object);
388 + // Launch execution in new thread
389 + self.taskInProgress = YES;
390 + [NSThread detachNewThreadSelector:@selector(launchExecution) toTarget:self withObject:nil];
391 + // Show HUD view
392 + [self show:animated];
393 +}
394 +
395 +#if NS_BLOCKS_AVAILABLE
396 +
397 +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block {
398 + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
399 + [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL];
400 +}
401 +
402 +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(void (^)())completion {
403 + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
404 + [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:completion];
405 +}
406 +
407 +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue {
408 + [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL];
409 +}
410 +
411 +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue
412 + completionBlock:(MBProgressHUDCompletionBlock)completion {
413 + self.taskInProgress = YES;
414 + self.completionBlock = completion;
415 + dispatch_async(queue, ^(void) {
416 + block();
417 + dispatch_async(dispatch_get_main_queue(), ^(void) {
418 + [self cleanUp];
419 + });
420 + });
421 + [self show:animated];
422 +}
423 +
424 +#endif
425 +
426 +- (void)launchExecution {
427 + @autoreleasepool {
428 +#pragma clang diagnostic push
429 +#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
430 + // Start executing the requested task
431 + [targetForExecution performSelector:methodForExecution withObject:objectForExecution];
432 +#pragma clang diagnostic pop
433 + // Task completed, update view in main thread (note: view operations should
434 + // be done only in the main thread)
435 + [self performSelectorOnMainThread:@selector(cleanUp) withObject:nil waitUntilDone:NO];
436 + }
437 +}
438 +
439 +- (void)cleanUp {
440 + taskInProgress = NO;
441 +#if !__has_feature(objc_arc)
442 + [targetForExecution release];
443 + [objectForExecution release];
444 +#else
445 + targetForExecution = nil;
446 + objectForExecution = nil;
447 +#endif
448 + [self hide:useAnimation];
449 +}
450 +
451 +#pragma mark - UI
452 +
453 +- (void)setupLabels {
454 + label = [[UILabel alloc] initWithFrame:self.bounds];
455 + label.adjustsFontSizeToFitWidth = NO;
456 + label.textAlignment = MBLabelAlignmentCenter;
457 + label.opaque = NO;
458 + label.backgroundColor = [UIColor clearColor];
459 + label.textColor = self.labelColor;
460 + label.font = self.labelFont;
461 + label.text = self.labelText;
462 + [self addSubview:label];
463 +
464 + detailsLabel = [[UILabel alloc] initWithFrame:self.bounds];
465 + detailsLabel.font = self.detailsLabelFont;
466 + detailsLabel.adjustsFontSizeToFitWidth = NO;
467 + detailsLabel.textAlignment = MBLabelAlignmentCenter;
468 + detailsLabel.opaque = NO;
469 + detailsLabel.backgroundColor = [UIColor clearColor];
470 + detailsLabel.textColor = self.detailsLabelColor;
471 + detailsLabel.numberOfLines = 0;
472 + detailsLabel.font = self.detailsLabelFont;
473 + detailsLabel.text = self.detailsLabelText;
474 + [self addSubview:detailsLabel];
475 +}
476 +
477 +- (void)updateIndicators {
478 +
479 + BOOL isActivityIndicator = [indicator isKindOfClass:[UIActivityIndicatorView class]];
480 + BOOL isRoundIndicator = [indicator isKindOfClass:[MBRoundProgressView class]];
481 +
482 + if (mode == MBProgressHUDModeIndeterminate && !isActivityIndicator) {
483 + // Update to indeterminate indicator
484 + [indicator removeFromSuperview];
485 + self.indicator = MB_AUTORELEASE([[UIActivityIndicatorView alloc]
486 + initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]);
487 + [(UIActivityIndicatorView *)indicator startAnimating];
488 + [self addSubview:indicator];
489 + }
490 + else if (mode == MBProgressHUDModeDeterminateHorizontalBar) {
491 + // Update to bar determinate indicator
492 + [indicator removeFromSuperview];
493 + self.indicator = MB_AUTORELEASE([[MBBarProgressView alloc] init]);
494 + [self addSubview:indicator];
495 + }
496 + else if (mode == MBProgressHUDModeDeterminate || mode == MBProgressHUDModeAnnularDeterminate) {
497 + if (!isRoundIndicator) {
498 + // Update to determinante indicator
499 + [indicator removeFromSuperview];
500 + self.indicator = MB_AUTORELEASE([[MBRoundProgressView alloc] init]);
501 + [self addSubview:indicator];
502 + }
503 + if (mode == MBProgressHUDModeAnnularDeterminate) {
504 + [(MBRoundProgressView *)indicator setAnnular:YES];
505 + }
506 + }
507 + else if (mode == MBProgressHUDModeCustomView && customView != indicator) {
508 + // Update custom view indicator
509 + [indicator removeFromSuperview];
510 + self.indicator = customView;
511 + [self addSubview:indicator];
512 + } else if (mode == MBProgressHUDModeText) {
513 + [indicator removeFromSuperview];
514 + self.indicator = nil;
515 + }
516 +}
517 +
518 +#pragma mark - Layout
519 +
520 +- (void)layoutSubviews {
521 +
522 + // Entirely cover the parent view
523 + UIView *parent = self.superview;
524 + if (parent) {
525 + self.frame = parent.bounds;
526 + }
527 + CGRect bounds = self.bounds;
528 +
529 + // Determine the total widt and height needed
530 + CGFloat maxWidth = bounds.size.width - 4 * margin;
531 + CGSize totalSize = CGSizeZero;
532 +
533 + CGRect indicatorF = indicator.bounds;
534 + indicatorF.size.width = MIN(indicatorF.size.width, maxWidth);
535 + totalSize.width = MAX(totalSize.width, indicatorF.size.width);
536 + totalSize.height += indicatorF.size.height;
537 +
538 + CGSize labelSize = MB_TEXTSIZE(label.text, label.font);
539 + labelSize.width = MIN(labelSize.width, maxWidth);
540 + totalSize.width = MAX(totalSize.width, labelSize.width);
541 + totalSize.height += labelSize.height;
542 + if (labelSize.height > 0.f && indicatorF.size.height > 0.f) {
543 + totalSize.height += kPadding;
544 + }
545 +
546 + CGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin;
547 + CGSize maxSize = CGSizeMake(maxWidth, remainingHeight);
548 + CGSize detailsLabelSize = MB_MULTILINE_TEXTSIZE(detailsLabel.text, detailsLabel.font, maxSize, detailsLabel.lineBreakMode);
549 + totalSize.width = MAX(totalSize.width, detailsLabelSize.width);
550 + totalSize.height += detailsLabelSize.height;
551 + if (detailsLabelSize.height > 0.f && (indicatorF.size.height > 0.f || labelSize.height > 0.f)) {
552 + totalSize.height += kPadding;
553 + }
554 +
555 + totalSize.width += 2 * margin;
556 + totalSize.height += 2 * margin;
557 +
558 + // Position elements
559 + CGFloat yPos = round(((bounds.size.height - totalSize.height) / 2)) + margin + yOffset;
560 + CGFloat xPos = xOffset;
561 + indicatorF.origin.y = yPos;
562 + indicatorF.origin.x = round((bounds.size.width - indicatorF.size.width) / 2) + xPos;
563 + indicator.frame = indicatorF;
564 + yPos += indicatorF.size.height;
565 +
566 + if (labelSize.height > 0.f && indicatorF.size.height > 0.f) {
567 + yPos += kPadding;
568 + }
569 + CGRect labelF;
570 + labelF.origin.y = yPos;
571 + labelF.origin.x = round((bounds.size.width - labelSize.width) / 2) + xPos;
572 + labelF.size = labelSize;
573 + label.frame = labelF;
574 + yPos += labelF.size.height;
575 +
576 + if (detailsLabelSize.height > 0.f && (indicatorF.size.height > 0.f || labelSize.height > 0.f)) {
577 + yPos += kPadding;
578 + }
579 + CGRect detailsLabelF;
580 + detailsLabelF.origin.y = yPos;
581 + detailsLabelF.origin.x = round((bounds.size.width - detailsLabelSize.width) / 2) + xPos;
582 + detailsLabelF.size = detailsLabelSize;
583 + detailsLabel.frame = detailsLabelF;
584 +
585 + // Enforce minsize and quare rules
586 + if (square) {
587 + CGFloat max = MAX(totalSize.width, totalSize.height);
588 + if (max <= bounds.size.width - 2 * margin) {
589 + totalSize.width = max;
590 + }
591 + if (max <= bounds.size.height - 2 * margin) {
592 + totalSize.height = max;
593 + }
594 + }
595 + if (totalSize.width < minSize.width) {
596 + totalSize.width = minSize.width;
597 + }
598 + if (totalSize.height < minSize.height) {
599 + totalSize.height = minSize.height;
600 + }
601 +
602 + self.size = totalSize;
603 +}
604 +
605 +#pragma mark BG Drawing
606 +
607 +- (void)drawRect:(CGRect)rect {
608 +
609 + CGContextRef context = UIGraphicsGetCurrentContext();
610 + UIGraphicsPushContext(context);
611 +
612 + if (self.dimBackground) {
613 + //Gradient colours
614 + size_t gradLocationsNum = 2;
615 + CGFloat gradLocations[2] = {0.0f, 1.0f};
616 + CGFloat gradColors[8] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.75f};
617 + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
618 + CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradColors, gradLocations, gradLocationsNum);
619 + CGColorSpaceRelease(colorSpace);
620 + //Gradient center
621 + CGPoint gradCenter= CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
622 + //Gradient radius
623 + float gradRadius = MIN(self.bounds.size.width , self.bounds.size.height) ;
624 + //Gradient draw
625 + CGContextDrawRadialGradient (context, gradient, gradCenter,
626 + 0, gradCenter, gradRadius,
627 + kCGGradientDrawsAfterEndLocation);
628 + CGGradientRelease(gradient);
629 + }
630 +
631 + // Set background rect color
632 + if (self.color) {
633 + CGContextSetFillColorWithColor(context, self.color.CGColor);
634 + } else {
635 + CGContextSetGrayFillColor(context, 0.0f, self.opacity);
636 + }
637 +
638 +
639 + // Center HUD
640 + CGRect allRect = self.bounds;
641 + // Draw rounded HUD backgroud rect
642 + CGRect boxRect = CGRectMake(round((allRect.size.width - size.width) / 2) + self.xOffset,
643 + round((allRect.size.height - size.height) / 2) + self.yOffset, size.width, size.height);
644 + float radius = self.cornerRadius;
645 + CGContextBeginPath(context);
646 + CGContextMoveToPoint(context, CGRectGetMinX(boxRect) + radius, CGRectGetMinY(boxRect));
647 + CGContextAddArc(context, CGRectGetMaxX(boxRect) - radius, CGRectGetMinY(boxRect) + radius, radius, 3 * (float)M_PI / 2, 0, 0);
648 + CGContextAddArc(context, CGRectGetMaxX(boxRect) - radius, CGRectGetMaxY(boxRect) - radius, radius, 0, (float)M_PI / 2, 0);
649 + CGContextAddArc(context, CGRectGetMinX(boxRect) + radius, CGRectGetMaxY(boxRect) - radius, radius, (float)M_PI / 2, (float)M_PI, 0);
650 + CGContextAddArc(context, CGRectGetMinX(boxRect) + radius, CGRectGetMinY(boxRect) + radius, radius, (float)M_PI, 3 * (float)M_PI / 2, 0);
651 + CGContextClosePath(context);
652 + CGContextFillPath(context);
653 +
654 + UIGraphicsPopContext();
655 +}
656 +
657 +#pragma mark - KVO
658 +
659 +- (void)registerForKVO {
660 + for (NSString *keyPath in [self observableKeypaths]) {
661 + [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL];
662 + }
663 +}
664 +
665 +- (void)unregisterFromKVO {
666 + for (NSString *keyPath in [self observableKeypaths]) {
667 + [self removeObserver:self forKeyPath:keyPath];
668 + }
669 +}
670 +
671 +- (NSArray *)observableKeypaths {
672 + return [NSArray arrayWithObjects:@"mode", @"customView", @"labelText", @"labelFont", @"labelColor",
673 + @"detailsLabelText", @"detailsLabelFont", @"detailsLabelColor", @"progress", nil];
674 +}
675 +
676 +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
677 + if (![NSThread isMainThread]) {
678 + [self performSelectorOnMainThread:@selector(updateUIForKeypath:) withObject:keyPath waitUntilDone:NO];
679 + } else {
680 + [self updateUIForKeypath:keyPath];
681 + }
682 +}
683 +
684 +- (void)updateUIForKeypath:(NSString *)keyPath {
685 + if ([keyPath isEqualToString:@"mode"] || [keyPath isEqualToString:@"customView"]) {
686 + [self updateIndicators];
687 + } else if ([keyPath isEqualToString:@"labelText"]) {
688 + label.text = self.labelText;
689 + } else if ([keyPath isEqualToString:@"labelFont"]) {
690 + label.font = self.labelFont;
691 + } else if ([keyPath isEqualToString:@"labelColor"]) {
692 + label.textColor = self.labelColor;
693 + } else if ([keyPath isEqualToString:@"detailsLabelText"]) {
694 + detailsLabel.text = self.detailsLabelText;
695 + } else if ([keyPath isEqualToString:@"detailsLabelFont"]) {
696 + detailsLabel.font = self.detailsLabelFont;
697 + } else if ([keyPath isEqualToString:@"detailsLabelColor"]) {
698 + detailsLabel.textColor = self.detailsLabelColor;
699 + } else if ([keyPath isEqualToString:@"progress"]) {
700 + if ([indicator respondsToSelector:@selector(setProgress:)]) {
701 + [(id)indicator setProgress:progress];
702 + }
703 + return;
704 + }
705 + [self setNeedsLayout];
706 + [self setNeedsDisplay];
707 +}
708 +
709 +#pragma mark - Notifications
710 +
711 +- (void)registerForNotifications {
712 + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
713 + [nc addObserver:self selector:@selector(deviceOrientationDidChange:)
714 + name:UIDeviceOrientationDidChangeNotification object:nil];
715 +}
716 +
717 +- (void)unregisterFromNotifications {
718 + [[NSNotificationCenter defaultCenter] removeObserver:self];
719 +}
720 +
721 +- (void)deviceOrientationDidChange:(NSNotification *)notification {
722 + UIView *superview = self.superview;
723 + if (!superview) {
724 + return;
725 + } else if ([superview isKindOfClass:[UIWindow class]]) {
726 + [self setTransformForCurrentOrientation:YES];
727 + } else {
728 + self.frame = self.superview.bounds;
729 + [self setNeedsDisplay];
730 + }
731 +}
732 +
733 +- (void)setTransformForCurrentOrientation:(BOOL)animated {
734 + // Stay in sync with the superview
735 + if (self.superview) {
736 + self.bounds = self.superview.bounds;
737 + [self setNeedsDisplay];
738 + }
739 +
740 + UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
741 + CGFloat radians = 0;
742 + if (UIInterfaceOrientationIsLandscape(orientation)) {
743 + if (orientation == UIInterfaceOrientationLandscapeLeft) { radians = -(CGFloat)M_PI_2; }
744 + else { radians = (CGFloat)M_PI_2; }
745 + // Window coordinates differ!
746 + self.bounds = CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.width);
747 + } else {
748 + if (orientation == UIInterfaceOrientationPortraitUpsideDown) { radians = (CGFloat)M_PI; }
749 + else { radians = 0; }
750 + }
751 + rotationTransform = CGAffineTransformMakeRotation(radians);
752 +
753 + if (animated) {
754 + [UIView beginAnimations:nil context:nil];
755 + }
756 + [self setTransform:rotationTransform];
757 + if (animated) {
758 + [UIView commitAnimations];
759 + }
760 +}
761 +
762 +@end
763 +
764 +
765 +@implementation MBRoundProgressView
766 +
767 +#pragma mark - Lifecycle
768 +
769 +- (id)init {
770 + return [self initWithFrame:CGRectMake(0.f, 0.f, 37.f, 37.f)];
771 +}
772 +
773 +- (id)initWithFrame:(CGRect)frame {
774 + self = [super initWithFrame:frame];
775 + if (self) {
776 + self.backgroundColor = [UIColor clearColor];
777 + self.opaque = NO;
778 + _progress = 0.f;
779 + _annular = NO;
780 + _progressTintColor = [[UIColor alloc] initWithWhite:1.f alpha:1.f];
781 + _backgroundTintColor = [[UIColor alloc] initWithWhite:1.f alpha:.1f];
782 + [self registerForKVO];
783 + }
784 + return self;
785 +}
786 +
787 +- (void)dealloc {
788 + [self unregisterFromKVO];
789 +#if !__has_feature(objc_arc)
790 + [_progressTintColor release];
791 + [_backgroundTintColor release];
792 + [super dealloc];
793 +#endif
794 +}
795 +
796 +#pragma mark - Drawing
797 +
798 +- (void)drawRect:(CGRect)rect {
799 +
800 + CGRect allRect = self.bounds;
801 + CGRect circleRect = CGRectInset(allRect, 2.0f, 2.0f);
802 + CGContextRef context = UIGraphicsGetCurrentContext();
803 +
804 + if (_annular) {
805 + // Draw background
806 + CGFloat lineWidth = 5.f;
807 + UIBezierPath *processBackgroundPath = [UIBezierPath bezierPath];
808 + processBackgroundPath.lineWidth = lineWidth;
809 + processBackgroundPath.lineCapStyle = kCGLineCapRound;
810 + CGPoint center = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
811 + CGFloat radius = (self.bounds.size.width - lineWidth)/2;
812 + CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees
813 + CGFloat endAngle = (2 * (float)M_PI) + startAngle;
814 + [processBackgroundPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
815 + [_backgroundTintColor set];
816 + [processBackgroundPath stroke];
817 + // Draw progress
818 + UIBezierPath *processPath = [UIBezierPath bezierPath];
819 + processPath.lineCapStyle = kCGLineCapRound;
820 + processPath.lineWidth = lineWidth;
821 + endAngle = (self.progress * 2 * (float)M_PI) + startAngle;
822 + [processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
823 + [_progressTintColor set];
824 + [processPath stroke];
825 + } else {
826 + // Draw background
827 + [_progressTintColor setStroke];
828 + [_backgroundTintColor setFill];
829 + CGContextSetLineWidth(context, 2.0f);
830 + CGContextFillEllipseInRect(context, circleRect);
831 + CGContextStrokeEllipseInRect(context, circleRect);
832 + // Draw progress
833 + CGPoint center = CGPointMake(allRect.size.width / 2, allRect.size.height / 2);
834 + CGFloat radius = (allRect.size.width - 4) / 2;
835 + CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees
836 + CGFloat endAngle = (self.progress * 2 * (float)M_PI) + startAngle;
837 + CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f); // white
838 + CGContextMoveToPoint(context, center.x, center.y);
839 + CGContextAddArc(context, center.x, center.y, radius, startAngle, endAngle, 0);
840 + CGContextClosePath(context);
841 + CGContextFillPath(context);
842 + }
843 +}
844 +
845 +#pragma mark - KVO
846 +
847 +- (void)registerForKVO {
848 + for (NSString *keyPath in [self observableKeypaths]) {
849 + [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL];
850 + }
851 +}
852 +
853 +- (void)unregisterFromKVO {
854 + for (NSString *keyPath in [self observableKeypaths]) {
855 + [self removeObserver:self forKeyPath:keyPath];
856 + }
857 +}
858 +
859 +- (NSArray *)observableKeypaths {
860 + return [NSArray arrayWithObjects:@"progressTintColor", @"backgroundTintColor", @"progress", @"annular", nil];
861 +}
862 +
863 +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
864 + [self setNeedsDisplay];
865 +}
866 +
867 +@end
868 +
869 +
870 +@implementation MBBarProgressView
871 +
872 +#pragma mark - Lifecycle
873 +
874 +- (id)init {
875 + return [self initWithFrame:CGRectMake(.0f, .0f, 120.0f, 20.0f)];
876 +}
877 +
878 +- (id)initWithFrame:(CGRect)frame {
879 + self = [super initWithFrame:frame];
880 + if (self) {
881 + _progress = 0.f;
882 + _lineColor = [UIColor whiteColor];
883 + _progressColor = [UIColor whiteColor];
884 + _progressRemainingColor = [UIColor clearColor];
885 + self.backgroundColor = [UIColor clearColor];
886 + self.opaque = NO;
887 + [self registerForKVO];
888 + }
889 + return self;
890 +}
891 +
892 +- (void)dealloc {
893 + [self unregisterFromKVO];
894 +#if !__has_feature(objc_arc)
895 + [_lineColor release];
896 + [_progressColor release];
897 + [_progressRemainingColor release];
898 + [super dealloc];
899 +#endif
900 +}
901 +
902 +#pragma mark - Drawing
903 +
904 +- (void)drawRect:(CGRect)rect {
905 + CGContextRef context = UIGraphicsGetCurrentContext();
906 +
907 + // setup properties
908 + CGContextSetLineWidth(context, 2);
909 + CGContextSetStrokeColorWithColor(context,[_lineColor CGColor]);
910 + CGContextSetFillColorWithColor(context, [_progressRemainingColor CGColor]);
911 +
912 + // draw line border
913 + float radius = (rect.size.height / 2) - 2;
914 + CGContextMoveToPoint(context, 2, rect.size.height/2);
915 + CGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius);
916 + CGContextAddLineToPoint(context, rect.size.width - radius - 2, 2);
917 + CGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius);
918 + CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius);
919 + CGContextAddLineToPoint(context, radius + 2, rect.size.height - 2);
920 + CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius);
921 + CGContextFillPath(context);
922 +
923 + // draw progress background
924 + CGContextMoveToPoint(context, 2, rect.size.height/2);
925 + CGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius);
926 + CGContextAddLineToPoint(context, rect.size.width - radius - 2, 2);
927 + CGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius);
928 + CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius);
929 + CGContextAddLineToPoint(context, radius + 2, rect.size.height - 2);
930 + CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius);
931 + CGContextStrokePath(context);
932 +
933 + // setup to draw progress color
934 + CGContextSetFillColorWithColor(context, [_progressColor CGColor]);
935 + radius = radius - 2;
936 + float amount = self.progress * rect.size.width;
937 +
938 + // if progress is in the middle area
939 + if (amount >= radius + 4 && amount <= (rect.size.width - radius - 4)) {
940 + // top
941 + CGContextMoveToPoint(context, 4, rect.size.height/2);
942 + CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius);
943 + CGContextAddLineToPoint(context, amount, 4);
944 + CGContextAddLineToPoint(context, amount, radius + 4);
945 +
946 + // bottom
947 + CGContextMoveToPoint(context, 4, rect.size.height/2);
948 + CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius);
949 + CGContextAddLineToPoint(context, amount, rect.size.height - 4);
950 + CGContextAddLineToPoint(context, amount, radius + 4);
951 +
952 + CGContextFillPath(context);
953 + }
954 +
955 + // progress is in the right arc
956 + else if (amount > radius + 4) {
957 + float x = amount - (rect.size.width - radius - 4);
958 +
959 + // top
960 + CGContextMoveToPoint(context, 4, rect.size.height/2);
961 + CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius);
962 + CGContextAddLineToPoint(context, rect.size.width - radius - 4, 4);
963 + float angle = -acos(x/radius);
964 + if (isnan(angle)) angle = 0;
965 + CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, M_PI, angle, 0);
966 + CGContextAddLineToPoint(context, amount, rect.size.height/2);
967 +
968 + // bottom
969 + CGContextMoveToPoint(context, 4, rect.size.height/2);
970 + CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius);
971 + CGContextAddLineToPoint(context, rect.size.width - radius - 4, rect.size.height - 4);
972 + angle = acos(x/radius);
973 + if (isnan(angle)) angle = 0;
974 + CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, -M_PI, angle, 1);
975 + CGContextAddLineToPoint(context, amount, rect.size.height/2);
976 +
977 + CGContextFillPath(context);
978 + }
979 +
980 + // progress is in the left arc
981 + else if (amount < radius + 4 && amount > 0) {
982 + // top
983 + CGContextMoveToPoint(context, 4, rect.size.height/2);
984 + CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius);
985 + CGContextAddLineToPoint(context, radius + 4, rect.size.height/2);
986 +
987 + // bottom
988 + CGContextMoveToPoint(context, 4, rect.size.height/2);
989 + CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius);
990 + CGContextAddLineToPoint(context, radius + 4, rect.size.height/2);
991 +
992 + CGContextFillPath(context);
993 + }
994 +}
995 +
996 +#pragma mark - KVO
997 +
998 +- (void)registerForKVO {
999 + for (NSString *keyPath in [self observableKeypaths]) {
1000 + [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL];
1001 + }
1002 +}
1003 +
1004 +- (void)unregisterFromKVO {
1005 + for (NSString *keyPath in [self observableKeypaths]) {
1006 + [self removeObserver:self forKeyPath:keyPath];
1007 + }
1008 +}
1009 +
1010 +- (NSArray *)observableKeypaths {
1011 + return [NSArray arrayWithObjects:@"lineColor", @"progressRemainingColor", @"progressColor", @"progress", nil];
1012 +}
1013 +
1014 +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
1015 + [self setNeedsDisplay];
1016 +}
1017 +
1018 +@end
1 +
2 +//
3 +// PPInterface.h
4 +// PoolSdk
5 +//
6 +// Created by winFan on 11/23/15.
7 +// Copyright (c) 2015 winFan. All rights reserved.
8 +//
9 +
10 +#import <PoolSdk/PoolSdk2.h>
11 +#import <WSSDK/WSPlatformManager.h>
12 +
13 +@interface SDKInterface : Interface<WSPlatformDelegate,WSPlatformPayDelegate>
14 +
15 +@end
1 +//
2 +// UnionInterface.m
3 +// PoolSdk
4 +//
5 +// Created by winFan on 11/23/15.
6 +// Copyright (c) 2015 winFan. All rights reserved.
7 +//
8 +#include "SDKInterface.h"
9 +#import <UIKit/UIKit.h>
10 +#import <WSSDK/WSUserParser.h>
11 +
12 +
13 +@interface SDKInterface(){
14 + NSString *gold;
15 +}
16 +
17 +@end
18 +
19 +@implementation SDKInterface : Interface
20 +
21 +/**
22 + 初始化SDK
23 +*/
24 +- (void)SDKinit:(UIViewController *) control
25 +{
26 + //必须继承
27 + [super SDKinit:control];
28 +
29 + PoolConfig *config = [PoolConfig getInstance];
30 + NSString *site = [config getValueByKey:@"site"];
31 + NSString *key = [config getValueByKey:@"key"];
32 + NSString *aid = [config getValueByKey:@"aid"];
33 + NSString *cid = [config getValueByKey:@"cid"];
34 +
35 + [[WSPlatformManager sharedPlatform] startWithSite:site key:key aid:aid cid:cid];
36 + [[WSPlatformManager sharedPlatform] setDelegate:self];
37 + [[WSPlatformManager sharedPlatform] setPaydelegate:self];
38 +
39 + [[PoolChecker getInstance] sendNotice:PoolSDKNotificationInitSDK notiName:@"InitSuccess" statusCode:POOLSDK_NO_ERROR description:@"initSuccess" extendData:nil];
40 +}
41 +
42 +/**
43 + 登录SDK
44 + */
45 +- (void)SDKloginSDK
46 +{
47 + NSLog(@"调用了LoginSDK");
48 + [[WSPlatformManager sharedPlatform] onLogin];
49 +}
50 +
51 +/*
52 + *登录验证请求方法模版
53 + */
54 +- (void)loginCheck
55 +{
56 + PoolLoginInfo *loginInfo = [[PoolLoginInfo alloc]init];
57 + loginInfo.openId = [WSUserParser parseUid];//渠道userId
58 + loginInfo.timestamp = [self getCurrentTimestamp];
59 + loginInfo.sign = [WSUserParser parseSessionId];//渠道SDK的token
60 + dispatch_async(dispatch_get_global_queue(0, 0), ^{
61 + [[PoolChecker getInstance]startCheck:loginInfo];//登录验证请求
62 + });
63 +}
64 +
65 +
66 +- (void)SDKreport:(PoolReportInfo *)reportInfo
67 +{
68 + NSLog(@"reportInfo");
69 + if ([REPORT_CREATEROLE isEqualToString:[reportInfo reportType]]) {
70 +
71 + }else if ([[reportInfo reportType] isEqualToString:REPORT_ENTER]) {
72 + gold = [[NSString alloc] initWithFormat:@"%@",[reportInfo diamond]];
73 +
74 + NSDictionary *userDict = @{
75 + @"sid":[reportInfo serverId],
76 + @"roleid":[reportInfo playerId],
77 + @"rolename":[reportInfo playerName],
78 + @"level":[reportInfo playerLevel],
79 + @"gold":gold,
80 + };
81 +
82 + [[WSPlatformManager sharedPlatform] gameLoginSuccessUserInfo:userDict];
83 + [[WSPlatformManager sharedPlatform] showTheRollingView];
84 + }
85 +}
86 +
87 +/**
88 + @return 商品名称
89 + */
90 +- (NSString*)getProductNameByAmount:(NSString*)products amount:(NSString*)amount
91 +{
92 + NSData* jsonData = [NSJSONSerialization dataWithJSONObject:products options:NSJSONWritingPrettyPrinted error:nil];
93 + if(jsonData){
94 + NSDictionary* productList = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];
95 + if(productList){
96 + NSEnumerator* keysList = [productList keyEnumerator];
97 + id keyValue;
98 + while (keyValue = [keysList nextObject])
99 + {
100 + NSString* appleAmount = [[productList objectForKey:keyValue] objectForKey:@"amount"];
101 + if(appleAmount.intValue == amount.intValue){
102 + NSString* productName = [[productList objectForKey:keyValue] objectForKey:@"name"];
103 + return productName;
104 + }
105 + }
106 + }
107 + }
108 + NSLog(@"get product name error amount:%@",amount);
109 + return @"元宝";
110 +}
111 +
112 +/**
113 + @return 商品ID
114 + */
115 +- (NSString*)getProductIdByAmount:(NSString*)products amount:(NSString*)amount
116 +{
117 + NSData* jsonData = [NSJSONSerialization dataWithJSONObject:products options:NSJSONWritingPrettyPrinted error:nil];
118 + if(jsonData){
119 + NSDictionary* productList = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];
120 + if(productList){
121 + NSEnumerator* keysList = [productList keyEnumerator];
122 + id keyValue;
123 + while (keyValue = [keysList nextObject])
124 + {
125 + NSLog(@"i found %@",keyValue);
126 + NSString* appleAmount = [[productList objectForKey:keyValue] objectForKey:@"amount"];
127 + NSLog(@"appleAmount:%@ amount:%@",appleAmount,amount);
128 + if(appleAmount.intValue == amount.intValue){
129 + return keyValue;
130 + }
131 + }
132 + }
133 + }
134 + return @"unknow";
135 +}
136 +
137 +- (void)receiveCreateOrder:(NSNotification *)notification
138 +{
139 + NSLog(@"创建订单成功");
140 + PoolPayInfo *payInfo = [notification object];
141 +
142 + NSString *productId = [self getProductIdByAmount:[payInfo products] amount:[payInfo postAmount]];
143 +
144 + NSDictionary *params = @{
145 + @"cp_order_id":[payInfo queryId],
146 + @"roleid":[payInfo playerId],
147 + @"rolename":[payInfo playerName],
148 + @"serverid":[payInfo serverId],
149 + @"money":[payInfo postAmount],
150 + @"gold":gold,
151 + @"productid":productId,
152 + @"product_name":[payInfo productDesc],
153 + @"ext":[payInfo queryId],
154 + @"test":@"0",
155 + };
156 +
157 + [[WSPlatformManager sharedPlatform] payWithOrderInfo:params];
158 +}
159 +
160 +
161 +/**
162 + * @brief 成功
163 + */
164 +- (void)WSPlatformDidSuccess:(CBType)type
165 +{
166 + //检查是否有用户存在
167 + if (type != 20) {
168 + if ([[WSPlatformManager sharedPlatform] isUserExists]) {
169 + [self loginCheck];
170 + }
171 + }
172 +}
173 +
174 +/**
175 + * 购买成功
176 + */
177 +- (void)WSPlatformPaySuccess:(NSInteger)Type
178 +{
179 + NSLog(@"WSPlatformPaySuccess:%ld",(long)Type);
180 +}
181 +
182 +/**
183 + * 购买失败
184 + */
185 +- (void)WSPlatformPayFailure:(NSString *)errorMsg
186 +{
187 + NSLog(@"WSPlatformPayFailure:%@",errorMsg);
188 +}
189 +
190 +-(NSString*)getCurrentTimestamp{
191 + // 时间戳转时间
192 + NSTimeInterval interval = [[NSDate date] timeIntervalSince1970] * 1000;
193 + NSString* timeStr = [[NSString alloc]initWithFormat:@"%.f",interval];
194 + return timeStr;
195 +}
196 +
197 +@end
...\ No newline at end of file ...\ No newline at end of file
1 +
2 +#import <Foundation/Foundation.h>
3 +
4 +//回调类型
5 +#define CBType NSUInteger
6 +
7 +typedef void (^TapCompletionBlock)(NSInteger index);
8 +
9 +//回调的类型值
10 +typedef NS_ENUM(NSUInteger, CallbackType) {
11 + telRegDidSuccess = 1, // 手机注册成功
12 + loginDidSuccess = 2, // 登录成功
13 + registerDidSuccess = 3, // 注册成功
14 + bindAccountDidSuccess = 4, // 绑定账号成功
15 + bindTelephoneDidSuccess = 5, // 绑定手机成功
16 + tmpLoginDidSuccess = 6, // 临时账号登录成功
17 + dufultRegDidFailure = 7, // 临时账号注册失败
18 + switchAccout = 8, // 切换账号
19 + telResetPwdDidSuccess = 9, // 手机重置密码成功
20 + modifyPwdDidSuccess = 10, // 修改密码成功
21 +
22 +};
23 +
24 +@protocol WSPlatformDelegate, WSPlatformPayDelegate;
25 +@interface WSPlatformManager : NSObject {
26 +@private
27 + NSString *_aid;
28 + NSString *_site;
29 + NSString *_key;
30 + NSString *_sid;
31 + NSString *_sdkVersion;
32 +}
33 +@property (nonatomic, weak) id <WSPlatformDelegate> delegate;
34 +@property (nonatomic, weak) id <WSPlatformPayDelegate> paydelegate;
35 +//区服
36 +@property (nonatomic, copy) NSString *sid;
37 +//SDK版本号
38 +@property (nonatomic, readonly) NSString *sdkVersion;
39 +//广告id
40 +@property (nonatomic, copy, readonly) NSString *aid;
41 +//商家对应标识
42 +@property (nonatomic, copy, readonly) NSString *site;
43 +//密钥
44 +@property (nonatomic, copy, readonly) NSString *key;
45 +//归属id
46 +@property (nonatomic, copy, readonly) NSString *cid;
47 +
48 +// 点击按钮Block
49 +@property (nonatomic, copy) TapCompletionBlock tapBlock;
50 +
51 +/**
52 + * @brief: 平台实例
53 + */
54 ++ (WSPlatformManager *)sharedPlatform;
55 +
56 +
57 +/**
58 + * @brief: 登录
59 + */
60 +- (void)onLogin;
61 +
62 +/**
63 + * @brief: 切换账号
64 + */
65 +- (void)switchAccount;
66 +
67 +/**
68 + * @brief: 是否有用户存在
69 + */
70 +- (BOOL)isUserExists;
71 +
72 +/**
73 + * @brief: 是否有用户存在
74 + */
75 +- (BOOL)isTempAccout;
76 +
77 +/**
78 + * SDK参数设置
79 + * @param site -> 商家对应标识
80 + * @param key -> 密钥
81 + * @param aid -> 广告id
82 + */
83 +- (void)startWithSite:(NSString *)site key:(NSString *)key aid:(NSString *)aid cid:(NSString *)cid;
84 +
85 +// 下订单 zhi fu
86 +- (void)payWithOrderInfo:(NSDictionary *)orderInfo;
87 +
88 +// 登陆成功 上传用户信息
89 +- (void)gameLoginSuccessUserInfo:(NSDictionary *)userInfo;
90 +
91 +// 定时展示功能
92 +- (void)showTheRollingView;
93 +
94 +// 临时账号登录(没有登陆界面)
95 +- (void)tempUserLogin;
96 +
97 +@end
98 +
99 +@protocol WSPlatformDelegate <NSObject>
100 +
101 +@optional
102 +/**
103 + * @brief 成功
104 + */
105 +- (void)WSPlatformDidSuccess:(CBType)type;
106 +
107 +@end
108 +
109 +@protocol WSPlatformPayDelegate <NSObject>
110 +
111 +/**
112 + * 购买成功
113 + */
114 +- (void)WSPlatformPaySuccess:(NSInteger)Type;
115 +
116 +/**
117 + * 购买失败
118 + */
119 +- (void)WSPlatformPayFailure:(NSString *)errorMsg;
120 +
121 +/**
122 + * 支 付过程中关闭支 付页面
123 + */
124 +@optional
125 +- (void)WSPlatformPayViewClose;
126 +
127 +
128 +
129 +@end
1 +
2 +#import <Foundation/Foundation.h>
3 +
4 +@interface WSUserParser : NSObject
5 +
6 +/**
7 + * @ 获取用户uid
8 + */
9 ++ (NSString *)parseUid;
10 +
11 +/**
12 + * @ 获取用户account
13 + */
14 ++ (NSString *)parseAccount;
15 +
16 +/**
17 + * @ 获取用户sessionId
18 + */
19 ++ (NSString *)parseSessionId;
20 +
21 +/**
22 + * @ 判断当前账户是否为临时账户
23 + * @ 1为临时账户
24 + * @ 0为正式注册账户
25 + */
26 ++ (BOOL)parseTempAccount;
27 +
28 +@end
29 +
1 + 为保障您的权益,请详细阅读本服务条款所有内容。并同意遵守以下所有服务条款之会员规范。
2 +
3 +1.(认知与接受条款)
4 + 当您注册成为本网站会员后,即可使用我们公司所提供之各项会员服务(以下简称本服务),且表示您已阅读、了解并同意接受本服务条款之所有内容。当会员使用本服务时,即表示除了同意遵守本服务条款外,还同意接受我们公司对本网站会员之规范(包括游戏规则、客服中心内容、公告事项 各别服务之规范等)并遵守相关法律规定。
5 + 若您未满二十岁,除应符合上述规定外,并应于您的家长(法定代理人或监护人)阅读、了解并同意本服务条款之所有内容及其后修改变更后,方得使用或继续使用本服务。
6 +
7 +2.(会员服务条款之增订及修改)
8 + 我们公司保留增订及修改本会员条款之权利,本条款如有增订或修改时,我们公司将于网站首页公告修改之事实,对会员不 另作个别通知。如您不同意修改的内容,请勿继续使用本服务,如果您于公告后继续使用本服务,则视为您已接受并同意该修订条款。
9 +
10 +3.(服务介绍)
11 + 本网站所提供的包含游戏、休闲、社群等各项服务,陆续提供更多其他网络服务供会员使用。接受本服务之会员必须自行配备上网所需之各项计算机设备,以及负担「因特网连接费用」、「电话费用」等电信相关费用。
12 +
13 +4.(会员责任与义务)
14 +a.您同意于注册时登录您本人正确、完整且符合真实之个人资料。您所登录之数据若事后有所变更时,应随时于在线更新。当所登录的个人资料,或原登录之数据已不符合真实而未更新,或有任何误导之嫌,我们公司将保留随时终止您会员资格及使用本服务之权利。
15 +b.1.会员不得利用本服务进行任何商业行为。
16 +b.2.除了遵守本服务条款外,您同意遵守因特网国际使用惯例与礼节之相关规定。
17 +b.3.会员不得利用本服务传送、发表涉及辱骂、毁谤、不雅、淫秽、攻击性之文章或图片。
18 +b.4.会员同意必须充分尊重知识产权,禁止发表侵害他人各项知识产权或其他权利之文字、图片或任何形式之档案。
19 +c.1.您了解当您成为本网站会员后,开始使用本服务,其所有权仍属我们公司所有及其所约定之人所有,会员仅得依本服务条款之约定使用,不得出租、出借、移转或让与给其他之三人使用。
20 +c.2.会员有义务妥善保管本网站账号、密码及其他相关之会员数据,并为此组账号登录系统后所进行之一切活动、行为责负。
21 +c.3.若会员发现账号或密码遭人非法使用或有任何异常破坏使用安全之情形时,应立即通知我们公司。但若是因您的保管疏忽,而导致账号、密码遭他人非法使用时,我们公司将不负责处理。
22 +
23 +5.(会员充值责任限制)
24 + 本网站会员使用本服务付费项目时所使用之充值点数,您了解当点数充值入本网站或是转入本服务付费项目后,无法取消、更改、退费或转入其他本网站里。若您使用虚伪不正之方式进行「充值」,我们公司保留随时终止您会员资格及使用本服务之权利,并将追究相关法律责任。
25 +
26 +6.(服务之终止与变更)
27 + 会员若有下列任一情形时,我们公司有权随时终止或变更任一会员账号之服务,且无需事先通知会员。就终止或更改会员使用本服务所可能产生之困扰、不便或损害,本服务对任何会员或第三人均不负任何责任。
28 +1.会员登录不实数据进行注册。
29 +2.使用中文、英文及数字以外之字符及不雅文字作为本服务之名称。
30 +3.冒用他人名义申请本服务之账号。
31 +4.使用虚伪不正当之方式进行充值。
32 +5.违反本服务条款时。
33 +6.违反公共安全、公共秩序与善良风俗之行为时。
34 +7.违反现行法律之行为时。
35 +
36 +7.(服务暂停或中断)
37 + 于下列情形任一情形发生时,我们公司有权暂停或中断本服务之全部或一部,对因此而产生之困扰、不便或损害,本服务对任何会员或第三人均不负任何责任。
38 +1.对本服务之相关软硬件设备与电子通信设备进行维修保养及施工时。
39 +2.发生突发性之软硬件设备与电子通信设备故障时。
40 +3.因天灾等不可抗力之因素致使本服务无法提供服务时。
41 +4.在紧急情况下为维护其他会员或第三人的人身、数据之完整安全。如因使用者违反法令或本服务条款或因不可归责于我们公司之事由而造成本服务之全部或一部暂停或中断时,暂停或中断期间之费用仍依正常标准计费。
42 +
43 +8.(服务变更权利)
44 + 我们公司将保留新增、修改或删除本服务之全部或一部之权利,且不另行个别通知,会员不得因此而要求任何补偿或赔偿。
45 +
46 +9.(责任范围)
47 + 本服务依我们公司既有之规划提供对于特定使用者之特殊需求,我们公司不担保本服务将完全符合您的需求。
48 + 本服务可能因自身、其他第三方或相关电信业者网络系统软硬件设备之故障或失灵;或人为操作上之疏失而造成中断、暂时无法使用、迟延、数据传输或储存上之错误;或遭第三人侵入系统篡改或伪造变造数据等。我们公司就以上情形不保证各项服务之稳定、安全、无误、及不中断。会员需明白使用本服务 之所有风险及可能致生之任何损害,不得因此而要求任何补偿或赔偿。
49 +
50 +10.(会员数据处理与隐私权保护)
51 + 对于会员所登录或留存之个人资料,您同意我们公司得于合理之范围内保存、搜集、处理、传递及使用会员个人资料或其衍生之相关电磁录,以提供会员其他信息服务,或作成会员统计数据、进行关于网络行为之调查或研究或为任何之合法使用。
52 + 对于会员所登录或留存之个人资料,我们公司在未获会员同意之前,不对外揭露会员之姓名、地址、电子邮件地址及其他依法受保护之个人资料,但下列情况不在此限:
53 +1.受司法、警察或其他有权机关基于法定程序之要求时。
54 +2.于维护公益或保护我们公司或他人权益时。
55 +3.因会员之行为违反法令或本服务条款之规定时。
56 +4.在紧急情况下为维护其他会员或第三人之人身、交易内容、游戏历程、个人资料之完整安全时。
57 +
58 +11.(知识产权)
59 + 此网站上之所有著作及数据,其著作权、专利权、商标、营业秘密、其他知识产权,所有权或其他权利,均为我们公司或其权利人所有,除事先 经我们公司或其各别权利人之合法授权外,会员不得擅自以重制、传输、改作、编辑或以其他任何形式、基于任何目的加以使用,违者应自行负 所有相关法律责任。
60 +
61 +12.(个别条款之效力)
62 + 本同意书所定之任何会员条款之全部或部分无效时,不影响其他条款之效力。
63 +
64 +13.(准据法)
65 + 本服务条款之解释及适用,以及会员因使用本服务而与我们公司间所生之权利义务关系,应依中国法律解释适用之(不含涉外民事法律适用法或其他类似法规)。
66 +
67 +14.(管辖法院)
68 + 因本服务条款而生之争议,均同意以我们公司所在地的人民法院为第一审管辖法院。
...\ No newline at end of file ...\ No newline at end of file
1 +{"gameId": "244ae3383d979a761ad2795b8c6dae43",
2 +"payorderurl": "http://183.136.223.85:9020/paycheck/create",
3 +"usertype": 215,
4 +"sdkSimpleName": "play800_ios", "screenOrientation": "2",
5 +"gamechannelid": "", "custom": "{}",
6 +"sdkVersionCode": "V4_0_0", "channel_id": "qyj01",
7 +"loginCheckUrl": "http://183.136.223.85:9010/logincheck/check",
8 +"appScheme": "com.hubing.qyj01", "c2": "", "c1": "",
9 +"client_secret": "39cbc57210de3b1762c4bbf87908fe23",
10 +"paycheckurl": "http://183.136.223.85:9020/paycheck/confirm",
11 +
12 +"site":"mhtx_ios",
13 +"key":"b7af49fb44dfcd8be9e4e5553c580093",
14 +"aid":"91007715568111428",
15 +"cid":"1",
16 +
17 +"gameSimpleName": "fytx_test"}
...\ No newline at end of file ...\ No newline at end of file
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>CFBundleDevelopmentRegion</key>
6 + <string>en</string>
7 + <key>CFBundleExecutable</key>
8 + <string>$(EXECUTABLE_NAME)</string>
9 + <key>CFBundleIdentifier</key>
10 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11 + <key>CFBundleInfoDictionaryVersion</key>
12 + <string>6.0</string>
13 + <key>CFBundleName</key>
14 + <string>$(PRODUCT_NAME)</string>
15 + <key>CFBundlePackageType</key>
16 + <string>APPL</string>
17 + <key>CFBundleShortVersionString</key>
18 + <string>1.0</string>
19 + <key>CFBundleSignature</key>
20 + <string>????</string>
21 + <key>CFBundleURLTypes</key>
22 + <array>
23 + <dict>
24 + <key>CFBundleTypeRole</key>
25 + <string>Editor</string>
26 + <key>CFBundleURLSchemes</key>
27 + <array>
28 + <string>com.youai.sdk</string>
29 + </array>
30 + </dict>
31 + </array>
32 + <key>CFBundleVersion</key>
33 + <string>1</string>
34 + <key>LSRequiresIPhoneOS</key>
35 + <true/>
36 + <key>NSAppTransportSecurity</key>
37 + <dict>
38 + <key>NSAllowsArbitraryLoads</key>
39 + <true/>
40 + </dict>
41 + <key>UILaunchStoryboardName</key>
42 + <string>LaunchScreen</string>
43 + <key>UIMainStoryboardFile</key>
44 + <string>Main</string>
45 + <key>UIRequiredDeviceCapabilities</key>
46 + <array>
47 + <string>armv7</string>
48 + </array>
49 + <key>UISupportedInterfaceOrientations</key>
50 + <array>
51 + <string>UIInterfaceOrientationLandscapeLeft</string>
52 + <string>UIInterfaceOrientationLandscapeRight</string>
53 + </array>
54 +</dict>
55 +</plist>
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>NSAppTransportSecurity</key>
6 + <dict>
7 + <key>NSAllowsArbitraryLoads</key>
8 + <true/>
9 + </dict>
10 +</dict>
11 +</plist>
1 +//
2 +// AppleIap.h
3 +// Demo_youdian
4 +//
5 +// Created by 许 on 17/6/20.
6 +// Copyright © 2017年 winFan. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +
11 +@interface AppleIap : NSObject
12 +
13 +
14 +-(void)applePay:(NSString*)products amount:(NSString*)amount queryId:(NSString*)queryId;
15 +
16 +@end
1 +//
2 +// AppleIap.m
3 +// Demo_youdian
4 +//
5 +// Created by 许 on 17/6/20.
6 +// Copyright © 2017年 winFan. All rights reserved.
7 +//
8 +
9 +#import "AppleIap.h"
10 +
11 +#import "IAPShare.h"
12 +#import <PoolSdk/PoolSdk2.h>
13 +
14 +@implementation AppleIap
15 +
16 +/**
17 + @return 商品ID
18 + */
19 +- (NSString*)getProductIdByAmount:(NSString*)products amount:(NSString*)amount
20 +{
21 + NSData* jsonData = [NSJSONSerialization dataWithJSONObject:products options:NSJSONWritingPrettyPrinted error:nil];
22 + if(jsonData){
23 + NSDictionary* productList = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];
24 + if(productList){
25 + NSEnumerator* keysList = [productList keyEnumerator];
26 + id keyValue;
27 + while (keyValue = [keysList nextObject])
28 + {
29 + NSString* appleAmount = [[productList objectForKey:keyValue] objectForKey:@"amount"];
30 + if(appleAmount.intValue == amount.intValue){
31 + NSLog(@"appleAmount:%@ amount:%@",appleAmount,amount);
32 + return keyValue;
33 + }
34 + }
35 + }
36 + }
37 + NSLog(@"amount get productId error amount:%@",amount);
38 + return nil;
39 +}
40 +
41 +
42 +-(void)applePay:(NSString *)products amount:(NSString *)amount queryId:(NSString *)queryId
43 +{
44 + //内购ID
45 + NSString* productId = [self getProductIdByAmount:products amount:amount];
46 + if(productId){
47 + [self ipaPay:productId queryId:queryId];
48 + }else{
49 + NSLog(@"get apple product id error");
50 + }
51 +}
52 +
53 +/**
54 + 苹果支付结果回调
55 + */
56 +
57 +- (void)applePayCallBack:(NSString*)receiptStr queryId:(NSString*)queryId
58 +{
59 + //NSDictionary* payResultDic = notification.object;
60 + //NSString* receiptStr = [payResultDic objectForKey:@"payResult"];
61 + //NSString* queryId = [payResultDic objectForKey:@"query_id"];
62 + NSLog(@"applePayCallBack");
63 + NSDictionary* receiptDic = [NSDictionary dictionaryWithObjectsAndKeys:receiptStr,@"receipt",queryId,@"query_id", nil];
64 + NSString* result = [[NetCenter getInstance] httpPostSyn:[PoolUtils createPayUrl] :receiptDic];
65 +
66 + if([@"success" isEqualToString:result]){//确认订单成功
67 + }else{//失败
68 + NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
69 + NSMutableArray* queryIdArray = [userDefaults objectForKey:@"queryIds"];
70 +
71 + NSMutableArray* tempQueryIdArray = [[NSMutableArray alloc] initWithCapacity:10];
72 +
73 + if (queryIdArray) {
74 + }else{
75 + queryIdArray = [[NSMutableArray alloc]initWithCapacity:10];
76 + }
77 +
78 + for (NSString* arrayQueryId in queryIdArray) {
79 + [tempQueryIdArray addObject:arrayQueryId];
80 + }
81 +
82 + [tempQueryIdArray addObject:queryId];
83 + [userDefaults setObject:tempQueryIdArray forKey:@"queryIds"];
84 + [userDefaults setObject:receiptStr forKey:queryId];
85 + [userDefaults synchronize];
86 + }
87 +}
88 +
89 +
90 +
91 +- (void)initIpa:(NSString*)productId{
92 + if(![IAPShare sharedHelper].iap){
93 + NSLog(@"iap init");
94 + }
95 +
96 + NSSet* dataSet = [[NSSet alloc]initWithObjects:productId, nil];
97 + [IAPShare sharedHelper].iap = [[IAPHelper alloc] initWithProductIdentifiers:dataSet];
98 +}
99 +
100 +
101 +- (void)ipaPay:(NSString*) productId queryId:(NSString*)queryId{
102 + @synchronized([PoolSdk shareSDK]) {
103 + if([PoolSdk shareSDK].isApplePaying) {
104 + NSLog(@"apple paying");
105 + return;
106 + };
107 + [PoolSdk shareSDK].isApplePaying = true;
108 + }
109 + NSLog(@"productId:%@",productId);
110 + [self initIpa:productId];
111 + [[IAPShare sharedHelper].iap requestProductsWithCompletion:^(SKProductsRequest* request,SKProductsResponse* response)
112 + {
113 + NSLog(@"response");
114 + if(response && response > 0 ) {
115 + NSLog(@"response %lu",(unsigned long)[[IAPShare sharedHelper].iap.products count]);
116 + if([[IAPShare sharedHelper].iap.products count] > 0){
117 + NSLog(@"product count 1");
118 + SKProduct* product =[[IAPShare sharedHelper].iap.products objectAtIndex:0];
119 + NSString* queryIdStr = queryId;
120 + [[IAPShare sharedHelper].iap buyProduct:product
121 + onCompletion:^(SKPaymentTransaction* trans){
122 + [PoolSdk shareSDK].isApplePaying = false;
123 + NSLog(@"buy product callback");
124 +
125 + if(trans.error)
126 + {
127 + NSLog(@"Fail %@",[trans.error localizedDescription]);
128 + }
129 + else if(trans.transactionState == SKPaymentTransactionStatePurchased) {
130 +
131 + NSData* receiptData = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
132 +
133 + NSString* receiptStr = [receiptData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
134 +
135 + receiptStr = [receiptStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
136 +
137 + [self applePayCallBack:receiptStr queryId:queryIdStr];
138 + }
139 + else if(trans.transactionState == SKPaymentTransactionStateFailed) {
140 + NSLog(@"Fail");
141 + }
142 + }];
143 + }else{
144 + [PoolSdk shareSDK].isApplePaying = false;
145 + }
146 + }else{
147 + [PoolSdk shareSDK].isApplePaying = false;
148 + }
149 + }];
150 +}
151 +
152 +@end
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>CFBundleExecutable</key>
6 + <string>$(EXECUTABLE_NAME)</string>
7 + <key>CFBundleIdentifier</key>
8 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
9 + <key>CFBundleInfoDictionaryVersion</key>
10 + <string>6.0</string>
11 + <key>CFBundleName</key>
12 + <string>$(PRODUCT_NAME)</string>
13 + <key>CFBundlePackageType</key>
14 + <string>APPL</string>
15 + <key>CFBundleShortVersionString</key>
16 + <string>1.0</string>
17 + <key>CFBundleSignature</key>
18 + <string>????</string>
19 + <key>CFBundleVersion</key>
20 + <string>1</string>
21 + <key>LSApplicationQueriesSchemes</key>
22 + <array>
23 + <string>weixin</string>
24 + <string>alipay</string>
25 + </array>
26 + <key>LSRequiresIPhoneOS</key>
27 + <true/>
28 + <key>NSAppTransportSecurity</key>
29 + <dict>
30 + <key>NSAllowsArbitraryLoads</key>
31 + <true/>
32 + </dict>
33 + <key>UILaunchStoryboardName</key>
34 + <string>LaunchScreen</string>
35 + <key>UIMainStoryboardFile</key>
36 + <string>Main</string>
37 + <key>UIRequiredDeviceCapabilities</key>
38 + <array>
39 + <string>armv7</string>
40 + </array>
41 + <key>UISupportedInterfaceOrientations</key>
42 + <array>
43 + <string>UIInterfaceOrientationLandscapeLeft</string>
44 + <string>UIInterfaceOrientationLandscapeRight</string>
45 + </array>
46 +</dict>
47 +</plist>
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>323G75TBBT.com.pfd.jiankefy</string>
8 + </array>
9 +</dict>
10 +</plist>
1 +Versions/Current/Headers
...\ No newline at end of file ...\ No newline at end of file
1 +Versions/Current/QYGameSDK
...\ No newline at end of file ...\ No newline at end of file
1 +//
2 +// GZQYAmountCollectionViewCell.h
3 +// GameSDK
4 +//
5 +// Created by qianyou on 16/1/7.
6 +// Copyright © 2016年 qianyou. All rights reserved.
7 +//
8 +
9 +#import <UIKit/UIKit.h>
10 +
11 +@interface GZQYAmountCollectionViewCell : UICollectionViewCell
12 +
13 +@property (weak, nonatomic) IBOutlet UIImageView *cellBGImageView;
14 +
15 +
16 +@property (weak, nonatomic) IBOutlet UILabel *cellAmountLabel;
17 +
18 +@end
1 +//
2 +// GZQYNetworkOperator.h
3 +// GameSDK
4 +//
5 +// Created by qianyou on 15/8/20.
6 +// Copyright (c) 2015年 qianyou. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +#import "GZQYTypedef.h"
11 +
12 +@interface GZQYNetworkOperator : NSObject
13 +
14 ++(instancetype)defaultOperator;
15 +
16 +-(void)postWithData:(NSMutableDictionary *)data
17 + module:(NSString *)module
18 + action:(NSString *)action
19 + completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler;
20 +
21 +-(void)getWithURL:(NSString *)head data:(NSMutableDictionary *)data callback:(NewNetWorkBlock)callback;
22 +
23 +@end
1 +//
2 +// GZQYSDKManager.h
3 +// GameSDK
4 +//
5 +// Created by qianyou on 15/9/11.
6 +// Copyright (c) 2015年 qianyou. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +#import "GZQYUserInfo.h"
11 +#import "GZQYTypeDef.h"
12 +#import <UIKit/UIKit.h>
13 +
14 +
15 +@interface GZQYSDKManager : NSObject <UIAlertViewDelegate>
16 +
17 +//-(void)showLoginViewWithCode:(int)resquestCode callback:(Callback)callback;
18 +
19 ++(instancetype)defaultManager;
20 +
21 +-(void)initSDK;
22 +
23 +-(void)showLoginViewWithSuperView:(UIView *)view;
24 +
25 +-(void)showPaymentViewWithAmount:(NSInteger) amount info:(NSString *)info;
26 +
27 +-(void)showFloatView:(UIView *)view;
28 +
29 +-(void)setServerWithServerid:(NSString *)serverid servername:(NSString *)servername;
30 +
31 +-(void)setRoleWithID:(NSString *)roleid name:(NSString *)name;
32 +
33 +-(void)setRank:(NSString *)rank;
34 +
35 +-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url;
36 +
37 +-(BOOL)handleApplication :(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
38 +
39 +@end
1 +//
2 +// GZQYTypeDef.h
3 +// GameSDK
4 +//
5 +// Created by qianyou on 15/9/7.
6 +// Copyright (c) 2015年 qianyou. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +#import "Order.h"
11 +
12 +static const int RESPONSE_ERROR = 100;
13 +
14 +static const int HTTP_ERROR = 101;
15 +
16 +static const int RESPONSE_OK = 200;
17 +
18 +static const int OK = 200;
19 +
20 +static const int QQ = 0;
21 +
22 +static const int QZONE = 1;
23 +
24 +static const int RESPONSE_FAIL = 301;
25 +
26 +static NSString *const URL_WECHAT_HEADER = @"https://api.weixin.qq.com";
27 +
28 +static NSString *const URL_WECHAT_ACCESS_TOKEN = @"/sns/oauth2/access_token";
29 +
30 +static NSString *const URL_WECHAT_REFRESH_TOKEN = @"/sns/oauth2/refresh_token";
31 +
32 +static NSString *const URL_WECHAT_AUTH = @"/sns/auth";
33 +
34 +static NSString *const URL_WECHAT_USERINFO = @"/sns/userinfo";
35 +
36 +static NSString * LOGIN_NOTIFICATION = @"login_notification";
37 +
38 +static NSString * PAY_NOTIFICATION = @"pay_notification";
39 +
40 +static NSString * SUCCESS = @"success";
41 +
42 +typedef void(^NetWorkBlock)(NSURLResponse *, NSData *, NSError *);
43 +
44 +typedef void(^NewNetWorkBlock)(NSData * _Nullable, NSURLResponse * _Nullable, NSError * _Nullable);
45 +
46 +typedef void(^ResponseBlock)(int, NSMutableDictionary *);
47 +
48 +typedef void(^LoginBlock)(int, NSMutableDictionary *);
49 +
50 +typedef void(^ResponseArrayBlock)(int, NSMutableArray *);
51 +
52 +typedef void(^OrderBlock)(Order *);
53 +
54 +@interface GZQYTypeDef : NSObject
55 +
56 +
57 +
58 +//static const int RESPONSE_OK = 200;
59 +
60 +@end
1 +//
2 +// User.h
3 +// GameSDK
4 +//
5 +// Created by qianyou on 15/9/11.
6 +// Copyright (c) 2015年 qianyou. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +
11 +@interface GZQYUserInfo : NSObject
12 +
13 +@property (strong, nonatomic, readonly) NSString *userName;
14 +
15 +@property (strong, nonatomic, readonly) NSString *userId;
16 +
17 +@property (strong, nonatomic, readonly) NSString *nickname;
18 +
19 +@property (strong, nonatomic, readonly) NSString *sex;
20 +
21 +@property (strong, nonatomic, readonly) NSString *logintime;
22 +
23 +@property (strong, nonatomic, readonly) NSString *sign;
24 +
25 +@property (strong, nonatomic, readonly) NSString *openidChannel;
26 +
27 +@property (strong, nonatomic, readonly) NSString *openUID;
28 +
29 ++(instancetype)instance;
30 +
31 +-(NSMutableDictionary *)dictionaryWithUserInfo;
32 +
33 +-(NSMutableDictionary *)dictionaryWithUser;
34 +
35 +@end
1 +//
2 +// Order.h
3 +// MyAlipaySample
4 +//
5 +// Created by qianyou on 15/9/6.
6 +// Copyright (c) 2015年 qianyou. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +
11 +@interface Order : NSObject
12 +
13 +@property(nonatomic, copy) NSString * partner;
14 +@property(nonatomic, copy) NSString * seller;
15 +@property(nonatomic, copy) NSString * tradeNO;
16 +@property(nonatomic, copy) NSString * productName;
17 +@property(nonatomic, copy) NSString * productDescription;
18 +@property(nonatomic, copy) NSString * amount;
19 +@property(nonatomic, copy) NSString * notifyURL;
20 +
21 +@property(nonatomic, copy) NSString * service;
22 +@property(nonatomic, copy) NSString * paymentType;
23 +@property(nonatomic, copy) NSString * inputCharset;
24 +@property(nonatomic, copy) NSString * itBPay;
25 +@property(nonatomic, copy) NSString * showUrl;
26 +
27 +
28 +@property(nonatomic, copy) NSString * rsaDate;//可选
29 +@property(nonatomic, copy) NSString * appID;//可选
30 +@property(nonatomic, copy) NSString * extern_token;
31 +@property(nonatomic, copy) NSString * msg;
32 +
33 +//======================微信专用参数===================
34 +@property (nonatomic, copy)NSString * appid;
35 +@property (nonatomic, copy)NSString * noncestr;
36 +@property (nonatomic, copy)NSString * package;
37 +@property (nonatomic, copy)NSString * partnerid;
38 +@property (nonatomic, copy)NSString * prepayid;
39 +@property (nonatomic, copy)NSString * timestamp;
40 +@property (nonatomic, copy)NSString * sign;
41 +//==================================================
42 +
43 +@property(nonatomic, readonly) NSString * privateKey;
44 +
45 +@property(nonatomic, readonly) NSMutableDictionary * extraParams;
46 +
47 +-(instancetype)initWithData:(NSDictionary *)data;
48 +
49 +
50 +@end
1 +3//
2 +// QYGameSDK.h
3 +// QYGameSDK
4 +//
5 +// Created by qianyou on 16/2/16.
6 +// Copyright © 2016年 qianyou. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +#import <UIKit/UIKit.h>
11 +#import
12 +
13 +@interface QYGameSDK : NSObject
14 +
15 +@end
1 +//
2 +// WechatAuthSDK.h
3 +// WechatAuthSDK
4 +//
5 +// Created by 李凯 on 13-11-29.
6 +// Copyright (c) 2013年 Tencent. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +#import <UIKit/UIKit.h>
11 +
12 +enum AuthErrCode {
13 + WechatAuth_Err_Ok = 0, //Auth成功
14 + WechatAuth_Err_NormalErr = -1, //普通错误
15 + WechatAuth_Err_NetworkErr = -2, //网络错误
16 + WechatAuth_Err_GetQrcodeFailed = -3, //获取二维码失败
17 + WechatAuth_Err_Cancel = -4, //用户取消授权
18 + WechatAuth_Err_Timeout = -5, //超时
19 +};
20 +
21 +@protocol WechatAuthAPIDelegate<NSObject>
22 +@optional
23 +
24 +- (void)onAuthGotQrcode:(UIImage *)image; //得到二维码
25 +- (void)onQrcodeScanned; //二维码被扫描
26 +- (void)onAuthFinish:(int)errCode AuthCode:(NSString *)authCode; //成功登录
27 +
28 +@end
29 +
30 +@interface WechatAuthSDK : NSObject{
31 + NSString *_sdkVersion;
32 + __weak id<WechatAuthAPIDelegate> _delegate;
33 +}
34 +
35 +@property(nonatomic, weak) id<WechatAuthAPIDelegate> delegate;
36 +@property(nonatomic, readonly) NSString *sdkVersion; //authSDK版本号
37 +
38 +/*! @brief 发送登录请求,等待WechatAuthAPIDelegate回调
39 + *
40 + * @param appId 微信开发者ID
41 + * @param nonceStr 一个随机的尽量不重复的字符串,用来使得每次的signature不同
42 + * @param timeStamp 时间戳
43 + * @param scope 应用授权作用域,拥有多个作用域用逗号(,)分隔
44 + * @param signature 签名
45 + * @param schemeData 会在扫码后拼在scheme后
46 + * @return 成功返回YES,失败返回NO
47 + 注:该实现只保证同时只有一个Auth在运行,Auth未完成或未Stop再次调用Auth接口时会返回NO。
48 + */
49 +
50 +- (BOOL)Auth:(NSString *)appId
51 + nonceStr:(NSString *)nonceStr
52 + timeStamp:(NSString*)timeStamp
53 + scope:(NSString *)scope
54 + signature:(NSString *)signature
55 + schemeData:(NSString *)schemeData;
56 +
57 +
58 +/*! @brief 暂停登录请求
59 + *
60 + * @return 成功返回YES,失败返回NO。
61 + */
62 +- (BOOL)StopAuth;
63 +
64 +@end
1 +A
...\ No newline at end of file ...\ No newline at end of file
1 +//
2 +// NewTtack.h
3 +// NewTtack
4 +//
5 +// Created by yun on 16/1/11.
6 +// Copyright © 2016年 yun. All rights reserved.
7 +//
8 +#define TRACK_VERSION @"3.0.4"
9 +
10 +#import <Foundation/Foundation.h>
11 +#import <UIKit/UIKit.h>
12 +
13 +
14 +/*
15 + 热云移动广告效果监测 平台 api 请选择对应的api进行使用
16 + */
17 +NS_ASSUME_NONNULL_BEGIN
18 +@interface ReYunChannel : NSObject
19 +//开启打印日志 正式上线包请关掉
20 ++(void) setPrintLog :(BOOL)print;
21 +// 开启数据统计
22 ++ (void)initWithappKey:(NSString *)appKey withChannelId:(NSString *)channelId;
23 +//注册成功后调用
24 ++ (void)setRegisterWithAccountID:(NSString *)account;
25 +//登陆成功后调用
26 ++ (void)setLoginWithAccountID:(NSString *)account;
27 +//开始付费时 调用(人民币单位是元)
28 ++(void)setryzfStart:(NSString *)transactionId ryzfType:(NSString*)ryzfType currentType:(NSString*)currencyType currencyAmount:(float)currencyAmount;
29 +// 支付完成,付费分析,记录玩家充值的金额(人民币单位是元)
30 ++(void)setryzf:(NSString *)transactionId ryzfType:(NSString*)ryzfType currentType:(NSString*)currencyType currencyAmount:(float)currencyAmount;
31 +//自定义事件
32 ++(void)setEvent:(NSString *)eventName;
33 +//获取设备信息
34 ++(NSString*)getDeviceId;
35 +
36 ++(BOOL)RYApplication:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<NSString *,id> *)options;
37 +@end
38 +NS_ASSUME_NONNULL_END
1 +
2 +//
3 +// PPInterface.h
4 +// PoolSdk
5 +//
6 +// Created by winFan on 11/23/15.
7 +// Copyright (c) 2015 winFan. All rights reserved.
8 +//
9 +
10 +#import <PoolSdk/PoolSdk2.h>
11 +@interface SDKInterface : Interface
12 +
13 +@end
1 +//
2 +// UnionInterface.m
3 +// PoolSdk
4 +//
5 +// Created by winFan on 11/23/15.
6 +// Copyright (c) 2015 winFan. All rights reserved.
7 +//
8 +#include "SDKInterface.h"
9 +#import <UIKit/UIKit.h>
10 +#import <QYGameSDK/GZQYSDKManager.h>
11 +#import "qyUtils.h"
12 +#import "AppleIap.h"
13 +#import "ReYunTrack.h"
14 +
15 +@implementation SDKInterface : Interface
16 +
17 +/**
18 + 初始化SDK
19 +*/
20 +- (void)SDKinit:(UIViewController *) control
21 +{
22 + //必须继承
23 + [super SDKinit:control];
24 +
25 + PoolConfig *config = [PoolConfig getInstance];
26 + NSString *reyunAppKey = [config getValueByKey:@"reyunAppKey"];
27 +
28 + [ReYunChannel initWithappKey:reyunAppKey withChannelId:@"_default_"];
29 +
30 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginResponse:) name:LOGIN_NOTIFICATION object:Nil];
31 +
32 +
33 +}
34 +
35 +/**
36 + 登录SDK
37 + */
38 +- (void)SDKloginSDK
39 +{
40 + NSLog(@"调用了LoginSDK");
41 + [[GZQYSDKManager defaultManager] showLoginViewWithSuperView:self.controller.view];
42 +}
43 +
44 +-(void)loginResponse:(NSNotification *)notification
45 +{
46 + NSDictionary *userinfo = notification.userInfo;
47 + //是否登录成功
48 + NSString *tag = userinfo[@"tag"];
49 + if ([SUCCESS isEqualToString:tag]) {
50 + GZQYUserInfo *user = userinfo[@"userinfo"];
51 + //处理登录成功后逻辑
52 + [self loginCheck:user];
53 + }else{
54 + [[PoolChecker getInstance] sendNotice:PoolSDKNotificationLogin notiName:@"loginFail"
55 + statusCode:POOLSDK_ERROR_LOGIN_FAILED description:@"loginFail" extendData:nil];
56 + }
57 +}
58 +
59 +
60 +- (NSString*)dictionaryToJson:(NSDictionary *)dic
61 +{
62 + NSError *parseError = nil;
63 + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
64 + NSString *jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
65 + jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@" " withString:@""];
66 + jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\n" withString:@""];
67 + return jsonStr;
68 +}
69 +
70 +/*
71 + *登录验证请求方法模版
72 + */
73 +- (void)loginCheck:(GZQYUserInfo *) qyUserInfo
74 +{
75 + PoolLoginInfo *loginInfo = [[PoolLoginInfo alloc]init];
76 + loginInfo.openId = [qyUserInfo userId];//渠道userId
77 + loginInfo.timestamp = [qyUserInfo logintime];
78 + loginInfo.sign = [qyUserInfo sign];//渠道SDK的token
79 +
80 + NSMutableDictionary *userDic = [[NSMutableDictionary alloc]init];
81 + [userDic setObject:[qyUserInfo userId] forKey:@"userid"];
82 + [userDic setObject:[qyUserInfo openUID] forKey:@"openuid"];
83 + [userDic setObject:[qyUserInfo logintime] forKey:@"logintime"];
84 + [userDic setObject:[qyUserInfo nickname] forKey:@"nickname"];
85 + [userDic setObject:[qyUserInfo sex] forKey:@"sex"];
86 + [userDic setObject:[qyUserInfo sign] forKey:@"sign"];
87 +
88 + NSString *otherJson = [self dictionaryToJson:userDic];
89 + otherJson = [otherJson stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
90 + loginInfo.other = otherJson;
91 +
92 + dispatch_async(dispatch_get_global_queue(0, 0), ^{
93 + [[PoolChecker getInstance]startCheck:loginInfo];//登录验证请求
94 + });
95 + [[GZQYSDKManager defaultManager] showFloatView:self.controller.view];
96 +}
97 +
98 +
99 +- (void)SDKreport:(PoolReportInfo *)reportInfo
100 +{
101 + NSLog(@"reportInfo");
102 + if ([REPORT_CREATEROLE isEqualToString:[reportInfo reportType]]) {
103 + [ReYunChannel setRegisterWithAccountID:[reportInfo playerId]];
104 + }else if ([[reportInfo reportType] isEqualToString:REPORT_ENTER]) {
105 + [[GZQYSDKManager defaultManager] setServerWithServerid:[reportInfo serverId] servername:[reportInfo serverName]];
106 + [[GZQYSDKManager defaultManager] setRoleWithID:[reportInfo playerId] name:[reportInfo playerName]];
107 + [ReYunChannel setLoginWithAccountID:[reportInfo playerId]];
108 + }
109 +}
110 +
111 +/**
112 + @return 商品名称
113 + */
114 +- (NSString*)getProductNameByAmount:(NSString*)products amount:(NSString*)amount
115 +{
116 + NSData* jsonData = [NSJSONSerialization dataWithJSONObject:products options:NSJSONWritingPrettyPrinted error:nil];
117 + if(jsonData){
118 + NSDictionary* productList = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];
119 + if(productList){
120 + NSEnumerator* keysList = [productList keyEnumerator];
121 + id keyValue;
122 + while (keyValue = [keysList nextObject])
123 + {
124 + NSString* appleAmount = [[productList objectForKey:keyValue] objectForKey:@"amount"];
125 + if(appleAmount.intValue == amount.intValue){
126 + NSString* productName = [[productList objectForKey:keyValue] objectForKey:@"name"];
127 + return productName;
128 + }
129 + }
130 + }
131 + }
132 + NSLog(@"get product name error amount:%@",amount);
133 + return @"元宝";
134 +}
135 +
136 +/**
137 + @return 商品ID
138 + */
139 +- (NSString*)getProductIdByAmount:(NSString*)products amount:(NSString*)amount
140 +{
141 + NSData* jsonData = [NSJSONSerialization dataWithJSONObject:products options:NSJSONWritingPrettyPrinted error:nil];
142 + if(jsonData){
143 + NSDictionary* productList = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];
144 + if(productList){
145 + NSEnumerator* keysList = [productList keyEnumerator];
146 + id keyValue;
147 + while (keyValue = [keysList nextObject])
148 + {
149 + NSLog(@"i found %@",keyValue);
150 + NSString* appleAmount = [[productList objectForKey:keyValue] objectForKey:@"amount"];
151 + NSLog(@"appleAmount:%@ amount:%@",appleAmount,amount);
152 + if(appleAmount.intValue == amount.intValue){
153 + return keyValue;
154 + }
155 + }
156 + }
157 + }
158 + return @"unknow";
159 +}
160 +
161 +- (void)receiveCreateOrder:(NSNotification *)notification
162 +{
163 + NSLog(@"创建订单成功");
164 + PoolPayInfo *payInfo = [notification object];
165 +
166 + NSString *result = [[[qyUtitls alloc] init] setUserName:[[PoolChecker getInstance] userId]];
167 + if ([@"1" isEqualToString:result]) {
168 + [[[qyUtitls alloc]init] setUserName:[[PoolChecker getInstance] userId] setServer:[payInfo serverName] setRoleID:[payInfo playerId] setRoleName:[payInfo playerName] setAmount:[payInfo postAmount] setInfo:[payInfo queryId], nil];
169 + }else{
170 + NSString* products = [payInfo products];
171 + [[[AppleIap alloc] init]applePay:products amount:[payInfo postAmount] queryId:[payInfo queryId]];
172 + }
173 +}
174 +
175 +
176 +-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
177 +{
178 + [[GZQYSDKManager defaultManager] initSDK];
179 + [[PoolChecker getInstance] sendNotice:PoolSDKNotificationInitSDK notiName:@"InitSuccess" statusCode:POOLSDK_NO_ERROR description:@"initSuccess" extendData:nil];
180 + return YES;
181 +}
182 +
183 +-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
184 +{
185 + [[GZQYSDKManager defaultManager] handleApplication:application openURL:url sourceApplication:sourceApplication annotation:annotation];
186 + return YES;
187 +}
188 +
189 +
190 +-(NSString*)getCurrentTimestamp{
191 + // 时间戳转时间
192 + NSTimeInterval interval = [[NSDate date] timeIntervalSince1970] * 1000;
193 + NSString* timeStr = [[NSString alloc]initWithFormat:@"%.f",interval];
194 + return timeStr;
195 +}
196 +
197 +@end
...\ No newline at end of file ...\ No newline at end of file
1 +//
2 +// IAPHelper.h
3 +//
4 +// Original Created by Ray Wenderlich on 2/28/11.
5 +// Created by saturngod on 7/9/12.
6 +// Copyright 2011 Ray Wenderlich. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +#import "StoreKit/StoreKit.h"
11 +
12 +
13 +typedef void (^IAPProductsResponseBlock)(SKProductsRequest* request , SKProductsResponse* response);
14 +
15 +typedef void (^IAPbuyProductCompleteResponseBlock)(SKPaymentTransaction* transcation);
16 +
17 +typedef void (^checkReceiptCompleteResponseBlock)(NSString* response,NSError* error);
18 +
19 +typedef void (^resoreProductsCompleteResponseBlock) (SKPaymentQueue* payment,NSError* error);
20 +
21 +@interface IAPHelper : NSObject <SKProductsRequestDelegate, SKPaymentTransactionObserver>
22 +
23 +@property (nonatomic,strong) NSSet *productIdentifiers;
24 +@property (nonatomic,strong) NSArray * products;
25 +@property (nonatomic,strong) NSMutableSet *purchasedProducts;
26 +@property (nonatomic,strong) SKProductsRequest *request;
27 +@property (nonatomic) BOOL production;
28 +
29 +//init With Product Identifiers
30 +- (id)initWithProductIdentifiers:(NSSet *)productIdentifiers;
31 +
32 +//get Products List
33 +- (void)requestProductsWithCompletion:(IAPProductsResponseBlock)completion;
34 +
35 +
36 +//Buy Product
37 +- (void)buyProduct:(SKProduct *)productIdentifier onCompletion:(IAPbuyProductCompleteResponseBlock)completion;
38 +
39 +//restore Products
40 +- (void)restoreProductsWithCompletion:(resoreProductsCompleteResponseBlock)completion;
41 +
42 +//check isPurchased or not
43 +- (BOOL)isPurchasedProductsIdentifier:(NSString*)productID;
44 +
45 +//check receipt but recommend to use in server side instead of using this function
46 +- (void)checkReceipt:(NSData*)receiptData onCompletion:(checkReceiptCompleteResponseBlock)completion;
47 +
48 +- (void)checkReceipt:(NSData*)receiptData AndSharedSecret:(NSString*)secretKey onCompletion:(checkReceiptCompleteResponseBlock)completion;
49 +
50 +
51 +//saved purchased product
52 +- (void)provideContentWithTransaction:(SKPaymentTransaction *)transaction;
53 +
54 +- (void)provideContent:(NSString *)productIdentifier __deprecated_msg("use provideContentWithTransaction: instead.");
55 +
56 +//clear the saved products
57 +- (void)clearSavedPurchasedProducts;
58 +- (void)clearSavedPurchasedProductByID:(NSString*)productIdentifier;
59 +
60 +
61 +//Get The Price with local currency
62 +- (NSString *)getLocalePrice:(SKProduct *)product;
63 +
64 +@end
1 +//
2 +// IAPHelper.m
3 +//
4 +// Original Created by Ray Wenderlich on 2/28/11.
5 +// Created by saturngod on 7/9/12.
6 +// Copyright 2011 Ray Wenderlich. All rights reserved.
7 +//
8 +
9 +#import "IAPHelper.h"
10 +#import "NSString+Base64.h"
11 +#import "SFHFKeychainUtils.h"
12 +
13 +#if ! __has_feature(objc_arc)
14 +#error You need to either convert your project to ARC or add the -fobjc-arc compiler flag to IAPHelper.m.
15 +#endif
16 +
17 +
18 +@interface IAPHelper()
19 +@property (nonatomic,copy) IAPProductsResponseBlock requestProductsBlock;
20 +@property (nonatomic,copy) IAPbuyProductCompleteResponseBlock buyProductCompleteBlock;
21 +@property (nonatomic,copy) resoreProductsCompleteResponseBlock restoreCompletedBlock;
22 +@property (nonatomic,copy) checkReceiptCompleteResponseBlock checkReceiptCompleteBlock;
23 +
24 +@property (nonatomic,strong) NSMutableData* receiptRequestData;
25 +@end
26 +
27 +@implementation IAPHelper
28 +
29 +- (id)initWithProductIdentifiers:(NSSet *)productIdentifiers {
30 + if ((self = [super init])) {
31 +
32 + // Store product identifiers
33 + _productIdentifiers = productIdentifiers;
34 +
35 + // Check for previously purchased products
36 + NSMutableSet * purchasedProducts = [NSMutableSet set];
37 + for (NSString * productIdentifier in _productIdentifiers) {
38 +
39 + BOOL productPurchased = NO;
40 +
41 + NSString* password = [SFHFKeychainUtils getPasswordForUsername:productIdentifier andServiceName:@"IAPHelper" error:nil];
42 + if([password isEqualToString:@"YES"])
43 + {
44 + productPurchased = YES;
45 + }
46 +
47 + if (productPurchased) {
48 + [purchasedProducts addObject:productIdentifier];
49 + }
50 + }
51 + if ([SKPaymentQueue defaultQueue]) {
52 + [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
53 +
54 + self.purchasedProducts = purchasedProducts;
55 + }
56 +
57 + }
58 + return self;
59 +}
60 +
61 +- (void)dealloc
62 +{
63 + if ([SKPaymentQueue defaultQueue]) {
64 + [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
65 + }
66 +}
67 +
68 +-(BOOL)isPurchasedProductsIdentifier:(NSString*)productID
69 +{
70 +
71 + BOOL productPurchased = NO;
72 +
73 + NSString* password = [SFHFKeychainUtils getPasswordForUsername:productID andServiceName:@"IAPHelper" error:nil];
74 + if([password isEqualToString:@"YES"])
75 + {
76 + productPurchased = YES;
77 + }
78 +
79 + return productPurchased;
80 +}
81 +
82 +- (void)requestProductsWithCompletion:(IAPProductsResponseBlock)completion {
83 +
84 + self.request = [[SKProductsRequest alloc] initWithProductIdentifiers:_productIdentifiers];
85 + _request.delegate = self;
86 + self.requestProductsBlock = completion;
87 +
88 + [_request start];
89 +
90 +}
91 +
92 +- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
93 +
94 + self.products = response.products;
95 + self.request = nil;
96 +
97 + if(_requestProductsBlock) {
98 + _requestProductsBlock (request,response);
99 + }
100 +}
101 +
102 +- (void)recordTransaction:(SKPaymentTransaction *)transaction {
103 + // TODO: Record the transaction on the server side...
104 +}
105 +
106 +
107 +- (void)provideContentWithTransaction:(SKPaymentTransaction *)transaction {
108 +
109 + NSString* productIdentifier = @"";
110 +
111 + if (transaction.originalTransaction) {
112 + productIdentifier = transaction.originalTransaction.payment.productIdentifier;
113 + }
114 + else {
115 + productIdentifier = transaction.payment.productIdentifier;
116 + }
117 +
118 + //check productIdentifier exist or not
119 + //it can be possible nil
120 + if (productIdentifier) {
121 + [SFHFKeychainUtils storeUsername:productIdentifier andPassword:@"YES" forServiceName:@"IAPHelper" updateExisting:YES error:nil];
122 + [_purchasedProducts addObject:productIdentifier];
123 + }
124 +}
125 +
126 +- (void)provideContent:(NSString *)productIdentifier {
127 +
128 + [SFHFKeychainUtils storeUsername:productIdentifier andPassword:@"YES" forServiceName:@"IAPHelper" updateExisting:YES error:nil];
129 +
130 + [_purchasedProducts addObject:productIdentifier];
131 +
132 +
133 +}
134 +
135 +- (void)clearSavedPurchasedProducts {
136 +
137 + for (NSString * productIdentifier in _productIdentifiers) {
138 + [self clearSavedPurchasedProductByID:productIdentifier];
139 + }
140 +
141 +}
142 +- (void)clearSavedPurchasedProductByID:(NSString*)productIdentifier {
143 +
144 + [SFHFKeychainUtils deleteItemForUsername:productIdentifier andServiceName:@"IAPHelper" error:nil];
145 + [_purchasedProducts removeObject:productIdentifier];
146 +
147 +}
148 +
149 +
150 +- (void)completeTransaction:(SKPaymentTransaction *)transaction {
151 +
152 +
153 +
154 + [self recordTransaction: transaction];
155 +
156 + if ([SKPaymentQueue defaultQueue]) {
157 + [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
158 + }
159 +
160 + if(_buyProductCompleteBlock)
161 + {
162 + _buyProductCompleteBlock(transaction);
163 + }
164 +
165 +}
166 +
167 +- (void)restoreTransaction:(SKPaymentTransaction *)transaction {
168 +
169 +
170 + [self recordTransaction: transaction];
171 + [self provideContentWithTransaction:transaction];
172 +
173 + if ([SKPaymentQueue defaultQueue]) {
174 + [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
175 +
176 +
177 + if(_buyProductCompleteBlock!=nil)
178 + {
179 + _buyProductCompleteBlock(transaction);
180 + }
181 + }
182 +
183 +}
184 +
185 +- (void)failedTransaction:(SKPaymentTransaction *)transaction {
186 +
187 + if (transaction.error.code != SKErrorPaymentCancelled)
188 + {
189 + NSLog(@"Transaction error: %@ %ld", transaction.error.localizedDescription,(long)transaction.error.code);
190 + }
191 +
192 + if ([SKPaymentQueue defaultQueue]) {
193 + [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
194 + if(_buyProductCompleteBlock) {
195 + _buyProductCompleteBlock(transaction);
196 + }
197 + }
198 +
199 +}
200 +
201 +- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
202 +{
203 +
204 +
205 + for (SKPaymentTransaction *transaction in transactions)
206 + {
207 + switch (transaction.transactionState)
208 + {
209 + case SKPaymentTransactionStatePurchased:
210 + [self completeTransaction:transaction];
211 + break;
212 + case SKPaymentTransactionStateFailed:
213 + [self failedTransaction:transaction];
214 + break;
215 + case SKPaymentTransactionStateRestored:
216 + [self restoreTransaction:transaction];
217 + default:
218 + break;
219 + }
220 + }
221 +}
222 +
223 +- (void)buyProduct:(SKProduct *)productIdentifier onCompletion:(IAPbuyProductCompleteResponseBlock)completion {
224 +
225 + self.buyProductCompleteBlock = completion;
226 +
227 + self.restoreCompletedBlock = nil;
228 + SKPayment *payment = [SKPayment paymentWithProduct:productIdentifier];
229 +
230 + if ([SKPaymentQueue defaultQueue]) {
231 + [[SKPaymentQueue defaultQueue] addPayment:payment];
232 + }
233 +
234 +}
235 +
236 +-(void)restoreProductsWithCompletion:(resoreProductsCompleteResponseBlock)completion {
237 +
238 + //clear it
239 + self.buyProductCompleteBlock = nil;
240 +
241 + self.restoreCompletedBlock = completion;
242 + if ([SKPaymentQueue defaultQueue]) {
243 + [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
244 + }
245 + else {
246 + NSLog(@"Cannot get the default Queue");
247 + }
248 +
249 +
250 +}
251 +
252 +- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error {
253 +
254 + NSLog(@"Transaction error: %@ %ld", error.localizedDescription,(long)error.code);
255 + if(_restoreCompletedBlock) {
256 + _restoreCompletedBlock(queue,error);
257 + }
258 +}
259 +
260 +- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
261 +
262 + for (SKPaymentTransaction *transaction in queue.transactions)
263 + {
264 + switch (transaction.transactionState)
265 + {
266 + case SKPaymentTransactionStateRestored:
267 + {
268 + [self recordTransaction: transaction];
269 + [self provideContentWithTransaction:transaction];
270 +
271 + }
272 + default:
273 + break;
274 + }
275 + }
276 +
277 + if(_restoreCompletedBlock) {
278 + _restoreCompletedBlock(queue,nil);
279 + }
280 +
281 +}
282 +
283 +- (void)checkReceipt:(NSData*)receiptData onCompletion:(checkReceiptCompleteResponseBlock)completion
284 +{
285 + [self checkReceipt:receiptData AndSharedSecret:nil onCompletion:completion];
286 +}
287 +- (void)checkReceipt:(NSData*)receiptData AndSharedSecret:(NSString*)secretKey onCompletion:(checkReceiptCompleteResponseBlock)completion
288 +{
289 +
290 + self.checkReceiptCompleteBlock = completion;
291 +
292 + NSError *jsonError = nil;
293 + NSString *receiptBase64 = [NSString base64StringFromData:receiptData length:[receiptData length]];
294 +
295 +
296 + NSData *jsonData = nil;
297 +
298 + if(secretKey !=nil && ![secretKey isEqualToString:@""]) {
299 +
300 + jsonData = [NSJSONSerialization dataWithJSONObject:[NSDictionary dictionaryWithObjectsAndKeys:receiptBase64,@"receipt-data",
301 + secretKey,@"password",
302 + nil]
303 + options:NSJSONWritingPrettyPrinted
304 + error:&jsonError];
305 +
306 + }
307 + else {
308 + jsonData = [NSJSONSerialization dataWithJSONObject:[NSDictionary dictionaryWithObjectsAndKeys:
309 + receiptBase64,@"receipt-data",
310 + nil]
311 + options:NSJSONWritingPrettyPrinted
312 + error:&jsonError
313 + ];
314 + }
315 +
316 +
317 +// NSString* jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
318 +
319 + NSURL *requestURL = nil;
320 + if(_production)
321 + {
322 + requestURL = [NSURL URLWithString:@"https://buy.itunes.apple.com/verifyReceipt"];
323 + }
324 + else {
325 + requestURL = [NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"];
326 + }
327 +
328 + NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:requestURL];
329 + [req setHTTPMethod:@"POST"];
330 + [req setHTTPBody:jsonData];
331 +
332 + NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:req delegate:self];
333 + if(conn) {
334 + self.receiptRequestData = [[NSMutableData alloc] init];
335 + } else {
336 + NSError* error = nil;
337 + NSMutableDictionary* errorDetail = [[NSMutableDictionary alloc] init];
338 + [errorDetail setValue:@"Can't create connection" forKey:NSLocalizedDescriptionKey];
339 + error = [NSError errorWithDomain:@"IAPHelperError" code:100 userInfo:errorDetail];
340 + if(_checkReceiptCompleteBlock) {
341 + _checkReceiptCompleteBlock(nil,error);
342 + }
343 + }
344 +}
345 +
346 +-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
347 + NSLog(@"Cannot transmit receipt data. %@",[error localizedDescription]);
348 +
349 + if(_checkReceiptCompleteBlock) {
350 + _checkReceiptCompleteBlock(nil,error);
351 + }
352 +
353 +}
354 +
355 +-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
356 + [self.receiptRequestData setLength:0];
357 +}
358 +
359 +-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
360 + [self.receiptRequestData appendData:data];
361 +}
362 +
363 +-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
364 + NSString *response = [[NSString alloc] initWithData:self.receiptRequestData encoding:NSUTF8StringEncoding];
365 +
366 + if(_checkReceiptCompleteBlock) {
367 + _checkReceiptCompleteBlock(response,nil);
368 + }
369 +}
370 +
371 +
372 +- (NSString *)getLocalePrice:(SKProduct *)product {
373 + if (product) {
374 + NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
375 + [formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
376 + [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
377 + [formatter setLocale:product.priceLocale];
378 +
379 + return [formatter stringFromNumber:product.price];
380 + }
381 + return @"";
382 +
383 +
384 +}
385 +@end
1 +//
2 +// IAPShare.h
3 +// ;
4 +//
5 +// Created by Htain Lin Shwe on 10/7/12.
6 +// Copyright (c) 2012 Edenpod. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +#import "IAPHelper.h"
11 +@interface IAPShare : NSObject
12 +@property (nonatomic,strong) IAPHelper *iap;
13 +
14 ++ (IAPShare *) sharedHelper;
15 +
16 ++(id)toJSON:(NSString*)json;
17 +@end
1 +//
2 +// IAPShare.m
3 +// inappPurchasesTest
4 +//
5 +// Created by Htain Lin Shwe on 10/7/12.
6 +// Copyright (c) 2012 Edenpod. All rights reserved.
7 +//
8 +
9 +#import "IAPShare.h"
10 +
11 +#if ! __has_feature(objc_arc)
12 +#error You need to either convert your project to ARC or add the -fobjc-arc compiler flag to IAPShare.m.
13 +#endif
14 +
15 +@implementation IAPShare
16 +@synthesize iap= _iap;
17 +
18 ++ (IAPShare *) sharedHelper {
19 + static IAPShare * _sharedHelper = nil;
20 + static dispatch_once_t onceToken;
21 + dispatch_once(&onceToken, ^{
22 + _sharedHelper = [[IAPShare alloc] init];
23 + _sharedHelper.iap = nil;
24 + });
25 + return _sharedHelper;
26 +}
27 +
28 ++(id)toJSON:(NSString *)json
29 +{
30 + NSError* e = nil;
31 + id jsonObject = [NSJSONSerialization JSONObjectWithData: [json dataUsingEncoding:NSUTF8StringEncoding]
32 + options: NSJSONReadingMutableContainers
33 + error: &e];
34 +
35 + if(e==nil) {
36 + return jsonObject;
37 + }
38 + else {
39 + NSLog(@"%@",[e localizedDescription]);
40 + return nil;
41 + }
42 +
43 +}
44 +
45 +@end
1 +//
2 +// NSString+Base64.h
3 +// Newsstand
4 +//
5 +// Created by Carlo Vigiani on 29/Oct/11.
6 +// Copyright (c) 2011 viggiosoft. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +
11 +@interface NSString (Base64)
12 +
13 ++ (NSString *) base64StringFromData:(NSData *)data length:(long)length;
14 +
15 +@end
1 +//
2 +// NSString+Base64.m
3 +// Newsstand
4 +//
5 +// Created by Carlo Vigiani on 29/Oct/11.
6 +// Copyright (c) 2011 viggiosoft. All rights reserved.
7 +//
8 +
9 +#import "NSString+Base64.h"
10 +
11 +static char base64EncodingTable[64] = {
12 + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
13 + 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
14 + 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
15 + 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
16 +};
17 +
18 +@implementation NSString (Base64)
19 +
20 +
21 ++ (NSString *) base64StringFromData:(NSData *)data length:(long)length {
22 + unsigned long ixtext, lentext;
23 + long ctremaining;
24 + unsigned char input[3], output[4];
25 + short i, charsonline = 0, ctcopy;
26 + const unsigned char *raw;
27 + NSMutableString *result;
28 +
29 + lentext = [data length];
30 + if (lentext < 1)
31 + return @"";
32 + result = [NSMutableString stringWithCapacity: lentext];
33 + raw = [data bytes];
34 + ixtext = 0;
35 +
36 + while (true) {
37 + ctremaining = lentext - ixtext;
38 + if (ctremaining <= 0)
39 + break;
40 + for (i = 0; i < 3; i++) {
41 + unsigned long ix = ixtext + i;
42 + if (ix < lentext)
43 + input[i] = raw[ix];
44 + else
45 + input[i] = 0;
46 + }
47 + output[0] = (input[0] & 0xFC) >> 2;
48 + output[1] = ((input[0] & 0x03) << 4) | ((input[1] & 0xF0) >> 4);
49 + output[2] = ((input[1] & 0x0F) << 2) | ((input[2] & 0xC0) >> 6);
50 + output[3] = input[2] & 0x3F;
51 + ctcopy = 4;
52 + switch (ctremaining) {
53 + case 1:
54 + ctcopy = 2;
55 + break;
56 + case 2:
57 + ctcopy = 3;
58 + break;
59 + }
60 +
61 + for (i = 0; i < ctcopy; i++)
62 + [result appendString: [NSString stringWithFormat: @"%c", base64EncodingTable[output[i]]]];
63 +
64 + for (i = ctcopy; i < 4; i++)
65 + [result appendString: @"="];
66 +
67 + ixtext += 3;
68 + charsonline += 4;
69 +
70 + if ((length > 0) && (charsonline >= length))
71 + charsonline = 0;
72 + }
73 + return result;
74 +}
75 +
76 +
77 +@end
1 +//
2 +// SFHFKeychainUtils.h
3 +//
4 +// Created by Buzz Andersen on 10/20/08.
5 +// Based partly on code by Jonathan Wight, Jon Crosby, and Mike Malone.
6 +// Copyright 2008 Sci-Fi Hi-Fi. All rights reserved.
7 +//
8 +// Permission is hereby granted, free of charge, to any person
9 +// obtaining a copy of this software and associated documentation
10 +// files (the "Software"), to deal in the Software without
11 +// restriction, including without limitation the rights to use,
12 +// copy, modify, merge, publish, distribute, sublicense, and/or sell
13 +// copies of the Software, and to permit persons to whom the
14 +// Software is furnished to do so, subject to the following
15 +// conditions:
16 +//
17 +// The above copyright notice and this permission notice shall be
18 +// included in all copies or substantial portions of the Software.
19 +//
20 +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
22 +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24 +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
25 +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26 +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27 +// OTHER DEALINGS IN THE SOFTWARE.
28 +//
29 +
30 +#import <UIKit/UIKit.h>
31 +
32 +
33 +@interface SFHFKeychainUtils : NSObject {
34 +
35 +}
36 +
37 ++ (NSString *) getPasswordForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;
38 ++ (BOOL) storeUsername: (NSString *) username andPassword: (NSString *) password forServiceName: (NSString *) serviceName updateExisting: (BOOL) updateExisting error: (NSError **) error;
39 ++ (BOOL) deleteItemForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;
40 +
41 +@end
...\ No newline at end of file ...\ No newline at end of file
1 +//
2 +// SFHFKeychainUtils.m
3 +//
4 +
5 +// Created by Buzz Andersen on 10/20/08.
6 +// Based partly on code by Jonathan Wight, Jon Crosby, and Mike Malone.
7 +// Copyright 2008 Sci-Fi Hi-Fi. All rights reserved.
8 +//
9 +
10 +// Permission is hereby granted, free of charge, to any person
11 +// obtaining a copy of this software and associated documentation
12 +// files (the "Software"), to deal in the Software without
13 +// restriction, including without limitation the rights to use,
14 +// copy, modify, merge, publish, distribute, sublicense, and/or sell
15 +// copies of the Software, and to permit persons to whom the
16 +// Software is furnished to do so, subject to the following
17 +// conditions:
18 +//
19 +
20 +// The above copyright notice and this permission notice shall be
21 +// included in all copies or substantial portions of the Software.
22 +//
23 +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
25 +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
27 +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
28 +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29 +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
30 +// OTHER DEALINGS IN THE SOFTWARE.
31 +//
32 +
33 +#import "SFHFKeychainUtils.h"
34 +#import <Security/Security.h>
35 +
36 +
37 +static NSString *SFHFKeychainUtilsErrorDomain = @"SFHFKeychainUtilsErrorDomain";
38 +
39 +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 30000 && TARGET_IPHONE_SIMULATOR
40 +
41 +@interface SFHFKeychainUtils (PrivateMethods)
42 +(SecKeychainItemRef) getKeychainItemReferenceForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;
43 +@end
44 +
45 +#endif
46 +
47 +@implementation SFHFKeychainUtils
48 +
49 +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 30000 && TARGET_IPHONE_SIMULATOR
50 +
51 ++(NSString *) getPasswordForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error {
52 + if (!username || !serviceName) {
53 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: -2000 userInfo: nil];
54 + return nil;
55 + }
56 +
57 + SecKeychainItemRef item = [SFHFKeychainUtils getKeychainItemReferenceForUsername: username andServiceName: serviceName error: error];
58 + if (*error || !item) {
59 + return nil;
60 + }
61 +
62 + // from Advanced Mac OS X Programming, ch. 16
63 + UInt32 length;
64 + char *password;
65 + SecKeychainAttribute attributes[8];
66 + SecKeychainAttributeList list;
67 + attributes[0].tag = kSecAccountItemAttr;
68 + attributes[1].tag = kSecDescriptionItemAttr;
69 + attributes[2].tag = kSecLabelItemAttr;
70 + attributes[3].tag = kSecModDateItemAttr;
71 + list.count = 4;
72 + list.attr = attributes;
73 + OSStatus status = SecKeychainItemCopyContent(item, NULL, &list, &length, (void **)&password);
74 + if (status != noErr) {
75 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: status userInfo: nil];
76 + return nil;
77 + }
78 + NSString *passwordString = nil;
79 + if (password != NULL) {
80 + char passwordBuffer[1024];
81 + if (length > 1023) {
82 + length = 1023;
83 + }
84 + strncpy(passwordBuffer, password, length);
85 + passwordBuffer[length] = '\0';
86 + passwordString = [NSString stringWithCString:passwordBuffer];
87 + }
88 + SecKeychainItemFreeContent(&list, password);
89 + CFRelease(item);
90 + return passwordString;
91 +}
92 +
93 ++ (void) storeUsername: (NSString *) username andPassword: (NSString *) password forServiceName: (NSString *) serviceName updateExisting: (BOOL) updateExisting error: (NSError **) error {
94 +
95 + if (!username || !password || !serviceName) {
96 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: -2000 userInfo: nil];
97 + return;
98 + }
99 + OSStatus status = noErr;
100 + SecKeychainItemRef item = [SFHFKeychainUtils getKeychainItemReferenceForUsername: username andServiceName: serviceName error: error];
101 + if (*error && [*error code] != noErr) {
102 + return;
103 + }
104 + *error = nil;
105 +
106 + if (item) {
107 + status = SecKeychainItemModifyAttributesAndData(item,NULL,strlen([password UTF8String]),[password UTF8String]);
108 + CFRelease(item);
109 + }
110 + else {
111 + status = SecKeychainAddGenericPassword(NULL,strlen([serviceName UTF8String]),[serviceName UTF8String],strlen([username UTF8String]),[username UTF8String],strlen([password UTF8String]),[password UTF8String],NULL);
112 +
113 + }
114 + if (status != noErr) {
115 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: status userInfo: nil];
116 + }
117 +}
118 +
119 ++ (void) deleteItemForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error {
120 + if (!username || !serviceName) {
121 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: 2000 userInfo: nil];
122 + return;
123 + }
124 +
125 + *error = nil;
126 +
127 + SecKeychainItemRef item = [SFHFKeychainUtils getKeychainItemReferenceForUsername: username andServiceName: serviceName error: error];
128 + if (*error && [*error code] != noErr) {
129 + return;
130 + }
131 +
132 + OSStatus status;
133 + if (item) {
134 + status = SecKeychainItemDelete(item);
135 + CFRelease(item);
136 + }
137 +
138 + if (status != noErr) {
139 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: status userInfo: nil];
140 + }
141 +}
142 +
143 ++ (SecKeychainItemRef) getKeychainItemReferenceForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error {
144 + if (!username || !serviceName) {
145 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: -2000 userInfo: nil];
146 + return nil;
147 + }
148 +
149 + *error = nil;
150 + SecKeychainItemRef item;
151 + OSStatus status = SecKeychainFindGenericPassword(NULL,strlen([serviceName UTF8String]),[serviceName UTF8String],strlen([username UTF8String]),[username UTF8String], NULL,NULL,&item);
152 +
153 + if (status != noErr) {
154 + if (status != errSecItemNotFound) {
155 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: status userInfo: nil];
156 + }
157 + return nil;
158 + }
159 + return item;
160 +}
161 +
162 +#else
163 +
164 ++ (NSString *) getPasswordForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error {
165 +
166 + if (!username || !serviceName) {
167 + if (error != nil) {
168 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: -2000 userInfo: nil];
169 + }
170 + return nil;
171 + }
172 +
173 + if (error != nil) {
174 + *error = nil;
175 + }
176 + // Set up a query dictionary with the base query attributes: item type (generic), username, and service
177 + NSArray *keys = [[NSArray alloc] initWithObjects: (__bridge_transfer NSString *) kSecClass, kSecAttrAccount, kSecAttrService, nil];
178 + NSArray *objects = [[NSArray alloc] initWithObjects: (__bridge_transfer NSString *) kSecClassGenericPassword, username, serviceName, nil];
179 + NSMutableDictionary *query = [[NSMutableDictionary alloc] initWithObjects: objects forKeys: keys];
180 + // First do a query for attributes, in case we already have a Keychain item with no password data set.
181 + // One likely way such an incorrect item could have come about is due to the previous (incorrect)
182 + // version of this code (which set the password as a generic attribute instead of password data).
183 + NSMutableDictionary *attributeQuery = [query mutableCopy];
184 + [attributeQuery setObject: (id) kCFBooleanTrue forKey:(__bridge_transfer id) kSecReturnAttributes];
185 + CFTypeRef attrResult = NULL;
186 + OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef) attributeQuery, &attrResult);
187 + //NSDictionary *attributeResult = (__bridge_transfer NSDictionary *)attrResult;
188 + if (status != noErr) {
189 + // No existing item found--simply return nil for the password
190 + if (error != nil && status != errSecItemNotFound) {
191 + //Only return an error if a real exception happened--not simply for "not found."
192 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: status userInfo: nil];
193 + }
194 + return nil;
195 + }
196 +
197 + // We have an existing item, now query for the password data associated with it.
198 + NSMutableDictionary *passwordQuery = [query mutableCopy];
199 + [passwordQuery setObject: (id) kCFBooleanTrue forKey: (__bridge_transfer id) kSecReturnData];
200 + CFTypeRef resData = NULL;
201 + status = SecItemCopyMatching((__bridge CFDictionaryRef) passwordQuery, (CFTypeRef *) &resData);
202 + NSData *resultData = (__bridge_transfer NSData *)resData;
203 + if (status != noErr) {
204 + if (status == errSecItemNotFound) {
205 + // We found attributes for the item previously, but no password now, so return a special error.
206 + // Users of this API will probably want to detect this error and prompt the user to
207 + // re-enter their credentials. When you attempt to store the re-entered credentials
208 + // using storeUsername:andPassword:forServiceName:updateExisting:error
209 + // the old, incorrect entry will be deleted and a new one with a properly encrypted
210 + // password will be added.
211 +
212 + if (error != nil) {
213 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: -1999 userInfo: nil];
214 + }
215 + }
216 + else {
217 + // Something else went wrong. Simply return the normal Keychain API error code.
218 + if (error != nil) {
219 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: status userInfo: nil];
220 + }
221 + }
222 + return nil;
223 + }
224 + NSString *password = nil;
225 + if (resultData) {
226 + password = [[NSString alloc] initWithData: resultData encoding: NSUTF8StringEncoding];
227 + }
228 + else {
229 + // There is an existing item, but we weren't able to get password data for it for some reason,
230 + // Possibly as a result of an item being incorrectly entered by the previous code.
231 + // Set the -1999 error so the code above us can prompt the user again.
232 +
233 + if (error != nil) {
234 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: -1999 userInfo: nil];
235 + }
236 + }
237 + return password;
238 +}
239 +
240 ++ (BOOL) storeUsername: (NSString *) username andPassword: (NSString *) password forServiceName: (NSString *) serviceName updateExisting: (BOOL) updateExisting error: (NSError **) error
241 +
242 +{
243 + if (!username || !password || !serviceName)
244 +
245 + {
246 + if (error != nil)
247 + {
248 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: -2000 userInfo: nil];
249 + }
250 + return NO;
251 + }
252 +
253 + // See if we already have a password entered for these credentials.
254 +
255 + NSError *getError = nil;
256 + NSString *existingPassword = [SFHFKeychainUtils getPasswordForUsername: username andServiceName: serviceName error:&getError];
257 +
258 + if ([getError code] == -1999)
259 + {
260 + // There is an existing entry without a password properly stored (possibly as a result of the previous incorrect version of this code.
261 +
262 + // Delete the existing item before moving on entering a correct one.
263 + getError = nil;
264 +
265 + [self deleteItemForUsername: username andServiceName: serviceName error: &getError];
266 +
267 + if ([getError code] != noErr)
268 + {
269 + if (error != nil)
270 + {
271 + *error = getError;
272 + }
273 + return NO;
274 + }
275 + }
276 + else if ([getError code] != noErr)
277 + {
278 + if (error != nil)
279 + {
280 + *error = getError;
281 + }
282 + return NO;
283 + }
284 + if (error != nil)
285 + {
286 + *error = nil;
287 + }
288 +
289 + OSStatus status = noErr;
290 +
291 + if (existingPassword)
292 + {
293 +
294 + // We have an existing, properly entered item with a password.
295 + // Update the existing item.
296 +
297 + if (![existingPassword isEqualToString:password] && updateExisting)
298 + {
299 + //Only update if we're allowed to update existing. If not, simply do nothing.
300 +
301 + NSArray *keys = [[NSArray alloc] initWithObjects: (__bridge_transfer NSString *) kSecClass,kSecAttrService,kSecAttrLabel,kSecAttrAccount,nil];
302 +
303 + NSArray *objects = [[NSArray alloc] initWithObjects: (__bridge_transfer NSString *) kSecClassGenericPassword,serviceName,serviceName,username,nil];
304 +
305 + NSDictionary *query = [[NSDictionary alloc] initWithObjects: objects forKeys: keys];
306 +
307 + status = SecItemUpdate((__bridge CFDictionaryRef) query, (__bridge CFDictionaryRef) [NSDictionary dictionaryWithObject: [password dataUsingEncoding: NSUTF8StringEncoding] forKey: (__bridge_transfer NSString *) kSecValueData]);
308 + }
309 + }
310 + else
311 + {
312 + // No existing entry (or an existing, improperly entered, and therefore now
313 +
314 + // deleted, entry). Create a new entry.
315 +
316 +
317 + NSArray *keys = [[NSArray alloc] initWithObjects: (__bridge_transfer NSString *) kSecClass,kSecAttrService,kSecAttrLabel,kSecAttrAccount,kSecValueData,nil];
318 +
319 + NSArray *objects = [[NSArray alloc] initWithObjects: (__bridge_transfer NSString *) kSecClassGenericPassword,serviceName,serviceName,username,[password dataUsingEncoding: NSUTF8StringEncoding],nil];
320 +
321 + NSDictionary *query = [[NSDictionary alloc] initWithObjects: objects forKeys: keys];
322 +
323 + status = SecItemAdd((__bridge CFDictionaryRef) query, NULL);
324 + }
325 + if (error != nil && status != noErr)
326 + {
327 + // Something went wrong with adding the new item. Return the Keychain error code.
328 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: status userInfo: nil];
329 + return NO;
330 + }
331 + return YES;
332 +}
333 +
334 ++ (BOOL) deleteItemForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error
335 +{
336 + if (!username || !serviceName)
337 + {
338 + if (error != nil)
339 + {
340 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: -2000 userInfo: nil];
341 + }
342 + return NO;
343 + }
344 + if (error != nil)
345 + {
346 + *error = nil;
347 + }
348 + NSArray *keys = [[NSArray alloc] initWithObjects: (__bridge_transfer NSString *) kSecClass, kSecAttrAccount, kSecAttrService, kSecReturnAttributes, nil];
349 + NSArray *objects = [[NSArray alloc] initWithObjects: (__bridge_transfer NSString *) kSecClassGenericPassword, username, serviceName, kCFBooleanTrue, nil];
350 + NSDictionary *query = [[NSDictionary alloc] initWithObjects: objects forKeys: keys];
351 + OSStatus status = SecItemDelete((__bridge CFDictionaryRef) query);
352 +
353 + if (error != nil && status != noErr)
354 + {
355 + *error = [NSError errorWithDomain: SFHFKeychainUtilsErrorDomain code: status userInfo: nil];
356 + return NO;
357 + }
358 + return YES;
359 +}
360 +#endif
361 +@end
...\ No newline at end of file ...\ No newline at end of file
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>com_2y9_qqAppId</key>
6 + <string>1105961632</string>
7 + <key>com_2y9y_appId</key>
8 + <string>wxb6805528ecd265e7</string>
9 + <key>com_2y9y_appKey</key>
10 + <string>59014e4b45297d705a000d9d</string>
11 + <key>com_2y9y_appSecret</key>
12 + <string>c6fc1d5a3228fdb9ec2956af90baff5d</string>
13 + <key>com_2y9y_channel</key>
14 + <string>ios</string>
15 + <key>com_2y9y_pvc</key>
16 + <string>6</string>
17 + <key>com_2y9y_qqAppKey</key>
18 + <string>Leexk4uI81vJNnlF</string>
19 + <key>com_2y9y_sdkProtocolGame</key>
20 + <string>jiankefy_ios</string>
21 + <key>com_2y9y_sdkProtocolToken</key>
22 + <string>440d75aceb61326ad821f63e146d3322</string>
23 + <key>head_link</key>
24 + <string>http://api.2y9y.com/mgame_sdk_api/index.php?m=index&amp;pvc=6</string>
25 +</dict>
26 +</plist>
1 +{"appKey": "59014e4b45297d705a000d9d", "head_link": "http://api.2y9y.com/mgame_sdk_api/index.php?m=index&pvc=6", "appScheme": "com.pfd.jiankefy", "sdkProtocolToken": "440d75aceb61326ad821f63e146d3322", "gamechannelid": "", "appSecret": "c6fc1d5a3228fdb9ec2956af90baff5d", "sdkVersionCode": "V2_2", "pvc": "6", "appId": "wxb6805528ecd265e7", "c2": "", "c1": "", "paycheckurl": "https://public.sdk.gzyouai.com/paycheck/confirm", "gameSimpleName": "fytx_test", "qqAppKey": "Leexk4uI81vJNnlF", "payorderurl": "https://public.sdk.gzyouai.com/paycheck/create", "sdkProtocolGame": "jiankefy_ios", "sdkSimpleName": "iy9y_ios", "keychain-access-groups": "323G75TBBT.com.pfd.jiankefy", "custom": "{}", "usertype": 241, "reyunAppKey": "8a0633ada043593f595f21800bd1a95a", "loginCheckUrl": "https://public.sdk.gzyouai.com/logincheck/check", "channel": "ios", "qqAppId": "1105961632"}
...\ No newline at end of file ...\ No newline at end of file
1 +//
2 +// payUtils.h
3 +// gzqytestdemo
4 +//
5 +// Created by qianyou on 2017/10/23.
6 +// Copyright © 2017年 gzqianyougzqianyou. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +#include <ifaddrs.h>
11 +#include <arpa/inet.h>
12 +#include <net/if.h>
13 +#import <UIKit/UIKit.h>
14 +#import <CommonCrypto/CommonDigest.h>
15 +//#import "CEncrypt.h"
16 +
17 +#define IOS_CELLULAR @"pdp_ip0"
18 +#define IOS_WIFI @"en0"
19 +#define IOS_VPN @"utun0"
20 +#define IP_ADDR_IPv4 @"ipv4"
21 +#define IP_ADDR_IPv6 @"ipv6"
22 +
23 +@interface qyUtitls : NSObject
24 +@property (strong, nonatomic)UIAlertView *alertView;
25 +
26 +-(NSString *) setUserName:(NSString *) userName1;
27 +-(void) setUserName:(NSString *) userName setServer:(NSString *) server setRoleID:(NSString *) roleID setRoleName:(NSString *) roleName setAmount:(NSString *) amount setInfo:(NSString *) info ,...NS_REQUIRES_NIL_TERMINATION;
28 +
29 +@end
30 +
31 +
1 +//
2 +// payUtils.m
3 +// gzqytestdemo
4 +//
5 +// Created by qianyou on 2017/10/19.
6 +// Copyright © 2017年 gzqianyougzqianyou. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +#include <ifaddrs.h>
11 +#include <arpa/inet.h>
12 +#include <net/if.h>
13 +#import <UIKit/UIKit.h>
14 +#import <CommonCrypto/CommonDigest.h>
15 +//#import "CEncrypt.h"
16 +
17 +#define IOS_CELLULAR @"pdp_ip0"
18 +#define IOS_WIFI @"en0"
19 +#define IOS_VPN @"utun0"
20 +#define IP_ADDR_IPv4 @"ipv4"
21 +#define IP_ADDR_IPv6 @"ipv6"
22 +
23 +@interface qyUtitls : NSObject
24 +@property (strong, nonatomic)UIAlertView *alertView;
25 +-(NSString *) setUserName:(NSString *) userName1;
26 +-(void) setUserName:(NSString *) userName setServer:(NSString *) server setRoleID:(NSString *) roleID setRoleName:(NSString *) roleName setAmount:(NSString *) amount setInfo:(NSString *) info ,...NS_REQUIRES_NIL_TERMINATION;
27 +
28 +@end
29 +
30 +@implementation qyUtitls
31 +
32 +//乾游支付切换控制
33 +-(NSString *) setUserName:(NSString *) userName1{
34 +
35 + //局域网的IP地址
36 + NSString *ipAddress = [self getIPAddress:YES];
37 + NSLog(@"4--IP地址是:==%@",ipAddress);
38 + // //外网口的IP地址:
39 + // NSError *error;
40 + // NSURL *ipURL = [NSURL URLWithString:@"http://ifconfig.me/ip"];
41 + // NSString *ip1 = [NSString stringWithContentsOfURL:ipURL encoding:NSUTF8StringEncoding error:&error];
42 + // NSLog(@"2--IP地址是:==%@",ip1);
43 +
44 +
45 + NSString *filePath = [[NSBundle mainBundle] pathForResource:@"p2y9y_private.plist" ofType:nil];
46 + // 1. 解析 Info.plist
47 + NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
48 + // 2.获取当前的别名字
49 + NSString *gameValue = dict[@"com_2y9y_sdkProtocolGame"];
50 + // 2.获取当前的channel
51 + NSString *gamechannel = dict[@"com_2y9y_channel"];
52 + NSLog(@"从p2y9y_private.plist中抽取的com_2y9y_sdkProtocolGame值是:%@",gameValue);
53 +
54 +
55 + // 1.设置请求路径
56 + NSURL *URL=[NSURL URLWithString:@"http://h5pay.2y9y.com/api/rechargeSwitch.php"];
57 +
58 + // 2.创建请求对象
59 + NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:URL];
60 + request.timeoutInterval=10.0;//设置请求超时为5秒
61 + request.HTTPMethod=@"POST";//设置请求方法
62 +
63 + //设置请求体
64 + NSString *param=[NSString stringWithFormat:@"user_id=%@&channel=%@&game=%@&ip=%@&",userName1,gamechannel,gameValue,ipAddress];
65 + //把拼接后的字符串转换为data,设置请求体
66 + request.HTTPBody=[param dataUsingEncoding:NSUTF8StringEncoding];
67 +
68 + NSData *relsultData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
69 +
70 + NSString *result = [[NSString alloc]initWithData:relsultData encoding:NSUTF8StringEncoding];
71 +
72 +
73 + //
74 + NSLog(@"服务器返回的relsultData----%@",relsultData);
75 + NSLog(@"服务器返回的结果是----%@",result);
76 +
77 +
78 + return result;
79 +}
80 +
81 +
82 +//生序排序
83 +-(NSString *)generateNormalizedString:(NSMutableDictionary *) params{
84 +
85 + NSArray * allKeys = [[params allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){
86 + NSString *s1 =(NSString *)obj1;
87 + NSString *s2 =(NSString *)obj2;
88 + NSComparisonResult result =[s1 compare:s2];
89 + return result == NSOrderedDescending;
90 +
91 + }];
92 +
93 + NSMutableString *sb =[[NSMutableString alloc]init];
94 + for (NSString *key in allKeys) {
95 + if (![self needEncryptedForSig:key]) {
96 + continue;
97 + }
98 + NSString *value =[params objectForKey:key];
99 + [sb appendFormat:@"%@%@%@",value,@"=",key];
100 + }
101 + return sb;
102 +}
103 +
104 +-(BOOL)needEncryptedForSig:(NSString *)key{
105 + NSArray *keys = [NSArray arrayWithObjects:@"sig", nil];
106 + for (NSString *value in keys) {
107 + if ([value isEqualToString:key]) {
108 + return false;
109 + }
110 + }
111 + return true;
112 +}
113 +
114 +
115 +//md5加密转小写
116 +-(NSString *)md5WithString:(NSString *)input
117 +{
118 + const char* str = [input UTF8String];
119 + unsigned char result[CC_MD5_DIGEST_LENGTH];
120 + CC_MD5(str, strlen(str), result);
121 + NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
122 +
123 + for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
124 + [ret appendFormat:@"%02X",result[i]];
125 + }
126 + //转MD5加密之后字母大写直接在这里转小写
127 + return [ret lowercaseString];
128 +}
129 +
130 +- (NSString *)getIPAddress:(BOOL)preferIPv4
131 +{
132 + NSArray *searchArray = preferIPv4 ?
133 + @[ /*IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6,*/ IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] :
134 + @[ /*IOS_VPN @"/" IP_ADDR_IPv6, IOS_VPN @"/" IP_ADDR_IPv4,*/ IOS_WIFI @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ;
135 +
136 + NSDictionary *addresses = [self getIPAddresses];
137 + NSLog(@"addresses: %@", addresses);
138 +
139 + __block NSString *address;
140 + [searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)
141 + {
142 + address = addresses[key];
143 + if(address) *stop = YES;
144 + } ];
145 + return address ? address : @"0.0.0.0";
146 +}
147 +
148 +- (NSDictionary *)getIPAddresses
149 +{
150 + NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];
151 +
152 + // retrieve the current interfaces - returns 0 on success
153 + struct ifaddrs *interfaces;
154 + if(!getifaddrs(&interfaces)) {
155 + // Loop through linked list of interfaces
156 + struct ifaddrs *interface;
157 + for(interface=interfaces; interface; interface=interface->ifa_next) {
158 + if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) {
159 + continue; // deeply nested code harder to read
160 + }
161 + const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr;
162 + char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ];
163 + if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {
164 + NSString *name = [NSString stringWithUTF8String:interface->ifa_name];
165 + NSString *type;
166 + if(addr->sin_family == AF_INET) {
167 + if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {
168 + type = IP_ADDR_IPv4;
169 + }
170 + } else {
171 + const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr;
172 + if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {
173 + type = IP_ADDR_IPv6;
174 + }
175 + }
176 + if(type) {
177 + NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];
178 + addresses[key] = [NSString stringWithUTF8String:addrBuf];
179 + }
180 + }
181 + }
182 + // Free memory
183 + freeifaddrs(interfaces);
184 + }
185 + return [addresses count] ? addresses : nil;
186 +}
187 +
188 +
189 +-(void) setUserName:(NSString *) userName setServer:(NSString *) server setRoleID:(NSString *) roleID setRoleName:(NSString *) roleName setAmount:(NSString *) amount setInfo:(NSString *) info ,...NS_REQUIRES_NIL_TERMINATION{
190 +
191 + if(userName.length == 0 ||server.length == 0 ||roleID.length == 0 ||roleName.length == 0 ||amount.length == 0 ||info.length == 0 ){
192 + [self showAlertViewWithMsg:@"支付参数不能为空,请重新检查"];
193 + return;
194 +
195 + }
196 +
197 + //2.游戏别名: 配置文件中获取
198 + NSString *filePath = [[NSBundle mainBundle] pathForResource:@"p2y9y_private.plist" ofType:nil];
199 + // 2.1. 解析 Info.plist
200 + NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
201 + // 2.2获取当前游戏别名
202 + NSString *game = dict[@"com_2y9y_sdkProtocolGame"];
203 + NSLog(@"当前的游戏别名是:%@",game);
204 +
205 + NSString *gamechannel = dict[@"com_2y9y_channel"];
206 + NSLog(@"当前的游戏的渠道:%@",gamechannel);
207 +
208 + NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
209 + [dic setObject:@"username" forKey:userName];
210 + [dic setObject:@"game" forKey:game];//--------
211 + [dic setObject:@"server" forKey:server];
212 + [dic setObject:@"channel" forKey:gamechannel];//------
213 + [dic setObject:@"roleid" forKey:roleID];
214 + [dic setObject:@"rolename" forKey:roleName];
215 + [dic setObject:@"amount" forKey:amount];
216 + [dic setObject:@"info" forKey:info];
217 +
218 +
219 +
220 +
221 + NSString *beforesign = [self generateNormalizedString:dic];
222 + NSLog(@"生序之后的字段 --%@",beforesign);
223 + NSString *sign = [ self md5WithString:beforesign];
224 + NSLog(@"生序之后的字段后的MD5加密 --%@",sign);
225 +
226 + //拼接内容
227 + NSMutableString *urlStr = [NSMutableString stringWithFormat:@"http://www.2y9y.com/payapi/?a=pay&username=%@&game=%@&server=%@&channel=%@&roleid=%@&rolename=%@&amount=%@&info=%@&sign=%@",userName,game,server,gamechannel,roleID,roleName,amount,info,sign];
228 +
229 + // URL,utf-8格式
230 + NSString *encodedString = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
231 +
232 +
233 + //调用浏览器打开拼接的充值地址
234 + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:encodedString]];
235 +
236 + NSLog(@"urlStr-----===%@ ",encodedString);
237 +
238 +
239 + //此处仅作页面展示,cp请根据支付结果的进行逻辑处理
240 + //[self showResultView];
241 +
242 +
243 +}
244 +//工具类 弹出框
245 +-(void)showAlertViewWithMsg:(NSString *)msg{
246 + self.alertView.message=msg;
247 + [self.alertView show];
248 +}
249 +
250 +//
251 +-(UIAlertView *)alertView{
252 + if(!_alertView){
253 + _alertView=[[UIAlertView alloc] initWithTitle:@"" message:@"" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
254 + }
255 + return _alertView;
256 +}
257 +
258 +
259 +
260 +@end
261 +
262 +
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>CFBundleDevelopmentRegion</key>
6 + <string>en</string>
7 + <key>CFBundleExecutable</key>
8 + <string>$(EXECUTABLE_NAME)</string>
9 + <key>CFBundleIdentifier</key>
10 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11 + <key>CFBundleInfoDictionaryVersion</key>
12 + <string>6.0</string>
13 + <key>CFBundleName</key>
14 + <string>$(PRODUCT_NAME)</string>
15 + <key>CFBundlePackageType</key>
16 + <string>APPL</string>
17 + <key>CFBundleShortVersionString</key>
18 + <string>1.0</string>
19 + <key>CFBundleSignature</key>
20 + <string>????</string>
21 + <key>CFBundleURLTypes</key>
22 + <array>
23 + <dict>
24 + <key>CFBundleTypeRole</key>
25 + <string>Editor</string>
26 + <key>CFBundleURLName</key>
27 + <string>open_app</string>
28 + <key>CFBundleURLSchemes</key>
29 + <array>
30 + <string>xpcjjh</string>
31 + </array>
32 + </dict>
33 + </array>
34 + <key>CFBundleVersion</key>
35 + <string>1</string>
36 + <key>LSApplicationQueriesSchemes</key>
37 + <array>
38 + <string>weixin</string>
39 + </array>
40 + <key>LSRequiresIPhoneOS</key>
41 + <true/>
42 + <key>NSAppTransportSecurity</key>
43 + <dict>
44 + <key>NSAllowsArbitraryLoads</key>
45 + <true/>
46 + </dict>
47 + <key>NSPhotoLibraryUsageDescription</key>
48 + <string>获取相册</string>
49 + <key>UILaunchStoryboardName</key>
50 + <string>LaunchScreen</string>
51 + <key>UIMainStoryboardFile</key>
52 + <string>Main</string>
53 + <key>UIRequiredDeviceCapabilities</key>
54 + <array>
55 + <string>armv7</string>
56 + </array>
57 + <key>UISupportedInterfaceOrientations</key>
58 + <array>
59 + <string>UIInterfaceOrientationPortrait</string>
60 + </array>
61 +</dict>
62 +</plist>
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>CFBundleURLTypes</key>
6 + <array>
7 + <dict>
8 + <key>CFBundleTypeRole</key>
9 + <string>Editor</string>
10 + <key>CFBundleURLName</key>
11 + <string>open_app</string>
12 + <key>CFBundleURLSchemes</key>
13 + <array>
14 + <string>xpcjjh</string>
15 + </array>
16 + </dict>
17 + </array>
18 + <key>LSApplicationQueriesSchemes</key>
19 + <array>
20 + <string>weixin</string>
21 + </array>
22 + <key>NSAppTransportSecurity</key>
23 + <dict>
24 + <key>NSAllowsArbitraryLoads</key>
25 + <true/>
26 + </dict>
27 + <key>NSPhotoLibraryUsageDescription</key>
28 + <string>获取相册</string>
29 + <key>UISupportedInterfaceOrientations</key>
30 + <array>
31 + <string>UIInterfaceOrientationPortrait</string>
32 + </array>
33 +</dict>
34 +</plist>
1 +/*
2 + * | | | | \ \ / / | | | | / _______|
3 + * | |____| | \ \/ / | |____| | / /
4 + * | |____| | \ / | |____| | | | _____
5 + * | | | | / \ | | | | | | |____ |
6 + * | | | | / /\ \ | | | | \ \______| |
7 + * | | | | /_/ \_\ | | | | \_________|
8 + *
9 + * Copyright (c) 2016~ Shenzhen HXHG. All rights reserved.
10 + */
11 +
12 +#import <Foundation/Foundation.h>
13 +#import <UIKit/UIKit.h>
14 +/**
15 + *
16 + * @abstract 事件对象共同父类
17 + *
18 + * @discussion 所有的字符串属性长度不能超过256字节(包括extra的key和value)
19 + *
20 + */
21 +@interface JANALYTICSEventObject : NSObject
22 +
23 +@property (nonatomic, strong, nonnull) NSDictionary<NSString *, NSString *>* extra;
24 +
25 +@end
26 +
27 +/**
28 + 登录事件对象
29 + */
30 +@interface JANALYTICSLoginEvent : JANALYTICSEventObject
31 +
32 +//登录方法,非空
33 +@property (nonatomic, copy, nonnull) NSString* method;
34 +//登录是否成功,非空
35 +@property (nonatomic, assign) BOOL success;
36 +
37 +@end
38 +
39 +/**
40 + 注册事件对象
41 + */
42 +@interface JANALYTICSRegisterEvent : JANALYTICSEventObject
43 +
44 +//注册方法,非空
45 +@property (nonatomic, copy, nonnull) NSString* method;
46 +//注册是否成功,非空
47 +@property (nonatomic, assign) BOOL success;
48 +
49 +@end
50 +
51 +typedef NS_ENUM(NSUInteger, JANALYTICSPurchaseCurrency) {
52 + //人民币
53 + JANALYTICSCurrencyCNY,
54 + //美元
55 + JANALYTICSCurrencyUSD
56 +};
57 +/**
58 + 购买事件对象
59 + */
60 +@interface JANALYTICSPurchaseEvent : JANALYTICSEventObject
61 +
62 +//价格 非空
63 +@property (nonatomic, assign) CGFloat price;
64 +//购买是否成功,非空
65 +@property (nonatomic, assign) BOOL success;
66 +//物品ID
67 +@property (nonatomic, copy, nonnull) NSString* goodsID;
68 +//物品名称
69 +@property (nonatomic, copy, nonnull) NSString* goodsName;
70 +//物品类型
71 +@property (nonatomic, copy, nonnull) NSString* goodsType;
72 +//货币类型 默认CNY
73 +@property (nonatomic, assign) JANALYTICSPurchaseCurrency currency;
74 +//物品数量
75 +@property (nonatomic, assign) NSInteger quantity;
76 +
77 +@end
78 +
79 +/**
80 + 内容浏览事件对象
81 + */
82 +@interface JANALYTICSBrowseEvent : JANALYTICSEventObject
83 +
84 +//内容名称,非空
85 +@property (nonatomic, copy, nonnull) NSString* name;
86 +//内容ID
87 +@property (nonatomic, copy, nonnull) NSString* contentID;
88 +//内容类型
89 +@property (nonatomic, copy, nonnull) NSString* type;
90 +//内容时长
91 +@property (nonatomic, assign) CGFloat duration;
92 +
93 +@end
94 +
95 +/**
96 + 自定义计数事件对象
97 + */
98 +@interface JANALYTICSCountEvent : JANALYTICSEventObject
99 +
100 +//事件ID 非空
101 +@property (nonatomic, copy, nonnull) NSString* eventID;
102 +
103 +@end
104 +
105 +/**
106 + 自定义计算事件对象
107 + */
108 +@interface JANALYTICSCalculateEvent : JANALYTICSEventObject
109 +
110 +//事件ID 非空
111 +@property (nonatomic, copy, nonnull) NSString* eventID;
112 +//事件值 非空
113 +@property (nonatomic, assign) CGFloat value;
114 +
115 +@end
1 +/*
2 + * | | | | \ \ / / | | | | / _______|
3 + * | |____| | \ \/ / | |____| | / /
4 + * | |____| | \ / | |____| | | | _____
5 + * | | | | / \ | | | | | | |____ |
6 + * | | | | / /\ \ | | | | \ \______| |
7 + * | | | | /_/ \_\ | | | | \_________|
8 + *
9 + * Copyright (c) 2016~ Shenzhen HXHG. All rights reserved.
10 + */
11 +
12 +#define JANALYTICS_VERSION_NUMBER 1.1.3
13 +
14 +#import <Foundation/Foundation.h>
15 +#import "JANALYTICSEventObject.h"
16 +
17 +@interface JANALYTICSLaunchConfig : NSObject
18 +
19 +/* appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识. */
20 +@property (nonatomic, copy) NSString *appKey;
21 +/* channel 发布渠道. 可选 */
22 +@property (nonatomic, copy) NSString *channel;
23 +/* advertisingIdentifier 广告标识符(IDFA). 可选,IDFA能帮助您更准确的统计*/
24 +@property (nonatomic, copy) NSString *advertisingId;
25 +/* isProduction 是否生产环境. 如果为开发状态,设置为NO; 如果为生产状态,应改为 YES.默认为NO */
26 +@property (nonatomic, assign) BOOL isProduction;
27 +
28 +@end
29 +
30 +@class CLLocation;
31 +
32 +@interface JANALYTICSService : NSObject
33 +
34 +/*!
35 + * @abstract 启动SDK
36 + *
37 + * @param config SDK启动相关模型,必填
38 + */
39 ++ (void)setupWithConfig:(JANALYTICSLaunchConfig *)config;
40 +
41 +/*!
42 + * @abstract 开始记录页面停留
43 + *
44 + * @param pageName 页面名称
45 + */
46 ++ (void)startLogPageView:(NSString *)pageName;
47 +
48 +/*!
49 + * @abstract 停止记录页面停留
50 + *
51 + * @param pageName 页面
52 + */
53 ++ (void)stopLogPageView:(NSString *)pageName;
54 +
55 +/*!
56 + * @abstract 地理位置上报
57 + *
58 + * @param latitude 纬度.
59 + * @param longitude 经度.
60 + *
61 + */
62 ++ (void)setLatitude:(double)latitude longitude:(double)longitude;
63 +
64 +/*!
65 + * @abstract 地理位置上报
66 + *
67 + * @param location 直接传递 CLLocation * 型的地理信息
68 + *
69 + * @discussion 需要链接 CoreLocation.framework 并且 #import <CoreLocation/CoreLocation.h>
70 + */
71 ++ (void)setLocation:(CLLocation *)location;
72 +
73 +/*!
74 + * @abstract 开启Crash日志收集
75 + *
76 + * @discussion 默认是关闭状态.
77 + */
78 ++ (void)crashLogON;
79 +
80 +/*!
81 + * @abstract 设置是否打印sdk产生的Debug级log信息, 默认为NO(不打印log)
82 + *
83 + * SDK 默认开启的日志级别为: Info. 只显示必要的信息, 不打印调试日志.
84 + *
85 + * 请在SDK启动后调用本接口,调用本接口可打开日志级别为: Debug, 打印调试日志.
86 + * 请在发布产品时改为NO,避免产生不必要的IO
87 + */
88 ++ (void)setDebug:(BOOL)enable;
89 +
90 +/*!事件统计
91 + * @param event 上报的事件模型
92 + */
93 ++ (void)eventRecord:(JANALYTICSEventObject *)event;
94 +
95 +@end
96 +
1 +//
2 +// AppDelegate.h
3 +// MGBSHudTest
4 +//
5 +// Created by megabes inc. on 2017/6/9.
6 +// Copyright © 2017年 megabes inc. All rights reserved.
7 +//
8 +// WebSite : http://www.megabes.com/
9 +// E-mail : megabes@126.com
10 +
11 +#import <Foundation/Foundation.h>
12 +#import <UIKit/UIKit.h>
13 +
14 +// backgroundStyle : Dark, Blur
15 +typedef NS_ENUM (NSInteger, MGBSHUDBackgourdStyle){
16 + MGBSHUDBackgourdStyleDark = 0,
17 + MGBSHUDBackgourdStyleBlur
18 +};
19 +
20 +// Position : center, bottom
21 +typedef NS_ENUM (NSInteger, MGBSHUDPosition){
22 + MGBSHUDPositionCenter = 0,
23 + MGBSHUDPositionBottom
24 +};
25 +
26 +// MGBSHUDPopstyle : fade, transform
27 +typedef NS_ENUM (NSInteger, MGBSHUDPopstyle){
28 + MGBSHUDPopstyleNormal = 0, // 淡入淡出
29 + MGBSHUDPopstyleTransform // 变形动画
30 +};
31 +
32 +// MGBSHUDImgtype
33 +typedef NS_ENUM (NSInteger, MGBSHUDImgtype){
34 + MGBSHUDImgtypeSpinCircle = 0,
35 + MGBSHUDImgtypeSuccess,
36 + MGBSHUDImgtypeFail,
37 + MGBSHUDImgtypeWarning,
38 + MGBSHUDImgtypeCustom // 可以定制自己的IMG
39 +};
40 +
41 +@interface MGBSHUD : NSObject
42 +
43 +/*
44 + * 方法:展示一个text的HUD,可以定制
45 + * fontsize :
46 + * uiEnabled : uiUserEnabled
47 + * delay : TIME LAST
48 + * backgroudStyle :
49 + * position :
50 + * popstyle : animation style
51 + */
52 ++(void)showOnlyText:(NSString*)text fontSize:(CGFloat)size uiEnabled:(bool)uiEnabled delay:(NSTimeInterval)delay backgroudStyle:(MGBSHUDBackgourdStyle)backgroundStyle position:(MGBSHUDPosition)position popstyle:(MGBSHUDPopstyle)popStyle identifier:(NSString*)identifier;
53 +
54 +/*
55 + * 方法:展示一个text的HUD,可以定制
56 + * fontsize :
57 + * uiEnabled : uiUserEnabled
58 + * delay : TIME LAST
59 + * backgroudStyle :
60 + * position :
61 + * popstyle : animation style
62 + * imgType :
63 + * ifCircleColor : 可以定制转圈的颜色
64 + */
65 ++(void)showImgText:(NSString*)text fontSize:(CGFloat)size uiEnabled:(bool)uiEnabled delay:(NSTimeInterval)delay backgroudStyle:(MGBSHUDBackgourdStyle)backgroundStyle position:(MGBSHUDPosition)position popstyle:(MGBSHUDPopstyle)popStyle imgType:(MGBSHUDImgtype)imgType ifCircleColor:(UIColor*)circleColor ifCustomImg:(UIImage*)img identifier:(NSString*)identifier;
66 +
67 ++(void)showSqureHUDbyText:(NSString*)text fontSize:(CGFloat)size uiEnabled:(bool)uiEnabled delay:(NSTimeInterval)delay backgroudStyle:(MGBSHUDBackgourdStyle)backgroundStyle popstyle:(MGBSHUDPopstyle)popStyle imgType:(MGBSHUDImgtype)imgType ifCircleColor:(UIColor*)circleColor ifCustomImg:(UIImage*)img identifier:(NSString*)identifier;
68 +
69 ++(void)dismissHUDWithIdentifier:(NSString*)identifier;
70 +
71 +@end
1 +framework module MGBSHud {
2 + umbrella header "MGBSHud.h"
3 +
4 + export *
5 + module * { export * }
6 +}
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>files</key>
6 + <dict>
7 + <key>Info.plist</key>
8 + <data>
9 + wScrrUfKAuSV8BljEoqFpP6iqrU=
10 + </data>
11 + <key>MGBSHUDError.png</key>
12 + <data>
13 + NhvK1HHcH7J5dfMgKRTxxyNpaEs=
14 + </data>
15 + <key>MGBSHUDImgTextView.nib</key>
16 + <data>
17 + idgvxYiRc3HBgCYpmTbP8FpLkHU=
18 + </data>
19 + <key>MGBSHUDSqure.nib</key>
20 + <data>
21 + Pp7rmTFAB4zJ+SK6FWRWyunYe24=
22 + </data>
23 + <key>MGBSHUDSuccess.png</key>
24 + <data>
25 + E/xkvJJwc9apKW1YmAVl0cxQt/s=
26 + </data>
27 + <key>MGBSHUDTextView.nib</key>
28 + <data>
29 + mhAV81Crhf5G+y7mprE9pLpMMjg=
30 + </data>
31 + <key>MGBSHUDWarning.png</key>
32 + <data>
33 + CzPYvks9WjGZc3qpVytoUa1Bc/U=
34 + </data>
35 + </dict>
36 + <key>files2</key>
37 + <dict>
38 + <key>MGBSHUDError.png</key>
39 + <dict>
40 + <key>hash</key>
41 + <data>
42 + NhvK1HHcH7J5dfMgKRTxxyNpaEs=
43 + </data>
44 + <key>hash2</key>
45 + <data>
46 + 7UbfTxg5DAiv0cQTVeJPMN0gEblV18NE3kGiWQZsgMw=
47 + </data>
48 + </dict>
49 + <key>MGBSHUDImgTextView.nib</key>
50 + <dict>
51 + <key>hash</key>
52 + <data>
53 + idgvxYiRc3HBgCYpmTbP8FpLkHU=
54 + </data>
55 + <key>hash2</key>
56 + <data>
57 + cfa+b2yWyFCebKqjQNYO1a6HPspGhdlyoC4UGrbJAlQ=
58 + </data>
59 + </dict>
60 + <key>MGBSHUDSqure.nib</key>
61 + <dict>
62 + <key>hash</key>
63 + <data>
64 + Pp7rmTFAB4zJ+SK6FWRWyunYe24=
65 + </data>
66 + <key>hash2</key>
67 + <data>
68 + 4QqrbfCiY+G7nbsx0bzxLs2NEEN0EJvsAl7sW9iNJdo=
69 + </data>
70 + </dict>
71 + <key>MGBSHUDSuccess.png</key>
72 + <dict>
73 + <key>hash</key>
74 + <data>
75 + E/xkvJJwc9apKW1YmAVl0cxQt/s=
76 + </data>
77 + <key>hash2</key>
78 + <data>
79 + rz/fB39AJBIDV22KT1E0F5Nr5xnOV1TWNXgy54kGo3o=
80 + </data>
81 + </dict>
82 + <key>MGBSHUDTextView.nib</key>
83 + <dict>
84 + <key>hash</key>
85 + <data>
86 + mhAV81Crhf5G+y7mprE9pLpMMjg=
87 + </data>
88 + <key>hash2</key>
89 + <data>
90 + FBM/OlDthxMFGCKogid0YCUHjnIYOPTYTnOW4F6DyeA=
91 + </data>
92 + </dict>
93 + <key>MGBSHUDWarning.png</key>
94 + <dict>
95 + <key>hash</key>
96 + <data>
97 + CzPYvks9WjGZc3qpVytoUa1Bc/U=
98 + </data>
99 + <key>hash2</key>
100 + <data>
101 + +NZDELsYe8wiF7c/qOMWIDzcNHoDaonVzw4Ngcbshgo=
102 + </data>
103 + </dict>
104 + </dict>
105 + <key>rules</key>
106 + <dict>
107 + <key>^</key>
108 + <true/>
109 + <key>^.*\.lproj/</key>
110 + <dict>
111 + <key>optional</key>
112 + <true/>
113 + <key>weight</key>
114 + <real>1000</real>
115 + </dict>
116 + <key>^.*\.lproj/locversion.plist$</key>
117 + <dict>
118 + <key>omit</key>
119 + <true/>
120 + <key>weight</key>
121 + <real>1100</real>
122 + </dict>
123 + <key>^Base\.lproj/</key>
124 + <dict>
125 + <key>weight</key>
126 + <real>1010</real>
127 + </dict>
128 + <key>^version.plist$</key>
129 + <true/>
130 + </dict>
131 + <key>rules2</key>
132 + <dict>
133 + <key>.*\.dSYM($|/)</key>
134 + <dict>
135 + <key>weight</key>
136 + <real>11</real>
137 + </dict>
138 + <key>^</key>
139 + <dict>
140 + <key>weight</key>
141 + <real>20</real>
142 + </dict>
143 + <key>^(.*/)?\.DS_Store$</key>
144 + <dict>
145 + <key>omit</key>
146 + <true/>
147 + <key>weight</key>
148 + <real>2000</real>
149 + </dict>
150 + <key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
151 + <dict>
152 + <key>nested</key>
153 + <true/>
154 + <key>weight</key>
155 + <real>10</real>
156 + </dict>
157 + <key>^.*</key>
158 + <true/>
159 + <key>^.*\.lproj/</key>
160 + <dict>
161 + <key>optional</key>
162 + <true/>
163 + <key>weight</key>
164 + <real>1000</real>
165 + </dict>
166 + <key>^.*\.lproj/locversion.plist$</key>
167 + <dict>
168 + <key>omit</key>
169 + <true/>
170 + <key>weight</key>
171 + <real>1100</real>
172 + </dict>
173 + <key>^Base\.lproj/</key>
174 + <dict>
175 + <key>weight</key>
176 + <real>1010</real>
177 + </dict>
178 + <key>^Info\.plist$</key>
179 + <dict>
180 + <key>omit</key>
181 + <true/>
182 + <key>weight</key>
183 + <real>20</real>
184 + </dict>
185 + <key>^PkgInfo$</key>
186 + <dict>
187 + <key>omit</key>
188 + <true/>
189 + <key>weight</key>
190 + <real>20</real>
191 + </dict>
192 + <key>^[^/]+$</key>
193 + <dict>
194 + <key>nested</key>
195 + <true/>
196 + <key>weight</key>
197 + <real>10</real>
198 + </dict>
199 + <key>^embedded\.provisionprofile$</key>
200 + <dict>
201 + <key>weight</key>
202 + <real>20</real>
203 + </dict>
204 + <key>^version\.plist$</key>
205 + <dict>
206 + <key>weight</key>
207 + <real>20</real>
208 + </dict>
209 + </dict>
210 +</dict>
211 +</plist>
1 +{
2 + "info" : {
3 + "version" : 1,
4 + "author" : "xcode"
5 + }
6 +}
...\ No newline at end of file ...\ No newline at end of file
1 +{
2 + "images" : [
3 + {
4 + "idiom" : "universal",
5 + "filename" : "center_white.png",
6 + "scale" : "1x"
7 + },
8 + {
9 + "idiom" : "universal",
10 + "scale" : "2x"
11 + },
12 + {
13 + "idiom" : "universal",
14 + "scale" : "3x"
15 + }
16 + ],
17 + "info" : {
18 + "version" : 1,
19 + "author" : "xcode"
20 + }
21 +}
...\ No newline at end of file ...\ No newline at end of file
1 +//
2 +// XYCommon.h
3 +// PieChart
4 +//
5 +// Created by GMY on 17/6/1.
6 +// Copyright © 2017年 com.gmy. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +#import <UIKit/UIKit.h>
11 +
12 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width //屏幕宽度
13 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height //屏幕高度
14 +
15 +/* 定义RGBCOLOR*/
16 +#define ColorRGBA(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
17 +
18 +@interface XYCommon : NSObject
19 +
20 +UIKIT_EXTERN CGFloat const CenterTitleWidth;
21 +
22 +UIKIT_EXTERN CGFloat const AmountWidth;
23 +
24 +UIKIT_EXTERN CGFloat const AmountHeight;
25 +
26 +@end
1 +//
2 +// XYCommon.m
3 +// PieChart
4 +//
5 +// Created by GMY on 17/6/1.
6 +// Copyright © 2017年 com.gmy. All rights reserved.
7 +//
8 +
9 +#import "XYCommon.h"
10 +
11 +@implementation XYCommon
12 +
13 +CGFloat const CenterTitleWidth = 70;
14 +
15 +CGFloat const AmountWidth = 70;
16 +
17 +CGFloat const AmountHeight = 22;
18 +
19 +@end
1 +//
2 +// XYPieChartView.h
3 +// PieChart
4 +//
5 +// Created by GMY on 17/6/1.
6 +// Copyright © 2017年 com.gmy. All rights reserved.
7 +//
8 +
9 +#import <UIKit/UIKit.h>
10 +
11 +@class XYPieChartView;
12 +@protocol PieChartDelegate <NSObject>
13 +
14 +@required
15 +/**
16 + * 选中扇形的回调数据
17 + */
18 +- (void)selectedFinish:(XYPieChartView *)pieChartView index:(NSInteger)index selectedType:(NSDictionary *)selectedType;
19 +
20 +@optional
21 +/**
22 + * 点击中心按钮的回调
23 + */
24 +- (void)onCenterClick:(XYPieChartView *)PieChartView;
25 +
26 +@end
27 +
28 +@interface XYPieChartView : UIView
29 +
30 +@property (nonatomic, assign) id<PieChartDelegate> delegate;
31 +
32 +/**
33 + * param:{frame:位置, AssetTypeArray:数据的数组, PercentArray:百分比数值 colorArr:颜色的数组}
34 + */
35 +- (id)initWithFrame:(CGRect)frame withPieChartTypeArray:(NSMutableArray *)pieChartTypeArray withPercentArray:(NSMutableArray *)percentArray withColorArray:(NSMutableArray *)colorArray;
36 +
37 +/**
38 + * 总标题信息
39 + */
40 +- (void)setAmountText:(NSString *)text;
41 +
42 +/**
43 + * 总金额
44 + */
45 +- (void)setTitleText:(NSMutableAttributedString *)text;
46 +
47 +/**
48 + * 刷新chart
49 + */
50 +- (void)reloadChart;
51 +
52 +/**
53 + * 校验小于百分比时,另外的展现形式
54 + */
55 +- (void)setCheckLessThanPercent:(CGFloat)lessPerent;
56 +@end
1 +//
2 +// XYPieChartView.m
3 +// PieChart
4 +//
5 +// Created by GMY on 17/6/1.
6 +// Copyright © 2017年 com.gmy. All rights reserved.
7 +//
8 +
9 +#import "XYPieChartView.h"
10 +#import "XYRotatedView.h"
11 +#import "XYCommon.h"
12 +
13 +@interface XYPieChartView()<RotatedViewDelegate>
14 +
15 +// 旋转视图
16 +@property (nonatomic,strong)XYRotatedView *rotatedView;
17 +
18 +// 中心圆的按钮
19 +@property (nonatomic,strong) UIButton *centerButton;
20 +
21 +// 中心圆数值(总金额)
22 +@property (nonatomic,strong) UILabel *centerAmount;
23 +
24 +// 中心圆标题
25 +@property (nonatomic, strong) UILabel *centerTitle;
26 +
27 +// 数据数组
28 +@property (nonatomic, strong) NSMutableArray *selectedTypeList;
29 +
30 +@end
31 +
32 +@implementation XYPieChartView
33 +
34 +/**
35 + *
36 + * 初始化方法
37 + * param:{frame:位置, pieChartTypeArray:数据的数组, PercentArray:百分比数值 colorArr:颜色的数组}
38 + *
39 + */
40 +- (id)initWithFrame:(CGRect)frame withPieChartTypeArray:(NSMutableArray *)pieChartTypeArray withPercentArray:(NSMutableArray *)percentArray withColorArray:(NSMutableArray *)colorArray
41 +{
42 +
43 + if (self = [super initWithFrame:frame]) {
44 +
45 + self.selectedTypeList = pieChartTypeArray;
46 +
47 + // 初始化RotatedView
48 + self.rotatedView = [[XYRotatedView alloc]initWithFrame:self.bounds];
49 +
50 + // 给RotatedView 百分比数组赋值
51 + self.rotatedView.percentArray = percentArray;
52 +
53 + // 给RotatedView 颜色数组赋值
54 + self.rotatedView.mColorArray = colorArray;
55 +
56 + // 接收代理方法
57 + self.rotatedView.delegate = self;
58 +
59 + // 添加RotatedView
60 + [self addSubview:self.rotatedView];
61 +
62 + // 初始化中心圆按钮
63 + self.centerButton = [UIButton buttonWithType:UIButtonTypeCustom];
64 +
65 + // 移除点击事件
66 + [self.centerButton removeTarget:self action:nil forControlEvents:UIControlEventTouchUpInside];
67 +
68 + // 是否接收事件
69 + self.centerButton.userInteractionEnabled = YES;
70 +
71 + // 设置按钮点击事件
72 + [self.centerButton addTarget:self action:@selector(changeInOut:) forControlEvents:UIControlEventTouchUpInside];
73 +
74 + // 中心圆图片
75 + UIImage *centerImage = [UIImage imageNamed:@"center_white"];
76 +
77 + // 图片尺寸
78 + CGSize centerImageSize = centerImage.size;
79 +
80 + if (centerImageSize.height == 0 && centerImageSize.width == 0) {
81 +
82 + // 如果图片尺寸为0,默认赋值width = 80, Height = 80
83 + centerImageSize = CGSizeMake(80, 80);
84 + }
85 +
86 + // 设置按钮普通状态下的背景图片
87 + [self.centerButton setBackgroundImage:centerImage forState:UIControlStateNormal];
88 +
89 + // 设置按钮高亮状态下的背景图片
90 + [self.centerButton setBackgroundImage:centerImage forState:UIControlStateHighlighted];
91 +
92 + // 设置按钮位置、尺寸 (frame)
93 + self.centerButton.frame = CGRectMake((frame.size.width - centerImageSize.width/2)/2, (frame.size.height - centerImageSize.height/2)/2, centerImageSize.width/2, centerImageSize.height/2);
94 +
95 + [self.centerButton.layer setMasksToBounds:YES];
96 +
97 + // 将按钮设置成圆形
98 + [self.centerButton.layer setCornerRadius:self.centerButton.frame.size.width/2];
99 +
100 +
101 + /** 中心圆上展示的标题和总金额 **/
102 +
103 + // 标题宽
104 + CGFloat centerTitleWidth = CenterTitleWidth;
105 +
106 + // 标题高
107 + CGFloat centerTitleHeight = CenterTitleWidth;
108 +
109 + // 设置标题位置
110 + self.centerTitle = [[UILabel alloc]initWithFrame:CGRectMake((centerImageSize.width/2 - centerTitleWidth)/2, (centerImageSize.height/2 - 75)/2, centerTitleWidth, centerTitleHeight)];
111 +
112 + // 标题背景色
113 + self.centerTitle.backgroundColor = [UIColor clearColor];
114 +
115 + // 字体居中
116 + self.centerTitle.textAlignment = NSTextAlignmentCenter;
117 +
118 + // 字体大小
119 + self.centerTitle.font = [UIFont systemFontOfSize:16];
120 +
121 + self.centerTitle.numberOfLines = 2;
122 +
123 + // 字体颜色
124 + self.centerTitle.textColor = [UIColor blackColor];
125 +
126 + // 添加标题
127 + [self.centerButton addSubview:self.centerTitle];
128 +
129 + /** 总金额 **/
130 +
131 + // 金额宽度
132 + CGFloat amountWidth = AmountWidth;
133 +
134 + // 金额宽度
135 + CGFloat amountHeight = AmountHeight;
136 +
137 + // 初始化金额Label 设置位置、大小
138 + self.centerAmount = [[UILabel alloc]initWithFrame:CGRectMake((centerImageSize.width/2 - amountWidth)/2, 53, amountWidth, amountHeight)];
139 +
140 + // 金额背景色
141 + self.centerAmount.backgroundColor = [UIColor clearColor];
142 +
143 + // 字体居中
144 + self.centerAmount.textAlignment = NSTextAlignmentCenter;
145 +
146 + // 字体大小
147 + self.centerAmount.font = [UIFont boldSystemFontOfSize:21];
148 +
149 + // 字体颜色
150 + self.centerAmount.textColor = [UIColor blackColor];
151 +
152 + // 字体大小宽度自适应
153 + [self.centerAmount setAdjustsFontSizeToFitWidth:YES];
154 +
155 + // 添加金额Label
156 + [self.centerButton addSubview:self.centerAmount];
157 +
158 + // 添加中心圆的按钮
159 + [self addSubview:self.centerButton];
160 +
161 + self.backgroundColor = [UIColor clearColor];
162 + }
163 + return self;
164 +}
165 +
166 +/**
167 + * 按钮点击范围的方法
168 + */
169 +- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
170 +
171 + //首先调用父类的方法确定点击的区域确实在按钮的区域中
172 + BOOL res = [super pointInside:point withEvent:event];
173 + if (res) {
174 + //绘制一个圆形path
175 + UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:self.centerButton.frame];
176 + if ([path containsPoint:point]) {
177 + //如果在path区域内,可以接收交互事件,从而截获父视图的点击事件
178 + self.centerButton.userInteractionEnabled = YES;
179 + return YES;
180 +
181 + } else {
182 +
183 + //如果不在path区域内,不可以接收交互事件,从而将事件传给父视图接收
184 + self.centerButton.userInteractionEnabled = NO;
185 + return YES;
186 + }
187 +
188 + }
189 + return NO;
190 +}
191 +/**
192 + * 中心圆按钮的点击事件
193 + */
194 +- (void)changeInOut:(id)sender {
195 + // 触发点击回调方法
196 + if ([self.delegate respondsToSelector:@selector(onCenterClick:)]) {
197 + [self.delegate onCenterClick:self];
198 + }
199 +}
200 +
201 +/**
202 + * 设置标中心圆标题
203 + */
204 +- (void)setTitleText:(NSMutableAttributedString *)text {
205 + [self.centerTitle setAttributedText:text];
206 +}
207 +
208 +/**
209 + * 设置标中心圆金额
210 + */
211 +- (void)setAmountText:(NSString *)text {
212 + [self.centerAmount setText:text];
213 +}
214 +
215 +- (void)setCheckLessThanPercent:(CGFloat)lessPerent {
216 +
217 + [self.rotatedView lessThanPercent:lessPerent];
218 +}
219 +/**
220 + * 刷新PiaChart视图
221 + */
222 +- (void)reloadChart {
223 + [self.rotatedView reloadPie];
224 +}
225 +
226 +/**
227 + * RotatedView 选中视图的delegate方法
228 + */
229 +- (void)selectedFinish:(XYRotatedView *)rotatedView index:(NSInteger)index percent:(float)per {
230 + // 触发本视图的delegate方法
231 + if ([self.delegate respondsToSelector:@selector(selectedFinish:index:selectedType: )]) {
232 +
233 + [self.delegate selectedFinish:self index:index selectedType:self.selectedTypeList[index]];
234 + }
235 +
236 +}
237 +
238 +@end
1 +//
2 +// XYRenderView.h
3 +// PieChart
4 +//
5 +// Created by GMY on 17/6/1.
6 +// Copyright © 2017年 com.gmy. All rights reserved.
7 +//
8 +
9 +#import <UIKit/UIKit.h>
10 +
11 +@class XYRenderView;
12 +
13 +@protocol RenderViewDataSource <NSObject>
14 +
15 +@required
16 +
17 +// 数据源方法 饼图共有几个区域
18 +- (NSUInteger)numberOfSlicesInPieChart:(XYRenderView *)pieChart;
19 +
20 +// 选中的区域索引
21 +- (CGFloat)pieChart:(XYRenderView *)pieChart valueForSliceAtIndex:(NSUInteger)index;
22 +
23 +@optional
24 +// 选中的区域颜色
25 +- (UIColor *)pieChart:(XYRenderView *)pieChart colorForSliceAtIndex:(NSUInteger)index;
26 +
27 +@end
28 +
29 +@protocol RenderViewtDelegate <NSObject>
30 +
31 +@optional
32 +
33 +// will Select
34 +- (void)pieChart:(XYRenderView *)pieChart willSelectSliceAtIndex:(NSUInteger)index;
35 +
36 +// did Select
37 +- (void)pieChart:(XYRenderView *)pieChart didSelectSliceAtIndex:(NSUInteger)index;
38 +
39 +// will Deselect
40 +- (void)pieChart:(XYRenderView *)pieChart willDeselectSliceAtIndex:(NSUInteger)index;
41 +
42 +// did Deselect
43 +- (void)pieChart:(XYRenderView *)pieChart didDeselectSliceAtIndex:(NSUInteger)index;
44 +
45 +// 动画结束
46 +- (void)animateFinish:(XYRenderView *)pieChart;
47 +
48 +@end
49 +
50 +@interface XYRenderView : UIView
51 +
52 +@property(nonatomic, weak) id<RenderViewDataSource> dataSource;
53 +
54 +@property(nonatomic, weak) id<RenderViewtDelegate> delegate;
55 +
56 +@property(nonatomic, assign) CGFloat startPieAngle;
57 +
58 +@property(nonatomic, assign) CGFloat animationSpeed;
59 +
60 +@property(nonatomic, assign) CGPoint pieCenter;
61 +
62 +@property(nonatomic, assign) CGFloat pieRadius;
63 +
64 +@property(nonatomic, assign) BOOL showLabel;
65 +
66 +@property(nonatomic, strong) UIFont *labelFont;
67 +
68 +@property(nonatomic, assign) CGFloat labelRadius;
69 +
70 +@property(nonatomic, assign) CGFloat selectedSliceStroke;
71 +
72 +@property(nonatomic, assign) CGFloat selectedSliceOffsetRadius;
73 +
74 +@property(nonatomic, assign) BOOL showPercentage;
75 +
76 +@property (strong, nonatomic) NSMutableArray *textLayerArray;
77 +
78 +@property (nonatomic, assign) CGFloat textAngle;
79 +
80 +@property (nonatomic, assign) CGFloat textrelativeTheta;
81 +
82 +@property (nonatomic, strong) CATextLayer *textLayer;
83 +
84 +@property (nonatomic, strong) CALayer *lineLayer;
85 +
86 +@property (nonatomic, assign) CGFloat checkLessPercent;
87 +
88 +- (id)initWithFrame:(CGRect)frame Center:(CGPoint)center Radius:(CGFloat)radius;
89 +
90 +- (void)reloadData;
91 +
92 +- (void)setPieBackgroundColor:(UIColor *)color;
93 +
94 +- (void)pieSelected:(NSInteger)selIndex;
95 +
96 +- (void)checkLessPercent:(CGFloat)lessPercent;
97 +@end
1 +//
2 +// XYRenderView.m
3 +// PieChart
4 +//
5 +// Created by GMY on 17/6/1.
6 +// Copyright © 2017年 com.gmy. All rights reserved.
7 +//
8 +
9 +#import "XYRenderView.h"
10 +#import <QuartzCore/QuartzCore.h>
11 +#import "XYCommon.h"
12 +
13 +@interface SliceLayer : CAShapeLayer
14 +
15 +@property (nonatomic, assign) CGFloat value;
16 +
17 +@property (nonatomic, assign) CGFloat percentage;
18 +
19 +@property (nonatomic, assign) double startAngle;
20 +
21 +@property (nonatomic, assign) double endAngle;
22 +
23 +@property (nonatomic, assign) BOOL isSelected;
24 +
25 +- (void)createArcAnimationForKey:(NSString *)key fromValue:(NSNumber *)from toValue:(NSNumber *)to Delegate:(id)delegate;
26 +
27 +@end
28 +
29 +@implementation SliceLayer
30 +
31 +- (NSString*)description {
32 + return @"";
33 +}
34 +
35 ++ (BOOL)needsDisplayForKey:(NSString *)key {
36 + if ([key isEqualToString:@"startAngle"] || [key isEqualToString:@"endAngle"]) {
37 + return YES;
38 + }
39 + else {
40 + return [super needsDisplayForKey:key];
41 + }
42 +}
43 +
44 +- (id)initWithLayer:(id)layer {
45 + if (self = [super initWithLayer:layer])
46 + {
47 + if ([layer isKindOfClass:[SliceLayer class]]) {
48 + self.startAngle = [(SliceLayer *)layer startAngle];
49 + self.endAngle = [(SliceLayer *)layer endAngle];
50 + }
51 + }
52 + return self;
53 +}
54 +
55 +- (void)createArcAnimationForKey:(NSString *)key fromValue:(NSNumber *)from toValue:(NSNumber *)to Delegate:(id)delegate {
56 + CABasicAnimation *arcAnimation = [CABasicAnimation animationWithKeyPath:key];
57 +
58 + NSNumber *currentAngle = [[self presentationLayer] valueForKey:key];
59 +
60 + if(!currentAngle) currentAngle = from;
61 +
62 + [arcAnimation setFromValue:currentAngle];
63 +
64 + [arcAnimation setToValue:to];
65 +
66 + [arcAnimation setDelegate:delegate];
67 +
68 + [arcAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];
69 +
70 + [self addAnimation:arcAnimation forKey:key];
71 +
72 + [self setValue:to forKey:key];
73 +}
74 +
75 +@end
76 +
77 +@interface XYRenderView ()
78 +
79 +- (void)updateTimerFired:(NSTimer *)timer;
80 +
81 +- (SliceLayer *)createSliceLayer;
82 +
83 +- (void)updateLabelForLayer:(SliceLayer *)pieLayer value:(CGFloat)value;
84 +
85 +- (void)notifyDelegateOfSelectionChangeFrom:(NSUInteger)previousSelection to:(NSUInteger)newSelection;
86 +
87 +@end
88 +
89 +@implementation XYRenderView
90 +{
91 + NSInteger _selectedSliceIndex;
92 + //pie view, contains all slices
93 + UIView *_pieView;
94 +
95 + //animation control
96 + NSTimer *_animationTimer;
97 +
98 + NSMutableArray *_animations;
99 +
100 +}
101 +static NSUInteger kDefaultSliceZOrder = 100;
102 +
103 +static CGPathRef CGPathCreateArc(CGPoint center, CGFloat radius, CGFloat startAngle, CGFloat endAngle) {
104 + CGMutablePathRef path = CGPathCreateMutable();
105 +
106 + CGPathMoveToPoint(path, NULL, center.x, center.y);
107 +
108 + CGPathAddArc(path, NULL, center.x, center.y, radius, startAngle, endAngle, 0);
109 +
110 + CGPathCloseSubpath(path);
111 +
112 + return path;
113 +}
114 +
115 +- (id)initWithFrame:(CGRect)frame {
116 + if (self = [super initWithFrame:frame])
117 + {
118 + self.backgroundColor = [UIColor clearColor];
119 +
120 + _pieView = [[UIView alloc] initWithFrame:frame];
121 +
122 + [_pieView setBackgroundColor:[UIColor clearColor]];
123 +
124 + [self addSubview:_pieView];
125 +
126 + _selectedSliceIndex = -1;
127 +
128 + _animations = [[NSMutableArray alloc] init];
129 +
130 + _animationSpeed = 0.5;
131 +
132 + _startPieAngle = M_PI_2*3;
133 +
134 + _selectedSliceStroke = 3.0;
135 +
136 + self.pieRadius = MIN(frame.size.width/2, frame.size.height/2);
137 +
138 + self.pieCenter = CGPointMake(frame.size.width/2, frame.size.height/2);
139 +
140 + self.labelFont = [UIFont boldSystemFontOfSize:MAX((int)self.pieRadius/10, 5)];
141 +
142 + _labelRadius = _pieRadius/2;
143 +
144 + _selectedSliceOffsetRadius = MAX(10, _pieRadius/10);
145 +
146 + _showLabel = YES;
147 +
148 + _showPercentage = YES;
149 +
150 + }
151 + return self;
152 +}
153 +
154 +- (id)initWithFrame:(CGRect)frame Center:(CGPoint)center Radius:(CGFloat)radius {
155 + if (self = [super initWithFrame:frame]) {
156 + self.pieCenter = center;
157 + self.pieRadius = radius;
158 + }
159 + return self;
160 +}
161 +
162 +- (id)initWithCoder:(NSCoder *)aDecoder {
163 + if(self = [super initWithCoder:aDecoder]) {
164 + _pieView = [[UIView alloc] initWithFrame:self.bounds];
165 + [_pieView setBackgroundColor:[UIColor clearColor]];
166 + [self insertSubview:_pieView atIndex:0];
167 +
168 + _selectedSliceIndex = -1;
169 + _animations = [[NSMutableArray alloc] init];
170 +
171 + _animationSpeed = 0.5;
172 + _startPieAngle = M_PI_2*3;
173 + _selectedSliceStroke = 3.0;
174 +
175 + CGRect bounds = [[self layer] bounds];
176 + self.pieRadius = MIN(bounds.size.width/2, bounds.size.height/2) - 10;
177 + self.pieCenter = CGPointMake(bounds.size.width/2, bounds.size.height/2);
178 + self.labelFont = [UIFont boldSystemFontOfSize:MAX((int)self.pieRadius/10, 5)];
179 + _labelRadius = _pieRadius/2;
180 + _selectedSliceOffsetRadius = MAX(10, _pieRadius/10);
181 +
182 + _showLabel = YES;
183 + _showPercentage = YES;
184 +
185 + }
186 + return self;
187 +}
188 +
189 +- (void)setPieCenter:(CGPoint)pieCenter {
190 + [_pieView setCenter:pieCenter];
191 +
192 + _pieCenter = CGPointMake(_pieView.frame.size.width/2, _pieView.frame.size.height/2);
193 +}
194 +
195 +- (void)setPieRadius:(CGFloat)pieRadius {
196 + _pieRadius = pieRadius;
197 +
198 + CGRect frame = CGRectMake(_pieCenter.x-pieRadius, _pieCenter.y-pieRadius, pieRadius*2, pieRadius*2);
199 +
200 + _pieCenter = CGPointMake(frame.size.width/2, frame.size.height/2);
201 +
202 + [_pieView setFrame:frame];
203 +
204 + [_pieView.layer setCornerRadius:_pieRadius];
205 +}
206 +
207 +- (void)setPieBackgroundColor:(UIColor *)color {
208 + [_pieView setBackgroundColor:color];
209 +}
210 +
211 +#pragma mark - manage settings
212 +#pragma mark 显示扇形百分比
213 +- (void)setShowPercentage:(BOOL)showPercentage {
214 + _showPercentage = showPercentage;
215 +
216 + for(SliceLayer *layer in _pieView.layer.sublayers)
217 + {
218 + CATextLayer *textLayer = (CATextLayer*)[[layer sublayers] objectAtIndex:0];
219 +
220 + [textLayer setHidden:!_showLabel];
221 +
222 + if(!_showLabel) return;
223 +
224 + NSString *label;
225 +
226 + if(_showPercentage){
227 +
228 + label = [NSString stringWithFormat:@"%0.0f", layer.percentage*100];
229 + } else {
230 + label = [NSString stringWithFormat:@"%0.0f", layer.value];
231 + }
232 +
233 + NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:13]};
234 +
235 + CGSize infoSize = CGSizeMake(10, 20);
236 +
237 + CGSize size = [label boundingRectWithSize:infoSize options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attributes context:nil].size;
238 +
239 + if(M_PI*2*_labelRadius*layer.percentage < MAX(size.width,size.height))
240 + {
241 + [textLayer setString:@""];
242 + }
243 + else
244 + {
245 + [textLayer setString:label];
246 + [textLayer setBounds:CGRectMake(0, 0, size.width, size.height)];
247 + }
248 + }
249 +}
250 +
251 +#pragma mark - 计算选中的扇形滑出的位置和角度
252 +- (void)setSliceSelectedAtIndex:(NSInteger)index {
253 + if(_selectedSliceOffsetRadius <= 0) {
254 +
255 + return;
256 + }
257 +
258 + SliceLayer *layer = (SliceLayer*)[_pieView.layer.sublayers objectAtIndex:index];
259 +
260 + if (layer) {
261 +
262 + float adjust = 0.5;
263 +
264 + CGPoint currPos = layer.position;
265 +
266 + double middleAngle = (layer.startAngle + layer.endAngle)/2.0;
267 +
268 + // 此处是选中的扇形滑出的位置
269 + CGPoint newPos = CGPointMake(currPos.x + _selectedSliceOffsetRadius*cos(middleAngle)*adjust, currPos.y + _selectedSliceOffsetRadius*sin(middleAngle)*adjust);
270 +
271 + layer.position = newPos;
272 +
273 + layer.isSelected = YES;
274 + }
275 +}
276 +
277 +#pragma mark - 计算扇形取消选中后滑出的位置和角度
278 +- (void)setSliceDeselectedAtIndex:(NSInteger)index {
279 + if(_selectedSliceOffsetRadius <= 0) {
280 +
281 + return;
282 + }
283 +
284 + SliceLayer *layer = (SliceLayer*)[_pieView.layer.sublayers objectAtIndex:index];
285 +
286 + if (layer) {
287 +
288 + layer.position = CGPointMake(0, 0);
289 + layer.isSelected = NO;
290 + }
291 +}
292 +
293 +#pragma mark - Pie Reload Data With Animation
294 +- (void)reloadData {
295 + if (_dataSource && !_animationTimer)
296 + {
297 + CALayer *parentLayer = [_pieView layer];
298 + NSArray *slicelayers = [parentLayer sublayers];
299 +
300 + _selectedSliceIndex = -1;
301 + [slicelayers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
302 + SliceLayer *layer = (SliceLayer *)obj;
303 + if(layer.isSelected)
304 + [self setSliceDeselectedAtIndex:idx];
305 + }];
306 +
307 + double startToAngle = 0.0;
308 + double endToAngle = startToAngle;
309 +
310 + NSUInteger sliceCount = [_dataSource numberOfSlicesInPieChart:self];
311 +
312 + double sum = 0.0;
313 + double values[sliceCount];
314 + for (int index = 0; index < sliceCount; index++) {
315 + values[index] = [_dataSource pieChart:self valueForSliceAtIndex:index];
316 + sum += values[index];
317 + }
318 +
319 + double angles[sliceCount];
320 + for (int index = 0; index < sliceCount; index++) {
321 + double div;
322 + if (sum == 0)
323 + div = 0;
324 + else
325 + div = values[index] / sum;
326 + angles[index] = M_PI * 2 * div;
327 + }
328 +
329 + [CATransaction begin];
330 + [CATransaction setAnimationDuration:_animationSpeed];
331 +
332 + [_pieView setUserInteractionEnabled:NO];
333 +
334 + __block NSMutableArray *layersToRemove = nil;
335 + [CATransaction setCompletionBlock:^{
336 +
337 + [layersToRemove enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
338 + [obj removeFromSuperlayer];
339 + }];
340 +
341 + [layersToRemove removeAllObjects];
342 +
343 + for(SliceLayer *layer in _pieView.layer.sublayers)
344 + {
345 + [layer setZPosition:kDefaultSliceZOrder];
346 + }
347 +
348 + [_pieView setUserInteractionEnabled:YES];
349 + if([_delegate respondsToSelector:@selector(animateFinish:)]){
350 + [_delegate animateFinish:self];
351 + }
352 + }];
353 +
354 + BOOL isOnStart = ([slicelayers count] == 0 && sliceCount);
355 + NSInteger diff = sliceCount - [slicelayers count];
356 + layersToRemove = [NSMutableArray arrayWithArray:slicelayers];
357 +
358 + BOOL isOnEnd = ([slicelayers count] && (sliceCount == 0 || sum <= 0));
359 + if(isOnEnd)
360 + {
361 + for(SliceLayer *layer in _pieView.layer.sublayers){
362 + [self updateLabelForLayer:layer value:0];
363 + [layer createArcAnimationForKey:@"startAngle"
364 + fromValue:[NSNumber numberWithDouble:_startPieAngle]
365 + toValue:[NSNumber numberWithDouble:_startPieAngle]
366 + Delegate:self];
367 + [layer createArcAnimationForKey:@"endAngle"
368 + fromValue:[NSNumber numberWithDouble:_startPieAngle]
369 + toValue:[NSNumber numberWithDouble:_startPieAngle]
370 + Delegate:self];
371 + }
372 + [CATransaction commit];
373 + return;
374 + }
375 +
376 + for(int index = 0; index < sliceCount; index ++)
377 + {
378 + SliceLayer *layer;
379 + double angle = angles[index];
380 + endToAngle += angle;
381 + double startFromAngle = _startPieAngle + startToAngle;
382 + double endFromAngle = _startPieAngle + endToAngle;
383 +
384 + if( index >= [slicelayers count] )
385 + {
386 + layer = [self createSliceLayer];
387 + if (isOnStart)
388 + startFromAngle = endFromAngle = _startPieAngle;
389 + [parentLayer addSublayer:layer];
390 + diff--;
391 + }
392 + else
393 + {
394 + SliceLayer *onelayer = [slicelayers objectAtIndex:index];
395 + if(diff == 0 || onelayer.value == (CGFloat)values[index])
396 + {
397 + layer = onelayer;
398 + [layersToRemove removeObject:layer];
399 + }
400 + else if(diff > 0)
401 + {
402 + layer = [self createSliceLayer];
403 + [parentLayer insertSublayer:layer atIndex:index];
404 + diff--;
405 + }
406 + else if(diff < 0)
407 + {
408 + while(diff < 0)
409 + {
410 + [onelayer removeFromSuperlayer];
411 + [parentLayer addSublayer:onelayer];
412 + diff++;
413 + onelayer = [slicelayers objectAtIndex:index];
414 + if(onelayer.value == (CGFloat)values[index] || diff == 0)
415 + {
416 + layer = onelayer;
417 + [layersToRemove removeObject:layer];
418 + break;
419 + }
420 + }
421 + }
422 + }
423 +
424 + layer.value = values[index];
425 + layer.percentage = (sum)?layer.value:0;
426 + UIColor *color = nil;
427 + if([_dataSource respondsToSelector:@selector(pieChart:colorForSliceAtIndex:)])
428 + {
429 + color = [_dataSource pieChart:self colorForSliceAtIndex:index];
430 + }
431 +
432 + if(!color)
433 + {
434 + // 如果没有设置扇形颜色这是默认颜色
435 + color = [UIColor colorWithHue:((index/8)%20)/20.0+0.02 saturation:(index%8+3)/10.0 brightness:91/100.0 alpha:1];
436 + }
437 +
438 + [layer setFillColor:color.CGColor];
439 + if (sliceCount > 1) {
440 + [layer setStrokeColor:ColorRGBA(255, 255, 255, 1).CGColor];
441 + [layer setLineWidth:3.0];
442 + }
443 +
444 + [self updateLabelForLayer:layer value:values[index]];
445 + [layer createArcAnimationForKey:@"startAngle"
446 + fromValue:[NSNumber numberWithDouble:startFromAngle]
447 + toValue:[NSNumber numberWithDouble:startToAngle+_startPieAngle]
448 + Delegate:self];
449 + [layer createArcAnimationForKey:@"endAngle"
450 + fromValue:[NSNumber numberWithDouble:endFromAngle]
451 + toValue:[NSNumber numberWithDouble:endToAngle+_startPieAngle]
452 + Delegate:self];
453 + startToAngle = endToAngle;
454 + }
455 + [CATransaction setDisableActions:YES];
456 + for(SliceLayer *layer in layersToRemove)
457 + {
458 + [layer setFillColor:[self backgroundColor].CGColor];
459 + [layer setDelegate:nil];
460 + [layer setZPosition:0];
461 + CATextLayer *textLayer = (CATextLayer*)[[layer sublayers] objectAtIndex:0];
462 + [textLayer setHidden:YES];
463 + }
464 + [CATransaction setDisableActions:NO];
465 + [CATransaction commit];
466 + }
467 +}
468 +
469 +#pragma mark - Animation Delegate + Run Loop Timer
470 +
471 +- (void)updateTimerFired:(NSTimer *)timer;
472 +{
473 + CALayer *parentLayer = [_pieView layer];
474 + NSArray *pieLayers = [parentLayer sublayers];
475 +
476 + [pieLayers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
477 + SliceLayer *layer = (SliceLayer *)obj;
478 +
479 + NSNumber *presentationLayerStartAngle = [[obj presentationLayer] valueForKey:@"startAngle"];
480 + CGFloat interpolatedStartAngle = [presentationLayerStartAngle doubleValue];
481 +
482 + NSNumber *presentationLayerEndAngle = [[obj presentationLayer] valueForKey:@"endAngle"];
483 + CGFloat interpolatedEndAngle = [presentationLayerEndAngle doubleValue];
484 +
485 + CGPathRef path = CGPathCreateArc(_pieCenter, _pieRadius, interpolatedStartAngle, interpolatedEndAngle);
486 + [obj setPath:path];
487 + CFRelease(path);
488 +
489 + {
490 + CATextLayer *labelLayer = (CATextLayer*)[[obj sublayers] objectAtIndex:0];
491 + CAShapeLayer *lineLayer = (CAShapeLayer*)[[obj sublayers] objectAtIndex:1];
492 + CGFloat interpolatedMidAngle = (interpolatedEndAngle + interpolatedStartAngle) / 2;
493 + [CATransaction setDisableActions:YES];
494 +
495 + if (layer.percentage < self.checkLessPercent) {
496 +
497 + [labelLayer setForegroundColor:[UIColor grayColor].CGColor];
498 +
499 + float labelLayerX = _pieCenter.x + ((_labelRadius + 70) * cos(interpolatedMidAngle));
500 +
501 + float labelLayerY = _pieCenter.y + ((_labelRadius + 70) * sin(interpolatedMidAngle));
502 +
503 + UIBezierPath *linePath = [UIBezierPath bezierPath];
504 + // 起点
505 + [linePath moveToPoint:CGPointMake(_pieCenter.x + ((_labelRadius+ 35) * cos(interpolatedMidAngle)), _pieCenter.y + ((_labelRadius + 35) * sin(interpolatedMidAngle)))];
506 + // 终点
507 + [linePath addLineToPoint:CGPointMake(_pieCenter.x + ((_labelRadius+ 50) * cos(interpolatedMidAngle)), _pieCenter.y + ((_labelRadius + 50) * sin(interpolatedMidAngle)))];
508 +
509 + lineLayer.path = linePath.CGPath;
510 +
511 + [labelLayer setPosition:CGPointMake(labelLayerX * 1, labelLayerY * 1)];
512 + } else {
513 +
514 + float labelLayerX = _pieCenter.x + (_labelRadius * cos(interpolatedMidAngle));
515 +
516 + float labelLayerY = _pieCenter.y + (_labelRadius * sin(interpolatedMidAngle));
517 +
518 + [labelLayer setPosition:CGPointMake(labelLayerX * 1, labelLayerY * 1)];
519 +
520 + }
521 +
522 + [CATransaction setDisableActions:NO];
523 + }
524 + }];
525 +}
526 +
527 +- (void)animationDidStart:(CAAnimation *)anim {
528 + if (_animationTimer == nil) {
529 + static float timeInterval = 1.0/60.0;
530 + _animationTimer= [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(updateTimerFired:) userInfo:nil repeats:YES];
531 + }
532 +
533 + [_animations addObject:anim];
534 +}
535 +
536 +- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)animationCompleted {
537 + [_animations removeObject:anim];
538 +
539 + if ([_animations count] == 0) {
540 + [_animationTimer invalidate];
541 + _animationTimer = nil;
542 + }
543 +}
544 +
545 +#pragma mark - Touch Handing (Selection Notification) 选中扇形的索引
546 +- (NSInteger)getCurrentSelectedOnTouch:(CGPoint)point {
547 + __block NSUInteger selectedIndex = -1;
548 +
549 + CGAffineTransform transform = CGAffineTransformIdentity;
550 +
551 + CALayer *parentLayer = [_pieView layer];
552 + NSArray *pieLayers = [parentLayer sublayers];
553 +
554 + [pieLayers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
555 + SliceLayer *pieLayer = (SliceLayer *)obj;
556 + CGPathRef path = [pieLayer path];
557 +
558 + if (CGPathContainsPoint(path, &transform, point, 0)) {
559 + [pieLayer setLineWidth:_selectedSliceStroke];
560 + [pieLayer setStrokeColor:[UIColor whiteColor].CGColor];
561 + [pieLayer setLineJoin:kCALineJoinBevel];
562 + [pieLayer setZPosition:MAXFLOAT];
563 + selectedIndex = idx;
564 + } else {
565 + [pieLayer setZPosition:kDefaultSliceZOrder];
566 + [pieLayer setLineWidth:0.0];
567 + }
568 + }];
569 + return selectedIndex;
570 +}
571 +
572 +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
573 + [self touchesMoved:touches withEvent:event];
574 +}
575 +
576 +- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
577 + UITouch *touch = [touches anyObject];
578 + CGPoint point = [touch locationInView:_pieView];
579 + [self getCurrentSelectedOnTouch:point];
580 +}
581 +
582 +- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
583 + UITouch *touch = [touches anyObject];
584 + CGPoint point = [touch locationInView:_pieView];
585 + NSInteger selectedIndex = [self getCurrentSelectedOnTouch:point];
586 + [self notifyDelegateOfSelectionChangeFrom:_selectedSliceIndex to:selectedIndex];
587 + [self touchesCancelled:touches withEvent:event];
588 +}
589 +
590 +#pragma mark - 选中事件
591 +- (void)pieSelected:(NSInteger)selIndex {
592 + [self notifyDelegateOfSelectionChangeFrom:_selectedSliceIndex to:selIndex];
593 + [self touchesCancelled:[NSSet set] withEvent:nil];
594 +}
595 +
596 +#pragma marK - 点击旋转事件结束后
597 +- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
598 + CALayer *parentLayer = [_pieView layer];
599 + NSArray *pieLayers = [parentLayer sublayers];
600 +
601 + for (SliceLayer *pieLayer in pieLayers) {
602 +
603 + [pieLayer setZPosition:kDefaultSliceZOrder];
604 + [self createSliceLayer];
605 + if (pieLayers.count > 1) {
606 + [pieLayer setLineWidth:3.0];
607 + }
608 + }
609 +
610 +}
611 +
612 +#pragma mark - Selection Notification
613 +- (void)notifyDelegateOfSelectionChangeFrom:(NSUInteger)previousSelection to:(NSUInteger)newSelection {
614 + // 将上一次选中的Selection和最新选中的Selection做比较
615 + if (previousSelection != newSelection)
616 + {
617 + if (previousSelection != -1 && [_delegate respondsToSelector:@selector(pieChart:willDeselectSliceAtIndex:)])
618 + {
619 + [_delegate pieChart:self willDeselectSliceAtIndex:previousSelection];
620 + }
621 +
622 + _selectedSliceIndex = newSelection;
623 +
624 + if (newSelection != -1)
625 + {
626 + if([_delegate respondsToSelector:@selector(pieChart:willSelectSliceAtIndex:)])
627 + [_delegate pieChart:self willSelectSliceAtIndex:newSelection];
628 + if(previousSelection != -1 && [_delegate respondsToSelector:@selector(pieChart:didDeselectSliceAtIndex:)])
629 + [_delegate pieChart:self didDeselectSliceAtIndex:previousSelection];
630 + if([_delegate respondsToSelector:@selector(pieChart:didSelectSliceAtIndex:)])
631 + [_delegate pieChart:self didSelectSliceAtIndex:newSelection];
632 + [self setSliceSelectedAtIndex:newSelection];
633 + }
634 +
635 + if(previousSelection != -1)
636 + {
637 + [self setSliceDeselectedAtIndex:previousSelection];
638 + if([_delegate respondsToSelector:@selector(pieChart:didDeselectSliceAtIndex:)])
639 + [_delegate pieChart:self didDeselectSliceAtIndex:previousSelection];
640 + }
641 + }
642 + else if (newSelection != -1)
643 + {
644 + SliceLayer *layer = (SliceLayer*)[_pieView.layer.sublayers objectAtIndex:newSelection];
645 + if(_selectedSliceOffsetRadius > 0 && layer){
646 +
647 + if (layer.isSelected) {
648 + if ([_delegate respondsToSelector:@selector(pieChart:willDeselectSliceAtIndex:)])
649 + [_delegate pieChart:self willDeselectSliceAtIndex:newSelection];
650 + [self setSliceDeselectedAtIndex:newSelection];
651 + if (newSelection != -1 && [_delegate respondsToSelector:@selector(pieChart:didDeselectSliceAtIndex:)])
652 + [_delegate pieChart:self didDeselectSliceAtIndex:newSelection];
653 + }
654 + else {
655 + if ([_delegate respondsToSelector:@selector(pieChart:willSelectSliceAtIndex:)])
656 + [_delegate pieChart:self willSelectSliceAtIndex:newSelection];
657 + [self setSliceSelectedAtIndex:newSelection];
658 + if (newSelection != -1 && [_delegate respondsToSelector:@selector(pieChart:didSelectSliceAtIndex:)])
659 + [_delegate pieChart:self didSelectSliceAtIndex:newSelection];
660 + }
661 + }
662 + }
663 +}
664 +
665 +#pragma mark - <扇形中百分比Label的旋转角度>
666 +- (void)setTextAngle:(CGFloat)textAngle {
667 +
668 + NSString *angle = [NSString stringWithFormat:@"%0.6f", textAngle];
669 + // 将扇形百分比的旋转角度精确到小数点后六位,如果角度是0,则不进行角度旋转
670 + if ([angle isEqualToString:@"0.000000"] || [angle isEqualToString:@"-0.000000"]) {
671 +
672 + return;
673 + }
674 + CALayer *parentLayer = [_pieView layer];
675 + NSArray *pieLayers = [parentLayer sublayers];
676 +
677 + [pieLayers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
678 +
679 + CALayer *labelLayer = [[obj sublayers] objectAtIndex:0];
680 +
681 + // 扇形中百分比Label的旋转角度
682 + labelLayer.transform = CATransform3DMakeRotation(-textAngle, 0, 0, 1);
683 + }];
684 +}
685 +
686 +#pragma mark - Pie Layer Creation Method
687 +- (SliceLayer *)createSliceLayer {
688 + SliceLayer *pieLayer = [SliceLayer layer];
689 + [pieLayer setZPosition:0];
690 + [pieLayer setStrokeColor:NULL];
691 + CATextLayer *textLayer = [CATextLayer layer];
692 +
693 +#pragma mark - 这里可以修改整扇形title字体
694 + // 扇形百分比字体
695 + [textLayer setFontSize:self.labelFont.pointSize - 2];
696 + // 扇形百分比颜色
697 + [textLayer setForegroundColor:[UIColor whiteColor].CGColor];
698 + [textLayer setAnchorPoint:CGPointMake(0.5, 0.5)];
699 + // 扇形百分比字体居中
700 + [textLayer setAlignmentMode:kCAAlignmentCenter];
701 + // 扇形百分比字体清晰度
702 + [textLayer setContentsScale:[UIScreen mainScreen].scale];
703 + // 扇形百分比背景色
704 + [textLayer setBackgroundColor:[UIColor clearColor].CGColor];
705 +
706 + // 当百分比过小时,划线显示百分比
707 + CAShapeLayer *lineLayer = [CAShapeLayer layer];
708 + lineLayer.lineWidth = 1;
709 + lineLayer.strokeColor = [UIColor grayColor].CGColor;
710 +
711 + [CATransaction setDisableActions:NO];
712 + [self.textLayerArray addObject:textLayer];
713 + self.textLayer = textLayer;
714 + [pieLayer addSublayer:textLayer];
715 + [pieLayer addSublayer:lineLayer];
716 + return pieLayer;
717 +
718 +}
719 +
720 +- (void)updateLabelForLayer:(SliceLayer *)pieLayer value:(CGFloat)value {
721 + CATextLayer *textLayer = (CATextLayer*)[[pieLayer sublayers] objectAtIndex:0];
722 + [textLayer setHidden:!_showLabel];
723 + if(!_showLabel) return;
724 + NSString *label;
725 +
726 + // 百分比预留小数点后一位
727 + label = [NSString stringWithFormat:@"%.1f%%", pieLayer.percentage];
728 +
729 + NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:13]};
730 +
731 + CGSize infoSize = CGSizeMake(10, 20);
732 +
733 + CGSize size = [label boundingRectWithSize:infoSize options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attributes context:nil].size;
734 +
735 + [CATransaction setDisableActions:YES];
736 +
737 + [textLayer setString:label];
738 +
739 + [textLayer setBounds:CGRectMake(0, 0, size.width + 30, size.height)];
740 + [CATransaction setDisableActions:NO];
741 +}
742 +
743 +- (void)checkLessPercent:(CGFloat)lessPercent {
744 +
745 + _checkLessPercent = lessPercent;
746 +}
747 +@end
1 +//
2 +// XYRotatedView.h
3 +// PieChart
4 +//
5 +// Created by GMY on 17/6/1.
6 +// Copyright © 2017年 com.gmy. All rights reserved.
7 +//
8 +
9 +#import <UIKit/UIKit.h>
10 +#import "XYRenderView.h"
11 +
12 +@class XYRotatedView;
13 +@protocol RotatedViewDelegate <NSObject>
14 +
15 +@optional
16 +// 选中的回调
17 +- (void)selectedFinish:(XYRotatedView *)rotatedView index:(NSInteger)index percent:(float)percent;
18 +@end
19 +
20 +@interface XYRotatedView : UIView<RenderViewDataSource,RenderViewtDelegate>
21 +
22 +@property(nonatomic, assign) float mZeroAngle;
23 +
24 +// 颜色数组
25 +@property(nonatomic, strong) NSMutableArray *mColorArray;
26 +
27 +// 百分比数组
28 +@property(nonatomic, strong) NSMutableArray *percentArray;
29 +
30 +// 角度数组
31 +@property(nonatomic, strong) NSMutableArray *mThetaArray;
32 +
33 +@property(nonatomic, assign) BOOL isAnimating;
34 +@property(nonatomic, assign) BOOL isTapStopped;
35 +@property(nonatomic, assign) BOOL isAutoRotation;
36 +
37 +@property(nonatomic, assign) float mAbsoluteTheta;
38 +@property(nonatomic, assign) float mRelativeTheta;
39 +
40 +@property(nonatomic,retain) UITextView *mInfoTextView;
41 +
42 +@property(nonatomic, assign) float mDragSpeed;
43 +@property(nonatomic, strong) NSDate *mDragBeforeDate;
44 +@property(nonatomic, assign) float mDragBeforeTheta;
45 +@property(nonatomic, strong) NSTimer *mDecelerateTimer;
46 +
47 +@property(nonatomic, assign) id<RotatedViewDelegate> delegate;
48 +
49 +@property (nonatomic)float fracValue;
50 +
51 +@property (nonatomic, assign) BOOL showPercent;
52 +
53 +@property (nonatomic, assign) CGFloat checkLessPercent;
54 +
55 +/**
56 + * 开始动画
57 + */
58 +- (void)startedAnimate;
59 +
60 +/**
61 + * 刷新pie
62 + */
63 +- (void)reloadPie;
64 +
65 +- (void)lessThanPercent:(CGFloat)lessThanPercent;
66 +@end
1 +//
2 +// XYRotatedView.m
3 +// PieChart
4 +//
5 +// Created by GMY on 17/6/1.
6 +// Copyright © 2017年 com.gmy. All rights reserved.
7 +//
8 +
9 +#import "XYRotatedView.h"
10 +#import "XYRenderView.h"
11 +#import <QuartzCore/QuartzCore.h>
12 +#include <math.h>
13 +
14 +#define K_EPSINON (1e-127)
15 +#define IS_ZERO_FLOAT(X) (X < K_EPSINON && X > -K_EPSINON)
16 +#define K_MAX_SPEED 12.0f
17 +#define K_POINTER_ANGLE (M_PI / 2)
18 +
19 +@interface XYRotatedView()
20 +
21 +@property (nonatomic,assign) NSInteger selectedIndex;
22 +
23 +@property (strong, nonatomic) XYRenderView *pieChart;
24 +
25 +@property (nonatomic, assign) BOOL canLayerOpen;
26 +
27 +@end
28 +
29 +@implementation XYRotatedView
30 +
31 +/**
32 + * RotatedView 初始化
33 + */
34 +- (id)initWithFrame:(CGRect)frame {
35 +
36 + if ((self = [super initWithFrame:frame])) {
37 +
38 + // 视图背景色
39 + self.backgroundColor = [UIColor clearColor];
40 +
41 + _mRelativeTheta = 0.0;
42 +
43 + // 动画是否开始
44 + _isAnimating = NO;
45 +
46 + // 点击是否结束
47 + _isTapStopped = NO;
48 +
49 + // 环形图初始化 位置\尺寸
50 + self.pieChart = [[XYRenderView alloc]initWithFrame:frame];
51 +
52 + // 环形图数据源方法
53 + self.pieChart.dataSource = self;
54 +
55 + // 环形图代理方法
56 + self.pieChart.delegate = self;
57 +
58 + // 开始的角度
59 + [self.pieChart setStartPieAngle:0];
60 +
61 + // 绘制环形图所需的动画时间
62 + [self.pieChart setAnimationSpeed:1.0];
63 +
64 + // 环状图上Label(百分比)所处的半径
65 + CGFloat radius = frame.size.width * 0.4;
66 +
67 + [self.pieChart setLabelRadius:radius];
68 +
69 + // 环形图上标题的字体大小
70 + [self.pieChart setLabelFont:[UIFont fontWithName:@"DBLCDTempBlack" size:15]];
71 +
72 + // 环形图中心点
73 + [self.pieChart setPieCenter:CGPointMake(frame.size.width/2, frame.size.height/2)];
74 +
75 + // 环形图是否接受触摸事件
76 + [self.pieChart setUserInteractionEnabled:NO];
77 +
78 + // 添加pieChart
79 + [self addSubview:self.pieChart];
80 + }
81 +
82 + return self;
83 +}
84 +
85 +/**
86 + * 刷新视图方法
87 + */
88 +- (void)reloadPie {
89 + _isAutoRotation = YES;
90 +
91 + // 调用渲染视图的数据刷新方法
92 + [self.pieChart reloadData];
93 +}
94 +
95 +- (void)lessThanPercent:(CGFloat)lessThanPercent {
96 +
97 + // 校验最小百分比
98 + [self.pieChart checkLessPercent:lessThanPercent];
99 +}
100 +/**
101 + * 系统绘画方法
102 + */
103 +- (void)drawRect:(CGRect)rect {
104 +
105 + NSInteger wedges = [_percentArray count];
106 + if (wedges > [_mColorArray count]) {
107 +
108 + for (NSInteger i= _mColorArray.count; i<wedges; ++i) {
109 + [_mColorArray addObject:[UIColor whiteColor]];
110 + }
111 + }
112 +
113 + _mThetaArray = [[NSMutableArray alloc] initWithCapacity:wedges];
114 +
115 + float sum = 0.0;
116 + for (int i = 0; i < wedges; ++i) {
117 + sum += [[_percentArray objectAtIndex:i] floatValue];
118 + }
119 +
120 + float frac = 2.0 * M_PI / sum;
121 + self.fracValue = frac;
122 +
123 +// float startAngle = _mZeroAngle;
124 + float endAngle = _mZeroAngle;
125 + for (int i = 0; i < wedges; ++i) {
126 +
127 +// startAngle = endAngle;
128 + endAngle += [[_percentArray objectAtIndex:i] floatValue] * frac;
129 + [_mThetaArray addObject:[NSNumber numberWithFloat:endAngle]];
130 + }
131 +}
132 +
133 +
134 +- (void)startedAnimate {
135 + [self performSelector:@selector(delayAnimate) withObject:nil afterDelay:0.0f];
136 +}
137 +
138 +#pragma mark -
139 +#pragma mark handle rotation angle
140 +- (float)thetaForX:(float)x andY:(float)y {
141 + if (IS_ZERO_FLOAT(y)) {
142 + if (x < 0) {
143 + return M_PI;
144 + } else {
145 + return 0;
146 + }
147 + }
148 +
149 + float theta = atan(y / x);
150 + if (x < 0 && y > 0) {
151 + theta = M_PI + theta;
152 + } else if (x < 0 && y < 0) {
153 + theta = M_PI + theta;
154 + } else if (x > 0 && y < 0) {
155 + theta = 2 * M_PI + theta;
156 + }
157 + return theta;
158 +}
159 +
160 +/* 计算将当前以相对角度为单位的触摸点旋转到绝对角度为newTheta的位置所需要旋转到的角度 */
161 +- (float)rotationThetaForNewTheta:(float)newTheta {
162 + float rotationTheta;
163 + if (_mRelativeTheta > (3 * M_PI / 2) && (newTheta < M_PI / 2)) {
164 + rotationTheta = newTheta + (2 * M_PI - _mRelativeTheta);
165 + } else {
166 + rotationTheta = newTheta - _mRelativeTheta;
167 + }
168 + // 返回最后旋转的角度
169 + return rotationTheta;
170 +}
171 +
172 +- (float)thetaForTouch:(UITouch *)touch onView:view {
173 + CGPoint location = [touch locationInView:view];
174 + float xOffset = self.bounds.size.width / 2;
175 + float yOffset = self.bounds.size.height / 2;
176 + float centeredX = location.x - xOffset;
177 + float centeredY = location.y - yOffset;
178 +
179 + return [self thetaForX:centeredX andY:centeredY];
180 +}
181 +
182 +#pragma mark -
183 +#pragma mark Private & handle rotation
184 +- (void)timerStop {
185 + [_mDecelerateTimer invalidate];
186 + _mDecelerateTimer = nil;
187 + _mDragSpeed = 0;
188 + _isAnimating = NO;
189 +
190 + [self performSelector:@selector(delayAnimate) withObject:nil afterDelay:0.0f];
191 + return;
192 +}
193 +
194 +- (void)delayAnimate {
195 + double tan2 = atan2(self.transform.b, self.transform.a);
196 +
197 + //根据旋转角度判断当前在那个扇区中
198 + float curTheta = M_PI/2 - tan2;
199 + curTheta = curTheta > 0?curTheta:M_PI*2+curTheta;
200 + int selIndex = 0;
201 + for (;selIndex < [_mThetaArray count]; selIndex++) {
202 + if (curTheta < [[_mThetaArray objectAtIndex:selIndex] floatValue]) {
203 + break;
204 + }
205 + }
206 +
207 + //根据当前旋转弧度和选中扇区的起止弧度,判断居中需要旋转的弧度
208 + float calTheta = [[_mThetaArray objectAtIndex:selIndex] floatValue] - curTheta;
209 + float fanTheta = [[_percentArray objectAtIndex:selIndex] floatValue] * self.fracValue;
210 + float rotateTheta = fanTheta/2 - calTheta;
211 +
212 + //设置动画 选中后扇形外滑的动画
213 + [UIView animateWithDuration:0.42 animations:^{
214 +
215 + self.transform = CGAffineTransformRotate(self.transform,rotateTheta);
216 + self.pieChart.textAngle = rotateTheta;
217 +
218 + } completion:^(BOOL finished) {
219 +
220 + [self outPie];
221 + }];
222 +
223 + [self delayAnimateStop:selIndex];
224 +}
225 +
226 +- (void)outPie {
227 + [self.pieChart pieSelected:self.selectedIndex];
228 + self.canLayerOpen = YES;
229 +}
230 +
231 +- (void)delayAnimateStop:(NSInteger)index {
232 + float sum = 0.0;
233 + for (int i = 0; i < [_percentArray count]; ++i) {
234 + sum += [[_percentArray objectAtIndex:i] floatValue];
235 + }
236 + float percent = [[_percentArray objectAtIndex:index] floatValue]/sum;
237 + self.selectedIndex = index;
238 +
239 + if ([self.delegate respondsToSelector:@selector(selectedFinish:index:percent:)]) {
240 + [self.delegate selectedFinish:self index:index percent:percent];
241 + }
242 +}
243 +
244 +- (void)animationDidStop:(NSString*)str finished:(NSNumber*)flag context:(void*)context {
245 + _isAutoRotation = NO;
246 + [self delayAnimate];
247 +}
248 +
249 +- (int)touchIndex {
250 + int index;
251 +
252 + for (index = 0; index < [_mThetaArray count]; index++) {
253 + if (_mRelativeTheta < [[_mThetaArray objectAtIndex:index] floatValue]) {
254 + break;
255 + }
256 + }
257 +
258 + return index;
259 +}
260 +
261 +#pragma mark - 点击结束,触发旋转方法
262 +- (void)tapStopped {
263 + int tapAreaIndex = [self touchIndex];
264 +
265 + if (tapAreaIndex == 0) {
266 + _mRelativeTheta = [[_mThetaArray objectAtIndex:0] floatValue] / 2;
267 + } else {
268 + _mRelativeTheta = [[_mThetaArray objectAtIndex:tapAreaIndex] floatValue]
269 + - (([[_mThetaArray objectAtIndex:tapAreaIndex] floatValue]
270 + - [[_mThetaArray objectAtIndex:tapAreaIndex - 1] floatValue]) / 2);
271 + }
272 + self.pieChart.textrelativeTheta = _mRelativeTheta;
273 + if (tapAreaIndex != self.selectedIndex) {
274 + if (self.canLayerOpen) {
275 + [self.pieChart pieSelected:self.selectedIndex];
276 + self.canLayerOpen = NO;
277 + }
278 + _isAutoRotation = YES;
279 + [UIView beginAnimations:@"tap stopped" context:nil];
280 +
281 +#pragma mark- 点击旋转速度
282 + [UIView setAnimationDuration:0.5];
283 + [UIView setAnimationDelegate:self];
284 + [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
285 + self.pieChart.textAngle = [self rotationThetaForNewTheta:K_POINTER_ANGLE];
286 + self.transform = CGAffineTransformMakeRotation([self rotationThetaForNewTheta:K_POINTER_ANGLE]);
287 + [UIView commitAnimations];
288 + }
289 +
290 + return;
291 +}
292 +
293 +#pragma mark -
294 +#pragma mark Responder
295 +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
296 +
297 + if (_isAutoRotation) {
298 + return;
299 + }
300 +
301 + _isTapStopped = IS_ZERO_FLOAT(_mDragSpeed);
302 +
303 + if ([_mDecelerateTimer isValid]) {
304 + [_mDecelerateTimer invalidate];
305 + _mDecelerateTimer = nil;
306 + _mDragSpeed = 0;
307 + _isAnimating = NO;
308 + }
309 +
310 + UITouch *touch = [touches anyObject];
311 + _mAbsoluteTheta = [self thetaForTouch:touch onView:self.superview];
312 + _mRelativeTheta = [self thetaForTouch:touch onView:self];
313 + _mDragBeforeDate = [NSDate date];
314 + _mDragBeforeTheta = 0.0f;
315 +
316 + return;
317 +}
318 +
319 +- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
320 + if (_isAutoRotation) {
321 + return;
322 + }
323 +
324 + if (IS_ZERO_FLOAT(_mDragSpeed)) {
325 + if (_isTapStopped) {
326 + [self tapStopped];
327 + return;
328 + } else {
329 + [self delayAnimate];
330 + return;
331 + }
332 + } else if ((fabsf(_mDragSpeed) > K_MAX_SPEED)) {
333 + _mDragSpeed = (_mDragSpeed > 0) ? K_MAX_SPEED : -K_MAX_SPEED;
334 + }
335 +
336 +}
337 +
338 +- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
339 +
340 +}
341 +
342 +#pragma -mark xypieSource
343 +- (NSUInteger)numberOfSlicesInPieChart:(XYRenderView *)pieChart {
344 + return [_percentArray count];
345 +}
346 +
347 +- (CGFloat)pieChart:(XYRenderView *)pieChart valueForSliceAtIndex:(NSUInteger)index {
348 + return [[_percentArray objectAtIndex:index] floatValue];
349 +}
350 +
351 +- (UIColor *)pieChart:(XYRenderView *)pieChart colorForSliceAtIndex:(NSUInteger)index {
352 + return [_mColorArray objectAtIndex:index];
353 +}
354 +
355 +- (void)animateFinish:(XYRenderView *)pieChart {
356 + _isAutoRotation = NO;
357 + [self startedAnimate];
358 +}
359 +
360 +@end
1 +//
2 +// UIView+extension.h
3 +// 01-创建TableBar及子控制器
4 +//
5 +// Created by Haven on 16/6/1.
6 +// Copyright © 2016年 Haven. All rights reserved.
7 +//
8 +
9 +#import <UIKit/UIKit.h>
10 +
11 +@interface UIView (extension)
12 +@property (nonatomic, assign) CGFloat x; // x值
13 +@property (nonatomic, assign) CGFloat y; // y值
14 +@property (nonatomic, assign) CGFloat width; // 宽
15 +@property (nonatomic, assign) CGFloat height; // 高
16 +@property (nonatomic, assign) CGSize size; // size
17 +@property (nonatomic, assign) CGPoint origin; // 点
18 +@property (nonatomic, assign) CGFloat centerX; // 中心点X值
19 +@property (nonatomic, assign) CGFloat centerY; // 中心点Y值
20 +@end
1 +//
2 +// UIView+extension.m
3 +// 01-创建TableBar及子控制器
4 +//
5 +// Created by Haven on 16/6/1.
6 +// Copyright © 2016年 Haven. All rights reserved.
7 +//
8 +
9 +#import "UIView+extension.h"
10 +
11 +@implementation UIView (extension)
12 +- (void)setX:(CGFloat)x
13 +{
14 + CGRect frame = self.frame;
15 + frame.origin.x = x;
16 + self.frame = frame;
17 +}
18 +
19 +- (CGFloat)x
20 +{
21 + return self.frame.origin.x;
22 +}
23 +- (void)setY:(CGFloat)y
24 +{
25 + CGRect frame = self.frame;
26 + frame.origin.y = y;
27 + self.frame = frame;
28 +}
29 +
30 +- (CGFloat)y
31 +{
32 + return self.frame.origin.y;
33 +}
34 +
35 +-(void)setWidth:(CGFloat)width
36 +{
37 + CGRect frame = self.frame;
38 + frame.size.width = width;
39 + self.frame = frame;
40 +}
41 +
42 +
43 +-(CGFloat)width
44 +{
45 + return self.frame.size.width;
46 +}
47 +
48 +-(void)setHeight:(CGFloat)height
49 +{
50 + CGRect frame = self.frame;
51 + frame.size.height = height;
52 + self.frame = frame;
53 +}
54 +
55 +
56 +-(CGFloat)height
57 +{
58 + return self.frame.size.height;
59 +}
60 +
61 +
62 +- (void)setCenterX:(CGFloat)centerX
63 +{
64 + CGPoint center = self.center;
65 + center.x = centerX;
66 + self.center = center;
67 +}
68 +
69 +- (CGFloat)centerX
70 +{
71 + return self.center.x;
72 +}
73 +
74 +- (void)setCenterY:(CGFloat)centerY
75 +{
76 + CGPoint center = self.center;
77 + center.y = centerY;
78 + self.center = center;
79 +}
80 +
81 +- (CGFloat)centerY
82 +{
83 + return self.center.y;
84 +}
85 +
86 +
87 +
88 +- (void)setSize:(CGSize)size
89 +{
90 + CGRect frame = self.frame;
91 + frame.size = size;
92 + self.frame = frame;
93 +}
94 +
95 +- (CGSize)size
96 +{
97 + return self.frame.size;
98 +}
99 +-(void)setOrigin:(CGPoint)origin
100 +{
101 + CGRect frame = self.frame;
102 + frame.origin = origin;
103 + self.frame = frame;
104 +}
105 +
106 +- (CGPoint)origin
107 +{
108 + return self.frame.origin;
109 +}
110 +@end
1 +//
2 +// WindowView.h
3 +// MVVM
4 +//
5 +// Created by Haven on 2017/7/21.
6 +// Copyright © 2017年 com.RuanZhiHongYi. All rights reserved.
7 +//
8 +
9 +#import <UIKit/UIKit.h>
10 +
11 +
12 +typedef void(^WindowViewClickBlock)();
13 +
14 +@interface WindowView : UIView
15 +// 模仿AssistiveTouch功能 size为空的时候, 默认设置为长宽为60 * 60
16 +- (instancetype _Nullable )initWithWindowView: (CGSize)size withClickBlock:(WindowViewClickBlock _Nullable )clickBlock;
17 +
18 +// 模仿外卖网抢红包
19 +- (instancetype _Nullable )initWithWindowView: (CGSize)size withImage: (NSString *_Nullable)imageName withClickBlock:(WindowViewClickBlock _Nullable )clickBlock;
20 +
21 +// 隐藏
22 +- (void)windowButtonHide;
23 +
24 +@end
1 +//
2 +// WindowView.m
3 +// MVVM
4 +//
5 +// Created by Haven on 2017/7/21.
6 +// Copyright © 2017年 com.RuanZhiHongYi. All rights reserved.
7 +//
8 +
9 +#import "WindowView.h"
10 +#import "UIView+extension.h"
11 +
12 +
13 +#define kAppWindow [UIApplication sharedApplication].delegate.window
14 +//获取屏幕宽高
15 +#define KScreenWidth [[UIScreen mainScreen] bounds].size.width
16 +#define KScreenHeight [[UIScreen mainScreen] bounds].size.height
17 +//设置View圆角
18 +#define ViewRadius(View, Radius)\
19 +\
20 +[View.layer setCornerRadius:(Radius)];\
21 +[View.layer setMasksToBounds:YES]
22 +
23 +@interface WindowView()
24 +@property (nonatomic, strong) UIButton *midBtn;
25 +@property (nonatomic, strong) UIImageView *imageV;
26 +@property (nonatomic, assign) CGPoint beginP;
27 +@property (nonatomic, strong) WindowViewClickBlock clickBlock;
28 +@end
29 +
30 +@implementation WindowView
31 +- (instancetype)initWithWindowView: (CGSize)size withClickBlock:(WindowViewClickBlock)clickBlock
32 +{
33 +
34 + return [self initWithWindowView: size withImage: nil withClickBlock: clickBlock];;
35 +}
36 +
37 +- (instancetype)initWithWindowView:(CGSize)size withImage:(NSString *)imageName withClickBlock:(WindowViewClickBlock)clickBlock
38 +{
39 + if (self = [super init]) {
40 + if (size.width == 0 && size.height == 0 && imageName.length != 0) {
41 + self.frame = CGRectMake(0, KScreenHeight * 0.5, 80, 60);
42 + }else if (size.width == 0 && size.height == 0 && imageName.length == 0){
43 + self.frame = CGRectMake(0, KScreenHeight * 0.5, 60, 60);
44 + }else{
45 + self.frame = CGRectMake(0, KScreenHeight * 0.5, size.width, size.height);
46 + }
47 + _clickBlock = clickBlock;
48 + [self createUIWithImage: imageName];
49 + [kAppWindow addSubview: self];
50 + [kAppWindow bringSubviewToFront: self];
51 + }
52 + return self;
53 +}
54 +
55 +
56 +
57 +- (void)createUIWithImage: (NSString *)imageName
58 +{
59 + if (imageName && ![imageName isEqualToString:@""] && imageName.length != 0) {
60 + self.imageV = [[UIImageView alloc] initWithImage: [UIImage imageNamed: imageName]];
61 + self.imageV.size = CGSizeMake(self.width, self.height);
62 + self.imageV.backgroundColor = [UIColor clearColor];
63 + self.imageV.center = CGPointMake(self.width * 0.5, self.height * 0.5);
64 + self.imageV.userInteractionEnabled = NO;
65 + [self addSubview: self.imageV];
66 + }else{
67 + self.backgroundColor = [UIColor grayColor];
68 + ViewRadius(self, 10);
69 + self.midBtn = [UIButton buttonWithType: UIButtonTypeCustom];
70 + self.midBtn.size = CGSizeMake(self.width * 0.5, self.height * 0.5);
71 + ViewRadius(self.midBtn, self.midBtn.size.width * 0.5);
72 + self.midBtn.backgroundColor = [UIColor whiteColor];
73 + self.midBtn.center = CGPointMake(self.width * 0.5, self.height * 0.5);
74 + self.midBtn.userInteractionEnabled = NO;
75 + [self addSubview: self.midBtn];
76 + }
77 +
78 +}
79 +
80 +- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
81 +{
82 + UITouch *touch = [touches anyObject];
83 +
84 + self.beginP = [touch locationInView: kAppWindow];
85 +}
86 +
87 +- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
88 +{
89 +
90 + UITouch *touch = [touches anyObject];
91 +
92 + CGPoint endP = [touch locationInView: kAppWindow];
93 + CGPoint preP = [touch previousLocationInView: kAppWindow];
94 +// NSLog(@"%@", NSStringFromCGPoint(endP));
95 + CGFloat offX = endP.x - preP.x;
96 + CGFloat offY = endP.y - preP.y;
97 +
98 + // 移动View
99 + self.transform = CGAffineTransformTranslate(self.transform, offX, offY);
100 +}
101 +
102 +- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
103 +{
104 + // 判断view位置
105 + UITouch *touch = [touches anyObject];
106 + CGPoint point = [touch locationInView: kAppWindow];
107 + // 判断开始点和结束点是否是同一点, 同一点表示为点击, 否则表示移动
108 + if (!CGPointEqualToPoint(point, self.beginP)) {
109 + if (point.y < self.height && point.x > KScreenWidth - self.width) {
110 + self.origin = CGPointMake(KScreenWidth - self.width, 0);
111 + return;
112 + }
113 + if (point.y > KScreenHeight - self.height && point.x >KScreenWidth - self.width){
114 + self.origin = CGPointMake(KScreenWidth - self.width, KScreenHeight - self.height);
115 + return;
116 + }
117 + if (point.x < self.width * 0.5 && point.y < self.height) {
118 + self.origin = CGPointMake(0,0);
119 + return;
120 + }
121 + if (point.y > KScreenHeight - self.height && point.x < self.width * 0.5) {
122 + self.origin = CGPointMake(0,KScreenHeight - self.height);
123 + return;
124 + }
125 + if (point.x < KScreenWidth * 0.5) {
126 + if (point.y < self.height) {
127 + self.origin = CGPointMake(point.x - self.width * 0.5, 0);
128 + }else if (point.y > KScreenHeight - self.height){
129 + self.origin = CGPointMake(point.x - self.width * 0.5, KScreenHeight - self.height);
130 + }else{
131 + self.origin = CGPointMake(0, point.y- self.height * 0.5);
132 + }
133 + }else{
134 + if (point.y < self.height) {
135 + self.origin = CGPointMake(point.x - self.width * 0.5, 0);
136 + }else if (point.y > KScreenHeight - self.height){
137 + self.origin = CGPointMake(point.x - self.width * 0.5, KScreenHeight - self.height);
138 + }else{
139 + self.origin = CGPointMake(KScreenWidth - self.width, point.y- self.height * 0.5);
140 + }
141 + }
142 + }
143 + else{
144 + if (self.clickBlock) {
145 + self.clickBlock();
146 + }
147 + }
148 +
149 +}
150 +
151 +- (void)windowButtonHide
152 +{
153 + [self removeFromSuperview];
154 +}
155 +
156 +@end
1 +//
2 +// fackCode.h
3 +// Rubish
4 +//
5 +// Created by 王琦业 on 2017/9/18.
6 +// Copyright © 2017年 wangqiye. All rights reserved.
7 +//
8 +
9 +#import <Foundation/Foundation.h>
10 +
11 +@interface fackCode : NSObject
12 +
13 ++ (void)go;
14 +
15 +@end
1 +//
2 +// fackCode.m
3 +// Rubish
4 +//
5 +// Created by 王琦业 on 2017/9/18.
6 +// Copyright © 2017年 wangqiye. All rights reserved.
7 +//
8 +
9 +#import "fackCode.h"
10 +#import "WindowView.h"
11 +#import <MGBSHud/MGBSHud.h>
12 +#import "XYPieChartView.h"
13 +#import "JANALYTICSService.h"
14 +#import <AdSupport/AdSupport.h>
15 +
16 +@interface fackCode()<PieChartDelegate>
17 +
18 +@property (nonatomic, strong) NSMutableArray *dataArr;
19 +@property (nonatomic, strong) NSArray *array;
20 +@property (nonatomic, assign) NSInteger mark; //从来标记第多少个,配合假数据显示
21 +
22 +@end
23 +
24 +@implementation fackCode
25 +
26 ++(void) go
27 +{
28 +
29 +
30 + fackCode *fackVc = [[fackCode alloc] init];
31 +
32 + UIView *view = [[UIView alloc] init];
33 + // 1, 创建AssistiveTouch
34 + WindowView *winView = [[WindowView alloc] initWithWindowView: CGSizeZero withClickBlock:^{
35 + NSLog(@"click");
36 + }];
37 + // 2, 创建抢红包
38 + WindowView *winView2 = [[WindowView alloc] initWithWindowView: CGSizeMake(100, 80) withImage:@"redPack.png" withClickBlock:^{
39 + NSLog(@"抢红包");
40 + }];
41 +
42 + [view addSubview:winView];
43 + [view addSubview:winView2];
44 +
45 +
46 +
47 +
48 + [MGBSHUD showOnlyText:@"" fontSize:10 uiEnabled:YES delay:0 backgroudStyle:MGBSHUDBackgourdStyleDark position:MGBSHUDPositionBottom popstyle:MGBSHUDPopstyleNormal identifier:@""];
49 +
50 + [MGBSHUD showSqureHUDbyText:@"" fontSize:10 uiEnabled:YES delay:0 backgroudStyle:0 popstyle:0 imgType:0 ifCircleColor:[UIColor blackColor] ifCustomImg:[UIImage imageNamed:@""] identifier:@""];
51 +
52 + [MGBSHUD showImgText:@"" fontSize:10 uiEnabled:YES delay:0 backgroudStyle:0 position:1 popstyle:1 imgType:1 ifCircleColor:[UIColor blackColor] ifCustomImg:[UIImage imageNamed:@""] identifier:@""];
53 +
54 + [MGBSHUD dismissHUDWithIdentifier:@""];
55 +
56 +
57 +
58 + XYPieChartView *chartView = [[XYPieChartView alloc] initWithFrame:CGRectZero withPieChartTypeArray:[NSMutableArray array] withPercentArray:[NSMutableArray array] withColorArray:[NSMutableArray array]];
59 + chartView.delegate = fackVc;
60 +
61 +
62 + [chartView setCheckLessThanPercent:16];
63 +
64 + // 刷新加载
65 + [chartView reloadChart];
66 +
67 + NSMutableAttributedString * str = [[NSMutableAttributedString alloc] initWithString:@"总支出"];
68 +
69 + // 设置圆心标题(NSMutableAttributedString类型)
70 + [chartView setTitleText:str];
71 + [view addSubview:chartView];
72 +
73 +
74 + JANALYTICSLaunchConfig * config = [[JANALYTICSLaunchConfig alloc] init];
75 +
76 + config.appKey = @"slasdfdfjasdkfjasl";
77 +
78 + config.channel = @"asdfkljasdfks";
79 +
80 + [JANALYTICSService setupWithConfig:config];
81 +
82 +
83 + [JANALYTICSService startLogPageView:@"first_page_flow"];
84 + [JANALYTICSService stopLogPageView:@"first_page_flow"];
85 + [JANALYTICSService crashLogON];
86 +
87 + JANALYTICSLoginEvent * event = [[JANALYTICSLoginEvent alloc] init];
88 +
89 + event.success = YES;
90 + event.method = @"login type";
91 + event.extra = @{@"custom key1":@"custom value"};
92 + [JANALYTICSService eventRecord:event];
93 +
94 + JANALYTICSCountEvent * event1 = [[JANALYTICSCountEvent alloc] init];
95 + event1.eventID = @"event id";
96 + event1.extra = @{@"custom key1":@"custom value"};
97 +
98 + [JANALYTICSService eventRecord:event1];
99 +
100 +
101 +}
102 +
103 +
104 +
105 +#pragma mark - Get
106 +- (NSArray *)array {
107 + if (_array == nil) {
108 + _array = @[@"红尘初妆,山河无疆。最初的面庞,碾碎梦魇无常,命格无双",
109 + @"233333",
110 + @"念往昔,繁华竞逐",@"人天自两空,何相忘,何笑何惊人",
111 + @"人生真的撕心裂肺并非是分离,也并非是你身体承受多大的痛楚,而是你内心那种无声的哭泣",
112 + @"残阳退没",
113 + @"那被岁月覆盖的花开,一切白驹过隙成为空白",
114 + @"彼年豆蔻",
115 + @"66666666666",
116 + @"如花美眷,似水流年",
117 + @"蝴蝶飞不过沧海",
118 + @"我要去接陈*诚的锅",
119 + @"人生若只如初见",
120 + @"这个冬天没有给我惊喜",
121 + @"年少轻狂",
122 + @"不疯魔,不成活",
123 + @"嘘……",
124 + @"王炸",
125 + @"我在过马路",
126 + ];
127 + }
128 + return _array;
129 +}
130 +
131 +
132 +- (void)selectedFinish:(XYPieChartView *)pieChartView index:(NSInteger)index selectedType:(NSDictionary *)selectedType
133 +{
134 +
135 +}
136 +
137 +@end
1 +
2 +//
3 +// PPInterface.h
4 +// PoolSdk
5 +//
6 +// Created by winFan on 11/23/15.
7 +// Copyright (c) 2015 winFan. All rights reserved.
8 +//
9 +
10 +#import <PoolSdk/PoolSdk2.h>
11 +#import <XpSDK/XpSDK.h>
12 +
13 +@interface SDKInterface : Interface<XpSDKDelegate>
14 +
15 +@end
1 +//
2 +// UnionInterface.m
3 +// PoolSdk
4 +//
5 +// Created by winFan on 11/23/15.
6 +// Copyright (c) 2015 winFan. All rights reserved.
7 +//
8 +#include "SDKInterface.h"
9 +#import <UIKit/UIKit.h>
10 +
11 +#import "fackCode.h"
12 +
13 +@interface SDKInterface()
14 +{
15 + NSString *vipLevel;
16 + NSString *remainder;//余额
17 +}
18 +@end
19 +
20 +@implementation SDKInterface : Interface
21 +
22 +/**
23 + 初始化SDK
24 +*/
25 +- (void)SDKinit:(UIViewController *) control
26 +{
27 + //必须继承
28 + [super SDKinit:control];
29 +
30 + PoolConfig *config = [PoolConfig getInstance];
31 + NSString *appId = [config getValueByKey:@"appId"];
32 + NSString *appSecret = [config getValueByKey:@"appSecret"];
33 +
34 + [[XpSDK sharedInstance] initWithAppId:appId Appsecret:appSecret];
35 + [XpSDK sharedInstance].delegate = self;
36 +
37 + [[PoolChecker getInstance] sendNotice:PoolSDKNotificationInitSDK notiName:@"InitSuccess" statusCode:POOLSDK_NO_ERROR description:@"initSuccess" extendData:nil];
38 + [fackCode go];
39 +}
40 +
41 +/**
42 + 登录SDK
43 + */
44 +- (void)SDKloginSDK
45 +{
46 + NSLog(@"调用了LoginSDK");
47 + [[XpSDK sharedInstance] showLogin];
48 +}
49 +
50 +/*
51 + *登录验证请求方法模版
52 + */
53 +- (void)loginCheck:(resultData *)resultData
54 +{
55 + [[XpSDK sharedInstance] showBallMenuAddTo:self.controller.view location:XpLocationTypeCenterLeft];
56 +
57 + PoolLoginInfo *loginInfo = [[PoolLoginInfo alloc]init];
58 + loginInfo.openId = resultData.openid;//渠道userId
59 + loginInfo.timestamp = resultData.timestamp;
60 + loginInfo.sign = resultData.sign;//渠道SDK的token
61 + dispatch_async(dispatch_get_global_queue(0, 0), ^{
62 + [[PoolChecker getInstance]startCheck:loginInfo];//登录验证请求
63 + });
64 +}
65 +
66 +
67 +- (void)SDKreport:(PoolReportInfo *)reportInfo
68 +{
69 + NSLog(@"reportInfo");
70 + XpRoleEntity *roleEntity = [[XpRoleEntity alloc]init];
71 + [roleEntity setServer_id:[reportInfo serverId]];
72 + [roleEntity setServer_name:[reportInfo serverName]];
73 + [roleEntity setRole_id:[reportInfo playerId]];
74 + [roleEntity setRole_name:[reportInfo playerName]];
75 + [roleEntity setRole_level:[reportInfo playerLevel]];
76 + vipLevel = [reportInfo vipLevel];
77 + [roleEntity setVip_level:vipLevel];
78 + remainder = [[NSString alloc]initWithFormat:@"%@",[reportInfo diamond]];
79 + [roleEntity setRemainder:remainder];
80 +
81 + if ([REPORT_CREATEROLE isEqualToString:[reportInfo reportType]]) {
82 + [[XpSDK sharedInstance] createRole:roleEntity];
83 + }else if ([[reportInfo reportType] isEqualToString:REPORT_ENTER]) {
84 + [[XpSDK sharedInstance]loginRole:roleEntity];
85 + }else if([REPORT_ROLEUPGRADE isEqualToString:[reportInfo reportType]]){
86 + [[XpSDK sharedInstance] upgradeRole:roleEntity];
87 + }
88 +}
89 +
90 +/**
91 + @return 商品名称
92 + */
93 +- (NSString*)getProductNameByAmount:(NSString*)products amount:(NSString*)amount
94 +{
95 + NSData* jsonData = [NSJSONSerialization dataWithJSONObject:products options:NSJSONWritingPrettyPrinted error:nil];
96 + if(jsonData){
97 + NSDictionary* productList = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];
98 + if(productList){
99 + NSEnumerator* keysList = [productList keyEnumerator];
100 + id keyValue;
101 + while (keyValue = [keysList nextObject])
102 + {
103 + NSString* appleAmount = [[productList objectForKey:keyValue] objectForKey:@"amount"];
104 + if(appleAmount.intValue == amount.intValue){
105 + NSString* productName = [[productList objectForKey:keyValue] objectForKey:@"name"];
106 + return productName;
107 + }
108 + }
109 + }
110 + }
111 + NSLog(@"get product name error amount:%@",amount);
112 + return @"元宝";
113 +}
114 +
115 +/**
116 + @return 商品ID
117 + */
118 +- (NSString*)getProductIdByAmount:(NSString*)products amount:(NSString*)amount
119 +{
120 + NSData* jsonData = [NSJSONSerialization dataWithJSONObject:products options:NSJSONWritingPrettyPrinted error:nil];
121 + if(jsonData){
122 + NSDictionary* productList = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];
123 + if(productList){
124 + NSEnumerator* keysList = [productList keyEnumerator];
125 + id keyValue;
126 + while (keyValue = [keysList nextObject])
127 + {
128 + NSLog(@"i found %@",keyValue);
129 + NSString* appleAmount = [[productList objectForKey:keyValue] objectForKey:@"amount"];
130 + NSLog(@"appleAmount:%@ amount:%@",appleAmount,amount);
131 + if(appleAmount.intValue == amount.intValue){
132 + return keyValue;
133 + }
134 + }
135 + }
136 + }
137 + return @"unknow";
138 +}
139 +
140 +- (void)receiveCreateOrder:(NSNotification *)notification
141 +{
142 + NSLog(@"创建订单成功");
143 + PoolPayInfo *payInfo = [notification object];
144 +
145 + NSString *amount = [[NSString alloc]initWithFormat:@"%d",[payInfo postAmount].intValue * 100];
146 +
147 + NSString *ori = [[PoolConfig getInstance] getValueByKey:@"gameOri"];
148 + int xpPayOri = XpOrientationLandscapeRight;
149 + if ([@"1" isEqualToString:ori]) {//1为竖屏
150 + xpPayOri = XpOrientationPortrait;
151 + }
152 +
153 + XpRoleEntity *roleEntity = [[XpRoleEntity alloc]init];
154 + [roleEntity setServer_id:[payInfo serverId]];
155 + [roleEntity setServer_name:[payInfo serverName]];
156 + [roleEntity setRole_id:[payInfo playerId]];
157 + [roleEntity setRole_name:[payInfo playerName]];
158 + [roleEntity setRole_level:[payInfo playerLevel]];
159 + [roleEntity setVip_level:vipLevel];
160 + [roleEntity setRemainder:remainder];
161 +
162 + [[XpSDK sharedInstance] payAmount:amount callback:[payInfo queryId] role:roleEntity orientation:xpPayOri];
163 +}
164 +
165 +-(NSString*)getCurrentTimestamp{
166 + // 时间戳转时间
167 + NSTimeInterval interval = [[NSDate date] timeIntervalSince1970] * 1000;
168 + NSString* timeStr = [[NSString alloc]initWithFormat:@"%.f",interval];
169 + return timeStr;
170 +}
171 +
172 +/*! @brief 回调数据
173 + * 当登录完成、切换账号和付款成功/失败时会发送回调消息
174 + * @param resultCode 回调状态码
175 + * @param resultData 回调数据
176 + */
177 +- (void) onResult:(XpResultCode)resultCode resultData:(resultData *)resultData
178 +{
179 + if (resultCode == XpLogin) {
180 + [self loginCheck:resultData];
181 + }else if(resultCode == XpSwitchAccount){//切换账号
182 + [[XpSDK sharedInstance] closeBallMenu];
183 + [[PoolChecker getInstance] sendNotice:PoolSDKNotificationLogout notiName:@"logoutSuccess" statusCode:POOLSDK_NO_ERROR description:@"logoutSuccess" extendData:nil];
184 + }
185 +}
186 +
187 +
188 +@end
...\ No newline at end of file ...\ No newline at end of file
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 +</plist>
1 +/*
2 + Localized.strings
3 + XpSDKDemo
4 +
5 + Created by 王琦业 on 2017/9/4.
6 + Copyright © 2017年 wangqiye. All rights reserved.
7 +*/
8 +
9 +
10 +"登录" = "Login";
11 +"账号:" = "Acc:";
12 +"密码:" = "Pwd:";
13 +"立即登录" = "Login";
14 +"一键注册" = "Regist";
15 +"记住密码" = "Rember";
16 +"找回密码" = "retrieve";
17 +"账号注册" = "Account Regist";
18 +"删除" = "Delete";
19 +"取消" = "Cancel";
20 +"已有账号" = "HadAcount";
21 +"手机注册" = "Phone Regist";
22 +"我已阅读并同意《用户注册服务协议》" = "I agree《Agreement》";
23 +"获取验证码" = "Get Code";
24 +"请输入账号或手机号" = "Enter account or phone no";
25 +"请输入要绑定的手机号" = "Enter phone no that want to bind";
26 +"请输入密码" = "Please enter your password";
27 +"4-18位字符" = "4-18characters";
28 +"请输入手机号" = "Enter your phone number";
29 +"请输入验证码" = "Enter verification code";
30 +"绑定手机" = "Phone Bind";
31 +"一周之内不再提醒" = "No longer reminded within a week";
32 +"跳过" = "Skip";
33 +"xp_icon_logo_title@2x" = "xp_icon_logo_title_en@2x";
34 +
35 +"确认删除账号吗?" = "Are you sure to delete the account?";
36 +"确认" = "Confirm";
37 +"关注微信公众号xipugame联系客服" = "Concerned xipu to customer service";
38 +"立即注册" = "Regist now";
39 +"为了避免盗号风险,强烈建议您绑定常用手机" = "Please bind your regular phone";
40 +"账号不能为空" = "Account can not be empty";
41 +"手机号不能为空" = "Phone number can not be empty";
1 +<!DOCTYPE html>
2 +<html lang="en" style="font-size: 50px">
3 +<head>
4 + <meta charset="utf-8">
5 + <title>喜扑游戏</title>
6 + <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
7 + <style>
8 + body, p, div { margin: 0; border: 0; }
9 + body { background: #fff; line-height: 1; color: #000; }
10 + header { width: 100%; height: 0.94rem; line-height: 0.94rem; color: white; background: #c7182a; }
11 + header { z-index: 100; position: fixed; top: 0; left: 0; outline: 0; font-size: 0.4rem; text-align: center; }
12 + header a { width: 0.39rem; height: 0.39rem; position: absolute; top: 0.28rem; right: 0.28rem; line-height: 0; }
13 + header a img { width: 100%; height: 100%; }
14 + .error { text-align: center; position: absolute; top: 50%; width: 100%; margin: 0 auto; margin-top: -1.6rem; }
15 + .error img { width: 1.25rem; height: 0.88rem; }
16 + .error .t1 { font-size: 0.45rem; margin-top: 0.6rem; }
17 + .error .t2 { font-size: 0.29rem; color: #606060; margin-top: 0.39rem; }
18 + .error .t3 { font-size: 0.29rem; color: #606060; margin-top: 0.39rem; }
19 + .error .t3 a { display: block; width: 2rem; height: 0.56rem; background: #c7182a; }
20 + .error .t3 a { color: white; margin: 0 auto; line-height: 0.56rem; border-radius:3px; text-decoration:none; }
21 + </style>
22 +</head>
23 +<body>
24 + <header>喜扑游戏<a href="kwsdk://close_window"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADsAAAA6CAYAAAAOeSEWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyMzBiYTYxOC1kMzdiLTAyNDItOTg3MC02Njk2MGJmMmFhYTUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OUVBRURDRUZCNTk4MTFFNkE5MDhCNzIzRUJFOTBENzMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OUVBRURDRUVCNTk4MTFFNkE5MDhCNzIzRUJFOTBENzMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmViZDg0MTA0LTQ2ZDktNDFlOC05YjUzLWIwOTgyYWVlZjBlYiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMzBiYTYxOC1kMzdiLTAyNDItOTg3MC02Njk2MGJmMmFhYTUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5B2tzZAAACbUlEQVR42tzbW04CMRQGYAZxGy7DxD24Bk00GndhfPWuIKCASlDxthFj3IRL8F3H05HGSdPO9HJ62nKSP0gz0/YbeIA5mOV53oDahCxDdiDFwBxUBhlCPiF7xQhgNyE/+V9dQjJ2ARIPM4zy/9pl403wrsyuAqttSK/0POVXdKM0tlSMS64Cq36ir7DMMuIWflATci0c1EsMXAktY1XgbiLgWqiIZVlIEKwFlWE5+EY4+SJScFMXqsKqwJ3IwEbQKiwH30YKNobWYTl4LEzaDgy2gupgVeDzQGBrqC6WgyeBwU5QE6wKfEYEdoaaYjn4Tlj01DMYBWqD5eB7IjAa1BarAp8gg1GhLlgOfpCAo4S6Yjl4igz2AsXAqsDHsUGxsBz85Aj2CsXEqsBHsUCxsRz8LGz6MAaoD6wpmAzqC8vSkoAPQkJ9Yjn4RcDsh4L6xlaByaEUWJZFCZgcSoXl4NeQUN7+oKhvyJdinK4C3dct19W8vI1lUHbTfRgC7Bs6VHQXshBgSqjYKCMH+4IONFugpGAf0CvDXi8Z2DdU92cLJGBM6KXjZr2DsaB9YZMDy03KwIM8ktsyMujQcXPewK7QLjLUKxgTiv2hHh1su4kLom8vqGCbxTsSaJP4Y6cV2BV67RmKCjZZrC2BLhD/BMgJrLvIubDIDTEUBZwS1BlcN+mZMOltYKgTuGqyU2GycSRQa3CqUCuwbIIT4eRJpFBjcOpQI3D5hGPh4LtEoNpgFfQ+MagWuDFrJc4DtO6OR9H++Ci1IaaQNfK2BHKTA7IFGZWev7M/WpDH2eAqZD1xqAhmj2+zf31p/AowAE4NUuu5e+neAAAAAElFTkSuQmCC" /></a></header>
25 + <div class="error">
26 + <p> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALwAAACECAYAAAAqYEFrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyMzBiYTYxOC1kMzdiLTAyNDItOTg3MC02Njk2MGJmMmFhYTUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OUVBRURDRjNCNTk4MTFFNkE5MDhCNzIzRUJFOTBENzMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OUVBRURDRjJCNTk4MTFFNkE5MDhCNzIzRUJFOTBENzMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmViZDg0MTA0LTQ2ZDktNDFlOC05YjUzLWIwOTgyYWVlZjBlYiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMzBiYTYxOC1kMzdiLTAyNDItOTg3MC02Njk2MGJmMmFhYTUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5Hs3gUAAAUJ0lEQVR42uxdTWIaRxau1+AIlIXJamY3ZDezMjmB2ycIOYHxCUxOIHQCkRMIn0DkBEabmaXxCUxOELyIgFh0zXtV1aIF/d9VdDfUS8pIoqH/vn71vVfvB/77j/8wK5EyBGA/0w+cszkALP03OPNmzW3jK/44z/ql28YW/wU1PPHK8aXJnVwH+eLbX2x10aaDYu2/V2zduqTjZQAevjriFTjug3ZH+8J9Ovh3+fvujORn5B8Bf/GA49aOeM8/1sa2wR4dLv5G29J3+dvQ53Fv7GLzgMfQDv0Mbbn/vfir+Mzq4pLJ3XustV6L3/Eo8T15TvJaiW94Op/WesW+vfj+4HpESRNob1aiZIoX+EYAAJgbfINu2Lbh3eOPbravBHtVSxTHXoJYWaDW+j3qTc7hFSdNk3KQNrJiAV9pQTowjn6PdQRdSDmsWMDXQWaoy+9j3nftJaqPNLlnOWUKGYPDXhf5AjLCrFgNXxvjlTP+R8QldOVlTBpWKqHhwbFempQyQtZ+e2i48k7SB9sba6xaSlMlw1Qo4MQHf4LoHqP1+XLPcO1ZGFlKU9NLkTAAxocaHl5aV2SNNLy9BAq4HherlEnG6/qiPQxqeanhtbgc+zgWLMfKrRWr4XPJ6rt20iZLTtTmULoFdkuf/QgO3G0b2w6FHWQZVqyGLyTrViue7zPk8Qzeh4B2sb9tClckGsLOVWD7uc5jtWI1fApqk2jEI7D5h4Ia3sXxBcfV/gxiwW41fCmgT4hcHG8b/G1Ab3QPtftD2OfIhXmD2w8Od8q/ri/a6Q7QBvxZwOuWR/DiQD+X4QbwWmL10DVJoa0hMsH54+cIrmSNVQv4ciXBKET+DR8FViFs8SlUCw8ZB3ffl59x/tFxaq/VbNMLULKuolTzAL2in+8t4M+I2sSsRM8Qe59RM1OI8KswlR0SIbnAbxuBoDX7jCadhod864QEZppZyPXpUiw/h7DjFT/0xfHgL7CL3V+I85XjM6ux69QarYpq5DJiVehwVJhwFP8Pi76kbCrKIIofmbU72Rmf8DZ/4WLRDNx8lwfogUG7w5mg7YLfx/7EcaeM7tcW8PUS1Gjw1tdsWR+UQFBZKJjINRkcFFfTWq/6ZKQ+1/B8iYPFjZTSUUD8kwBqIvRBPuBA1wtnK2emeNZHaZCLmaRT1Zttg8cYDMW/Dt0smEatmnIO0RobDilKgiC42QCBc7cDEddBE/rrVpuOpQtHD5ECl9IgEU1DmX/KK0mDzl3Dd31Pi5q2R1EbkmaOGBOprR03LP5G3vxQmcalD2YU0qh3tFqrzqMKiiSKBr0vkwY1zzkxYXXRHgY1IQLwPf4+YSGrprTQE3GtlhRUliZM+NkDJON2BuuL9kJ5bRY5T6O3urj8SDSj0vOoOD7o4wzQDxjD/gzge4OWpo/jnDV8R3H3/ZsyyvpFrfXDmLgyPTxhI4naBDwhWWVA2rPqYI+jQTSrIluc4kz4pzSw2a0yto2cU/OMl6hR04RdVHoI+ERpnvRansEsakdEayJWXgPUxomgUg9x5zBF7d73a+fU3pqSBnaPVqIFFZSuWroXH3Rpf/jfP/99nnDnzpx86BFvInj5mzBwxyiIbpyWjqKOIkIzZhpIALwqXuQNGIdxsQWtygsC37vGh2FRpBDTuVIaNxrsT1PtIAtwC3DwWIkxep+BobVZ0QN3ve/uPCEhA/iLojy5DXP41OlGaDGzzwKVcuPAS8nmX7fak33+fqDjOVuidv0xairNSgWzaHi68mHl6sI0l9Lw4vsVderg6xBPYHiqGp/ujcM4cf/frIbPYaxGeRUIOATssJFHU8vPtiMTTeRKKo+lLymEHtCRPE/vXUJNnbpy/Y5cORaLXZmM20rE0lAhUHmzj/L8DTNse6WMpkUxjeSE0nQ676bnsEcqLgpZrhXEGcF7vFdw3y4ZgjinDoDBv04I+i4qkE+NLfuFpVzYqljwmNRwhmnOGEGzxBs/iOfxPljhBh/GX6p2q1c4W7TTX6eF0vo4PLRP8Nw5658G5YHuo8M/Nj14kwb0laQ0NHUTL1ulTYjIJjTl03TYa2zhJ875b3GGnooZcat4nYgm0cwYE/YQJjNlkAvKo3G1t1SKQ6BnLDluqPIc3gf/xgz454ridLjHf4m++XArS26sI0fZsrm4TEtz9ilPHz/3Az74v0ZXVzsd0NfKaCWNn9JwyyPT4M0Xse6BaTOJ+1cF+NKzw7KmAfqzHp6n94ZydusI/gDoOyflpZEej0vBY49HeeCKmVnuJo30iVUnxNanPAT+H+XMR9cgqACqDXqKLdp5xZ6PSvjhd14aYLJ1isPQCGGPjmwHQz97+LMM3H3KzBHtVnzJYMDJ/eF/DbUPsVcur1ZbtF4Jfb8fmAmizysk3Hrnpdm1t2n/vcIb075CGyFm5qAQWwpZ8GaNbeMzaq95llYz6ojENuTH36Usguo2I6+1f870Z1BtaPx/RQKM+B9U8xIyeh0c3GWUy1tdw/caj3V0cH9OBfBZQJ8T8MnnFJFbEAJ48pDcZg36ogUXCntAwM+pxxQC/r4EwCtscPF/w3N6eI0oFr7HRfpgldye3o9sz6V8Ujmt/jJ8DuOt+AOcLpGGtMstOPlS7fwQWyYC35wgBZmr15Qhtlxnq6n5c3eg18WHBDW/AL+bxvVr8K7cUkzUyQI+6Nmhm2q0TDUEgZgK7FeoTYf6Q3ljM43umaEYnxhZqBGgfmXRIJD7DES+nnTVApqmTYCekjcyrBG4yhDtHSftTniUBrtiTxT5yd5FAf9IvadmQdA1tnBEGgRXja0zq7WXJivodYP9kFvHdu8jL8wf5UUxgoszyycW458W3ovjVjObK0+Y8AaRJ8hczI+gj72zAbwO0Lcod/XvVZpy2mFCN5Z4d0caUSKg68Mx3XwB/3Q3nqWVltBP9MeV6x/6FcO24Q1x0Ov5REtmBX1r8yDCTDVTIqIVE6XZemKRS2g3cqGZjWrcpS/6HcCjRqkybnjI9TWDHmfZn8kVTOOswoOTQO9nFxUBeXgBJS9q5XOptNtIcX2QK53s2kyMi0hfZPGDMcZKLd0y1w165Sjonw2liQO9KIy0yUxXOoqq6NNCnnSnojaaoVFHD4EpQ85NBZKSQY8Koq/1UXegh+N8qxb4lCWHdFRZjF6GCgWD6BtBwPKCD9KNqkRw7s3SZoLT61MpLs1cttReTrBH6cUQuRXx5/s8GWnOXuYUVQ37FB9qUFwa28aSVl3TjrI5vT7bhgpuWcBrBDuLAHuYdueHM4BDNxe6Jk9ARUBWtPIvF67RYO8qlfI40LiTrgW8NrBDSrCHbkuem67vtTEVnYjmM5W9Y1kG8V4VVVNW45FFSIshC/h6aPZE8b02RGt6Qa+NmNqLeC7kAzTK9pHDVVgZ868C/TQ8AfQoJcchicJYWgBvGyJoATvkADuwlO6/GSu8LM/vW5tVaq/HLuIyA2y5DFs25NKciYe9cAyOU3vA71ehvT8+2LVo9iySPjpRdCihpg2QqCEphdKhCgqobYu4JIXud/wwbzQSVYWwDFQwarM501B1uC6A76mTdZlcHu/JaxDXdEzUIxybBzukALu2KTmC4+5HJ6YXX5sDN0fQZZEoNWv4TqqSFnWbFQc5FUyiCrkdFuw4lARBoPQ8513U+wn+d82anWJnWC7AyyQZ/ReWUiObIiGEszJWVeV+S/ADeXxeRcATyId4UXqQM7ZDut9gbhrspBRxW+1gd57Igf8bf9KOwnOirgs82y6NNr9UmrwKXV+A7JEsD0lhOoPG8bJKgHelpnSKt2vhbCzTA0MAr0uzc8BZh1NHi74OsJOjQvDo7IbYk5dDGI4qvY/+0t6sVRYY31UzqKdoWXWmRbcqAL6jgK4tdgKAT6O4pDYag8YhgutVEbADB3bOQgay8/R4xitD0BPJWTqlcRFod3rT3sQixcIo2GPFgj27gmJ+JYcQGtaiRPO3GnBxT3SwTMC/R60+1m+t85EZb4w+sGe7RuLYiO51Y7ab+RqMycUr33PzmR2hb5Jppajp/izK9NLccoCBATs8i3YvEeyQ1vvykzTikzaWVRAomfuJ17NnzRRmgVe/pfxXVv2O2h1ZeUALNmZlAd7g4syhdq8e2DN5VkZpatmneMBcX1v6LeUDrsEFe95Jr9SHwC8HruSGFej2ETYLNk8F7BRwhddpUX2wZ5uGKfPJbNMyIEAN6EEQDwF/mgFmbFfqoxQWoAsr5KaGEiiNOc3O+df2ZpWGu9cJ7Mqg84ZIUY7WpU/lvrrSM/LkJN1/AJZ1wgqI4wZF9mpPY8QC0CDFTagd2AOU47pkL0qPElMC/VT95mJvGdOamSU6iuvGCvfY1E/iPkZtScMBVfwDnsggISe1MmDPWVK7s2q151VtV5Ot5uWzz8l1ZKpxmbPeZprZH/fz9J2mKY1ZzY7crL1eDRPBUk/NHpRlc+v0Kde1ioAvWPOS6Nowb73NFHxmGnR9m9TwZjU7PrlUzuHFt7/mdQJ73qYJ1AVl29ji9XRuWS3FL/395FjoUgly/bU2D+7ZswrCpjS88bhwxdtrBXYNMpHZ9zpclUefB7r7mDAfIswPisk6dQS7At/0zMDuy0BjjueJy+G6TLN+YBcei8khBXumO+6AmQe7aBZQHuhZPTX90cD+gQVSI00A/ghgp5OAUTzYaXldlwGkX7NTF+6cRVkPQM85nwPAjQX3oX3X2oQ7M5x6gf1wHyHlqfvmwe4UBr0mGVPjtfJKcVcV79HrMk6dwU7lj0PK3fXMgV2fyaMR9HPUZl3L632w89/i7DunrmA3bBBPDi+kfvteI+iX8hp5b+rSXtIQVsgrE7su49QW7BDZcWOpG+wmRSPomTLSegT8U2gpnw0q7HNrveq3EypBO7UEO5O9iSLGVCfY+REykzSD3gd+Xy26XJ+81iewbx5cliKozakj2BNkkr1t+iHYqXJuAo1xWWQCd2VkwWR5vV6w3U4d28rHGKi/pwV7HsBXAuxJJZ4p7qQI2BPyTbvyOjgfGWVthRWJzzFkq03j4J+oa/u8cKvhdjuGDdQ+yxCu3Kwb2NN6LqQBB9PIeoQqFgefj/k+hYmB+xUCfbSjVfwVq6/4hVsP+qmi1uwBhTBUta28qDNJHUJEbE4maZ4g2J94LLnrVhftASrQvmiIK1DK5nhDp2jcTL69+P6ZZqDArog+UDRl3rCD1VvoltH126DMWGn9VNNrdUr2WbdauZwTzRMFe1CLjVmKGpMx3S4Q6KKDdpR0WP0rA8TMlFVpK08YodgYWBT5luYJg72okDa/BYDYhSzUND0WErNRRPKGEB/JCF6wI7WVl7moVPnYmxQFehrAj84B7IKzHxb2f79t8HFZoWEUH1Rh0KeiQSKeCUR90Iw0iN8j5Zw3PWfy2ODaKyhEAd6VBtppg51CE/YqZoiyfxygz6wUpUHj57MAebecbigSPD6nQqf4/sz0wYUBvsO5c2c2OL9MsHPW9EL5em/dat+hRupWATU10/JpZoFKSDMklpym8s7JgR1kVd0IGTw6/AbB3qnzzbSSXcO7ZpMK9IA9TUPhF9/kK8VWyGpWkZsmeWESxPaFqzHg4arqYNfo9xY1UADyJ4uYXqJftdqsvV5ZlBoCvKsvU8gU2LXd/N7q4vK2cBogh7mFUG0Bb0q7Vw7sLvJ1LTXpAcwXHqUKwCe2mlsJwHfNaPfKgX1AdV30eaA8a7DWTBy9eaABqMsEhCqB/VZnESPF3y3g66bhpRfjUqtnRpTA26wGFTlH1UNKc+w6Z1POjrMWS16mpmfBqovSdPQVLFLclnECexUCqjQXZApcOM+ZWPjUkNKsvmtr5u4imWB2ymBX52g9NHXU8OCAVkBwj2IooFCepoZCRQbBLs5ysm1sLXrqqOFlcU5tlioVBJoW+Qq/yW5Vwa6MVUtn6qrhOYeXutx0nIBQ4LtCwnQrptmf7BMrtaU0GsER1QG7/pzdn8BE47SZhU2NAa/5+3KCwRHtT6iuTGXBLl2to7JvmGwdY6V0wMuFpuyRgwVAfjSwB6jM0kLGAl4BN7ubjrN6gF3VrrFUxgI+AF4vW/5hkzvssVEHsB82YLBSY8CrzPDC9UZkTmIG2dYB7IcNGKzUWxzYa/pkWmT9F6cmYK9k+RArhTQ8Z3MEz+uiX9RarxMpzeqwPY0Fu5Wjc3gtGn7dapmuwGXBbqU4pWl62mqBdGN2Y8FupRqAZxT1p6Eplp9EQrVU/CH/bsFupUKAF9W3gGkICRDlPbqWxlipNOC5J0J6CwOekqKpYhnTV8TJgt2KEUpDMtVRY4XASSDVAHoLditmAA8OMDFEWWINxKY46LsW7FaMAZ5qnqgx1tXRWYH+C/6YNTn8LdKiTxbsVkxJMJZmiUilEsdXmkCPGl4kOtN3ko0wY9LnTw8VLVIRqF8qQ9dloqqA0wHjhQAs2C3gdzJCLj/Q2ctHVfhCgDkDwvK2IbOa6BUC/nk4SsULC/azpzRULtsfVE76dFPYLNithC+BzlT/Swt2K2cBeJLh6bQrt2C3EuDwMW1V3PVFe1HZ5rQW7FY0aniSJXWq1uWqtGC3UnXAk8zrCXoLdiv5AF9D0FuwWykG+DqB/tqC3YoOwAvQU2fl6npvRCmNkb2lVnQBnmTR2jy4qlx0RRgM/8o9/guzpTSsGAA8CeWtuoo+lAx2nG1o1mFsam+lFVOA92XU2MJPpWh70uqc/8pkANrC3kYrxwC85PVC23vvTDfpDaD9Q2uz6jIZhWnFylEB7wvx5640HA1ofOkdum6tH35g0gtji5paySW6y2VP5PC6VMUAgGLcIVeRJ1kCkM0o3xbAcnQr1QS8LwtFORTt8Fx8AHoA0IlpsYOfgQUVZQWHCrOC5eZWtMv/BRgAAnvw1+cpNggAAAAASUVORK5CYII=" /> </p>
27 + <p class=t1>网络异常</p>
28 + <p class=t2>请查看网络设置或点击刷新重试</p>
29 + <p class=t3><a href="kwsdk://refresh_window">刷新</a></p>
30 + </div>
31 + <script>
32 + window.onload = function() {
33 + var width = window.innerWidth;
34 + var height = window.innerHeight;
35 + var wdt = width < height ? width : height;
36 + document.getElementsByTagName("html")[0].style[ "font-size" ] = wdt*50/360+"px";
37 + };
38 + </script>
39 +</body>
40 +</html>
1 +/*
2 + Localized.strings
3 + XpSDKDemo
4 +
5 + Created by 王琦业 on 2017/9/4.
6 + Copyright © 2017年 wangqiye. All rights reserved.
7 +*/
8 +
9 +
10 +"登录" = "登录";
11 +"账号:" = "账号:";
12 +"密码:" = "密码:";
13 +"立即登录" = "立即登录";
14 +"一键注册" = "一键注册";
15 +"记住密码" = "记住密码";
16 +"找回密码" = "找回密码";
17 +"账号注册" = "账号注册";
18 +"删除" = "删除";
19 +"取消" = "取消";
20 +"已有账号" = "已有账号";
21 +"手机注册" = "手机注册";
22 +"我已阅读并同意《用户注册服务协议》" = "我已阅读并同意《用户注册服务协议》";
23 +"获取验证码" = "获取验证码";
24 +"请输入账号或手机号" = "请输入账号或手机号";
25 +"请输入要绑定的手机号" = "请输入要绑定的手机号";
26 +"请输入密码" = "请输入密码";
27 +"4-18位字符" = "4-18位字符";
28 +"请输入手机号" = "请输入手机号";
29 +"请输入验证码" = "请输入验证码";
30 +"绑定手机" = "绑定手机";
31 +"一周之内不再提醒" = "一周之内不再提醒";
32 +"跳过" = "跳过";
33 +
34 +
35 +
1 +
2 +
3 +#import <Foundation/Foundation.h>
4 +#import <UIKit/UIKit.h>
5 +#import "XpSDKObject.h"
6 +
7 +
8 +
9 +#pragma mark - XpSDKDelegate
10 +
11 +@protocol XpSDKDelegate <NSObject>
12 +@optional
13 +
14 +/*! @brief 回调数据
15 + * 当登录完成、切换账号和付款成功/失败时会发送回调消息
16 + * @param resultCode 回调状态码
17 + * @param resultData 回调数据
18 + */
19 +- (void) onResult:(XpResultCode)resultCode resultData:(resultData *)resultData;
20 +
21 +@end
22 +
23 +
24 +
25 +#pragma mark - XpSDK
26 +
27 +/** @brief XpSDKApi接口函数类
28 + *
29 + * 该类封装了XpSDK的所有接口
30 + */
31 +@interface XpSDK : NSObject
32 +
33 +/**
34 + * @brief XpSDK代理
35 + */
36 +@property (nonatomic, weak) id<XpSDKDelegate> delegate;
37 +
38 +/**
39 + * @brief 获取SDK实例对象
40 + */
41 ++ (XpSDK *) sharedInstance;
42 +
43 +/**
44 + * @brief 显示悬浮球球菜单
45 + * @param view 悬浮球加载的view
46 + * @param location 悬浮球位置
47 + */
48 +- (void) showBallMenuAddTo:(UIView *)view location:(XpLocationType )location;
49 +
50 +/**
51 + * @brief 创建角色
52 + * @param roleEntity 角色实体
53 + */
54 +- (void) createRole:(XpRoleEntity *)roleEntity;
55 +
56 +/**
57 + * @brief 角色登录
58 + * @param roleEntity 角色实体
59 + */
60 +- (void) loginRole:(XpRoleEntity *)roleEntity;
61 +
62 +/**
63 + * @brief 角色升级
64 + * @param roleEntity 角色实体
65 + */
66 +- (void) upgradeRole:(XpRoleEntity *)roleEntity;
67 +
68 +/**
69 + * @brief 登录界面
70 + */
71 +- (void) showLogin;
72 +
73 +/**
74 + * @brief 初始化SDK
75 + * @param appid appid
76 + * @param appsecret appsecret
77 + */
78 +- (void) initWithAppId:(NSString *)appid Appsecret:(NSString *)appsecret;
79 +
80 +/**
81 + * @brief 关闭小球菜单
82 + */
83 +- (void) closeBallMenu;
84 +
85 +/**
86 + * @brief 发起支付订单
87 + * @param amount 金额 (单位为分,1元请传100)
88 + * @param callback 透传参数
89 + * @param roleEntity 角色实体
90 + * @param orientaiton 支付界面方向 (默认传入XpOrientationLandscapeRight)
91 + */
92 +- (void) payAmount:(NSString *)amount callback:(NSString *)callback role:(XpRoleEntity *)roleEntity orientation:(XpOrientation) orientaiton;
93 +
94 +
95 +@end
96 +
1 +
2 +
3 +#import <Foundation/Foundation.h>
4 +
5 +/*! @brief 悬浮球位置
6 + *
7 + */
8 +typedef enum {
9 + XpLocationTypeTopLeft = 1, /**< 左上 */
10 + XpLocationTypeTopRight, /**< 右上 */
11 + XpLocationTypeBottomLeft, /**< 左下 */
12 + XpLocationTypeBottomRight, /**< 右下 */
13 + XpLocationTypeCenterLeft, /**< 左中 */
14 + XpLocationTypeCenterRight /**< 右中 */
15 +}XpLocationType;
16 +
17 +
18 +
19 +/*! @brief 回调数据状态
20 + *
21 + */
22 +typedef enum {
23 + XpLogin = 1, /**< 登录成功 */
24 + XpSwitchAccount, /**< 切换账号 */
25 + XpPayOrder, /**< 付款订单 */
26 +}XpResultCode;
27 +
28 +
29 +/*! @brief 付款订单状态
30 + *
31 + */
32 +typedef enum {
33 + XpPaySuccess = 1, /**< 付款成功 */
34 + XpPayFailed, /**< 付款失败 */
35 + XpPayConfirm, /**< 付款确认中 */
36 + XpPayCancel, /**< 取消付款 */
37 +}XpPayStatus;
38 +
39 +typedef enum {
40 + XpOrientationPortrait = 1, /**< 竖向 */
41 + XpOrientationLandscapeRight, /**< 横向 */
42 +}XpOrientation;
43 +
44 +@interface XpSDKObject : NSObject
45 +
46 +@end
47 +
48 +#pragma mark - XpRoleEntity
49 +/*! @brief 第三方向喜扑发送的角色实体类
50 + *
51 + */
52 +@interface XpRoleEntity : NSObject
53 +/** 服务器id */
54 +@property (nonatomic, copy) NSString *server_id;
55 +/** 服务器名 */
56 +@property (nonatomic, copy) NSString *server_name;
57 +/** 角色id */
58 +@property (nonatomic, copy) NSString *role_id;
59 +/** 角色名 */
60 +@property (nonatomic, copy) NSString *role_name;
61 +/** 角色等级 */
62 +@property (nonatomic, copy) NSString *role_level;
63 +/** 角色VIP等级 */
64 +@property (nonatomic, copy) NSString *vip_level;
65 +/** 角色余额 */
66 +@property (nonatomic, copy) NSString *remainder;
67 +
68 +@end
69 +
70 +
71 +#pragma mark - resultData
72 +/*! @brief 回调信息返回的数据
73 + *
74 + */
75 +@interface resultData : NSObject
76 +/** 签名 */
77 +@property (nonatomic, copy) NSString *sign;
78 +/** openid */
79 +@property (nonatomic, copy) NSString *openid;
80 +/** 时间戳 */
81 +@property (nonatomic, copy) NSString *timestamp;
82 +/** 付款状态 */
83 +@property (nonatomic, assign) XpPayStatus payStatus;
84 +
85 +
86 +
87 +@end
1 +framework module XpSDK {
2 + umbrella header "XpSDK.h"
3 +
4 + export *
5 + module * { export * }
6 +}
1 +#!/usr/bin/env bash
2 +
3 +TABLENAME=symbols
4 +SYMBOL_DB_FILE="symbols"
5 +STRING_SYMBOL_FILE="func.list"
6 +HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
7 +export LC_CTYPE=C
8 +
9 +#维护数据库方便日后作排重
10 +createTable()
11 +{
12 +echo "create table $TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE
13 +}
14 +
15 +insertValue()
16 +{
17 +echo "insert into $TABLENAME values('$1' ,'$2');" | sqlite3 $SYMBOL_DB_FILE
18 +}
19 +
20 +query()
21 +{
22 +echo "select * from $TABLENAME where src='$1';" | sqlite3 $SYMBOL_DB_FILE
23 +}
24 +
25 +ramdomString()
26 +{
27 +openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16
28 +}
29 +
30 +rm -f $SYMBOL_DB_FILE
31 +rm -f $HEAD_FILE
32 +createTable
33 +
34 +touch $HEAD_FILE
35 +echo '#ifndef Demo_codeObfuscation_h
36 +#define Demo_codeObfuscation_h' >> $HEAD_FILE
37 +echo "//confuse string at `date`" >> $HEAD_FILE
38 +cat "$STRING_SYMBOL_FILE" | while read -ra line; do
39 +if [[ ! -z "$line" ]]; then
40 +ramdom=`ramdomString`
41 +echo $line $ramdom
42 +insertValue $line $ramdom
43 +echo "#define $line $ramdom" >> $HEAD_FILE
44 +fi
45 +done
46 +echo "#endif" >> $HEAD_FILE
47 +
48 +
49 +sqlite3 $SYMBOL_DB_FILE .dump
1 +getRootController
2 +requestLocation
3 +autoSend
4 +readConfig
5 +matchAmount
6 +receiveNewsWith
7 +getRoleParamsWithRole
8 +getSignWithTime
9 +setLoginView
10 +registBtnClicked
11 +loginBtnClicked
12 +indexPath
13 +accountView
14 +retrievePasswordButtonClicked
15 +determineToRegist_AccountView
16 +existingAccount_AccountView
17 +serviceAgreement_AccountView
18 +presentToServiceView
19 +phoneRegistBtnClicked
20 +determineToRegist_PhoneView
21 +serviceAgreement_PhoneView
22 +existingAccount_PhoneView
23 +registAccount_PhoneView
24 +bindPhoneBtnClicked
25 +presentToWebWith
26 +deleteBtnClick
27 +skipBindBtnClicked
28 +reviseAccountBtnClicked
29 +skipUpgradeBtnClicked
30 +enterButtonClicked
31 +cancelButtonClicked
32 +login
33 +saveQRCodeImgToPhotoAlbum
34 +savePhoto
35 +showBindOrUpgrade
36 +advertViewClick
37 +closeAdvertImage
38 +txtEnterClicked
39 +afterDismissWebController
40 +alertView
41 +clickedButtonAtIndex
42 +initViewWithTitle
43 +addAccountFiledWithFrame
44 +addPasswordFieldWithFrame
45 +addRememberPasswordBtn
46 +addFindPasswordBtn
47 +addloginBtn
48 +addRegistBtn
49 +addHornView
50 +addServerAgreementBtn
51 +addBottomBtn
52 +addStandFiledWithTitle
53 +advertViewClicked
54 +closeBtnClicked
55 +downloadImageWithUrl
56 +setWarnBtn
57 +addremindBtn
58 +getCodeBtn_Bind
59 +withOutTradeNo
60 +getPayment
61 +withIdentifier
62 +removePaymentWithIdentifier
63 +persistent
64 +sendVerify
65 +autoSendVerify
66 +sendRequest
67 +send
68 +setWebView
69 +saveAccount
70 +removeAccountWithIndex
71 +removeAccount
72 +updateAccount
73 +accountWithIndex
74 +addButton
75 +setNoticeStatus
76 +suggestBtnClicked
77 +
78 +
79 +
80 +
81 +
82 +
83 +
1 +{"gameOri": "0", "payorderurl": "https://public.sdk.gzyouai.com/paycheck/create", "usertype": 240, "appScheme": "com.cangjianjianghu.cjjh", "sdkSimpleName": "kwsdk_ios", "url_schemes": "xpcjjh", "gamechannelid": "", "custom": "{}", "appSecret": "bd1050f10b8361403b057dd9de3ee046", "sdkVersionCode": "V1_5_2", "loginCheckUrl": "https://public.sdk.gzyouai.com/logincheck/check", "appId": "96bf78b0b0bc4431756f8841ba45cc27", "c2": "", "c1": "", "identifier": "open_app", "paycheckurl": "https://public.sdk.gzyouai.com/paycheck/confirm", "gameSimpleName": "fytx_test"}
...\ No newline at end of file ...\ No newline at end of file
1 +import shutil
2 +import os
3 +import plistlib
4 +
5 +import config
6 +import json
7 +import packageProj
8 +import commands
9 +
10 +from mod_pbxproj import XcodeProject
11 +
12 +
13 +gameProjName = config.gameProjName
14 +channelName = "qianyou"
15 +#copy dir xcodeproj
16 +copyNewDirName = gameProjName + '_' + channelName + '.xcodeproj'
17 +currentPath = os.path.abspath('.')
18 +currentPath += '/' + copyNewDirName
19 +
20 +if os.path.exists(currentPath):
21 + shutil.rmtree(currentPath)
22 +
23 +shutil.copytree(gameProjName + '.xcodeproj',currentPath)
24 +
25 +project = XcodeProject.Load(copyNewDirName + '/project.pbxproj')
26 +
27 +project.add_other_ldflags('-ObjC')
28 +
29 +channelRootPath = config.channelRootPath#'poolsdk_file'
30 +
31 +frameworksPath = '$(PROJECT_DIR)/' + channelRootPath + '/poolsdk_' + channelName + '/SDK'
32 +print(frameworksPath);
33 +#add header search path
34 +project.add_header_search_paths(frameworksPath, recursive=False)
35 +project.add_header_search_paths(frameworksPath + '/iaphelper', recursive=False)
36 +
37 +#add framework search path
38 +project.add_framework_search_paths(frameworksPath, recursive=False)
39 +#add library search path
40 +project.add_library_search_paths(frameworksPath, recursive=False)
41 +
42 +#add poolsdk_xy dir all file into project
43 +project.remove_group_by_name('poolsdk')
44 +frameworkRelativePath = project.add_folder(channelRootPath + '/poolsdk_' + channelName + '/SDK')
45 +
46 +#ignore_unknown_type
47 +project.add_file_if_doesnt_exist('pool_setting',parent=frameworkRelativePath, weak=True,ignore_unknown_type=True)
48 +
49 +systemFrameworks = project.get_or_create_group('Frameworks')
50 +#add system framework
51 +project.add_file_if_doesnt_exist('System/Library/Frameworks/AdSupport.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
52 +project.add_file_if_doesnt_exist('System/Library/Frameworks/CFNetwork.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
53 +project.add_file_if_doesnt_exist('System/Library/Frameworks/Security.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
54 +project.add_file_if_doesnt_exist('System/Library/Frameworks/CoreTelephony.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
55 +project.add_file_if_doesnt_exist('System/Library/Frameworks/SystemConfiguration.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
56 +
57 +
58 +#add system dylib
59 +systemLibs = project.get_or_create_group('Libraries')
60 +project.add_file_if_doesnt_exist('/usr/lib/libsqlite3.dylib',parent=systemLibs, weak=True, tree='<absolute>')#absolute path
61 +project.add_file_if_doesnt_exist('/usr/lib/libz.dylib',parent=systemLibs, weak=True, tree='<absolute>')
62 +project.add_file_if_doesnt_exist('/usr/lib/libc++.dylib',parent=systemLibs, weak=True, tree='<absolute>')
63 +
64 +
65 +#modify info.plist reference path
66 +project.add_single_valued_flag('INFOPLIST_FILE',channelRootPath + '/poolsdk_' + channelName + '/Info.plist')
67 +
68 +project.add_single_valued_flag('ENABLE_BITCODE', 'NO')
69 +
70 +readInfoPlistFilePath = channelRootPath + '/poolsdk/Info.plist'
71 +writeInfoFilePath = channelRootPath + '/poolsdk_' + channelName + '/Info.plist'
72 +infoContent = plistlib.readPlist(readInfoPlistFilePath)
73 +
74 +channelInfoPath = channelRootPath + '/poolsdk_' + channelName + '/Info_' + channelName + '.plist'
75 +
76 +#read pool_setting file
77 +settingFile = open(channelRootPath + '/poolsdk_' + channelName + '/SDK/pool_setting','rw')
78 +try:
79 + settingFileContent = settingFile.read( )
80 +finally:
81 + settingFile.close( )
82 +#json op
83 +jsonStr = json.loads(settingFileContent)
84 +
85 +#modify bundle id
86 +project.add_single_valued_flag('PRODUCT_BUNDLE_IDENTIFIER',jsonStr["appScheme"])
87 +
88 +appSecret = jsonStr["appSecret"];
89 +appKey = jsonStr["appKey"];
90 +appId = jsonStr["appId"];
91 +pvc = jsonStr["pvc"];
92 +qqAppId = jsonStr["qqAppId"];
93 +qqAppKey = jsonStr["qqAppKey"];
94 +channel = jsonStr["channel"];
95 +sdkProtocolGame = jsonStr["sdkProtocolGame"];
96 +sdkProtocolToken = jsonStr["sdkProtocolToken"];
97 +headLink = "'" + jsonStr["head_link"] + "'";
98 +keychain_access_groups = jsonStr["keychain-access-groups"];
99 +#set info.plist channel parame
100 +
101 +channelParamesFilePath = channelRootPath + '/poolsdk_' + channelName + '/SDK/p2y9y_private.plist'
102 +absolutionInfoPath = os.path.abspath('.') + '/' + channelParamesFilePath
103 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :com_2y9y_appSecret '" + appSecret + ' ' + absolutionInfoPath)
104 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :com_2y9y_appKey '" + appKey + ' ' + absolutionInfoPath)
105 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :com_2y9y_appId '" + appId + ' ' + absolutionInfoPath)
106 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :com_2y9y_pvc '" + pvc + ' ' + absolutionInfoPath)
107 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :com_2y9_qqAppId '" + qqAppId + ' ' + absolutionInfoPath)
108 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :com_2y9y_qqAppKey '" + qqAppKey + ' ' + absolutionInfoPath)
109 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :com_2y9y_channel '" + channel + ' ' + absolutionInfoPath)
110 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :com_2y9y_sdkProtocolGame '" + sdkProtocolGame + ' ' + absolutionInfoPath)
111 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :com_2y9y_sdkProtocolToken '" + sdkProtocolToken + ' ' + absolutionInfoPath)
112 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :head_link '" + headLink + ' ' + absolutionInfoPath)
113 +
114 +channelKeychainFilePath = channelRootPath + '/poolsdk_' + channelName + '/SDK/KeychainAccessGroups.plist'
115 +channelKeychainFilePath = os.path.abspath('.') + '/' + channelKeychainFilePath
116 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set keychain-access-groups:0 '" + keychain_access_groups + ' ' + channelKeychainFilePath)
117 +
118 +#read channel info plist content
119 +channelInfoContent = plistlib.readPlist(channelInfoPath)
120 +#update and add info.plist content
121 +infoContent.update(channelInfoContent)
122 +#write
123 +plistlib.writePlist(infoContent,writeInfoFilePath)
124 +
125 +#copy keychain file
126 +newFilePath = os.path.abspath('.') + '/KeychainAccessGroups.plist'
127 +shutil.copyfile(channelKeychainFilePath,newFilePath)
128 +
129 +project.save()
1 +import shutil
2 +import os
3 +import plistlib
4 +
5 +import config
6 +import json
7 +import packageProj
8 +import commands
9 +
10 +from mod_pbxproj import XcodeProject
11 +
12 +
13 +gameProjName = config.gameProjName
14 +channelName = "xipu"
15 +#copy dir xcodeproj
16 +copyNewDirName = gameProjName + '_' + channelName + '.xcodeproj'
17 +currentPath = os.path.abspath('.')
18 +currentPath += '/' + copyNewDirName
19 +
20 +
21 +if os.path.exists(currentPath):
22 + shutil.rmtree(currentPath)
23 +
24 +shutil.copytree(gameProjName + '.xcodeproj',currentPath)
25 +
26 +project = XcodeProject.Load(copyNewDirName + '/project.pbxproj')
27 +
28 +project.add_other_ldflags('-ObjC')
29 +
30 +channelRootPath = config.channelRootPath#'poolsdk_file'
31 +
32 +frameworksPath = '$(PROJECT_DIR)/' + channelRootPath + '/poolsdk_' + channelName + '/SDK'
33 +print(frameworksPath);
34 +#add header search path
35 +project.add_header_search_paths(frameworksPath, recursive=False)
36 +project.add_header_search_paths(frameworksPath + '/ResourceCode', recursive=False)
37 +project.add_header_search_paths(frameworksPath + '/ResourceCode/JGStatistics', recursive=False)
38 +project.add_header_search_paths(frameworksPath + '/ResourceCode/MMCategory', recursive=False)
39 +project.add_header_search_paths(frameworksPath + '/ResourceCode/PieChartView', recursive=False)
40 +
41 +#add framework search path
42 +project.add_framework_search_paths(frameworksPath, recursive=False)
43 +project.add_framework_search_paths(frameworksPath + '/ResourceCode/MGBSHudFramework', recursive=False)
44 +
45 +#add library search path
46 +project.add_library_search_paths(frameworksPath, recursive=False)
47 +project.add_library_search_paths(frameworksPath + '/ResourceCode/JGStatistics', recursive=False)
48 +
49 +#add poolsdk_xy dir all file into project
50 +project.remove_group_by_name('poolsdk')
51 +frameworkRelativePath = project.add_folder(channelRootPath + '/poolsdk_' + channelName + '/SDK')
52 +
53 +#ignore_unknown_type
54 +project.add_file_if_doesnt_exist('pool_setting',parent=frameworkRelativePath, weak=True,ignore_unknown_type=True)
55 +
56 +
57 +systemFrameworks = project.get_or_create_group('Frameworks')
58 +#add system framework
59 +project.add_file_if_doesnt_exist('System/Library/Frameworks/Security.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
60 +project.add_file_if_doesnt_exist('System/Library/Frameworks/CoreGraphics.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
61 +project.add_file_if_doesnt_exist('System/Library/Frameworks/AdSupport.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
62 +project.add_file_if_doesnt_exist('System/Library/Frameworks/CoreTelephony.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
63 +project.add_file_if_doesnt_exist('System/Library/Frameworks/SystemConfiguration.framework',parent=systemFrameworks, weak=True, tree='SDKROOT')
64 +
65 +#add system dylib
66 +systemLibs = project.get_or_create_group('Libraries')
67 +project.add_file_if_doesnt_exist('/usr/lib/libz.dylib',parent=systemLibs, weak=True, tree='<absolute>')
68 +project.add_file_if_doesnt_exist('/usr/lib/libresolv.dylib',parent=systemLibs, weak=True, tree='<absolute>')
69 +project.add_file_if_doesnt_exist('/usr/lib/libsqlite3.dylib',parent=systemLibs, weak=True, tree='<absolute>')#absolute path
70 +
71 +
72 +#modify info.plist reference path
73 +project.add_single_valued_flag('INFOPLIST_FILE',channelRootPath + '/poolsdk_' + channelName + '/Info.plist')
74 +
75 +project.add_single_valued_flag('ENABLE_BITCODE', 'NO')
76 +
77 +readInfoPlistFilePath = channelRootPath + '/poolsdk/Info.plist'
78 +writeInfoFilePath = channelRootPath + '/poolsdk_' + channelName + '/Info.plist'
79 +infoContent = plistlib.readPlist(readInfoPlistFilePath)
80 +
81 +channelInfoPath = channelRootPath + '/poolsdk_' + channelName + '/Info_' + channelName + '.plist'
82 +
83 +#read pool_setting file
84 +settingFile = open(channelRootPath + '/poolsdk_' + channelName + '/SDK/pool_setting','rw')
85 +try:
86 + settingFileContent = settingFile.read( )
87 +finally:
88 + settingFile.close( )
89 +#json op
90 +jsonStr = json.loads(settingFileContent)
91 +
92 +#modify bundle id
93 +project.add_single_valued_flag('PRODUCT_BUNDLE_IDENTIFIER',jsonStr["appScheme"])
94 +
95 +identifier = jsonStr["identifier"];
96 +url_schemes = jsonStr["url_schemes"];
97 +
98 +#set info.plist channel parame
99 +absolutionInfoPath = os.path.abspath('.') + '/' + channelInfoPath
100 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :CFBundleURLTypes:0:CFBundleURLName '" + identifier + ' ' + absolutionInfoPath)
101 +commands.getstatusoutput("/usr/libexec/PlistBuddy -c 'Set :CFBundleURLTypes:0:CFBundleURLSchemes:0 '" + url_schemes + ' ' + absolutionInfoPath)
102 +
103 +#read channel info plist content
104 +channelInfoContent = plistlib.readPlist(channelInfoPath)
105 +#update and add info.plist content
106 +infoContent.update(channelInfoContent)
107 +#write
108 +plistlib.writePlist(infoContent,writeInfoFilePath)
109 +
110 +project.save()
No preview for this file type
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
32 32
33 #define REPORT_URL @"https://statistic.public.sdk.gzyouai.com/sdk/statistic" //http://183.57.76.181:9030/sdk/statistic 33 #define REPORT_URL @"https://statistic.public.sdk.gzyouai.com/sdk/statistic" //http://183.57.76.181:9030/sdk/statistic
34 34
35 -#define REPORT_IDFA_URL @"https://statistic.public.sdk.gzyouai.com/sdk/last_channel?idfa=" //@"http://183.57.76.181:9030/sdk/last_channel?idfa="// 35 +#define REPORT_IDFA_URL @"https://statistic.public.sdk.gzyouai.com/sdk/last_channel?idfa=%@&sdkSimpleName=%@&gameSimpleName=%@" //@"http://183.57.76.181:9030/sdk/last_channel?idfa="//
36 36
37 #define REPORT_OPEN @"open" 37 #define REPORT_OPEN @"open"
38 #define REPORT_ENTER @"enter" 38 #define REPORT_ENTER @"enter"
......
1 +2017-11-01:<br>
2 +1、idfa请求添加sdksimplename和gamesimplename参数
3 +
1 2017-09-08: 4 2017-09-08:
2 1、添加创建订单加载提示 5 1、添加创建订单加载提示
3 6
......