From 2cc60ffeaa25a3e87c9a6799e74cb3d46dea08e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=98=9F=E5=AE=87?= Date: Sat, 4 Jun 2016 11:44:38 +0800 Subject: [PATCH 01/18] Add ownership in ARC --- KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.h b/KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.h index 1030cd3..3aa0033 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.h +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.h @@ -49,7 +49,7 @@ typedef void(^KtServerAPICompletionBlock)(KtBaseServerAPI *); @property (nonatomic, retain) NSError *error; // code为IDPErrorEnum类型,服务器返回存放在userInfo的errno和errmsg里 @property (nonatomic, retain) NSDictionary *jsonData; // 解析出的JSON @property (nonatomic, retain) NSData *rawData; // 原始data,用于二进制结果 -@property (nonatomic, readonly) NSString *rawString; // 原始字符串,用于文本结果,lazyloading +@property (nonatomic, readonly, copy) NSString *rawString; // 原始字符串,用于文本结果,lazyloading @property (nonatomic, retain) id protobufParserData; // 服务器返回的protobuf解析后的数据 // state From 03128c8cd0b26d65443eb748647c85c1da0cc3e2 Mon Sep 17 00:00:00 2001 From: bestswifter Date: Sun, 24 Jul 2016 23:51:05 +0800 Subject: [PATCH 02/18] =?UTF-8?q?=E5=88=A9=E7=94=A8=20runloop=20=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E7=BA=BF=E7=A8=8B=E4=BF=9D=E6=B4=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 308 ++++++++++++++++++ .../RunloopAndThread/AppDelegate.h | 17 + .../RunloopAndThread/AppDelegate.m | 45 +++ .../AppIcon.appiconset/Contents.json | 38 +++ .../Base.lproj/LaunchScreen.storyboard | 27 ++ .../Base.lproj/Main.storyboard | 25 ++ RunloopAndThread/RunloopAndThread/Info.plist | 40 +++ .../RunloopAndThread/ViewController.h | 15 + .../RunloopAndThread/ViewController.m | 105 ++++++ RunloopAndThread/RunloopAndThread/main.m | 16 + 10 files changed, 636 insertions(+) create mode 100644 RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj create mode 100644 RunloopAndThread/RunloopAndThread/AppDelegate.h create mode 100644 RunloopAndThread/RunloopAndThread/AppDelegate.m create mode 100644 RunloopAndThread/RunloopAndThread/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 RunloopAndThread/RunloopAndThread/Base.lproj/LaunchScreen.storyboard create mode 100644 RunloopAndThread/RunloopAndThread/Base.lproj/Main.storyboard create mode 100644 RunloopAndThread/RunloopAndThread/Info.plist create mode 100644 RunloopAndThread/RunloopAndThread/ViewController.h create mode 100644 RunloopAndThread/RunloopAndThread/ViewController.m create mode 100644 RunloopAndThread/RunloopAndThread/main.m diff --git a/RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj b/RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2b68ea4 --- /dev/null +++ b/RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj @@ -0,0 +1,308 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 9BAA82A81D451A0E00E5B98A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BAA82A71D451A0E00E5B98A /* main.m */; }; + 9BAA82AB1D451A0E00E5B98A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BAA82AA1D451A0E00E5B98A /* AppDelegate.m */; }; + 9BAA82AE1D451A0E00E5B98A /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BAA82AD1D451A0E00E5B98A /* ViewController.m */; }; + 9BAA82B11D451A0E00E5B98A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9BAA82AF1D451A0E00E5B98A /* Main.storyboard */; }; + 9BAA82B31D451A0E00E5B98A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9BAA82B21D451A0E00E5B98A /* Assets.xcassets */; }; + 9BAA82B61D451A0E00E5B98A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9BAA82B41D451A0E00E5B98A /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 9BAA82A31D451A0E00E5B98A /* RunloopAndThread.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RunloopAndThread.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 9BAA82A71D451A0E00E5B98A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 9BAA82A91D451A0E00E5B98A /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 9BAA82AA1D451A0E00E5B98A /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 9BAA82AC1D451A0E00E5B98A /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 9BAA82AD1D451A0E00E5B98A /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 9BAA82B01D451A0E00E5B98A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 9BAA82B21D451A0E00E5B98A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 9BAA82B51D451A0E00E5B98A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 9BAA82B71D451A0E00E5B98A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 9BAA82A01D451A0E00E5B98A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9BAA829A1D451A0E00E5B98A = { + isa = PBXGroup; + children = ( + 9BAA82A51D451A0E00E5B98A /* RunloopAndThread */, + 9BAA82A41D451A0E00E5B98A /* Products */, + ); + sourceTree = ""; + }; + 9BAA82A41D451A0E00E5B98A /* Products */ = { + isa = PBXGroup; + children = ( + 9BAA82A31D451A0E00E5B98A /* RunloopAndThread.app */, + ); + name = Products; + sourceTree = ""; + }; + 9BAA82A51D451A0E00E5B98A /* RunloopAndThread */ = { + isa = PBXGroup; + children = ( + 9BAA82A91D451A0E00E5B98A /* AppDelegate.h */, + 9BAA82AA1D451A0E00E5B98A /* AppDelegate.m */, + 9BAA82AC1D451A0E00E5B98A /* ViewController.h */, + 9BAA82AD1D451A0E00E5B98A /* ViewController.m */, + 9BAA82AF1D451A0E00E5B98A /* Main.storyboard */, + 9BAA82B21D451A0E00E5B98A /* Assets.xcassets */, + 9BAA82B41D451A0E00E5B98A /* LaunchScreen.storyboard */, + 9BAA82B71D451A0E00E5B98A /* Info.plist */, + 9BAA82A61D451A0E00E5B98A /* Supporting Files */, + ); + path = RunloopAndThread; + sourceTree = ""; + }; + 9BAA82A61D451A0E00E5B98A /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 9BAA82A71D451A0E00E5B98A /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 9BAA82A21D451A0E00E5B98A /* RunloopAndThread */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9BAA82BA1D451A0E00E5B98A /* Build configuration list for PBXNativeTarget "RunloopAndThread" */; + buildPhases = ( + 9BAA829F1D451A0E00E5B98A /* Sources */, + 9BAA82A01D451A0E00E5B98A /* Frameworks */, + 9BAA82A11D451A0E00E5B98A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RunloopAndThread; + productName = RunloopAndThread; + productReference = 9BAA82A31D451A0E00E5B98A /* RunloopAndThread.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 9BAA829B1D451A0E00E5B98A /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0730; + ORGANIZATIONNAME = bestswifter; + TargetAttributes = { + 9BAA82A21D451A0E00E5B98A = { + CreatedOnToolsVersion = 7.3.1; + DevelopmentTeam = U2HX3RFD94; + }; + }; + }; + buildConfigurationList = 9BAA829E1D451A0E00E5B98A /* Build configuration list for PBXProject "RunloopAndThread" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 9BAA829A1D451A0E00E5B98A; + productRefGroup = 9BAA82A41D451A0E00E5B98A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 9BAA82A21D451A0E00E5B98A /* RunloopAndThread */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 9BAA82A11D451A0E00E5B98A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9BAA82B61D451A0E00E5B98A /* LaunchScreen.storyboard in Resources */, + 9BAA82B31D451A0E00E5B98A /* Assets.xcassets in Resources */, + 9BAA82B11D451A0E00E5B98A /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 9BAA829F1D451A0E00E5B98A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9BAA82AE1D451A0E00E5B98A /* ViewController.m in Sources */, + 9BAA82AB1D451A0E00E5B98A /* AppDelegate.m in Sources */, + 9BAA82A81D451A0E00E5B98A /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 9BAA82AF1D451A0E00E5B98A /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 9BAA82B01D451A0E00E5B98A /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 9BAA82B41D451A0E00E5B98A /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 9BAA82B51D451A0E00E5B98A /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 9BAA82B81D451A0E00E5B98A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 9BAA82B91D451A0E00E5B98A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 9BAA82BB1D451A0E00E5B98A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = RunloopAndThread/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = baidu.RunloopAndThread; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 9BAA82BC1D451A0E00E5B98A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = RunloopAndThread/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = baidu.RunloopAndThread; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 9BAA829E1D451A0E00E5B98A /* Build configuration list for PBXProject "RunloopAndThread" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9BAA82B81D451A0E00E5B98A /* Debug */, + 9BAA82B91D451A0E00E5B98A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9BAA82BA1D451A0E00E5B98A /* Build configuration list for PBXNativeTarget "RunloopAndThread" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9BAA82BB1D451A0E00E5B98A /* Debug */, + 9BAA82BC1D451A0E00E5B98A /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 9BAA829B1D451A0E00E5B98A /* Project object */; +} diff --git a/RunloopAndThread/RunloopAndThread/AppDelegate.h b/RunloopAndThread/RunloopAndThread/AppDelegate.h new file mode 100644 index 0000000..fe7f9b2 --- /dev/null +++ b/RunloopAndThread/RunloopAndThread/AppDelegate.h @@ -0,0 +1,17 @@ +// +// AppDelegate.h +// RunloopAndThread +// +// Created by 张星宇 on 16/7/24. +// Copyright © 2016年 bestswifter. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/RunloopAndThread/RunloopAndThread/AppDelegate.m b/RunloopAndThread/RunloopAndThread/AppDelegate.m new file mode 100644 index 0000000..abb96e3 --- /dev/null +++ b/RunloopAndThread/RunloopAndThread/AppDelegate.m @@ -0,0 +1,45 @@ +// +// AppDelegate.m +// RunloopAndThread +// +// Created by 张星宇 on 16/7/24. +// Copyright © 2016年 bestswifter. All rights reserved. +// + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + +@end diff --git a/RunloopAndThread/RunloopAndThread/Assets.xcassets/AppIcon.appiconset/Contents.json b/RunloopAndThread/RunloopAndThread/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/RunloopAndThread/RunloopAndThread/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/RunloopAndThread/RunloopAndThread/Base.lproj/LaunchScreen.storyboard b/RunloopAndThread/RunloopAndThread/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..2e721e1 --- /dev/null +++ b/RunloopAndThread/RunloopAndThread/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RunloopAndThread/RunloopAndThread/Base.lproj/Main.storyboard b/RunloopAndThread/RunloopAndThread/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f56d2f3 --- /dev/null +++ b/RunloopAndThread/RunloopAndThread/Base.lproj/Main.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RunloopAndThread/RunloopAndThread/Info.plist b/RunloopAndThread/RunloopAndThread/Info.plist new file mode 100644 index 0000000..6905cc6 --- /dev/null +++ b/RunloopAndThread/RunloopAndThread/Info.plist @@ -0,0 +1,40 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/RunloopAndThread/RunloopAndThread/ViewController.h b/RunloopAndThread/RunloopAndThread/ViewController.h new file mode 100644 index 0000000..52f0228 --- /dev/null +++ b/RunloopAndThread/RunloopAndThread/ViewController.h @@ -0,0 +1,15 @@ +// +// ViewController.h +// RunloopAndThread +// +// Created by 张星宇 on 16/7/24. +// Copyright © 2016年 bestswifter. All rights reserved. +// + +#import + +@interface ViewController : UIViewController + + +@end + diff --git a/RunloopAndThread/RunloopAndThread/ViewController.m b/RunloopAndThread/RunloopAndThread/ViewController.m new file mode 100644 index 0000000..c3d8721 --- /dev/null +++ b/RunloopAndThread/RunloopAndThread/ViewController.m @@ -0,0 +1,105 @@ +// +// ViewController.m +// RunloopAndThread +// +// Created by 张星宇 on 16/7/24. +// Copyright © 2016年 bestswifter. All rights reserved. +// + +#import "ViewController.h" + +@interface ViewController () + +@property (strong, nonatomic) NSPort *emptyPort; +@property (strong, nonatomic) NSThread *thread; +@property (assign, nonatomic) BOOL shouldKeepRunning; + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; +// [self memoryTest]; +// [self runloopTest]; +} + +#pragma --mark 内存占用测试 +- (void)memoryTest { + for (int i = 0; i < 100000; ++i) { + NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; + [thread start]; + [self performSelector:@selector(stopThread) onThread:thread withObject:nil waitUntilDone:YES]; + } +} + +- (void)stopThread { + CFRunLoopStop(CFRunLoopGetCurrent()); + NSThread *thread = [NSThread currentThread]; + [thread cancel]; +} + +- (void)run { + @autoreleasepool { + NSLog(@"current thread = %@", [NSThread currentThread]); + NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; + if (!self.emptyPort) { + self.emptyPort = [NSMachPort port]; + } + [runLoop addPort:self.emptyPort forMode:NSDefaultRunLoopMode]; + // 下面这两种写法都不可取 +// [runLoop run]; +// [runLoop runMode:NSRunLoopCommonModes beforeDate:[NSDate distantFuture]]; + CFRunLoopRun(); + } +} + +# pragma --mark runloop 启动与退出测试 +- (void)runloopTest { + // 绘制按钮,点击按钮后关闭 runloop + UIButton *stopButton = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; + [stopButton setTitle:@"Stop Timer" forState:UIControlStateNormal]; + [stopButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; + [self.view addSubview:stopButton]; + [stopButton addTarget:self action:@selector(stopButtonDidClicked:) forControlEvents:UIControlEventTouchUpInside]; + +// self.shouldKeepRunning = YES; + + self.thread = [[NSThread alloc] initWithTarget:self selector:@selector(singleThread) object:nil]; + [self.thread start]; + [self performSelector:@selector(printSomething) onThread:self.thread withObject:nil waitUntilDone:YES]; +} + +- (void)singleThread { + @autoreleasepool { + NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; + if (!self.emptyPort) { + self.emptyPort = [NSMachPort port]; + } + [runLoop addPort:self.emptyPort forMode:NSDefaultRunLoopMode]; + CFRunLoopRun(); +// while (_shouldKeepRunning && [runLoop runMode:NSRunLoopCommonModes beforeDate:[NSDate distantFuture]]); + } +} + +- (void)printSomething { + NSLog(@"current thread = %@", [NSThread currentThread]); + [self performSelector:@selector(printSomething) withObject:nil afterDelay:1]; +} + +#pragma --mark 点击按钮退出 +- (void)stopButtonDidClicked:(id)sender { + [self performSelector:@selector(stopRunloop) onThread:self.thread withObject:nil waitUntilDone:YES]; +} + +- (void)stopRunloop { + // self.shouldKeepRunning = NO; + CFRunLoopStop(CFRunLoopGetCurrent()); +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git a/RunloopAndThread/RunloopAndThread/main.m b/RunloopAndThread/RunloopAndThread/main.m new file mode 100644 index 0000000..69bcf1c --- /dev/null +++ b/RunloopAndThread/RunloopAndThread/main.m @@ -0,0 +1,16 @@ +// +// main.m +// RunloopAndThread +// +// Created by 张星宇 on 16/7/24. +// Copyright © 2016年 bestswifter. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} From 70dc62d39488466b7d5675f1264647af8a840bd7 Mon Sep 17 00:00:00 2001 From: jianwei Date: Wed, 28 Sep 2016 13:38:05 +0800 Subject: [PATCH 03/18] =?UTF-8?q?=E7=9B=91=E5=90=AC=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E9=87=8A=E6=94=BE=E3=80=82=E4=BC=98=E5=8C=96log=E8=BE=93?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 11 ++++- .../RunloopAndThread/NSObject+DeallocBlock.h | 14 ++++++ .../RunloopAndThread/NSObject+DeallocBlock.m | 45 +++++++++++++++++++ .../RunloopAndThread/ViewController.m | 20 +++++++-- 4 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 RunloopAndThread/RunloopAndThread/NSObject+DeallocBlock.h create mode 100644 RunloopAndThread/RunloopAndThread/NSObject+DeallocBlock.m diff --git a/RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj b/RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj index 2b68ea4..e0ef08c 100644 --- a/RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj +++ b/RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ 9BAA82B11D451A0E00E5B98A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9BAA82AF1D451A0E00E5B98A /* Main.storyboard */; }; 9BAA82B31D451A0E00E5B98A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9BAA82B21D451A0E00E5B98A /* Assets.xcassets */; }; 9BAA82B61D451A0E00E5B98A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9BAA82B41D451A0E00E5B98A /* LaunchScreen.storyboard */; }; + E59118CB1D9B84FE00F25FF6 /* NSObject+DeallocBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = E59118CA1D9B84FE00F25FF6 /* NSObject+DeallocBlock.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -26,6 +27,8 @@ 9BAA82B21D451A0E00E5B98A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 9BAA82B51D451A0E00E5B98A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 9BAA82B71D451A0E00E5B98A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E59118C91D9B84FE00F25FF6 /* NSObject+DeallocBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+DeallocBlock.h"; sourceTree = ""; }; + E59118CA1D9B84FE00F25FF6 /* NSObject+DeallocBlock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+DeallocBlock.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -58,6 +61,8 @@ 9BAA82A51D451A0E00E5B98A /* RunloopAndThread */ = { isa = PBXGroup; children = ( + E59118C91D9B84FE00F25FF6 /* NSObject+DeallocBlock.h */, + E59118CA1D9B84FE00F25FF6 /* NSObject+DeallocBlock.m */, 9BAA82A91D451A0E00E5B98A /* AppDelegate.h */, 9BAA82AA1D451A0E00E5B98A /* AppDelegate.m */, 9BAA82AC1D451A0E00E5B98A /* ViewController.h */, @@ -110,7 +115,7 @@ TargetAttributes = { 9BAA82A21D451A0E00E5B98A = { CreatedOnToolsVersion = 7.3.1; - DevelopmentTeam = U2HX3RFD94; + DevelopmentTeam = RN42P92PY7; }; }; }; @@ -150,6 +155,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E59118CB1D9B84FE00F25FF6 /* NSObject+DeallocBlock.m in Sources */, 9BAA82AE1D451A0E00E5B98A /* ViewController.m in Sources */, 9BAA82AB1D451A0E00E5B98A /* AppDelegate.m in Sources */, 9BAA82A81D451A0E00E5B98A /* main.m in Sources */, @@ -264,6 +270,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = RN42P92PY7; INFOPLIST_FILE = RunloopAndThread/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = baidu.RunloopAndThread; @@ -275,6 +282,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = RN42P92PY7; INFOPLIST_FILE = RunloopAndThread/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = baidu.RunloopAndThread; @@ -301,6 +309,7 @@ 9BAA82BC1D451A0E00E5B98A /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/RunloopAndThread/RunloopAndThread/NSObject+DeallocBlock.h b/RunloopAndThread/RunloopAndThread/NSObject+DeallocBlock.h new file mode 100644 index 0000000..6ac38b3 --- /dev/null +++ b/RunloopAndThread/RunloopAndThread/NSObject+DeallocBlock.h @@ -0,0 +1,14 @@ +// +// NSObject+DeallocBlock.h +// pengpeng +// +// Created by jianwei.chen on 15/9/6. +// Copyright (c) 2015年 AsiaInnovations. All rights reserved. +// + +#import + +@interface NSObject (DeallocBlock) + +-(void)runAtDealloc:(dispatch_block_t)block; +@end diff --git a/RunloopAndThread/RunloopAndThread/NSObject+DeallocBlock.m b/RunloopAndThread/RunloopAndThread/NSObject+DeallocBlock.m new file mode 100644 index 0000000..c9d83e7 --- /dev/null +++ b/RunloopAndThread/RunloopAndThread/NSObject+DeallocBlock.m @@ -0,0 +1,45 @@ +// +// NSObject+DeallocBlock.m +// pengpeng +// +// Created by jianwei.chen on 15/9/6. +// Copyright (c) 2015年 AsiaInnovations. All rights reserved. +// + +#import "NSObject+DeallocBlock.h" +#import + +@interface NBDeallocBlockExecutor : NSObject{ + dispatch_block_t _block; +} +- (id)initWithBlock:(dispatch_block_t)block; +@end + +@implementation NBDeallocBlockExecutor +- (id)initWithBlock:(dispatch_block_t)aBlock +{ + self = [super init]; + if (self) { + _block = [aBlock copy]; + } + return self; +} +- (void)dealloc +{ + _block ? _block() : nil; +} +@end + + +static char *dealloc_key; +@implementation NSObject (DeallocBlock) + +-(void)runAtDealloc:(dispatch_block_t)block +{ + if(block){ + NBDeallocBlockExecutor *executor = [[NBDeallocBlockExecutor alloc] initWithBlock:block]; + objc_setAssociatedObject(self, &dealloc_key, executor, OBJC_ASSOCIATION_RETAIN);//不要强应用 + } +} + +@end diff --git a/RunloopAndThread/RunloopAndThread/ViewController.m b/RunloopAndThread/RunloopAndThread/ViewController.m index c3d8721..e5b97d1 100644 --- a/RunloopAndThread/RunloopAndThread/ViewController.m +++ b/RunloopAndThread/RunloopAndThread/ViewController.m @@ -7,6 +7,7 @@ // #import "ViewController.h" +#import "NSObject+DeallocBlock.h" @interface ViewController () @@ -18,23 +19,35 @@ @interface ViewController () @implementation ViewController + - (void)viewDidLoad { [super viewDidLoad]; -// [self memoryTest]; + [self memoryTest]; + NSLog(@"test"); // [self runloopTest]; } #pragma --mark 内存占用测试 - (void)memoryTest { for (int i = 0; i < 100000; ++i) { + //总结:test At: xcode8,ios 9.3.4 + //1,当用CFRunLoopRun(),然后调用CFRunLoopStop,此方法是后果会输出current thread,thread dealloc,current thread,thread dealloc ...所以不会用内存问题 + //2,当用 [runLoop run];,然后调用CFRunLoopStop,此方法会current thread,current thread,... 最后输出[NSThread start]: Thread creation failed with error 35.然后app卡住,然后app crash. 内存不会暴增。但是线程无法销毁 + //3,当用 [runLoop runMode:NSRunLoopCommonModes beforeDate:[NSDate distantFuture]];,然后调用CFRunLoopStop,此方法会。[ViewController performSelector:onThread:withObject:waitUntilDone:modes:]: target thread exited while waiting for the perform' crash。是因为 [runLoop runMode:NSRunLoopCommonModes beforeDate:[NSDate distantFuture]]; 无法阻塞线程,所以线程很快执行完run 方法。然后线程exit,导致奔溃(在一个退出的线程,当然这个时候线程没有释放,执行方法奔溃) + NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; + [thread runAtDealloc:^{ + NSLog(@"thread dealloc"); + }]; [thread start]; [self performSelector:@selector(stopThread) onThread:thread withObject:nil waitUntilDone:YES]; } + NSLog(@"test over"); } - (void)stopThread { CFRunLoopStop(CFRunLoopGetCurrent()); +// [[NSRunLoop currentRunLoop] removePort:self.emptyPort forMode:NSDefaultRunLoopMode]; NSThread *thread = [NSThread currentThread]; [thread cancel]; } @@ -49,8 +62,9 @@ - (void)run { [runLoop addPort:self.emptyPort forMode:NSDefaultRunLoopMode]; // 下面这两种写法都不可取 // [runLoop run]; -// [runLoop runMode:NSRunLoopCommonModes beforeDate:[NSDate distantFuture]]; - CFRunLoopRun(); + [runLoop runMode:NSRunLoopCommonModes beforeDate:[NSDate distantFuture]]; +// CFRunLoopRun(); + NSLog(@"run over"); } } From 01a2de28e7ae18835fa6c8ef3b82ac192878c004 Mon Sep 17 00:00:00 2001 From: zhangxingyu Date: Sat, 7 Jan 2017 16:58:54 +0800 Subject: [PATCH 04/18] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E6=B5=8B=E8=AF=95=E7=9A=84=E9=9D=99=E6=80=81?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 268 ++++++++++++++++++ .../BSStaticLibraryOne+Extension.h | 15 + .../BSStaticLibraryOne+Extension.m | 17 ++ .../BSStaticLibraryOne/BSStaticLibraryOne.h | 15 + .../BSStaticLibraryOne/BSStaticLibraryOne.m | 17 ++ 5 files changed, 332 insertions(+) create mode 100644 CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj create mode 100644 CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne+Extension.h create mode 100644 CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne+Extension.m create mode 100644 CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne.h create mode 100644 CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne.m diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj new file mode 100644 index 0000000..789d9a9 --- /dev/null +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj @@ -0,0 +1,268 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 9B0B718C1E20DD5A005D11BA /* BSStaticLibraryOne.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0B718B1E20DD5A005D11BA /* BSStaticLibraryOne.m */; }; + 9B0B718D1E20DD5A005D11BA /* BSStaticLibraryOne.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B0B718A1E20DD5A005D11BA /* BSStaticLibraryOne.h */; }; + 9B0B71951E20DE7B005D11BA /* BSStaticLibraryOne+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0B71941E20DE7B005D11BA /* BSStaticLibraryOne+Extension.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9B0B71851E20DD5A005D11BA /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + 9B0B718D1E20DD5A005D11BA /* BSStaticLibraryOne.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 9B0B71871E20DD5A005D11BA /* libBSStaticLibraryOne.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBSStaticLibraryOne.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 9B0B718A1E20DD5A005D11BA /* BSStaticLibraryOne.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BSStaticLibraryOne.h; sourceTree = ""; }; + 9B0B718B1E20DD5A005D11BA /* BSStaticLibraryOne.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BSStaticLibraryOne.m; sourceTree = ""; }; + 9B0B71931E20DE7B005D11BA /* BSStaticLibraryOne+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "BSStaticLibraryOne+Extension.h"; sourceTree = ""; }; + 9B0B71941E20DE7B005D11BA /* BSStaticLibraryOne+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "BSStaticLibraryOne+Extension.m"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 9B0B71841E20DD5A005D11BA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9B0B717E1E20DD5A005D11BA = { + isa = PBXGroup; + children = ( + 9B0B71891E20DD5A005D11BA /* BSStaticLibraryOne */, + 9B0B71881E20DD5A005D11BA /* Products */, + ); + sourceTree = ""; + }; + 9B0B71881E20DD5A005D11BA /* Products */ = { + isa = PBXGroup; + children = ( + 9B0B71871E20DD5A005D11BA /* libBSStaticLibraryOne.a */, + ); + name = Products; + sourceTree = ""; + }; + 9B0B71891E20DD5A005D11BA /* BSStaticLibraryOne */ = { + isa = PBXGroup; + children = ( + 9B0B718A1E20DD5A005D11BA /* BSStaticLibraryOne.h */, + 9B0B718B1E20DD5A005D11BA /* BSStaticLibraryOne.m */, + 9B0B71931E20DE7B005D11BA /* BSStaticLibraryOne+Extension.h */, + 9B0B71941E20DE7B005D11BA /* BSStaticLibraryOne+Extension.m */, + ); + path = BSStaticLibraryOne; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 9B0B71861E20DD5A005D11BA /* BSStaticLibraryOne */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9B0B71901E20DD5A005D11BA /* Build configuration list for PBXNativeTarget "BSStaticLibraryOne" */; + buildPhases = ( + 9B0B71831E20DD5A005D11BA /* Sources */, + 9B0B71841E20DD5A005D11BA /* Frameworks */, + 9B0B71851E20DD5A005D11BA /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BSStaticLibraryOne; + productName = BSStaticLibraryOne; + productReference = 9B0B71871E20DD5A005D11BA /* libBSStaticLibraryOne.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 9B0B717F1E20DD5A005D11BA /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0820; + ORGANIZATIONNAME = bestswifter; + TargetAttributes = { + 9B0B71861E20DD5A005D11BA = { + CreatedOnToolsVersion = 8.2; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 9B0B71821E20DD5A005D11BA /* Build configuration list for PBXProject "BSStaticLibraryOne" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 9B0B717E1E20DD5A005D11BA; + productRefGroup = 9B0B71881E20DD5A005D11BA /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 9B0B71861E20DD5A005D11BA /* BSStaticLibraryOne */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 9B0B71831E20DD5A005D11BA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9B0B718C1E20DD5A005D11BA /* BSStaticLibraryOne.m in Sources */, + 9B0B71951E20DE7B005D11BA /* BSStaticLibraryOne+Extension.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 9B0B718E1E20DD5A005D11BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.2; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 9B0B718F1E20DD5A005D11BA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.2; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 9B0B71911E20DD5A005D11BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 9B0B71921E20DD5A005D11BA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 9B0B71821E20DD5A005D11BA /* Build configuration list for PBXProject "BSStaticLibraryOne" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B0B718E1E20DD5A005D11BA /* Debug */, + 9B0B718F1E20DD5A005D11BA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9B0B71901E20DD5A005D11BA /* Build configuration list for PBXNativeTarget "BSStaticLibraryOne" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B0B71911E20DD5A005D11BA /* Debug */, + 9B0B71921E20DD5A005D11BA /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 9B0B717F1E20DD5A005D11BA /* Project object */; +} diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne+Extension.h b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne+Extension.h new file mode 100644 index 0000000..30106df --- /dev/null +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne+Extension.h @@ -0,0 +1,15 @@ +// +// BSStaticLibraryOne+Extension.h +// BSStaticLibraryOne +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import "BSStaticLibraryOne.h" + +@interface BSStaticLibraryOne (Extension) + +- (void)sayOtherThing; + +@end diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne+Extension.m b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne+Extension.m new file mode 100644 index 0000000..d5304ad --- /dev/null +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne+Extension.m @@ -0,0 +1,17 @@ +// +// BSStaticLibraryOne+Extension.m +// BSStaticLibraryOne +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import "BSStaticLibraryOne+Extension.h" + +@implementation BSStaticLibraryOne (Extension) + +- (void)sayOtherThing { + NSLog(@"In File: BSStaticLibraryOne + Extension"); +} + +@end diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne.h b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne.h new file mode 100644 index 0000000..1d02b37 --- /dev/null +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne.h @@ -0,0 +1,15 @@ +// +// BSStaticLibraryOne.h +// BSStaticLibraryOne +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import + +@interface BSStaticLibraryOne : NSObject + +- (void)saySomething; + +@end diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne.m b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne.m new file mode 100644 index 0000000..915f4c0 --- /dev/null +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne/BSStaticLibraryOne.m @@ -0,0 +1,17 @@ +// +// BSStaticLibraryOne.m +// BSStaticLibraryOne +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import "BSStaticLibraryOne.h" + +@implementation BSStaticLibraryOne + +- (void)saySomething { + NSLog(@"In Library: BSStaticLibraryOne"); +} + +@end From f5ddc21445daaa2c09738c3b86663d18a15c0847 Mon Sep 17 00:00:00 2001 From: zhangxingyu Date: Sat, 7 Jan 2017 16:59:14 +0800 Subject: [PATCH 05/18] =?UTF-8?q?=E5=AF=B9=E5=A4=96=E6=9A=B4=E9=9C=B2?= =?UTF-8?q?=E5=A4=B4=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BSStaticLibraryOne.xcodeproj/project.pbxproj | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj index 789d9a9..e257a2d 100644 --- a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj @@ -10,6 +10,8 @@ 9B0B718C1E20DD5A005D11BA /* BSStaticLibraryOne.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0B718B1E20DD5A005D11BA /* BSStaticLibraryOne.m */; }; 9B0B718D1E20DD5A005D11BA /* BSStaticLibraryOne.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B0B718A1E20DD5A005D11BA /* BSStaticLibraryOne.h */; }; 9B0B71951E20DE7B005D11BA /* BSStaticLibraryOne+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0B71941E20DE7B005D11BA /* BSStaticLibraryOne+Extension.m */; }; + 9B0B71BC1E20E3A0005D11BA /* BSStaticLibraryOne.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B0B718A1E20DD5A005D11BA /* BSStaticLibraryOne.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B0B71BD1E20E3A0005D11BA /* BSStaticLibraryOne+Extension.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B0B71931E20DE7B005D11BA /* BSStaticLibraryOne+Extension.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -73,6 +75,18 @@ }; /* End PBXGroup section */ +/* Begin PBXHeadersBuildPhase section */ + 9B0B71BB1E20E374005D11BA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 9B0B71BC1E20E3A0005D11BA /* BSStaticLibraryOne.h in Headers */, + 9B0B71BD1E20E3A0005D11BA /* BSStaticLibraryOne+Extension.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + /* Begin PBXNativeTarget section */ 9B0B71861E20DD5A005D11BA /* BSStaticLibraryOne */ = { isa = PBXNativeTarget; @@ -81,6 +95,7 @@ 9B0B71831E20DD5A005D11BA /* Sources */, 9B0B71841E20DD5A005D11BA /* Frameworks */, 9B0B71851E20DD5A005D11BA /* CopyFiles */, + 9B0B71BB1E20E374005D11BA /* Headers */, ); buildRules = ( ); @@ -261,6 +276,7 @@ 9B0B71921E20DD5A005D11BA /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; From a18776cb69349697dde0f7a046bc3eb130ffe5fe Mon Sep 17 00:00:00 2001 From: zhangxingyu Date: Sat, 7 Jan 2017 16:59:36 +0800 Subject: [PATCH 06/18] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=A3=B3=E5=B7=A5=E7=A8=8B=EF=BC=8C=E7=94=A8=E6=9D=A5=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E9=9D=99=E6=80=81=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OtherLinkerFlag.xcodeproj/project.pbxproj | 332 ++++++++++++++++++ .../OtherLinkerFlag/AppDelegate.h | 17 + .../OtherLinkerFlag/AppDelegate.m | 51 +++ .../AppIcon.appiconset/Contents.json | 68 ++++ .../BSStaticLibraryOne+Extension.h | 15 + .../OtherLinkerFlag/BSStaticLibraryOne.h | 15 + .../Base.lproj/LaunchScreen.storyboard | 27 ++ .../Base.lproj/Main.storyboard | 26 ++ .../OtherLinkerFlag/Info.plist | 45 +++ .../OtherLinkerFlag/ViewController.h | 16 + .../OtherLinkerFlag/ViewController.m | 32 ++ .../OtherLinkerFlag/OtherLinkerFlag/main.m | 16 + 12 files changed, 660 insertions(+) create mode 100644 CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag.xcodeproj/project.pbxproj create mode 100644 CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/AppDelegate.h create mode 100644 CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/AppDelegate.m create mode 100644 CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/BSStaticLibraryOne+Extension.h create mode 100644 CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/BSStaticLibraryOne.h create mode 100644 CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Base.lproj/LaunchScreen.storyboard create mode 100644 CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Base.lproj/Main.storyboard create mode 100644 CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Info.plist create mode 100644 CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/ViewController.h create mode 100644 CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/ViewController.m create mode 100644 CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/main.m diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag.xcodeproj/project.pbxproj b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag.xcodeproj/project.pbxproj new file mode 100644 index 0000000..0d5d964 --- /dev/null +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag.xcodeproj/project.pbxproj @@ -0,0 +1,332 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 9B0B71A41E20E289005D11BA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0B71A31E20E289005D11BA /* main.m */; }; + 9B0B71A71E20E289005D11BA /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0B71A61E20E289005D11BA /* AppDelegate.m */; }; + 9B0B71AA1E20E289005D11BA /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0B71A91E20E289005D11BA /* ViewController.m */; }; + 9B0B71AD1E20E289005D11BA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9B0B71AB1E20E289005D11BA /* Main.storyboard */; }; + 9B0B71AF1E20E289005D11BA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9B0B71AE1E20E289005D11BA /* Assets.xcassets */; }; + 9B0B71B21E20E289005D11BA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9B0B71B01E20E289005D11BA /* LaunchScreen.storyboard */; }; + 9B0B71BA1E20E298005D11BA /* libBSStaticLibraryOne.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B0B71B91E20E298005D11BA /* libBSStaticLibraryOne.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 9B0B719F1E20E289005D11BA /* OtherLinkerFlag.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OtherLinkerFlag.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 9B0B71A31E20E289005D11BA /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 9B0B71A51E20E289005D11BA /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 9B0B71A61E20E289005D11BA /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 9B0B71A81E20E289005D11BA /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 9B0B71A91E20E289005D11BA /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 9B0B71AC1E20E289005D11BA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 9B0B71AE1E20E289005D11BA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 9B0B71B11E20E289005D11BA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 9B0B71B31E20E289005D11BA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9B0B71B91E20E298005D11BA /* libBSStaticLibraryOne.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libBSStaticLibraryOne.a; sourceTree = ""; }; + 9B0B71BE1E20E4C1005D11BA /* BSStaticLibraryOne.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BSStaticLibraryOne.h; sourceTree = ""; }; + 9B0B71BF1E20E4C1005D11BA /* BSStaticLibraryOne+Extension.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "BSStaticLibraryOne+Extension.h"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 9B0B719C1E20E289005D11BA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9B0B71BA1E20E298005D11BA /* libBSStaticLibraryOne.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9B0B71961E20E289005D11BA = { + isa = PBXGroup; + children = ( + 9B0B71A11E20E289005D11BA /* OtherLinkerFlag */, + 9B0B71A01E20E289005D11BA /* Products */, + ); + sourceTree = ""; + }; + 9B0B71A01E20E289005D11BA /* Products */ = { + isa = PBXGroup; + children = ( + 9B0B719F1E20E289005D11BA /* OtherLinkerFlag.app */, + ); + name = Products; + sourceTree = ""; + }; + 9B0B71A11E20E289005D11BA /* OtherLinkerFlag */ = { + isa = PBXGroup; + children = ( + 9B0B71BE1E20E4C1005D11BA /* BSStaticLibraryOne.h */, + 9B0B71BF1E20E4C1005D11BA /* BSStaticLibraryOne+Extension.h */, + 9B0B71B91E20E298005D11BA /* libBSStaticLibraryOne.a */, + 9B0B71A51E20E289005D11BA /* AppDelegate.h */, + 9B0B71A61E20E289005D11BA /* AppDelegate.m */, + 9B0B71A81E20E289005D11BA /* ViewController.h */, + 9B0B71A91E20E289005D11BA /* ViewController.m */, + 9B0B71AB1E20E289005D11BA /* Main.storyboard */, + 9B0B71AE1E20E289005D11BA /* Assets.xcassets */, + 9B0B71B01E20E289005D11BA /* LaunchScreen.storyboard */, + 9B0B71B31E20E289005D11BA /* Info.plist */, + 9B0B71A21E20E289005D11BA /* Supporting Files */, + ); + path = OtherLinkerFlag; + sourceTree = ""; + }; + 9B0B71A21E20E289005D11BA /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 9B0B71A31E20E289005D11BA /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 9B0B719E1E20E289005D11BA /* OtherLinkerFlag */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9B0B71B61E20E289005D11BA /* Build configuration list for PBXNativeTarget "OtherLinkerFlag" */; + buildPhases = ( + 9B0B719B1E20E289005D11BA /* Sources */, + 9B0B719C1E20E289005D11BA /* Frameworks */, + 9B0B719D1E20E289005D11BA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = OtherLinkerFlag; + productName = OtherLinkerFlag; + productReference = 9B0B719F1E20E289005D11BA /* OtherLinkerFlag.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 9B0B71971E20E289005D11BA /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0820; + ORGANIZATIONNAME = bestswifter; + TargetAttributes = { + 9B0B719E1E20E289005D11BA = { + CreatedOnToolsVersion = 8.2; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 9B0B719A1E20E289005D11BA /* Build configuration list for PBXProject "OtherLinkerFlag" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 9B0B71961E20E289005D11BA; + productRefGroup = 9B0B71A01E20E289005D11BA /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 9B0B719E1E20E289005D11BA /* OtherLinkerFlag */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 9B0B719D1E20E289005D11BA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9B0B71B21E20E289005D11BA /* LaunchScreen.storyboard in Resources */, + 9B0B71AF1E20E289005D11BA /* Assets.xcassets in Resources */, + 9B0B71AD1E20E289005D11BA /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 9B0B719B1E20E289005D11BA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9B0B71AA1E20E289005D11BA /* ViewController.m in Sources */, + 9B0B71A71E20E289005D11BA /* AppDelegate.m in Sources */, + 9B0B71A41E20E289005D11BA /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 9B0B71AB1E20E289005D11BA /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 9B0B71AC1E20E289005D11BA /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 9B0B71B01E20E289005D11BA /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 9B0B71B11E20E289005D11BA /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 9B0B71B41E20E289005D11BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.2; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 9B0B71B51E20E289005D11BA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.2; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 9B0B71B71E20E289005D11BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = OtherLinkerFlag/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/OtherLinkerFlag", + ); + PRODUCT_BUNDLE_IDENTIFIER = baidu.OtherLinkerFlag; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 9B0B71B81E20E289005D11BA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = OtherLinkerFlag/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/OtherLinkerFlag", + ); + PRODUCT_BUNDLE_IDENTIFIER = baidu.OtherLinkerFlag; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 9B0B719A1E20E289005D11BA /* Build configuration list for PBXProject "OtherLinkerFlag" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B0B71B41E20E289005D11BA /* Debug */, + 9B0B71B51E20E289005D11BA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9B0B71B61E20E289005D11BA /* Build configuration list for PBXNativeTarget "OtherLinkerFlag" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B0B71B71E20E289005D11BA /* Debug */, + 9B0B71B81E20E289005D11BA /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 9B0B71971E20E289005D11BA /* Project object */; +} diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/AppDelegate.h b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/AppDelegate.h new file mode 100644 index 0000000..53ecc60 --- /dev/null +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/AppDelegate.h @@ -0,0 +1,17 @@ +// +// AppDelegate.h +// OtherLinkerFlag +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/AppDelegate.m b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/AppDelegate.m new file mode 100644 index 0000000..06cf523 --- /dev/null +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/AppDelegate.m @@ -0,0 +1,51 @@ +// +// AppDelegate.m +// OtherLinkerFlag +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + return YES; +} + + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. +} + + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. +} + + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + + +@end diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Assets.xcassets/AppIcon.appiconset/Contents.json b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..36d2c80 --- /dev/null +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/BSStaticLibraryOne+Extension.h b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/BSStaticLibraryOne+Extension.h new file mode 100644 index 0000000..30106df --- /dev/null +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/BSStaticLibraryOne+Extension.h @@ -0,0 +1,15 @@ +// +// BSStaticLibraryOne+Extension.h +// BSStaticLibraryOne +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import "BSStaticLibraryOne.h" + +@interface BSStaticLibraryOne (Extension) + +- (void)sayOtherThing; + +@end diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/BSStaticLibraryOne.h b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/BSStaticLibraryOne.h new file mode 100644 index 0000000..1d02b37 --- /dev/null +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/BSStaticLibraryOne.h @@ -0,0 +1,15 @@ +// +// BSStaticLibraryOne.h +// BSStaticLibraryOne +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import + +@interface BSStaticLibraryOne : NSObject + +- (void)saySomething; + +@end diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Base.lproj/LaunchScreen.storyboard b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..fdf3f97 --- /dev/null +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Base.lproj/Main.storyboard b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Base.lproj/Main.storyboard new file mode 100644 index 0000000..4529698 --- /dev/null +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Info.plist b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Info.plist new file mode 100644 index 0000000..d052473 --- /dev/null +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/ViewController.h b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/ViewController.h new file mode 100644 index 0000000..beda9b9 --- /dev/null +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/ViewController.h @@ -0,0 +1,16 @@ +// +// ViewController.h +// OtherLinkerFlag +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import +#import "BSStaticLibraryOne.h" +#import "BSStaticLibraryOne+Extension.h" + +@interface ViewController : UIViewController + +@end + diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/ViewController.m b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/ViewController.m new file mode 100644 index 0000000..b54bdaa --- /dev/null +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/ViewController.m @@ -0,0 +1,32 @@ +// +// ViewController.m +// OtherLinkerFlag +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import "ViewController.h" +#import "BSStaticLibraryOne.h" +#import "BSStaticLibraryOne+Extension.h" + +@interface ViewController () + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + [[[BSStaticLibraryOne alloc] init] sayOtherThing]; + // Do any additional setup after loading the view, typically from a nib. +} + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + +@end diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/main.m b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/main.m new file mode 100644 index 0000000..3cd80ed --- /dev/null +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag/main.m @@ -0,0 +1,16 @@ +// +// main.m +// OtherLinkerFlag +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} From 42d1020ce90d755bf4c36ba69385bbd48b0bfe1a Mon Sep 17 00:00:00 2001 From: zhangxingyu Date: Sat, 7 Jan 2017 20:34:59 +0800 Subject: [PATCH 07/18] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=A3=B3=E5=B7=A5?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ShellProject.xcodeproj/project.pbxproj | 316 ++++++++++++++++++ .../ShellProject/ShellProject/AppDelegate.h | 17 + .../ShellProject/ShellProject/AppDelegate.m | 51 +++ .../AppIcon.appiconset/Contents.json | 68 ++++ .../Base.lproj/LaunchScreen.storyboard | 27 ++ .../ShellProject/Base.lproj/Main.storyboard | 26 ++ .../ShellProject/ShellProject/Info.plist | 45 +++ .../ShellProject/ViewController.h | 15 + .../ShellProject/ViewController.m | 29 ++ .../ShellProject/ShellProject/main.m | 16 + 10 files changed, 610 insertions(+) create mode 100644 CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj create mode 100644 CocoaPodsDemo/ShellProject/ShellProject/AppDelegate.h create mode 100644 CocoaPodsDemo/ShellProject/ShellProject/AppDelegate.m create mode 100644 CocoaPodsDemo/ShellProject/ShellProject/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 CocoaPodsDemo/ShellProject/ShellProject/Base.lproj/LaunchScreen.storyboard create mode 100644 CocoaPodsDemo/ShellProject/ShellProject/Base.lproj/Main.storyboard create mode 100644 CocoaPodsDemo/ShellProject/ShellProject/Info.plist create mode 100644 CocoaPodsDemo/ShellProject/ShellProject/ViewController.h create mode 100644 CocoaPodsDemo/ShellProject/ShellProject/ViewController.m create mode 100644 CocoaPodsDemo/ShellProject/ShellProject/main.m diff --git a/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj b/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj new file mode 100644 index 0000000..e167815 --- /dev/null +++ b/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj @@ -0,0 +1,316 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 9B0B71D21E2117A4005D11BA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0B71D11E2117A4005D11BA /* main.m */; }; + 9B0B71D51E2117A4005D11BA /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0B71D41E2117A4005D11BA /* AppDelegate.m */; }; + 9B0B71D81E2117A4005D11BA /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0B71D71E2117A4005D11BA /* ViewController.m */; }; + 9B0B71DB1E2117A4005D11BA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9B0B71D91E2117A4005D11BA /* Main.storyboard */; }; + 9B0B71DD1E2117A4005D11BA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9B0B71DC1E2117A4005D11BA /* Assets.xcassets */; }; + 9B0B71E01E2117A4005D11BA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9B0B71DE1E2117A4005D11BA /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 9B0B71CD1E2117A4005D11BA /* ShellProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ShellProject.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 9B0B71D11E2117A4005D11BA /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 9B0B71D31E2117A4005D11BA /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 9B0B71D41E2117A4005D11BA /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 9B0B71D61E2117A4005D11BA /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 9B0B71D71E2117A4005D11BA /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 9B0B71DA1E2117A4005D11BA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 9B0B71DC1E2117A4005D11BA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 9B0B71DF1E2117A4005D11BA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 9B0B71E11E2117A4005D11BA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 9B0B71CA1E2117A4005D11BA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9B0B71C41E2117A4005D11BA = { + isa = PBXGroup; + children = ( + 9B0B71CF1E2117A4005D11BA /* ShellProject */, + 9B0B71CE1E2117A4005D11BA /* Products */, + ); + sourceTree = ""; + }; + 9B0B71CE1E2117A4005D11BA /* Products */ = { + isa = PBXGroup; + children = ( + 9B0B71CD1E2117A4005D11BA /* ShellProject.app */, + ); + name = Products; + sourceTree = ""; + }; + 9B0B71CF1E2117A4005D11BA /* ShellProject */ = { + isa = PBXGroup; + children = ( + 9B0B71D31E2117A4005D11BA /* AppDelegate.h */, + 9B0B71D41E2117A4005D11BA /* AppDelegate.m */, + 9B0B71D61E2117A4005D11BA /* ViewController.h */, + 9B0B71D71E2117A4005D11BA /* ViewController.m */, + 9B0B71D91E2117A4005D11BA /* Main.storyboard */, + 9B0B71DC1E2117A4005D11BA /* Assets.xcassets */, + 9B0B71DE1E2117A4005D11BA /* LaunchScreen.storyboard */, + 9B0B71E11E2117A4005D11BA /* Info.plist */, + 9B0B71D01E2117A4005D11BA /* Supporting Files */, + ); + path = ShellProject; + sourceTree = ""; + }; + 9B0B71D01E2117A4005D11BA /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 9B0B71D11E2117A4005D11BA /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 9B0B71CC1E2117A4005D11BA /* ShellProject */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9B0B71E41E2117A4005D11BA /* Build configuration list for PBXNativeTarget "ShellProject" */; + buildPhases = ( + 9B0B71C91E2117A4005D11BA /* Sources */, + 9B0B71CA1E2117A4005D11BA /* Frameworks */, + 9B0B71CB1E2117A4005D11BA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ShellProject; + productName = ShellProject; + productReference = 9B0B71CD1E2117A4005D11BA /* ShellProject.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 9B0B71C51E2117A4005D11BA /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0820; + ORGANIZATIONNAME = bestswifter; + TargetAttributes = { + 9B0B71CC1E2117A4005D11BA = { + CreatedOnToolsVersion = 8.2; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 9B0B71C81E2117A4005D11BA /* Build configuration list for PBXProject "ShellProject" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 9B0B71C41E2117A4005D11BA; + productRefGroup = 9B0B71CE1E2117A4005D11BA /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 9B0B71CC1E2117A4005D11BA /* ShellProject */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 9B0B71CB1E2117A4005D11BA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9B0B71E01E2117A4005D11BA /* LaunchScreen.storyboard in Resources */, + 9B0B71DD1E2117A4005D11BA /* Assets.xcassets in Resources */, + 9B0B71DB1E2117A4005D11BA /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 9B0B71C91E2117A4005D11BA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9B0B71D81E2117A4005D11BA /* ViewController.m in Sources */, + 9B0B71D51E2117A4005D11BA /* AppDelegate.m in Sources */, + 9B0B71D21E2117A4005D11BA /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 9B0B71D91E2117A4005D11BA /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 9B0B71DA1E2117A4005D11BA /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 9B0B71DE1E2117A4005D11BA /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 9B0B71DF1E2117A4005D11BA /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 9B0B71E21E2117A4005D11BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.2; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 9B0B71E31E2117A4005D11BA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.2; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 9B0B71E51E2117A4005D11BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = ShellProject/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = baidu.ShellProject; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 9B0B71E61E2117A4005D11BA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = ShellProject/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = baidu.ShellProject; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 9B0B71C81E2117A4005D11BA /* Build configuration list for PBXProject "ShellProject" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B0B71E21E2117A4005D11BA /* Debug */, + 9B0B71E31E2117A4005D11BA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9B0B71E41E2117A4005D11BA /* Build configuration list for PBXNativeTarget "ShellProject" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B0B71E51E2117A4005D11BA /* Debug */, + 9B0B71E61E2117A4005D11BA /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 9B0B71C51E2117A4005D11BA /* Project object */; +} diff --git a/CocoaPodsDemo/ShellProject/ShellProject/AppDelegate.h b/CocoaPodsDemo/ShellProject/ShellProject/AppDelegate.h new file mode 100644 index 0000000..505b34d --- /dev/null +++ b/CocoaPodsDemo/ShellProject/ShellProject/AppDelegate.h @@ -0,0 +1,17 @@ +// +// AppDelegate.h +// ShellProject +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/CocoaPodsDemo/ShellProject/ShellProject/AppDelegate.m b/CocoaPodsDemo/ShellProject/ShellProject/AppDelegate.m new file mode 100644 index 0000000..6bc31bb --- /dev/null +++ b/CocoaPodsDemo/ShellProject/ShellProject/AppDelegate.m @@ -0,0 +1,51 @@ +// +// AppDelegate.m +// ShellProject +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + return YES; +} + + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. +} + + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. +} + + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + + +@end diff --git a/CocoaPodsDemo/ShellProject/ShellProject/Assets.xcassets/AppIcon.appiconset/Contents.json b/CocoaPodsDemo/ShellProject/ShellProject/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..36d2c80 --- /dev/null +++ b/CocoaPodsDemo/ShellProject/ShellProject/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/CocoaPodsDemo/ShellProject/ShellProject/Base.lproj/LaunchScreen.storyboard b/CocoaPodsDemo/ShellProject/ShellProject/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..fdf3f97 --- /dev/null +++ b/CocoaPodsDemo/ShellProject/ShellProject/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CocoaPodsDemo/ShellProject/ShellProject/Base.lproj/Main.storyboard b/CocoaPodsDemo/ShellProject/ShellProject/Base.lproj/Main.storyboard new file mode 100644 index 0000000..4529698 --- /dev/null +++ b/CocoaPodsDemo/ShellProject/ShellProject/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CocoaPodsDemo/ShellProject/ShellProject/Info.plist b/CocoaPodsDemo/ShellProject/ShellProject/Info.plist new file mode 100644 index 0000000..d052473 --- /dev/null +++ b/CocoaPodsDemo/ShellProject/ShellProject/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/CocoaPodsDemo/ShellProject/ShellProject/ViewController.h b/CocoaPodsDemo/ShellProject/ShellProject/ViewController.h new file mode 100644 index 0000000..67cb353 --- /dev/null +++ b/CocoaPodsDemo/ShellProject/ShellProject/ViewController.h @@ -0,0 +1,15 @@ +// +// ViewController.h +// ShellProject +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import + +@interface ViewController : UIViewController + + +@end + diff --git a/CocoaPodsDemo/ShellProject/ShellProject/ViewController.m b/CocoaPodsDemo/ShellProject/ShellProject/ViewController.m new file mode 100644 index 0000000..5a03ded --- /dev/null +++ b/CocoaPodsDemo/ShellProject/ShellProject/ViewController.m @@ -0,0 +1,29 @@ +// +// ViewController.m +// ShellProject +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import "ViewController.h" + +@interface ViewController () + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. +} + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + +@end diff --git a/CocoaPodsDemo/ShellProject/ShellProject/main.m b/CocoaPodsDemo/ShellProject/ShellProject/main.m new file mode 100644 index 0000000..a676aa1 --- /dev/null +++ b/CocoaPodsDemo/ShellProject/ShellProject/main.m @@ -0,0 +1,16 @@ +// +// main.m +// ShellProject +// +// Created by 张星宇 on 2017/1/7. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} From 069195b3da3657c174547eff79b3ec1f41468dcd Mon Sep 17 00:00:00 2001 From: zhangxingyu Date: Sun, 8 Jan 2017 16:25:46 +0800 Subject: [PATCH 08/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E5=92=8C=20linker=20flag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 2 ++ .../ShellProject.xcodeproj/project.pbxproj | 27 +++++++++++++++++++ .../ShellProject/ViewController.m | 3 +++ 3 files changed, 32 insertions(+) diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj index e257a2d..eae77e7 100644 --- a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj @@ -244,6 +244,7 @@ buildSettings = { OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = LibOne; SKIP_INSTALL = YES; }; name = Debug; @@ -253,6 +254,7 @@ buildSettings = { OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = LibOne; SKIP_INSTALL = YES; }; name = Release; diff --git a/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj b/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj index e167815..ec88abf 100644 --- a/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj +++ b/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj @@ -272,8 +272,22 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + HEADER_SEARCH_PATHS = ( + "$PROJECT_DIR/../BSStaticLibraryOne/Build/Products/Debug-iphonesimulator/LibOne", + "$(inherited)", + ); INFOPLIST_FILE = ShellProject/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$PROJECT_DIR/../BSStaticLibraryOne/Build/Products/Debug-iphonesimulator", + "$(inherited)", + ); + ONLY_ACTIVE_ARCH = NO; + ORDER_FILE = ""; + OTHER_LDFLAGS = ( + "-ObjC", + "-l\"BSStaticLibraryOne\"", + ); PRODUCT_BUNDLE_IDENTIFIER = baidu.ShellProject; PRODUCT_NAME = "$(TARGET_NAME)"; }; @@ -283,8 +297,21 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + HEADER_SEARCH_PATHS = ( + "$PROJECT_DIR/../BSStaticLibraryOne/Build/Products/Debug-iphonesimulator/LibOne", + "$(inherited)", + ); INFOPLIST_FILE = ShellProject/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$PROJECT_DIR/../BSStaticLibraryOne/Build/Products/Debug-iphonesimulator", + "$(inherited)", + ); + ORDER_FILE = ""; + OTHER_LDFLAGS = ( + "-ObjC", + "-l\"BSStaticLibraryOne\"", + ); PRODUCT_BUNDLE_IDENTIFIER = baidu.ShellProject; PRODUCT_NAME = "$(TARGET_NAME)"; }; diff --git a/CocoaPodsDemo/ShellProject/ShellProject/ViewController.m b/CocoaPodsDemo/ShellProject/ShellProject/ViewController.m index 5a03ded..f84d799 100644 --- a/CocoaPodsDemo/ShellProject/ShellProject/ViewController.m +++ b/CocoaPodsDemo/ShellProject/ShellProject/ViewController.m @@ -7,6 +7,8 @@ // #import "ViewController.h" +#import "BSStaticLibraryOne.h" +#import "BSStaticLibraryOne+Extension.h" @interface ViewController () @@ -16,6 +18,7 @@ @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; + [[[BSStaticLibraryOne alloc] init] saySomething]; // Do any additional setup after loading the view, typically from a nib. } From daff94d2b9f295cf156328c09f2cac07448884f2 Mon Sep 17 00:00:00 2001 From: zhangxingyu Date: Sun, 8 Jan 2017 18:31:50 +0800 Subject: [PATCH 09/18] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=80=E4=B8=AA=20ta?= =?UTF-8?q?rget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 99 +++++++++++++++++++ .../BSStaticLibraryTwo/BSStaticLibraryTwo.h | 13 +++ .../BSStaticLibraryTwo/BSStaticLibraryTwo.m | 13 +++ 3 files changed, 125 insertions(+) create mode 100644 CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.h create mode 100644 CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.m diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj index eae77e7..1b0442f 100644 --- a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj @@ -12,6 +12,9 @@ 9B0B71951E20DE7B005D11BA /* BSStaticLibraryOne+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0B71941E20DE7B005D11BA /* BSStaticLibraryOne+Extension.m */; }; 9B0B71BC1E20E3A0005D11BA /* BSStaticLibraryOne.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B0B718A1E20DD5A005D11BA /* BSStaticLibraryOne.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9B0B71BD1E20E3A0005D11BA /* BSStaticLibraryOne+Extension.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B0B71931E20DE7B005D11BA /* BSStaticLibraryOne+Extension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B53E8551E223564005F74C6 /* BSStaticLibraryTwo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B53E8541E223564005F74C6 /* BSStaticLibraryTwo.m */; }; + 9B53E8561E223564005F74C6 /* BSStaticLibraryTwo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B53E8531E223564005F74C6 /* BSStaticLibraryTwo.h */; }; + 9B53E85B1E224C62005F74C6 /* BSStaticLibraryTwo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B53E8531E223564005F74C6 /* BSStaticLibraryTwo.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -25,6 +28,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9B53E84F1E223564005F74C6 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + 9B53E8561E223564005F74C6 /* BSStaticLibraryTwo.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -33,6 +46,9 @@ 9B0B718B1E20DD5A005D11BA /* BSStaticLibraryOne.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BSStaticLibraryOne.m; sourceTree = ""; }; 9B0B71931E20DE7B005D11BA /* BSStaticLibraryOne+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "BSStaticLibraryOne+Extension.h"; sourceTree = ""; }; 9B0B71941E20DE7B005D11BA /* BSStaticLibraryOne+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "BSStaticLibraryOne+Extension.m"; sourceTree = ""; }; + 9B53E8511E223564005F74C6 /* libBSStaticLibraryTwo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBSStaticLibraryTwo.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 9B53E8531E223564005F74C6 /* BSStaticLibraryTwo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BSStaticLibraryTwo.h; sourceTree = ""; }; + 9B53E8541E223564005F74C6 /* BSStaticLibraryTwo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BSStaticLibraryTwo.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -43,6 +59,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9B53E84E1E223564005F74C6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -50,6 +73,7 @@ isa = PBXGroup; children = ( 9B0B71891E20DD5A005D11BA /* BSStaticLibraryOne */, + 9B53E8521E223564005F74C6 /* BSStaticLibraryTwo */, 9B0B71881E20DD5A005D11BA /* Products */, ); sourceTree = ""; @@ -58,6 +82,7 @@ isa = PBXGroup; children = ( 9B0B71871E20DD5A005D11BA /* libBSStaticLibraryOne.a */, + 9B53E8511E223564005F74C6 /* libBSStaticLibraryTwo.a */, ); name = Products; sourceTree = ""; @@ -73,6 +98,15 @@ path = BSStaticLibraryOne; sourceTree = ""; }; + 9B53E8521E223564005F74C6 /* BSStaticLibraryTwo */ = { + isa = PBXGroup; + children = ( + 9B53E8531E223564005F74C6 /* BSStaticLibraryTwo.h */, + 9B53E8541E223564005F74C6 /* BSStaticLibraryTwo.m */, + ); + path = BSStaticLibraryTwo; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -85,6 +119,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9B53E85A1E224C5B005F74C6 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 9B53E85B1E224C62005F74C6 /* BSStaticLibraryTwo.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -106,6 +148,24 @@ productReference = 9B0B71871E20DD5A005D11BA /* libBSStaticLibraryOne.a */; productType = "com.apple.product-type.library.static"; }; + 9B53E8501E223564005F74C6 /* BSStaticLibraryTwo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9B53E8571E223564005F74C6 /* Build configuration list for PBXNativeTarget "BSStaticLibraryTwo" */; + buildPhases = ( + 9B53E84D1E223564005F74C6 /* Sources */, + 9B53E84E1E223564005F74C6 /* Frameworks */, + 9B53E84F1E223564005F74C6 /* CopyFiles */, + 9B53E85A1E224C5B005F74C6 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BSStaticLibraryTwo; + productName = BSStaticLibraryTwo; + productReference = 9B53E8511E223564005F74C6 /* libBSStaticLibraryTwo.a */; + productType = "com.apple.product-type.library.static"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -119,6 +179,10 @@ CreatedOnToolsVersion = 8.2; ProvisioningStyle = Automatic; }; + 9B53E8501E223564005F74C6 = { + CreatedOnToolsVersion = 8.2; + ProvisioningStyle = Automatic; + }; }; }; buildConfigurationList = 9B0B71821E20DD5A005D11BA /* Build configuration list for PBXProject "BSStaticLibraryOne" */; @@ -134,6 +198,7 @@ projectRoot = ""; targets = ( 9B0B71861E20DD5A005D11BA /* BSStaticLibraryOne */, + 9B53E8501E223564005F74C6 /* BSStaticLibraryTwo */, ); }; /* End PBXProject section */ @@ -148,6 +213,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9B53E84D1E223564005F74C6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9B53E8551E223564005F74C6 /* BSStaticLibraryTwo.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ @@ -259,6 +332,24 @@ }; name = Release; }; + 9B53E8581E223564005F74C6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 9B53E8591E223564005F74C6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -280,6 +371,14 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 9B53E8571E223564005F74C6 /* Build configuration list for PBXNativeTarget "BSStaticLibraryTwo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B53E8581E223564005F74C6 /* Debug */, + 9B53E8591E223564005F74C6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; /* End XCConfigurationList section */ }; rootObject = 9B0B717F1E20DD5A005D11BA /* Project object */; diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.h b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.h new file mode 100644 index 0000000..0824d91 --- /dev/null +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.h @@ -0,0 +1,13 @@ +// +// BSStaticLibraryTwo.h +// BSStaticLibraryTwo +// +// Created by 张星宇 on 2017/1/8. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import + +@interface BSStaticLibraryTwo : NSObject + +@end diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.m b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.m new file mode 100644 index 0000000..53c34ac --- /dev/null +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.m @@ -0,0 +1,13 @@ +// +// BSStaticLibraryTwo.m +// BSStaticLibraryTwo +// +// Created by 张星宇 on 2017/1/8. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import "BSStaticLibraryTwo.h" + +@implementation BSStaticLibraryTwo + +@end From 711e7b348e096e0f699b3aeef7e3aae3cfa9aeef Mon Sep 17 00:00:00 2001 From: zhangxingyu Date: Sun, 8 Jan 2017 20:56:48 +0800 Subject: [PATCH 10/18] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=A4=B4=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=AF=BC=E5=87=BA=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BSStaticLibraryOne.xcodeproj/project.pbxproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj index 1b0442f..05557f0 100644 --- a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj @@ -337,6 +337,7 @@ buildSettings = { OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = LibTwo; SKIP_INSTALL = YES; }; name = Debug; @@ -346,6 +347,7 @@ buildSettings = { OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = LibTwo; SKIP_INSTALL = YES; }; name = Release; From 89125253d3b1c431833cb6c09521af5e53803fc3 Mon Sep 17 00:00:00 2001 From: zhangxingyu Date: Sun, 8 Jan 2017 21:00:21 +0800 Subject: [PATCH 11/18] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=80=E4=B8=AA=20ta?= =?UTF-8?q?rget=EF=BC=8C=E4=BE=9D=E8=B5=96=E5=8F=A6=E5=A4=96=E4=B8=A4?= =?UTF-8?q?=E4=B8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 121 ++++++++++++++++++ CocoaPodsDemo/BSStaticLibraryOne/Pod/Pod.h | 13 ++ CocoaPodsDemo/BSStaticLibraryOne/Pod/Pod.m | 13 ++ 3 files changed, 147 insertions(+) create mode 100644 CocoaPodsDemo/BSStaticLibraryOne/Pod/Pod.h create mode 100644 CocoaPodsDemo/BSStaticLibraryOne/Pod/Pod.m diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj index 05557f0..c68e24d 100644 --- a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj @@ -15,8 +15,27 @@ 9B53E8551E223564005F74C6 /* BSStaticLibraryTwo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B53E8541E223564005F74C6 /* BSStaticLibraryTwo.m */; }; 9B53E8561E223564005F74C6 /* BSStaticLibraryTwo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B53E8531E223564005F74C6 /* BSStaticLibraryTwo.h */; }; 9B53E85B1E224C62005F74C6 /* BSStaticLibraryTwo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B53E8531E223564005F74C6 /* BSStaticLibraryTwo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B53E8641E226EA4005F74C6 /* Pod.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B53E8631E226EA4005F74C6 /* Pod.m */; }; + 9B53E8651E226EA4005F74C6 /* Pod.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B53E8621E226EA4005F74C6 /* Pod.h */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 9B53E8691E226EAD005F74C6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 9B0B717F1E20DD5A005D11BA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9B0B71861E20DD5A005D11BA; + remoteInfo = BSStaticLibraryOne; + }; + 9B53E86B1E226EAD005F74C6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 9B0B717F1E20DD5A005D11BA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9B53E8501E223564005F74C6; + remoteInfo = BSStaticLibraryTwo; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9B0B71851E20DD5A005D11BA /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -38,6 +57,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9B53E85E1E226EA4005F74C6 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + 9B53E8651E226EA4005F74C6 /* Pod.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -49,6 +78,9 @@ 9B53E8511E223564005F74C6 /* libBSStaticLibraryTwo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBSStaticLibraryTwo.a; sourceTree = BUILT_PRODUCTS_DIR; }; 9B53E8531E223564005F74C6 /* BSStaticLibraryTwo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BSStaticLibraryTwo.h; sourceTree = ""; }; 9B53E8541E223564005F74C6 /* BSStaticLibraryTwo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BSStaticLibraryTwo.m; sourceTree = ""; }; + 9B53E8601E226EA4005F74C6 /* libPod.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPod.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 9B53E8621E226EA4005F74C6 /* Pod.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Pod.h; sourceTree = ""; }; + 9B53E8631E226EA4005F74C6 /* Pod.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Pod.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -66,6 +98,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9B53E85D1E226EA4005F74C6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -74,6 +113,7 @@ children = ( 9B0B71891E20DD5A005D11BA /* BSStaticLibraryOne */, 9B53E8521E223564005F74C6 /* BSStaticLibraryTwo */, + 9B53E8611E226EA4005F74C6 /* Pod */, 9B0B71881E20DD5A005D11BA /* Products */, ); sourceTree = ""; @@ -83,6 +123,7 @@ children = ( 9B0B71871E20DD5A005D11BA /* libBSStaticLibraryOne.a */, 9B53E8511E223564005F74C6 /* libBSStaticLibraryTwo.a */, + 9B53E8601E226EA4005F74C6 /* libPod.a */, ); name = Products; sourceTree = ""; @@ -107,6 +148,15 @@ path = BSStaticLibraryTwo; sourceTree = ""; }; + 9B53E8611E226EA4005F74C6 /* Pod */ = { + isa = PBXGroup; + children = ( + 9B53E8621E226EA4005F74C6 /* Pod.h */, + 9B53E8631E226EA4005F74C6 /* Pod.m */, + ); + path = Pod; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -166,6 +216,25 @@ productReference = 9B53E8511E223564005F74C6 /* libBSStaticLibraryTwo.a */; productType = "com.apple.product-type.library.static"; }; + 9B53E85F1E226EA4005F74C6 /* Pod */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9B53E8661E226EA4005F74C6 /* Build configuration list for PBXNativeTarget "Pod" */; + buildPhases = ( + 9B53E85C1E226EA4005F74C6 /* Sources */, + 9B53E85D1E226EA4005F74C6 /* Frameworks */, + 9B53E85E1E226EA4005F74C6 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + 9B53E86A1E226EAD005F74C6 /* PBXTargetDependency */, + 9B53E86C1E226EAD005F74C6 /* PBXTargetDependency */, + ); + name = Pod; + productName = Pod; + productReference = 9B53E8601E226EA4005F74C6 /* libPod.a */; + productType = "com.apple.product-type.library.static"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -183,6 +252,10 @@ CreatedOnToolsVersion = 8.2; ProvisioningStyle = Automatic; }; + 9B53E85F1E226EA4005F74C6 = { + CreatedOnToolsVersion = 8.2; + ProvisioningStyle = Automatic; + }; }; }; buildConfigurationList = 9B0B71821E20DD5A005D11BA /* Build configuration list for PBXProject "BSStaticLibraryOne" */; @@ -199,6 +272,7 @@ targets = ( 9B0B71861E20DD5A005D11BA /* BSStaticLibraryOne */, 9B53E8501E223564005F74C6 /* BSStaticLibraryTwo */, + 9B53E85F1E226EA4005F74C6 /* Pod */, ); }; /* End PBXProject section */ @@ -221,8 +295,29 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9B53E85C1E226EA4005F74C6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9B53E8641E226EA4005F74C6 /* Pod.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 9B53E86A1E226EAD005F74C6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 9B0B71861E20DD5A005D11BA /* BSStaticLibraryOne */; + targetProxy = 9B53E8691E226EAD005F74C6 /* PBXContainerItemProxy */; + }; + 9B53E86C1E226EAD005F74C6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 9B53E8501E223564005F74C6 /* BSStaticLibraryTwo */; + targetProxy = 9B53E86B1E226EAD005F74C6 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ 9B0B718E1E20DD5A005D11BA /* Debug */ = { isa = XCBuildConfiguration; @@ -352,6 +447,24 @@ }; name = Release; }; + 9B53E8671E226EA4005F74C6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 9B53E8681E226EA4005F74C6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -381,6 +494,14 @@ ); defaultConfigurationIsVisible = 0; }; + 9B53E8661E226EA4005F74C6 /* Build configuration list for PBXNativeTarget "Pod" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B53E8671E226EA4005F74C6 /* Debug */, + 9B53E8681E226EA4005F74C6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; /* End XCConfigurationList section */ }; rootObject = 9B0B717F1E20DD5A005D11BA /* Project object */; diff --git a/CocoaPodsDemo/BSStaticLibraryOne/Pod/Pod.h b/CocoaPodsDemo/BSStaticLibraryOne/Pod/Pod.h new file mode 100644 index 0000000..2ea3778 --- /dev/null +++ b/CocoaPodsDemo/BSStaticLibraryOne/Pod/Pod.h @@ -0,0 +1,13 @@ +// +// Pod.h +// Pod +// +// Created by 张星宇 on 2017/1/8. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import + +@interface Pod : NSObject + +@end diff --git a/CocoaPodsDemo/BSStaticLibraryOne/Pod/Pod.m b/CocoaPodsDemo/BSStaticLibraryOne/Pod/Pod.m new file mode 100644 index 0000000..e052073 --- /dev/null +++ b/CocoaPodsDemo/BSStaticLibraryOne/Pod/Pod.m @@ -0,0 +1,13 @@ +// +// Pod.m +// Pod +// +// Created by 张星宇 on 2017/1/8. +// Copyright © 2017年 bestswifter. All rights reserved. +// + +#import "Pod.h" + +@implementation Pod + +@end From f414bb16b07046a3ba9dd2259e54afdbe3208905 Mon Sep 17 00:00:00 2001 From: zhangxingyu Date: Sun, 8 Jan 2017 21:09:45 +0800 Subject: [PATCH 12/18] =?UTF-8?q?=E5=BC=95=E5=85=A5=E7=AC=AC=E4=BA=8C?= =?UTF-8?q?=E4=B8=AA=E9=9D=99=E6=80=81=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BSStaticLibraryOne.xcodeproj/project.pbxproj | 2 ++ .../BSStaticLibraryTwo/BSStaticLibraryTwo.h | 2 ++ .../BSStaticLibraryTwo/BSStaticLibraryTwo.m | 4 ++++ .../ShellProject/ShellProject.xcodeproj/project.pbxproj | 5 +++++ CocoaPodsDemo/ShellProject/ShellProject/ViewController.m | 2 ++ 5 files changed, 15 insertions(+) diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj index c68e24d..b6ad67f 100644 --- a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj @@ -410,6 +410,7 @@ 9B0B71911E20DD5A005D11BA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; PUBLIC_HEADERS_FOLDER_PATH = LibOne; @@ -430,6 +431,7 @@ 9B53E8581E223564005F74C6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; PUBLIC_HEADERS_FOLDER_PATH = LibTwo; diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.h b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.h index 0824d91..1df0bde 100644 --- a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.h +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.h @@ -10,4 +10,6 @@ @interface BSStaticLibraryTwo : NSObject +- (void)saySomething; + @end diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.m b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.m index 53c34ac..f0d80f7 100644 --- a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.m +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryTwo/BSStaticLibraryTwo.m @@ -10,4 +10,8 @@ @implementation BSStaticLibraryTwo +- (void)saySomething { + NSLog(@"In Library: BSStaticLibraryTwo"); +} + @end diff --git a/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj b/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj index ec88abf..ddcce2c 100644 --- a/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj +++ b/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj @@ -275,6 +275,7 @@ HEADER_SEARCH_PATHS = ( "$PROJECT_DIR/../BSStaticLibraryOne/Build/Products/Debug-iphonesimulator/LibOne", "$(inherited)", + "$PROJECT_DIR/../BSStaticLibraryOne/Build/Products/Debug-iphonesimulator/LibTwo", ); INFOPLIST_FILE = ShellProject/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -287,6 +288,7 @@ OTHER_LDFLAGS = ( "-ObjC", "-l\"BSStaticLibraryOne\"", + "-l\"BSStaticLibraryTwo\"", ); PRODUCT_BUNDLE_IDENTIFIER = baidu.ShellProject; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -300,6 +302,7 @@ HEADER_SEARCH_PATHS = ( "$PROJECT_DIR/../BSStaticLibraryOne/Build/Products/Debug-iphonesimulator/LibOne", "$(inherited)", + "$PROJECT_DIR/../BSStaticLibraryOne/Build/Products/Debug-iphonesimulator/LibTwo", ); INFOPLIST_FILE = ShellProject/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -311,6 +314,7 @@ OTHER_LDFLAGS = ( "-ObjC", "-l\"BSStaticLibraryOne\"", + "-l\"BSStaticLibraryTwo\"", ); PRODUCT_BUNDLE_IDENTIFIER = baidu.ShellProject; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -336,6 +340,7 @@ 9B0B71E61E2117A4005D11BA /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/CocoaPodsDemo/ShellProject/ShellProject/ViewController.m b/CocoaPodsDemo/ShellProject/ShellProject/ViewController.m index f84d799..ea5c309 100644 --- a/CocoaPodsDemo/ShellProject/ShellProject/ViewController.m +++ b/CocoaPodsDemo/ShellProject/ShellProject/ViewController.m @@ -9,6 +9,7 @@ #import "ViewController.h" #import "BSStaticLibraryOne.h" #import "BSStaticLibraryOne+Extension.h" +#import "BSStaticLibraryTwo.h" @interface ViewController () @@ -19,6 +20,7 @@ @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [[[BSStaticLibraryOne alloc] init] saySomething]; + [[[BSStaticLibraryTwo alloc] init] saySomething]; // Do any additional setup after loading the view, typically from a nib. } From dd3b5d20117e59bea82044547be4e7ec861c9dc1 Mon Sep 17 00:00:00 2001 From: zhangxingyu Date: Sun, 8 Jan 2017 21:22:14 +0800 Subject: [PATCH 13/18] =?UTF-8?q?=E4=B8=8D=E5=88=9B=E5=BB=BA=20Workspace?= =?UTF-8?q?=20=E5=B0=B1=E6=97=A0=E6=B3=95=E4=BA=89=E5=8F=96=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E8=B7=A8=E9=A1=B9=E7=9B=AE=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ShellProject.xcodeproj/project.pbxproj | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj b/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj index ddcce2c..c54f640 100644 --- a/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj +++ b/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ 9B0B71DB1E2117A4005D11BA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9B0B71D91E2117A4005D11BA /* Main.storyboard */; }; 9B0B71DD1E2117A4005D11BA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9B0B71DC1E2117A4005D11BA /* Assets.xcassets */; }; 9B0B71E01E2117A4005D11BA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9B0B71DE1E2117A4005D11BA /* LaunchScreen.storyboard */; }; + 9B53E86F1E227340005F74C6 /* libPod.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B53E86E1E227340005F74C6 /* libPod.a */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -26,6 +27,7 @@ 9B0B71DC1E2117A4005D11BA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 9B0B71DF1E2117A4005D11BA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 9B0B71E11E2117A4005D11BA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9B53E86E1E227340005F74C6 /* libPod.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libPod.a; path = "../BSStaticLibraryOne/Build/Products/Debug-iphonesimulator/libPod.a"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -33,6 +35,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 9B53E86F1E227340005F74C6 /* libPod.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -44,6 +47,7 @@ children = ( 9B0B71CF1E2117A4005D11BA /* ShellProject */, 9B0B71CE1E2117A4005D11BA /* Products */, + 9B53E86D1E227340005F74C6 /* Frameworks */, ); sourceTree = ""; }; @@ -79,6 +83,14 @@ name = "Supporting Files"; sourceTree = ""; }; + 9B53E86D1E227340005F74C6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 9B53E86E1E227340005F74C6 /* libPod.a */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ From e04e13e2c6635e1726e04ff672952b28416b11e9 Mon Sep 17 00:00:00 2001 From: zhangxingyu Date: Sun, 8 Jan 2017 21:42:53 +0800 Subject: [PATCH 14/18] =?UTF-8?q?=E4=BD=BF=E7=94=A8=20Workspace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 3 ++ .../contents.xcworkspacedata | 10 ++++++ .../xcshareddata/ShellProject.xcscmblueprint | 30 ++++++++++++++++++ .../UserInterfaceState.xcuserstate | Bin 0 -> 60145 bytes .../ShellProject.xcodeproj/project.pbxproj | 12 +++---- .../ShellProject/ViewController.m | 6 ++-- 6 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 CocoaPodsDemo/ShellProject.xcworkspace/contents.xcworkspacedata create mode 100644 CocoaPodsDemo/ShellProject.xcworkspace/xcshareddata/ShellProject.xcscmblueprint create mode 100644 CocoaPodsDemo/ShellProject.xcworkspace/xcuserdata/zxy.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj index b6ad67f..b8c9d43 100644 --- a/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj +++ b/CocoaPodsDemo/BSStaticLibraryOne/BSStaticLibraryOne.xcodeproj/project.pbxproj @@ -452,6 +452,7 @@ 9B53E8671E226EA4005F74C6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -495,6 +496,7 @@ 9B53E8591E223564005F74C6 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 9B53E8661E226EA4005F74C6 /* Build configuration list for PBXNativeTarget "Pod" */ = { isa = XCConfigurationList; @@ -503,6 +505,7 @@ 9B53E8681E226EA4005F74C6 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/CocoaPodsDemo/ShellProject.xcworkspace/contents.xcworkspacedata b/CocoaPodsDemo/ShellProject.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..2f100bc --- /dev/null +++ b/CocoaPodsDemo/ShellProject.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/CocoaPodsDemo/ShellProject.xcworkspace/xcshareddata/ShellProject.xcscmblueprint b/CocoaPodsDemo/ShellProject.xcworkspace/xcshareddata/ShellProject.xcscmblueprint new file mode 100644 index 0000000..bb54c97 --- /dev/null +++ b/CocoaPodsDemo/ShellProject.xcworkspace/xcshareddata/ShellProject.xcscmblueprint @@ -0,0 +1,30 @@ +{ + "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "054FA612D81390BCA914FF3E911AFB6ED941DB7C", + "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { + + }, + "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { + "054FA612D81390BCA914FF3E911AFB6ED941DB7C" : 9223372036854775807, + "C71A612E55CCF042C9D0404A97F793518FAC0059" : 9223372036854775807 + }, + "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "374E162E-2A30-4B89-BEBA-6B8FDE39D0C7", + "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { + "054FA612D81390BCA914FF3E911AFB6ED941DB7C" : "SampleCode\/", + "C71A612E55CCF042C9D0404A97F793518FAC0059" : "" + }, + "DVTSourceControlWorkspaceBlueprintNameKey" : "ShellProject", + "DVTSourceControlWorkspaceBlueprintVersion" : 204, + "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "CocoaPodsDemo\/ShellProject.xcworkspace", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/649395594\/MySampleCode.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "054FA612D81390BCA914FF3E911AFB6ED941DB7C" + }, + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/649395594\/panDoctor-iOS.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "C71A612E55CCF042C9D0404A97F793518FAC0059" + } + ] +} \ No newline at end of file diff --git a/CocoaPodsDemo/ShellProject.xcworkspace/xcuserdata/zxy.xcuserdatad/UserInterfaceState.xcuserstate b/CocoaPodsDemo/ShellProject.xcworkspace/xcuserdata/zxy.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e79a6846e940bb13258ff35b7012bb0810783afa GIT binary patch literal 60145 zcmcd!2Y3@l)4tt3Nmp&TfN{mxreiR@geKc^32s=ju_;lEEx^Ipjtec2+@_FDdPol# z0;KoedvB25d+)vHpWD-^SaO4W|Cc9UK$>}XcXoDWc5m<1^46xt_KuvKmpH^>j&M9@ z;jHQt>XS8DYrSpljV;YJSuM+t@YZ*<*JjnV)vs!VkKI`vEv>N}+Oqxn7_ytQaRL{| z#dCwWk=!V5G&hDD%Z=l*x$)ctZZbEMTgX*%F3!zWan;-+u7<1S7IRCurQ9;^Fs^~~ zaz}7&Tszmnb#iOD4IJf;6{k?ltZ$?rrWJ?j!CC?mO-m?pN+N6pP|eJQ{=sqXaYrC88vhj8af4 zN<+iYa5M^yM&r-~GzrZ@hoIRg7Zsrjv=CLI#b^myiW-m?twGJG1)YGlpcBza=wx&X zIu)IUPDfkOx#&D}F}eipMtjg+bS1hL-H#qX52A8E44FhGlPP2>nMvl6`NTmMkP=c#%1Ak>Aa2q?ykrGgNmh|Yas+86ZDcLK zjlYP$l;6(p&0)t2ilH(GA7+-|wca|t zXL;H3n&nN)JC^q?A6Y)Nd|~<8@}1>J%P*GSEq_`5wPLHqDp+M}lr_d0Z%wc!SyQd) z)=cXN>uBpZ>jdj0>s0Fu>mk;;R);m;T4+7gT57GZx~$dKTI*7)$GY6=wXU+Rwl-Uj zw02n6SvOiYTQ%!()-BePt*2Sfu%2x_&w7FNV(Vqr9oAjeJ=UwN*II9|-fX?idZ+as z>;2Y;tdClsus&^l&ibPDCF`r!H>_`4-?M&b{lxmY^(*VQ)*q}tTYt0uY5m8BY`o28 zlWeNZZi}-Gwk6t9Y(s4sw&Au>wz0PHwu!bWw&}K6wmG)>wme&bt=Lv#E4NkJs%$m3 zCAPzCb+!iEO4|{(HMUk;yKSv)gKd-T7~8S76Kp5hPPJ{don<@Mw#{~t?NZxz+fLhV z+m*I!Y}eavvfXOC!*;jrKHGz~M{JMVp0Yh_d%?Ef_KNLw+grAGZ6DY^wtZ&%()Nw* zd)qIzKZGbDTCfW-LaY!c3>QWSBZX1IXkm;nRv0Jb2vdX^!Xd&uVZM+rlnA9lnNTiN z35$j0!VyB7uvS7WwA<|sQA>~Vj(xFnRR3W*fYN=LQDtV;kl2=+Kt(KalBc%>$owQNf zENRkl(iZ7t=``sK>1^pd=>q9u=`v}Dv`g9}T_s&B-5}j8-6q{B-6P#EJtRFUJs~|U zJtw^=y(GOVy&=6Vy(fJreIk7>eI

