From a7a44f188a0b46de62282c541fd8cf14b40f6b3b Mon Sep 17 00:00:00 2001 From: dourgulf Date: Tue, 20 Sep 2016 10:03:23 +0800 Subject: [PATCH 1/3] Add Weibo Web OAuth when APP not installed. --- .../openshare.xcodeproj/project.pbxproj | 131 ++-------- .../contents.xcworkspacedata | 0 .../xcshareddata/WorkspaceSettings.xcsettings | 0 .../xcshareddata/xcschemes/openshare.xcscheme | 0 OpenShareDemo/openshare/AppDelegate.m | 3 +- .../AppIcon.appiconset/Contents.json | 25 ++ OpenShareDemo/openshare/Info.plist | 237 ++++++++++-------- OpenShareDemo/openshare/ViewController.m | 4 +- OpenShareDemo/openshareTests/Info.plist | 2 +- openshare/OpenShare+Weibo.h | 2 +- openshare/OpenShare+Weibo.m | 57 +++-- openshare/OpenShare.h | 6 + openshare/OpenShare.m | 23 +- openshare/WebviewAuthHelper.h | 20 ++ openshare/WebviewAuthHelper.m | 218 ++++++++++++++++ 15 files changed, 484 insertions(+), 244 deletions(-) mode change 100644 => 100755 OpenShareDemo/openshare.xcodeproj/project.pbxproj mode change 100644 => 100755 OpenShareDemo/openshare.xcodeproj/project.xcworkspace/contents.xcworkspacedata mode change 100644 => 100755 OpenShareDemo/openshare.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings mode change 100644 => 100755 OpenShareDemo/openshare.xcodeproj/xcshareddata/xcschemes/openshare.xcscheme create mode 100644 openshare/WebviewAuthHelper.h create mode 100644 openshare/WebviewAuthHelper.m diff --git a/OpenShareDemo/openshare.xcodeproj/project.pbxproj b/OpenShareDemo/openshare.xcodeproj/project.pbxproj old mode 100644 new mode 100755 index f033d51..d446968 --- a/OpenShareDemo/openshare.xcodeproj/project.pbxproj +++ b/OpenShareDemo/openshare.xcodeproj/project.pbxproj @@ -12,7 +12,6 @@ B66BF3B91B0C137E0082F8D6 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B66BF3B81B0C137E0082F8D6 /* ViewController.m */; }; B66BF3BE1B0C137E0082F8D6 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B66BF3BD1B0C137E0082F8D6 /* Images.xcassets */; }; B66BF3C11B0C137E0082F8D6 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = B66BF3BF1B0C137E0082F8D6 /* LaunchScreen.xib */; }; - B66BF3CD1B0C137E0082F8D6 /* openshareTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B66BF3CC1B0C137E0082F8D6 /* openshareTests.m */; }; B66BF3DB1B0C14480082F8D6 /* iconfont.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B66BF3D71B0C14480082F8D6 /* iconfont.ttf */; }; B66BF3DC1B0C14480082F8D6 /* logo.gif in Resources */ = {isa = PBXBuildFile; fileRef = B66BF3D81B0C14480082F8D6 /* logo.gif */; }; B66BF3DD1B0C14480082F8D6 /* logo.png in Resources */ = {isa = PBXBuildFile; fileRef = B66BF3D91B0C14480082F8D6 /* logo.png */; }; @@ -25,18 +24,9 @@ B66BF3F41B0C1AEB0082F8D6 /* UIControl+Blocks.m in Sources */ = {isa = PBXBuildFile; fileRef = B66BF3F31B0C1AEB0082F8D6 /* UIControl+Blocks.m */; }; B66BF3F81B0C23670082F8D6 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B66BF3F71B0C23670082F8D6 /* Default@2x.png */; }; B6E22B1F1B213B09001930CA /* OpenShare+Alipay.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E22B1E1B213B09001930CA /* OpenShare+Alipay.m */; }; + D08B4B131D8FD254004BCB31 /* WebviewAuthHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = D08B4B121D8FD254004BCB31 /* WebviewAuthHelper.m */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - B66BF3C71B0C137E0082F8D6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = B66BF3A51B0C137D0082F8D6 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B66BF3AC1B0C137E0082F8D6; - remoteInfo = openshare; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXFileReference section */ B66BF3AD1B0C137E0082F8D6 /* openshare.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = openshare.app; sourceTree = BUILT_PRODUCTS_DIR; }; B66BF3B11B0C137E0082F8D6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -47,7 +37,6 @@ B66BF3B81B0C137E0082F8D6 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; B66BF3BD1B0C137E0082F8D6 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; B66BF3C01B0C137E0082F8D6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - B66BF3C61B0C137E0082F8D6 /* openshareTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = openshareTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; B66BF3CB1B0C137E0082F8D6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; B66BF3CC1B0C137E0082F8D6 /* openshareTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = openshareTests.m; sourceTree = ""; }; B66BF3D71B0C14480082F8D6 /* iconfont.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = iconfont.ttf; sourceTree = ""; }; @@ -70,6 +59,8 @@ B66BF3F71B0C23670082F8D6 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "Images.xcassets/LaunchImage.launchimage/Default@2x.png"; sourceTree = ""; }; B6E22B1D1B213B09001930CA /* OpenShare+Alipay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenShare+Alipay.h"; sourceTree = ""; }; B6E22B1E1B213B09001930CA /* OpenShare+Alipay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "OpenShare+Alipay.m"; sourceTree = ""; }; + D08B4B111D8FD254004BCB31 /* WebviewAuthHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebviewAuthHelper.h; path = ../openshare/WebviewAuthHelper.h; sourceTree = ""; }; + D08B4B121D8FD254004BCB31 /* WebviewAuthHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WebviewAuthHelper.m; path = ../openshare/WebviewAuthHelper.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -80,13 +71,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B66BF3C31B0C137E0082F8D6 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -103,7 +87,6 @@ isa = PBXGroup; children = ( B66BF3AD1B0C137E0082F8D6 /* openshare.app */, - B66BF3C61B0C137E0082F8D6 /* openshareTests.xctest */, ); name = Products; sourceTree = ""; @@ -167,6 +150,8 @@ B66BF3E11B0C16290082F8D6 /* OpenShare */ = { isa = PBXGroup; children = ( + D08B4B111D8FD254004BCB31 /* WebviewAuthHelper.h */, + D08B4B121D8FD254004BCB31 /* WebviewAuthHelper.m */, B66BF3E21B0C16290082F8D6 /* OpenShare+QQ.h */, B66BF3E31B0C16290082F8D6 /* OpenShare+QQ.m */, B66BF3E41B0C16290082F8D6 /* OpenShare+Renren.h */, @@ -205,24 +190,6 @@ productReference = B66BF3AD1B0C137E0082F8D6 /* openshare.app */; productType = "com.apple.product-type.application"; }; - B66BF3C51B0C137E0082F8D6 /* openshareTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = B66BF3D31B0C137E0082F8D6 /* Build configuration list for PBXNativeTarget "openshareTests" */; - buildPhases = ( - B66BF3C21B0C137E0082F8D6 /* Sources */, - B66BF3C31B0C137E0082F8D6 /* Frameworks */, - B66BF3C41B0C137E0082F8D6 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - B66BF3C81B0C137E0082F8D6 /* PBXTargetDependency */, - ); - name = openshareTests; - productName = openshareTests; - productReference = B66BF3C61B0C137E0082F8D6 /* openshareTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -234,10 +201,8 @@ TargetAttributes = { B66BF3AC1B0C137E0082F8D6 = { CreatedOnToolsVersion = 6.3.1; - }; - B66BF3C51B0C137E0082F8D6 = { - CreatedOnToolsVersion = 6.3.1; - TestTargetID = B66BF3AC1B0C137E0082F8D6; + DevelopmentTeam = CM2364627B; + ProvisioningStyle = Automatic; }; }; }; @@ -255,7 +220,6 @@ projectRoot = ""; targets = ( B66BF3AC1B0C137E0082F8D6 /* openshare */, - B66BF3C51B0C137E0082F8D6 /* openshareTests */, ); }; /* End PBXProject section */ @@ -275,13 +239,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B66BF3C41B0C137E0082F8D6 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -294,6 +251,7 @@ B66BF3B61B0C137E0082F8D6 /* AppDelegate.m in Sources */, B66BF3F41B0C1AEB0082F8D6 /* UIControl+Blocks.m in Sources */, B66BF3F11B0C16290082F8D6 /* OpenShare.m in Sources */, + D08B4B131D8FD254004BCB31 /* WebviewAuthHelper.m in Sources */, B66BF3B31B0C137E0082F8D6 /* main.m in Sources */, B66BF3EF1B0C16290082F8D6 /* OpenShare+Weibo.m in Sources */, B6E22B1F1B213B09001930CA /* OpenShare+Alipay.m in Sources */, @@ -302,24 +260,8 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B66BF3C21B0C137E0082F8D6 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B66BF3CD1B0C137E0082F8D6 /* openshareTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - B66BF3C81B0C137E0082F8D6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = B66BF3AC1B0C137E0082F8D6 /* openshare */; - targetProxy = B66BF3C71B0C137E0082F8D6 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin PBXVariantGroup section */ B66BF3BF1B0C137E0082F8D6 /* LaunchScreen.xib */ = { isa = PBXVariantGroup; @@ -419,10 +361,15 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEVELOPMENT_TEAM = CM2364627B; INFOPLIST_FILE = openshare/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = top.dawenhing.openshare; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Debug; }; @@ -431,44 +378,15 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEVELOPMENT_TEAM = CM2364627B; INFOPLIST_FILE = openshare/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = top.dawenhing.openshare; PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - B66BF3D41B0C137E0082F8D6 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = openshareTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/openshare.app/openshare"; - }; - name = Debug; - }; - B66BF3D51B0C137E0082F8D6 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = openshareTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/openshare.app/openshare"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Release; }; @@ -493,15 +411,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B66BF3D31B0C137E0082F8D6 /* Build configuration list for PBXNativeTarget "openshareTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B66BF3D41B0C137E0082F8D6 /* Debug */, - B66BF3D51B0C137E0082F8D6 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = B66BF3A51B0C137D0082F8D6 /* Project object */; diff --git a/OpenShareDemo/openshare.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/OpenShareDemo/openshare.xcodeproj/project.xcworkspace/contents.xcworkspacedata old mode 100644 new mode 100755 diff --git a/OpenShareDemo/openshare.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/OpenShareDemo/openshare.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings old mode 100644 new mode 100755 diff --git a/OpenShareDemo/openshare.xcodeproj/xcshareddata/xcschemes/openshare.xcscheme b/OpenShareDemo/openshare.xcodeproj/xcshareddata/xcschemes/openshare.xcscheme old mode 100644 new mode 100755 diff --git a/OpenShareDemo/openshare/AppDelegate.m b/OpenShareDemo/openshare/AppDelegate.m index 9a4874d..02dd6d7 100644 --- a/OpenShareDemo/openshare/AppDelegate.m +++ b/OpenShareDemo/openshare/AppDelegate.m @@ -21,7 +21,8 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( //第一步:注册key [OpenShare connectQQWithAppId:@"1103194207"]; - [OpenShare connectWeiboWithAppKey:@"402180334"]; + // TODO: 重新申请一个 + [OpenShare connectWeiboWithAppKey:@"1457440153" andAppSecret:@"a5829047ff43ce3f8835ec61e2df338a"]; [OpenShare connectWeixinWithAppId:@"wxd930ea5d5a258f4f"]; [OpenShare connectRenrenWithAppId:@"228525" AndAppKey:@"1dd8cba4215d4d4ab96a49d3058c1d7f"]; [OpenShare connectAlipay];//支付宝参数都是服务器端生成的,这里不需要key. diff --git a/OpenShareDemo/openshare/Images.xcassets/AppIcon.appiconset/Contents.json b/OpenShareDemo/openshare/Images.xcassets/AppIcon.appiconset/Contents.json index eff7289..9da1b19 100644 --- a/OpenShareDemo/openshare/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/OpenShareDemo/openshare/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, { "size" : "29x29", "idiom" : "iphone", @@ -36,6 +46,16 @@ "filename" : "logo180.png", "scale" : "3x" }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "idiom" : "ipad", "size" : "29x29", @@ -67,6 +87,11 @@ "idiom" : "ipad", "filename" : "logo-152.png", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" } ], "info" : { diff --git a/OpenShareDemo/openshare/Info.plist b/OpenShareDemo/openshare/Info.plist index 326a8fa..ed04f5b 100644 --- a/OpenShareDemo/openshare/Info.plist +++ b/OpenShareDemo/openshare/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - us.gfzj.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -18,14 +18,146 @@ 1.0 CFBundleSignature ???? + CFBundleURLTypes + + + CFBundleURLName + OpenShare + CFBundleURLSchemes + + openshare + wxd930ea5d5a258f4f + tencent1103194207 + tencent1103194207.content + QQ41C1685F + wb402180334 + wb2593037974 + renrenshare228525 + fb776442542471056 + + + CFBundleVersion 1 + LSApplicationQueriesSchemes + + wechat + weixin + sinaweibohd + sinaweibo + sinaweibosso + weibosdk + weibosdk2.5 + mqqapi + mqq + mqqOpensdkSSoLogin + mqqconnect + mqqopensdkdataline + mqqopensdkgrouptribeshare + mqqopensdkfriend + mqqopensdkapi + mqqopensdkapiV2 + mqqopensdkapiV3 + mqzoneopensdk + wtloginmqq + wtloginmqq2 + mqqwpa + mqzone + mqzonev2 + mqzoneshare + wtloginqzone + mqzonewx + mqzoneopensdkapiV2 + mqzoneopensdkapi19 + mqzoneopensdkapi + mqzoneopensdk + renrenios + renrenapi + renren + renreniphone + yixin + instagram + whatsapp + line + fbapi + fb-messenger-api + fbauth2 + fbshareextension + LSRequiresIPhoneOS + NSAppTransportSecurity + + NSExceptionDomains + + api.weibo.com + + NSIncludesSubdomains + + NSThirdPartyExceptionMinimumTLSVersion + TLSv1.0 + NSThirdPartyExceptionRequiresForwardSecrecy + + + open.weibo.cn + + NSIncludesSubdomains + + NSThirdPartyExceptionMinimumTLSVersion + TLSv1.0 + NSThirdPartyExceptionRequiresForwardSecrecy + + + openshare.gfzj.us + + NSExceptionAllowsInsecureHTTPLoads + + NSIncludesSubdomains + + NSThirdPartyExceptionMinimumTLSVersion + TLSv1.0 + NSThirdPartyExceptionRequiresForwardSecrecy + + + qq.com + + NSExceptionAllowsInsecureHTTPLoads + + NSIncludesSubdomains + + NSThirdPartyExceptionMinimumTLSVersion + TLSv1.0 + NSThirdPartyExceptionRequiresForwardSecrecy + + + sina.com.cn + + NSIncludesSubdomains + + NSThirdPartyExceptionMinimumTLSVersion + TLSv1.0 + NSThirdPartyExceptionRequiresForwardSecrecy + + + www.dawenhing.im + + NSExceptionAllowsInsecureHTTPLoads + + NSIncludesSubdomains + + NSThirdPartyExceptionMinimumTLSVersion + TLSv1.0 + NSThirdPartyExceptionRequiresForwardSecrecy + + + + + UIAppFonts + + iconfont.ttf + UILaunchStoryboardName LaunchScreen - - UIRequiredDeviceCapabilities armv7 @@ -38,104 +170,5 @@ UIInterfaceOrientationPortrait - - - CFBundleURLTypes - - - CFBundleURLName - OpenShare - CFBundleURLSchemes - - -openshare - -wxd930ea5d5a258f4f - -tencent1103194207 -tencent1103194207.content -QQ41C1685F - -wb402180334 - -renrenshare228525 - -fb776442542471056 - - - - - -UIAppFonts - - iconfont.ttf - - - -LSApplicationQueriesSchemes - - - wechat - weixin - - - sinaweibohd - sinaweibo - sinaweibosso - weibosdk - weibosdk2.5 - - - mqqapi - mqq - mqqOpensdkSSoLogin - mqqconnect - mqqopensdkdataline - mqqopensdkgrouptribeshare - mqqopensdkfriend - mqqopensdkapi - mqqopensdkapiV2 - mqqopensdkapiV3 - mqzoneopensdk - wtloginmqq - wtloginmqq2 - mqqwpa - mqzone - mqzonev2 - mqzoneshare - wtloginqzone - mqzonewx - mqzoneopensdkapiV2 - mqzoneopensdkapi19 - mqzoneopensdkapi - mqzoneopensdk - - - renrenios - renrenapi - renren - renreniphone - - - yixin - - - instagram - - - whatsapp - - - line - - - fbapi - fb-messenger-api - fbauth2 - fbshareextension - - - - diff --git a/OpenShareDemo/openshare/ViewController.m b/OpenShareDemo/openshare/ViewController.m index c64dafc..4a913ec 100644 --- a/OpenShareDemo/openshare/ViewController.m +++ b/OpenShareDemo/openshare/ViewController.m @@ -149,7 +149,7 @@ -(UIView*)sinaWeiboView:(CGRect)frame{ UIButton *auth=[self button:@"登录" WithCenter:CGPointMake(frame.size.width/2, 40)]; [ret addSubview:auth]; [auth addEventHandler:^(id sender) { - [OpenShare WeiboAuth:@"all" redirectURI:@"http://openshare.gfzj.us/" Success:^(NSDictionary *message) { + [OpenShare WeiboAuth:@"all" redirectURI:@"www.dawenhing.im" Success:^(NSDictionary *message) { ULog(@"微博登录成功:\n%@",message); } Fail:^(NSDictionary *message, NSError *error) { ULog(@"微博登录失败:\n%@\n%@",message,error); @@ -550,4 +550,4 @@ - (UIImage *)imageWithColor:(UIColor *)color return image; } -@end \ No newline at end of file +@end diff --git a/OpenShareDemo/openshareTests/Info.plist b/OpenShareDemo/openshareTests/Info.plist index 61dad52..ba72822 100644 --- a/OpenShareDemo/openshareTests/Info.plist +++ b/OpenShareDemo/openshareTests/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - us.gfzj.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/openshare/OpenShare+Weibo.h b/openshare/OpenShare+Weibo.h index 9c4ec9c..36f2d72 100644 --- a/openshare/OpenShare+Weibo.h +++ b/openshare/OpenShare+Weibo.h @@ -15,7 +15,7 @@ * * @param appKey 申请到的appKey */ -+(void)connectWeiboWithAppKey:(NSString *)appKey; ++(void)connectWeiboWithAppKey:(NSString *)appKey andAppSecret:(NSString *)secret; +(BOOL)isWeiboInstalled; /** * 分享到微博,微博只支持三种类型:文本/图片/链接。根据OSMessage自动判定想分享的类型。 diff --git a/openshare/OpenShare+Weibo.m b/openshare/OpenShare+Weibo.m index 612c38a..f3d79da 100644 --- a/openshare/OpenShare+Weibo.m +++ b/openshare/OpenShare+Weibo.m @@ -10,8 +10,8 @@ @implementation OpenShare (Weibo) static NSString *schema=@"Weibo"; -+(void)connectWeiboWithAppKey:(NSString *)appKey{ - [self set:schema Keys:@{@"appKey":appKey}]; ++(void)connectWeiboWithAppKey:(NSString *)appKey andAppSecret:(NSString *)secret { + [self set:schema Keys:@{@"appKey":appKey, @"appSecret": secret}]; } +(BOOL)isWeiboInstalled{ return [self canOpen:@"weibosdk://request"]; @@ -71,29 +71,36 @@ +(void)WeiboAuth:(NSString*)scope redirectURI:(NSString*)redirectURI Success:(au if (![self beginAuth:schema Success:success Fail:fail]) { return; } - NSString *uuid=[[NSUUID UUID] UUIDString]; - NSArray *authData=@[ - @{@"transferObject":[NSKeyedArchiver archivedDataWithRootObject:@{ - @"__class" :@"WBAuthorizeRequest", - @"redirectURI":redirectURI, - @"requestID" :uuid, - @"scope": scope?:@"all" - }]}, - @{@"userInfo":[NSKeyedArchiver archivedDataWithRootObject:@{ - @"mykey":@"as you like", - @"SSO_From" : @"SendMessageToWeiboViewController" - }] - }, - - @{@"app":[NSKeyedArchiver archivedDataWithRootObject:@{ - @"appKey" :[self keyFor:schema][@"appKey"], - @"bundleID" : [self CFBundleIdentifier], - @"name" :[self CFBundleDisplayName] - }] - } - ]; - [UIPasteboard generalPasteboard].items=authData; - [self openURL:[NSString stringWithFormat:@"weibosdk://request?id=%@&sdkversion=003013000",uuid]]; + if ([self isWeiboInstalled]) { + NSString *uuid=[[NSUUID UUID] UUIDString]; + NSArray *authData=@[ + @{@"transferObject":[NSKeyedArchiver archivedDataWithRootObject:@{ + @"__class" :@"WBAuthorizeRequest", + @"redirectURI":redirectURI, + @"requestID" :uuid, + @"scope": scope?:@"all" + }]}, + @{@"userInfo":[NSKeyedArchiver archivedDataWithRootObject:@{ + @"mykey":@"as you like", + @"SSO_From" : @"SendMessageToWeiboViewController" + }] + }, + + @{@"app":[NSKeyedArchiver archivedDataWithRootObject:@{ + @"appKey" :[self keyFor:schema][@"appKey"], + @"bundleID" : [self CFBundleIdentifier], + @"name" :[self CFBundleDisplayName] + }] + } + ]; + [UIPasteboard generalPasteboard].items=authData; + [self openURL:[NSString stringWithFormat:@"weibosdk://request?id=%@&sdkversion=003013000",uuid]]; + } + else { + // Web OAuth + NSString *webOAuth = [NSString stringWithFormat:@"https://open.weibo.cn/oauth2/authorize?client_id=%@&client_secret=%@&response_type=code&redirect_uri=%@&scope=%@", [self keyFor:schema][@"appKey"], [self keyFor:schema][@"appSecret"], redirectURI, scope?:@"all"]; + [self openWebAuth:webOAuth redirectURI:redirectURI]; + } } +(BOOL)Weibo_handleOpenURL{ diff --git a/openshare/OpenShare.h b/openshare/OpenShare.h index d8e211f..9c4cf71 100644 --- a/openshare/OpenShare.h +++ b/openshare/OpenShare.h @@ -8,6 +8,7 @@ #import #import + /** 分享类型,除了news以外,还可能是video/audio/app等。 */ @@ -34,6 +35,8 @@ typedef enum : NSUInteger { @property NSString* mediaDataUrl; @property NSString* fileExt; @property (nonatomic, strong) NSData *file; /// 微信分享gif/文件 + +//@property (nonatomic, strong) UIWebView *authWebview; /** * 判断emptyValueForKeys的value都是空的,notEmptyValueForKeys的value都不是空的。 * @@ -141,6 +144,9 @@ typedef enum : NSUInteger { + (NSData *)dataWithImage:(UIImage *)image; + (NSData *)dataWithImage:(UIImage *)image scale:(CGSize)size; ++ (void)openWebAuth:(NSString *)webAuth redirectURI:(NSString *)redirectURI; ++ (void)finishWebAuthWithResult:(NSDictionary *)info error:(NSError *)error; + @end diff --git a/openshare/OpenShare.m b/openshare/OpenShare.m index 3dfd543..7f35ea5 100644 --- a/openshare/OpenShare.m +++ b/openshare/OpenShare.m @@ -7,6 +7,8 @@ // #import "OpenShare.h" +#import "WebviewAuthHelper.h" +#import @implementation OpenShare /** @@ -269,6 +271,25 @@ - (UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)size{ return scaledImage; } ++ (void)openWebAuth:(NSString *)webAuth redirectURI:(NSString *)redirectURI { + NSURL *URL = [NSURL URLWithString:webAuth]; + NSURLRequest *request = [[NSURLRequest alloc] initWithURL:URL]; + WebviewAuthHelper *helper = [[WebviewAuthHelper alloc] init]; + helper.finishRedirectURI = redirectURI; + WKWebView *webview = helper.webview; + [webview loadRequest:request]; + [helper showAuthview]; +} + ++ (void)finishWebAuthWithResult:(NSDictionary *)info error:(NSError *)error{ + if (error) { + NSLog(@"finished with error:%@", error); + } + else { + NSLog(@"auth result:%@", info); + } +} + @end @implementation OSMessage @@ -296,4 +317,4 @@ -(BOOL)isEmpty:(NSArray*)emptyValueForKeys AndNotEmpty:(NSArray*)notEmptyValueFo } } -@end \ No newline at end of file +@end diff --git a/openshare/WebviewAuthHelper.h b/openshare/WebviewAuthHelper.h new file mode 100644 index 0000000..5eea81e --- /dev/null +++ b/openshare/WebviewAuthHelper.h @@ -0,0 +1,20 @@ +// +// WebviewAuthHelpeer.h +// openshare +// +// Created by dourgulf on 16/9/18. +// + +#import +#import + +@interface WebviewAuthHelper : NSObject + +@property (copy, nonatomic) NSString *finishRedirectURI; +@property (strong, readonly, nonatomic) WKWebView *webview; +@property (strong, readonly, nonatomic) UIActivityIndicatorView *loadingIV; + +- (void)showAuthview; + + +@end diff --git a/openshare/WebviewAuthHelper.m b/openshare/WebviewAuthHelper.m new file mode 100644 index 0000000..f3d39c7 --- /dev/null +++ b/openshare/WebviewAuthHelper.m @@ -0,0 +1,218 @@ +// +// WebviewAuthHelpeer.m +// openshare +// +// Created by dourgulf on 16/9/18. +// + +#import "WebviewAuthHelper.h" +#import "OpenShare.h" + +@interface WebviewAuthHelper() + +@property (strong, nonatomic) UIView *containerView; +@property (strong, nonatomic) WKWebView *webview; +@property (strong, nonatomic) UIActivityIndicatorView *loadingIV; +@property (strong, nonatomic) NSDictionary *loadingParameters; + +@property (strong, nonatomic) id keepInMemory; + +@end + +@implementation WebviewAuthHelper + +- (instancetype)init +{ + self = [super init]; + if (self) { + _containerView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIButton *closeButton = [UIButton buttonWithType:UIButtonTypeSystem]; + closeButton.frame = CGRectMake(8, 20, 80, 36); + closeButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; + [closeButton setTitle:@"关闭" forState:UIControlStateNormal]; + [closeButton addTarget:self action:@selector(didPressCloseButton) forControlEvents:UIControlEventTouchUpInside]; + [_containerView addSubview:closeButton]; + + CGRect frame = [UIScreen mainScreen].bounds; + frame.origin.y = 25 + 36; + _webview = [[WKWebView alloc] initWithFrame:frame]; + [_containerView addSubview:_webview]; + _webview.navigationDelegate = self; + _loadingIV = [[UIActivityIndicatorView alloc] init]; + _loadingIV.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; + [_webview addSubview:_loadingIV]; + } + return self; +} + +- (void)dealloc +{ +#ifdef DEBUG + NSLog(@"%@ dealloc", NSStringFromClass([self class])); +#endif +} + +- (void)startLoadingIndicator{ + _loadingIV.center = _webview.center; + [_loadingIV startAnimating]; +} + +- (void)stopLoadingIndicator { + [_loadingIV stopAnimating]; +} + +- (void)didPressCloseButton { + NSLog(@"User cancelled"); + [self closeAuthviewWithResult:nil error:[NSError errorWithDomain:@"User Cancelled" code:-1 userInfo:nil]]; +} + +#pragma mark 视图显示生命周期 +- (void)showAuthview { + self.keepInMemory = self; + CGRect frame = _containerView.frame; + frame.origin.y = frame.size.height; + _containerView.frame = frame; + [[UIApplication sharedApplication].keyWindow addSubview:_containerView]; + [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ + CGRect newFrame = frame; + newFrame.origin.y = 0; + _containerView.frame = newFrame; + } completion: nil]; +} + +- (void)closeAuthviewWithResult:(NSDictionary *)info error:(NSError *)err { + CGRect frame = _containerView.frame; + frame.origin.y = frame.size.height; + [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ + _containerView.frame = frame; + } completion:^(BOOL finished) { + [_containerView removeFromSuperview]; + [OpenShare finishWebAuthWithResult:info error:err]; + self.keepInMemory = nil; + }]; +} + +#pragma mark 辅助方法 +- (NSDictionary *)extractParametersOfURI:(NSURL *)URL { + NSURLComponents *components = [NSURLComponents componentsWithURL:URL resolvingAgainstBaseURL:NO]; + NSMutableDictionary *params = [NSMutableDictionary dictionary]; + for (NSURLQueryItem *item in components.queryItems) { + [params setObject:item.value forKey:item.name]; + } + return params; +} + +- (BOOL)isFinishRedirectURI:(NSURL *)URL { + NSString *host = [URL host]; + NSLog(@"isFinishRedirectURI:%@, %@", host, self.finishRedirectURI); + return self.finishRedirectURI.length > 0 && [self.finishRedirectURI containsString:host]; +} + +- (void)postRequestURL:(NSURL *)URL completion:(void(^)(NSDictionary *info, NSError *err))handler { + NSURLSessionConfiguration *configure = [NSURLSessionConfiguration defaultSessionConfiguration]; + NSURLSession *session = [NSURLSession sessionWithConfiguration:configure]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; + request.HTTPMethod = @"POST"; + NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + if (error == nil && data != nil) { + NSError *error; + NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; + if (!error && [json isKindOfClass:[NSDictionary class]]) { + if (handler) { + handler(json, nil); + } + } + else { + NSString *info = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + NSLog(@"JSON serailzation error:%@, %@", error, info); + } + } + else { + if (handler) { + handler(nil, error); + } + } + }]; + [task resume]; +} + +#pragma mark - WKWebView代理方法 + +// 页面开始加载时调用 +- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation { + [self startLoadingIndicator]; +} + +// 收到服务器的跳转请求的时候触发 +- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(null_unspecified WKNavigation *)navigation { + NSURL *navURL = webView.URL; + if ([self isFinishRedirectURI:navURL]) { + NSDictionary *codeParams = [self extractParametersOfURI:navURL]; + NSString *code = codeParams[@"code"]; + if (code.length > 0) { + [webView stopLoading]; + NSMutableString *userInfoAPI = [NSMutableString stringWithString:@"https://api.weibo.com/oauth2/access_token?"]; + [userInfoAPI appendFormat:@"code=%@", code]; + [userInfoAPI appendFormat:@"&client_id=%@", self.loadingParameters[@"client_id"]]; + [userInfoAPI appendFormat:@"&client_secret=%@", self.loadingParameters[@"client_secret"]]; + [userInfoAPI appendFormat:@"&redirect_uri=%@", self.loadingParameters[@"redirect_uri"]]; + [userInfoAPI appendString:@"&grant_type=authorization_code"]; + NSLog(@"redirect %@", userInfoAPI); + [self postRequestURL:[NSURL URLWithString:userInfoAPI] completion:^(NSDictionary *info, NSError *err) { + NSLog(@"completion info:%@", info); + dispatch_async(dispatch_get_main_queue(), ^{ + // 把字典修正 + NSString *accessToken = info[@"access_token"]? : @""; + NSString *userID = info[@"uid"] ? : @""; + NSDictionary *normalInfo = @{@"accessToken": accessToken, @"userID": userID}; + [self closeAuthviewWithResult:normalInfo error:err]; + }); + }]; + } + else { + [self closeAuthviewWithResult:nil error:nil]; + } + } +} + +// 页面加载完成之后调用 +- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation { + [self stopLoadingIndicator]; + + // 把微博授权的注册按钮屏蔽掉 + if ([webView.URL.host containsString:@"open.weibo.cn"]) { + // 这个OAuth认证好可怕呀, 恶意APP是不是可以随便添加脚本获得用户的账号信息.... + NSString *scriptString = @"document.querySelector('aside.logins').style.display = 'none';"; + [webView evaluateJavaScript:scriptString completionHandler:nil]; + // TODO: 这里可能实现不够严谨 + NSDictionary *params = [self extractParametersOfURI:webView.URL]; + if (params.count > 0) { + self.loadingParameters = params; + } + } +} + +// 页面加载失败时调用 +- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error +{ + [self stopLoadingIndicator]; + NSURL *failingURL = [[error userInfo] objectForKey:NSURLErrorFailingURLErrorKey]; + if (![self isFinishRedirectURI:failingURL]) { + [self closeAuthviewWithResult:nil error:error]; + } +} + +- (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error { + [self stopLoadingIndicator]; + NSURL *failingURL = [[error userInfo] objectForKey:NSURLErrorFailingURLErrorKey]; + if (![self isFinishRedirectURI:failingURL]) { + [self closeAuthviewWithResult:nil error:error]; + } +} + +- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView { + [self stopLoadingIndicator]; + [self closeAuthviewWithResult:nil error:[NSError errorWithDomain:@"Terminated" code:-2 userInfo:nil]]; +} + +@end From 5f4c514ce7db05453c119b72e6b3fa1d95c4a75d Mon Sep 17 00:00:00 2001 From: dourgulf Date: Tue, 20 Sep 2016 10:07:12 +0800 Subject: [PATCH 2/3] Add Weibo Web OAuth when APP not installed. --- openshare/OpenShare.m | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/openshare/OpenShare.m b/openshare/OpenShare.m index 7f35ea5..1583a62 100644 --- a/openshare/OpenShare.m +++ b/openshare/OpenShare.m @@ -282,11 +282,17 @@ + (void)openWebAuth:(NSString *)webAuth redirectURI:(NSString *)redirectURI { } + (void)finishWebAuthWithResult:(NSDictionary *)info error:(NSError *)error{ - if (error) { - NSLog(@"finished with error:%@", error); + if (!error) { + NSLog(@"auth result:%@", info); + if (self.authSuccessCallback) { + self.authSuccessCallback(info); + } } else { - NSLog(@"auth result:%@", info); + NSLog(@"finished with error:%@", error); + if (self.authFailCallback) { + self.authFailCallback(info, error); + } } } From a2c52435664b63deaded05009c39773ca09ff21a Mon Sep 17 00:00:00 2001 From: dourgulf Date: Tue, 20 Sep 2016 10:11:06 +0800 Subject: [PATCH 3/3] Add test case in project setting --- OpenShareDemo/Open ShareTests/Info.plist | 22 +++ .../Open ShareTests/Open_ShareTests.m | 39 ++++++ .../openshare.xcodeproj/project.pbxproj | 126 ++++++++++++++++++ .../xcshareddata/xcschemes/openshare.xcscheme | 21 ++- 4 files changed, 204 insertions(+), 4 deletions(-) create mode 100644 OpenShareDemo/Open ShareTests/Info.plist create mode 100644 OpenShareDemo/Open ShareTests/Open_ShareTests.m diff --git a/OpenShareDemo/Open ShareTests/Info.plist b/OpenShareDemo/Open ShareTests/Info.plist new file mode 100644 index 0000000..6c6c23c --- /dev/null +++ b/OpenShareDemo/Open ShareTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/OpenShareDemo/Open ShareTests/Open_ShareTests.m b/OpenShareDemo/Open ShareTests/Open_ShareTests.m new file mode 100644 index 0000000..68ce25f --- /dev/null +++ b/OpenShareDemo/Open ShareTests/Open_ShareTests.m @@ -0,0 +1,39 @@ +// +// Open_ShareTests.m +// Open ShareTests +// +// Created by jinchu darwin on 16/9/20. +// Copyright © 2016年 OpenShare http://openshare.gfzj.us/. All rights reserved. +// + +#import + +@interface Open_ShareTests : XCTestCase + +@end + +@implementation Open_ShareTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end diff --git a/OpenShareDemo/openshare.xcodeproj/project.pbxproj b/OpenShareDemo/openshare.xcodeproj/project.pbxproj index d446968..a11ff89 100755 --- a/OpenShareDemo/openshare.xcodeproj/project.pbxproj +++ b/OpenShareDemo/openshare.xcodeproj/project.pbxproj @@ -24,9 +24,20 @@ B66BF3F41B0C1AEB0082F8D6 /* UIControl+Blocks.m in Sources */ = {isa = PBXBuildFile; fileRef = B66BF3F31B0C1AEB0082F8D6 /* UIControl+Blocks.m */; }; B66BF3F81B0C23670082F8D6 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B66BF3F71B0C23670082F8D6 /* Default@2x.png */; }; B6E22B1F1B213B09001930CA /* OpenShare+Alipay.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E22B1E1B213B09001930CA /* OpenShare+Alipay.m */; }; + D02886531D90D22200269A24 /* Open_ShareTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D02886521D90D22200269A24 /* Open_ShareTests.m */; }; D08B4B131D8FD254004BCB31 /* WebviewAuthHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = D08B4B121D8FD254004BCB31 /* WebviewAuthHelper.m */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + D02886551D90D22200269A24 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B66BF3A51B0C137D0082F8D6 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B66BF3AC1B0C137E0082F8D6; + remoteInfo = openshare; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ B66BF3AD1B0C137E0082F8D6 /* openshare.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = openshare.app; sourceTree = BUILT_PRODUCTS_DIR; }; B66BF3B11B0C137E0082F8D6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -59,6 +70,9 @@ B66BF3F71B0C23670082F8D6 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "Images.xcassets/LaunchImage.launchimage/Default@2x.png"; sourceTree = ""; }; B6E22B1D1B213B09001930CA /* OpenShare+Alipay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenShare+Alipay.h"; sourceTree = ""; }; B6E22B1E1B213B09001930CA /* OpenShare+Alipay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "OpenShare+Alipay.m"; sourceTree = ""; }; + D02886501D90D22200269A24 /* Open ShareTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Open ShareTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + D02886521D90D22200269A24 /* Open_ShareTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Open_ShareTests.m; sourceTree = ""; }; + D02886541D90D22200269A24 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D08B4B111D8FD254004BCB31 /* WebviewAuthHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebviewAuthHelper.h; path = ../openshare/WebviewAuthHelper.h; sourceTree = ""; }; D08B4B121D8FD254004BCB31 /* WebviewAuthHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WebviewAuthHelper.m; path = ../openshare/WebviewAuthHelper.m; sourceTree = ""; }; /* End PBXFileReference section */ @@ -71,6 +85,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D028864D1D90D22200269A24 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -79,6 +100,7 @@ children = ( B66BF3AF1B0C137E0082F8D6 /* openshare */, B66BF3C91B0C137E0082F8D6 /* openshareTests */, + D02886511D90D22200269A24 /* Open ShareTests */, B66BF3AE1B0C137E0082F8D6 /* Products */, ); sourceTree = ""; @@ -87,6 +109,7 @@ isa = PBXGroup; children = ( B66BF3AD1B0C137E0082F8D6 /* openshare.app */, + D02886501D90D22200269A24 /* Open ShareTests.xctest */, ); name = Products; sourceTree = ""; @@ -170,6 +193,15 @@ path = ../../OpenShare; sourceTree = ""; }; + D02886511D90D22200269A24 /* Open ShareTests */ = { + isa = PBXGroup; + children = ( + D02886521D90D22200269A24 /* Open_ShareTests.m */, + D02886541D90D22200269A24 /* Info.plist */, + ); + path = "Open ShareTests"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -190,6 +222,24 @@ productReference = B66BF3AD1B0C137E0082F8D6 /* openshare.app */; productType = "com.apple.product-type.application"; }; + D028864F1D90D22200269A24 /* Open ShareTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = D02886571D90D22200269A24 /* Build configuration list for PBXNativeTarget "Open ShareTests" */; + buildPhases = ( + D028864C1D90D22200269A24 /* Sources */, + D028864D1D90D22200269A24 /* Frameworks */, + D028864E1D90D22200269A24 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + D02886561D90D22200269A24 /* PBXTargetDependency */, + ); + name = "Open ShareTests"; + productName = "Open ShareTests"; + productReference = D02886501D90D22200269A24 /* Open ShareTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -204,6 +254,12 @@ DevelopmentTeam = CM2364627B; ProvisioningStyle = Automatic; }; + D028864F1D90D22200269A24 = { + CreatedOnToolsVersion = 8.0; + DevelopmentTeam = CM2364627B; + ProvisioningStyle = Automatic; + TestTargetID = B66BF3AC1B0C137E0082F8D6; + }; }; }; buildConfigurationList = B66BF3A81B0C137D0082F8D6 /* Build configuration list for PBXProject "openshare" */; @@ -220,6 +276,7 @@ projectRoot = ""; targets = ( B66BF3AC1B0C137E0082F8D6 /* openshare */, + D028864F1D90D22200269A24 /* Open ShareTests */, ); }; /* End PBXProject section */ @@ -239,6 +296,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D028864E1D90D22200269A24 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -260,8 +324,24 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D028864C1D90D22200269A24 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D02886531D90D22200269A24 /* Open_ShareTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + D02886561D90D22200269A24 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B66BF3AC1B0C137E0082F8D6 /* openshare */; + targetProxy = D02886551D90D22200269A24 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ B66BF3BF1B0C137E0082F8D6 /* LaunchScreen.xib */ = { isa = PBXVariantGroup; @@ -390,6 +470,44 @@ }; name = Release; }; + D02886581D90D22200269A24 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = CM2364627B; + ENABLE_TESTABILITY = YES; + INFOPLIST_FILE = "Open ShareTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "top.dawenhing.Open-ShareTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/openshare.app/openshare"; + }; + name = Debug; + }; + D02886591D90D22200269A24 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEVELOPMENT_TEAM = CM2364627B; + INFOPLIST_FILE = "Open ShareTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "top.dawenhing.Open-ShareTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/openshare.app/openshare"; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -411,6 +529,14 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + D02886571D90D22200269A24 /* Build configuration list for PBXNativeTarget "Open ShareTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D02886581D90D22200269A24 /* Debug */, + D02886591D90D22200269A24 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; /* End XCConfigurationList section */ }; rootObject = B66BF3A51B0C137D0082F8D6 /* Project object */; diff --git a/OpenShareDemo/openshare.xcodeproj/xcshareddata/xcschemes/openshare.xcscheme b/OpenShareDemo/openshare.xcodeproj/xcshareddata/xcschemes/openshare.xcscheme index 13fbe3c..3590d05 100755 --- a/OpenShareDemo/openshare.xcodeproj/xcshareddata/xcschemes/openshare.xcscheme +++ b/OpenShareDemo/openshare.xcodeproj/xcshareddata/xcschemes/openshare.xcscheme @@ -37,10 +37,10 @@ + shouldUseLaunchSchemeArgsEnv = "YES"> @@ -52,6 +52,16 @@ ReferencedContainer = "container:openshare.xcodeproj"> + + + + + + @@ -86,10 +99,10 @@