{UH4;{U-e>{Ualpmu<2ntFm2=lLyO*a*8}u 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

G9d|Q{tz^&xoHD?}*Qfcg7dS7sq$T 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 +#import +#import @interface ViewController () From c67bc599ddb7a046e367fbf9edc0f831b6e26f9e Mon Sep 17 00:00:00 2001 From: zhangxingyu Date: Thu, 16 Feb 2017 11:50:31 +0800 Subject: [PATCH 15/18] no message --- .../OtherLinkerFlag/OtherLinkerFlag.xcodeproj/project.pbxproj | 4 ++-- .../ShellProject/ShellProject.xcodeproj/project.pbxproj | 4 ++-- KtTableView/KtTableView/AppDelegate.h | 2 +- KtTableView/KtTableView/AppDelegate.m | 2 +- KtTableView/KtTableView/KTMainViewController.h | 2 +- KtTableView/KtTableView/KTMainViewController.m | 2 +- KtTableView/KtTableView/KtBaseModel/KtBaseItem.h | 4 ++-- KtTableView/KtTableView/KtBaseModel/KtBaseItem.m | 2 +- .../KtTableView/KtBaseModel/KtBaseListModel/KtBaseListItem.h | 2 +- .../KtTableView/KtBaseModel/KtBaseListModel/KtBaseListItem.m | 2 +- .../KtTableView/KtBaseModel/KtBaseListModel/KtBaseListModel.h | 2 +- .../KtTableView/KtBaseModel/KtBaseListModel/KtBaseListModel.m | 2 +- .../KtBaseListModel/KtRefreshTableViewController.h | 2 +- .../KtBaseListModel/KtRefreshTableViewController.m | 2 +- KtTableView/KtTableView/KtBaseModel/KtBaseModel.h | 2 +- KtTableView/KtTableView/KtBaseModel/KtBaseModel.m | 2 +- KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.h | 2 +- KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.m | 2 +- KtTableView/KtTableView/KtBaseTableView.h | 2 +- KtTableView/KtTableView/KtBaseTableView.m | 2 +- KtTableView/KtTableView/KtBaseTableViewCell.h | 2 +- KtTableView/KtTableView/KtBaseTableViewCell.m | 2 +- .../KtTableView/KtExtension/NSDictionary+KtExtension.h | 2 +- .../KtTableView/KtExtension/NSDictionary+KtExtension.m | 4 ++-- KtTableView/KtTableView/KtExtension/UIView+KtExtension.h | 2 +- KtTableView/KtTableView/KtExtension/UIView+KtExtension.m | 2 +- KtTableView/KtTableView/KtMainTableItem.h | 4 ++-- KtTableView/KtTableView/KtMainTableItem.m | 4 ++-- KtTableView/KtTableView/KtMainTableModel.h | 2 +- KtTableView/KtTableView/KtMainTableModel.m | 2 +- KtTableView/KtTableView/KtMainTableViewCell.h | 2 +- KtTableView/KtTableView/KtMainTableViewCell.m | 2 +- KtTableView/KtTableView/KtMainTableViewDataSource.h | 2 +- KtTableView/KtTableView/KtMainTableViewDataSource.m | 2 +- KtTableView/KtTableView/KtTableViewBaseItem.h | 2 +- KtTableView/KtTableView/KtTableViewBaseItem.m | 2 +- KtTableView/KtTableView/KtTableViewController.h | 2 +- KtTableView/KtTableView/KtTableViewController.m | 2 +- KtTableView/KtTableView/KtTableViewDataSource.h | 2 +- KtTableView/KtTableView/KtTableViewDataSource.m | 2 +- KtTableView/KtTableView/KtTableViewSectionObject.h | 2 +- KtTableView/KtTableView/KtTableViewSectionObject.m | 2 +- KtTableView/KtTableView/main.m | 2 +- KtTableView/KtTableViewTests/KtTableViewTests.m | 2 +- KtTableView/KtTableViewUITests/KtTableViewUITests.m | 2 +- RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj | 4 ++-- 46 files changed, 53 insertions(+), 53 deletions(-) diff --git a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag.xcodeproj/project.pbxproj b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag.xcodeproj/project.pbxproj index 0d5d964..0280a59 100644 --- a/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag.xcodeproj/project.pbxproj +++ b/CocoaPodsDemo/OtherLinkerFlag/OtherLinkerFlag.xcodeproj/project.pbxproj @@ -286,7 +286,7 @@ "$(inherited)", "$(PROJECT_DIR)/OtherLinkerFlag", ); - PRODUCT_BUNDLE_IDENTIFIER = baidu.OtherLinkerFlag; + PRODUCT_BUNDLE_IDENTIFIER = bestswifter.OtherLinkerFlag; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -301,7 +301,7 @@ "$(inherited)", "$(PROJECT_DIR)/OtherLinkerFlag", ); - PRODUCT_BUNDLE_IDENTIFIER = baidu.OtherLinkerFlag; + PRODUCT_BUNDLE_IDENTIFIER = bestswifter.OtherLinkerFlag; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj b/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj index 556680f..b983f5d 100644 --- a/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj +++ b/CocoaPodsDemo/ShellProject/ShellProject.xcodeproj/project.pbxproj @@ -302,7 +302,7 @@ "-l\"BSStaticLibraryOne\"", "-l\"BSStaticLibraryTwo\"", ); - PRODUCT_BUNDLE_IDENTIFIER = baidu.ShellProject; + PRODUCT_BUNDLE_IDENTIFIER = bestswifter.ShellProject; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -328,7 +328,7 @@ "-l\"BSStaticLibraryOne\"", "-l\"BSStaticLibraryTwo\"", ); - PRODUCT_BUNDLE_IDENTIFIER = baidu.ShellProject; + PRODUCT_BUNDLE_IDENTIFIER = bestswifter.ShellProject; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/KtTableView/KtTableView/AppDelegate.h b/KtTableView/KtTableView/AppDelegate.h index 0dd07c2..fd39de6 100644 --- a/KtTableView/KtTableView/AppDelegate.h +++ b/KtTableView/KtTableView/AppDelegate.h @@ -2,7 +2,7 @@ // AppDelegate.h // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/AppDelegate.m b/KtTableView/KtTableView/AppDelegate.m index 1562cd9..877622a 100644 --- a/KtTableView/KtTableView/AppDelegate.m +++ b/KtTableView/KtTableView/AppDelegate.m @@ -2,7 +2,7 @@ // AppDelegate.m // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KTMainViewController.h b/KtTableView/KtTableView/KTMainViewController.h index ae4c929..d1b62a2 100644 --- a/KtTableView/KtTableView/KTMainViewController.h +++ b/KtTableView/KtTableView/KTMainViewController.h @@ -2,7 +2,7 @@ // ViewController.h // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KTMainViewController.m b/KtTableView/KtTableView/KTMainViewController.m index 63a3252..244d187 100644 --- a/KtTableView/KtTableView/KTMainViewController.m +++ b/KtTableView/KtTableView/KTMainViewController.m @@ -2,7 +2,7 @@ // ViewController.m // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseItem.h b/KtTableView/KtTableView/KtBaseModel/KtBaseItem.h index f1775d2..afe66fa 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseItem.h +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseItem.h @@ -2,7 +2,7 @@ // KtBaseItem.h // KtTableView // -// Created by baidu on 16/5/13. +// Created by bestswifter on 16/5/13. // Copyright © 2016年 zxy. All rights reserved. // @@ -29,4 +29,4 @@ - (NSDictionary *)propertyList:(Class)cls; -@end \ No newline at end of file +@end diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseItem.m b/KtTableView/KtTableView/KtBaseModel/KtBaseItem.m index 668c0a1..c6aa111 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseItem.m +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseItem.m @@ -2,7 +2,7 @@ // KtBaseItem.m // KtTableView // -// Created by baidu on 16/5/13. +// Created by bestswifter on 16/5/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListItem.h b/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListItem.h index 69ccda1..b7c426c 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListItem.h +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListItem.h @@ -2,7 +2,7 @@ // KtBaseListItem.h // KtTableView // -// Created by baidu on 16/5/18. +// Created by bestswifter on 16/5/18. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListItem.m b/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListItem.m index 8413d37..a2bccea 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListItem.m +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListItem.m @@ -2,7 +2,7 @@ // KtBaseListItem.m // KtTableView // -// Created by baidu on 16/5/18. +// Created by bestswifter on 16/5/18. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListModel.h b/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListModel.h index 9de6e00..95f0261 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListModel.h +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListModel.h @@ -2,7 +2,7 @@ // KtBaseListModel.h // KtTableView // -// Created by baidu on 16/5/18. +// Created by bestswifter on 16/5/18. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListModel.m b/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListModel.m index bed7088..a2ccd37 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListModel.m +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtBaseListModel.m @@ -2,7 +2,7 @@ // KtBaseListModel.m // KtTableView // -// Created by baidu on 16/5/18. +// Created by bestswifter on 16/5/18. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtRefreshTableViewController.h b/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtRefreshTableViewController.h index 98d9d2a..79fcc66 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtRefreshTableViewController.h +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtRefreshTableViewController.h @@ -2,7 +2,7 @@ // KtRefreshTableViewController.h // KtTableView // -// Created by baidu on 16/5/20. +// Created by bestswifter on 16/5/20. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtRefreshTableViewController.m b/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtRefreshTableViewController.m index 2fbfc1d..611e4fe 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtRefreshTableViewController.m +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseListModel/KtRefreshTableViewController.m @@ -2,7 +2,7 @@ // KtRefreshTableViewController.m // KtTableView // -// Created by baidu on 16/5/20. +// Created by bestswifter on 16/5/20. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseModel.h b/KtTableView/KtTableView/KtBaseModel/KtBaseModel.h index eb694fd..e0348d1 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseModel.h +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseModel.h @@ -2,7 +2,7 @@ // KtBaseModel.h // KtTableView // -// Created by baidu on 16/5/13. +// Created by bestswifter on 16/5/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseModel.m b/KtTableView/KtTableView/KtBaseModel/KtBaseModel.m index a7ba254..41879ef 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseModel.m +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseModel.m @@ -2,7 +2,7 @@ // KtBaseModel.m // KtTableView // -// Created by baidu on 16/5/13. +// Created by bestswifter on 16/5/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.h b/KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.h index 3aa0033..d9c4238 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.h +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.h @@ -2,7 +2,7 @@ // KtBaseServerAPI.h // KtTableView // -// Created by baidu on 16/5/13. +// Created by bestswifter on 16/5/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.m b/KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.m index 1410fda..6c86119 100644 --- a/KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.m +++ b/KtTableView/KtTableView/KtBaseModel/KtBaseServerAPI.m @@ -2,7 +2,7 @@ // KtBaseServerAPI.m // KtTableView // -// Created by baidu on 16/5/13. +// Created by bestswifter on 16/5/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseTableView.h b/KtTableView/KtTableView/KtBaseTableView.h index b3b6e69..f8f0655 100644 --- a/KtTableView/KtTableView/KtBaseTableView.h +++ b/KtTableView/KtTableView/KtBaseTableView.h @@ -2,7 +2,7 @@ // KtBaseTableView.h // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseTableView.m b/KtTableView/KtTableView/KtBaseTableView.m index fa6afef..8fd3b3e 100644 --- a/KtTableView/KtTableView/KtBaseTableView.m +++ b/KtTableView/KtTableView/KtBaseTableView.m @@ -2,7 +2,7 @@ // KtBaseTableView.m // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseTableViewCell.h b/KtTableView/KtTableView/KtBaseTableViewCell.h index 1809be0..259ce07 100644 --- a/KtTableView/KtTableView/KtBaseTableViewCell.h +++ b/KtTableView/KtTableView/KtBaseTableViewCell.h @@ -2,7 +2,7 @@ // KtBaseTableViewCell.h // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtBaseTableViewCell.m b/KtTableView/KtTableView/KtBaseTableViewCell.m index e1e031e..fa6e4ea 100644 --- a/KtTableView/KtTableView/KtBaseTableViewCell.m +++ b/KtTableView/KtTableView/KtBaseTableViewCell.m @@ -2,7 +2,7 @@ // KtBaseTableViewCell.m // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtExtension/NSDictionary+KtExtension.h b/KtTableView/KtTableView/KtExtension/NSDictionary+KtExtension.h index 3058638..7fea023 100644 --- a/KtTableView/KtTableView/KtExtension/NSDictionary+KtExtension.h +++ b/KtTableView/KtTableView/KtExtension/NSDictionary+KtExtension.h @@ -2,7 +2,7 @@ // NSDictionary+KtExtension.h // KtTableView // -// Created by baidu on 16/5/15. +// Created by bestswifter on 16/5/15. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtExtension/NSDictionary+KtExtension.m b/KtTableView/KtTableView/KtExtension/NSDictionary+KtExtension.m index b372300..5544cac 100644 --- a/KtTableView/KtTableView/KtExtension/NSDictionary+KtExtension.m +++ b/KtTableView/KtTableView/KtExtension/NSDictionary+KtExtension.m @@ -2,7 +2,7 @@ // NSDictionary+KtExtension.m // KtTableView // -// Created by baidu on 16/5/15. +// Created by bestswifter on 16/5/15. // Copyright © 2016年 zxy. All rights reserved. // @@ -184,4 +184,4 @@ - (void)safeRemoveObjectForKey:(id)aKey { [self removeObjectForKey:aKey]; } -@end \ No newline at end of file +@end diff --git a/KtTableView/KtTableView/KtExtension/UIView+KtExtension.h b/KtTableView/KtTableView/KtExtension/UIView+KtExtension.h index 4c181a8..5cd6349 100644 --- a/KtTableView/KtTableView/KtExtension/UIView+KtExtension.h +++ b/KtTableView/KtTableView/KtExtension/UIView+KtExtension.h @@ -2,7 +2,7 @@ // UIView+KtExtension.h // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtExtension/UIView+KtExtension.m b/KtTableView/KtTableView/KtExtension/UIView+KtExtension.m index b554401..dec0a1b 100644 --- a/KtTableView/KtTableView/KtExtension/UIView+KtExtension.m +++ b/KtTableView/KtTableView/KtExtension/UIView+KtExtension.m @@ -2,7 +2,7 @@ // UIView+KtExtension.m // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtMainTableItem.h b/KtTableView/KtTableView/KtMainTableItem.h index 4f2431a..6171d7f 100644 --- a/KtTableView/KtTableView/KtMainTableItem.h +++ b/KtTableView/KtTableView/KtMainTableItem.h @@ -2,7 +2,7 @@ // KtMainTableItem.h // KtTableView // -// Created by baidu on 16/5/13. +// Created by bestswifter on 16/5/13. // Copyright © 2016年 zxy. All rights reserved. // @@ -20,4 +20,4 @@ @property (copy, nonatomic) NSString *url; @property (copy, nonatomic) NSString *imageUrl; -@end \ No newline at end of file +@end diff --git a/KtTableView/KtTableView/KtMainTableItem.m b/KtTableView/KtTableView/KtMainTableItem.m index 8723fc4..804e818 100644 --- a/KtTableView/KtTableView/KtMainTableItem.m +++ b/KtTableView/KtTableView/KtMainTableItem.m @@ -2,7 +2,7 @@ // KtMainTableItem.m // KtTableView // -// Created by baidu on 16/5/13. +// Created by bestswifter on 16/5/13. // Copyright © 2016年 zxy. All rights reserved. // @@ -33,4 +33,4 @@ - (id)init { return self; } -@end \ No newline at end of file +@end diff --git a/KtTableView/KtTableView/KtMainTableModel.h b/KtTableView/KtTableView/KtMainTableModel.h index 539d7e0..378b06d 100644 --- a/KtTableView/KtTableView/KtMainTableModel.h +++ b/KtTableView/KtTableView/KtMainTableModel.h @@ -2,7 +2,7 @@ // KtMainTableModel.h // KtTableView // -// Created by baidu on 16/5/13. +// Created by bestswifter on 16/5/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtMainTableModel.m b/KtTableView/KtTableView/KtMainTableModel.m index 9e24a0f..334a75b 100644 --- a/KtTableView/KtTableView/KtMainTableModel.m +++ b/KtTableView/KtTableView/KtMainTableModel.m @@ -2,7 +2,7 @@ // KtMainTableModel.m // KtTableView // -// Created by baidu on 16/5/13. +// Created by bestswifter on 16/5/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtMainTableViewCell.h b/KtTableView/KtTableView/KtMainTableViewCell.h index 9cde189..f57a6dd 100644 --- a/KtTableView/KtTableView/KtMainTableViewCell.h +++ b/KtTableView/KtTableView/KtMainTableViewCell.h @@ -2,7 +2,7 @@ // KtMainTableViewCell.h // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtMainTableViewCell.m b/KtTableView/KtTableView/KtMainTableViewCell.m index bea6475..8249d4c 100644 --- a/KtTableView/KtTableView/KtMainTableViewCell.m +++ b/KtTableView/KtTableView/KtMainTableViewCell.m @@ -2,7 +2,7 @@ // KtMainTableViewCell.m // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtMainTableViewDataSource.h b/KtTableView/KtTableView/KtMainTableViewDataSource.h index 5e4369c..6663687 100644 --- a/KtTableView/KtTableView/KtMainTableViewDataSource.h +++ b/KtTableView/KtTableView/KtMainTableViewDataSource.h @@ -2,7 +2,7 @@ // KtMainTableViewDataSource.h // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtMainTableViewDataSource.m b/KtTableView/KtTableView/KtMainTableViewDataSource.m index e9837e3..ebdd3b5 100644 --- a/KtTableView/KtTableView/KtMainTableViewDataSource.m +++ b/KtTableView/KtTableView/KtMainTableViewDataSource.m @@ -2,7 +2,7 @@ // KtMainTableViewDataSource.m // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtTableViewBaseItem.h b/KtTableView/KtTableView/KtTableViewBaseItem.h index 2b58fc4..450904e 100644 --- a/KtTableView/KtTableView/KtTableViewBaseItem.h +++ b/KtTableView/KtTableView/KtTableViewBaseItem.h @@ -2,7 +2,7 @@ // KtTableViewBaseItem.h // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtTableViewBaseItem.m b/KtTableView/KtTableView/KtTableViewBaseItem.m index 04c7182..b0e874b 100644 --- a/KtTableView/KtTableView/KtTableViewBaseItem.m +++ b/KtTableView/KtTableView/KtTableViewBaseItem.m @@ -2,7 +2,7 @@ // KtTableViewBaseItem.m // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtTableViewController.h b/KtTableView/KtTableView/KtTableViewController.h index 1d8585d..f6e3569 100644 --- a/KtTableView/KtTableView/KtTableViewController.h +++ b/KtTableView/KtTableView/KtTableViewController.h @@ -2,7 +2,7 @@ // KtTableViewController.h // KtTableView // -// Created by baidu on 16/4/16. +// Created by bestswifter on 16/4/16. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtTableViewController.m b/KtTableView/KtTableView/KtTableViewController.m index f003450..42337d6 100644 --- a/KtTableView/KtTableView/KtTableViewController.m +++ b/KtTableView/KtTableView/KtTableViewController.m @@ -2,7 +2,7 @@ // KtTableViewController.m // KtTableView // -// Created by baidu on 16/4/16. +// Created by bestswifter on 16/4/16. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtTableViewDataSource.h b/KtTableView/KtTableView/KtTableViewDataSource.h index 4db9abf..558c217 100644 --- a/KtTableView/KtTableView/KtTableViewDataSource.h +++ b/KtTableView/KtTableView/KtTableViewDataSource.h @@ -2,7 +2,7 @@ // KtTableViewDataSource.h // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtTableViewDataSource.m b/KtTableView/KtTableView/KtTableViewDataSource.m index 88e323e..35d5861 100644 --- a/KtTableView/KtTableView/KtTableViewDataSource.m +++ b/KtTableView/KtTableView/KtTableViewDataSource.m @@ -2,7 +2,7 @@ // KtTableViewDataSource.m // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtTableViewSectionObject.h b/KtTableView/KtTableView/KtTableViewSectionObject.h index 27c9399..48ac8ad 100644 --- a/KtTableView/KtTableView/KtTableViewSectionObject.h +++ b/KtTableView/KtTableView/KtTableViewSectionObject.h @@ -2,7 +2,7 @@ // KtTableViewSectionObject.h // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/KtTableViewSectionObject.m b/KtTableView/KtTableView/KtTableViewSectionObject.m index 24e8dc1..8a5125a 100644 --- a/KtTableView/KtTableView/KtTableViewSectionObject.m +++ b/KtTableView/KtTableView/KtTableViewSectionObject.m @@ -2,7 +2,7 @@ // KtTableViewSectionObject.m // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableView/main.m b/KtTableView/KtTableView/main.m index 18b592f..aa21d0d 100644 --- a/KtTableView/KtTableView/main.m +++ b/KtTableView/KtTableView/main.m @@ -2,7 +2,7 @@ // main.m // KtTableView // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableViewTests/KtTableViewTests.m b/KtTableView/KtTableViewTests/KtTableViewTests.m index 53e925b..532b1f9 100644 --- a/KtTableView/KtTableViewTests/KtTableViewTests.m +++ b/KtTableView/KtTableViewTests/KtTableViewTests.m @@ -2,7 +2,7 @@ // KtTableViewTests.m // KtTableViewTests // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/KtTableView/KtTableViewUITests/KtTableViewUITests.m b/KtTableView/KtTableViewUITests/KtTableViewUITests.m index 780997f..786578c 100644 --- a/KtTableView/KtTableViewUITests/KtTableViewUITests.m +++ b/KtTableView/KtTableViewUITests/KtTableViewUITests.m @@ -2,7 +2,7 @@ // KtTableViewUITests.m // KtTableViewUITests // -// Created by baidu on 16/4/13. +// Created by bestswifter on 16/4/13. // Copyright © 2016年 zxy. All rights reserved. // diff --git a/RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj b/RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj index e0ef08c..b81fcd1 100644 --- a/RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj +++ b/RunloopAndThread/RunloopAndThread.xcodeproj/project.pbxproj @@ -273,7 +273,7 @@ DEVELOPMENT_TEAM = RN42P92PY7; INFOPLIST_FILE = RunloopAndThread/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = baidu.RunloopAndThread; + PRODUCT_BUNDLE_IDENTIFIER = bestswifter.RunloopAndThread; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -285,7 +285,7 @@ DEVELOPMENT_TEAM = RN42P92PY7; INFOPLIST_FILE = RunloopAndThread/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = baidu.RunloopAndThread; + PRODUCT_BUNDLE_IDENTIFIER = bestswifter.RunloopAndThread; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; From b15fce956819ee4f20c315bb53a1b2bd4d86e040 Mon Sep 17 00:00:00 2001 From: LeeJunhui <84416097@qq.com> Date: Mon, 23 Oct 2017 16:12:28 +0800 Subject: [PATCH 16/18] Update GraphicsPerformance-Starter project syntax to Swift 3.2 --- .../project.pbxproj | 14 +++++++++++--- .../contents.xcworkspacedata | 7 +++++++ .../CustomTableCell.swift | 8 ++++---- .../FirstViewController.swift | 19 ++++++++++--------- 4 files changed, 32 insertions(+), 16 deletions(-) create mode 100644 GraphicsPerformance-Starter/GraphicsPerformance-Starter.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/GraphicsPerformance-Starter/GraphicsPerformance-Starter.xcodeproj/project.pbxproj b/GraphicsPerformance-Starter/GraphicsPerformance-Starter.xcodeproj/project.pbxproj index 21b1c1a..9ebffac 100644 --- a/GraphicsPerformance-Starter/GraphicsPerformance-Starter.xcodeproj/project.pbxproj +++ b/GraphicsPerformance-Starter/GraphicsPerformance-Starter.xcodeproj/project.pbxproj @@ -207,16 +207,16 @@ TargetAttributes = { 9BEA051B1C50EFAC0075E954 = { CreatedOnToolsVersion = 7.2; - DevelopmentTeam = U2HX3RFD94; + DevelopmentTeam = FQL8675Q6W; }; 9BEA05311C50EFAC0075E954 = { CreatedOnToolsVersion = 7.2; - DevelopmentTeam = U2HX3RFD94; + DevelopmentTeam = FQL8675Q6W; TestTargetID = 9BEA051B1C50EFAC0075E954; }; 9BEA053C1C50EFAC0075E954 = { CreatedOnToolsVersion = 7.2; - DevelopmentTeam = U2HX3RFD94; + DevelopmentTeam = FQL8675Q6W; TestTargetID = 9BEA051B1C50EFAC0075E954; }; }; @@ -416,10 +416,12 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = FQL8675Q6W; INFOPLIST_FILE = "GraphicsPerformance-Starter/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "NEU.GraphicsPerformance-Starter"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -427,10 +429,12 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = FQL8675Q6W; INFOPLIST_FILE = "GraphicsPerformance-Starter/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "NEU.GraphicsPerformance-Starter"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -438,6 +442,7 @@ isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; + DEVELOPMENT_TEAM = FQL8675Q6W; INFOPLIST_FILE = "GraphicsPerformance-StarterTests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "NEU.GraphicsPerformance-StarterTests"; @@ -450,6 +455,7 @@ isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; + DEVELOPMENT_TEAM = FQL8675Q6W; INFOPLIST_FILE = "GraphicsPerformance-StarterTests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "NEU.GraphicsPerformance-StarterTests"; @@ -461,6 +467,7 @@ 9BEA054D1C50EFAC0075E954 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + DEVELOPMENT_TEAM = FQL8675Q6W; INFOPLIST_FILE = "GraphicsPerformance-StarterUITests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "NEU.GraphicsPerformance-StarterUITests"; @@ -473,6 +480,7 @@ 9BEA054E1C50EFAC0075E954 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + DEVELOPMENT_TEAM = FQL8675Q6W; INFOPLIST_FILE = "GraphicsPerformance-StarterUITests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "NEU.GraphicsPerformance-StarterUITests"; diff --git a/GraphicsPerformance-Starter/GraphicsPerformance-Starter.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/GraphicsPerformance-Starter/GraphicsPerformance-Starter.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/GraphicsPerformance-Starter/GraphicsPerformance-Starter.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/GraphicsPerformance-Starter/GraphicsPerformance-Starter/CustomTableCell.swift b/GraphicsPerformance-Starter/GraphicsPerformance-Starter/CustomTableCell.swift index 9f1ea23..12ce946 100644 --- a/GraphicsPerformance-Starter/GraphicsPerformance-Starter/CustomTableCell.swift +++ b/GraphicsPerformance-Starter/GraphicsPerformance-Starter/CustomTableCell.swift @@ -9,16 +9,16 @@ import UIKit class CustomTableCell: UITableViewCell { - let imgView = UIImageView(frame: CGRectMake(10, 10, 180, 180)) - let label = UILabel(frame: CGRectMake(220, 90, 150, 20)) + let imgView = UIImageView(frame: CGRect(x: 10, y: 10, width: 180, height: 180)) + let label = UILabel(frame: CGRect(x: 220, y: 90, width: 150, height: 20)) override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) - imgView.layer.shadowColor = UIColor.blackColor().CGColor + imgView.layer.shadowColor = UIColor.black.cgColor imgView.layer.shadowOpacity = 1 imgView.layer.shadowRadius = 2 - imgView.layer.shadowOffset = CGSizeMake(1, 1) + imgView.layer.shadowOffset = CGSize(width: 1, height: 1) label.layer.shouldRasterize = true diff --git a/GraphicsPerformance-Starter/GraphicsPerformance-Starter/FirstViewController.swift b/GraphicsPerformance-Starter/GraphicsPerformance-Starter/FirstViewController.swift index b666aaf..2fe9d98 100644 --- a/GraphicsPerformance-Starter/GraphicsPerformance-Starter/FirstViewController.swift +++ b/GraphicsPerformance-Starter/GraphicsPerformance-Starter/FirstViewController.swift @@ -10,7 +10,7 @@ import UIKit class FirstViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { - let table = UITableView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.height - 49)) + let table = UITableView(frame: CGRect(x: 0, y:0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height - 49)) let imgArray = Array(1...10) override func viewDidLoad() { @@ -25,24 +25,25 @@ class FirstViewController: UIViewController, UITableViewDelegate, UITableViewDat override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } + - func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let identifier = "tableviewcell" - var cell = table.dequeueReusableCellWithIdentifier(identifier) as? CustomTableCell + var cell = tableView.dequeueReusableCell(withIdentifier: identifier) as? CustomTableCell if cell == nil { - cell = CustomTableCell(style: .Default, reuseIdentifier: identifier) - cell?.selectionStyle = .None + cell = CustomTableCell(style: .default, reuseIdentifier: identifier) + cell?.selectionStyle = .none } - cell?.setupContent(String(imgArray[indexPath.row]), text: "This is a label") - + cell?.setupContent(imgName: String(imgArray[indexPath.row]), text: "This is a label") + return cell! } - func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 200 } - func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 } } From eb1482065d0e970a67073a8a20b2d2d7fcea6651 Mon Sep 17 00:00:00 2001 From: bestswifter Date: Mon, 23 Apr 2018 09:37:34 +0800 Subject: [PATCH 17/18] =?UTF-8?q?Node=20=E5=BC=95=E7=94=A8=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- require/.vscode/launch.json | 15 +++++++++++++++ require/jsconfig.json | 15 +++++++++++++++ require/main/index.js | 7 +++++++ require/package.json | 14 ++++++++++++++ require/utils/utils.js | 4 ++++ 5 files changed, 55 insertions(+) create mode 100644 require/.vscode/launch.json create mode 100644 require/jsconfig.json create mode 100644 require/main/index.js create mode 100644 require/package.json create mode 100644 require/utils/utils.js diff --git a/require/.vscode/launch.json b/require/.vscode/launch.json new file mode 100644 index 0000000..95828bc --- /dev/null +++ b/require/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + + { + "type": "node", + "request": "launch", + "name": "Launch Program", + "program": "${workspaceFolder}/b.js" + } + ] +} \ No newline at end of file diff --git a/require/jsconfig.json b/require/jsconfig.json new file mode 100644 index 0000000..182a516 --- /dev/null +++ b/require/jsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + // "target": "es6", + // "module": "commonjs", + "baseUrl": "./", + // "paths": { + // "*": [ + // "*" + // ] + // } + }, + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/require/main/index.js b/require/main/index.js new file mode 100644 index 0000000..495b7f5 --- /dev/null +++ b/require/main/index.js @@ -0,0 +1,7 @@ +let path = require('path') +process.env.NODE_PATH = path.resolve(__dirname, '../') ; +require('module').Module._initPaths(); + +let utils = require('ut') + +console.log(utils.key) \ No newline at end of file diff --git a/require/package.json b/require/package.json new file mode 100644 index 0000000..29efd98 --- /dev/null +++ b/require/package.json @@ -0,0 +1,14 @@ +{ + "name": "require", + "version": "1.0.0", + "description": "", + "main": "index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} diff --git a/require/utils/utils.js b/require/utils/utils.js new file mode 100644 index 0000000..287927d --- /dev/null +++ b/require/utils/utils.js @@ -0,0 +1,4 @@ + +module.exports = { + key:' value' +} \ No newline at end of file From db387de2bdc6d07e375d6c19a1e4ac462b91aa24 Mon Sep 17 00:00:00 2001 From: bestswifter Date: Mon, 23 Apr 2018 09:39:40 +0800 Subject: [PATCH 18/18] Add readme --- .../.vscode/launch.json | 0 NodeRequireTest/README.md | 107 ++++++++++++++++++ {require => NodeRequireTest}/jsconfig.json | 0 {require => NodeRequireTest}/main/index.js | 0 {require => NodeRequireTest}/package.json | 0 {require => NodeRequireTest}/utils/utils.js | 0 6 files changed, 107 insertions(+) rename {require => NodeRequireTest}/.vscode/launch.json (100%) create mode 100644 NodeRequireTest/README.md rename {require => NodeRequireTest}/jsconfig.json (100%) rename {require => NodeRequireTest}/main/index.js (100%) rename {require => NodeRequireTest}/package.json (100%) rename {require => NodeRequireTest}/utils/utils.js (100%) diff --git a/require/.vscode/launch.json b/NodeRequireTest/.vscode/launch.json similarity index 100% rename from require/.vscode/launch.json rename to NodeRequireTest/.vscode/launch.json diff --git a/NodeRequireTest/README.md b/NodeRequireTest/README.md new file mode 100644 index 0000000..c52ea19 --- /dev/null +++ b/NodeRequireTest/README.md @@ -0,0 +1,107 @@ +这是一篇水文,讲讲踩坑的经历。 + +# 背景 + +起因是在写 Node 时,受够了 `require ('../../../../helper.js')` 这种相对路径。不够直观不谈,如果将来在别的地方用,都不能直接 copy 过来,还得重新计算相对路径,因此希望用绝对路径(换句话说就是永远相对根路径)来表示。 + +一种比较简单的方案是封装 `require` 函数: + +```js +global.rootRequire = function(name) { + return require(__dirname + '/' + name); +} +``` + +在我们的 `rootRequire` 函数中,所有的路径都会被加上 `__dirname` 的前缀,也就实现了绝对路径。 + +这么做功能上没有问题,然而似乎 VSCode 对这种写法支持得不够好(有了解的大佬还望指教),表现为以下两个问题: + +1. 虽然我们把 `rootRequire` 定义为全局的,但在别的文件中输入这个单词时,并没有自动补全 +2. 通过这种方式引入的模块,不能跳转到模块的实现,也看不到模块的内部结构,如果用 `require` 引入则没有问题。 + +经过更进一步的测试,甚至于这种写法也是不行的: + +```js +let r = require +let a = r('../test/a') +``` + +在 VSCode 中会发现 `a` 的类型为 `any` 并且丢失了很多信息。 + +# 解决方案 + +换句话说,封装 `require` 的路是行不通了,只能用原生的 `require` 函数,那么只能看看有什么办法可以影响到模块查找的流程了。 + +内置的那套流程和顺序肯定是改不了,看起来只能从 `NODE_PATH` 这个全局变量下手了。我们知道 `require` 函数会去 `NODE_PATH` 的目录里查找模块,所以只要把它设置为工程的根路径,就可以实现绝对路径加载了。试验一下,项目目录如下所示: + +``` +project + |-----main + |------index.js + |-----util + |------utils.js +``` + +很简单的定义一下 `utils.js`,就导出一个对象: + +```js +// utils.js +module.exports = { + key:' value' +} +``` + +在 `index.js` 中这么写: + +```js +let utils = require('utils/utils') +console.log(utils.key) +``` + +然后执行 `node main/index.js`,肯定会编译失败。 + +但如果指定了 `NODE_PATH` 就不一样了,此时可以正常运行: + +```shell +export NODE_PATH=$PWD && node main/index.js +``` + +# 优化 + +直接在命令行中指定 `NODE_PATH` 有两个问题: + +1. 改变了项目的启动方式,别的开发者也会受到影响,不过这一点问题不大,因为一般都是通过命令来启动的。 +2. 如果在不同的路径下启动 node,那么 `$PWD` 是会变的,这种方式不够安全。 + +所以比较好的做法是,在入口文件中指定 `NODE_PATH`,因为这个文件的路径一般不会改变。所以 `index.js` 可以改造成这样: + +```js +let path = require('path') +process.env.NODE_PATH = path.resolve(__dirname, '../') ; +require('module').Module._initPaths(); + +let utils = require('utils/utils') + +console.log(utils.key) +``` + +这种写法的好处在于,无论我们在哪里执行 `node path/to/index.js` 都会得到正确的结果。 + +最后还需要修正一下写 `require` 函数时,路径补全的问题,只要在根目录里面加上一个 `jsconfig.json` 文件并添加如下内容即可: + +```json +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "baseUrl": "./", + }, + "exclude": [ + "node_modules" + ] +} +``` + +核心在于 `"baseUrl": "./"` 这一行。这样当我们写 `utils` 这个单词的时候,就可以享受到自动补全了。 + +至此,无论是 Node 的执行,还是路径补全,抑或是定义跳转功能,都正常工作了。 \ No newline at end of file diff --git a/require/jsconfig.json b/NodeRequireTest/jsconfig.json similarity index 100% rename from require/jsconfig.json rename to NodeRequireTest/jsconfig.json diff --git a/require/main/index.js b/NodeRequireTest/main/index.js similarity index 100% rename from require/main/index.js rename to NodeRequireTest/main/index.js diff --git a/require/package.json b/NodeRequireTest/package.json similarity index 100% rename from require/package.json rename to NodeRequireTest/package.json diff --git a/require/utils/utils.js b/NodeRequireTest/utils/utils.js similarity index 100% rename from require/utils/utils.js rename to NodeRequireTest/utils/utils.js