From 1be2dd243af0a6d761ea0f8f7a3e9bb8febf3b26 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Tue, 15 Dec 2015 16:08:06 +0800 Subject: [PATCH 01/28] =?UTF-8?q?=E8=84=9A=E6=9C=AC=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 526 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 14850 bytes .../xcschemes/HTJSGeneratorCode.xcscheme | 111 ++++ .../xcschemes/xcschememanagement.plist | 32 ++ .../HTJSGeneratorCode/AppDelegate.h | 17 + .../HTJSGeneratorCode/AppDelegate.m | 45 ++ .../AppIcon.appiconset/Contents.json | 38 ++ .../Base.lproj/LaunchScreen.storyboard | 27 + .../Base.lproj/Main.storyboard | 25 + .../HTJSGeneratorCode/Info.plist | 40 ++ .../HTJSGeneratorCode/Models/HTTestModel.h | 13 + .../HTJSGeneratorCode/Models/HTTestModel.m | 13 + .../Requests/HTTestRequest.h | 13 + .../Requests/HTTestRequest.m | 13 + .../HTJSGeneratorCode/ViewController.h | 15 + .../HTJSGeneratorCode/ViewController.m | 27 + .../HTJSGeneratorCode/main.m | 16 + .../HTJSGeneratorCodeTests.m | 39 ++ .../HTJSGeneratorCodeTests/Info.plist | 24 + .../HTJSGeneratorCodeUITests.m | 40 ++ .../HTJSGeneratorCodeUITests/Info.plist | 24 + test/HTJSGeneratorCode/Integrate.js | 21 + 23 files changed, 1126 insertions(+) create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/HTJSGeneratorCode.xcscheme create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/AppDelegate.h create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/AppDelegate.m create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/Base.lproj/LaunchScreen.storyboard create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/Base.lproj/Main.storyboard create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/Info.plist create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/Models/HTTestModel.h create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/Models/HTTestModel.m create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/Requests/HTTestRequest.h create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/Requests/HTTestRequest.m create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/ViewController.h create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/ViewController.m create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/main.m create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCodeTests/HTJSGeneratorCodeTests.m create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCodeTests/Info.plist create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCodeUITests/HTJSGeneratorCodeUITests.m create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCodeUITests/Info.plist create mode 100644 test/HTJSGeneratorCode/Integrate.js diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj new file mode 100644 index 0000000..7c45b28 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -0,0 +1,526 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { +/* Begin PBXBuildFile section */ + E6AFD0081C1E99040027F340 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0071C1E99040027F340 /* main.m */; }; + E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00A1C1E99040027F340 /* AppDelegate.m */; }; + E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00D1C1E99040027F340 /* ViewController.m */; }; + E6AFD0111C1E99040027F340 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD00F1C1E99040027F340 /* Main.storyboard */; }; + E6AFD0131C1E99040027F340 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0121C1E99040027F340 /* Assets.xcassets */; }; + E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */; }; + E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */; }; + E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + E6AFD01D1C1E99040027F340 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E6AFCFFB1C1E99040027F340 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E6AFD0021C1E99040027F340; + remoteInfo = HTJSGeneratorCode; + }; + E6AFD0281C1E99040027F340 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E6AFCFFB1C1E99040027F340 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E6AFD0021C1E99040027F340; + remoteInfo = HTJSGeneratorCode; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + E6AFD0031C1E99040027F340 /* HTJSGeneratorCode.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HTJSGeneratorCode.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E6AFD0071C1E99040027F340 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + E6AFD0091C1E99040027F340 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + E6AFD00A1C1E99040027F340 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + E6AFD00C1C1E99040027F340 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + E6AFD00D1C1E99040027F340 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + E6AFD0101C1E99040027F340 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + E6AFD0121C1E99040027F340 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + E6AFD0151C1E99040027F340 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + E6AFD0171C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E6AFD01C1C1E99040027F340 /* HTJSGeneratorCodeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeTests.m; sourceTree = ""; }; + E6AFD0221C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; + E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E32AA1231D444CF1814159C0 /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "Models/HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 409B8421F8134F9C851A9B61 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "Models/HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E6AFD0001C1E99040027F340 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E6AFD0191C1E99040027F340 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E6AFD0241C1E99040027F340 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + E6AFCFFA1C1E99040027F340 = { + isa = PBXGroup; + children = ( + E6AFD0051C1E99040027F340 /* HTJSGeneratorCode */, + E6AFD01F1C1E99040027F340 /* HTJSGeneratorCodeTests */, + E6AFD02A1C1E99040027F340 /* HTJSGeneratorCodeUITests */, + E6AFD0041C1E99040027F340 /* Products */, + ); + sourceTree = ""; + }; + E6AFD0041C1E99040027F340 /* Products */ = { + isa = PBXGroup; + children = ( + E6AFD0031C1E99040027F340 /* HTJSGeneratorCode.app */, + E6AFD01C1C1E99040027F340 /* HTJSGeneratorCodeTests.xctest */, + E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + E6AFD0051C1E99040027F340 /* HTJSGeneratorCode */ = { + isa = PBXGroup; + children = ( + E6AFD0091C1E99040027F340 /* AppDelegate.h */, + E6AFD00A1C1E99040027F340 /* AppDelegate.m */, + E6AFD00C1C1E99040027F340 /* ViewController.h */, + E6AFD00D1C1E99040027F340 /* ViewController.m */, + E6AFD00F1C1E99040027F340 /* Main.storyboard */, + E6AFD0121C1E99040027F340 /* Assets.xcassets */, + E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */, + E6AFD0171C1E99040027F340 /* Info.plist */, + E6AFD0061C1E99040027F340 /* Supporting Files */, + ); + path = HTJSGeneratorCode; + sourceTree = ""; + }; + E6AFD0061C1E99040027F340 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + E6AFD0071C1E99040027F340 /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + E6AFD01F1C1E99040027F340 /* HTJSGeneratorCodeTests */ = { + isa = PBXGroup; + children = ( + E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */, + E6AFD0221C1E99040027F340 /* Info.plist */, + ); + path = HTJSGeneratorCodeTests; + sourceTree = ""; + }; + E6AFD02A1C1E99040027F340 /* HTJSGeneratorCodeUITests */ = { + isa = PBXGroup; + children = ( + E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */, + E6AFD02D1C1E99040027F340 /* Info.plist */, + ); + path = HTJSGeneratorCodeUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E6AFD0021C1E99040027F340 /* HTJSGeneratorCode */ = { + isa = PBXNativeTarget; + buildConfigurationList = E6AFD0301C1E99040027F340 /* Build configuration list for PBXNativeTarget "HTJSGeneratorCode" */; + buildPhases = ( + E6AFCFFF1C1E99040027F340 /* Sources */, + E6AFD0001C1E99040027F340 /* Frameworks */, + E6AFD0011C1E99040027F340 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = HTJSGeneratorCode; + productName = HTJSGeneratorCode; + productReference = E6AFD0031C1E99040027F340 /* HTJSGeneratorCode.app */; + productType = "com.apple.product-type.application"; + }; + E6AFD01B1C1E99040027F340 /* HTJSGeneratorCodeTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = E6AFD0331C1E99040027F340 /* Build configuration list for PBXNativeTarget "HTJSGeneratorCodeTests" */; + buildPhases = ( + E6AFD0181C1E99040027F340 /* Sources */, + E6AFD0191C1E99040027F340 /* Frameworks */, + E6AFD01A1C1E99040027F340 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + E6AFD01E1C1E99040027F340 /* PBXTargetDependency */, + ); + name = HTJSGeneratorCodeTests; + productName = HTJSGeneratorCodeTests; + productReference = E6AFD01C1C1E99040027F340 /* HTJSGeneratorCodeTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + E6AFD0261C1E99040027F340 /* HTJSGeneratorCodeUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = E6AFD0361C1E99040027F340 /* Build configuration list for PBXNativeTarget "HTJSGeneratorCodeUITests" */; + buildPhases = ( + E6AFD0231C1E99040027F340 /* Sources */, + E6AFD0241C1E99040027F340 /* Frameworks */, + E6AFD0251C1E99040027F340 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + E6AFD0291C1E99040027F340 /* PBXTargetDependency */, + ); + name = HTJSGeneratorCodeUITests; + productName = HTJSGeneratorCodeUITests; + productReference = E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E6AFCFFB1C1E99040027F340 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 700; + ORGANIZATIONNAME = Netease; + TargetAttributes = { + E6AFD0021C1E99040027F340 = { + CreatedOnToolsVersion = 7.0; + DevelopmentTeam = 2D4LEJ8Z2D; + }; + E6AFD01B1C1E99040027F340 = { + CreatedOnToolsVersion = 7.0; + DevelopmentTeam = 2D4LEJ8Z2D; + TestTargetID = E6AFD0021C1E99040027F340; + }; + E6AFD0261C1E99040027F340 = { + CreatedOnToolsVersion = 7.0; + DevelopmentTeam = 2D4LEJ8Z2D; + TestTargetID = E6AFD0021C1E99040027F340; + }; + }; + }; + buildConfigurationList = E6AFCFFE1C1E99040027F340 /* Build configuration list for PBXProject "HTJSGeneratorCode" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = E6AFCFFA1C1E99040027F340; + productRefGroup = E6AFD0041C1E99040027F340 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E6AFD0021C1E99040027F340 /* HTJSGeneratorCode */, + E6AFD01B1C1E99040027F340 /* HTJSGeneratorCodeTests */, + E6AFD0261C1E99040027F340 /* HTJSGeneratorCodeUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + E6AFD0011C1E99040027F340 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */, + E6AFD0131C1E99040027F340 /* Assets.xcassets in Resources */, + E6AFD0111C1E99040027F340 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E6AFD01A1C1E99040027F340 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E6AFD0251C1E99040027F340 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E6AFCFFF1C1E99040027F340 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */, + E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */, + E6AFD0081C1E99040027F340 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E6AFD0181C1E99040027F340 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E6AFD0231C1E99040027F340 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + E6AFD01E1C1E99040027F340 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E6AFD0021C1E99040027F340 /* HTJSGeneratorCode */; + targetProxy = E6AFD01D1C1E99040027F340 /* PBXContainerItemProxy */; + }; + E6AFD0291C1E99040027F340 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E6AFD0021C1E99040027F340 /* HTJSGeneratorCode */; + targetProxy = E6AFD0281C1E99040027F340 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + E6AFD00F1C1E99040027F340 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + E6AFD0101C1E99040027F340 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + E6AFD0151C1E99040027F340 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + E6AFD02E1C1E99040027F340 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + 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.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + E6AFD02F1C1E99040027F340 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + 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.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + E6AFD0311C1E99040027F340 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = HTJSGeneratorCode/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Netease.HTJSGeneratorCode; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + E6AFD0321C1E99040027F340 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = HTJSGeneratorCode/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Netease.HTJSGeneratorCode; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + E6AFD0341C1E99040027F340 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = HTJSGeneratorCodeTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Netease.HTJSGeneratorCodeTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/HTJSGeneratorCode.app/HTJSGeneratorCode"; + }; + name = Debug; + }; + E6AFD0351C1E99040027F340 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = HTJSGeneratorCodeTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Netease.HTJSGeneratorCodeTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/HTJSGeneratorCode.app/HTJSGeneratorCode"; + }; + name = Release; + }; + E6AFD0371C1E99040027F340 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = HTJSGeneratorCodeUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Netease.HTJSGeneratorCodeUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = HTJSGeneratorCode; + USES_XCTRUNNER = YES; + }; + name = Debug; + }; + E6AFD0381C1E99040027F340 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = HTJSGeneratorCodeUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Netease.HTJSGeneratorCodeUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = HTJSGeneratorCode; + USES_XCTRUNNER = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E6AFCFFE1C1E99040027F340 /* Build configuration list for PBXProject "HTJSGeneratorCode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E6AFD02E1C1E99040027F340 /* Debug */, + E6AFD02F1C1E99040027F340 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E6AFD0301C1E99040027F340 /* Build configuration list for PBXNativeTarget "HTJSGeneratorCode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E6AFD0311C1E99040027F340 /* Debug */, + E6AFD0321C1E99040027F340 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E6AFD0331C1E99040027F340 /* Build configuration list for PBXNativeTarget "HTJSGeneratorCodeTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E6AFD0341C1E99040027F340 /* Debug */, + E6AFD0351C1E99040027F340 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E6AFD0361C1E99040027F340 /* Build configuration list for PBXNativeTarget "HTJSGeneratorCodeUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E6AFD0371C1E99040027F340 /* Debug */, + E6AFD0381C1E99040027F340 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E6AFCFFB1C1E99040027F340 /* Project object */; +} diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..74bb09f --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..d77c3689c03f9b9edbeb8e3a31c4be1befd5c109 GIT binary patch literal 14850 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

-R&fIhs%E3x&u+(Yz^9pcA?$qS@JeHMcyH& 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/xcschememanagement.plist b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..7062540 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + HTJSGeneratorCode.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + E6AFD0021C1E99040027F340 + + primary + + + E6AFD01B1C1E99040027F340 + + primary + + + E6AFD0261C1E99040027F340 + + primary + + + + + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode/AppDelegate.h b/test/HTJSGeneratorCode/HTJSGeneratorCode/AppDelegate.h new file mode 100644 index 0000000..45df665 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/AppDelegate.h @@ -0,0 +1,17 @@ +// +// AppDelegate.h +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode/AppDelegate.m b/test/HTJSGeneratorCode/HTJSGeneratorCode/AppDelegate.m new file mode 100644 index 0000000..184e6d2 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/AppDelegate.m @@ -0,0 +1,45 @@ +// +// AppDelegate.m +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. 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/test/HTJSGeneratorCode/HTJSGeneratorCode/Assets.xcassets/AppIcon.appiconset/Contents.json b/test/HTJSGeneratorCode/HTJSGeneratorCode/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/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/test/HTJSGeneratorCode/HTJSGeneratorCode/Base.lproj/LaunchScreen.storyboard b/test/HTJSGeneratorCode/HTJSGeneratorCode/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..2e721e1 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode/Base.lproj/Main.storyboard b/test/HTJSGeneratorCode/HTJSGeneratorCode/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f56d2f3 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/Base.lproj/Main.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode/Info.plist b/test/HTJSGeneratorCode/HTJSGeneratorCode/Info.plist new file mode 100644 index 0000000..6905cc6 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/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/test/HTJSGeneratorCode/HTJSGeneratorCode/Models/HTTestModel.h b/test/HTJSGeneratorCode/HTJSGeneratorCode/Models/HTTestModel.h new file mode 100644 index 0000000..fa8d336 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/Models/HTTestModel.h @@ -0,0 +1,13 @@ +// +// HTTestModel.h +// HTSingleCodeGenerator +// +// Created by Wangliping on 15/12/11. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface HTTestModel : NSObject + +@end diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode/Models/HTTestModel.m b/test/HTJSGeneratorCode/HTJSGeneratorCode/Models/HTTestModel.m new file mode 100644 index 0000000..f83c855 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/Models/HTTestModel.m @@ -0,0 +1,13 @@ +// +// HTTestModel.m +// HTSingleCodeGenerator +// +// Created by Wangliping on 15/12/11. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import "HTTestModel.h" + +@implementation HTTestModel + +@end diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode/Requests/HTTestRequest.h b/test/HTJSGeneratorCode/HTJSGeneratorCode/Requests/HTTestRequest.h new file mode 100644 index 0000000..6e5ce82 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/Requests/HTTestRequest.h @@ -0,0 +1,13 @@ +// +// HTTestRequest.h +// HTSingleCodeGenerator +// +// Created by Wangliping on 15/12/11. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface HTTestRequest : NSObject + +@end diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode/Requests/HTTestRequest.m b/test/HTJSGeneratorCode/HTJSGeneratorCode/Requests/HTTestRequest.m new file mode 100644 index 0000000..7b511ca --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/Requests/HTTestRequest.m @@ -0,0 +1,13 @@ +// +// HTTestRequest.m +// HTSingleCodeGenerator +// +// Created by Wangliping on 15/12/11. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import "HTTestRequest.h" + +@implementation HTTestRequest + +@end diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode/ViewController.h b/test/HTJSGeneratorCode/HTJSGeneratorCode/ViewController.h new file mode 100644 index 0000000..c4f93a3 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/ViewController.h @@ -0,0 +1,15 @@ +// +// ViewController.h +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface ViewController : UIViewController + + +@end + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode/ViewController.m b/test/HTJSGeneratorCode/HTJSGeneratorCode/ViewController.m new file mode 100644 index 0000000..3150340 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/ViewController.m @@ -0,0 +1,27 @@ +// +// ViewController.m +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. 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/test/HTJSGeneratorCode/HTJSGeneratorCode/main.m b/test/HTJSGeneratorCode/HTJSGeneratorCode/main.m new file mode 100644 index 0000000..20ae3c0 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/main.m @@ -0,0 +1,16 @@ +// +// main.m +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCodeTests/HTJSGeneratorCodeTests.m b/test/HTJSGeneratorCode/HTJSGeneratorCodeTests/HTJSGeneratorCodeTests.m new file mode 100644 index 0000000..e0a334c --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCodeTests/HTJSGeneratorCodeTests.m @@ -0,0 +1,39 @@ +// +// HTJSGeneratorCodeTests.m +// HTJSGeneratorCodeTests +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface HTJSGeneratorCodeTests : XCTestCase + +@end + +@implementation HTJSGeneratorCodeTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCodeTests/Info.plist b/test/HTJSGeneratorCode/HTJSGeneratorCodeTests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCodeTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCodeUITests/HTJSGeneratorCodeUITests.m b/test/HTJSGeneratorCode/HTJSGeneratorCodeUITests/HTJSGeneratorCodeUITests.m new file mode 100644 index 0000000..4a89e3c --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCodeUITests/HTJSGeneratorCodeUITests.m @@ -0,0 +1,40 @@ +// +// HTJSGeneratorCodeUITests.m +// HTJSGeneratorCodeUITests +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface HTJSGeneratorCodeUITests : XCTestCase + +@end + +@implementation HTJSGeneratorCodeUITests + +- (void)setUp { + [super setUp]; + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + self.continueAfterFailure = NO; + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + [[[XCUIApplication alloc] init] launch]; + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +@end diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCodeUITests/Info.plist b/test/HTJSGeneratorCode/HTJSGeneratorCodeUITests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCodeUITests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js new file mode 100644 index 0000000..2659f8b --- /dev/null +++ b/test/HTJSGeneratorCode/Integrate.js @@ -0,0 +1,21 @@ +// API is a bit wonky right now +var project = require('../../lib/pbxProject.js'), + fs = require('fs'), + projectPath = 'HTJSGeneratorCode.xcodeproj/project.pbxproj', + myProj = project(projectPath); + +// parsing is async, in a different process +myProj.parse(function (err) { + // myProj.addHeaderFile('./HTJSGenerateCode/Models/HTTestModel.h'); + // myProj.addHeaderFile('./HTJSGenerateCode/Models/HTTestModel.m'); + // myProj.addFramework('FooKit.framework'); + + console.log(myProj); + + myProj.addHeaderFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); + // myProj.addSourceFile('Models/HTTestModel.m', {}, 'HTJSGeneratorCode'); + myProj.addFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); + + fs.writeFileSync(projectPath, myProj.writeSync()); + console.log('new project written'); +}); \ No newline at end of file From 2f8fb93b5f395e08c211305e205d642ed2735557 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Tue, 15 Dec 2015 16:08:37 +0800 Subject: [PATCH 02/28] =?UTF-8?q?=E8=84=9A=E6=9C=AC=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pbxProject.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/pbxProject.js b/lib/pbxProject.js index a295fe2..5f7a30c 100644 --- a/lib/pbxProject.js +++ b/lib/pbxProject.js @@ -142,6 +142,9 @@ pbxProject.prototype.removeProductFile = function(path, opt) { */ pbxProject.prototype.addSourceFile = function (path, opt, group) { var file; + + console.log("addSourceFile is called"); + if (group) { file = this.addFile(path, group, opt); } From 88eec668a0ee1299a88f46113073717e228ec149 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Tue, 15 Dec 2015 17:13:03 +0800 Subject: [PATCH 03/28] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pbxProject.js | 10 ++++++++-- test/HTJSGeneratorCode/Integrate.js | 6 +++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/pbxProject.js b/lib/pbxProject.js index 5f7a30c..3608471 100644 --- a/lib/pbxProject.js +++ b/lib/pbxProject.js @@ -143,7 +143,7 @@ pbxProject.prototype.removeProductFile = function(path, opt) { pbxProject.prototype.addSourceFile = function (path, opt, group) { var file; - console.log("addSourceFile is called"); + console.log("addSourceFile is called" + "path:" + path + "group: " + group); if (group) { file = this.addFile(path, group, opt); @@ -1699,12 +1699,18 @@ pbxProject.prototype.getPBXObject = function(name) { pbxProject.prototype.addFile = function (path, group, opt) { + console.log("addSourceFile is called" + "path:" + path + " group: " + group); + var file = new pbxFile(path, opt); // null is better for early errors - if (this.hasFile(file.path)) return null; + if (this.hasFile(file.path)) { + console.log("addSourceFile failed" + "path:" + file.path + " group: " + group); + return null; + } file.fileRef = this.generateUuid(); + console.log("file.fileRef" + file.fileRef); this.addToPbxFileReferenceSection(file); // PBXFileReference this.addToPbxGroup(file, group); // PBXGroup diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js index 2659f8b..d2f8c38 100644 --- a/test/HTJSGeneratorCode/Integrate.js +++ b/test/HTJSGeneratorCode/Integrate.js @@ -12,10 +12,10 @@ myProj.parse(function (err) { console.log(myProj); - myProj.addHeaderFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); + myProj.addHeaderFile('HTJSGenerateCode/Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); // myProj.addSourceFile('Models/HTTestModel.m', {}, 'HTJSGeneratorCode'); - myProj.addFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); + myProj.addFile('HTJSGenerateCode/Models/HTTestModel.m', 'HTJSGeneratorCode', {}); fs.writeFileSync(projectPath, myProj.writeSync()); - console.log('new project written'); + console.log('new project written 111'); }); \ No newline at end of file From 9d09eded67dbae470b86b759343002482ad8f6c9 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Wed, 16 Dec 2015 15:13:20 +0800 Subject: [PATCH 04/28] =?UTF-8?q?=E6=A0=B9=E6=8D=AEGroupName=E8=80=8C?= =?UTF-8?q?=E4=B8=8D=E6=98=AFGroupKey=E6=9D=A5=E6=B7=BB=E5=8A=A0=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pbxProject.js | 41 +++++++++++++++++- .../project.pbxproj | 6 ++- .../UserInterfaceState.xcuserstate | Bin 14850 -> 15609 bytes test/HTJSGeneratorCode/Integrate.js | 12 +++-- 4 files changed, 49 insertions(+), 10 deletions(-) diff --git a/lib/pbxProject.js b/lib/pbxProject.js index 3608471..a3c41c7 100644 --- a/lib/pbxProject.js +++ b/lib/pbxProject.js @@ -1600,9 +1600,14 @@ pbxProject.prototype.getFirstTarget = function() { /*** NEW ***/ pbxProject.prototype.addToPbxGroup = function (file, groupKey) { - var group = this.getPBXGroupByKey(groupKey); + // var group = this.getPBXGroupByKey(groupKey); + var group = this.getPBXGroupByPath(groupKey); + console.log("group: " + group + " file " + file + " groupKey " + groupKey); if (group && group.children !== undefined) { + console.log("group.children is valid"); if (typeof file === 'string') { + console.log("group.children is valid 11"); + //Group Key var childGroup = { value:file, @@ -1613,8 +1618,12 @@ pbxProject.prototype.addToPbxGroup = function (file, groupKey) { } else { //File Object + console.log("group.children is valid 12"); + group.children.push(pbxGroupChild(file)); } + } else { + console.log("group.children is invalid"); } } @@ -1632,7 +1641,37 @@ pbxProject.prototype.removeFromPbxGroup = function (file, groupKey) { } } +pbxProject.prototype.getPBXGroupByPath = function(path) { + console.log("begin getPBXGroupByPath " + path); + + var groups = this.hash.project.objects['PBXGroup']; + for (var key in groups) { + var group = groups[key]; + if (group.path === path) { + console.log("groupInfo", group, "path: ", group.path, "name: ", group.name); + console.log("finish getPBXGroupByPath successful" + path); + return group; + } + } + + console.log("finish getPBXGroupByPath failed" + path); + return undefined; +}; + + pbxProject.prototype.getPBXGroupByKey = function(key) { + console.log("begin getPBXGroupByKey " + key); + + var groups = this.hash.project.objects['PBXGroup']; + for (var key in groups) { + var group = groups[key]; + console.log("keyInfo", key, key.path, key.name); + + console.log("groupInfo", group, "path: ", group.path, "name: ", group.name); + } + + console.log("finish getPBXGroupByKey " + key); + return this.hash.project.objects['PBXGroup'][key]; }; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj index 7c45b28..6fc3bfe 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -50,8 +50,8 @@ E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E32AA1231D444CF1814159C0 /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "Models/HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - 409B8421F8134F9C851A9B61 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "Models/HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + 1453961F4FAD426DA79B6F20 /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "Models/HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + A73F23AED75A4719B46FEFF4 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "Models/HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -111,6 +111,8 @@ E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */, E6AFD0171C1E99040027F340 /* Info.plist */, E6AFD0061C1E99040027F340 /* Supporting Files */, + 1453961F4FAD426DA79B6F20 /* HTTestModel.h */, + A73F23AED75A4719B46FEFF4 /* HTTestModel.m */, ); path = HTJSGeneratorCode; sourceTree = ""; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index d77c3689c03f9b9edbeb8e3a31c4be1befd5c109..7130a5a3e5a8b39e50289ba1ca3849bdd1022ac3 100644 GIT binary patch delta 7611 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 delta 7649 zcmZ`-2Ygf2_kZW!m!wJ4>}EByO|#l2WtD<}lrAWnQZ|;30A;k$1qCtpfq?!184nN; zk+$q10Hnss0>A&~m-|Ux-aY5MbM9I9d*6eqiRH7j_#<}X zY=Z}iW~Y_~_cI5WgUli3F!LF6iur=Mz=V{S5cn0w4)<_Yr@gdl=2P=FFt z;DtDdhXn9}9}=MvG=?V76k5V7kOJ+X6Lf|y&=s;F0E1x&422>X2E$08bD?LZm=S6p5mc3E7Yx#Uc+%KtAM0%}_FGg<7Lj)B$Cqo+t

STMx# zqm5`2+KfI%ThKnVA00pk(IIpMokXY57w7`IjIN^_=zH`Fx`XbbKhOj86brEkhhYU) zVih)G2liqgZj77YrZ_o>TjLa*jyvGKxF7D12jGGDHJpnF<6(F>F2SR4Ier5NF~J;u z8_&S+;KlfTyaa!Mm*Q$%gID3z_(QxEZ^PU14!jfZ#|Q91d=8(-7w|>=CBB5e!r$U+ z_b}U=PPG+aDQ`s5pJM2uhmR-g!XIHQ**;VXnb`86h zUB|9xKV&!Xe%uBg@x^!wwA=hAUJs%SVkF&2cYd|t3eHtT@ol4{HqRFx0dZT>j*e84 z#t#Y0GMhT2rDvyh&Mwa@uPDnX8c`l7Eh-+8UYwUdB2dV02y^hihfPY{#W8u0q?sXI6G*pg2&PS6)(@T2dJ3 z87M0+>(i~Yq_Co(yewCt|9>1g9qM?_GGa!;gfmB&ETgK{GOI|lYUUhCA&v&hMdnNXkk}dghPgsH>KU$*^yduM zneQ2AHM4;^MH9sI*=^lpoa64BzE0DfL>$(3@qtHI`g|EwjhW>`VujMN_TxG zO(T|5UNoYpyeLqXQX0rBQA}n0Ob%1V1ej9#>t~ATzjFG`tDEyPX-o-Iz*I0J>0B|T zgm{KB$GDSsj5{~tWTIy)Mee9Ty?wq9Tq z6)s_hQNf0P0ZJ=peDpq_@;#e<76ed(g>kL{4Mc(#bf5ZHlexJB)1w~C4-2&XXm`4;s$e4A(K(nLK>t)2FWA&q@WhsQ(al4 zkUo9Q9Ccy$ZcO89=uQGe)*#dq1~AT*kORG-H}rwN&=2~P!DI*-N{YxZGMtQ92?OCZ z$b~_4hEgbla#BJ@ka zbOIj}qv1b{4&#es)ck4JKuF;KinbY-*!=I2h_ahZmhScN(stjq7j*94+bY$$;p^z@J zXmC-WG^ayxVPGs-N^7*5?rd5SH36BCg&(W1;u>V-D;4%O>fk^1pR;uyyaLxz402HK zEF(-^)Q}Uoauw>dUOm&Ed9YJSL0-tYHOS2`Rhn7kMREK-WjsRh{9UD=ZxW~CyW3iJ zIExagRgI7XHG%8ByJY+F^U4DK>9sU4fVh7qcSuJcviaYbq5i0VHZC*(4MeY@Tr>#fp?vZ&*+RCGZDc#yL3XZ0 zg(!dqqakz@piwM61whw1%7}XUJJ{ZW&sK)}s&626CQUCf|^6 z`Rm%Yv0D)ZVaw1qv>ok0JIMudk$g!mEn{M-d3zWK-K7lVE55ys(;sFUFMS?`qlf~i zYIKZz&0o{SrkzH#8`R?%bdFqkhGWo0+GEj|=n}a~uK(L((btH=q~{n0T}9W(HS!&w zr8nt*K(}6^{e*rdH^}$=1id-GV+*!YvKB|9Q#gh{Y3P=DpFAMHy^u9H7CS?I z1bfI|E;9mo@hqvZn8UXU&W4;Uybz3u;9)(+4@2KICs| z4W0xA97K>+HFyf1%7L5%dPI29xasxUWwb)q@<qZD!(m^iYFm;n{c& z=J8w(6dWiyP;sEZt4gE!-kIWTcx<{!oM z3GTvs{)@gBf69TC0~>L4qhQ6&ggy;fe+YjbitJ(h89suK;$!$Y2hkkFaNyt|mIEgT zt`+zMK8a7kW_%i-;lRy-hXXH}&Osap@u9`&)00v%(h?IJH{z#y_69HGuN$`7P}W_6 zqf5!O294k0>n~L{{sI5^^2AS=9+X0uu0FPRLP>j<1K$hq0{@QxK=a`S2ZhyTWpLmBV@Kg5qXXv9Hd4w}^BC-^C*Y1@>8W*j6@$S_#Pil_=U zjDzO?Ha#|+mGXIU?pGA7E`;YsQ_Ne3c%g*i-BI<3mz1nv^%V0~u~9G{DmiFLL2rjfHhvN`BUH?`^1pcx5K{P(g!{OCko!ZPUD~-U)do3Xijp-qvOLoUVRiH4Xv|uPjb)~1-P3&gg+(Z|Qq`Q^!3zb{0+X%D%kEU zVQbhu>?QV3_Nf2_SRfF{1O`F0z$@?zk_G94K7xLN0fN^Ag9Q14Lcw6cP{A<41VJz; z-~^KdlLb=+ZwsagW(Z~qW((E`J`o%hJP=BSuL!#c2MUJ^M+%FD(}fF#i-k*s)xuig za^Vi)e&J`rqr&6D6T+{ASA^Gu*M&EQKM8LO?+71@njo4YS}dv+1wRsP5p5Ig5bY6tD%vkPDEdGOSft zo3OTF?ZVQ+x`$l@ZTY+zV!SY_Dqu!CVY!|sd4Vy)O9juKnMHgUALsW?TP zCe9Fd5O)-J7UzkJ#Z}_*;tArQm=jMDzayR{o+F+so-bY?UL<}`yg_^nY?XW>*(=#6IUqSCIU~6!xg@zPxhnZiazpZiG!~2H!4=00S}=?3XW>1OE`=`rc&(v#9Jq-Uh(q!*-LO23kRE&Wz{Rr*JSG{P9sD56zF&xm0W zGa{-Z)p!~4>i2RuRbNNa67xFXmM+&DR zM=?pUN%5T`cvtbO;y1+~N=Av50%e#|qLeCaN{`Z~OjI^jHdUr5GnDO>S<0@;?#gUs zj5D%17)?cR=G}jSb0`?Rr#IrhVlpHP32F@+sX&ZN6IJ4e^j8t zDuGI*idMB&4Oh)oZBQLkT~vLkx}>_Sx~aMqRQ;s7t@=~-Q1w{#RL!VWYOlJ9x~)1> z-C5mJou|%M7pMd3QgxZSTwSRSswb-7R8LXAtFBhBRc}-8Q14QIqTZ`%p=qb-s_CWa zqv@v^pefJ#b$4`+bWin+9_s}`y-2Uo>+}Y_NpI2H^a=W=`Xqg_zNJ1zpQ=ySXX-oX zEA%t;%k>}XH|jU*x9IolPwUU>&+9MhFX=DqztLaO-_if7|6PAi|Cj!6{X_j@{Zm7@ zL1$=e$S~y7S8LM^D-4?rI}N)Hdkmi%J~JFO95!8BucV?SewakR0_ zSYaGvtTL`Oer()k++o~hJYqa%{M>lb_?_`*d8|QLCbMNBwOQm_#PADcqzn z=}ZPwl&P`lRa1LYmZ_7ei>aHbuc^OjpefgsXDTp_Fjbm3(?Zh<(+1N<(`M5a(>Bwm zrv0Xaro*Nqrei_VO|!u4Hm8`g%pJ|0&Hc;+&AH}$bD?>#d7Sxm^V{a>=6B4q&AfS@ zd5O8!yxhFfyxP3gyvzKFd9V4P`LOwj`Iz~v`D^nn^BwcA=HJct%@53v%ug&Li^5{I zSS(hH-Qu$}vNW+IS&}U+Evc6FmMlvrOBYLj%OFcI-%@BPvJAJ3w3Jw?EE6p=EpsjN zEekB~TRyN;+xo!z$oj?xZcDvnSciFx6c)Q=;*xuCM)t+a6 z!#>YmW8Y!lZ$EB7VLxR*V?S@dXuo0q!G6>JbM&(4jnSKraY!HW^Byl znCUSyW9G!ni&-4=K}=1|@|cw|*Bn8!Bg2vH=;P?`80g4%1RO&h!yIEARgUqFH)7qf z&0^cerp9K(c8Kj1+cmad?7-MTu?4Y%V~b*k$G#VPIQE`1#@WL;!dc~f-5GRFbWV0o zb-w3Z=3MPu=iK1j=-lHx;5_U+>OAQ@?L6na;Jo3y?}~CcT#Z~wt`@FVu9ToF&6Vlu z;L37ky9T*Nx<s{9(*ZZyyTsvJi-Pj%P&UELyOWdQ} zqupih*WDA`LHBg`4EH4UOWYs0tKA>EH@H7?Z*uQ)?{V*QA8?;@Uvz)v{@VSm z`$zXZ_apaH4|rHlxJTv*Dm@yH)?@ZKJei(6Ple|V59fK)GsVMu=6dFN-t}zs?C~7; zoba6Toc5gcocCPx-0=M9x#juUbI0?m=XcLNugt6S8og$()tl&T;!W}g Date: Wed, 16 Dec 2015 17:52:03 +0800 Subject: [PATCH 05/28] Update project by group key --- .idea/.name | 1 + .idea/encodings.xml | 6 + .idea/jsLibraryMappings.xml | 6 + .idea/libraries/node_xcode_node_modules.xml | 14 + .idea/misc.xml | 13 + .idea/modules.xml | 8 + .idea/node-xcode.iml | 9 + .idea/vcs.xml | 6 + .idea/workspace.xml | 417 ++++++++++++++++++ lib/pbxProject.js | 10 +- .../project.pbxproj | 18 +- .../UserInterfaceState.xcuserstate | Bin 15609 -> 15742 bytes test/HTJSGeneratorCode/Integrate.js | 17 +- 13 files changed, 514 insertions(+), 11 deletions(-) create mode 100644 .idea/.name create mode 100644 .idea/encodings.xml create mode 100644 .idea/jsLibraryMappings.xml create mode 100644 .idea/libraries/node_xcode_node_modules.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/node-xcode.iml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..2b07282 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +node-xcode \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 0000000..2339076 --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/libraries/node_xcode_node_modules.xml b/.idea/libraries/node_xcode_node_modules.xml new file mode 100644 index 0000000..64ce749 --- /dev/null +++ b/.idea/libraries/node_xcode_node_modules.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..72abef0 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..86e2f7b --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/node-xcode.iml b/.idea/node-xcode.iml new file mode 100644 index 0000000..395f691 --- /dev/null +++ b/.idea/node-xcode.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..71dd3f0 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,417 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJECT_DIR$ + true + + bdd + + DIRECTORY + + false + + + + + + + + + + + + + + + + + + + 1450252970371 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 19 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/pbxProject.js b/lib/pbxProject.js index a3c41c7..b624465 100644 --- a/lib/pbxProject.js +++ b/lib/pbxProject.js @@ -1600,8 +1600,8 @@ pbxProject.prototype.getFirstTarget = function() { /*** NEW ***/ pbxProject.prototype.addToPbxGroup = function (file, groupKey) { - // var group = this.getPBXGroupByKey(groupKey); - var group = this.getPBXGroupByPath(groupKey); + var group = this.getPBXGroupByKey(groupKey); + //var group = this.getPBXGroupByPath(groupKey); console.log("group: " + group + " file " + file + " groupKey " + groupKey); if (group && group.children !== undefined) { console.log("group.children is valid"); @@ -1663,9 +1663,9 @@ pbxProject.prototype.getPBXGroupByKey = function(key) { console.log("begin getPBXGroupByKey " + key); var groups = this.hash.project.objects['PBXGroup']; - for (var key in groups) { - var group = groups[key]; - console.log("keyInfo", key, key.path, key.name); + for (var keyIter in groups) { + var group = groups[keyIter]; + console.log("keyInfo", keyIter, keyIter.path, keyIter.name); console.log("groupInfo", group, "path: ", group.path, "name: ", group.name); } diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj index 6fc3bfe..56e9b75 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -50,8 +50,8 @@ E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1453961F4FAD426DA79B6F20 /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "Models/HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - A73F23AED75A4719B46FEFF4 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "Models/HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + 8F58DB50FAA24BF995719D3B /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "Models/HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + C83FE4AAFA2741E1858B7737 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "Models/HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -113,6 +113,20 @@ E6AFD0061C1E99040027F340 /* Supporting Files */, 1453961F4FAD426DA79B6F20 /* HTTestModel.h */, A73F23AED75A4719B46FEFF4 /* HTTestModel.m */, + 2313863C0BF046E4B09D3F2E /* HTTestModel.h */, + 400C2FD0969644639352AD63 /* HTTestModel.m */, + 20993387A7C04D7594F5A08B /* HTTestModel.h */, + 25AA7898B0234358A9662D50 /* HTTestModel.m */, + A9A8B4D4E8944CECA9B733E4 /* HTTestModel.h */, + 38DF9581FD7B442DA0E38674 /* HTTestModel.m */, + B0FFDE78C3364164A7B06EE3 /* HTTestModel.h */, + 91FFD6FFE7784AB4A4001B15 /* HTTestModel.m */, + 2767B62A6DC14F90852BD6EA /* HTTestModel.h */, + BEA4090703E04213AB9AC27F /* HTTestModel.m */, + DC1C44346BF54650B7D5ABC3 /* HTTestModel.h */, + B7977BBD2793496AB5271249 /* HTTestModel.m */, + 8F58DB50FAA24BF995719D3B /* HTTestModel.h */, + C83FE4AAFA2741E1858B7737 /* HTTestModel.m */, ); path = HTJSGeneratorCode; sourceTree = ""; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index 7130a5a3e5a8b39e50289ba1ca3849bdd1022ac3..b44492bf4a001dd5f611f0802e2b11bfe39fc722 100644 GIT binary patch delta 7241 zcmZ`-2Ygdi)PLvRo1HYHX=YoJHhEbjP14G;AcdA8o3e+sLV>a^EgNzldn-KIvqOe} zOpz%f$dVyjL=aGhg34Bu@x8Q`@qK>H@7J{V+V1zz+ea0X3l( zya{hXD`*Yb&<5Hx9!*8l&`dNN%}0yTTJ$Meht{JFXd~K$cB8#$A3BH*p`+*+I*Cr9 zbLczt1G6Wla{o8jiT1#XF3;kLK~?t0`coZIuBbZ_ikHHi06#N1H5HG@u z@e;fgFT>06YP<<=#yjy5d=wwU$MLuL1U`w+;`8_-zJjmeU-0kv5BwPajsL+<@KgMZ zAR;Cbq9(CKPfWy2`XmzvaT1oeh?|5-DoG=mq!DRMnvv$D6X{I4kgg=3^d@~sU(%2C zCj-a`GLnoUlgSh^mCPmc$b7PZEGH|-O7baLN7j>l1*S(S^8<5{xkT&J2DCACRW7)~{LJV|n0%%;wNZNs zbB(!9Gieq-TFx48F~7ei`-8bd8`4Jn4!J$$A@kR3vd6-@w`mr2G@u0?#DbpIrtO7IG7FywEu-7$cDk3k1y8bj4H%M{_g+!Y zo_Pfs{3FFawH=a$4T2=vp%@&rBY#L4uI&bIbj(9L6@!mmQ^*Dx)if zAcP=HyU?!mol-~>tXHEsg1u3*V!O9WXTrr$o4!k9Di_s-Mhv?GGN2yRhfK(V2GEe^ z()VaL+MVXn9<=8QXbf*d6KD#}pgFXly=XptpAMzN=x{oM|4p^o(+P4IT^V$SF3=U; zp}lDz+L!h#gLffU*o1DhKOG3%DJEhg9BXF}}I-#d;7R<(tLsWnD*7?BoE zt!fL7Is^TnKcj#FFc98{0vH5^P{bFgTl)%W0UbgaI;b2cFoX#&qcO3O=M_JvV1%%0 zB#eU5P{?1>7^OvYFlBNy!}-ezHaVat#lDUcGW=*M(9T|rltAvMwFBLjnGV%O8FVxKjDOn{ zZ)|`Xzb1PdHKCu=t^6ocf~_TL^%^&$HmF_HiMDh{F=|hD^6QhW@1f37n_W;>x{H4K z(&oFU+iQBeqdfWr-Ax@G1#Zpio?keiAh~Y-yG-<_GREGh-)n37qXBde{fe({uA(kP zMQAXiKtrGq4MW5EJad!8141(P(ZgraNHj_ijYbhf1@RCxR_FxA@yE<9dmo^O=-2;2 z9%u@!B#!+rlK+|_G+j_NmgxY6Ob2>Uuylwr6=|OpP5Usxa!h%BqB&@8j>g6NiJ8|} zH8792Tf=w(TF7%&7MGw!e8d{8xdeU8u*=a>v$%H=n;C99;3(UxAeqvv>dHK zD;Wp+1g)kg=}+`$YT=+e2R-?l*6DROGd)&83$z7&j<%w0Xgk`0cA{N$1U*I1&~x-W zy+AM0AL$ig|6ei-`l=kPr(YqvSD7i$>(#l@y⩔^6TS<8(tkhQa=7&j)wb}FmqoM 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 U{LO$tsN$QPsrat^ox1sd0F1u5AOHXW delta 7178 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 bgk|()qRLo{ujmXyCBNj4lHbzrGWP!iIvt+M diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js index 1e79123..72fc4c0 100644 --- a/test/HTJSGeneratorCode/Integrate.js +++ b/test/HTJSGeneratorCode/Integrate.js @@ -8,11 +8,20 @@ var project = require('../../lib/pbxProject.js'), myProj.parse(function (err) { console.log(myProj); - myProj.removeFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); - myProj.removeFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); + var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); + console.log("keyByName" + keyByName); - myProj.addHeaderFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); - myProj.addFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); + myProj.removeFile('Models/HTTestModel.h', {}, keyByName); + myProj.removeFile('Models/HTTestModel.m', keyByName, {}); + + myProj.addHeaderFile('Models/HTTestModel.h', {}, keyByName); + myProj.addFile('Models/HTTestModel.m', keyByName, {}); + + //myProj.removeFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); + //myProj.removeFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); + // + //myProj.addHeaderFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); + //myProj.addFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); fs.writeFileSync(projectPath, myProj.writeSync()); console.log('new project written 111'); From 85e9157f65c8d6b334da11bdf4f17096d5a1fd23 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Wed, 16 Dec 2015 17:59:36 +0800 Subject: [PATCH 06/28] =?UTF-8?q?=E6=81=A2=E5=A4=8D=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 19 +++++++++--------- .../project.pbxproj | 19 +----------------- .../UserInterfaceState.xcuserstate | Bin 15742 -> 17096 bytes test/HTJSGeneratorCode/Integrate.js | 7 +++++++ 4 files changed, 17 insertions(+), 28 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 71dd3f0..448b893 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -3,7 +3,6 @@ - @@ -29,8 +28,8 @@ - - + + @@ -49,8 +48,8 @@ - - + + @@ -334,7 +333,7 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 19 + 20 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js @@ -399,16 +398,16 @@ - - + + - - + + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj index 56e9b75..6caebbc 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -5,6 +5,7 @@ }; objectVersion = 46; objects = { + /* Begin PBXBuildFile section */ E6AFD0081C1E99040027F340 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0071C1E99040027F340 /* main.m */; }; E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00A1C1E99040027F340 /* AppDelegate.m */; }; @@ -50,8 +51,6 @@ E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8F58DB50FAA24BF995719D3B /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "Models/HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - C83FE4AAFA2741E1858B7737 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "Models/HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -111,22 +110,6 @@ E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */, E6AFD0171C1E99040027F340 /* Info.plist */, E6AFD0061C1E99040027F340 /* Supporting Files */, - 1453961F4FAD426DA79B6F20 /* HTTestModel.h */, - A73F23AED75A4719B46FEFF4 /* HTTestModel.m */, - 2313863C0BF046E4B09D3F2E /* HTTestModel.h */, - 400C2FD0969644639352AD63 /* HTTestModel.m */, - 20993387A7C04D7594F5A08B /* HTTestModel.h */, - 25AA7898B0234358A9662D50 /* HTTestModel.m */, - A9A8B4D4E8944CECA9B733E4 /* HTTestModel.h */, - 38DF9581FD7B442DA0E38674 /* HTTestModel.m */, - B0FFDE78C3364164A7B06EE3 /* HTTestModel.h */, - 91FFD6FFE7784AB4A4001B15 /* HTTestModel.m */, - 2767B62A6DC14F90852BD6EA /* HTTestModel.h */, - BEA4090703E04213AB9AC27F /* HTTestModel.m */, - DC1C44346BF54650B7D5ABC3 /* HTTestModel.h */, - B7977BBD2793496AB5271249 /* HTTestModel.m */, - 8F58DB50FAA24BF995719D3B /* HTTestModel.h */, - C83FE4AAFA2741E1858B7737 /* HTTestModel.m */, ); path = HTJSGeneratorCode; sourceTree = ""; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index b44492bf4a001dd5f611f0802e2b11bfe39fc722..e7bcb8136110ecbe51fdb68987ea1340d7494bbf 100644 GIT binary patch delta 8884 zcmb7IcYIUT+rQ5}=QcY{(lk41y3#aF+9XX<_6Di!Q7E$%+CrhU&=ydJIhQ3OvM#H# zOW7y_f}kuB7qX|I2!hCz%?}lY_olH>75{j9Kc6N!=iGCi^L?J@`;4cfznTOyqcJm? zd2^ON8Ms-^Cj?JZ-&2>U8`Mqe7WI&NME#F?N<9M#3}6Hkn85-uV1-zSgLp`QL`VTA zcp)7cLL+DlO`rvIgYJ+GJ)kG_g5J;v`a&_3z%UpNrBDXtFapNFSYY8TmPHM2l$&9Yw3@XgY?Dr<3Ru+DQlKdURVlo9;pPq5IPV=pl3wT}qFnN7G~Iu{5D4 z(v#@7=~?tbdMUk${)7(hq<7J~={@vb`V0C1eV9H%AEi&yr|8r4Ir=;LDt(QEGzz=_mA4gb{-xkQ6DA9vP4k#iIn2h>}qn@}UN(A!>wLp;u6A)DiVW{ZJkn zgbLAMRE)~dC^QBI(F`;b%|f#ghvo#)T(lgmM61v`v>t6lAD|D>Rz*d7T-} zjA6zyz^3=XM&m%!wF=a!*jU<Js}2N<@h%33Y}#8=B}t%*&~Bq#3avuO2>66|A6spe|4sNpsSQWRj$s7cNsjQ>sd; zkQz*^B({>eN?ju@NK2ByDI=n|VPa*}FVx+?t++?s=jMnLqaIVg|84vUb&WeHHbRig zG3Rs3OcL%+jG`bc7XZj8+j^h@0R{#lKmbAzffytpCGALi(t&g&ok(ZWg>)rZq#NnJ zo=SvBP*4d}OR6QPAsRHG1s!QfvdKbXAbS4UK@O9j$QAMn_pu~Zo1;)?wrJThuduwN zv|UMFe$FfT#f2lvxNDL%kv6dNxIhx=u^f^~Pj0Ey+t3ARp|MobYdN?{Z({G-F1N7w zFJQn2btu&e@IwGHNFUOd${F7$^1kO%o>2q_{%NiiuQ!&bpS7zBkd7=}O*8BR*cXhO(aWGYF>QMkCK z@lo72aVNkQ`WBUwJ%9%zy=!ji!2I$sI^3f8SOtuP*FyInMaq`L>!h4J6mN9HII5r$ z-hdz(L0)@qB`_W))z&pkhBwJbGK#m7x(U7(Fb!tZo~DXm7KtOTlZ5ytlkHUKuLhsF zuz<2v!aSHy#*ndhZRuO zyM32-Bg%987v*=!FJHlrtfcB>weQ0J2rpk9(#IOY68TA34;$b;N&@f0M)&|W^(f0P z${$c(SW?`hyl`lKS$XczVZHK7283JVJJOS3YI^YULKGkDXT$t_VE&_(!>yP%Fim2inW zuXd(~pxVF#^)p=MVc-ZA7W+Ef$WcVK=+?ExUr@Cz8IT)7u@Y`_tipnRf!kcA!UcD@ zqlz?@vUS&2yYOz8Uz*E1VRPQ@xIe7*WGCPOzx_kF3jc!-xE!T6aRC`0KHxX_o!20* zfJ*p{suNb@AEE2~N#5laDy?=JXv||z(=;NB$l^+xp(Dr=vXt2SbQxAuSl+RutS}@H zw_Iuu#x;InYqXS(4816$bDqVoLG;@tB5+8$49Xv04}o;Fe~ zX){^D!?uznR7*!&se70aS9A9~dSGprq6hIV^+Cv`Ug|`(Jb@lc7l%B7 z9!|EA&DCD8H7rM2wIJnW%X2@VM}_==d>AtO9L2w_Gb;Ej{CA?7EB@gCAziYeyNxH? zL$(;CC(~1E!U+8q`S=Bl)9C3nv4oyMK6x=Qo1XVC70>5YTtRm7LLID8@uJW%i^;AR zDqcpf`KOAz|2ve>>*)3L2L5@!I+W}t`^f?R`G(AYA;M;Q8!rOAh5nG?3nwW#|1$)vIagDVJK_oyT{&#g^g~a6iUx^ix@!=B5 zQ6%|+{P>&@kP1cDj)zEtwB!Q0ND{K!<` zP+e4yTqD=HT%D;EYK)rwZL&FPL2i;;p?o5ePpVqv_a8BEV18-S()`@`CcXDoi+&Pi zqE}HHN`l(LRn#7J;6Br}u{KabI27}Emq+EHL)-J0;7yQEJkV?C^&CYKj{>K}8t$1sl18IBg~5Z-STv3s zX0V}3^afXKNNb1)dXuuPLM$4OCZLIE5}HhYCr`*9e&;FQ*_ z&Cmfpc2Y7zzp&fGh_7|3&=GVL9Ye=ih+;v_LNp7SDs&Q^LZ{Ig7PKt1Wub_L(cJIW zMqGJp5??OW<(x_zmlGQefzY?i<|RXi<(3wfl@y1wwi-A30r9L-i7udvEa+G;RH94h zG7BaaTJS7d>oV8EqUuAJtPSrk;c+9MJdSA@u6WR0^gqhB65T`h(F61lJz~Mkf`x?` z7OX79u0)T~ujn`QJ9@%G91HO*I9aH}Li11rtjXc;t1!k9ypLmE?+ME>ulmGLo}P{+ zypLlk=1suHg5x<_Sb?K>N5)F5Vj+nIdnH!Gn=D`RjN&v2uLS?PGB#q%KbFP7EEZBi zNqfhdMF}{Cw`QD(Z8!~AE8TjExKAIQY7 z)_%Pm@2Re>ueb+)mUi7LK{A(vh#JAA)GT}5;}op;g#CAn20BZawrxuS!n${i<)rj za8At~rs8*MXHj@M^$`oN{%0EXlH6)QNombybMV3tdo9BAPz7FqE6~DfrfFAAJRMl* z#B3@>M)3k%sSM?WVQygoeKF-NiK zFHRWCxy;%ZoPa+FujtIP(xf(Fhr(MhUxQWATj>w+HhK&BldHGF?iZaW}M&y@;a+#uyWsO&Jv5`^!n(Kaszv4H<`|;=a3;ZPu zJy_uFpcf0htMJ$O0N;P8V4)8Sefd;j9M{M_CwK~~K4T2AcM`O_fV zy#3js0>JBa*JSA@BJ{mWt~QXD-bSR`2BYJ>Tgb<~inNkUYk} z@{s(_LIDc{Ly!#mOQ3?);+(KR{5IKRJih8;`!7ToieX;59}~d{c(Ho%cnoG?$aA@3 zhiI~n>=7KXA=Qpu8Us>h4NGNsK$Kvw}j7-Ch~pXd3+|b7%fFre8YDQ-|{_%uAxVv$cBY{`&NqOeArUq zSiX6i$VZxFoWh5cH0wViMShaKjKlu=SSAYI@WWC$7v8VQ;Rnh81z z1_<&5Lj@xR69iKPa|Q1P1&ahr1S#?k$cXGs*;}%=W$(yl$Uc#sklmC$ls%UHCVL_m z%C&O6+$cB8W8|^&czL4SClAQ$$m_`)$Q#L<$eYPq$UDjV$X}CBldq9~AwMp^CI2ll zB2pMBj+92qBNdUV$e763$oR;_$fU^R$dpJ|WS__>k=r7#DAbCEitdWMpkkn+P*J2P zRt!^2RJ@~@t(c>jr&yp^saU7jpm<-gMX^=!kz$A9yy9oY1I4e3-xYr-L5Y-%QlL~Q z&B{1sg3_i;QM#0AN{_Oqa*A?>a)Gi!xlmc9+@##D+^zglc|dtkd02Ttd0qKH`Ah{W zq+(P86|0)6ny(5jQY}#}Q>|33R;^X7S8Z19P#spCQ9V{Yjj}}fqB5hpMRkwLj_Mgz z5;Z<*R#a8g-l%<1`=h>y`YP%`)E{a_EmVuuQng;4pmwO8>QuE`-9p_?U8Ekao~f=- zuTrm3uTyVOZ&iPzKC1p%eJ9!w9TWX(bl>O&(JQ0hi{258{v>)=^q%Oiq7O%(i2gqM zLiCT(m!p5z2sBcST%*uLYqT1@#;8fwbkcOw4A2bH4AvBBhHJ_+BQ&EltY)%?)4Z!$ zq*o51Nab$6BnFXl2?+tx~Jg z8nh;D(4w_!leJE5s@AP-sBNolukEPqtnI4prp?y&)D~)oXoqS`w8OP!+7a4O+Sj#{ zwKKG{w48RXcD{C*wo+TAU8P;4U8min{Yv|d_K^07_M-NZ_9yMn+H2Z-+NV0CV{`(Y zR43OdbShnvu7R$Ru8FRhu7$3Zu7j>~P}f!0O*cT7uN$Z<)Q!_k)^WPIy7{^aU8QcN zZnbW$Zm;f;?x^m#?v(C~?yT---F4kf-EG}n-F@9NeS}`97we_^D1EeEtJmv|`UHKF zK3SilucLoOpQ&%7Z>R5|@1*ad&(i1V3-p8ZgY`xFV*N0EslHs#>Zj;~Q}xsI)Ae)p z^Ys<_h5E(%&-J$q0z;I+Wbhc$4Sqw0p{}96p@rcUL#CmPA=}W?(A&`0P-+-sm|~b} zm}Z!6s5JawxN5jzxMjF)WQ;1K(P%ct7-Nm`MyD~==r($dK4ZYx*qCYTYAiCoZX9o% zXq;@EVw`H^jB|s=`Nj(4LgQlNC&q7$PfTi)*<>+UO)it$al^ZW?KN%{1CH*7TNXx@o3qwrRep!nDw|*tE*D(X`X_sp&J*=cWUugQml# zqo#AF%ci@gd#3xQhh{KibA(xBmY8K`joD~6n}adtSaYg5-Rw7Km>ZZInVXoKncJGP z%>B&+&4uP6=3(YibGdn>d5U?KxzhZR`Iz~Z`L_A4`M&v~MP|`h%$8(JTT8a3r=_>0 zuce=5gk_ZFb;}sbI7`qn#qzf09m@>MBFhrXGE1dpn`MvXpyjaTsO7ljrsWsQ9m~C- z<$>i7%d;4WK{3*pKurCZ{FvgHIWZM6dtwg8oQ?S|=6uYBm>**<$6SfIAM+^Y*O(_U ze_AOkvNBey)oblwEwGkZr&>AdD(f2Sdh7evP1X;sA6Y-P?y~N+?z0}T9%Zc?M9rb#W5S|xQ!%1Y{<)YFdbN_&(&+OD(DwlB4>3)T!b4+y1a?Ep7I2JjUJE|P39BUkF9ornAIlgdw?KtQ- z;yCU&<+$Xy;<)Cx>G;JFyz6-2c$A_@X_V3r+ks}Wy;qn$5T$EoJzTr zayjLvl%G=`q&!S{l=9e#os2WWDRe5GYNytzcRHLdr`wtC^gA0l+c-Nrvz*z^Ue5l` zeCHtN5a&>5xpRzjiF3R2p!1aTTjzJq^UfR2o6cL#+b*Fi+7%acCAe%ZyUXEnx>8;B zU5#8#T+Li9U9DZOy4t!5TqUkj*9g}r*A&;=uIa9suGy}It~IXrTpL}RT-#hbT%Wjh zxsJQ8x*n!NDoz!oic@8&iqxo7YifL|Ej2mSnVOdBP4%TVO>LgqGPQN;uW3x0AWf7e zP1~DxDD6mE@L1YOceXp_d9EAXnlW^ar))|=q9dDFaJuiu;D zt>7kk%vH+naFw|YPJ?(**S z?(-h;9`l~?o=%^Uz9@Z3`m*#DKBup)uZgd@uaz&;*U{J6m*va$_4JMRt@Z8q9rK;@ z1+V&U`|kSg`yTq9`2O_s-8w(xSNaY9B)`+2=J)zD{Pp||{f+%?{aOC*{vQ6`{=WW! z{=xpC{t|zwzuZ60KiNOSzsSGBztX?jzt;bOf3tt9f4l!<|7ZS#{a0FZdcOX3w2-FQU=oV-k=osh{$O?21^bGU~^a~6K+|CeWm@@igEt^yu#{k-Guz#8l=#4h#{Y^W%TL9pZPW3Nf{iN>y!SfWN_ zi#5jBjV1ONqfrw}qOq5lSMhreMB#n&alao2JG(QpJOBCb%pRTuC8Ix$BIFb~J=^Gl zyxEN=gw8TQGgq10%pc63%p>M8^MrZHykbf~2YN7o5lmo)Xo!JWr~($Sg9E(agPKqa zYQuX_586UINQ3s!0Xjk_=nP#T1NuRK7yy|t5C%aO42MxL8Yr+Z38ukxm;p0k4$OrG zun?AqUf^Xmm9EBg?7#xQaa1wrmQ*a4>fy;0Oeub-W4Q|10xC@WqF+7LA z;U&C+5_pX;5+O0tq9~+8dSpOWWJ7l3Ku+XCiO7$tqxVoF)EG5EEm14f8l|Bws4GfG z{m}pv%0wTb95f7#L6gu7G!xB6bI}5{1g%3~q4j73`WkISo6sJ#5A8>X(GheUoj|A2 z8FT^tgnmJn(KU1(-9)$09rP4EL(kFQn85@Ka3t2^D6GSJY`{ib1zWHUd$A8EVm}Vx zTDUfT4>!jxLbxSvg>};4GYjhv9rY4u>$sEFO<1&XVPpBx|u$sux>93e-^59Am*PEL@M zc^rgEw6j4#jDw z8T<0()LFjh9CLxO7cf0&Oab!~ZAhJ`OLbjh`V}$1FqfGtv=MDeQ>mkT!8PW0MpMXS zG6SiF#uYL*n48=hsXOuxbFb3)edYmoTWX7Z%KTkv`~^SXA~VAn~rWih~6H7$BZ@E&wa- z!o@0rb)4W1kGW{q0`Smo)Y-meugoEDe1t?uVl+kIhX4d=ciMw~SOm$u2i0jhZ!@2p zrRdu>g$Wiw9omyB%U9Kh_Zj<2XaEhN5j2J-&=i`{UbHvuL;KPU+K={M390Y_G=~<@ z5?VoPI)G-<|(`7jQ0yY zywioiF*VEfIWHW~&*?bsT9l<7EP^F(F|(A?w>bp`Q1li!#gu&~SP5&wm{|p@;Y&K6 zPM{NuU@ecCujnKmGliv?*&Md9g-(8lnQic07&F^p2keAhup7RGJ#-44N~h83bOxPC zXRU<2@ICB<{ru-39HJl7Pv|_ljQ=dB1w3Xp#+`=qVasRWES#gC(%E!Q5nOv?7{Q0GD2-K`uBR`?RE{kS-zY)(X!r?mn#>3$T+@wqBd>#s) z)5YA;$eO-C!ruQ$7x3Q0UvQ5e6+YI_xNL1zZ5e`Igb_rSmSJVY8?3b8UN~gorCgyYC9YynUz7%LX=$(! z;ax!jTEqt{&LKfc#$Jr1NQUG{LBF6Y=t{b(7^zSMQX>srO~0ZW=+|7bxxUSaV#9My z$c&;<4E>U>p=;^7V#dbrB!{u`nPa3m+ye6$&6|8fF67|@j@)!T7mT(xK>?J+|6fX~ zD4A}2L#n6-)2|TKM78K9y7eugq7+oGB0-}1r~%zfw{VN1%?8vIrB)JtfSS{9=r-;| zbaWhQgW6UibJQMn4Exc6?kqr^=q~QQ%j`ql!dAPZ9&|VT?w!@1s81!ueNhJemhR!| z$3!kWU*}q9->F+fr{9ALp5kREvK1-Z>gn{ zA~cIvHG%02xlCtzn74Fn%TWO;L`A5W9;3(U33`(LNKdUm zE6_@`im{?E(HeT1{ziYNCKmd#(4WJWnGMiprr&C4jkcn1&^ELk?La%xF0`ADp=anh zdVyY~m*{2sE4{{t<{dqu?@N(HCfQoa&XFQgkPmidWAPVhUu0zL4C;XHi z!M@3$J{5$gN`*ha6ZX_s(tf^F{!4nqf)zNLHUjd__=p9t=q6dt<2>pfbq5Jd(y-9Bsp@--Z zdQ5M#P>ba+P$&0cRBdjpy)HM&?x*7z-s!CKBBK!kg}i) z*B4%{mn)LH<9rms7hutRHexe5 z4CAX?z6Q!3!h(VYIlaO{6n|mGF79H2QROCb@kky(I1dlUBUn(fpkg7S2#>;}@fa4= zENEDWAEnZ)dr||~tVWA3r!C&V+-JTHMg11$aGg&-h z;=_n3H@F+`598!pya#`W_u}vIJ{ICxNMOOrf{g_`3yu}|06vHh;lua{TwuY;f{O(= z3%seSeD(0ZNbx80psCR`iBo!NaK#=ix5Ojjns{{FGLIMnT&ky5sNDV;e75{-`3?qO zD1%eE^k;mjGBmE>Un>t>$G=rve={7tTP*l^th|NFpZE?sgg;`z&q5+S9|lOZ2D{=0 z-d%OeR&MD5eiBB=L;MIoW+A{rkcFfo{1iXK&sj)jp&AR-!wAvi*SrnF=TVKf2qBmd z?sipYvY5zt!XXmElR<43QVNNj@TjcILgPxDLo{K|Vd1_1qQt1Tlt}btGwS>=?M8UZ z=!uvJU#1ihGl?cKEYxG6J_`-_s*YGlTsV&#ve1ZU#y52xw?8>1L|nwnulcVskR%d+ zctH~uno{R~6@Kgv?Z7vuM5>V#9xc$C)Ii%wE&e*&O8NYGpI&6)1O6&Ivx3wibxA!^ zpEMx6^%g9&VWATXU0LYCLN6Lsk$6e7vMr|aw7)@HfssjzGC^}rp139SX0xqHdp^DX zr=uYqNJqv-I{J}zTD%uyZ+BYLrLDhx-guKD4WiE(Iq^)%ma0o64mU^rA<}P zpI>fw9GUR{+MP%yl_~1RLie|dVi){T=hJ1K$22Z&&ywG2nn`B=t2=WD$Dat#Kp(P@ z9zKztW&RA@GiP@;mtW23CX2}Oe_dKY3dL6UH1ajs!Dv>IjbszqOtz4%{oTqK@(}Hz)X4o74C#|7vps-{N0v?%==p zH=Bp}F@8!2|0t8mKe6l}=gC8XLZA~E1!h5vz%B>~Y6}_)nh8Q}1U&>p1v!FT!EnJy z!Dzu)!8idGj2Fxmd@fiZSR_~?SSBbC6bZf%tQ4#kd@ndBxF%E!t->^6KVhD5f^d>> zvhXuufv{M(LbzJEMz~J6S9nx-Qg}*uMtDwmU3g3QhwzT@f$)*=iSU_-i1Z?ZC{E-S z)exnKQbnyoqBf#-qE4bNqHdxdqJE-m(Kyj0(Z`}<(HhY<(QeTm(O%I((P7b1(J|3g zF&5j!N#gqAhT_KJrsDU-ABbCsyNJ7qdx+D;y~KUQ8RGupapHC2Q{o5W*AlfPRuU&k zkk}KP)IUSGFdWJGF>u5vP`m8vR?AFWV2+e zWSiuG`Cq>ZKUm_oupl)-K0IFL#3mnlch7Hv!tI$Ka+6$=%M6-yP%6@`jo z#R|n1#W#xWik*txiamXDDYW=PBna z7b+JkmnxSlcPg(dAE*qfIF(10tV&gNR}E5)Q!P|2RxMR6R~4#?L#lPEuT&dU+f@fu zr&YhGuBfi6u1BOt42T#PF(G0>L}A47h|>|T)Mm9y-Af@FH$d2Z&vSB?^hpGA5s6HKCb>*eOdjh`nvje^-c9-^*`#D>Jkm35oshEnMR>e zY2MSMX$EO>H6t{kQJOKDshZC<3p9%~OEk+g1)3tw7n;qQt(t9`9hzO5Z#Ca(zSr#6 zoYGv@{2eKebVfFfY!{goIVzGyj*pxeIXQAxe`yxf!bl(;o6bf(b_56IokQ!h1$j1rP__!o!Xy6+F!LLQKBeqlrG8;Ws3SN zYE{(lQ4gaYM?H;tu48mqC(wy>u{w_~Syx?GQ&(G;qHCgSrc2c|*R|BO)^*nP)(zH8 z(#_E=(k;;~(-r87bZd2A={D##>Ne}P>dxvO>a}{WzP7%OzMj6JzOlZkzN@~wK2x8i zAEN(A9~!35(~r|n&`;7&(NELQ(=XC5(J#{%>sRPk>A%!(((lqA(Vx)&s6Va0puecU zq`$1crGKD*r7zLHHh@8CP#Yo*I)lMrGWZNN3@L`XhWdtvhSrAmhK`2Lh8~7=LoY)g z!(hX3!vw=r!*s(;!)ya*m}~glu-dTEurFlz$?(XiFsh7dW27<4=rh(Z)-`@$9BdqA z9AnHkhK#Ino^if$p>eTssd2e+wefr7e&a#oVdGKb8RL25PsX2(znK&!jVZ;{#5Bk> z)HKgjWZGcbXxePrYT9PnVcKOnV*0^!+;q}(%5>Ir!F18|#4I!?m}{GxnLjj#`kP0a z$C}5Psd>D4qIt4;s(HG3ruk#@BJ&dSGIK$6Y_uoZ8=V*(h+Y%DEqX`vuIO)L8pgDa zX&aLk(;?_sc)_&Gu*3d}n zXzN%jYn@=7WSwH2YMpIeYF%SpXI*dIXx(DnX5DE$Z2iG{!g|Vj#(Lg*(R#`H%x1OK zvkkCKur0N%v8}bOv#qynvu(HSvK_FUwq3OSYP)Ou%XZK9!1l^kVtZ`|yV9<*N7yxX zvpv=xXHT#v+w0mJ*c;oM+EYXJcJ_38KYOM<%bsl?ZXabIYY*93`&9cU_Ko&q_N(?k z?04<=?GNoG_SX)^fgCc2#}Rb2a}02dcYNZQ?^xtm>L_p&JJvZiI5s)9I<`A@I&M0( z&PL80XUI9;Ing=AIo&zaIoG++xx~5LS?FBv-0a-y+~(Zv{LUHr-nrj-+xgV_kMpIo z#D!e~m&he?>0AjeyUXRO>PmD4UDaF-T}@o?yPCUNx!StYTpe6PT}xftU1weQ-3GVK zZFf7|E_cwKXZA7 zzGz<+U%b!ebNW0!udlW*#aGwY!1vHslE@^YL_y;A#Dj?^6Hg_cNj#T$A@OSBZ;3Y( zZztYK{44R9pYcolI)4>^yx-<``aOJ)RKs7}pW?6UukY{XAMgLvzsFrW%V2W$anz!UHV0)g6rI)VCuhJnU`rh(Rh&Vh`; zkigJDP9QfhJP-n49pEI4Xg}o4(tx>3G5B*3mgcX2%HL>4V(}B6!k*a5NsK26HE(s40Z{252go)28RXnf+K>XgZV)k zoDiH8oD!TJTpZjIJQlnbe3qn4awMfBZI75)49R-{f4`clqz6 G&Ho2{9p{e# diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js index 72fc4c0..e194564 100644 --- a/test/HTJSGeneratorCode/Integrate.js +++ b/test/HTJSGeneratorCode/Integrate.js @@ -17,12 +17,19 @@ myProj.parse(function (err) { myProj.addHeaderFile('Models/HTTestModel.h', {}, keyByName); myProj.addFile('Models/HTTestModel.m', keyByName, {}); + //myProj.removeFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); //myProj.removeFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); // //myProj.addHeaderFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); //myProj.addFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); + var modelGroupKey = myProj.pbxCreateGroup("Models", "HTJSGeneratorCode/Models"); + var requestGroupKey = myProj.pbxCreateGroup("Requests", "HTJSGeneratorCode/Models"); + console.log("modelGroupKey: " + modelGroupKey + " requestGroupKey: " + requestGroupKey); + + myProj.addFile('Requests/HTTestRequest.m', requestGroupKey, {}); + fs.writeFileSync(projectPath, myProj.writeSync()); console.log('new project written 111'); }); \ No newline at end of file From 17984cbce79d637485a8ec48664b6ccdb733ed67 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Wed, 16 Dec 2015 18:05:56 +0800 Subject: [PATCH 07/28] =?UTF-8?q?=E6=81=A2=E5=A4=8D=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 8 ++-- .../project.pbxproj | 14 +++++++ .../UserInterfaceState.xcuserstate | Bin 17096 -> 18974 bytes test/HTJSGeneratorCode/Integrate.js | 36 +++++++++--------- 4 files changed, 37 insertions(+), 21 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 448b893..32ca521 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -28,8 +28,8 @@ - - + + @@ -406,8 +406,8 @@ - - + + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj index 6caebbc..371eed4 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + E6A45E0A1C216EFC00C94A3D /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E6A45E091C216EFC00C94A3D /* HTTestRequest.m */; settings = {ASSET_TAGS = (); }; }; E6AFD0081C1E99040027F340 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0071C1E99040027F340 /* main.m */; }; E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00A1C1E99040027F340 /* AppDelegate.m */; }; E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00D1C1E99040027F340 /* ViewController.m */; }; @@ -35,6 +36,8 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + E6A45E081C216EFC00C94A3D /* HTTestRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTestRequest.h; sourceTree = ""; }; + E6A45E091C216EFC00C94A3D /* HTTestRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTestRequest.m; sourceTree = ""; }; E6AFD0031C1E99040027F340 /* HTJSGeneratorCode.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HTJSGeneratorCode.app; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD0071C1E99040027F340 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; E6AFD0091C1E99040027F340 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -78,6 +81,15 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + E6A45E071C216EFC00C94A3D /* Requests */ = { + isa = PBXGroup; + children = ( + E6A45E081C216EFC00C94A3D /* HTTestRequest.h */, + E6A45E091C216EFC00C94A3D /* HTTestRequest.m */, + ); + path = Requests; + sourceTree = ""; + }; E6AFCFFA1C1E99040027F340 = { isa = PBXGroup; children = ( @@ -101,6 +113,7 @@ E6AFD0051C1E99040027F340 /* HTJSGeneratorCode */ = { isa = PBXGroup; children = ( + E6A45E071C216EFC00C94A3D /* Requests */, E6AFD0091C1E99040027F340 /* AppDelegate.h */, E6AFD00A1C1E99040027F340 /* AppDelegate.m */, E6AFD00C1C1E99040027F340 /* ViewController.h */, @@ -276,6 +289,7 @@ E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */, E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */, E6AFD0081C1E99040027F340 /* main.m in Sources */, + E6A45E0A1C216EFC00C94A3D /* HTTestRequest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index e7bcb8136110ecbe51fdb68987ea1340d7494bbf..91353b18392e49278bd1915465fa5e89ff75d600 100644 GIT binary patch literal 18974 zcmdse33yXQ*YM1}bGxKl+N@oYH0egSENz;kO$wAQ>`-Z0$`(T#N~CRSlCm#z5dl#V z6p%%QwyY{DqN0en;)aMID2liuin0i9yomD6&28F7Kz+aedtQBi@;o%TGxy9nXU=|R zCNwv=ygt4DFo1vpG(dm>As-83rIJ>e#2thRP~a*@Z?sXlje z9DobfKN<_41EC-ch=3SKKnCamGC>x|200)XXn_vogF-MARDv78Fi-`m!Ei7Fj0B@V z4Hyl4pao0;Q^7Pa9n1hT!7MNv%mH)3tzZGT9oz$!gB4&UxEHJeZJ-@&0Gq*s;4!cr z>;zAPm%z*56|fh)0gi!>z;W;~_yl|kJ_DbFFTiHp%&_(9vYwt7Qr%D4*SEQuoB(?hrG-d=c)2@59gF=kN=70)7ck!mr>Ncpm-;e}X^5 zU*Kii=~M=lP3fq7%1HI3`cT!>aB2iKk{U(TP@}0a z)L3c~<)Ut)CQ}WRhw@U>C`_@`Jn9zecIpo5PHGvolDd~#MXje=sWz&e+CXig9-$tm zo}zYAPgA?8=cql@OVq2>Yt*~cVd@C=9`!!;1$Bb@k~&F!MSV?uOP!}KP(M>wXh1_c zoEE_ObOaqs$I((ciB{8@bQYaQ=hIf&Mi2kGPV zXY}XvN%|}LTlzHp9etkuk^YIkME^oxK>#7dpl~EXQY1ri6pz#>4W*+jl#L2e5wap1 zDn>m~FI0{y&_Gm$s?l&X0*yya$c>uO&B%ki$cLt(nP@J$1uaCkqdU-2v;wU}>rpFe zL+xlYdI&v?cA;m{ZuA1$i(W-*M$CzErv&?ShCFW)373L`O0rMeq zjQNN;&V0;#!hFhn#(d6v!JHVL+SJm}@Gb}k0uTWrK@5l+IiyNE**V=in*8n1+Yza? z4Gyoj4Mc%xOkuhW2th1HERUsgWS?V0RtcGNn{+_f!@&L&@AWhqdC^vys912sV*9;AXa9EqcF3_&IoC*Y5!iqlmxyJH}^4vao`T4o#^3sx$ zJ{5&}v!%i=%;^q*U%qRB;Z3faTb%vt2$`;lE~m#XRFUZ=wLW41uZ@yj7|#LplTqz< zH%xGN`g=#Xysiligd%y@m}5epprQDgGYtkyPO`yJFgquCropJ!=Oh>An`X~GIP##p&PBeJc$^NqFqh*% zK!k$!Yq-zV;POr9rd1Jtmh?N|_qGN;#7-*gQK97;TVm($D18F{V3 z)!?jj_$Jwf(h{$i_&-OJkH^$I$T8jB;g#NBdN@)_-E~gwv|93iv&Vf? zcz~y4Ks`u*2#f{ez<6K>Hv$Kk0BS)UaDs_A2`jJ?t8g+_V+~HhsW=Uj$&-K!+(fuK zn0%Um8#IHPi9TfD0_-C^t|uRi@5P7lX-+Tf!q_tBgqHexr>7fZq@9c%Ofa%n5%lXE zp1RQue%z})PAA8Dj&PnRqP-({U(WxoYMIbTUL4K;^1~2Hf?;;d=k>nZJi-xI3(-9h znO^3c=xAy1`4Qx|C%NNMCAXT_M^tARVVKiPzBqg&lprq(IkW;aac>29iNQRO-U?XU zqZQnOGkMxaRCkiy-{)-f^7^n4EN%mfz->4S>v4Vnz#ZT&5Z4Co1WRx>&S?Wn!7`kS zwOBW*R zfF-crTJS*7dh5V?Y`}S(O^xw$hu=4j#+2S;U+4yQBiJ;4NY&sLpMzKizsk0Qjhxc* zt8M{X34=Q)bS>Wwwsc3}A+U|(*u&V=3Le2`j$>*3R&@yR^|m2E!Q zLTs!a>~J*&MxO!Cfw*?C3p@*U<05Ruwsx?G2<;2FmQabB?|Gcl$-RSgrrt=&9Drfj!!##0y0I4_0&Ja(t54;8TgSWu} z@D4bLd*R-=1oy$ExD1zX2JeEy;0Sn+e2#(-a0Tv*C*UUXapPue9Lwo`nZxI(p5E*n z!{g+~mRRT#e|XDnO0d`xE#&PG8R5imh~GuU2fW}l#u5W#<VNHPG6W|*Vw-I~^PJ*w%*WeWHhx_9Jcpx6M5qt|ygEQbP zIEM%0A$SBHi5=XoKB(h-k6a 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 YYR@eHK{!CJ)cF4~r})2t|9j^A4^guF9smFU literal 17096 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 diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js index e194564..3dc09e6 100644 --- a/test/HTJSGeneratorCode/Integrate.js +++ b/test/HTJSGeneratorCode/Integrate.js @@ -8,26 +8,28 @@ var project = require('../../lib/pbxProject.js'), myProj.parse(function (err) { console.log(myProj); - var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); - console.log("keyByName" + keyByName); - - myProj.removeFile('Models/HTTestModel.h', {}, keyByName); - myProj.removeFile('Models/HTTestModel.m', keyByName, {}); - - myProj.addHeaderFile('Models/HTTestModel.h', {}, keyByName); - myProj.addFile('Models/HTTestModel.m', keyByName, {}); - - - //myProj.removeFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); - //myProj.removeFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); + //var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); + //console.log("keyByName" + keyByName); + // + //myProj.removeFile('Models/HTTestModel.h', {}, keyByName); + //myProj.removeFile('Models/HTTestModel.m', keyByName, {}); + // + //myProj.addHeaderFile('Models/HTTestModel.h', {}, keyByName); + //myProj.addFile('Models/HTTestModel.m', keyByName, {}); + // + // + ////myProj.removeFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); + ////myProj.removeFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); + //// + ////myProj.addHeaderFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); + ////myProj.addFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); // - //myProj.addHeaderFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); - //myProj.addFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); + //var modelGroupKey = myProj.pbxCreateGroup("Models", "Models"); + //var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); + //console.log("modelGroupKey: " + modelGroupKey + " requestGroupKey: " + requestGroupKey); - var modelGroupKey = myProj.pbxCreateGroup("Models", "HTJSGeneratorCode/Models"); - var requestGroupKey = myProj.pbxCreateGroup("Requests", "HTJSGeneratorCode/Models"); - console.log("modelGroupKey: " + modelGroupKey + " requestGroupKey: " + requestGroupKey); + var requestGroupKey = myProj.findPBXGroupKey( {path: "Requests"}); myProj.addFile('Requests/HTTestRequest.m', requestGroupKey, {}); fs.writeFileSync(projectPath, myProj.writeSync()); From ffee15b53302915afdea3068391be9eb02c47e98 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Wed, 16 Dec 2015 20:15:17 +0800 Subject: [PATCH 08/28] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=B7=BB=E5=8A=A0Group?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 212 ++++++++++++++---- lib/pbxProject.js | 5 +- .../project.pbxproj | 75 +++++-- .../UserInterfaceState.xcuserstate | Bin 18974 -> 19113 bytes test/HTJSGeneratorCode/Integrate.js | 32 ++- test/HTJSGeneratorCode/IntegrateDebug.js | 46 ++++ 6 files changed, 297 insertions(+), 73 deletions(-) create mode 100644 test/HTJSGeneratorCode/IntegrateDebug.js diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 32ca521..492434f 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -3,6 +3,8 @@ + + @@ -28,60 +30,72 @@ - - + + - - + + - + - - + + - - + + - - + + + + + + + + + + + + + + + + - + - - + + - - - - - + + + - - + + - + @@ -95,6 +109,8 @@ - + + + + + + + + + Data flow issuesJavaScript + + + Error handlingJavaScript + + + JavaScript + + + JavaScript validity issuesJavaScript + + + + + CoffeeScript + + + + + @@ -227,11 +271,12 @@ - + + @@ -303,7 +348,7 @@ - + @@ -331,21 +376,90 @@ + + file://$PROJECT_DIR$/lib/pbxProject.js + 1726 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 7 + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 20 + 12 + + + file://$PROJECT_DIR$/lib/pbxProject.js + 45 + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 13 - + + file://$PROJECT_DIR$/lib/pbxProject.js + 1675 + + + file://$PROJECT_DIR$/lib/pbxProject.js + 1605 + + + file://$PROJECT_DIR$/lib/pbxProject.js + 1607 + + + file://$PROJECT_DIR$/lib/pbxProject.js + 1625 + + + file://$PROJECT_DIR$/lib/pbxProject.js + 1616 + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -356,15 +470,15 @@ - + - + - + @@ -372,42 +486,50 @@ - + - - + + - + - + - + - - + + - - + + + + + + + + + + - - + + diff --git a/lib/pbxProject.js b/lib/pbxProject.js index b624465..e908198 100644 --- a/lib/pbxProject.js +++ b/lib/pbxProject.js @@ -1602,7 +1602,7 @@ pbxProject.prototype.getFirstTarget = function() { pbxProject.prototype.addToPbxGroup = function (file, groupKey) { var group = this.getPBXGroupByKey(groupKey); //var group = this.getPBXGroupByPath(groupKey); - console.log("group: " + group + " file " + file + " groupKey " + groupKey); + //console.log("group: " + group + " file " + file + " groupKey " + groupKey); if (group && group.children !== undefined) { console.log("group.children is valid"); if (typeof file === 'string') { @@ -1672,7 +1672,8 @@ pbxProject.prototype.getPBXGroupByKey = function(key) { console.log("finish getPBXGroupByKey " + key); - return this.hash.project.objects['PBXGroup'][key]; + var group = this.hash.project.objects['PBXGroup'][key]; + return group; }; pbxProject.prototype.findPBXGroupKey = function(criteria) { diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj index 371eed4..4d8e3df 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -5,9 +5,7 @@ }; objectVersion = 46; objects = { - /* Begin PBXBuildFile section */ - E6A45E0A1C216EFC00C94A3D /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E6A45E091C216EFC00C94A3D /* HTTestRequest.m */; settings = {ASSET_TAGS = (); }; }; E6AFD0081C1E99040027F340 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0071C1E99040027F340 /* main.m */; }; E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00A1C1E99040027F340 /* AppDelegate.m */; }; E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00D1C1E99040027F340 /* ViewController.m */; }; @@ -16,6 +14,7 @@ E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */; }; E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */; }; E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */; }; + F9C6B1201632445B82E564FB /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E28D1363F064BF18224E5F6 /* HTTestRequest.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -36,8 +35,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - E6A45E081C216EFC00C94A3D /* HTTestRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTestRequest.h; sourceTree = ""; }; - E6A45E091C216EFC00C94A3D /* HTTestRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTestRequest.m; sourceTree = ""; }; E6AFD0031C1E99040027F340 /* HTJSGeneratorCode.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HTJSGeneratorCode.app; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD0071C1E99040027F340 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; E6AFD0091C1E99040027F340 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -54,6 +51,7 @@ E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4E28D1363F064BF18224E5F6 /* HTTestRequest.m */ = {isa = PBXFileReference; name = "HTTestRequest.m"; path = "HTTestRequest.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -81,15 +79,6 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - E6A45E071C216EFC00C94A3D /* Requests */ = { - isa = PBXGroup; - children = ( - E6A45E081C216EFC00C94A3D /* HTTestRequest.h */, - E6A45E091C216EFC00C94A3D /* HTTestRequest.m */, - ); - path = Requests; - sourceTree = ""; - }; E6AFCFFA1C1E99040027F340 = { isa = PBXGroup; children = ( @@ -113,7 +102,6 @@ E6AFD0051C1E99040027F340 /* HTJSGeneratorCode */ = { isa = PBXGroup; children = ( - E6A45E071C216EFC00C94A3D /* Requests */, E6AFD0091C1E99040027F340 /* AppDelegate.h */, E6AFD00A1C1E99040027F340 /* AppDelegate.m */, E6AFD00C1C1E99040027F340 /* ViewController.h */, @@ -123,6 +111,7 @@ E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */, E6AFD0171C1E99040027F340 /* Info.plist */, E6AFD0061C1E99040027F340 /* Supporting Files */, + EEE6E954FA2844C488571661 /* Requests */, ); path = HTJSGeneratorCode; sourceTree = ""; @@ -153,6 +142,62 @@ path = HTJSGeneratorCodeUITests; sourceTree = ""; }; + D6FE86AD32B148C78510A66C /* Models */ = { + isa = PBXGroup; + children = ( + ); + name = Models; + path = Models; + sourceTree = ""; + }; + D2B9484C85A74B9FAC92F266 /* Requests */ = { + isa = PBXGroup; + children = ( + ); + name = Requests; + path = Requests; + sourceTree = ""; + }; + 4D13C78AD8774B5B88D9DFCC /* Models */ = { + isa = PBXGroup; + children = ( + ); + name = Models; + path = Models; + sourceTree = ""; + }; + C85BFA32F5A2493EAC5767D3 /* Requests */ = { + isa = PBXGroup; + children = ( + ); + name = Requests; + path = Requests; + sourceTree = ""; + }; + A82E2A56A83F4D1EBADA4ABF /* Models */ = { + isa = PBXGroup; + children = ( + ); + name = Models; + path = Models; + sourceTree = ""; + }; + 3D980EDEA2F44BE69C10F7E7 /* Requests */ = { + isa = PBXGroup; + children = ( + ); + name = Requests; + path = Requests; + sourceTree = ""; + }; + EEE6E954FA2844C488571661 /* Requests */ = { + isa = PBXGroup; + children = ( + ); + name = Requests; + path = Requests; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -289,7 +334,7 @@ E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */, E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */, E6AFD0081C1E99040027F340 /* main.m in Sources */, - E6A45E0A1C216EFC00C94A3D /* HTTestRequest.m in Sources */, + F9C6B1201632445B82E564FB /* HTTestRequest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index 91353b18392e49278bd1915465fa5e89ff75d600..973627b4e5b77a97ffa99cc64843bf3f1ae708de 100644 GIT binary patch delta 8866 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 Date: Wed, 16 Dec 2015 20:32:13 +0800 Subject: [PATCH 09/28] =?UTF-8?q?=E6=95=B4=E7=90=86=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/HTJSGeneratorCode/Integrate.js | 82 +++++++++++++++++++++-------- 1 file changed, 60 insertions(+), 22 deletions(-) diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js index 84d231a..6a80f10 100644 --- a/test/HTJSGeneratorCode/Integrate.js +++ b/test/HTJSGeneratorCode/Integrate.js @@ -14,34 +14,72 @@ var project = require('../../lib/pbxProject.js'), //fs.writeFileSync(projectPath, myProj.writeSync()); // parsing is async, in a different process +//myProj.parse(function (err) { +// console.log(myProj); +// +// var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); +// console.log("keyByName" + keyByName); +// // +// +// myProj.removeFile('Models/HTTestModel.h', {}, keyByName); +// myProj.removeFile('Models/HTTestModel.m', keyByName, {}); +// // +// myProj.addHeaderFile('Models/HTTestModel.h', {}, keyByName); +// myProj.addFile('Models/HTTestModel.m', keyByName, {}); +// // +// +// //myProj.removeFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); +// //myProj.removeFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); +// // +// //myProj.addHeaderFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); +// //myProj.addFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); +// +// var modelGroupKey = myProj.pbxCreateGroup("Models", "Models"); +// var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); +// console.log("modelGroupKey: " + modelGroupKey + " requestGroupKey: " + requestGroupKey); +// +// myProj.addToPbxGroup(requestGroupKey, 'HTJSGeneratorCode', {}); +// +// //var requestGroupKey = myProj.findPBXGroupKey( {path: "Requests"}); +// myProj.addSourceFile('HTTestRequest.m', requestGroupKey, {}); +// +// fs.writeFileSync(projectPath, myProj.writeSync()); +// console.log('new project written 111'); +//}); + myProj.parse(function (err) { - console.log(myProj); - - //var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); - //console.log("keyByName" + keyByName); - // - //myProj.removeFile('Models/HTTestModel.h', {}, keyByName); - //myProj.removeFile('Models/HTTestModel.m', keyByName, {}); - // - //myProj.addHeaderFile('Models/HTTestModel.h', {}, keyByName); - //myProj.addFile('Models/HTTestModel.m', keyByName, {}); - // - - //myProj.removeFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); - //myProj.removeFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); - // - //myProj.addHeaderFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); - //myProj.addFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); + console.log("Start update Project " + projectPath + " !"); + + // Step 1: Find parent Group Key according to path. This group must be available in the project. + // Model files and request files will be added into this group. + // TODO: The path should be passed as a param. + var parentGroupKey = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); + console.log("parentGroupKey : " + parentGroupKey); + // Step 2: Create group if it doesn't exist. + // TODO: 1 Group name and path should be passed as params. 2 If the group already exists then it is uncessary to create and add them. var modelGroupKey = myProj.pbxCreateGroup("Models", "Models"); var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); - console.log("modelGroupKey: " + modelGroupKey + " requestGroupKey: " + requestGroupKey); - myProj.addToPbxGroup(requestGroupKey, 'HTJSGeneratorCode', {}); + // Step 3: Add new created groups into parent group. + // Note: Currently it is not supported to put models and requests into different parent groups. + myProj.addToPbxGroup(modelGroupKey, parentGroupKey, {}); + myProj.addToPbxGroup(requestGroupKey, parentGroupKey, {}); + + // Step 4: Remove files from Group and Add files into Group. + // TODO: 1 File path may not work if group directory doesn't match. 2 Loop directories to find files automatically. + myProj.removeFile('Models/HTTestModel.h', {}, modelGroupKey); + myProj.removeFile('Models/HTTestModel.m', modelGroupKey, {}); + myProj.addHeaderFile('Models/HTTestModel.h', {}, modelGroupKey); + myProj.addSourceFile('Models/HTTestModel.m', {}, modelGroupKey); + + myProj.removeFile('Requests/HTTestRequest.h', {}, requestGroupKey); + myProj.removeFile('Requests/HTTestRequest.m', requestGroupKey, {}); + myProj.addHeaderFile('Requests/HTTestRequest.h', {}, requestGroupKey); + myProj.addSourceFile('Requests/HTTestRequest.m', {}, requestGroupKey); - //var requestGroupKey = myProj.findPBXGroupKey( {path: "Requests"}); - myProj.addSourceFile('HTTestRequest.m', requestGroupKey, {}); + // Step 5: Write back to project. fs.writeFileSync(projectPath, myProj.writeSync()); - console.log('new project written 111'); + console.log('Project ' + projectPath + " is updated successfully !"); }); \ No newline at end of file From 37927a9cbe470e0e4f3815438a2ed2c49d3b3a92 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Thu, 17 Dec 2015 10:15:11 +0800 Subject: [PATCH 10/28] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Group=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/HTJSGeneratorCode/Integrate.js | 120 ++++++++++++++++++---------- 1 file changed, 78 insertions(+), 42 deletions(-) diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js index 6a80f10..3b6d301 100644 --- a/test/HTJSGeneratorCode/Integrate.js +++ b/test/HTJSGeneratorCode/Integrate.js @@ -5,13 +5,47 @@ var project = require('../../lib/pbxProject.js'), myProj = project(projectPath); // Debug with parseSync as it is impossible to debug async parsing. -//myProj.parseSync(); +myProj.parseSync(); + +//var requestGroupKey = myProj.findPBXGroupKey({path: 'HTJSGeneratorCode/Request'}); +// /var requestGroupKey = myProj.findPBXGroupKey({path: 'HTJSGeneratorCode/Requests'}); +// TODO: 如何找到绝对路径下的Group呢? +var requestGroupKey = myProj.findPBXGroupKey({path: 'Requests'}); +if (requestGroupKey === undefined) { + var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); + var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); + myProj.addToPbxGroup(requestGroupKey, keyByName, {}); + fs.writeFileSync(projectPath, myProj.writeSync()); +} else { + console.log("requestGroupKey is found successfullye: " + requestGroupKey); + var parentGroupKey = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); + + // TODO: 这个老的方法只能删除文件,不能删除Group. 要自己重写. + // 看情况, 删除Group的时候,还需要自己删除所有的文件. + myProj.removeFromPbxGroup(requestGroupKey, parentGroupKey); + + // TODO: 同名的Group也会被删除. 而且只能按照名字来删除,不能按照Key来删除. + myProj.removePbxGroup('Requests'); + + fs.writeFileSync(projectPath, myProj.writeSync()); +} + // -//var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); -//var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); -// group = myProj.addToPbxGroup(requestGroupKey, keyByName, {}); -//console.log(group); -//fs.writeFileSync(projectPath, myProj.writeSync()); +//exports.findGroupKey = { +// 'should return a valid group key':function(test) { +// var keyByName = project.findPBXGroupKey({ name: 'Classes'}); +// var keyByPath = project.findPBXGroupKey({ path: 'icons'}); +// var keyByPathName = project.findPBXGroupKey({ path: '"HelloCordova/Plugins"', name: 'Plugins'}); +// var nonExistingKey = project.findPBXGroupKey({ name: 'Foo'}); +// +// test.ok(keyByName === '080E96DDFE201D6D7F000001'); +// test.ok(keyByPath === '308D052D1370CCF300D202BF'); +// test.ok(keyByPathName === '307C750510C5A3420062BCA9'); +// test.ok(nonExistingKey === undefined); +// +// test.done(); +// } +//} // parsing is async, in a different process //myProj.parse(function (err) { @@ -47,39 +81,41 @@ var project = require('../../lib/pbxProject.js'), // console.log('new project written 111'); //}); -myProj.parse(function (err) { - console.log("Start update Project " + projectPath + " !"); - - // Step 1: Find parent Group Key according to path. This group must be available in the project. - // Model files and request files will be added into this group. - // TODO: The path should be passed as a param. - var parentGroupKey = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); - console.log("parentGroupKey : " + parentGroupKey); - - // Step 2: Create group if it doesn't exist. - // TODO: 1 Group name and path should be passed as params. 2 If the group already exists then it is uncessary to create and add them. - var modelGroupKey = myProj.pbxCreateGroup("Models", "Models"); - var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); - - // Step 3: Add new created groups into parent group. - // Note: Currently it is not supported to put models and requests into different parent groups. - myProj.addToPbxGroup(modelGroupKey, parentGroupKey, {}); - myProj.addToPbxGroup(requestGroupKey, parentGroupKey, {}); - - // Step 4: Remove files from Group and Add files into Group. - // TODO: 1 File path may not work if group directory doesn't match. 2 Loop directories to find files automatically. - myProj.removeFile('Models/HTTestModel.h', {}, modelGroupKey); - myProj.removeFile('Models/HTTestModel.m', modelGroupKey, {}); - myProj.addHeaderFile('Models/HTTestModel.h', {}, modelGroupKey); - myProj.addSourceFile('Models/HTTestModel.m', {}, modelGroupKey); - - myProj.removeFile('Requests/HTTestRequest.h', {}, requestGroupKey); - myProj.removeFile('Requests/HTTestRequest.m', requestGroupKey, {}); - myProj.addHeaderFile('Requests/HTTestRequest.h', {}, requestGroupKey); - myProj.addSourceFile('Requests/HTTestRequest.m', {}, requestGroupKey); - - - // Step 5: Write back to project. - fs.writeFileSync(projectPath, myProj.writeSync()); - console.log('Project ' + projectPath + " is updated successfully !"); -}); \ No newline at end of file +// 正式干净的代码 +// +//myProj.parse(function (err) { +// console.log("Start update Project " + projectPath + " !"); +// +// // Step 1: Find parent Group Key according to path. This group must be available in the project. +// // Model files and request files will be added into this group. +// // TODO: The path should be passed as a param. +// var parentGroupKey = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); +// console.log("parentGroupKey : " + parentGroupKey); +// +// // Step 2: Create group if it doesn't exist. +// // TODO: 1 Group name and path should be passed as params. 2 If the group already exists then it is uncessary to create and add them. +// var modelGroupKey = myProj.pbxCreateGroup("Models", "Models"); +// var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); +// +// // Step 3: Add new created groups into parent group. +// // Note: Currently it is not supported to put models and requests into different parent groups. +// myProj.addToPbxGroup(modelGroupKey, parentGroupKey, {}); +// myProj.addToPbxGroup(requestGroupKey, parentGroupKey, {}); +// +// // Step 4: Remove files from Group and Add files into Group. +// // TODO: 1 File path may not work if group directory doesn't match. 2 Loop directories to find files automatically. +// myProj.removeFile('Models/HTTestModel.h', {}, modelGroupKey); +// myProj.removeFile('Models/HTTestModel.m', modelGroupKey, {}); +// myProj.addHeaderFile('Models/HTTestModel.h', {}, modelGroupKey); +// myProj.addSourceFile('Models/HTTestModel.m', {}, modelGroupKey); +// +// myProj.removeFile('Requests/HTTestRequest.h', {}, requestGroupKey); +// myProj.removeFile('Requests/HTTestRequest.m', requestGroupKey, {}); +// myProj.addHeaderFile('Requests/HTTestRequest.h', {}, requestGroupKey); +// myProj.addSourceFile('Requests/HTTestRequest.m', {}, requestGroupKey); +// +// +// // Step 5: Write back to project. +// fs.writeFileSync(projectPath, myProj.writeSync()); +// console.log('Project ' + projectPath + " is updated successfully !"); +//}); \ No newline at end of file From 690700560195087a249502231821ce00a4658ad1 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Thu, 17 Dec 2015 11:51:05 +0800 Subject: [PATCH 11/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 302 +++++++++++++----- lib/pbxProject.js | 199 ++++++++++++ .../project.pbxproj | 98 +++--- .../UserInterfaceState.xcuserstate | Bin 19113 -> 19341 bytes test/HTJSGeneratorCode/Integrate.js | 61 ++-- 5 files changed, 500 insertions(+), 160 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 492434f..78926c4 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -26,29 +26,29 @@ - - + + - - + + - - + + - + - - + + @@ -57,22 +57,8 @@ - - - - - - - - - - - - - - - - + + @@ -82,20 +68,30 @@ - + - - + + - - + + - + + + + + + + + + + + @@ -111,8 +107,8 @@ @@ -124,7 +120,6 @@ true - @@ -282,6 +277,9 @@ + + + @@ -305,6 +303,11 @@ + + + + + @@ -325,12 +328,14 @@ false - + + - + + @@ -348,28 +353,36 @@ - + - + - - - - - + + + + + - - - + + + - + + + + + @@ -381,26 +394,11 @@ 1726 - + - + - + + + + + + + + + @@ -452,21 +518,41 @@ - + - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - @@ -494,42 +580,90 @@ - + + + + + + + + + - + - - + + - + - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + diff --git a/lib/pbxProject.js b/lib/pbxProject.js index e908198..c27b520 100644 --- a/lib/pbxProject.js +++ b/lib/pbxProject.js @@ -1855,5 +1855,204 @@ pbxProject.prototype.addDataModelDocument = function(filePath, group, opt) { return file; } +// New Interfaces added by LWANG. +pbxProject.prototype.removeGroupFromPbxGroup = function (removeGroupKey, groupKey) { + var group = this.getPBXGroupByKey(groupKey); + var removeGroup = this.getPBXGroupByKey(removeGroupKey); + if (group) { + var groupChildren = group.children, i; + for(i in groupChildren) { + if(removeGroupKey == groupChildren[i].value && removeGroup != undefined) { + groupChildren.splice(i, 1); + + this.clearGroup(removeGroup); + break; + } + } + } + + delete removeGroup; +} + +pbxProject.prototype.clearGroup = function (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + if (file.fileRef != undefined) { + this.removeFromPbxFileReferenceSection(file); // PBXFileReference + } + + // TODO: 如果是子Group, 还要继续删除. + this.removeFromPbxGroup(file, group); // PBXGroup + } +} + +pbxProject.prototype.removeGroupByKey = function (key, parentGroupKey) { + var group = this.getPBXGroupByKey(key, parentGroupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + if (file.fileRef != undefined) { + this.removeFromPbxFileReferenceSection(file); // PBXFileReference + } + + // TODO: 如果是子Group, 还要继续删除. + this.removeFromPbxGroup(file, group); // PBXGroup + } + } +} + +// Remove a group and all files in this group. +pbxProject.prototype.removeGroup = function (groupPath, parentGroupKey) { + var group = this.getPBXGroupByPath(groupPath, parentGroupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + if (file.fileRef != undefined) { + this.removeFromPbxFileReferenceSection(file); // PBXFileReference + } + + // TODO: 如果是子Group, 还要继续删除. + this.removeFromPbxGroup(file, group); // PBXGroup + } + } +} + + +pbxProject.prototype.getPBXGroupByPath = function(path, parentGroupKey) { + var groups = (undefined == parentGroupKey) ? this.hash.project.objects['PBXGroup'] : this.getPBXGroupByKey(parentGroupKey); + for (var key in groups) { + var group = groups[key]; + if (group.path === path) { + return group; + } + } + + return undefined; +}; + +pbxProject.prototype.getPBXGroupByKey = function(key, parentGroupKey) { + var groups = (undefined == parentGroupKey) ? this.hash.project.objects['PBXGroup'] : this.getPBXGroupByKey(parentGroupKey); + var group = groups[key]; + return group; +}; + +pbxProject.prototype.findPBXGroupInParent = function(criteria, parentCriteria) { + if (undefined == parentCriteria) { + return this.findPBXGroupKey(criteria); + } + + var target; + var groupKey = this.findPBXGroupKey(parentCriteria); + var group = this.getPBXGroupByKey(groupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = this.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = childGroup; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = childGroup; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = childGroup; + break + } + } + } + + return target; +} + +pbxProject.prototype.findPBXGroupKeyInParent = function(criteria, parentCriteria) { + if (undefined == parentCriteria) { + return this.findPBXGroupKey(criteria); + } + + var target; + var groupKey = this.findPBXGroupKey(parentCriteria); + var group = this.getPBXGroupByKey(groupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = this.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = child.value; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = child.value; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = child.value; + break + } + } + } + + return target; +} + +//var group = this.hash.project.objects['PBXGroup'][key]; +//return group; + +// +//pbxProject.prototype.removeFromPbxGroup = function (file, groupKey) { +// var group = this.getPBXGroupByKey(groupKey); +// if (group) { +// var groupChildren = group.children, i; +// for(i in groupChildren) { +// if(pbxGroupChild(file).value == groupChildren[i].value && +// pbxGroupChild(file).comment == groupChildren[i].comment) { +// groupChildren.splice(i, 1); +// break; +// } +// } +// } +//} +// +//pbxProject.prototype.getPBXGroupByPath = function(path) { +// console.log("begin getPBXGroupByPath " + path); +// +// var groups = this.hash.project.objects['PBXGroup']; +// for (var key in groups) { +// var group = groups[key]; +// if (group.path === path) { +// console.log("groupInfo", group, "path: ", group.path, "name: ", group.name); +// console.log("finish getPBXGroupByPath successful" + path); +// return group; +// } +// } +// +// console.log("finish getPBXGroupByPath failed" + path); +// return undefined; +//}; + module.exports = pbxProject; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj index 4d8e3df..76bf072 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -35,6 +35,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 4E28D1363F064BF18224E5F6 /* HTTestRequest.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = HTTestRequest.m; sourceTree = ""; }; E6AFD0031C1E99040027F340 /* HTJSGeneratorCode.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HTJSGeneratorCode.app; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD0071C1E99040027F340 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; E6AFD0091C1E99040027F340 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -51,7 +52,6 @@ E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 4E28D1363F064BF18224E5F6 /* HTTestRequest.m */ = {isa = PBXFileReference; name = "HTTestRequest.m"; path = "HTTestRequest.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -79,6 +79,41 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2F84E9DF5F9140828C34C7D5 /* Requests */ = { + isa = PBXGroup; + children = ( + ); + path = Requests; + sourceTree = ""; + }; + 909BE59C486F4A8BB4C47E5E /* Requests */ = { + isa = PBXGroup; + children = ( + ); + path = Requests; + sourceTree = ""; + }; + E2EC3076649A4DF897549BA2 /* Requests */ = { + isa = PBXGroup; + children = ( + ); + path = Requests; + sourceTree = ""; + }; + E6A557791C2265A600A81AD5 /* Requests */ = { + isa = PBXGroup; + children = ( + ); + name = Requests; + sourceTree = ""; + }; + E6A5577A1C2265C800A81AD5 /* 11 */ = { + isa = PBXGroup; + children = ( + ); + name = 11; + sourceTree = ""; + }; E6AFCFFA1C1E99040027F340 = { isa = PBXGroup; children = ( @@ -102,6 +137,8 @@ E6AFD0051C1E99040027F340 /* HTJSGeneratorCode */ = { isa = PBXGroup; children = ( + E6A5577A1C2265C800A81AD5 /* 11 */, + E6A557791C2265A600A81AD5 /* Requests */, E6AFD0091C1E99040027F340 /* AppDelegate.h */, E6AFD00A1C1E99040027F340 /* AppDelegate.m */, E6AFD00C1C1E99040027F340 /* ViewController.h */, @@ -111,7 +148,8 @@ E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */, E6AFD0171C1E99040027F340 /* Info.plist */, E6AFD0061C1E99040027F340 /* Supporting Files */, - EEE6E954FA2844C488571661 /* Requests */, + 909BE59C486F4A8BB4C47E5E /* Requests */, + 2F84E9DF5F9140828C34C7D5 /* Requests */, ); path = HTJSGeneratorCode; sourceTree = ""; @@ -142,62 +180,6 @@ path = HTJSGeneratorCodeUITests; sourceTree = ""; }; - D6FE86AD32B148C78510A66C /* Models */ = { - isa = PBXGroup; - children = ( - ); - name = Models; - path = Models; - sourceTree = ""; - }; - D2B9484C85A74B9FAC92F266 /* Requests */ = { - isa = PBXGroup; - children = ( - ); - name = Requests; - path = Requests; - sourceTree = ""; - }; - 4D13C78AD8774B5B88D9DFCC /* Models */ = { - isa = PBXGroup; - children = ( - ); - name = Models; - path = Models; - sourceTree = ""; - }; - C85BFA32F5A2493EAC5767D3 /* Requests */ = { - isa = PBXGroup; - children = ( - ); - name = Requests; - path = Requests; - sourceTree = ""; - }; - A82E2A56A83F4D1EBADA4ABF /* Models */ = { - isa = PBXGroup; - children = ( - ); - name = Models; - path = Models; - sourceTree = ""; - }; - 3D980EDEA2F44BE69C10F7E7 /* Requests */ = { - isa = PBXGroup; - children = ( - ); - name = Requests; - path = Requests; - sourceTree = ""; - }; - EEE6E954FA2844C488571661 /* Requests */ = { - isa = PBXGroup; - children = ( - ); - name = Requests; - path = Requests; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index 973627b4e5b77a97ffa99cc64843bf3f1ae708de..76fbde71d07cb6b7bdaf3f149729f0d8ad6f11d0 100644 GIT binary patch literal 19341 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 Zsp@0zA0)pVad4b%w_ivxc{|}rbMcDuV diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js index 3b6d301..85bae68 100644 --- a/test/HTJSGeneratorCode/Integrate.js +++ b/test/HTJSGeneratorCode/Integrate.js @@ -7,29 +7,54 @@ var project = require('../../lib/pbxProject.js'), // Debug with parseSync as it is impossible to debug async parsing. myProj.parseSync(); -//var requestGroupKey = myProj.findPBXGroupKey({path: 'HTJSGeneratorCode/Request'}); -// /var requestGroupKey = myProj.findPBXGroupKey({path: 'HTJSGeneratorCode/Requests'}); -// TODO: 如何找到绝对路径下的Group呢? -var requestGroupKey = myProj.findPBXGroupKey({path: 'Requests'}); -if (requestGroupKey === undefined) { - var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); - var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); - myProj.addToPbxGroup(requestGroupKey, keyByName, {}); - fs.writeFileSync(projectPath, myProj.writeSync()); -} else { - console.log("requestGroupKey is found successfullye: " + requestGroupKey); - var parentGroupKey = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); +function test1() { + // var requestGroupKey = myProj.findPBXGroupKey({path: 'HTJSGeneratorCode/Request'}); + // var requestGroupKey = myProj.findPBXGroupKey({path: 'HTJSGeneratorCode/Requests'}); + // TODO: 如何找到绝对路径下的Group呢? + var requestGroupKey = myProj.findPBXGroupKey({path: 'Requests'}); + if (requestGroupKey === undefined) { + var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); + var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); + myProj.addToPbxGroup(requestGroupKey, keyByName, {}); + fs.writeFileSync(projectPath, myProj.writeSync()); + } else { + console.log("requestGroupKey is found successfullye: " + requestGroupKey); + var parentGroupKey = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); - // TODO: 这个老的方法只能删除文件,不能删除Group. 要自己重写. - // 看情况, 删除Group的时候,还需要自己删除所有的文件. - myProj.removeFromPbxGroup(requestGroupKey, parentGroupKey); + // TODO: 这个老的方法只能删除文件,不能删除Group. 要自己重写. + // 看情况, 删除Group的时候,还需要自己删除所有的文件. + myProj.removeFromPbxGroup(requestGroupKey, parentGroupKey); - // TODO: 同名的Group也会被删除. 而且只能按照名字来删除,不能按照Key来删除. - myProj.removePbxGroup('Requests'); + // TODO: 同名的Group也会被删除. 而且只能按照名字来删除,不能按照Key来删除. + myProj.removePbxGroup('Requests'); - fs.writeFileSync(projectPath, myProj.writeSync()); + fs.writeFileSync(projectPath, myProj.writeSync()); + } } +function testRemoveSubGroup() { + var requestGroupKey = myProj.findPBXGroupKeyInParent({path: 'Requests'}, {path: 'HTJSGeneratorCode'}); + + if (requestGroupKey === undefined) { + // Add new group. + var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); + var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); + myProj.addToPbxGroup(requestGroupKey, keyByName, {}); + fs.writeFileSync(projectPath, myProj.writeSync()); + } else { + // Remove group. + console.log("requestGroupKey is found successfullye: " + requestGroupKey); + var parentGroupKey = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); + + // TODO: 预期在这个方法中, 1 从Parent中删除该Group. 2 删除所有该Group下的文件 3 从Project中删除该Group. + myProj.removeGroupFromPbxGroup(requestGroupKey, parentGroupKey); + + fs.writeFileSync(projectPath, myProj.writeSync()); + } +} + +testRemoveSubGroup(); + // //exports.findGroupKey = { // 'should return a valid group key':function(test) { From fff274a9cfa434913789cf0836a2636eb8460b0c Mon Sep 17 00:00:00 2001 From: Wangliping Date: Thu, 17 Dec 2015 14:40:23 +0800 Subject: [PATCH 12/28] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=B4=E4=B8=AA?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 144 ++++++++++-------- lib/pbxProject.js | 104 ++++++++++++- .../project.pbxproj | 46 ++---- .../UserInterfaceState.xcuserstate | Bin 19341 -> 20472 bytes .../HTJSGeneratorCode/TestViewController.h | 13 ++ .../HTJSGeneratorCode/TestViewController.m | 37 +++++ test/HTJSGeneratorCode/Integrate.js | 46 +++++- 7 files changed, 284 insertions(+), 106 deletions(-) create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/TestViewController.h create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/TestViewController.m diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 78926c4..5420beb 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,6 +2,8 @@ + + @@ -27,11 +29,21 @@ - + - - + + + + + + + + + + + + @@ -87,11 +99,11 @@ - + - - + + @@ -107,8 +119,8 @@ @@ -362,11 +374,11 @@ - + - + @@ -389,41 +401,11 @@ - - file://$PROJECT_DIR$/lib/pbxProject.js - 1726 - - - file://$PROJECT_DIR$/lib/pbxProject.js - 45 - file://$PROJECT_DIR$/lib/pbxProject.js 1675 - - file://$PROJECT_DIR$/lib/pbxProject.js - 1605 - - - file://$PROJECT_DIR$/lib/pbxProject.js - 1607 - - - file://$PROJECT_DIR$/lib/pbxProject.js - 1625 - - - file://$PROJECT_DIR$/lib/pbxProject.js - 1616 - file://$PROJECT_DIR$/lib/pbxProject.js 453 @@ -436,17 +418,17 @@ file://$PROJECT_DIR$/lib/pbxProject.js - 1859 + 1887 file://$PROJECT_DIR$/lib/pbxProject.js - 1867 + 1895 file://$PROJECT_DIR$/lib/pbxProject.js - 1873 + 1901 @@ -466,26 +448,56 @@ file://$PROJECT_DIR$/lib/pbxProject.js - 1986 + 2015 file://$PROJECT_DIR$/lib/pbxProject.js - 1989 + 2018 file://$PROJECT_DIR$/lib/pbxProject.js - 2018 + 2047 file://$PROJECT_DIR$/lib/pbxProject.js - 1865 + 1893 + + file://$PROJECT_DIR$/lib/pbxProject.js + 1872 + + + file://$PROJECT_DIR$/lib/pbxProject.js + 2088 + + + file://$PROJECT_DIR$/lib/pbxProject.js + 1707 + + + file://$PROJECT_DIR$/lib/pbxProject.js + 2118 + + + file://$PROJECT_DIR$/lib/pbxProject.js + 1741 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 74 + - @@ -572,14 +584,6 @@ - - - - - - - - @@ -628,42 +632,50 @@ - + - + - + - + - + - + - + - - + + - - + + + + + + + + + + diff --git a/lib/pbxProject.js b/lib/pbxProject.js index c27b520..8720251 100644 --- a/lib/pbxProject.js +++ b/lib/pbxProject.js @@ -1739,8 +1739,6 @@ pbxProject.prototype.getPBXObject = function(name) { pbxProject.prototype.addFile = function (path, group, opt) { - console.log("addSourceFile is called" + "path:" + path + " group: " + group); - var file = new pbxFile(path, opt); // null is better for early errors @@ -1856,6 +1854,36 @@ pbxProject.prototype.addDataModelDocument = function(filePath, group, opt) { } // New Interfaces added by LWANG. +//pbxProject.prototype.removePbxGroup = function (groupName) { +// var section = this.hash.project.objects['PBXGroup'], +// key, itemKey; +// +// for (key in section) { +// // only look for comments +// if (!COMMENT_KEY.test(key)) continue; +// +// if (section[key] == groupName) { +// itemKey = key.split(COMMENT_KEY)[0]; +// delete section[itemKey]; +// } +// } +//} + +pbxProject.prototype.removePbxGroupByKey = function (groupKey) { + var section = this.hash.project.objects['PBXGroup'], + key, itemKey; + + for (key in section) { + // only look for comments + if (!COMMENT_KEY.test(key)) continue; + + if (key == groupKey) { + itemKey = key.split(COMMENT_KEY)[0]; + delete section[itemKey]; + } + } +} + pbxProject.prototype.removeGroupFromPbxGroup = function (removeGroupKey, groupKey) { var group = this.getPBXGroupByKey(groupKey); var removeGroup = this.getPBXGroupByKey(removeGroupKey); @@ -1872,6 +1900,7 @@ pbxProject.prototype.removeGroupFromPbxGroup = function (removeGroupKey, groupKe } delete removeGroup; + //this.removePbxGroupByKey(removeGroupKey); } pbxProject.prototype.clearGroup = function (group) { @@ -2019,6 +2048,77 @@ pbxProject.prototype.findPBXGroupKeyInParent = function(criteria, parentCriteria return target; } + +pbxProject.prototype.findPBXGroupKeyInParentGroup = function(criteria, parentGroupKey) { + var target; + var group = this.getPBXGroupByKey(parentGroupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = this.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = child.value; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = child.value; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = child.value; + break + } + } + } + + return target; +} + +pbxProject.prototype.findPBXGroupInParentGroup = function(criteria, parentGroupKey) { + var target; + var group = this.getPBXGroupByKey(parentGroupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = this.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = childGroup; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = childGroup; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = childGroup; + break + } + } + } + + return target; +} + //var group = this.hash.project.objects['PBXGroup'][key]; //return group; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj index 76bf072..3e4ff16 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -14,7 +14,7 @@ E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */; }; E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */; }; E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */; }; - F9C6B1201632445B82E564FB /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E28D1363F064BF18224E5F6 /* HTTestRequest.m */; }; + 0814236A90D949D1A2F9431E /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = EAB0CDBFC5304BDFA2C7F036 /* HTTestModel.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -35,7 +35,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 4E28D1363F064BF18224E5F6 /* HTTestRequest.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = HTTestRequest.m; sourceTree = ""; }; E6AFD0031C1E99040027F340 /* HTJSGeneratorCode.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HTJSGeneratorCode.app; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD0071C1E99040027F340 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; E6AFD0091C1E99040027F340 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -52,6 +51,8 @@ E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2E11668129ED41A4B83A542A /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + EAB0CDBFC5304BDFA2C7F036 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -79,39 +80,13 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2F84E9DF5F9140828C34C7D5 /* Requests */ = { + BA604265FA2841C1B310F4EB /* Models */ = { isa = PBXGroup; children = ( + 2E11668129ED41A4B83A542A /* HTTestModel.h */, + EAB0CDBFC5304BDFA2C7F036 /* HTTestModel.m */, ); - path = Requests; - sourceTree = ""; - }; - 909BE59C486F4A8BB4C47E5E /* Requests */ = { - isa = PBXGroup; - children = ( - ); - path = Requests; - sourceTree = ""; - }; - E2EC3076649A4DF897549BA2 /* Requests */ = { - isa = PBXGroup; - children = ( - ); - path = Requests; - sourceTree = ""; - }; - E6A557791C2265A600A81AD5 /* Requests */ = { - isa = PBXGroup; - children = ( - ); - name = Requests; - sourceTree = ""; - }; - E6A5577A1C2265C800A81AD5 /* 11 */ = { - isa = PBXGroup; - children = ( - ); - name = 11; + path = Models; sourceTree = ""; }; E6AFCFFA1C1E99040027F340 = { @@ -137,8 +112,6 @@ E6AFD0051C1E99040027F340 /* HTJSGeneratorCode */ = { isa = PBXGroup; children = ( - E6A5577A1C2265C800A81AD5 /* 11 */, - E6A557791C2265A600A81AD5 /* Requests */, E6AFD0091C1E99040027F340 /* AppDelegate.h */, E6AFD00A1C1E99040027F340 /* AppDelegate.m */, E6AFD00C1C1E99040027F340 /* ViewController.h */, @@ -148,8 +121,7 @@ E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */, E6AFD0171C1E99040027F340 /* Info.plist */, E6AFD0061C1E99040027F340 /* Supporting Files */, - 909BE59C486F4A8BB4C47E5E /* Requests */, - 2F84E9DF5F9140828C34C7D5 /* Requests */, + BA604265FA2841C1B310F4EB /* Models */, ); path = HTJSGeneratorCode; sourceTree = ""; @@ -316,7 +288,7 @@ E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */, E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */, E6AFD0081C1E99040027F340 /* main.m in Sources */, - F9C6B1201632445B82E564FB /* HTTestRequest.m in Sources */, + 0814236A90D949D1A2F9431E /* HTTestModel.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index 76fbde71d07cb6b7bdaf3f149729f0d8ad6f11d0..9bb6e893dd42f1391662683c007787840d7a4192 100644 GIT binary patch delta 10503 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 + +@interface TestViewController : UIViewController + +@end diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode/TestViewController.m b/test/HTJSGeneratorCode/HTJSGeneratorCode/TestViewController.m new file mode 100644 index 0000000..5979945 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/TestViewController.m @@ -0,0 +1,37 @@ +// +// TestViewController.m +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/17. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import "TestViewController.h" + +@interface TestViewController () + +@end + +@implementation TestViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js index 85bae68..d12833e 100644 --- a/test/HTJSGeneratorCode/Integrate.js +++ b/test/HTJSGeneratorCode/Integrate.js @@ -53,8 +53,52 @@ function testRemoveSubGroup() { } } -testRemoveSubGroup(); +// 删除所有同名的Group. +function testRemoveGroups() { + // 删除 Group的时候不会删除Group下添加的文件,但是重新添加新文件的话工程会自动修正. + myProj.removePbxGroup("11"); + fs.writeFileSync(projectPath, myProj.writeSync()); +} + +function testworkflow() { + console.log("Start update Project " + projectPath + " !"); + + // Step 1: Find parent Group Key according to path. This group must be available in the project. + // Model files and request files will be added into this group. + // TODO: The path should be passed as a param. + var parentGroupKey = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); + console.log("parentGroupKey : " + parentGroupKey); + + // Step 2: Create group if it doesn't exist. + // TODO: 1 Group name and path should be passed as params. 2 If the group already exists then it is uncessary to create and add them. + var modelGroupKey = myProj.findPBXGroupKeyInParentGroup({ path: 'Models'}, parentGroupKey); + if (undefined == modelGroupKey) { + // Step 2: 不存在则新建Group. + modelGroupKey = myProj.pbxCreateGroup("Models", "Models"); + + // Add new created groups into parent group. + // Step 3: 将Group加到parent Group中 + myProj.addToPbxGroup(modelGroupKey, parentGroupKey, {}); + } else { + // Step 3: 如果存在,那么删除文件. + // TODO: 1 File path may not work if group directory doesn't match. 2 Loop directories to find files automatically. + // TODO: 这里不可以直接用removeFile和addFile,一定要区分header和Source. + myProj.removeHeaderFile('HTTestModel.h', {}, modelGroupKey); + myProj.removeSourceFile('HTTestModel.m', {}, modelGroupKey); + } + + myProj.addHeaderFile('HTTestModel.h', {}, modelGroupKey); + myProj.addSourceFile('HTTestModel.m', {}, modelGroupKey); + + + // Step 5: Write back to project. + fs.writeFileSync(projectPath, myProj.writeSync()); + console.log('Project ' + projectPath + " is updated successfully !"); +} +//testRemoveGroups(); +//testRemoveSubGroup(); +testworkflow(); // //exports.findGroupKey = { // 'should return a valid group key':function(test) { From 902c05911827d38545ff69c39e8853b1eed35169 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Thu, 17 Dec 2015 16:10:50 +0800 Subject: [PATCH 13/28] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 166 +++++++++++++----- .../UserInterfaceState.xcuserstate | Bin 20472 -> 20522 bytes test/HTJSGeneratorCode/Integrate.js | 114 +++++++++++- test/HTJSGeneratorCode/pbxProjectWrap.js | 24 +++ 4 files changed, 262 insertions(+), 42 deletions(-) create mode 100644 test/HTJSGeneratorCode/pbxProjectWrap.js diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 5420beb..02c3896 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,12 +2,7 @@ - - - - - @@ -32,8 +27,18 @@ - - + + + + + + + + + + + + @@ -63,7 +68,7 @@ - + @@ -102,8 +107,18 @@ - - + + + + + + + + + + + + @@ -120,6 +135,7 @@ @@ -373,12 +389,12 @@ - - + + - - - + + + @@ -433,17 +449,17 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 49 + 51 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 39 + 41 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 35 + 37 @@ -493,11 +509,71 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 74 + 76 + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 157 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 164 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 159 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 125 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 131 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 147 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 169 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 120 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 124 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 174 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 135 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 140 + - - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + + + + + + + + + - - + + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index 9bb6e893dd42f1391662683c007787840d7a4192..c6f363bcafb93ca946c371cbedd747c8b51caf87 100644 GIT binary patch delta 8591 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 Q>eCn3xAyPz-z6FU1I3thP5=M^ delta 8579 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 Date: Thu, 17 Dec 2015 17:15:42 +0800 Subject: [PATCH 14/28] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=80=E4=B8=AAGroup?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E6=89=80=E6=9C=89=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 172 ++++++++++-------- lib/pbxProject.js | 1 + .../UserInterfaceState.xcuserstate | Bin 20522 -> 20540 bytes test/HTJSGeneratorCode/Integrate.js | 66 ++++++- test/HTJSGeneratorCode/pbxProjectWrap.js | 77 +++++++- 5 files changed, 230 insertions(+), 86 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 02c3896..a92b7ee 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -3,7 +3,9 @@ + + @@ -24,21 +26,21 @@ - + - - + + - + - - + + @@ -74,16 +76,6 @@ - - - - - - - - - - @@ -107,8 +99,8 @@ - - + + @@ -135,8 +127,8 @@ @@ -387,7 +379,7 @@ - + @@ -419,7 +411,7 @@ file://$PROJECT_DIR$/lib/pbxProject.js - 1675 + 1676 @@ -429,22 +421,22 @@ file://$PROJECT_DIR$/lib/pbxProject.js - 1636 + 1637 file://$PROJECT_DIR$/lib/pbxProject.js - 1887 + 1888 file://$PROJECT_DIR$/lib/pbxProject.js - 1895 + 1896 file://$PROJECT_DIR$/lib/pbxProject.js - 1901 + 1902 @@ -464,47 +456,47 @@ file://$PROJECT_DIR$/lib/pbxProject.js - 2015 + 2016 file://$PROJECT_DIR$/lib/pbxProject.js - 2018 + 2019 file://$PROJECT_DIR$/lib/pbxProject.js - 2047 + 2048 file://$PROJECT_DIR$/lib/pbxProject.js - 1893 + 1894 file://$PROJECT_DIR$/lib/pbxProject.js - 1872 + 1873 file://$PROJECT_DIR$/lib/pbxProject.js - 2088 + 2089 file://$PROJECT_DIR$/lib/pbxProject.js - 1707 + 1708 file://$PROJECT_DIR$/lib/pbxProject.js - 2118 + 2119 file://$PROJECT_DIR$/lib/pbxProject.js - 1741 + 1742 @@ -514,66 +506,96 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 157 - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 164 - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 159 - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 125 - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 131 - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 147 - + + file://$PROJECT_DIR$/lib/pbxProject.js + 936 + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 169 - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 120 - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 124 - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 174 - + + file://$PROJECT_DIR$/lib/pbxProject.js + 182 + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 135 - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 140 - + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 195 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 159 + + + file://$PROJECT_DIR$/lib/pbxProject.js + 609 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 142 + - - - - - - - - - @@ -740,26 +754,34 @@ - + - - + + - + - - + + - - + + + + + + + + + + diff --git a/lib/pbxProject.js b/lib/pbxProject.js index 8720251..bf076dd 100644 --- a/lib/pbxProject.js +++ b/lib/pbxProject.js @@ -931,6 +931,7 @@ pbxProject.prototype.buildPhase = function(group, target) { pbxProject.prototype.buildPhaseObject = function(name, group, target) { var section = this.hash.project.objects[name], obj, sectionKey, key; + // TODO: 这里target如果是传的FirstTarget, 会抛出异常,原因未知. var buildPhase = this.buildPhase(group, target); for (key in section) { diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index c6f363bcafb93ca946c371cbedd747c8b51caf87..f9600efa420a71e9cc96ec011473caf5516814ef 100644 GIT binary patch delta 9800 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 T|7Lg)2EXZ|;CJQkEa(3NRzu6y delta 9681 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 O3;gEZ?E*h}N&g1~^`F`R diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js index 41beb15..abbd5b9 100644 --- a/test/HTJSGeneratorCode/Integrate.js +++ b/test/HTJSGeneratorCode/Integrate.js @@ -128,26 +128,36 @@ function removeFromPbxFileReferenceSectionWithKey (fileRef) { } } +// TODO: 这里必须返回BuildFileUUID. 否则的话,无法从BuildPhase中删除. function removeFromPbxBuildFileSectionWithKey (fileRef) { var uuid; - + var buildFileUUID; for (uuid in myProj.pbxBuildFileSection()) { - if (uuid == fileRef) { - delete myProj.pbxBuildFileSection()[uuid]; + var buildFile = myProj.pbxBuildFileSection()[uuid]; + if (buildFile.fileRef == fileRef) { + delete buildFile; + buildFileUUID = uuid; + break; } } var commentKey = f("%s_comment", fileRef); + var commentKey = f("%s_comment", fileRef); if (myProj.pbxBuildFileSection()[commentKey] != undefined) { delete myProj.pbxBuildFileSection()[commentKey]; - delete myProj.pbxBuildFileSection()[commentKey]; } + + return uuid; } // Note: 这里只取了firstTarget, 理论上所有的Target都需要获取. 这里所有的参数都是fileRef的uuid. +// Note: File Reference里面的uuid和BuildPhase中的uuid不相同. 所以这个方法不正确. function removeFromPbxSourcesBuildPhaseWithKey (fileRef) { - var sources = myProj.pbxSourcesBuildPhaseObj(myProj.getFirstTarget()), i; + // var target = myProj.getFirstTarget(); + // TODO: 用FirstTarget会抛出异常,原因未知. + var target = undefined; + var sources = myProj.pbxSourcesBuildPhaseObj(target), i; for (i in sources.files) { - if (i == fileRef) { + if (sources.files[i].value == fileRef) { sources.files.splice(i, 1); break; } @@ -166,17 +176,29 @@ function removeFilesInGroup() { removeFromPbxFileReferenceSectionWithKey(uuid); // PBXFileReference } - // 从当前Group中删除 - groupChildren.splice(i, 1); + // 从当前Group中删除. TODO: 这里删除了后不可以继续遍历了. + //groupChildren.splice(i, 1); // TODO: 如果是子Group, 还要继续删除. 暂时不考虑文件夹. //myProj.removeFromPbxGroup(file, group); // PBXGroup // 从Build File Ref中删除 - removeFromPbxBuildFileSectionWithKey(uuid); + var buildFileUUID = removeFromPbxBuildFileSectionWithKey(uuid); // 从Build Phase中删除 - removeFromPbxSourcesBuildPhaseWithKey(uuid); + if (undefined != buildFileUUID) { + removeFromPbxSourcesBuildPhaseWithKey(buildFileUUID); + } + + console.log("finish one file"); } + + // 删除groupChildren. + groupChildren.splice(0, groupChildren.length); + + //var length = groupChildren.length; + //groupChildren = group.children; + //length = groupChildren.length; + //console.log(length); } } // @@ -211,6 +233,30 @@ function removeFilesInGroup() { //testworkflow(); removeFilesInGroup(); + + + + +function testRemoveFile() { + var modelGroupKey = myProj.findPBXGroupKey({ path: 'Models'}); + if (undefined != modelGroupKey) { + myProj.removeHeaderFile('HTTestModel.h', {}, modelGroupKey); + myProj.removeSourceFile('HTTestModel.m', {}, modelGroupKey); + } + + // Step 5: Write back to project. + //fs.writeFileSync(projectPath, myProj.writeSync()); + console.log('Project ' + projectPath + " is updated successfully !"); +} + +//testRemoveFile(); + + + + + + + // //exports.findGroupKey = { // 'should return a valid group key':function(test) { diff --git a/test/HTJSGeneratorCode/pbxProjectWrap.js b/test/HTJSGeneratorCode/pbxProjectWrap.js index d9959de..f415835 100644 --- a/test/HTJSGeneratorCode/pbxProjectWrap.js +++ b/test/HTJSGeneratorCode/pbxProjectWrap.js @@ -9,7 +9,7 @@ var project = require('../../lib/pbxProject.js'), // Debug with parseSync as it is impossible to debug async parsing. myProj.parseSync(); -// Done. 根据FileRef的UUID从Project的File Reference Section中删除. +// Done. 根据uuid从Project的File Reference Section中删除某个文件. function removeFromPbxFileReferenceSectionWithKey (fileRef) { for (i in myProj.pbxFileReferenceSection()) { if (i == fileRef) { @@ -22,3 +22,78 @@ function removeFromPbxFileReferenceSectionWithKey (fileRef) { delete myProj.pbxFileReferenceSection()[commentKey]; } } + +// Done. 根据uuid从Project的Build File Section中删除某个文件. +// TODO: 这里必须返回BuildFileUUID. 否则的话,无法从BuildPhase中删除. +function removeFromPbxBuildFileSectionWithKey (fileRef) { + var uuid; + var buildFileUUID; + for (uuid in myProj.pbxBuildFileSection()) { + var buildFile = myProj.pbxBuildFileSection()[uuid]; + if (buildFile.fileRef == fileRef) { + delete buildFile; + buildFileUUID = uuid; + break; + } + } + var commentKey = f("%s_comment", fileRef); + var commentKey = f("%s_comment", fileRef); + if (myProj.pbxBuildFileSection()[commentKey] != undefined) { + delete myProj.pbxBuildFileSection()[commentKey]; + } + + return uuid; +} + +// Note: 这里只取了firstTarget, 理论上所有的Target都需要获取. 这里所有的参数都是fileRef的uuid. +// Note: File Reference里面的uuid和BuildPhase中的uuid不相同. 这里必须传递biuldFile 的Key而不是File Reference的Key. +function removeFromPbxSourcesBuildPhaseWithKey (buildFileKey) { + // var target = myProj.getFirstTarget(); + // TODO: 用FirstTarget会抛出异常,原因未知. + var target = undefined; + var sources = myProj.pbxSourcesBuildPhaseObj(target), i; + for (i in sources.files) { + if (sources.files[i].value == fileRef) { + sources.files.splice(i, 1); + break; + } + } +} + +function removeFilesInGroup() { + var groupKey = myProj.findPBXGroupKey({ path: 'Models'}); + var group = myProj.getPBXGroupByKey(groupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + var uuid = file.value; + if (uuid != undefined) { + removeFromPbxFileReferenceSectionWithKey(uuid); // PBXFileReference + } + + // 从当前Group中删除. TODO: 这里删除了后不可以继续遍历了. + //groupChildren.splice(i, 1); + // TODO: 如果是子Group, 还要继续删除. 暂时不考虑文件夹. + //myProj.removeFromPbxGroup(file, group); // PBXGroup + + // 从Build File Ref中删除 + var buildFileUUID = removeFromPbxBuildFileSectionWithKey(uuid); + + // 从Build Phase中删除 + if (undefined != buildFileUUID) { + removeFromPbxSourcesBuildPhaseWithKey(buildFileUUID); + } + + console.log("finish one file"); + } + + // 删除groupChildren. + groupChildren.splice(0, groupChildren.length); + + //var length = groupChildren.length; + //groupChildren = group.children; + //length = groupChildren.length; + //console.log(length); + } +} \ No newline at end of file From b752e4dfe856e8aed2dcc6cd67dd9dcf44bb4b94 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Thu, 17 Dec 2015 17:30:52 +0800 Subject: [PATCH 15/28] =?UTF-8?q?=E9=81=8D=E5=8E=86=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 75 ++++++++++++------------ test/HTJSGeneratorCode/Integrate.js | 38 ++++++++++-- test/HTJSGeneratorCode/pbxProjectWrap.js | 22 +++++++ 3 files changed, 94 insertions(+), 41 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index a92b7ee..efe227c 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,8 +2,6 @@ - - @@ -29,18 +27,18 @@ - - + + - + - - + + @@ -96,10 +94,10 @@ - + - + @@ -127,8 +125,8 @@ @@ -382,11 +380,11 @@ - + - + @@ -506,32 +504,32 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 174 + 197 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 169 + 192 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 179 + 202 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 120 + 143 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 137 + 160 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 126 + 149 @@ -541,22 +539,22 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 242 + 270 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 243 + 271 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 248 + 276 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 241 + 269 @@ -566,22 +564,22 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 191 + 214 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 160 + 183 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 195 + 218 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 159 + 182 @@ -591,11 +589,16 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 142 + 165 + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 112 + - - + - - + + - - + + - + - - + + diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js index abbd5b9..08a03f7 100644 --- a/test/HTJSGeneratorCode/Integrate.js +++ b/test/HTJSGeneratorCode/Integrate.js @@ -100,20 +100,43 @@ function testworkflow() { // 根据完整路径获取到对应的Group. function findGroupByAbsolutePath() { - var groupPath; + var groups = myProj } +findGroupByAbsolutePath(); + // 遍历文件和目录 -function loopFilesInFilePath() { +function loopFilesInFilePath(root) { + var res = []; + var files = fs.readdirSync(root); + files.forEach(function(file) { + var extensionFileName = GetExtensionFileName(file); + if ("m" == extensionFileName || "h" == extensionFileName) { + console.log(file); + } + }); +} +function GetExtensionFileName(pathfilename) +{ + var reg = /(\\+)/g; + var pfn = pathfilename.replace(reg, "#"); + var arrpfn = pfn.split("#"); + var fn = arrpfn[arrpfn.length - 1]; + var arrfn = fn.split("."); + return arrfn[arrfn.length - 1]; } +//loopFilesInFilePath("HTJSGeneratorCode/Models"); + // 添加文件夹到某个Group. 主要是依赖遍历文件和目录. -function addFolderToGroup() { +//function addFolderToGroup() { +// +//} -} +// removeFilesInGroup已经OK. // Done. 根据FileRef的UUID从Project的File Reference Section中删除. function removeFromPbxFileReferenceSectionWithKey (fileRef) { for (i in myProj.pbxFileReferenceSection()) { @@ -201,6 +224,11 @@ function removeFilesInGroup() { //console.log(length); } } + + + + + // //pbxProject.prototype.removeSourceFile = function (path, opt, group) { // var file; @@ -231,7 +259,7 @@ function removeFilesInGroup() { //testRemoveGroups(); //testRemoveSubGroup(); //testworkflow(); -removeFilesInGroup(); +//removeFilesInGroup(); diff --git a/test/HTJSGeneratorCode/pbxProjectWrap.js b/test/HTJSGeneratorCode/pbxProjectWrap.js index f415835..3a324f7 100644 --- a/test/HTJSGeneratorCode/pbxProjectWrap.js +++ b/test/HTJSGeneratorCode/pbxProjectWrap.js @@ -96,4 +96,26 @@ function removeFilesInGroup() { //length = groupChildren.length; //console.log(length); } +} + +// 遍历文件和目录 +function loopFilesInFilePath(root) { + var res = []; + var files = fs.readdirSync(root); + files.forEach(function(file) { + var extensionFileName = GetExtensionFileName(file); + if ("m" == extensionFileName || "h" == extensionFileName) { + console.log(file); + } + }); +} + +function GetExtensionFileName(pathfilename) +{ + var reg = /(\\+)/g; + var pfn = pathfilename.replace(reg, "#"); + var arrpfn = pfn.split("#"); + var fn = arrpfn[arrpfn.length - 1]; + var arrfn = fn.split("."); + return arrfn[arrfn.length - 1]; } \ No newline at end of file From ee04ad30bebcfb4d7d20040d18ba6dfa97fd51f8 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Thu, 17 Dec 2015 18:14:53 +0800 Subject: [PATCH 16/28] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=AE=8C=E6=95=B4=E8=B7=AF=E5=BE=84=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=AF=B9=E5=BA=94=E7=9A=84Group?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 110 +++++++++++++---------- test/HTJSGeneratorCode/Integrate.js | 19 +++- test/HTJSGeneratorCode/pbxProjectWrap.js | 23 +++++ 3 files changed, 105 insertions(+), 47 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index efe227c..dd9c6e5 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -27,18 +27,18 @@ - - + + - + - - + + @@ -84,21 +84,11 @@ - - - - - - - - - - - + - - + + @@ -125,8 +115,8 @@ @@ -380,11 +370,11 @@ - + - + @@ -504,32 +494,32 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 197 + 214 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 192 + 209 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 202 + 219 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 143 + 160 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 160 + 177 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 149 + 166 @@ -539,22 +529,22 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 270 + 287 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 271 + 288 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 276 + 293 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 269 + 286 @@ -564,22 +554,22 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 214 + 231 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 183 + 200 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 218 + 235 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 182 + 199 @@ -589,16 +579,36 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 165 + 182 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 112 + 129 + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 119 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 117 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 102 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 112 + - - + - + - + - + - - + + - - + + + + + + + + + + diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js index 08a03f7..107650a 100644 --- a/test/HTJSGeneratorCode/Integrate.js +++ b/test/HTJSGeneratorCode/Integrate.js @@ -100,7 +100,24 @@ function testworkflow() { // 根据完整路径获取到对应的Group. function findGroupByAbsolutePath() { - var groups = myProj + var fullPath = "HTJSGeneratorCode/Models"; + var pathList = fullPath.split('/'); + if (pathList.length == 0) { + return; + } + + var root = pathList[0]; + var groupKey = myProj.findPBXGroupKey({ path: root}); + pathList.splice(0, 1); + while (pathList.length > 0) { + root = pathList[0]; + groupKey = myProj.findPBXGroupKeyInParentGroup({path: root}, groupKey); + pathList.splice(0, 1); + } + + var group = myProj.getPBXGroupByKey(groupKey); + + return groupKey; } findGroupByAbsolutePath(); diff --git a/test/HTJSGeneratorCode/pbxProjectWrap.js b/test/HTJSGeneratorCode/pbxProjectWrap.js index 3a324f7..9fe5412 100644 --- a/test/HTJSGeneratorCode/pbxProjectWrap.js +++ b/test/HTJSGeneratorCode/pbxProjectWrap.js @@ -118,4 +118,27 @@ function GetExtensionFileName(pathfilename) var fn = arrpfn[arrpfn.length - 1]; var arrfn = fn.split("."); return arrfn[arrfn.length - 1]; +} + + +// 根据完整路径获取到对应的Group. +function findGroupByAbsolutePath() { + var fullPath = "HTJSGeneratorCode/Models"; + var pathList = fullPath.split('/'); + if (pathList.length == 0) { + return; + } + + var root = pathList[0]; + var groupKey = myProj.findPBXGroupKey({ path: root}); + pathList.splice(0, 1); + while (pathList.length > 0) { + root = pathList[0]; + groupKey = myProj.findPBXGroupKeyInParentGroup({path: root}, groupKey); + pathList.splice(0, 1); + } + + var group = myProj.getPBXGroupByKey(groupKey); + + return groupKey; } \ No newline at end of file From 165dab21169838f20fd2a84f8dc5b74c5ff52090 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Thu, 17 Dec 2015 18:34:26 +0800 Subject: [PATCH 17/28] =?UTF-8?q?=E6=95=B4=E7=90=86JS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 109 ++++--- test/HTJSGeneratorCode/Integrate.js | 9 +- test/HTJSGeneratorCode/UpdateModels.js | 400 +++++++++++++++++++++++++ 3 files changed, 482 insertions(+), 36 deletions(-) create mode 100644 test/HTJSGeneratorCode/UpdateModels.js diff --git a/.idea/workspace.xml b/.idea/workspace.xml index dd9c6e5..dd48697 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -3,7 +3,6 @@ - @@ -27,18 +26,28 @@ - - + + - + + + + + + + + + + + - - + + @@ -115,8 +124,9 @@ @@ -280,6 +290,22 @@ + + + + + + + + + + + + + + + + @@ -369,12 +395,12 @@ - + - + - + @@ -494,32 +520,32 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 214 + 221 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 209 + 216 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 219 + 226 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 160 + 167 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 177 + 184 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 166 + 173 @@ -529,22 +555,22 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 287 + 294 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 288 + 295 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 293 + 300 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 286 + 293 @@ -554,22 +580,22 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 231 + 238 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 200 + 207 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 235 + 242 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 199 + 206 @@ -579,7 +605,7 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 182 + 189 @@ -607,8 +633,13 @@ 112 + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 156 + - + + + + + + + + @@ -668,7 +677,6 @@ - @@ -676,7 +684,6 @@ - @@ -714,7 +721,6 @@ - @@ -722,7 +728,6 @@ - @@ -746,7 +751,6 @@ - @@ -754,94 +758,91 @@ - - + - - + - + - - + - + - + - + - - + + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - - + + diff --git a/test/HTJSGeneratorCode/UpdateModels.js b/test/HTJSGeneratorCode/UpdateModels.js index 7207b68..7a3bc3c 100644 --- a/test/HTJSGeneratorCode/UpdateModels.js +++ b/test/HTJSGeneratorCode/UpdateModels.js @@ -18,6 +18,7 @@ var myProj = project(projectPath); // Debug with parseSync as it is impossible to debug async parsing. // For release version, it is OK to use parse function. myProj.parseSync(); +updateCode(); function updateCode () { if (undefined == projectName || undefined == groupParentPath || undefined == folderParentPath || undefined == myProj) { @@ -26,17 +27,43 @@ function updateCode () { // 固定添加Models和Requests, 不需要参数配置 var autoGroupNames = ["Models", "Requests"]; - // TODO: 循环这个数组. - var groupName = "Models"; - var absoluteGroupPath = groupParentPath + "/" + groupName; - var groupKey = findGroupByAbsolutePath(absoluteGroupPath); - if (undefined == groupKey) { - // group不存在,需要创建 - } else { - // group存在, 删除其中的所有文件. - } + autoGroupNames.ForEach(function (groupName){ + // 获取parent Group Key 和 要处理的Group Key + var absoluteGroupPath = groupParentPath + "/" + groupName; + var parentGroupKey = findGroupByAbsolutePath(groupParentPath); + var groupKey = findGroupByAbsolutePath(absoluteGroupPath); + if (undefined == groupKey) { + // group不存在, 新建Group. GroupName与Path相同. + groupKey = myProj.pbxCreateGroup(groupName, groupName); + + // Add new created groups into parent group. + // 将Group加到parent Group中 + myProj.addToPbxGroup(groupKey, parentGroupKey, {}); + } else { + // group存在, 删除其中的所有文件. + removeFilesInGroup(groupName); + } + + // 获取目录下的所有头文件和可执行文件 + var folderPath = folderParentPath + "/" + groupName; + var headerFiles = headerFilesInFilePath(folderPath); + var sourceFiles = sourceFilesInFilePath(folderPath); + + // 将头文件添加到group中. + headerFiles.forEach(function(headerFile) { + myProj.addHeaderFile(headerFile, {}, groupKey); + }); + + // 将源文件添加到group中 + sourceFiles.ForEach(function(sourceFile) { + myProj.addSourceFile(sourceFile, {}, groupKey); + }); + }); + // 将内容写回到工程文件中. + fs.writeFileSync(projectPath, myProj.writeSync()); + console.log('Project ' + projectPath + " is updated successfully !"); } // 根据完整路径获取到对应的Group. @@ -63,7 +90,6 @@ function findGroupByAbsolutePath(fullPath) { return groupKey; } - // removeFilesInGroup已经OK. // Done. 根据FileRef的UUID从Project的File Reference Section中删除. function removeFromPbxFileReferenceSectionWithKey (fileRef) { @@ -115,8 +141,8 @@ function removeFromPbxSourcesBuildPhaseWithKey (fileRef) { } } -function removeFilesInGroup() { - var groupKey = myProj.findPBXGroupKey({ path: 'Models'}); +function removeFilesInGroup(groupName) { + var groupKey = myProj.findPBXGroupKey({ path: groupName}); var group = myProj.getPBXGroupByKey(groupKey); if (group) { var groupChildren = group.children, i; @@ -145,155 +171,36 @@ function removeFilesInGroup() { // 删除groupChildren. groupChildren.splice(0, groupChildren.length); - - //var length = groupChildren.length; - //groupChildren = group.children; - //length = groupChildren.length; - //console.log(length); - } -} - - - - - - - - - - - - - - - - - - - -function test1() { - // var requestGroupKey = myProj.findPBXGroupKey({path: 'HTJSGeneratorCode/Request'}); - // var requestGroupKey = myProj.findPBXGroupKey({path: 'HTJSGeneratorCode/Requests'}); - // TODO: 如何找到绝对路径下的Group呢? - var requestGroupKey = myProj.findPBXGroupKey({path: 'Requests'}); - if (requestGroupKey === undefined) { - var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); - var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); - myProj.addToPbxGroup(requestGroupKey, keyByName, {}); - fs.writeFileSync(projectPath, myProj.writeSync()); - } else { - console.log("requestGroupKey is found successfullye: " + requestGroupKey); - var parentGroupKey = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); - - // TODO: 这个老的方法只能删除文件,不能删除Group. 要自己重写. - // 看情况, 删除Group的时候,还需要自己删除所有的文件. - myProj.removeFromPbxGroup(requestGroupKey, parentGroupKey); - - // TODO: 同名的Group也会被删除. 而且只能按照名字来删除,不能按照Key来删除. - myProj.removePbxGroup('Requests'); - - fs.writeFileSync(projectPath, myProj.writeSync()); } } -function testRemoveSubGroup() { - var requestGroupKey = myProj.findPBXGroupKeyInParent({path: 'Requests'}, {path: 'HTJSGeneratorCode'}); - - if (requestGroupKey === undefined) { - // Add new group. - var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); - var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); - myProj.addToPbxGroup(requestGroupKey, keyByName, {}); - fs.writeFileSync(projectPath, myProj.writeSync()); - } else { - // Remove group. - console.log("requestGroupKey is found successfullye: " + requestGroupKey); - var parentGroupKey = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); - - // TODO: 预期在这个方法中, 1 从Parent中删除该Group. 2 删除所有该Group下的文件 3 从Project中删除该Group. - myProj.removeGroupFromPbxGroup(requestGroupKey, parentGroupKey); - - fs.writeFileSync(projectPath, myProj.writeSync()); - } -} - -// 删除所有同名的Group. -function testRemoveGroups() { - // 删除 Group的时候不会删除Group下添加的文件,但是重新添加新文件的话工程会自动修正. - myProj.removePbxGroup("11"); - fs.writeFileSync(projectPath, myProj.writeSync()); -} - -function testworkflow() { - console.log("Start update Project " + projectPath + " !"); - - // Step 1: Find parent Group Key according to path. This group must be available in the project. - // Model files and request files will be added into this group. - // TODO: The path should be passed as a param. - var parentGroupKey = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); - console.log("parentGroupKey : " + parentGroupKey); - - // Step 2: Create group if it doesn't exist. - // TODO: 1 Group name and path should be passed as params. 2 If the group already exists then it is uncessary to create and add them. - var modelGroupKey = myProj.findPBXGroupKeyInParentGroup({ path: 'Models'}, parentGroupKey); - if (undefined == modelGroupKey) { - // Step 2: 不存在则新建Group. - modelGroupKey = myProj.pbxCreateGroup("Models", "Models"); - - // Add new created groups into parent group. - // Step 3: 将Group加到parent Group中 - myProj.addToPbxGroup(modelGroupKey, parentGroupKey, {}); - } else { - // Step 3: 如果存在,那么删除文件. - // TODO: 1 File path may not work if group directory doesn't match. 2 Loop directories to find files automatically. - // TODO: 这里不可以直接用removeFile和addFile,一定要区分header和Source. - myProj.removeHeaderFile('HTTestModel.h', {}, modelGroupKey); - myProj.removeSourceFile('HTTestModel.m', {}, modelGroupKey); - } - - myProj.addHeaderFile('HTTestModel.h', {}, modelGroupKey); - myProj.addSourceFile('HTTestModel.m', {}, modelGroupKey); - - - // Step 5: Write back to project. - fs.writeFileSync(projectPath, myProj.writeSync()); - console.log('Project ' + projectPath + " is updated successfully !"); -} - -// 根据完整路径获取到对应的Group. -function findGroupByAbsolutePath() { - var fullPath = "HTJSGeneratorCode/Models"; - var pathList = fullPath.split('/'); - if (pathList.length == 0) { - return; - } - - var root = pathList[0]; - var groupKey = myProj.findPBXGroupKey({ path: root}); - pathList.splice(0, 1); - while (pathList.length > 0 && undefined != groupKey) { - root = pathList[0]; - groupKey = myProj.findPBXGroupKeyInParentGroup({path: root}, groupKey); - pathList.splice(0, 1); - } - - var group = myProj.getPBXGroupByKey(groupKey); +// 找到所有的头文件. +function headerFilesInFilePath(root) { + var res = []; + var files = fs.readdirSync(root); + files.forEach(function(file) { + var extensionFileName = GetExtensionFileName(file); + if ("h" == extensionFileName) { + res.push(file); + } + }); - return groupKey; + return res; } -//findGroupByAbsolutePath(); - -// 遍历文件和目录 -function loopFilesInFilePath(root) { +// 找到所有的源文件 +// TODO: 性能可以改进, 可以一次性找出头文件和源文件,不需要每次都遍历一遍. +function sourceFilesInFilePath(root) { var res = []; var files = fs.readdirSync(root); files.forEach(function(file) { var extensionFileName = GetExtensionFileName(file); - if ("m" == extensionFileName || "h" == extensionFileName) { - console.log(file); + if ("m" == extensionFileName) { + res.push(file); } }); + + return res; } function GetExtensionFileName(pathfilename) @@ -304,97 +211,4 @@ function GetExtensionFileName(pathfilename) var fn = arrpfn[arrpfn.length - 1]; var arrfn = fn.split("."); return arrfn[arrfn.length - 1]; -} - -//loopFilesInFilePath("HTJSGeneratorCode/Models"); - -// 添加文件夹到某个Group. 主要是依赖遍历文件和目录. -//function addFolderToGroup() { -// -//} - -var groupParentPath = process.argv[2]; -var folderParentPath = process.argv[3]; -function testArgv() { - console.log(groupParentPath); - console.log(folderParentPath); -} - -testArgv(); - - - - - -// parsing is async, in a different process -//myProj.parse(function (err) { -// console.log(myProj); -// -// var keyByName = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); -// console.log("keyByName" + keyByName); -// // -// -// myProj.removeFile('Models/HTTestModel.h', {}, keyByName); -// myProj.removeFile('Models/HTTestModel.m', keyByName, {}); -// // -// myProj.addHeaderFile('Models/HTTestModel.h', {}, keyByName); -// myProj.addFile('Models/HTTestModel.m', keyByName, {}); -// // -// -// //myProj.removeFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); -// //myProj.removeFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); -// // -// //myProj.addHeaderFile('Models/HTTestModel.h', {}, 'HTJSGeneratorCode'); -// //myProj.addFile('Models/HTTestModel.m', 'HTJSGeneratorCode', {}); -// -// var modelGroupKey = myProj.pbxCreateGroup("Models", "Models"); -// var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); -// console.log("modelGroupKey: " + modelGroupKey + " requestGroupKey: " + requestGroupKey); -// -// myProj.addToPbxGroup(requestGroupKey, 'HTJSGeneratorCode', {}); -// -// //var requestGroupKey = myProj.findPBXGroupKey( {path: "Requests"}); -// myProj.addSourceFile('HTTestRequest.m', requestGroupKey, {}); -// -// fs.writeFileSync(projectPath, myProj.writeSync()); -// console.log('new project written 111'); -//}); - -// 正式干净的代码 -// -//myProj.parse(function (err) { -// console.log("Start update Project " + projectPath + " !"); -// -// // Step 1: Find parent Group Key according to path. This group must be available in the project. -// // Model files and request files will be added into this group. -// // TODO: The path should be passed as a param. -// var parentGroupKey = myProj.findPBXGroupKey({ path: 'HTJSGeneratorCode'}); -// console.log("parentGroupKey : " + parentGroupKey); -// -// // Step 2: Create group if it doesn't exist. -// // TODO: 1 Group name and path should be passed as params. 2 If the group already exists then it is uncessary to create and add them. -// var modelGroupKey = myProj.pbxCreateGroup("Models", "Models"); -// var requestGroupKey = myProj.pbxCreateGroup("Requests", "Requests"); -// -// // Step 3: Add new created groups into parent group. -// // Note: Currently it is not supported to put models and requests into different parent groups. -// myProj.addToPbxGroup(modelGroupKey, parentGroupKey, {}); -// myProj.addToPbxGroup(requestGroupKey, parentGroupKey, {}); -// -// // Step 4: Remove files from Group and Add files into Group. -// // TODO: 1 File path may not work if group directory doesn't match. 2 Loop directories to find files automatically. -// myProj.removeFile('Models/HTTestModel.h', {}, modelGroupKey); -// myProj.removeFile('Models/HTTestModel.m', modelGroupKey, {}); -// myProj.addHeaderFile('Models/HTTestModel.h', {}, modelGroupKey); -// myProj.addSourceFile('Models/HTTestModel.m', {}, modelGroupKey); -// -// myProj.removeFile('Requests/HTTestRequest.h', {}, requestGroupKey); -// myProj.removeFile('Requests/HTTestRequest.m', requestGroupKey, {}); -// myProj.addHeaderFile('Requests/HTTestRequest.h', {}, requestGroupKey); -// myProj.addSourceFile('Requests/HTTestRequest.m', {}, requestGroupKey); -// -// -// // Step 5: Write back to project. -// fs.writeFileSync(projectPath, myProj.writeSync()); -// console.log('Project ' + projectPath + " is updated successfully !"); -//}); \ No newline at end of file +} \ No newline at end of file From f6c9fd3835afe0ea3a2b3d04ff61adb3fa505ead Mon Sep 17 00:00:00 2001 From: Wangliping Date: Fri, 18 Dec 2015 10:06:11 +0800 Subject: [PATCH 19/28] =?UTF-8?q?UpdateModels.js=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 42 +++++++++--------- .../project.pbxproj | 26 ++++++++--- .../UserInterfaceState.xcuserstate | Bin 20540 -> 22320 bytes .../HTJSGeneratorCode/ViewController.m | 5 +++ test/HTJSGeneratorCode/UpdateModels.js | 4 +- 5 files changed, 49 insertions(+), 28 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 3a4814c..c0b0564 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,7 +2,7 @@ - + @@ -27,8 +27,8 @@ - - + + @@ -37,8 +37,8 @@ - - + + @@ -775,22 +775,6 @@ - - - - - - - - - - - - - - - - @@ -847,5 +831,21 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj index 3e4ff16..6ef287e 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -15,6 +15,8 @@ E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */; }; E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */; }; 0814236A90D949D1A2F9431E /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = EAB0CDBFC5304BDFA2C7F036 /* HTTestModel.m */; }; + 9380DBB4129A4016A5BE790C /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6414BF7BE8F84E50AB42AB8A /* HTTestModel.m */; }; + 928D39821EC646D798A3E5B6 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = F8C416DCED984BED9D308117 /* HTTestRequest.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -51,8 +53,10 @@ E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2E11668129ED41A4B83A542A /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - EAB0CDBFC5304BDFA2C7F036 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + C42FA16D43EE40A984D61CA5 /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 6414BF7BE8F84E50AB42AB8A /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + 0CB2E75FADAD425CBE1ABD00 /* HTTestRequest.h */ = {isa = PBXFileReference; name = "HTTestRequest.h"; path = "HTTestRequest.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + F8C416DCED984BED9D308117 /* HTTestRequest.m */ = {isa = PBXFileReference; name = "HTTestRequest.m"; path = "HTTestRequest.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,8 +87,8 @@ BA604265FA2841C1B310F4EB /* Models */ = { isa = PBXGroup; children = ( - 2E11668129ED41A4B83A542A /* HTTestModel.h */, - EAB0CDBFC5304BDFA2C7F036 /* HTTestModel.m */, + C42FA16D43EE40A984D61CA5 /* HTTestModel.h */, + 6414BF7BE8F84E50AB42AB8A /* HTTestModel.m */, ); path = Models; sourceTree = ""; @@ -122,6 +126,7 @@ E6AFD0171C1E99040027F340 /* Info.plist */, E6AFD0061C1E99040027F340 /* Supporting Files */, BA604265FA2841C1B310F4EB /* Models */, + ED6D750F3C0B43478EDB8BE5 /* Requests */, ); path = HTJSGeneratorCode; sourceTree = ""; @@ -152,6 +157,16 @@ path = HTJSGeneratorCodeUITests; sourceTree = ""; }; + ED6D750F3C0B43478EDB8BE5 /* Requests */ = { + isa = PBXGroup; + children = ( + 0CB2E75FADAD425CBE1ABD00 /* HTTestRequest.h */, + F8C416DCED984BED9D308117 /* HTTestRequest.m */, + ); + name = Requests; + path = Requests; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -288,7 +303,8 @@ E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */, E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */, E6AFD0081C1E99040027F340 /* main.m in Sources */, - 0814236A90D949D1A2F9431E /* HTTestModel.m in Sources */, + 9380DBB4129A4016A5BE790C /* HTTestModel.m in Sources */, + 928D39821EC646D798A3E5B6 /* HTTestRequest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index f9600efa420a71e9cc96ec011473caf5516814ef..bff612383410244c1bc648f561777edd78ed9f37 100644 GIT binary patch literal 22320 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%0D2SK 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 diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode/ViewController.m b/test/HTJSGeneratorCode/HTJSGeneratorCode/ViewController.m index 3150340..0bbe8c6 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode/ViewController.m +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/ViewController.m @@ -7,6 +7,8 @@ // #import "ViewController.h" +#import "HTTestModel.h" +#import "HTTestRequest.h" @interface ViewController () @@ -17,6 +19,9 @@ @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. + + HTTestModel *model = [[HTTestModel alloc] init]; + NSLog(@"%@", model); } - (void)didReceiveMemoryWarning { diff --git a/test/HTJSGeneratorCode/UpdateModels.js b/test/HTJSGeneratorCode/UpdateModels.js index 7a3bc3c..b7483d9 100644 --- a/test/HTJSGeneratorCode/UpdateModels.js +++ b/test/HTJSGeneratorCode/UpdateModels.js @@ -27,7 +27,7 @@ function updateCode () { // 固定添加Models和Requests, 不需要参数配置 var autoGroupNames = ["Models", "Requests"]; - autoGroupNames.ForEach(function (groupName){ + autoGroupNames.forEach(function (groupName){ // 获取parent Group Key 和 要处理的Group Key var absoluteGroupPath = groupParentPath + "/" + groupName; var parentGroupKey = findGroupByAbsolutePath(groupParentPath); @@ -55,7 +55,7 @@ function updateCode () { }); // 将源文件添加到group中 - sourceFiles.ForEach(function(sourceFile) { + sourceFiles.forEach(function(sourceFile) { myProj.addSourceFile(sourceFile, {}, groupKey); }); }); From 4023297ca4d7fa689ee874e1db4c08e5d9ea094d Mon Sep 17 00:00:00 2001 From: Wangliping Date: Fri, 18 Dec 2015 10:27:10 +0800 Subject: [PATCH 20/28] =?UTF-8?q?Fix=20issue:=20=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E4=BB=8EBuild=20File=20Section=E4=B8=AD=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 114 ++++++++---------- .../project.pbxproj | 25 ++-- .../UserInterfaceState.xcuserstate | Bin 22320 -> 21967 bytes test/HTJSGeneratorCode/Integrate.js | 16 ++- test/HTJSGeneratorCode/UpdateModels.js | 8 +- 5 files changed, 79 insertions(+), 84 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index c0b0564..60ea57d 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,7 +2,10 @@ + + + @@ -27,8 +30,8 @@ - - + + @@ -37,8 +40,8 @@ - - + + @@ -98,7 +101,7 @@ - + @@ -389,24 +392,24 @@ - + + - + - + - + - @@ -521,34 +524,9 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 221 - - - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 216 - - - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 226 - - - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 167 - - - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 184 + 185 - - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 173 - file://$PROJECT_DIR$/lib/pbxProject.js 936 @@ -556,22 +534,22 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 294 + 298 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 295 + 299 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 300 + 304 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 293 + 297 @@ -581,22 +559,12 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 238 - - - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 207 + 209 file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 242 - - - file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 206 + 208 @@ -606,7 +574,7 @@ file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js - 189 + 191 @@ -639,8 +607,28 @@ 156 + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 179 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 236 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 205 + + + file://$PROJECT_DIR$/test/HTJSGeneratorCode/Integrate.js + 233 + - @@ -772,6 +761,7 @@ + @@ -815,34 +805,34 @@ - + - + - + - + - - + + - - + + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj index 6ef287e..4f3ef1e 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -14,9 +14,8 @@ E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */; }; E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */; }; E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */; }; - 0814236A90D949D1A2F9431E /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = EAB0CDBFC5304BDFA2C7F036 /* HTTestModel.m */; }; - 9380DBB4129A4016A5BE790C /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6414BF7BE8F84E50AB42AB8A /* HTTestModel.m */; }; - 928D39821EC646D798A3E5B6 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = F8C416DCED984BED9D308117 /* HTTestRequest.m */; }; + 90155AE588FD44C5BE9F3011 /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C6CBA43383AD4A0B9D9B0C96 /* HTTestModel.m */; }; + BBCE68BC3DBE4EF38BC54407 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 749693318F8143D3909212FF /* HTTestRequest.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -53,10 +52,10 @@ E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C42FA16D43EE40A984D61CA5 /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - 6414BF7BE8F84E50AB42AB8A /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; - 0CB2E75FADAD425CBE1ABD00 /* HTTestRequest.h */ = {isa = PBXFileReference; name = "HTTestRequest.h"; path = "HTTestRequest.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - F8C416DCED984BED9D308117 /* HTTestRequest.m */ = {isa = PBXFileReference; name = "HTTestRequest.m"; path = "HTTestRequest.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + 1ED6EDDC017347DCAFE57E7F /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + C6CBA43383AD4A0B9D9B0C96 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + 6894A91516E448ECB2614783 /* HTTestRequest.h */ = {isa = PBXFileReference; name = "HTTestRequest.h"; path = "HTTestRequest.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 749693318F8143D3909212FF /* HTTestRequest.m */ = {isa = PBXFileReference; name = "HTTestRequest.m"; path = "HTTestRequest.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -87,8 +86,8 @@ BA604265FA2841C1B310F4EB /* Models */ = { isa = PBXGroup; children = ( - C42FA16D43EE40A984D61CA5 /* HTTestModel.h */, - 6414BF7BE8F84E50AB42AB8A /* HTTestModel.m */, + 1ED6EDDC017347DCAFE57E7F /* HTTestModel.h */, + C6CBA43383AD4A0B9D9B0C96 /* HTTestModel.m */, ); path = Models; sourceTree = ""; @@ -160,8 +159,8 @@ ED6D750F3C0B43478EDB8BE5 /* Requests */ = { isa = PBXGroup; children = ( - 0CB2E75FADAD425CBE1ABD00 /* HTTestRequest.h */, - F8C416DCED984BED9D308117 /* HTTestRequest.m */, + 6894A91516E448ECB2614783 /* HTTestRequest.h */, + 749693318F8143D3909212FF /* HTTestRequest.m */, ); name = Requests; path = Requests; @@ -303,8 +302,8 @@ E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */, E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */, E6AFD0081C1E99040027F340 /* main.m in Sources */, - 9380DBB4129A4016A5BE790C /* HTTestModel.m in Sources */, - 928D39821EC646D798A3E5B6 /* HTTestRequest.m in Sources */, + 90155AE588FD44C5BE9F3011 /* HTTestModel.m in Sources */, + BBCE68BC3DBE4EF38BC54407 /* HTTestRequest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index bff612383410244c1bc648f561777edd78ed9f37..ff1b8f011ea451d06ccd681b5d31d1c38543456c 100644 GIT binary patch delta 10562 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 Dfq0VX diff --git a/test/HTJSGeneratorCode/Integrate.js b/test/HTJSGeneratorCode/Integrate.js index 133ecea..3014aef 100644 --- a/test/HTJSGeneratorCode/Integrate.js +++ b/test/HTJSGeneratorCode/Integrate.js @@ -182,12 +182,14 @@ function removeFromPbxBuildFileSectionWithKey (fileRef) { for (uuid in myProj.pbxBuildFileSection()) { var buildFile = myProj.pbxBuildFileSection()[uuid]; if (buildFile.fileRef == fileRef) { - delete buildFile; + // TODO: delete buildFile没有从这个字典中真正删除这个文件. + //delete buildFile; + delete myProj.pbxBuildFileSection()[uuid]; buildFileUUID = uuid; break; } } - var commentKey = f("%s_comment", fileRef); + var commentKey = f("%s_comment", fileRef); if (myProj.pbxBuildFileSection()[commentKey] != undefined) { delete myProj.pbxBuildFileSection()[commentKey]; @@ -242,10 +244,10 @@ function removeFilesInGroup() { // 删除groupChildren. groupChildren.splice(0, groupChildren.length); - //var length = groupChildren.length; - //groupChildren = group.children; - //length = groupChildren.length; - //console.log(length); + var length = groupChildren.length; + groupChildren = group.children; + length = groupChildren.length; + console.log(length); } } @@ -284,6 +286,8 @@ function removeFilesInGroup() { //testRemoveSubGroup(); //testworkflow(); //removeFilesInGroup(); +removeFromPbxBuildFileSectionWithKey('C91E3A4AF2304AB99F4825DB'); +fs.writeFileSync(projectPath, myProj.writeSync()); diff --git a/test/HTJSGeneratorCode/UpdateModels.js b/test/HTJSGeneratorCode/UpdateModels.js index b7483d9..e3b0dc3 100644 --- a/test/HTJSGeneratorCode/UpdateModels.js +++ b/test/HTJSGeneratorCode/UpdateModels.js @@ -112,18 +112,20 @@ function removeFromPbxBuildFileSectionWithKey (fileRef) { for (uuid in myProj.pbxBuildFileSection()) { var buildFile = myProj.pbxBuildFileSection()[uuid]; if (buildFile.fileRef == fileRef) { - delete buildFile; + // TODO: delete buildFile没有从这个字典中真正删除这个文件. + //delete buildFile; + delete myProj.pbxBuildFileSection()[uuid]; buildFileUUID = uuid; break; } } - var commentKey = f("%s_comment", fileRef); + var commentKey = f("%s_comment", fileRef); if (myProj.pbxBuildFileSection()[commentKey] != undefined) { delete myProj.pbxBuildFileSection()[commentKey]; } - return uuid; + return buildFileUUID; } // Note: 这里只取了firstTarget, 理论上所有的Target都需要获取. 这里所有的参数都是fileRef的uuid. From 5540fed8aeeda0a47711c2c08dae0300c58e4091 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Fri, 18 Dec 2015 10:45:24 +0800 Subject: [PATCH 21/28] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 105 +++++++----------- lib/pbxProject.js | 69 +----------- .../project.pbxproj | 24 ++-- .../UserInterfaceState.xcuserstate | Bin 21967 -> 21742 bytes test/HTJSGeneratorCode/UpdateModels.js | 14 ++- 5 files changed, 66 insertions(+), 146 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 60ea57d..d24e5be 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -3,9 +3,8 @@ - + - @@ -40,8 +39,8 @@ - - + + @@ -77,31 +76,11 @@ - - - - - - - - - - - - - - - - - - - - - - + + @@ -127,9 +106,9 @@ @@ -397,12 +376,12 @@ - + - + @@ -429,32 +408,32 @@ file://$PROJECT_DIR$/lib/pbxProject.js - 1676 + 1647 file://$PROJECT_DIR$/lib/pbxProject.js - 453 + 450 file://$PROJECT_DIR$/lib/pbxProject.js - 1637 + 1625 file://$PROJECT_DIR$/lib/pbxProject.js - 1888 + 1857 file://$PROJECT_DIR$/lib/pbxProject.js - 1896 + 1865 file://$PROJECT_DIR$/lib/pbxProject.js - 1902 + 1871 @@ -474,47 +453,47 @@ file://$PROJECT_DIR$/lib/pbxProject.js - 2016 + 1985 file://$PROJECT_DIR$/lib/pbxProject.js - 2019 + 1988 file://$PROJECT_DIR$/lib/pbxProject.js - 2048 + 2017 file://$PROJECT_DIR$/lib/pbxProject.js - 1894 + 1863 file://$PROJECT_DIR$/lib/pbxProject.js - 1873 + 1842 file://$PROJECT_DIR$/lib/pbxProject.js - 2089 + 2058 file://$PROJECT_DIR$/lib/pbxProject.js - 1708 + 1679 file://$PROJECT_DIR$/lib/pbxProject.js - 2119 + 2088 file://$PROJECT_DIR$/lib/pbxProject.js - 1742 + 1713 @@ -529,7 +508,7 @@ file://$PROJECT_DIR$/lib/pbxProject.js - 936 + 933 @@ -554,7 +533,7 @@ file://$PROJECT_DIR$/lib/pbxProject.js - 182 + 179 @@ -569,7 +548,7 @@ file://$PROJECT_DIR$/lib/pbxProject.js - 609 + 606 @@ -781,58 +760,58 @@ - + - + - + - - + + - + - + - - + + - + - + - + - - + + - - + + diff --git a/lib/pbxProject.js b/lib/pbxProject.js index bf076dd..94085ed 100644 --- a/lib/pbxProject.js +++ b/lib/pbxProject.js @@ -142,9 +142,6 @@ pbxProject.prototype.removeProductFile = function(path, opt) { */ pbxProject.prototype.addSourceFile = function (path, opt, group) { var file; - - console.log("addSourceFile is called" + "path:" + path + "group: " + group); - if (group) { file = this.addFile(path, group, opt); } @@ -1601,14 +1598,9 @@ pbxProject.prototype.getFirstTarget = function() { /*** NEW ***/ pbxProject.prototype.addToPbxGroup = function (file, groupKey) { - var group = this.getPBXGroupByKey(groupKey); - //var group = this.getPBXGroupByPath(groupKey); - //console.log("group: " + group + " file " + file + " groupKey " + groupKey); + var group = this.getPBXGroupByKey(groupKey); if (group && group.children !== undefined) { - console.log("group.children is valid"); if (typeof file === 'string') { - console.log("group.children is valid 11"); - //Group Key var childGroup = { value:file, @@ -1619,12 +1611,8 @@ pbxProject.prototype.addToPbxGroup = function (file, groupKey) { } else { //File Object - console.log("group.children is valid 12"); - group.children.push(pbxGroupChild(file)); } - } else { - console.log("group.children is invalid"); } } @@ -1643,36 +1631,19 @@ pbxProject.prototype.removeFromPbxGroup = function (file, groupKey) { } pbxProject.prototype.getPBXGroupByPath = function(path) { - console.log("begin getPBXGroupByPath " + path); - var groups = this.hash.project.objects['PBXGroup']; for (var key in groups) { var group = groups[key]; if (group.path === path) { - console.log("groupInfo", group, "path: ", group.path, "name: ", group.name); - console.log("finish getPBXGroupByPath successful" + path); return group; } } - console.log("finish getPBXGroupByPath failed" + path); return undefined; }; pbxProject.prototype.getPBXGroupByKey = function(key) { - console.log("begin getPBXGroupByKey " + key); - - var groups = this.hash.project.objects['PBXGroup']; - for (var keyIter in groups) { - var group = groups[keyIter]; - console.log("keyInfo", keyIter, keyIter.path, keyIter.name); - - console.log("groupInfo", group, "path: ", group.path, "name: ", group.name); - } - - console.log("finish getPBXGroupByKey " + key); - var group = this.hash.project.objects['PBXGroup'][key]; return group; }; @@ -1744,12 +1715,10 @@ pbxProject.prototype.addFile = function (path, group, opt) { // null is better for early errors if (this.hasFile(file.path)) { - console.log("addSourceFile failed" + "path:" + file.path + " group: " + group); return null; } file.fileRef = this.generateUuid(); - console.log("file.fileRef" + file.fileRef); this.addToPbxFileReferenceSection(file); // PBXFileReference this.addToPbxGroup(file, group); // PBXGroup @@ -2120,40 +2089,4 @@ pbxProject.prototype.findPBXGroupInParentGroup = function(criteria, parentGroupK return target; } -//var group = this.hash.project.objects['PBXGroup'][key]; -//return group; - -// -//pbxProject.prototype.removeFromPbxGroup = function (file, groupKey) { -// var group = this.getPBXGroupByKey(groupKey); -// if (group) { -// var groupChildren = group.children, i; -// for(i in groupChildren) { -// if(pbxGroupChild(file).value == groupChildren[i].value && -// pbxGroupChild(file).comment == groupChildren[i].comment) { -// groupChildren.splice(i, 1); -// break; -// } -// } -// } -//} -// -//pbxProject.prototype.getPBXGroupByPath = function(path) { -// console.log("begin getPBXGroupByPath " + path); -// -// var groups = this.hash.project.objects['PBXGroup']; -// for (var key in groups) { -// var group = groups[key]; -// if (group.path === path) { -// console.log("groupInfo", group, "path: ", group.path, "name: ", group.name); -// console.log("finish getPBXGroupByPath successful" + path); -// return group; -// } -// } -// -// console.log("finish getPBXGroupByPath failed" + path); -// return undefined; -//}; - - module.exports = pbxProject; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj index 4f3ef1e..83a3c48 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -14,8 +14,8 @@ E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */; }; E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */; }; E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */; }; - 90155AE588FD44C5BE9F3011 /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C6CBA43383AD4A0B9D9B0C96 /* HTTestModel.m */; }; - BBCE68BC3DBE4EF38BC54407 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 749693318F8143D3909212FF /* HTTestRequest.m */; }; + 3836765A1EED45C7B5445BDE /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = F4AD1BBCB12146769D187B83 /* HTTestModel.m */; }; + 8A23F2F04F2D4DEF8C9EC596 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B489FA6E09484BBEA6488391 /* HTTestRequest.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -52,10 +52,10 @@ E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1ED6EDDC017347DCAFE57E7F /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - C6CBA43383AD4A0B9D9B0C96 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; - 6894A91516E448ECB2614783 /* HTTestRequest.h */ = {isa = PBXFileReference; name = "HTTestRequest.h"; path = "HTTestRequest.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - 749693318F8143D3909212FF /* HTTestRequest.m */ = {isa = PBXFileReference; name = "HTTestRequest.m"; path = "HTTestRequest.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + 2E589CFF231B4E6B9C81A938 /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + F4AD1BBCB12146769D187B83 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + 3BD09DCC13244DC0A68BFE0A /* HTTestRequest.h */ = {isa = PBXFileReference; name = "HTTestRequest.h"; path = "HTTestRequest.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + B489FA6E09484BBEA6488391 /* HTTestRequest.m */ = {isa = PBXFileReference; name = "HTTestRequest.m"; path = "HTTestRequest.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -86,8 +86,8 @@ BA604265FA2841C1B310F4EB /* Models */ = { isa = PBXGroup; children = ( - 1ED6EDDC017347DCAFE57E7F /* HTTestModel.h */, - C6CBA43383AD4A0B9D9B0C96 /* HTTestModel.m */, + 2E589CFF231B4E6B9C81A938 /* HTTestModel.h */, + F4AD1BBCB12146769D187B83 /* HTTestModel.m */, ); path = Models; sourceTree = ""; @@ -159,8 +159,8 @@ ED6D750F3C0B43478EDB8BE5 /* Requests */ = { isa = PBXGroup; children = ( - 6894A91516E448ECB2614783 /* HTTestRequest.h */, - 749693318F8143D3909212FF /* HTTestRequest.m */, + 3BD09DCC13244DC0A68BFE0A /* HTTestRequest.h */, + B489FA6E09484BBEA6488391 /* HTTestRequest.m */, ); name = Requests; path = Requests; @@ -302,8 +302,8 @@ E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */, E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */, E6AFD0081C1E99040027F340 /* main.m in Sources */, - 90155AE588FD44C5BE9F3011 /* HTTestModel.m in Sources */, - BBCE68BC3DBE4EF38BC54407 /* HTTestRequest.m in Sources */, + 3836765A1EED45C7B5445BDE /* HTTestModel.m in Sources */, + 8A23F2F04F2D4DEF8C9EC596 /* HTTestRequest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index ff1b8f011ea451d06ccd681b5d31d1c38543456c..f599dae3b2d1f37d81232c3e4ab81041fa3fbe7d 100644 GIT binary patch delta 9646 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 GIOl((JAH2e diff --git a/test/HTJSGeneratorCode/UpdateModels.js b/test/HTJSGeneratorCode/UpdateModels.js index e3b0dc3..5473bc8 100644 --- a/test/HTJSGeneratorCode/UpdateModels.js +++ b/test/HTJSGeneratorCode/UpdateModels.js @@ -22,18 +22,25 @@ updateCode(); function updateCode () { if (undefined == projectName || undefined == groupParentPath || undefined == folderParentPath || undefined == myProj) { + console.log("Please correct parameters, the command is like \r\n node UpdateModels.js projectName groupParentPath folderParentPath, please specify your own projectName, parent group path and pareng folder path"); return; } + // TODO: 现在暂时不支持更换路径,即之前要删除的路径和后面要添加的路径不相同的Case. + console.log("Begin to update project " + projectName + ", Models and Requests will be added under group " + groupParentPath); + // 固定添加Models和Requests, 不需要参数配置 var autoGroupNames = ["Models", "Requests"]; autoGroupNames.forEach(function (groupName){ + console.log("Begin to check folder " + groupName); + // 获取parent Group Key 和 要处理的Group Key var absoluteGroupPath = groupParentPath + "/" + groupName; var parentGroupKey = findGroupByAbsolutePath(groupParentPath); var groupKey = findGroupByAbsolutePath(absoluteGroupPath); if (undefined == groupKey) { // group不存在, 新建Group. GroupName与Path相同. + console.log("Group " + groupName + " does not exist, create group " + groupName + " under group " + groupParentPath); groupKey = myProj.pbxCreateGroup(groupName, groupName); // Add new created groups into parent group. @@ -41,6 +48,7 @@ function updateCode () { myProj.addToPbxGroup(groupKey, parentGroupKey, {}); } else { // group存在, 删除其中的所有文件. + console.log("Group " + groupName + " already exists, remove all files in this group first."); removeFilesInGroup(groupName); } @@ -58,6 +66,8 @@ function updateCode () { sourceFiles.forEach(function(sourceFile) { myProj.addSourceFile(sourceFile, {}, groupKey); }); + + console.log("Add Source Files and Header Files from Path " + folderPath + " to group " + absoluteGroupPath + " successfully"); }); @@ -82,8 +92,8 @@ function findGroupByAbsolutePath(fullPath) { pathList.splice(0, 1); } + // TODO: 下面的代码只用校验是否能够取到正确的Group. if (undefined != groupKey) { - console.log("Find group by absolute path " + fullPath); var group = myProj.getPBXGroupByKey(groupKey); } @@ -167,8 +177,6 @@ function removeFilesInGroup(groupName) { if (undefined != buildFileUUID) { removeFromPbxSourcesBuildPhaseWithKey(buildFileUUID); } - - console.log("finish one file"); } // 删除groupChildren. From be230f688d8ef3c1678da5674411848d7db2eaeb Mon Sep 17 00:00:00 2001 From: Wangliping Date: Thu, 24 Dec 2015 11:38:37 +0800 Subject: [PATCH 22/28] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E6=97=A0=E7=94=A8=E7=9A=84=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 142 +++++++++++++----- lib/pbxProject.js | 16 -- .../project.pbxproj | 28 +++- .../UserInterfaceState.xcuserstate | Bin 21742 -> 24998 bytes .../Controllers/Test/TestViewController.h | 13 ++ .../Controllers/Test/TestViewController.m | 13 ++ 6 files changed, 149 insertions(+), 63 deletions(-) create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/Controllers/Test/TestViewController.h create mode 100644 test/HTJSGeneratorCode/HTJSGeneratorCode/Controllers/Test/TestViewController.m diff --git a/.idea/workspace.xml b/.idea/workspace.xml index d24e5be..aca8cf1 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,10 +2,11 @@ + + - + - @@ -29,7 +30,7 @@ - + @@ -39,8 +40,8 @@ - - + + @@ -79,8 +80,8 @@ - - + + @@ -178,8 +179,8 @@ - + @@ -371,25 +372,25 @@ - + - - - + - + + + @@ -616,6 +617,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -725,7 +790,6 @@ - @@ -740,78 +804,76 @@ - - + - + - + - - + + - + - - - + + - + - - + + - + - - + + - + - - + + - + - + - + - - + + - - + + diff --git a/lib/pbxProject.js b/lib/pbxProject.js index 94085ed..f993b86 100644 --- a/lib/pbxProject.js +++ b/lib/pbxProject.js @@ -1824,21 +1824,6 @@ pbxProject.prototype.addDataModelDocument = function(filePath, group, opt) { } // New Interfaces added by LWANG. -//pbxProject.prototype.removePbxGroup = function (groupName) { -// var section = this.hash.project.objects['PBXGroup'], -// key, itemKey; -// -// for (key in section) { -// // only look for comments -// if (!COMMENT_KEY.test(key)) continue; -// -// if (section[key] == groupName) { -// itemKey = key.split(COMMENT_KEY)[0]; -// delete section[itemKey]; -// } -// } -//} - pbxProject.prototype.removePbxGroupByKey = function (groupKey) { var section = this.hash.project.objects['PBXGroup'], key, itemKey; @@ -1870,7 +1855,6 @@ pbxProject.prototype.removeGroupFromPbxGroup = function (removeGroupKey, groupKe } delete removeGroup; - //this.removePbxGroupByKey(removeGroupKey); } pbxProject.prototype.clearGroup = function (group) { diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj index 83a3c48..ff5ec7f 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -5,7 +5,10 @@ }; objectVersion = 46; objects = { + /* Begin PBXBuildFile section */ + 3836765A1EED45C7B5445BDE /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = F4AD1BBCB12146769D187B83 /* HTTestModel.m */; }; + 8A23F2F04F2D4DEF8C9EC596 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B489FA6E09484BBEA6488391 /* HTTestRequest.m */; }; E6AFD0081C1E99040027F340 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0071C1E99040027F340 /* main.m */; }; E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00A1C1E99040027F340 /* AppDelegate.m */; }; E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00D1C1E99040027F340 /* ViewController.m */; }; @@ -14,8 +17,7 @@ E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */; }; E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */; }; E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */; }; - 3836765A1EED45C7B5445BDE /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = F4AD1BBCB12146769D187B83 /* HTTestModel.m */; }; - 8A23F2F04F2D4DEF8C9EC596 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B489FA6E09484BBEA6488391 /* HTTestRequest.m */; }; + E6B03C011C27F53800450E9E /* TestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E6B03C001C27F53800450E9E /* TestViewController.m */; settings = {ASSET_TAGS = (); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -36,6 +38,9 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 2E589CFF231B4E6B9C81A938 /* HTTestModel.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; path = HTTestModel.h; sourceTree = ""; }; + 3BD09DCC13244DC0A68BFE0A /* HTTestRequest.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; path = HTTestRequest.h; sourceTree = ""; }; + B489FA6E09484BBEA6488391 /* HTTestRequest.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = HTTestRequest.m; sourceTree = ""; }; E6AFD0031C1E99040027F340 /* HTJSGeneratorCode.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HTJSGeneratorCode.app; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD0071C1E99040027F340 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; E6AFD0091C1E99040027F340 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -52,10 +57,9 @@ E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2E589CFF231B4E6B9C81A938 /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - F4AD1BBCB12146769D187B83 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; - 3BD09DCC13244DC0A68BFE0A /* HTTestRequest.h */ = {isa = PBXFileReference; name = "HTTestRequest.h"; path = "HTTestRequest.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - B489FA6E09484BBEA6488391 /* HTTestRequest.m */ = {isa = PBXFileReference; name = "HTTestRequest.m"; path = "HTTestRequest.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + E6B03BFF1C27F53800450E9E /* TestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestViewController.h; path = ../Controllers/Test/TestViewController.h; sourceTree = ""; }; + E6B03C001C27F53800450E9E /* TestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TestViewController.m; path = ../Controllers/Test/TestViewController.m; sourceTree = ""; }; + F4AD1BBCB12146769D187B83 /* HTTestModel.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = HTTestModel.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -86,6 +90,8 @@ BA604265FA2841C1B310F4EB /* Models */ = { isa = PBXGroup; children = ( + E6B03BFF1C27F53800450E9E /* TestViewController.h */, + E6B03C001C27F53800450E9E /* TestViewController.m */, 2E589CFF231B4E6B9C81A938 /* HTTestModel.h */, F4AD1BBCB12146769D187B83 /* HTTestModel.m */, ); @@ -115,6 +121,7 @@ E6AFD0051C1E99040027F340 /* HTJSGeneratorCode */ = { isa = PBXGroup; children = ( + E6B03C021C27F57600450E9E /* hehe */, E6AFD0091C1E99040027F340 /* AppDelegate.h */, E6AFD00A1C1E99040027F340 /* AppDelegate.m */, E6AFD00C1C1E99040027F340 /* ViewController.h */, @@ -156,13 +163,19 @@ path = HTJSGeneratorCodeUITests; sourceTree = ""; }; + E6B03C021C27F57600450E9E /* hehe */ = { + isa = PBXGroup; + children = ( + ); + name = hehe; + sourceTree = ""; + }; ED6D750F3C0B43478EDB8BE5 /* Requests */ = { isa = PBXGroup; children = ( 3BD09DCC13244DC0A68BFE0A /* HTTestRequest.h */, B489FA6E09484BBEA6488391 /* HTTestRequest.m */, ); - name = Requests; path = Requests; sourceTree = ""; }; @@ -299,6 +312,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E6B03C011C27F53800450E9E /* TestViewController.m in Sources */, E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */, E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */, E6AFD0081C1E99040027F340 /* main.m in Sources */, diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index f599dae3b2d1f37d81232c3e4ab81041fa3fbe7d..09f04f9b14d0d1b91052b3fa3223de2bfa3774ef 100644 GIT binary patch literal 24998 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 literal 21742 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 + +@interface TestViewController : UIViewController + +@end diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode/Controllers/Test/TestViewController.m b/test/HTJSGeneratorCode/HTJSGeneratorCode/Controllers/Test/TestViewController.m new file mode 100644 index 0000000..3e20ad5 --- /dev/null +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode/Controllers/Test/TestViewController.m @@ -0,0 +1,13 @@ +// +// TestViewController.m +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/21. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import "TestViewController.h" + +@implementation TestViewController + +@end From 7e8895242acd6b71aa2a0a33d649afb11a6cce33 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Thu, 24 Dec 2015 12:14:08 +0800 Subject: [PATCH 23/28] =?UTF-8?q?=E6=B7=BB=E5=8A=A0UpdateNEIProject.js?= =?UTF-8?q?=EF=BC=8C=E4=BE=9D=E8=B5=96=E5=8E=9F=E5=A7=8B=E7=9A=84node-xcod?= =?UTF-8?q?e=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 31 +- .../UserInterfaceState.xcuserstate | Bin 24998 -> 24895 bytes test/HTJSGeneratorCode/UpdateNEIProject.js | 451 ++++++++++++++++++ 3 files changed, 463 insertions(+), 19 deletions(-) create mode 100644 test/HTJSGeneratorCode/UpdateNEIProject.js diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj index ff5ec7f..062f61c 100644 --- a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -5,10 +5,7 @@ }; objectVersion = 46; objects = { - /* Begin PBXBuildFile section */ - 3836765A1EED45C7B5445BDE /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = F4AD1BBCB12146769D187B83 /* HTTestModel.m */; }; - 8A23F2F04F2D4DEF8C9EC596 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B489FA6E09484BBEA6488391 /* HTTestRequest.m */; }; E6AFD0081C1E99040027F340 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0071C1E99040027F340 /* main.m */; }; E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00A1C1E99040027F340 /* AppDelegate.m */; }; E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00D1C1E99040027F340 /* ViewController.m */; }; @@ -17,7 +14,8 @@ E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */; }; E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */; }; E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */; }; - E6B03C011C27F53800450E9E /* TestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E6B03C001C27F53800450E9E /* TestViewController.m */; settings = {ASSET_TAGS = (); }; }; + 952203A8DF8C47769600886C /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C8C17D02BCB34BF1AD38DD5A /* HTTestModel.m */; }; + F72B6E5C0A744352817E3775 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 6266018F1506415BB379C5F0 /* HTTestRequest.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -38,9 +36,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 2E589CFF231B4E6B9C81A938 /* HTTestModel.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; path = HTTestModel.h; sourceTree = ""; }; - 3BD09DCC13244DC0A68BFE0A /* HTTestRequest.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; path = HTTestRequest.h; sourceTree = ""; }; - B489FA6E09484BBEA6488391 /* HTTestRequest.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = HTTestRequest.m; sourceTree = ""; }; E6AFD0031C1E99040027F340 /* HTJSGeneratorCode.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HTJSGeneratorCode.app; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD0071C1E99040027F340 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; E6AFD0091C1E99040027F340 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -57,9 +52,10 @@ E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E6B03BFF1C27F53800450E9E /* TestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestViewController.h; path = ../Controllers/Test/TestViewController.h; sourceTree = ""; }; - E6B03C001C27F53800450E9E /* TestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TestViewController.m; path = ../Controllers/Test/TestViewController.m; sourceTree = ""; }; - F4AD1BBCB12146769D187B83 /* HTTestModel.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = HTTestModel.m; sourceTree = ""; }; + 6EA50EBEEF0E47E2B29194BB /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + C8C17D02BCB34BF1AD38DD5A /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + E8335E76858442108FD3A1B9 /* HTTestRequest.h */ = {isa = PBXFileReference; name = "HTTestRequest.h"; path = "HTTestRequest.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 6266018F1506415BB379C5F0 /* HTTestRequest.m */ = {isa = PBXFileReference; name = "HTTestRequest.m"; path = "HTTestRequest.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -90,10 +86,8 @@ BA604265FA2841C1B310F4EB /* Models */ = { isa = PBXGroup; children = ( - E6B03BFF1C27F53800450E9E /* TestViewController.h */, - E6B03C001C27F53800450E9E /* TestViewController.m */, - 2E589CFF231B4E6B9C81A938 /* HTTestModel.h */, - F4AD1BBCB12146769D187B83 /* HTTestModel.m */, + 6EA50EBEEF0E47E2B29194BB /* HTTestModel.h */, + C8C17D02BCB34BF1AD38DD5A /* HTTestModel.m */, ); path = Models; sourceTree = ""; @@ -173,8 +167,8 @@ ED6D750F3C0B43478EDB8BE5 /* Requests */ = { isa = PBXGroup; children = ( - 3BD09DCC13244DC0A68BFE0A /* HTTestRequest.h */, - B489FA6E09484BBEA6488391 /* HTTestRequest.m */, + E8335E76858442108FD3A1B9 /* HTTestRequest.h */, + 6266018F1506415BB379C5F0 /* HTTestRequest.m */, ); path = Requests; sourceTree = ""; @@ -312,12 +306,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E6B03C011C27F53800450E9E /* TestViewController.m in Sources */, E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */, E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */, E6AFD0081C1E99040027F340 /* main.m in Sources */, - 3836765A1EED45C7B5445BDE /* HTTestModel.m in Sources */, - 8A23F2F04F2D4DEF8C9EC596 /* HTTestRequest.m in Sources */, + 952203A8DF8C47769600886C /* HTTestModel.m in Sources */, + F72B6E5C0A744352817E3775 /* HTTestRequest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index 09f04f9b14d0d1b91052b3fa3223de2bfa3774ef..959305c4429a47fa59389686d0aa57501146252f 100644 GIT binary patch literal 24895 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 diff --git a/test/HTJSGeneratorCode/UpdateNEIProject.js b/test/HTJSGeneratorCode/UpdateNEIProject.js new file mode 100644 index 0000000..a74d487 --- /dev/null +++ b/test/HTJSGeneratorCode/UpdateNEIProject.js @@ -0,0 +1,451 @@ +// 这个JS直接引用xcode, 所有额外添加的东西都加在这个JS文件中. +var project = require('xcode'), + fs = require('fs'), + util = require('util'), + COMMENT_KEY = /_comment$/, + f = util.format; + +// TODO:参数缺少时, 需要给予警告和提示. 参数的处理需要更灵活 +// node UpdateModels.js projectName groupParentPath folderParentPath +var projectName = process.argv[2]; +var groupParentPath = process.argv[3]; +var folderParentPath = process.argv[4]; +var projectPath = projectName + '.xcodeproj/project.pbxproj'; +//var projectPath = 'HTJSGeneratorCode.xcodeproj/project.pbxproj'; + +// Get Project. +var myProj = project(projectPath); + +// Debug with parseSync as it is impossible to debug async parsing. +// For release version, it is OK to use parse function. +myProj.parseSync(); +updateCode(); + +function updateCode () { + if (undefined == projectName || undefined == groupParentPath || undefined == folderParentPath || undefined == myProj) { + console.log("Please correct parameters, the command is like \r\n node UpdateModels.js projectName groupParentPath folderParentPath, please specify your own projectName, parent group path and pareng folder path"); + return; + } + + // TODO: 现在暂时不支持更换路径,即之前要删除的路径和后面要添加的路径不相同的Case. + console.log("Begin to update project " + projectName + ", Models and Requests will be added under group " + groupParentPath); + + // 固定添加Models和Requests, 不需要参数配置 + var autoGroupNames = ["Models", "Requests"]; + autoGroupNames.forEach(function (groupName){ + console.log("Begin to check folder " + groupName); + + // 获取parent Group Key 和 要处理的Group Key + var absoluteGroupPath = groupParentPath + "/" + groupName; + var parentGroupKey = findGroupByAbsolutePath(groupParentPath); + var groupKey = findGroupByAbsolutePath(absoluteGroupPath); + if (undefined == groupKey) { + // group不存在, 新建Group. GroupName与Path相同. + console.log("Group " + groupName + " does not exist, create group " + groupName + " under group " + groupParentPath); + groupKey = myProj.pbxCreateGroup(groupName, groupName); + + // Add new created groups into parent group. + // 将Group加到parent Group中 + myProj.addToPbxGroup(groupKey, parentGroupKey, {}); + } else { + // group存在, 删除其中的所有文件. + console.log("Group " + groupName + " already exists, remove all files in this group first."); + removeFilesInGroup(groupName); + } + + // 获取目录下的所有头文件和可执行文件 + var folderPath = folderParentPath + "/" + groupName; + var headerFiles = headerFilesInFilePath(folderPath); + var sourceFiles = sourceFilesInFilePath(folderPath); + + // 将头文件添加到group中. + headerFiles.forEach(function(headerFile) { + myProj.addHeaderFile(headerFile, {}, groupKey); + }); + + // 将源文件添加到group中 + sourceFiles.forEach(function(sourceFile) { + myProj.addSourceFile(sourceFile, {}, groupKey); + }); + + console.log("Add Source Files and Header Files from Path " + folderPath + " to group " + absoluteGroupPath + " successfully"); + }); + + + // 将内容写回到工程文件中. + fs.writeFileSync(projectPath, myProj.writeSync()); + console.log('Project ' + projectPath + " is updated successfully !"); +} + +// 根据完整路径获取到对应的Group. +function findGroupByAbsolutePath(fullPath) { + var pathList = fullPath.split('/'); + if (pathList.length == 0) { + return; + } + + var root = pathList[0]; + var groupKey = myProj.findPBXGroupKey({ path: root}); + pathList.splice(0, 1); + while (pathList.length > 0 && undefined != groupKey) { + root = pathList[0]; + groupKey = findPBXGroupKeyInParentGroup({path: root}, groupKey); + pathList.splice(0, 1); + } + + // TODO: 下面的代码只用校验是否能够取到正确的Group. + if (undefined != groupKey) { + var group = myProj.getPBXGroupByKey(groupKey); + } + + return groupKey; +} + +// removeFilesInGroup已经OK. +// Done. 根据FileRef的UUID从Project的File Reference Section中删除. +function removeFromPbxFileReferenceSectionWithKey (fileRef) { + for (i in myProj.pbxFileReferenceSection()) { + if (i == fileRef) { + delete myProj.pbxFileReferenceSection()[i]; + break; + } + } + var commentKey = f("%s_comment", fileRef); + if (myProj.pbxFileReferenceSection()[commentKey] != undefined) { + delete myProj.pbxFileReferenceSection()[commentKey]; + } +} + +// TODO: 这里必须返回BuildFileUUID. 否则的话,无法从BuildPhase中删除. +function removeFromPbxBuildFileSectionWithKey (fileRef) { + var uuid; + var buildFileUUID; + for (uuid in myProj.pbxBuildFileSection()) { + var buildFile = myProj.pbxBuildFileSection()[uuid]; + if (buildFile.fileRef == fileRef) { + // TODO: delete buildFile没有从这个字典中真正删除这个文件. + //delete buildFile; + delete myProj.pbxBuildFileSection()[uuid]; + buildFileUUID = uuid; + break; + } + } + + var commentKey = f("%s_comment", fileRef); + if (myProj.pbxBuildFileSection()[commentKey] != undefined) { + delete myProj.pbxBuildFileSection()[commentKey]; + } + + return buildFileUUID; +} + +// Note: 这里只取了firstTarget, 理论上所有的Target都需要获取. 这里所有的参数都是fileRef的uuid. +// Note: File Reference里面的uuid和BuildPhase中的uuid不相同. 所以这个方法不正确. +function removeFromPbxSourcesBuildPhaseWithKey (fileRef) { + // var target = myProj.getFirstTarget(); + // TODO: 用FirstTarget会抛出异常,原因未知. + var target = undefined; + var sources = myProj.pbxSourcesBuildPhaseObj(target), i; + for (i in sources.files) { + if (sources.files[i].value == fileRef) { + sources.files.splice(i, 1); + break; + } + } +} + +function removeFilesInGroup(groupName) { + var groupKey = myProj.findPBXGroupKey({ path: groupName}); + var group = myProj.getPBXGroupByKey(groupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + var uuid = file.value; + if (uuid != undefined) { + removeFromPbxFileReferenceSectionWithKey(uuid); // PBXFileReference + } + + // 从当前Group中删除. TODO: 这里删除了后不可以继续遍历了. + //groupChildren.splice(i, 1); + // TODO: 如果是子Group, 还要继续删除. 暂时不考虑文件夹. + //myProj.removeFromPbxGroup(file, group); // PBXGroup + + // 从Build File Ref中删除 + var buildFileUUID = removeFromPbxBuildFileSectionWithKey(uuid); + + // 从Build Phase中删除 + if (undefined != buildFileUUID) { + removeFromPbxSourcesBuildPhaseWithKey(buildFileUUID); + } + } + + // 删除groupChildren. + groupChildren.splice(0, groupChildren.length); + } +} + +// 找到所有的头文件. +function headerFilesInFilePath(root) { + var res = []; + var files = fs.readdirSync(root); + files.forEach(function(file) { + var extensionFileName = GetExtensionFileName(file); + if ("h" == extensionFileName) { + res.push(file); + } + }); + + return res; +} + +// 找到所有的源文件 +// TODO: 性能可以改进, 可以一次性找出头文件和源文件,不需要每次都遍历一遍. +function sourceFilesInFilePath(root) { + var res = []; + var files = fs.readdirSync(root); + files.forEach(function(file) { + var extensionFileName = GetExtensionFileName(file); + if ("m" == extensionFileName) { + res.push(file); + } + }); + + return res; +} + +function GetExtensionFileName(pathfilename) +{ + var reg = /(\\+)/g; + var pfn = pathfilename.replace(reg, "#"); + var arrpfn = pfn.split("#"); + var fn = arrpfn[arrpfn.length - 1]; + var arrfn = fn.split("."); + return arrfn[arrfn.length - 1]; +} + + + + + + + + + + + +// Projects Extension +// 这些最好添加到pbxProject.js中, 仅供当前流程使用. +function removePbxGroupByKey(groupKey) { + var section = myProj.hash.project.objects['PBXGroup'], + key, itemKey; + + for (key in section) { + // only look for comments + if (!COMMENT_KEY.test(key)) continue; + + if (key == groupKey) { + itemKey = key.split(COMMENT_KEY)[0]; + delete section[itemKey]; + } + } +} + +function removeGroupFromPbxGroup(removeGroupKey, groupKey) { + var group = myProj.getPBXGroupByKey(groupKey); + var removeGroup = myProj.getPBXGroupByKey(removeGroupKey); + if (group) { + var groupChildren = group.children, i; + for(i in groupChildren) { + if(removeGroupKey == groupChildren[i].value && removeGroup != undefined) { + groupChildren.splice(i, 1); + + clearGroup(removeGroup); + break; + } + } + } + + delete removeGroup; +} + +function clearGroup(group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + if (file.fileRef != undefined) { + myProj.removeFromPbxFileReferenceSection(file); // PBXFileReference + } + + // TODO: 如果是子Group, 还要继续删除. + myProj.removeFromPbxGroup(file, group); // PBXGroup + } +} + +function removeGroupByKey(key, parentGroupKey) { + var group = getPBXGroupByKey(key, parentGroupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + if (file.fileRef != undefined) { + myProj.removeFromPbxFileReferenceSection(file); // PBXFileReference + } + + // TODO: 如果是子Group, 还要继续删除. + myProj.removeFromPbxGroup(file, group); // PBXGroup + } + } +} + +// Remove a group and all files in this group. +function removeGroup(groupPath, parentGroupKey) { + var group = getPBXGroupByPath(groupPath, parentGroupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + if (file.fileRef != undefined) { + myProj.removeFromPbxFileReferenceSection(file); // PBXFileReference + } + + // TODO: 如果是子Group, 还要继续删除. + myProj.removeFromPbxGroup(file, group); // PBXGroup + } + } +} + + +function getPBXGroupByPath(path, parentGroupKey) { + var groups = (undefined == parentGroupKey) ? myProj.hash.project.objects['PBXGroup'] : myProj.getPBXGroupByKey(parentGroupKey); + for (var key in groups) { + var group = groups[key]; + if (group.path === path) { + return group; + } + } + + return undefined; +}; + +function getPBXGroupByKey(key, parentGroupKey) { + var groups = (undefined == parentGroupKey) ? myProj.hash.project.objects['PBXGroup'] : myProj.getPBXGroupByKey(parentGroupKey); + var group = groups[key]; + return group; +}; + +function findPBXGroupInParent(criteria, parentCriteria) { + if (undefined == parentCriteria) { + return myProj.findPBXGroupKey(criteria); + } + + var target; + var groupKey = myProj.findPBXGroupKey(parentCriteria); + var group = myProj.getPBXGroupByKey(groupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = myProj.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = childGroup; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = childGroup; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = childGroup; + break + } + } + } + + return target; +} + +function findPBXGroupKeyInParent(criteria, parentCriteria) { + if (undefined == parentCriteria) { + return myProj.findPBXGroupKey(criteria); + } + + var target; + var groupKey = myProj.findPBXGroupKey(parentCriteria); + var group = myProj.getPBXGroupByKey(groupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = myProj.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = child.value; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = child.value; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = child.value; + break + } + } + } + + return target; +} + + +function findPBXGroupKeyInParentGroup(criteria, parentGroupKey) { + var target; + var group = getPBXGroupByKey(parentGroupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = myProj.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = child.value; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = child.value; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = child.value; + break + } + } + } + + return target; +} From 7e06959aff82a9ebf30a1ed9bc9ac0f537b30b1e Mon Sep 17 00:00:00 2001 From: Wangliping Date: Tue, 29 Dec 2015 10:32:50 +0800 Subject: [PATCH 24/28] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=B7=A5=E7=A8=8B=E6=B5=8B=E8=AF=95=E6=B7=BB=E5=8A=A0=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E6=96=87=E4=BB=B6=EF=BC=8Cplist=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=AD=89=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 281 +++++--- .../UserInterfaceState.xcuserstate | Bin 24895 -> 24879 bytes test/HTJSGeneratorCode/UpdateNEIProject.js | 4 +- .../project.pbxproj | 598 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 30801 bytes .../xcschemes/HTJSGeneratorCode.xcscheme | 111 ++++ .../xcschemes/xcschememanagement.plist | 32 + .../HTJSGeneratorCode/AppDelegate.h | 17 + .../HTJSGeneratorCode/AppDelegate.m | 45 ++ .../AppIcon.appiconset/Contents.json | 38 ++ .../Base.lproj/LaunchScreen.storyboard | 27 + .../Base.lproj/Main.storyboard | 25 + .../Controllers/Test/TestViewController.h | 13 + .../Controllers/Test/TestViewController.m | 13 + .../HTJSGeneratorCode/Info.plist | 40 ++ .../HTJSGeneratorCode/Models/HTTestModel.h | 13 + .../HTJSGeneratorCode/Models/HTTestModel.m | 13 + .../HTJSGeneratorCode/Models/HTTestModel1.h | 13 + .../HTJSGeneratorCode/Models/HTTestModel1.m | 13 + .../Requests/HTTestRequest.h | 13 + .../Requests/HTTestRequest.m | 13 + .../Requests/TestViewController.h | 13 + .../Requests/TestViewController.m | 37 ++ .../Requests/TestViewController1.h | 13 + .../Requests/TestViewController1.m | 37 ++ .../HTJSGeneratorCode/ViewController.h | 15 + .../HTJSGeneratorCode/ViewController.m | 32 + test/HTTestResources/HTJSGeneratorCode/main.m | 16 + .../HTJSGeneratorCodeTests.m | 39 ++ .../HTJSGeneratorCodeTests/Info.plist | 24 + .../HTJSGeneratorCodeUITests.m | 40 ++ .../HTJSGeneratorCodeUITests/Info.plist | 24 + test/HTTestResources/UpdateModels.js | 224 +++++++ test/HTTestResources/UpdateNEIProject.js | 451 +++++++++++++ 35 files changed, 2218 insertions(+), 76 deletions(-) create mode 100644 test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj create mode 100644 test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 test/HTTestResources/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/HTJSGeneratorCode.xcscheme create mode 100644 test/HTTestResources/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 test/HTTestResources/HTJSGeneratorCode/AppDelegate.h create mode 100644 test/HTTestResources/HTJSGeneratorCode/AppDelegate.m create mode 100644 test/HTTestResources/HTJSGeneratorCode/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 test/HTTestResources/HTJSGeneratorCode/Base.lproj/LaunchScreen.storyboard create mode 100644 test/HTTestResources/HTJSGeneratorCode/Base.lproj/Main.storyboard create mode 100644 test/HTTestResources/HTJSGeneratorCode/Controllers/Test/TestViewController.h create mode 100644 test/HTTestResources/HTJSGeneratorCode/Controllers/Test/TestViewController.m create mode 100644 test/HTTestResources/HTJSGeneratorCode/Info.plist create mode 100644 test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel.h create mode 100644 test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel.m create mode 100644 test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel1.h create mode 100644 test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel1.m create mode 100644 test/HTTestResources/HTJSGeneratorCode/Requests/HTTestRequest.h create mode 100644 test/HTTestResources/HTJSGeneratorCode/Requests/HTTestRequest.m create mode 100644 test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController.h create mode 100644 test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController.m create mode 100644 test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController1.h create mode 100644 test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController1.m create mode 100644 test/HTTestResources/HTJSGeneratorCode/ViewController.h create mode 100644 test/HTTestResources/HTJSGeneratorCode/ViewController.m create mode 100644 test/HTTestResources/HTJSGeneratorCode/main.m create mode 100644 test/HTTestResources/HTJSGeneratorCodeTests/HTJSGeneratorCodeTests.m create mode 100644 test/HTTestResources/HTJSGeneratorCodeTests/Info.plist create mode 100644 test/HTTestResources/HTJSGeneratorCodeUITests/HTJSGeneratorCodeUITests.m create mode 100644 test/HTTestResources/HTJSGeneratorCodeUITests/Info.plist create mode 100644 test/HTTestResources/UpdateModels.js create mode 100644 test/HTTestResources/UpdateNEIProject.js diff --git a/.idea/workspace.xml b/.idea/workspace.xml index aca8cf1..5a48e1e 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,11 +2,9 @@ - - - + @@ -31,67 +29,37 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - + @@ -111,6 +79,7 @@ @@ -179,7 +148,6 @@ - @@ -231,6 +199,28 @@ + - + @@ -388,7 +379,7 @@ - + @@ -607,8 +598,13 @@ 233 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -786,13 +894,6 @@ - - - - - - - @@ -807,14 +908,6 @@ - - - - - - - - @@ -830,50 +923,90 @@ - + - + - + - + - + - + - + + + + + + + + + - + - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTJSGeneratorCode/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index 959305c4429a47fa59389686d0aa57501146252f..3f0c1c412212e08fdd6bfdfd2034d3f72995b270 100644 GIT binary patch delta 1881 zcmWm3c~lhV0RV6TL84d>f(AoEo-Z@I`^~k>9y8y}>BI<~}#D3x+ z(L|ge+K4m6cf=3G1>!PsmAFoHli4Im2FaP^LUIGSovbDIkYAGr$VT!g*+RCGZR8p9 zoMWH^I_5g69rcbT$6?12$1%ro$4SR2$0f%V$5ls%bER{GbE~t;S?%2AtaI*lHYc1% zoJXB4&Q@oe^Rz3)#k$73mb&)4&bY3)uDLp0H(a+|cR&ir0E58uU?|82B%lBbJRkrd zkU$Vvpad)gE5N5<4Oj~{fl9Cid=6?rBWMOkz){cwT0tAQ2(Ex@pcC8xx4<26kIJA# z>NRR6l~_vEQHQ8z>M(VLYNbw4ZPZ2T5_OsSk-9_OrS4H(bT2xIPNsX){po>pCY?o- zw2P)`j`q;!>1*^o`Vsw@?xvqHY0Ps>1~Y&e#Q2y9GntvnOlM{>vzZT=a%Le@!E9uz zm_5usWSVr$qswv|24-e(`OkJu;dQ!a_?&Gq5>a{al1 zTqXxNhI4aXF2F%f=2TAO!ko!jTp>4>ON{4AxKi#v?i6>byN|oC`xEy%_XhVS_hwI# zXQHRn^SWn>=Z5E3&wo8nJWum#@*49FHNIm=~Cz2)r9u z5Lgpv2>dJXAkf37@tJ%MpUV&D3Es(jcpuO6keB!%U(6@?<@|2Gf&Z32!(ZSp^H=!} z{%8I^|B!#gKjypnr$V-nFGPfSLPGdh_=~Vns1!aEz7VzxwZb0ZYoT5^C^QO3g*M@$ z&?(#yZV7jVM3>MlJcG%wH%x=+a1a~@9ncNEFaRNxVHldwf`u>!i{Lm|27d?Ng&)F? z;9|H8u7H1q>)=NCceojT1{+}qd?4nCgvg4Lh($vz5DUeaI7S>VP83VUGI5GnE^Za~ zh!@39@t*it>LU%5G857eDO<{s2+1i?5+iYvM-n9@#iTLPcxj?ES$ad7F3pnWNb{sW zNbgCjrGrw7)FpMxsq$~+7v)!FhYVy!cFRzfWmOKzNDj*pd9++6za>wTXUKEpcjR~F z1@dBfsk~fX8T@TJ5$p;k9tV4rUP_A6SIJNYD1(*f6R>fXB~_P7tDKsr`c*-d zR7K5K3)QF^S4XPt>UFhK{aL-4KQsT2`HB4U{EAR|C@VBH5y}qbgw}_)g{nedg?4H_ zEu@*6rA4&3R;-QHCTNqi$=XzHj#jQM(Uxl~wN=_`ZIiZH`&|1%+on}%b=pDgn08t_ zr+u&eTf3zFr2V4Z*6wQewFg=cN<*0_2j!ySh(J!{K|aJIh-9Q71I5r7l$e5Mpx>jp zXg+!mRiH&^30j6eK`YVU&}Os)?L+mb0Ubi$pyTKyI*rbv@6h+?NAwGNgp+V@+z0o? z{qYc-jdSqJ_!T@HQ`mc!>hwP!r$nr zdWN2ibwe-EZ9So{)ob+w`nUQq{kVQoKdqnB+x6@EP5q93Uw^1~ z>(7j2Bh~0*xQ#@KvBX$qtTn2QdZXDmVjMMEj8n#0qun@fTrfI}pN!ka6EoRNHPg+0 z=3q0+e8GIte90tDml-q*%(ywy9Bqy@OU*L#P4jJYnmN~8VE)NmUU0wQVZl=?!^*UV zSq{r*@s?->t$Yhvx;4TYWffcFtdfK^$(n4HS&OY|tKCkv``MXxj-6{eZO-=D6YPoh zYZa?PYeQy~X~Az0Lm8-eK3+yX}2;z1?6p*~je@cAI^sa6;kRh0_YB7tV^L zMKU8Iu^d-i$o>7uUB|$|zA_}On@kvGT3W@cK3W;Z5fB*jW)W;pFkNf;-O2XDW zD|&xlpSbk6SXE_YN>vNht11*ssVT>5691p^r8NZ8OvV;to3Wi(Emnse!5Xj=*eUD` z)`DHZ+OZqh57TGkiJFgRIghI?BHV~(X8^iS92=%4^t zAP5RU8CU~0gRS5*upR6HdqEBO64Zlca1LAm7eOm%1MT20cmN)OF7O0A2QSGuGLsxm zP9YbOu?=Jcd6qm!o+mGmZR8cQoxDrlBkz+xlP{@mR2&sg^`ZJwsZ>8|Fg1kArZCD! z36xB!l%KjyJ)-02M7k%PM5oXh^s96xokb6&5nV*jrRUQN>BaOC`hB{RUPD*YyXji` zIDL{nMW3dd=oY$_ZlkZp=xg*%x`Y0S>A@s3eV8;RoxvG`p%{j7F#@AAK_<*ZnNdt3 zQ^ZVQCNWc(70k!X4rVvAm#JY6Ge?+urh#c=ZnNFl1U8ZF#r9_Vvi;cp>_B!fJA}<< zMK+JkXCbSz1+2}6*%9n$b}U=Sj%R1Eu~}>xTkiUeE6tVe>hBup`pC7zwac}~wJ&F4 z&g`7>oHugjm%F#S-rejz>pt)PckZ~{X}QyLXXcjWc6#DH37%IxJw5Mu zsy!cgKJ;wx4)9`LhnMhD-ksh9-dgWB-ow7pzKOn>zA|6Aufq4HZ;@|_Z@F(p%(v3F z%J-SC$@d?w2baucaM>Kiv7DRpay;kf5NB`&oW%vX5^goOi95zMao=+{xI5f^?jhI7 z{mOUe6Zk~FC!fUk<_SK+7xBya)%=J2r~GbyFaHJq6@QRF${**yC!A|wlr7zleAD; zEG?CmOMjK#m9|M|q*ggzPLk8*-^rxxkvUnE^W=QFK(^(u9F<4Pqvaxbnp`2jB`=U; z@>2O7d8NEcUMFvmH_2P_exElruOx3qUTI#Z60gL1D#=P8B~2NqWGY$8Fy%GHR^CwF zQ#L4DmA%S-<)HGlQl}hKPAZK`lhUGGQm!lalxJ$P+DA=OGt^hrOf^d#redm36;xSO zRZR`3rfR7nHKLAJ|ELzLlhqFOvD&5nsy@qKl>fK<)%lhA)&2o~%|u_%5u5YvFph5q<=>z<(M5(8SO$x zP!qZmL)Xwv)PZiJyXXOWgt`KWfnI^+KuRDrkRBKi7!(*B$O;evPaqhW9C$16USM0` zP~bZ~UC-3Bby^p7zm9Z6AFfCBQTiBtoc;%WwZ2_Hs-M=s*DvXp^{e`I{g&RLKh~e= zFOBX-f{|pT7^z0O(cj27Vr9m9;}c`MQD-z7=Zp)+MWfZYX52J7jN8T?qtp1scwzQ3 zQ_Xa9fH}wT@3mirdlP|Osgzr&9UZM71lbd&g!sJ?Ll_7P1&r?+p3N1 zQhT< n2uwkz!_d!xPAuCf1RAF#i+583thG5e(5XgAp{_GSBu-EQ9qmImJrE(k6R zE)HdcvO`$N5dxt@q0^zJP)q21cuaV5cxt#LJTrVR{4D$;(k&7n!InhckF1GQN7hCM kMV(O)rJ`)KCVDtpA8m-97=cE-KB90$aaBrjR@|ij0i_wCcK`qY diff --git a/test/HTJSGeneratorCode/UpdateNEIProject.js b/test/HTJSGeneratorCode/UpdateNEIProject.js index a74d487..164747e 100644 --- a/test/HTJSGeneratorCode/UpdateNEIProject.js +++ b/test/HTJSGeneratorCode/UpdateNEIProject.js @@ -1,5 +1,5 @@ // 这个JS直接引用xcode, 所有额外添加的东西都加在这个JS文件中. -var project = require('xcode'), +var xcode = require('xcode'), fs = require('fs'), util = require('util'), COMMENT_KEY = /_comment$/, @@ -14,7 +14,7 @@ var projectPath = projectName + '.xcodeproj/project.pbxproj'; //var projectPath = 'HTJSGeneratorCode.xcodeproj/project.pbxproj'; // Get Project. -var myProj = project(projectPath); +var myProj = xcode.project(projectPath); // Debug with parseSync as it is impossible to debug async parsing. // For release version, it is OK to use parse function. diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2ccb832 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -0,0 +1,598 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { +/* Begin PBXBuildFile section */ + E63CC7931C2CEB1E0092683A /* HTTestModel1.m in Sources */ = {isa = PBXBuildFile; fileRef = E63CC7921C2CEB1E0092683A /* HTTestModel1.m */; settings = {ASSET_TAGS = (); }; }; + E63CC7961C2CEB6F0092683A /* TestViewController1.m in Sources */ = {isa = PBXBuildFile; fileRef = E63CC7951C2CEB6F0092683A /* TestViewController1.m */; settings = {ASSET_TAGS = (); }; }; + E6AFD0081C1E99040027F340 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0071C1E99040027F340 /* main.m */; }; + E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00A1C1E99040027F340 /* AppDelegate.m */; }; + E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD00D1C1E99040027F340 /* ViewController.m */; }; + E6AFD0111C1E99040027F340 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD00F1C1E99040027F340 /* Main.storyboard */; }; + E6AFD0131C1E99040027F340 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0121C1E99040027F340 /* Assets.xcassets */; }; + E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */; }; + E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */; }; + E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */; }; + D4224B2B6F6443B5BAA60C2B /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BF6840A3E42462796687B18 /* HTTestModel.m */; }; + 7068F19789004D5D81E338AD /* HTTestModel1.m in Sources */ = {isa = PBXBuildFile; fileRef = C986780B42C44F2598E4E234 /* HTTestModel1.m */; }; + 70459B39CB83470FAEC65357 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B96CF0CB8B164CA7B961B7C8 /* HTTestRequest.m */; }; + 1633717AA6294BD4B13F3ED7 /* TestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C091F8560FBB4B8693F87C1F /* TestViewController.m */; }; + 7134CF06962A4FE08E75D36B /* TestViewController1.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E124782988F4EA8A210945F /* TestViewController1.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + E6AFD01D1C1E99040027F340 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E6AFCFFB1C1E99040027F340 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E6AFD0021C1E99040027F340; + remoteInfo = HTJSGeneratorCode; + }; + E6AFD0281C1E99040027F340 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E6AFCFFB1C1E99040027F340 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E6AFD0021C1E99040027F340; + remoteInfo = HTJSGeneratorCode; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + E63CC7911C2CEB1E0092683A /* HTTestModel1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTestModel1.h; path = Models/HTTestModel1.h; sourceTree = ""; }; + E63CC7921C2CEB1E0092683A /* HTTestModel1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTTestModel1.m; path = Models/HTTestModel1.m; sourceTree = ""; }; + E63CC7941C2CEB6F0092683A /* TestViewController1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestViewController1.h; path = Requests/TestViewController1.h; sourceTree = ""; }; + E63CC7951C2CEB6F0092683A /* TestViewController1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TestViewController1.m; path = Requests/TestViewController1.m; sourceTree = ""; }; + E6AFD0031C1E99040027F340 /* HTJSGeneratorCode.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HTJSGeneratorCode.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E6AFD0071C1E99040027F340 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + E6AFD0091C1E99040027F340 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + E6AFD00A1C1E99040027F340 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + E6AFD00C1C1E99040027F340 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + E6AFD00D1C1E99040027F340 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + E6AFD0101C1E99040027F340 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + E6AFD0121C1E99040027F340 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + E6AFD0151C1E99040027F340 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + E6AFD0171C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E6AFD01C1C1E99040027F340 /* HTJSGeneratorCodeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeTests.m; sourceTree = ""; }; + E6AFD0221C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; + E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AF82B515094B4A86B9276616 /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 31D0B9D061014AAF95C2A624 /* HTTestModel1.h */ = {isa = PBXFileReference; name = "HTTestModel1.h"; path = "HTTestModel1.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 4BF6840A3E42462796687B18 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + C986780B42C44F2598E4E234 /* HTTestModel1.m */ = {isa = PBXFileReference; name = "HTTestModel1.m"; path = "HTTestModel1.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + D06C33858A124437A6D331E1 /* HTTestRequest.h */ = {isa = PBXFileReference; name = "HTTestRequest.h"; path = "HTTestRequest.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 7DA58FFAAE624AC88D81D21B /* TestViewController.h */ = {isa = PBXFileReference; name = "TestViewController.h"; path = "TestViewController.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + 9477E58C648F4B9CBF695A18 /* TestViewController1.h */ = {isa = PBXFileReference; name = "TestViewController1.h"; path = "TestViewController1.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; + B96CF0CB8B164CA7B961B7C8 /* HTTestRequest.m */ = {isa = PBXFileReference; name = "HTTestRequest.m"; path = "HTTestRequest.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + C091F8560FBB4B8693F87C1F /* TestViewController.m */ = {isa = PBXFileReference; name = "TestViewController.m"; path = "TestViewController.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; + 9E124782988F4EA8A210945F /* TestViewController1.m */ = {isa = PBXFileReference; name = "TestViewController1.m"; path = "TestViewController1.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E6AFD0001C1E99040027F340 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E6AFD0191C1E99040027F340 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E6AFD0241C1E99040027F340 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + BA604265FA2841C1B310F4EB /* Models */ = { + isa = PBXGroup; + children = ( + AF82B515094B4A86B9276616 /* HTTestModel.h */, + 31D0B9D061014AAF95C2A624 /* HTTestModel1.h */, + 4BF6840A3E42462796687B18 /* HTTestModel.m */, + C986780B42C44F2598E4E234 /* HTTestModel1.m */, + ); + path = Models; + sourceTree = ""; + }; + E63CC7901C2CE8430092683A /* Models */ = { + isa = PBXGroup; + children = ( + E63CC7941C2CEB6F0092683A /* TestViewController1.h */, + E63CC7951C2CEB6F0092683A /* TestViewController1.m */, + E63CC7911C2CEB1E0092683A /* HTTestModel1.h */, + E63CC7921C2CEB1E0092683A /* HTTestModel1.m */, + ); + name = Models; + sourceTree = ""; + }; + E6AFCFFA1C1E99040027F340 = { + isa = PBXGroup; + children = ( + E6AFD0051C1E99040027F340 /* HTJSGeneratorCode */, + E6AFD01F1C1E99040027F340 /* HTJSGeneratorCodeTests */, + E6AFD02A1C1E99040027F340 /* HTJSGeneratorCodeUITests */, + E6AFD0041C1E99040027F340 /* Products */, + ); + sourceTree = ""; + }; + E6AFD0041C1E99040027F340 /* Products */ = { + isa = PBXGroup; + children = ( + E6AFD0031C1E99040027F340 /* HTJSGeneratorCode.app */, + E6AFD01C1C1E99040027F340 /* HTJSGeneratorCodeTests.xctest */, + E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + E6AFD0051C1E99040027F340 /* HTJSGeneratorCode */ = { + isa = PBXGroup; + children = ( + E6B03C021C27F57600450E9E /* Network */, + E6AFD0091C1E99040027F340 /* AppDelegate.h */, + E6AFD00A1C1E99040027F340 /* AppDelegate.m */, + E6AFD00C1C1E99040027F340 /* ViewController.h */, + E6AFD00D1C1E99040027F340 /* ViewController.m */, + E6AFD00F1C1E99040027F340 /* Main.storyboard */, + E6AFD0121C1E99040027F340 /* Assets.xcassets */, + E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */, + E6AFD0171C1E99040027F340 /* Info.plist */, + E6AFD0061C1E99040027F340 /* Supporting Files */, + BA604265FA2841C1B310F4EB /* Models */, + ED6D750F3C0B43478EDB8BE5 /* Requests */, + ); + path = HTJSGeneratorCode; + sourceTree = ""; + }; + E6AFD0061C1E99040027F340 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + E6AFD0071C1E99040027F340 /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + E6AFD01F1C1E99040027F340 /* HTJSGeneratorCodeTests */ = { + isa = PBXGroup; + children = ( + E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */, + E6AFD0221C1E99040027F340 /* Info.plist */, + ); + path = HTJSGeneratorCodeTests; + sourceTree = ""; + }; + E6AFD02A1C1E99040027F340 /* HTJSGeneratorCodeUITests */ = { + isa = PBXGroup; + children = ( + E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */, + E6AFD02D1C1E99040027F340 /* Info.plist */, + ); + path = HTJSGeneratorCodeUITests; + sourceTree = ""; + }; + E6B03C021C27F57600450E9E /* Network */ = { + isa = PBXGroup; + children = ( + E63CC7901C2CE8430092683A /* Models */, + ); + name = Network; + sourceTree = ""; + }; + ED6D750F3C0B43478EDB8BE5 /* Requests */ = { + isa = PBXGroup; + children = ( + D06C33858A124437A6D331E1 /* HTTestRequest.h */, + 7DA58FFAAE624AC88D81D21B /* TestViewController.h */, + 9477E58C648F4B9CBF695A18 /* TestViewController1.h */, + B96CF0CB8B164CA7B961B7C8 /* HTTestRequest.m */, + C091F8560FBB4B8693F87C1F /* TestViewController.m */, + 9E124782988F4EA8A210945F /* TestViewController1.m */, + ); + path = Requests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E6AFD0021C1E99040027F340 /* HTJSGeneratorCode */ = { + isa = PBXNativeTarget; + buildConfigurationList = E6AFD0301C1E99040027F340 /* Build configuration list for PBXNativeTarget "HTJSGeneratorCode" */; + buildPhases = ( + E6AFCFFF1C1E99040027F340 /* Sources */, + E6AFD0001C1E99040027F340 /* Frameworks */, + E6AFD0011C1E99040027F340 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = HTJSGeneratorCode; + productName = HTJSGeneratorCode; + productReference = E6AFD0031C1E99040027F340 /* HTJSGeneratorCode.app */; + productType = "com.apple.product-type.application"; + }; + E6AFD01B1C1E99040027F340 /* HTJSGeneratorCodeTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = E6AFD0331C1E99040027F340 /* Build configuration list for PBXNativeTarget "HTJSGeneratorCodeTests" */; + buildPhases = ( + E6AFD0181C1E99040027F340 /* Sources */, + E6AFD0191C1E99040027F340 /* Frameworks */, + E6AFD01A1C1E99040027F340 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + E6AFD01E1C1E99040027F340 /* PBXTargetDependency */, + ); + name = HTJSGeneratorCodeTests; + productName = HTJSGeneratorCodeTests; + productReference = E6AFD01C1C1E99040027F340 /* HTJSGeneratorCodeTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + E6AFD0261C1E99040027F340 /* HTJSGeneratorCodeUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = E6AFD0361C1E99040027F340 /* Build configuration list for PBXNativeTarget "HTJSGeneratorCodeUITests" */; + buildPhases = ( + E6AFD0231C1E99040027F340 /* Sources */, + E6AFD0241C1E99040027F340 /* Frameworks */, + E6AFD0251C1E99040027F340 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + E6AFD0291C1E99040027F340 /* PBXTargetDependency */, + ); + name = HTJSGeneratorCodeUITests; + productName = HTJSGeneratorCodeUITests; + productReference = E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E6AFCFFB1C1E99040027F340 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 700; + ORGANIZATIONNAME = Netease; + TargetAttributes = { + E6AFD0021C1E99040027F340 = { + CreatedOnToolsVersion = 7.0; + DevelopmentTeam = 2D4LEJ8Z2D; + }; + E6AFD01B1C1E99040027F340 = { + CreatedOnToolsVersion = 7.0; + DevelopmentTeam = 2D4LEJ8Z2D; + TestTargetID = E6AFD0021C1E99040027F340; + }; + E6AFD0261C1E99040027F340 = { + CreatedOnToolsVersion = 7.0; + DevelopmentTeam = 2D4LEJ8Z2D; + TestTargetID = E6AFD0021C1E99040027F340; + }; + }; + }; + buildConfigurationList = E6AFCFFE1C1E99040027F340 /* Build configuration list for PBXProject "HTJSGeneratorCode" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = E6AFCFFA1C1E99040027F340; + productRefGroup = E6AFD0041C1E99040027F340 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E6AFD0021C1E99040027F340 /* HTJSGeneratorCode */, + E6AFD01B1C1E99040027F340 /* HTJSGeneratorCodeTests */, + E6AFD0261C1E99040027F340 /* HTJSGeneratorCodeUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + E6AFD0011C1E99040027F340 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */, + E6AFD0131C1E99040027F340 /* Assets.xcassets in Resources */, + E6AFD0111C1E99040027F340 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E6AFD01A1C1E99040027F340 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E6AFD0251C1E99040027F340 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E6AFCFFF1C1E99040027F340 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E63CC7961C2CEB6F0092683A /* TestViewController1.m in Sources */, + E6AFD00E1C1E99040027F340 /* ViewController.m in Sources */, + E6AFD00B1C1E99040027F340 /* AppDelegate.m in Sources */, + E6AFD0081C1E99040027F340 /* main.m in Sources */, + E63CC7931C2CEB1E0092683A /* HTTestModel1.m in Sources */, + D4224B2B6F6443B5BAA60C2B /* HTTestModel.m in Sources */, + 7068F19789004D5D81E338AD /* HTTestModel1.m in Sources */, + 70459B39CB83470FAEC65357 /* HTTestRequest.m in Sources */, + 1633717AA6294BD4B13F3ED7 /* TestViewController.m in Sources */, + 7134CF06962A4FE08E75D36B /* TestViewController1.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E6AFD0181C1E99040027F340 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E6AFD0231C1E99040027F340 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + E6AFD01E1C1E99040027F340 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E6AFD0021C1E99040027F340 /* HTJSGeneratorCode */; + targetProxy = E6AFD01D1C1E99040027F340 /* PBXContainerItemProxy */; + }; + E6AFD0291C1E99040027F340 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E6AFD0021C1E99040027F340 /* HTJSGeneratorCode */; + targetProxy = E6AFD0281C1E99040027F340 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + E6AFD00F1C1E99040027F340 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + E6AFD0101C1E99040027F340 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + E6AFD0151C1E99040027F340 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + E6AFD02E1C1E99040027F340 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + 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.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + E6AFD02F1C1E99040027F340 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + 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.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + E6AFD0311C1E99040027F340 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = HTJSGeneratorCode/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Netease.HTJSGeneratorCode; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + E6AFD0321C1E99040027F340 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = HTJSGeneratorCode/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Netease.HTJSGeneratorCode; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + E6AFD0341C1E99040027F340 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = HTJSGeneratorCodeTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Netease.HTJSGeneratorCodeTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/HTJSGeneratorCode.app/HTJSGeneratorCode"; + }; + name = Debug; + }; + E6AFD0351C1E99040027F340 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = HTJSGeneratorCodeTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Netease.HTJSGeneratorCodeTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/HTJSGeneratorCode.app/HTJSGeneratorCode"; + }; + name = Release; + }; + E6AFD0371C1E99040027F340 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = HTJSGeneratorCodeUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Netease.HTJSGeneratorCodeUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = HTJSGeneratorCode; + USES_XCTRUNNER = YES; + }; + name = Debug; + }; + E6AFD0381C1E99040027F340 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = HTJSGeneratorCodeUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Netease.HTJSGeneratorCodeUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = HTJSGeneratorCode; + USES_XCTRUNNER = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E6AFCFFE1C1E99040027F340 /* Build configuration list for PBXProject "HTJSGeneratorCode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E6AFD02E1C1E99040027F340 /* Debug */, + E6AFD02F1C1E99040027F340 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E6AFD0301C1E99040027F340 /* Build configuration list for PBXNativeTarget "HTJSGeneratorCode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E6AFD0311C1E99040027F340 /* Debug */, + E6AFD0321C1E99040027F340 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E6AFD0331C1E99040027F340 /* Build configuration list for PBXNativeTarget "HTJSGeneratorCodeTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E6AFD0341C1E99040027F340 /* Debug */, + E6AFD0351C1E99040027F340 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E6AFD0361C1E99040027F340 /* Build configuration list for PBXNativeTarget "HTJSGeneratorCodeUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E6AFD0371C1E99040027F340 /* Debug */, + E6AFD0381C1E99040027F340 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E6AFCFFB1C1E99040027F340 /* Project object */; +} diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..74bb09f --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..a0fb79dd1cffc09e792d077fca6e5c6c18c559b8 GIT binary patch literal 30801 zcmeHw2Y6If)9^j#))bOW?>*T~NZVwSEtHU6AqgqFn*z%wSs)UUm_il3hu#z{fQSer zp?5`8R0I`Kv4Nl{f{MIS6+{rE`JcNtn`9-5@Avx4`~A;Pc#_?F&z&lOB_?Y;FI7l2KjuKxGCy4Kf)5IC#EOCywKwKfN62B0?0vlip z?0`M!0~~-OZ~^YX8~B3&5CUW%5-30dNCbmGGDrcbAPuC0Y%mxM1x26|3}-UM%f zx4}o?WAF($2o8Zy!5835Z~~kJ-+@!$3^)tUf%D)Z_!(S*1OyO55>ikCouD&xfv(U4 z`aypf0K=dZMnVNlfQe8ERd5hYhAA)$X2T({6l$Rk8sG?MgthPiI0n|i7T5|OfjmTT zDx3-D!pGnOxD+mjTj4gi9X=0VfIHxea3_2Tz6IZg``|lpKl~7W1V4qx;8*ZCJORIl zr{Q^c3H}5x!yE7>yhRcuL)wxKq$4RIT}e06o%AOC$pBJD#*r$rKRJj@CR4}^GMCIJ zi%2b5NgByo@&R%T*-W;O50O*Ihsj6C1>{2Vaq`6GFeyhL6nep091La6bC@0F9a-m$Q zKq`m|rb4JtDu#-u6qJfmQv;}hR30^$8bak$1ymt5l+sapY8YjrMpC1w(NrVFQ;3>M zO{1n$GpL!=TqX`<&kS1xCwxu0tXWE_irUU3eI*5*>qv&WlhK{F| zw2IE4GwCdP2wg;%(^Yg6J&vA8PoWV#gPub_MlYb3($CP#=oNH3-9f)YzfT{aKc+vS z57S5JFX%7n6ZF^gcl0Ux41JdVf&P)cO#e(@qp#Dq=-UinAj2>$W5?Jt62^(~WBi!_ zCXfkYf|(E|mXR}YOgy7t5|~6Lg-K=7m~C6mfCNqn9l6i_*#4Ki(Fi$f}nbpi1W-apqvx9k&*~z@byv)49>|)+w z_A~D?hnXYHXUyl!QRWNgOXe7JnmNOqWv(*6FxQytEXC3+!#cC>tOx7E`m%v+5F5ry zSvecW#@apBJB59ioytyQXR)){`Rt?Y z~{8fb~pP5yN7+BJ-~jze#U;z9%WCm-?69IOYBeV zW%dsH8%J=qoE>M+d2(KyHz(y}TsRlODYyhKkxSuHxil_^%jNPo12=**a#dV4SHqdO zk=!V5G*`<#z>VSRxN+QgZUQ%vL)<)WKKCg17`K31$UV+2xb@ryZX@?1 zx08E`dzE{G`OLiG2wTFAuqPY|XI*}A%ox+e=5qYEQ%h?@tLu!-&22;j08=JGESvQiB}~WB(6E> z8M=n1G0ly}YEybcb?aDDeT$`Mcfy~Lt|dGOPr{4vCVU8A!jGqUhG%(>x8ZGhyR}3B z5l94K6ugK~B8<1^`|yq!8J3^SPvWJ+1?aW)H4Wo4n~Y;k21yXUP|#FkYBJSy^;%-A zN^7WZX=9VLUrO8{slqokpsuFBYy z)2yv+uC1!W6nS>vGghTq-YFiqbQkqOggG7SA7mscjpKlyjJIaVJ8zk;2&CS@JFxIz-4VwoW zCpNUU7$ngGLo74OYWPZ9YU^rSCJG>nu`$x3tu>7oVRyk5yR#ZVD-h|X=Gsy9y+9DK z6XDmInuTeHAIq$*GZh+JMpuYm2OFzQT|!kxm0AdEy6QBBnF z-ncSJf2ES!@cAe4{2>N zVi8HN#j@2_PD~}H6Y9$R;_hn}7&D34gme`#iw|E#%;6&h{)LHsch0Ln;-Uq> zqr?IMz+-&hRm4I*l9!eYG1k^w?mk64O*pp`i-^U<5sh9Tv8I-$iK4i#62!fYm-7x5 zq*fD~1@*dySWB!U))O0ujl?ECj*sURd;*`yD|yvgVhgdA*hXx}KQ9nFcr~x#Yxx%Z z)5?$IrIo@APdBz0OC~m&Dny*j*kZMmVz%Ig0kEER28oj>ZTL=3i)n1WSucB8RDUn` zd@T1eCg4ddI11g`v%+$(v}mwF;!)i&HpbZ4SZ9ivP>ttfOk-1n;80iyeuLOYIIkx5 z5POL?iMNQi`F?zVegHp^Pg+g9L+mHsCEg?6=Lhl0{1Co^A1#bZv|a$DC=>ySBo;QA z#?>~oHd|dx6V^h5B)pgQG0hFFP1UBsSO{a91;sPYtau`OX=)I!rMA}A)fA34Hk+Eo zF7cw$OY7p!fwwSWa6`34vU_W8!MnuRG|JSeHapSwu!5dbKe9pW*TT6^i6g@7KFp`A zB0l3&1@Ul7*Oqh%t1yzy;ynA3INnAaBfjF(_#A$)1;E$DNy52}_=fnFPvT6qCu~w1eBr=eR!ARFt2*;#5G~vvp~8503lsN+$3%hw~0H% zZ-C(Q`2xO>AIcZ;#cKcrB%lBd7{Kx+d?~Nv^?Vs$F7V4ULz$A9E|`R{La@&HJHlSSQP^ANZKx0Srs%y{4dJh67|RJ_HemUeu_i%^&5 z7vnFM=Y4>$_`G&9Hb~@CEY|};ka*p4Aryr5>?j;7Fl;1L@(zbV6o>{fxbs*b2XP?2 ztl2CHST&Tj)M8e(7{@kN)O1>tST*nlemFmjA7zl#jl?ReUuY^algLK)#x<;Z3|$D~g>~6j8i}|G{|nkn~Q`y=(Gd z3B3zjvxI^SfsvW~$gY(Di0=iSO*E8DQJEx4~!wtpfPoZizxY9!$XN+V2_Ejjr|j z-UcQL;Qn&^-gsk>sKimRnu5ixjg1XWEis~qSVlF*s?Dch3LcAx!GnMYae~iUg{8X! z|7|kW;iYk$i6{8+{4kNQX<$0mOjtd%foX(V9N3w{z|P_)@($R>oh&LS>^!N}SXHSt z>M2t=8ws?C^J8G4#b^YN^AGb<%Z;bNVv8{dmhg{s-*^T*hwVVH3_J^#^E{9EsqJ6| zo;j=dX?UVM_Yc^CV68ymI(~Y$^lt<&U^@_O0-M1WuoY|r+rjhv41Oj*i=WNU;pg)6 z)`A`2MX(dRgnwQEyZHJ1qx_TnGW_!_zx;ol9SHV;_k>Y+2kZy$@{jQg_=W9w%{~A= zz^nD+{1d_`gcUZ`j>SHMWtv$`t+dg`CL=bsn~IF}qXhT+ckN0n%MXr#{O(q#%We$; zFA?$KX^|NoWx`yGkCQ8=^wfce!4a$jKLW5T$9#V_twSzik( zi(m3b8tN{c@-MSac}CDF21)C^7ShJns=C_huBEhYJZ4xX_RC}I@j@CsK`^UhTkuki z*VGdHr^qB)dChmPu{~DQ-nE5B)D~Dp<<;J$ABxS!x3E@6k8ElfYi-c?)EECU>xO4U zJ#b0j)=&J3Khy&jQNIdq5Yi6t3%CZZgJ1bod>h}+cXWW8;1;+I?(nPmjr?YQ3oq3V zHjOlg9LkDnM~yarDi?iAv+r&8m%Gf{F3-5L8%RT2+zn(P3pr@Rui@A7>-hB@I3AD% z`w*cx0#MIyz)=8fX!>Z4O|^pKg@Z(<@q*LdTx1-tHP*EXuA{g0-A)gpxVoVc&*ng@ zo94%{#>GL8>ZaO89Ci^x23AeX&;{?$%r)pn#INkqE6@{qV=V~1_)V*bER3JvG~hs3 zb3>g8JC0a}1i~f2LSi5c7Mcg~TUWsle%qh;7*K|N3>Xe0`0f18E*}F%!B}kO!)O@8 zKhM9=2IVl0-@(857krGau?b0@%$xlI3sP#>-wNgcIFNsdf0@tj9!302qt!F15XZz; z!8Cr?Dwx5)`e%gX2!!OqJpMKQjc!8n;ZUnii(oPTI=>rtil?}^{DmafjR2ioCeJin*#AK=;Z(Lb;_!fC|uRd720VfR?ff;ccF2A8n61Lp}1=JOx( zINZ>~K1fh#I_(1sF$>{ScM-D)6SIUrh>5wuXNwZ^4AwJn8Goo-YMz5@@M;WKz?E&JPbb< zr27c`j6cQys|_B-;gj$Gw(yAs&99*lr0ME~=!%mVB+eqiJ&6-1@EKtOpXJZ>@XFx@ z_yhbA#PdJ!7x?pn*FFAkG#36%2Rvj|OyxUMEfoF?f5F;FaKHukyA580*ZCj$i^72P zLSb*#h6U1Xct_L=Jp$T-D3?zfdV8V_J0S}U4q`<_c zhK3f=su3de`FMfH&i*KKLvfc=aNCnIndeaT2N z3U?Di#zKEm4o2&7hDcpalc`?YXvDu;Dyjv@^(}%mf-RYv&WOPu`Kc8RO|_Pt5T3yO zA;9o=dJbkhsW1N`{c)a?Mc|yNo{O!&yJFu2ya;V^$|JCMZ zADJvBOAL~bztBS)St>yPD@{8^h}4l~7K4v0N5Dqdz!9h%hE*UroHQU{i$I?)B}i70 zrk*AaIg%WOfE@z%=0NWB(LHS%vW{%{UE>GMjUD*xkmUN6R&86!30NzTZe} zC+Ao2b76nH$W)C5!?Ng!mO5^bQ7`xuc#}y8L=~qE5jJ{S zn}2^>*!t{rbTJ$pauSSB3;%j-+L4P%yd$=XT!MhlDsm|Tz7|VWbW~EBdp2H9uD~;e zd=3G>Rpd$p{LRC1S9sIH&<=8~FrKT)H3$SC5GZ_HZ~hp>OR>bYDXMCcKy5+|q1$d>8pzH&L%65XNU)ZtWrW zitB}y-58%J*o_HsQ!G(%av!9$WkcCg zc0zu`Km_X%d=SA$5Nt!R-7LDPn94DY!sbk~IS~Z=L|D$eJ9o)NMw<6kn{faI$19sF z#e9+C>d_`4tHo9PTGU#PUG{FS&HThs;b4yyoSiB#K0d{X-i;tz^$Y_oEL7WqT zW4PGS$0S?CUQ9Q^maeC$4n!m@cLf|exk0&6*vs#r+$j&rlk!3!34uWfBqNa0LHSU= zlpp1fKq>+o5%fk-DG>ZWjqY0PZj0KrMk=N|(qoYP&qG26iSn<7lLXGK1O_881cCh3R0fqvWl`A_o(Kg96e6HUpaubRc+5IDDNZZPu6<`DRlNBB zbhZIiM3vyxj4DQ8=qjodfg$p4p?^P|F>rlP_w9>F*RzQIfKB$tH&suNF@Z^ zEEk@jp0vKOm|7xUFuMzs5JIDtAz)Z5fP>Kz1H5g3O6p2~9( zcuJt>|7$nFy`?^;4hq`s69mSuq7ET2;m@?&XM%S7oH~lYL_R!z1-M**JT6c7}cKeaKDrmQh)FtXC>N52+bp?S(5a1C&2uwv_8UoYT zP`^;usOwm}-JotFFarVXxN@EKU2RWWb;8_IP5ZEBl^6#a7b|y=88i02tXVTepE>xxQ4!VFYMBo_&mUZb4x|r5tktXiW#k7n_1wGuVLDxQjr9n0Q0G9YaOoODy z&~@}!K+_F$BLd42cn*OTf~>DZIMc?$EOkXzwW~bLn|PejoxkT+$(A0OHvfb!ptC++QtF7Sc~yX5W+I>|4`LF9HK- zJZNiqY?!b64=115NTHt*60(=QUztrACi4ZW6LN3W+h&>QJZ z^k#Ysy_McZZ>OK9U!Zp&fbEAZ2y8>(c?9s+od~>)z%B${Ltr-oc(r~LfwvLBi}Skz zw4L-z^vm=s^e*~U`ZfA>dN=(By@%dQze&GE<7V$8a1eo`2z-seNd*3dzy$<;M&Jel zw-KZfr5yye~B60!!@Ko67kw< zkZivfUiZ_n?TwDHJ?Z#Vq+`25GVWe<{Kx66y&+@8)T1IYFBl|G+zXk%b+EgSR5iy6 z2}I^!Ldr__4eQZAE+YEkes5nf#=W@px6Z#V##!>$%v%B0Q|>1bx7Y8Npjt8N7ZI5^43bIzD5Fvu z8`E)`89ujXim^iIrijp9gJko)5W27G_;<6fr}kqAk%qSnk}3D1;cuONzr(2~Um3h- zEJTy{-FN+A#VK16tNs79{^-Rhu;P}Zh}V1fQ!GYzTBD3Jo$@CWpP%&yo!}LSo3k1GI;1~j5bua^%fg%Ao=yKw|6A*Q2{8#G! zca1^2i1Y|2}t zavXzw(GF%jGl7}NOhVuX1b#%|A_A8>n1`4tA^|@kaQVIy5Ik>V*^WDR5ipy1R3Kmu zGnbji%trtR=&mC03j)_Vn8%m}A_3PC&R@UZY9*+l@8t(>cTS;hseFdP2_SzUl`EN5 zA^|wAc&lqJMqQfO@%Tv*P!I85$7~h=t!Fkc8yV~_-$CFv1PKH|2eXCQN`x`n5yTa3 zNSs>(sr#y7gX*?64_Ygp3y~|-Q}mN@^@$z_CYe{6JpwJg>e{``n`Wj!20^xqDgMtq z_2sv(cXBtrYkt4Sd?WyRpENDz1ur|!v2w8&1~;LUxQ@&-)OP^^&>pLPpauogJ8Wy)cg&SnSUc{_lz6$NF?|ZSr~urGp<2u2A?>#y0i|M{7|vdPLg zg;J1wEW(i;sxkYXt(crB$C-X{8l}Rbb=fpF3**i7!`0jvbF+4uXRb zEI<%5q7*?)dr+s&SrLtu;%0}TH<5Gh1(sEEh~-`(%^>wLb;zGpvVaTboS`u?7f zPuau5^Ti03bUy#mI~A#S_5THXTzK9cN9tT~c+MQBJ0LLPYxW!Ac`brEeCS(@kHra= zfb3UYlG{iNBmTvn`$I;YXD^71C_}Kkn-Mej#P52@46#RWg8iAjE&%Gyw`YH4Z-{^@ z5k3xV@hXBEqyuM7>qM=~tKa~K^HzG{2*+}qK#>8#5uF_IYX5NJ?-AkpaLxiEy?K$G z3+E~#QiWi37a}1W>8Eccn*j;VTqkQdA1+V;)SHja1#!Vd7>8{_6M`cJ*K3p+rJ%Z_ z2r(i_*xUcT>&5luVg%YI;Rp_nj9)UxZ+^g|#mTuifwo!%ALtq_wJ=)2Gq3L1cgup3 zk~2pIdy4>Z12{1%2#W+8 z)2yq-B~(m8i8I%pH!Npj@zFo=viZDS3qD7IYvpuZ6oF(K$KphBT&1oj0J9Plsx#oy z0zI$iG~<2T>Lz@00Yj;69NkclOD~RX#Z_DynlwTgtfZQ8Ej4E3qJMY0U!q!*rb*SP zqcfC=LYdBZO>}C4Ix$)vpPr)Ds8ZzVnpEuswbGzW(AE|Tpv%NRs;GF&h>ztS#50Dg z=Nh<11bGAzf>YbMCa#&ojGl(zN(6B(i$NmCXI-q1QFI=;z-KUuTgM7TM8uITHjNUB zn+j(t?s}x4u}4KlYiK34Ep=jf1#S{?d^Is*$Cp_a|P6;ci~}$Dc)MZha_9@h(-Q+!&GDS zm|_z?3?Y{0jQI1`Vjt#XULnbx`Ct&PdKnl73G7?{;n6Ja2@coPxtppb+|%4r1m`38 zD1wh+WsodFB!&i-nrmWN26P42-rMsX+-hzOf(sFR96_9D7LqIx0TlK7Q*<_Q+j;}H zoqL{p0l}vbT!i3a3~taRD+&*BFB5j$E8H%jI8hBQomk)mja8P?=m3%w&GaAe*Gi&q zW;sWRw~udVSY%v+sLU?q_F@r_!MnkArs9dX9_iT9906ErLtV`w zsVqFAx8k#%9kzw{?XEl<6>S?6E5|tKM%T8OFlA<3iiHBgsd7R>^0pXUyuyNHTYO*q zJyB^@_OmTfxTw}(-O__IH6qX2`t|MgIzAqiUyRG=;bT*s<>?O&OezshJoA9y2q(gu z2*JhZ;|Ucmb(@FF&{q&uL<8|4(TvN_KSInT9>X<1pT(u-R}$^SYGN&}xw#D&o8OD; zP9DUC<-a9P;llD~0KnA)opAB^AP|bH+$G@ha5=bCd_E||Rndll5x|5?#JA!S@e9Bc zU@b1k^cvVJav1{gFRsFC^$)y-;1ct3UhXyS^e6z^P9&SI* z@5378P3|pj2DguU$E-)NoIQh834+TIe0B{t3*6@3=MLa9H#i+^HoqCcsqLrEw8Wp!p6pA6=qouGpYHoRmJB+392=|#V=Y@)a zc)<@@_ssTVn6~FcP95dG5Se0X-p}GDJN!_z}5dXQAtirGl6UGmv`RN-Q>g+6S)3< zA=5KdU?b*=z>W9cCAUJ07Trvot$DwrJUxfbM$8w1I9c<*AVg;)W{E(Ya`|7BlV{^9 z4js6gx?r34ZjiM41TMF z1_!$v*?H_!_^k{}@p~CM*sbi#_)QG^*pJv_?2q{U3zyj|>@Vzf_6B>4y@TJv;KI3a z9{3#$zFYto%!T6jF!bf3xPI8H8p$oj?@u_2HSi7mJ_Hw=zBW-dF*b6Wc$)+prH$IA zpUnW9B%5R#olTidh0QPG$&fU(_&fCt{&fhNAuF7tb-88$IcC+o~+AXnLW4F$3gWV>(Eq2@Np10d! z_m-dr5$Bv&k9&$Y9_?6=c$J35i9B)d1#6jXHkw}~+UJ|K9CJC4Hm8c|YiAK_2k}k=T z(uBp z-RV)Mg-%a6J>|5@sm-a~X|>Z9r;nVDI9+wNa}IOv=RCx@(z(HTp7W#53!EQ!e$si7 z^M2<~oIiCw;{3VuDd&sMSDmjp|LT0x#nHvd#oI;WlH@YXWu!~9ORLLxmx(S@U7mJX z?(%}mYc8imt`>t}9*FyKZvb;=0Xszw5iM@3|gu zJ?eVQ^|TWb93`>^LGn$3w8^2le!hTJ>WLg zZJyg>ZVTO>a9iQF#ciA0^KLubcDlXnw#)4`w*zh;x_#_+(Ct&VBW|C&ec^V@?Tp(M zcSrXS_d)K%+-u#Zxi55I;=a^)bcEZ*o8Ee$m6-BfulVBgrG#Bh@3_ zBhw?>W0J=-kC`5`J?45W@mT7y%wxI7c8^^i`#s+CING`tf$DUt#{>$^U=ULD5o>zb>8*fjoz)^odk@tWT3qi_bWp2|jaup7dGiv)X5^&w8INKHGer_u1j|rq4N_i$1q} zfiLMx``Y^2`#Shae7${TzA?UX-+12y-~PS>eFyob_@?ez`B6V0b2vM2kZ=ZIbc`7YXJuXz6>}X@O8kq0ha@= z1pE?kJ>W)QOW>5ixq%A;9}j#o@ae#30-p_hF7SoG{eg!Aj|6@ecr@^bz>9%D1^yg( zHSk&x5kv;jL2Qs~kb974kati_kSZuWC^INKC^u+$(9=PygVqME584>CBj}}|SAt#* zIu!I>(Dh*F;OJm^aC~q=uqwDPxGZ=?a9!|%;AO$fgI5N(2d@s^75sYe8^L>n-wJ*w z_~YP1!AF8W4?Y!qI{0kx`QYC|xDdAxj}WgApOAzQRfr~JKuA(ZR!DBh;E?HteIayb=*yuWgkB7D4hsm23X2Vk z4@(SFhxHFj3d;-24;va*999~p532|p7S?B0R_ZGCka|n~q=C|4X@WFG znl8 zr_!&aXQdaU7p0e_SEbivl#G@!GENpCi;~64;$?|4wXB~kOO`7eA}f>?%SvTcGLvkS z>;c(WS%YkX>=D^i*$mli*<9HY*|W0eWGiK>W$R=cWt(MtWbes7lO2;CmwhceB|9xU zC%YiK5l)6n!rj6>!o9-%!-K*@!=>Sx@NMC5hJPG>BK+I%Q{kt>&xQXGekuIt2pB;{ zuo1QqeIg_gE)nh#o)NJTgCoi!8Y9{xUX1u8;&{aO5oaSVL|lxx9C0(^PG8WM>dW@E z>6_NKuJ5|O-}e2n@72E7``+w(Cz6ijBJCm_A|;W2kpYoGk)e^#MQ)7T9Jw{}`KZdM z+Nd#6W1||QzK*&ObuH>f)a_^@nv7UYp7s`jqi{+JagS<*!BX5;YkWZFB zEa&An;>b8joJX8joKKv8Tv%LqTx48KoII{LZfqQin;Z9N+`_mg;#S11j9V4g9`}0O z`*BC&j>a8}I}!J7+^M*WahKz+#$AuQ8Fwe1h?mD##LtO;IsUW)C>#_{3Ri`P!dv01 zkSjEbBt?oMU6H9MR_GNKis6cC#Yn|y#RG~7ig}8yiq{l-6>lr{D?U(sr1(T}Nb$Ae zg5sj$vf`@Zy5gqdPJ&&6LxNL+Yl3@%SAuVXe}X1qRKnDRjS250e4FrN!o`G336~RY zCfrK6lW3P{pV%kSG0`{CFVR0SFflqYCNVZKF0o(Yz{KRl)WqUMZDLtsW#Vupr*u;K zE5npBWrQ+HsZc7F8sz|GlG3Q0tX!acTDeU5oN}ddvvP}at8%;YfbyvFJLSKWrjAYuc&sb_Nd-ey{$T^I-&YTby9Uo^}Xth>YVDD>W1pJnovVEt>)CW zY7e!i+Dq-D4#gEuWNI98Rx8zNb%r`qou$rEYt=fnUR|!PR*zKIs>i4wQa_@es-CW% zsa~LdR^6^%tzN6%px&c?l-Uhp#FpV=l3t{U)=wL{$KPz*8h0_Zw9mu zm^xtkfSCj44D=ruIWT%)?7;YeI|l9@_}0LE1K&*=oK%)nku)r6MADh0t4Y_AeoeYH zsCCfPLDL7#95g4HNp?wgOZG_iPJTc6^W-m*k0qZ-8J;pGWo$}AN>j>}RFF!h(y3hP z{M4nX%Tkx8u1xbw>zk%XQ>JOs2BZy2%TCKn%TFszD@rR#Ye-w1){*u>+L5#qY3I|f zq+Lt9k#;+sNViG1Pj^grN_R8BOOw4#F#|$3AI_ea{Z#gn>}Rrx2Yxef+9oajx4`yG_VRB+}R5>X* zxjDL=5joX4BXeqV>T+6hCge=cnUeEJ4$7IE^JLD-ob@@Ia<=9?pYvkQ?wq|jZ|A&| z^Ipz@obPk{ZEw3=IEUz-pkXMyw%B#)LrRC}hLq>K7 z$*<3E&7Y7zIsf5&K7U>QTlwemujJn@uqkja@GA%`2q};jL>I&s#1|wMs0vaFatm|? z!wZZBH3g#z>I)hRnhVAiOek1cu)pAB!Nr2>g><2RVNhXcp{%fPVRWIqP*JEX)D#XV z98{QESW!5<&{$YgII8f0!m)*oh0TTI3MUpmRQO0CDtxSPVc`>ni-tN5^&RRzG;nCh z(6vK%4Ba{O<)N<@B^Bir4Jj%pDk?fqbhPNpqOXd+F0L+aEN&`pDIQ;Zql7K7DX}YY zD0!@8S;_K}6(wz@(o#ifVyUXMU+M1B1Eq&bkCYxQJyv?M^i=8T(sQL3O0SmQ(b{QU zwH{h;t)Dhf8=;NT#%klV3T>h`Nt=b=s#BpIt~F|Fv}3emwT;?lZL9WS?JVt6+GX13 zw5zlo+Kt-H+HKkwv@dFRYxippYmaG9Xus8-(w^7;puMF1S$kD`N5|@1b$+@)U5HMq zi_pdE5_M`_KivRbk}gYEs2ipmsjJo1=^AuRy2-kSbx1c&H$yi|w@|lKw??;Fw@vqg zZl~^b-5a_$b^CPtb)V?I(0#AFsJpDYs=Kbcsi*X;-d1m~chF1pUix5ttX{3}uTRpa z=+pH>^o9CjeW_lrFV|P=>-4Sqsrotk`T7O=C-h78%k;|Be1T{rCDa`g8gV`m6doWp-r_Wlm+TWgcZ-WwNsVW!YtAWtC-yvZ^vu+32z{ zW%XqbmQ5|2Q8ue=PTBmj1!Yf^Eh<}5wzRChY)jexvJ+)LmviNT<(l&R@&)CK%a@n0 zE#Fc8YWeQ+z2$G0A1ME*{9yUv^3N)4Dncs;R%BKTtthF`Rg_l@s~AyHRnbr}u3}=v zLluuy%&eGGF~4F##p4ybD$Z28R{B+jR;nvADhF2YC?k-l*AI^H$9}rfgHGNoOiERhmwiE}5>HZgy^JK=H4Q Mx7D5oVY>Z)02`0ing9R* literal 0 HcmV?d00001 diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/HTJSGeneratorCode.xcscheme b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/HTJSGeneratorCode.xcscheme new file mode 100644 index 0000000..4aba1fa --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/HTJSGeneratorCode.xcscheme @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/xcschememanagement.plist b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..7062540 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/xcuserdata/netease.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + HTJSGeneratorCode.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + E6AFD0021C1E99040027F340 + + primary + + + E6AFD01B1C1E99040027F340 + + primary + + + E6AFD0261C1E99040027F340 + + primary + + + + + diff --git a/test/HTTestResources/HTJSGeneratorCode/AppDelegate.h b/test/HTTestResources/HTJSGeneratorCode/AppDelegate.h new file mode 100644 index 0000000..45df665 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/AppDelegate.h @@ -0,0 +1,17 @@ +// +// AppDelegate.h +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/test/HTTestResources/HTJSGeneratorCode/AppDelegate.m b/test/HTTestResources/HTJSGeneratorCode/AppDelegate.m new file mode 100644 index 0000000..184e6d2 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/AppDelegate.m @@ -0,0 +1,45 @@ +// +// AppDelegate.m +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. 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/test/HTTestResources/HTJSGeneratorCode/Assets.xcassets/AppIcon.appiconset/Contents.json b/test/HTTestResources/HTJSGeneratorCode/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/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/test/HTTestResources/HTJSGeneratorCode/Base.lproj/LaunchScreen.storyboard b/test/HTTestResources/HTJSGeneratorCode/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..2e721e1 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/HTTestResources/HTJSGeneratorCode/Base.lproj/Main.storyboard b/test/HTTestResources/HTJSGeneratorCode/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f56d2f3 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Base.lproj/Main.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/HTTestResources/HTJSGeneratorCode/Controllers/Test/TestViewController.h b/test/HTTestResources/HTJSGeneratorCode/Controllers/Test/TestViewController.h new file mode 100644 index 0000000..c2087e7 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Controllers/Test/TestViewController.h @@ -0,0 +1,13 @@ +// +// TestViewController.h +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/21. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface TestViewController : UIViewController + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/Controllers/Test/TestViewController.m b/test/HTTestResources/HTJSGeneratorCode/Controllers/Test/TestViewController.m new file mode 100644 index 0000000..3e20ad5 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Controllers/Test/TestViewController.m @@ -0,0 +1,13 @@ +// +// TestViewController.m +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/21. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import "TestViewController.h" + +@implementation TestViewController + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/Info.plist b/test/HTTestResources/HTJSGeneratorCode/Info.plist new file mode 100644 index 0000000..6905cc6 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/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/test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel.h b/test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel.h new file mode 100644 index 0000000..fa8d336 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel.h @@ -0,0 +1,13 @@ +// +// HTTestModel.h +// HTSingleCodeGenerator +// +// Created by Wangliping on 15/12/11. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface HTTestModel : NSObject + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel.m b/test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel.m new file mode 100644 index 0000000..f83c855 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel.m @@ -0,0 +1,13 @@ +// +// HTTestModel.m +// HTSingleCodeGenerator +// +// Created by Wangliping on 15/12/11. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import "HTTestModel.h" + +@implementation HTTestModel + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel1.h b/test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel1.h new file mode 100644 index 0000000..fa8d336 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel1.h @@ -0,0 +1,13 @@ +// +// HTTestModel.h +// HTSingleCodeGenerator +// +// Created by Wangliping on 15/12/11. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface HTTestModel : NSObject + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel1.m b/test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel1.m new file mode 100644 index 0000000..f83c855 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Models/HTTestModel1.m @@ -0,0 +1,13 @@ +// +// HTTestModel.m +// HTSingleCodeGenerator +// +// Created by Wangliping on 15/12/11. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import "HTTestModel.h" + +@implementation HTTestModel + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/Requests/HTTestRequest.h b/test/HTTestResources/HTJSGeneratorCode/Requests/HTTestRequest.h new file mode 100644 index 0000000..6e5ce82 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Requests/HTTestRequest.h @@ -0,0 +1,13 @@ +// +// HTTestRequest.h +// HTSingleCodeGenerator +// +// Created by Wangliping on 15/12/11. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface HTTestRequest : NSObject + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/Requests/HTTestRequest.m b/test/HTTestResources/HTJSGeneratorCode/Requests/HTTestRequest.m new file mode 100644 index 0000000..7b511ca --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Requests/HTTestRequest.m @@ -0,0 +1,13 @@ +// +// HTTestRequest.m +// HTSingleCodeGenerator +// +// Created by Wangliping on 15/12/11. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import "HTTestRequest.h" + +@implementation HTTestRequest + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController.h b/test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController.h new file mode 100644 index 0000000..52d6222 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController.h @@ -0,0 +1,13 @@ +// +// TestViewController.h +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/17. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface TestViewController : UIViewController + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController.m b/test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController.m new file mode 100644 index 0000000..5979945 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController.m @@ -0,0 +1,37 @@ +// +// TestViewController.m +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/17. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import "TestViewController.h" + +@interface TestViewController () + +@end + +@implementation TestViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController1.h b/test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController1.h new file mode 100644 index 0000000..52d6222 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController1.h @@ -0,0 +1,13 @@ +// +// TestViewController.h +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/17. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface TestViewController : UIViewController + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController1.m b/test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController1.m new file mode 100644 index 0000000..5979945 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/Requests/TestViewController1.m @@ -0,0 +1,37 @@ +// +// TestViewController.m +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/17. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import "TestViewController.h" + +@interface TestViewController () + +@end + +@implementation TestViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/ViewController.h b/test/HTTestResources/HTJSGeneratorCode/ViewController.h new file mode 100644 index 0000000..c4f93a3 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/ViewController.h @@ -0,0 +1,15 @@ +// +// ViewController.h +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface ViewController : UIViewController + + +@end + diff --git a/test/HTTestResources/HTJSGeneratorCode/ViewController.m b/test/HTTestResources/HTJSGeneratorCode/ViewController.m new file mode 100644 index 0000000..0bbe8c6 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/ViewController.m @@ -0,0 +1,32 @@ +// +// ViewController.m +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import "ViewController.h" +#import "HTTestModel.h" +#import "HTTestRequest.h" + +@interface ViewController () + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. + + HTTestModel *model = [[HTTestModel alloc] init]; + NSLog(@"%@", model); +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git a/test/HTTestResources/HTJSGeneratorCode/main.m b/test/HTTestResources/HTJSGeneratorCode/main.m new file mode 100644 index 0000000..20ae3c0 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/main.m @@ -0,0 +1,16 @@ +// +// main.m +// HTJSGeneratorCode +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/test/HTTestResources/HTJSGeneratorCodeTests/HTJSGeneratorCodeTests.m b/test/HTTestResources/HTJSGeneratorCodeTests/HTJSGeneratorCodeTests.m new file mode 100644 index 0000000..e0a334c --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCodeTests/HTJSGeneratorCodeTests.m @@ -0,0 +1,39 @@ +// +// HTJSGeneratorCodeTests.m +// HTJSGeneratorCodeTests +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface HTJSGeneratorCodeTests : XCTestCase + +@end + +@implementation HTJSGeneratorCodeTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end diff --git a/test/HTTestResources/HTJSGeneratorCodeTests/Info.plist b/test/HTTestResources/HTJSGeneratorCodeTests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCodeTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/test/HTTestResources/HTJSGeneratorCodeUITests/HTJSGeneratorCodeUITests.m b/test/HTTestResources/HTJSGeneratorCodeUITests/HTJSGeneratorCodeUITests.m new file mode 100644 index 0000000..4a89e3c --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCodeUITests/HTJSGeneratorCodeUITests.m @@ -0,0 +1,40 @@ +// +// HTJSGeneratorCodeUITests.m +// HTJSGeneratorCodeUITests +// +// Created by Wangliping on 15/12/14. +// Copyright © 2015年 Netease. All rights reserved. +// + +#import + +@interface HTJSGeneratorCodeUITests : XCTestCase + +@end + +@implementation HTJSGeneratorCodeUITests + +- (void)setUp { + [super setUp]; + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + self.continueAfterFailure = NO; + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + [[[XCUIApplication alloc] init] launch]; + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +@end diff --git a/test/HTTestResources/HTJSGeneratorCodeUITests/Info.plist b/test/HTTestResources/HTJSGeneratorCodeUITests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCodeUITests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/test/HTTestResources/UpdateModels.js b/test/HTTestResources/UpdateModels.js new file mode 100644 index 0000000..5473bc8 --- /dev/null +++ b/test/HTTestResources/UpdateModels.js @@ -0,0 +1,224 @@ +// API is a bit wonky right now +var project = require('../../lib/pbxProject.js'), + fs = require('fs'), + util = require('util'), + f = util.format; + +// TODO:参数缺少时, 需要给予警告和提示. 参数的处理需要更灵活 +// node UpdateModels.js projectName groupParentPath folderParentPath +var projectName = process.argv[2]; +var groupParentPath = process.argv[3]; +var folderParentPath = process.argv[4]; +var projectPath = projectName + '.xcodeproj/project.pbxproj'; +//var projectPath = 'HTJSGeneratorCode.xcodeproj/project.pbxproj'; + +// Get Project. +var myProj = project(projectPath); + +// Debug with parseSync as it is impossible to debug async parsing. +// For release version, it is OK to use parse function. +myProj.parseSync(); +updateCode(); + +function updateCode () { + if (undefined == projectName || undefined == groupParentPath || undefined == folderParentPath || undefined == myProj) { + console.log("Please correct parameters, the command is like \r\n node UpdateModels.js projectName groupParentPath folderParentPath, please specify your own projectName, parent group path and pareng folder path"); + return; + } + + // TODO: 现在暂时不支持更换路径,即之前要删除的路径和后面要添加的路径不相同的Case. + console.log("Begin to update project " + projectName + ", Models and Requests will be added under group " + groupParentPath); + + // 固定添加Models和Requests, 不需要参数配置 + var autoGroupNames = ["Models", "Requests"]; + autoGroupNames.forEach(function (groupName){ + console.log("Begin to check folder " + groupName); + + // 获取parent Group Key 和 要处理的Group Key + var absoluteGroupPath = groupParentPath + "/" + groupName; + var parentGroupKey = findGroupByAbsolutePath(groupParentPath); + var groupKey = findGroupByAbsolutePath(absoluteGroupPath); + if (undefined == groupKey) { + // group不存在, 新建Group. GroupName与Path相同. + console.log("Group " + groupName + " does not exist, create group " + groupName + " under group " + groupParentPath); + groupKey = myProj.pbxCreateGroup(groupName, groupName); + + // Add new created groups into parent group. + // 将Group加到parent Group中 + myProj.addToPbxGroup(groupKey, parentGroupKey, {}); + } else { + // group存在, 删除其中的所有文件. + console.log("Group " + groupName + " already exists, remove all files in this group first."); + removeFilesInGroup(groupName); + } + + // 获取目录下的所有头文件和可执行文件 + var folderPath = folderParentPath + "/" + groupName; + var headerFiles = headerFilesInFilePath(folderPath); + var sourceFiles = sourceFilesInFilePath(folderPath); + + // 将头文件添加到group中. + headerFiles.forEach(function(headerFile) { + myProj.addHeaderFile(headerFile, {}, groupKey); + }); + + // 将源文件添加到group中 + sourceFiles.forEach(function(sourceFile) { + myProj.addSourceFile(sourceFile, {}, groupKey); + }); + + console.log("Add Source Files and Header Files from Path " + folderPath + " to group " + absoluteGroupPath + " successfully"); + }); + + + // 将内容写回到工程文件中. + fs.writeFileSync(projectPath, myProj.writeSync()); + console.log('Project ' + projectPath + " is updated successfully !"); +} + +// 根据完整路径获取到对应的Group. +function findGroupByAbsolutePath(fullPath) { + var pathList = fullPath.split('/'); + if (pathList.length == 0) { + return; + } + + var root = pathList[0]; + var groupKey = myProj.findPBXGroupKey({ path: root}); + pathList.splice(0, 1); + while (pathList.length > 0 && undefined != groupKey) { + root = pathList[0]; + groupKey = myProj.findPBXGroupKeyInParentGroup({path: root}, groupKey); + pathList.splice(0, 1); + } + + // TODO: 下面的代码只用校验是否能够取到正确的Group. + if (undefined != groupKey) { + var group = myProj.getPBXGroupByKey(groupKey); + } + + return groupKey; +} + +// removeFilesInGroup已经OK. +// Done. 根据FileRef的UUID从Project的File Reference Section中删除. +function removeFromPbxFileReferenceSectionWithKey (fileRef) { + for (i in myProj.pbxFileReferenceSection()) { + if (i == fileRef) { + delete myProj.pbxFileReferenceSection()[i]; + break; + } + } + var commentKey = f("%s_comment", fileRef); + if (myProj.pbxFileReferenceSection()[commentKey] != undefined) { + delete myProj.pbxFileReferenceSection()[commentKey]; + } +} + +// TODO: 这里必须返回BuildFileUUID. 否则的话,无法从BuildPhase中删除. +function removeFromPbxBuildFileSectionWithKey (fileRef) { + var uuid; + var buildFileUUID; + for (uuid in myProj.pbxBuildFileSection()) { + var buildFile = myProj.pbxBuildFileSection()[uuid]; + if (buildFile.fileRef == fileRef) { + // TODO: delete buildFile没有从这个字典中真正删除这个文件. + //delete buildFile; + delete myProj.pbxBuildFileSection()[uuid]; + buildFileUUID = uuid; + break; + } + } + + var commentKey = f("%s_comment", fileRef); + if (myProj.pbxBuildFileSection()[commentKey] != undefined) { + delete myProj.pbxBuildFileSection()[commentKey]; + } + + return buildFileUUID; +} + +// Note: 这里只取了firstTarget, 理论上所有的Target都需要获取. 这里所有的参数都是fileRef的uuid. +// Note: File Reference里面的uuid和BuildPhase中的uuid不相同. 所以这个方法不正确. +function removeFromPbxSourcesBuildPhaseWithKey (fileRef) { + // var target = myProj.getFirstTarget(); + // TODO: 用FirstTarget会抛出异常,原因未知. + var target = undefined; + var sources = myProj.pbxSourcesBuildPhaseObj(target), i; + for (i in sources.files) { + if (sources.files[i].value == fileRef) { + sources.files.splice(i, 1); + break; + } + } +} + +function removeFilesInGroup(groupName) { + var groupKey = myProj.findPBXGroupKey({ path: groupName}); + var group = myProj.getPBXGroupByKey(groupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + var uuid = file.value; + if (uuid != undefined) { + removeFromPbxFileReferenceSectionWithKey(uuid); // PBXFileReference + } + + // 从当前Group中删除. TODO: 这里删除了后不可以继续遍历了. + //groupChildren.splice(i, 1); + // TODO: 如果是子Group, 还要继续删除. 暂时不考虑文件夹. + //myProj.removeFromPbxGroup(file, group); // PBXGroup + + // 从Build File Ref中删除 + var buildFileUUID = removeFromPbxBuildFileSectionWithKey(uuid); + + // 从Build Phase中删除 + if (undefined != buildFileUUID) { + removeFromPbxSourcesBuildPhaseWithKey(buildFileUUID); + } + } + + // 删除groupChildren. + groupChildren.splice(0, groupChildren.length); + } +} + +// 找到所有的头文件. +function headerFilesInFilePath(root) { + var res = []; + var files = fs.readdirSync(root); + files.forEach(function(file) { + var extensionFileName = GetExtensionFileName(file); + if ("h" == extensionFileName) { + res.push(file); + } + }); + + return res; +} + +// 找到所有的源文件 +// TODO: 性能可以改进, 可以一次性找出头文件和源文件,不需要每次都遍历一遍. +function sourceFilesInFilePath(root) { + var res = []; + var files = fs.readdirSync(root); + files.forEach(function(file) { + var extensionFileName = GetExtensionFileName(file); + if ("m" == extensionFileName) { + res.push(file); + } + }); + + return res; +} + +function GetExtensionFileName(pathfilename) +{ + var reg = /(\\+)/g; + var pfn = pathfilename.replace(reg, "#"); + var arrpfn = pfn.split("#"); + var fn = arrpfn[arrpfn.length - 1]; + var arrfn = fn.split("."); + return arrfn[arrfn.length - 1]; +} \ No newline at end of file diff --git a/test/HTTestResources/UpdateNEIProject.js b/test/HTTestResources/UpdateNEIProject.js new file mode 100644 index 0000000..164747e --- /dev/null +++ b/test/HTTestResources/UpdateNEIProject.js @@ -0,0 +1,451 @@ +// 这个JS直接引用xcode, 所有额外添加的东西都加在这个JS文件中. +var xcode = require('xcode'), + fs = require('fs'), + util = require('util'), + COMMENT_KEY = /_comment$/, + f = util.format; + +// TODO:参数缺少时, 需要给予警告和提示. 参数的处理需要更灵活 +// node UpdateModels.js projectName groupParentPath folderParentPath +var projectName = process.argv[2]; +var groupParentPath = process.argv[3]; +var folderParentPath = process.argv[4]; +var projectPath = projectName + '.xcodeproj/project.pbxproj'; +//var projectPath = 'HTJSGeneratorCode.xcodeproj/project.pbxproj'; + +// Get Project. +var myProj = xcode.project(projectPath); + +// Debug with parseSync as it is impossible to debug async parsing. +// For release version, it is OK to use parse function. +myProj.parseSync(); +updateCode(); + +function updateCode () { + if (undefined == projectName || undefined == groupParentPath || undefined == folderParentPath || undefined == myProj) { + console.log("Please correct parameters, the command is like \r\n node UpdateModels.js projectName groupParentPath folderParentPath, please specify your own projectName, parent group path and pareng folder path"); + return; + } + + // TODO: 现在暂时不支持更换路径,即之前要删除的路径和后面要添加的路径不相同的Case. + console.log("Begin to update project " + projectName + ", Models and Requests will be added under group " + groupParentPath); + + // 固定添加Models和Requests, 不需要参数配置 + var autoGroupNames = ["Models", "Requests"]; + autoGroupNames.forEach(function (groupName){ + console.log("Begin to check folder " + groupName); + + // 获取parent Group Key 和 要处理的Group Key + var absoluteGroupPath = groupParentPath + "/" + groupName; + var parentGroupKey = findGroupByAbsolutePath(groupParentPath); + var groupKey = findGroupByAbsolutePath(absoluteGroupPath); + if (undefined == groupKey) { + // group不存在, 新建Group. GroupName与Path相同. + console.log("Group " + groupName + " does not exist, create group " + groupName + " under group " + groupParentPath); + groupKey = myProj.pbxCreateGroup(groupName, groupName); + + // Add new created groups into parent group. + // 将Group加到parent Group中 + myProj.addToPbxGroup(groupKey, parentGroupKey, {}); + } else { + // group存在, 删除其中的所有文件. + console.log("Group " + groupName + " already exists, remove all files in this group first."); + removeFilesInGroup(groupName); + } + + // 获取目录下的所有头文件和可执行文件 + var folderPath = folderParentPath + "/" + groupName; + var headerFiles = headerFilesInFilePath(folderPath); + var sourceFiles = sourceFilesInFilePath(folderPath); + + // 将头文件添加到group中. + headerFiles.forEach(function(headerFile) { + myProj.addHeaderFile(headerFile, {}, groupKey); + }); + + // 将源文件添加到group中 + sourceFiles.forEach(function(sourceFile) { + myProj.addSourceFile(sourceFile, {}, groupKey); + }); + + console.log("Add Source Files and Header Files from Path " + folderPath + " to group " + absoluteGroupPath + " successfully"); + }); + + + // 将内容写回到工程文件中. + fs.writeFileSync(projectPath, myProj.writeSync()); + console.log('Project ' + projectPath + " is updated successfully !"); +} + +// 根据完整路径获取到对应的Group. +function findGroupByAbsolutePath(fullPath) { + var pathList = fullPath.split('/'); + if (pathList.length == 0) { + return; + } + + var root = pathList[0]; + var groupKey = myProj.findPBXGroupKey({ path: root}); + pathList.splice(0, 1); + while (pathList.length > 0 && undefined != groupKey) { + root = pathList[0]; + groupKey = findPBXGroupKeyInParentGroup({path: root}, groupKey); + pathList.splice(0, 1); + } + + // TODO: 下面的代码只用校验是否能够取到正确的Group. + if (undefined != groupKey) { + var group = myProj.getPBXGroupByKey(groupKey); + } + + return groupKey; +} + +// removeFilesInGroup已经OK. +// Done. 根据FileRef的UUID从Project的File Reference Section中删除. +function removeFromPbxFileReferenceSectionWithKey (fileRef) { + for (i in myProj.pbxFileReferenceSection()) { + if (i == fileRef) { + delete myProj.pbxFileReferenceSection()[i]; + break; + } + } + var commentKey = f("%s_comment", fileRef); + if (myProj.pbxFileReferenceSection()[commentKey] != undefined) { + delete myProj.pbxFileReferenceSection()[commentKey]; + } +} + +// TODO: 这里必须返回BuildFileUUID. 否则的话,无法从BuildPhase中删除. +function removeFromPbxBuildFileSectionWithKey (fileRef) { + var uuid; + var buildFileUUID; + for (uuid in myProj.pbxBuildFileSection()) { + var buildFile = myProj.pbxBuildFileSection()[uuid]; + if (buildFile.fileRef == fileRef) { + // TODO: delete buildFile没有从这个字典中真正删除这个文件. + //delete buildFile; + delete myProj.pbxBuildFileSection()[uuid]; + buildFileUUID = uuid; + break; + } + } + + var commentKey = f("%s_comment", fileRef); + if (myProj.pbxBuildFileSection()[commentKey] != undefined) { + delete myProj.pbxBuildFileSection()[commentKey]; + } + + return buildFileUUID; +} + +// Note: 这里只取了firstTarget, 理论上所有的Target都需要获取. 这里所有的参数都是fileRef的uuid. +// Note: File Reference里面的uuid和BuildPhase中的uuid不相同. 所以这个方法不正确. +function removeFromPbxSourcesBuildPhaseWithKey (fileRef) { + // var target = myProj.getFirstTarget(); + // TODO: 用FirstTarget会抛出异常,原因未知. + var target = undefined; + var sources = myProj.pbxSourcesBuildPhaseObj(target), i; + for (i in sources.files) { + if (sources.files[i].value == fileRef) { + sources.files.splice(i, 1); + break; + } + } +} + +function removeFilesInGroup(groupName) { + var groupKey = myProj.findPBXGroupKey({ path: groupName}); + var group = myProj.getPBXGroupByKey(groupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + var uuid = file.value; + if (uuid != undefined) { + removeFromPbxFileReferenceSectionWithKey(uuid); // PBXFileReference + } + + // 从当前Group中删除. TODO: 这里删除了后不可以继续遍历了. + //groupChildren.splice(i, 1); + // TODO: 如果是子Group, 还要继续删除. 暂时不考虑文件夹. + //myProj.removeFromPbxGroup(file, group); // PBXGroup + + // 从Build File Ref中删除 + var buildFileUUID = removeFromPbxBuildFileSectionWithKey(uuid); + + // 从Build Phase中删除 + if (undefined != buildFileUUID) { + removeFromPbxSourcesBuildPhaseWithKey(buildFileUUID); + } + } + + // 删除groupChildren. + groupChildren.splice(0, groupChildren.length); + } +} + +// 找到所有的头文件. +function headerFilesInFilePath(root) { + var res = []; + var files = fs.readdirSync(root); + files.forEach(function(file) { + var extensionFileName = GetExtensionFileName(file); + if ("h" == extensionFileName) { + res.push(file); + } + }); + + return res; +} + +// 找到所有的源文件 +// TODO: 性能可以改进, 可以一次性找出头文件和源文件,不需要每次都遍历一遍. +function sourceFilesInFilePath(root) { + var res = []; + var files = fs.readdirSync(root); + files.forEach(function(file) { + var extensionFileName = GetExtensionFileName(file); + if ("m" == extensionFileName) { + res.push(file); + } + }); + + return res; +} + +function GetExtensionFileName(pathfilename) +{ + var reg = /(\\+)/g; + var pfn = pathfilename.replace(reg, "#"); + var arrpfn = pfn.split("#"); + var fn = arrpfn[arrpfn.length - 1]; + var arrfn = fn.split("."); + return arrfn[arrfn.length - 1]; +} + + + + + + + + + + + +// Projects Extension +// 这些最好添加到pbxProject.js中, 仅供当前流程使用. +function removePbxGroupByKey(groupKey) { + var section = myProj.hash.project.objects['PBXGroup'], + key, itemKey; + + for (key in section) { + // only look for comments + if (!COMMENT_KEY.test(key)) continue; + + if (key == groupKey) { + itemKey = key.split(COMMENT_KEY)[0]; + delete section[itemKey]; + } + } +} + +function removeGroupFromPbxGroup(removeGroupKey, groupKey) { + var group = myProj.getPBXGroupByKey(groupKey); + var removeGroup = myProj.getPBXGroupByKey(removeGroupKey); + if (group) { + var groupChildren = group.children, i; + for(i in groupChildren) { + if(removeGroupKey == groupChildren[i].value && removeGroup != undefined) { + groupChildren.splice(i, 1); + + clearGroup(removeGroup); + break; + } + } + } + + delete removeGroup; +} + +function clearGroup(group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + if (file.fileRef != undefined) { + myProj.removeFromPbxFileReferenceSection(file); // PBXFileReference + } + + // TODO: 如果是子Group, 还要继续删除. + myProj.removeFromPbxGroup(file, group); // PBXGroup + } +} + +function removeGroupByKey(key, parentGroupKey) { + var group = getPBXGroupByKey(key, parentGroupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + if (file.fileRef != undefined) { + myProj.removeFromPbxFileReferenceSection(file); // PBXFileReference + } + + // TODO: 如果是子Group, 还要继续删除. + myProj.removeFromPbxGroup(file, group); // PBXGroup + } + } +} + +// Remove a group and all files in this group. +function removeGroup(groupPath, parentGroupKey) { + var group = getPBXGroupByPath(groupPath, parentGroupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + if (file.fileRef != undefined) { + myProj.removeFromPbxFileReferenceSection(file); // PBXFileReference + } + + // TODO: 如果是子Group, 还要继续删除. + myProj.removeFromPbxGroup(file, group); // PBXGroup + } + } +} + + +function getPBXGroupByPath(path, parentGroupKey) { + var groups = (undefined == parentGroupKey) ? myProj.hash.project.objects['PBXGroup'] : myProj.getPBXGroupByKey(parentGroupKey); + for (var key in groups) { + var group = groups[key]; + if (group.path === path) { + return group; + } + } + + return undefined; +}; + +function getPBXGroupByKey(key, parentGroupKey) { + var groups = (undefined == parentGroupKey) ? myProj.hash.project.objects['PBXGroup'] : myProj.getPBXGroupByKey(parentGroupKey); + var group = groups[key]; + return group; +}; + +function findPBXGroupInParent(criteria, parentCriteria) { + if (undefined == parentCriteria) { + return myProj.findPBXGroupKey(criteria); + } + + var target; + var groupKey = myProj.findPBXGroupKey(parentCriteria); + var group = myProj.getPBXGroupByKey(groupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = myProj.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = childGroup; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = childGroup; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = childGroup; + break + } + } + } + + return target; +} + +function findPBXGroupKeyInParent(criteria, parentCriteria) { + if (undefined == parentCriteria) { + return myProj.findPBXGroupKey(criteria); + } + + var target; + var groupKey = myProj.findPBXGroupKey(parentCriteria); + var group = myProj.getPBXGroupByKey(groupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = myProj.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = child.value; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = child.value; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = child.value; + break + } + } + } + + return target; +} + + +function findPBXGroupKeyInParentGroup(criteria, parentGroupKey) { + var target; + var group = getPBXGroupByKey(parentGroupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = myProj.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = child.value; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = child.value; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = child.value; + break + } + } + } + + return target; +} From 6900a91c441d1b9688f5d333120e5bcb92550cd4 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Tue, 29 Dec 2015 11:01:04 +0800 Subject: [PATCH 25/28] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 205 ++++--- test/HTTestResources/AddResources.js | 531 ++++++++++++++++++ .../project.pbxproj | 35 +- .../UserInterfaceState.xcuserstate | Bin 30801 -> 31941 bytes 4 files changed, 670 insertions(+), 101 deletions(-) create mode 100644 test/HTTestResources/AddResources.js diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 5a48e1e..969f418 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,9 +2,9 @@ - + - + @@ -25,41 +25,53 @@ - - + + - + + + + + + + + + + + + + - + - + - - + + - - + + - - + + - + @@ -80,6 +92,7 @@ @@ -195,7 +208,7 @@ - + + + + @@ -337,14 +349,16 @@ false - + + - - - + + + + @@ -370,18 +384,18 @@ + + - - @@ -473,21 +487,11 @@ 2058 - - - - - - - - - - - - - - - - - - - - - - - - @@ -931,14 +946,6 @@ - - - - - - - - @@ -963,17 +970,33 @@ - + + + + + + + + + - + + + + + + + + + - + @@ -981,32 +1004,50 @@ - + - + - - + + - + - + - + - - + + + + + + + + + + + + + + + + + + + + diff --git a/test/HTTestResources/AddResources.js b/test/HTTestResources/AddResources.js new file mode 100644 index 0000000..7e020a8 --- /dev/null +++ b/test/HTTestResources/AddResources.js @@ -0,0 +1,531 @@ +// 这个JS直接引用xcode, 所有额外添加的东西都加在这个JS文件中. +//var xcode = require('xcode'), +var project = require('../../lib/pbxProject.js'), + fs = require('fs'), + util = require('util'), + COMMENT_KEY = /_comment$/, + f = util.format; + +// TODO:参数缺少时, 需要给予警告和提示. 参数的处理需要更灵活 +// node UpdateModels.js projectName groupParentPath folderParentPath +//var projectName = process.argv[2]; +//var groupParentPath = process.argv[3]; +//var folderParentPath = process.argv[4]; +var projectName = 'HTJSGeneratorCode'; +var groupParentPath = 'HTJSGeneratorCode'; +var folderParentPath = 'HTJSGeneratorCode'; +var projectPath = projectName + '.xcodeproj/project.pbxproj'; +//var projectPath = 'HTJSGeneratorCode.xcodeproj/project.pbxproj'; + +// Get Project. +//var myProj = xcode.project(projectPath); +var myProj = project(projectPath); + +// Debug with parseSync as it is impossible to debug async parsing. +// For release version, it is OK to use parse function. +myProj.parseSync(); +//updateCode(); +addResources(); + +// +//function updateCode () { +// if (undefined == projectName || undefined == groupParentPath || undefined == folderParentPath || undefined == myProj) { +// console.log("Please correct parameters, the command is like \r\n node UpdateModels.js projectName groupParentPath folderParentPath, please specify your own projectName, parent group path and pareng folder path"); +// return; +// } +// +// // TODO: 现在暂时不支持更换路径,即之前要删除的路径和后面要添加的路径不相同的Case. +// console.log("Begin to update project " + projectName + ", Models and Requests will be added under group " + groupParentPath); +// +// // 固定添加Models和Requests, 不需要参数配置 +// var autoGroupNames = ["Models", "Requests"]; +// autoGroupNames.forEach(function (groupName){ +// console.log("Begin to check folder " + groupName); +// +// // 获取parent Group Key 和 要处理的Group Key +// var absoluteGroupPath = groupParentPath + "/" + groupName; +// var parentGroupKey = findGroupByAbsolutePath(groupParentPath); +// var groupKey = findGroupByAbsolutePath(absoluteGroupPath); +// if (undefined == groupKey) { +// // group不存在, 新建Group. GroupName与Path相同. +// console.log("Group " + groupName + " does not exist, create group " + groupName + " under group " + groupParentPath); +// groupKey = myProj.pbxCreateGroup(groupName, groupName); +// +// // Add new created groups into parent group. +// // 将Group加到parent Group中 +// myProj.addToPbxGroup(groupKey, parentGroupKey, {}); +// } else { +// // group存在, 删除其中的所有文件. +// console.log("Group " + groupName + " already exists, remove all files in this group first."); +// removeFilesInGroup(groupName); +// } +// +// // 获取目录下的所有头文件和可执行文件 +// var folderPath = folderParentPath + "/" + groupName; +// var headerFiles = headerFilesInFilePath(folderPath); +// var sourceFiles = sourceFilesInFilePath(folderPath); +// +// // 将头文件添加到group中. +// headerFiles.forEach(function(headerFile) { +// myProj.addHeaderFile(headerFile, {}, groupKey); +// }); +// +// // 将源文件添加到group中 +// sourceFiles.forEach(function(sourceFile) { +// myProj.addSourceFile(sourceFile, {}, groupKey); +// }); +// +// console.log("Add Source Files and Header Files from Path " + folderPath + " to group " + absoluteGroupPath + " successfully"); +// }); +// +// +// // 将内容写回到工程文件中. +// fs.writeFileSync(projectPath, myProj.writeSync()); +// console.log('Project ' + projectPath + " is updated successfully !"); +//} + +// 根据完整路径获取到对应的Group. +function findGroupByAbsolutePath(fullPath) { + var pathList = fullPath.split('/'); + if (pathList.length == 0) { + return; + } + + var root = pathList[0]; + var groupKey = myProj.findPBXGroupKey({ path: root}); + pathList.splice(0, 1); + while (pathList.length > 0 && undefined != groupKey) { + root = pathList[0]; + groupKey = findPBXGroupKeyInParentGroup({path: root}, groupKey); + pathList.splice(0, 1); + } + + // TODO: 下面的代码只用校验是否能够取到正确的Group. + if (undefined != groupKey) { + var group = myProj.getPBXGroupByKey(groupKey); + } + + return groupKey; +} + +// removeFilesInGroup已经OK. +// Done. 根据FileRef的UUID从Project的File Reference Section中删除. +function removeFromPbxFileReferenceSectionWithKey (fileRef) { + for (i in myProj.pbxFileReferenceSection()) { + if (i == fileRef) { + delete myProj.pbxFileReferenceSection()[i]; + break; + } + } + var commentKey = f("%s_comment", fileRef); + if (myProj.pbxFileReferenceSection()[commentKey] != undefined) { + delete myProj.pbxFileReferenceSection()[commentKey]; + } +} + +// TODO: 这里必须返回BuildFileUUID. 否则的话,无法从BuildPhase中删除. +function removeFromPbxBuildFileSectionWithKey (fileRef) { + var uuid; + var buildFileUUID; + for (uuid in myProj.pbxBuildFileSection()) { + var buildFile = myProj.pbxBuildFileSection()[uuid]; + if (buildFile.fileRef == fileRef) { + // TODO: delete buildFile没有从这个字典中真正删除这个文件. + //delete buildFile; + delete myProj.pbxBuildFileSection()[uuid]; + buildFileUUID = uuid; + break; + } + } + + var commentKey = f("%s_comment", fileRef); + if (myProj.pbxBuildFileSection()[commentKey] != undefined) { + delete myProj.pbxBuildFileSection()[commentKey]; + } + + return buildFileUUID; +} + +// Note: 这里只取了firstTarget, 理论上所有的Target都需要获取. 这里所有的参数都是fileRef的uuid. +// Note: File Reference里面的uuid和BuildPhase中的uuid不相同. 所以这个方法不正确. +function removeFromPbxSourcesBuildPhaseWithKey (fileRef) { + // var target = myProj.getFirstTarget(); + // TODO: 用FirstTarget会抛出异常,原因未知. + var target = undefined; + var sources = myProj.pbxSourcesBuildPhaseObj(target), i; + for (i in sources.files) { + if (sources.files[i].value == fileRef) { + sources.files.splice(i, 1); + break; + } + } +} + +function removeFilesInGroup(groupName) { + var groupKey = myProj.findPBXGroupKey({ path: groupName}); + var group = myProj.getPBXGroupByKey(groupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + var uuid = file.value; + if (uuid != undefined) { + removeFromPbxFileReferenceSectionWithKey(uuid); // PBXFileReference + } + + // 从当前Group中删除. TODO: 这里删除了后不可以继续遍历了. + //groupChildren.splice(i, 1); + // TODO: 如果是子Group, 还要继续删除. 暂时不考虑文件夹. + //myProj.removeFromPbxGroup(file, group); // PBXGroup + + // 从Build File Ref中删除 + var buildFileUUID = removeFromPbxBuildFileSectionWithKey(uuid); + + // 从Build Phase中删除 + if (undefined != buildFileUUID) { + removeFromPbxSourcesBuildPhaseWithKey(buildFileUUID); + } + } + + // 删除groupChildren. + groupChildren.splice(0, groupChildren.length); + } +} + +// 找到所有的头文件. +function headerFilesInFilePath(root) { + var res = []; + var files = fs.readdirSync(root); + files.forEach(function(file) { + var extensionFileName = GetExtensionFileName(file); + if ("h" == extensionFileName) { + res.push(file); + } + }); + + return res; +} + +// 找到所有的源文件 +// TODO: 性能可以改进, 可以一次性找出头文件和源文件,不需要每次都遍历一遍. +function sourceFilesInFilePath(root) { + var res = []; + var files = fs.readdirSync(root); + files.forEach(function(file) { + var extensionFileName = GetExtensionFileName(file); + if ("m" == extensionFileName) { + res.push(file); + } + }); + + return res; +} + +function GetExtensionFileName(pathfilename) +{ + var reg = /(\\+)/g; + var pfn = pathfilename.replace(reg, "#"); + var arrpfn = pfn.split("#"); + var fn = arrpfn[arrpfn.length - 1]; + var arrfn = fn.split("."); + return arrfn[arrfn.length - 1]; +} + + + + + + + + + + + +// Projects Extension +// 这些最好添加到pbxProject.js中, 仅供当前流程使用. +function removePbxGroupByKey(groupKey) { + var section = myProj.hash.project.objects['PBXGroup'], + key, itemKey; + + for (key in section) { + // only look for comments + if (!COMMENT_KEY.test(key)) continue; + + if (key == groupKey) { + itemKey = key.split(COMMENT_KEY)[0]; + delete section[itemKey]; + } + } +} + +function removeGroupFromPbxGroup(removeGroupKey, groupKey) { + var group = myProj.getPBXGroupByKey(groupKey); + var removeGroup = myProj.getPBXGroupByKey(removeGroupKey); + if (group) { + var groupChildren = group.children, i; + for(i in groupChildren) { + if(removeGroupKey == groupChildren[i].value && removeGroup != undefined) { + groupChildren.splice(i, 1); + + clearGroup(removeGroup); + break; + } + } + } + + delete removeGroup; +} + +function clearGroup(group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + if (file.fileRef != undefined) { + myProj.removeFromPbxFileReferenceSection(file); // PBXFileReference + } + + // TODO: 如果是子Group, 还要继续删除. + myProj.removeFromPbxGroup(file, group); // PBXGroup + } +} + +function removeGroupByKey(key, parentGroupKey) { + var group = getPBXGroupByKey(key, parentGroupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + if (file.fileRef != undefined) { + myProj.removeFromPbxFileReferenceSection(file); // PBXFileReference + } + + // TODO: 如果是子Group, 还要继续删除. + myProj.removeFromPbxGroup(file, group); // PBXGroup + } + } +} + +// Remove a group and all files in this group. +function removeGroup(groupPath, parentGroupKey) { + var group = getPBXGroupByPath(groupPath, parentGroupKey); + if (group) { + var groupChildren = group.children, i; + for (i in groupChildren) { + file = groupChildren[i]; + if (file.fileRef != undefined) { + myProj.removeFromPbxFileReferenceSection(file); // PBXFileReference + } + + // TODO: 如果是子Group, 还要继续删除. + myProj.removeFromPbxGroup(file, group); // PBXGroup + } + } +} + + +function getPBXGroupByPath(path, parentGroupKey) { + var groups = (undefined == parentGroupKey) ? myProj.hash.project.objects['PBXGroup'] : myProj.getPBXGroupByKey(parentGroupKey); + for (var key in groups) { + var group = groups[key]; + if (group.path === path) { + return group; + } + } + + return undefined; +}; + +function getPBXGroupByKey(key, parentGroupKey) { + var groups = (undefined == parentGroupKey) ? myProj.hash.project.objects['PBXGroup'] : myProj.getPBXGroupByKey(parentGroupKey); + var group = groups[key]; + return group; +}; + +function findPBXGroupInParent(criteria, parentCriteria) { + if (undefined == parentCriteria) { + return myProj.findPBXGroupKey(criteria); + } + + var target; + var groupKey = myProj.findPBXGroupKey(parentCriteria); + var group = myProj.getPBXGroupByKey(groupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = myProj.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = childGroup; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = childGroup; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = childGroup; + break + } + } + } + + return target; +} + +function findPBXGroupKeyInParent(criteria, parentCriteria) { + if (undefined == parentCriteria) { + return myProj.findPBXGroupKey(criteria); + } + + var target; + var groupKey = myProj.findPBXGroupKey(parentCriteria); + var group = myProj.getPBXGroupByKey(groupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = myProj.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = child.value; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = child.value; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = child.value; + break + } + } + } + + return target; +} + + +function findPBXGroupKeyInParentGroup(criteria, parentGroupKey) { + var target; + var group = getPBXGroupByKey(parentGroupKey); + var groupChildren = group.children, i; + for(i in groupChildren) { + var child = groupChildren[i]; + var childGroup = myProj.getPBXGroupByKey(child.value); + if (undefined == childGroup) { + // 这不是一个对应的Group. + continue; + } + + if (criteria && criteria.path && criteria.name) { + if (criteria.path === childGroup.path && criteria.name === childGroup.name) { + target = child.value; + break + } + } + else if (criteria && criteria.path) { + if (criteria.path === childGroup.path) { + target = child.value; + break + } + } + else if (criteria && criteria.name) { + if (criteria.name === childGroup.name) { + target = child.value; + break + } + } + } + + return target; +} + + + + +function addResources () { + if (undefined == projectName || undefined == groupParentPath || undefined == folderParentPath || undefined == myProj) { + console.log("Please correct parameters, the command is like \r\n node UpdateModels.js projectName groupParentPath folderParentPath, please specify your own projectName, parent group path and pareng folder path"); + return; + } + + var parentGroupKey = findGroupByAbsolutePath(groupParentPath); + if (undefined == parentGroupKey) { + console.log("Could not find group to add resource file"); + } + + //addXcassets("Assets.xcassets", parentGroupKey); + addPlistFile("Info.plist", parentGroupKey, {}); + + // 将内容写回到工程文件中. + fs.writeFileSync(projectPath, myProj.writeSync()); + console.log('Project ' + projectPath + " is updated with Info.plist successfully !"); +} + + + +function addXibFile(path, opt) { + myProj.addResourceFile(path, opt); +} + +function addStoryboardFile(path, opt) { + myProj.addResourceFile(path, opt); +} + +function addPlistFile(path, group, opt) { + myProj.addFile(path, group, opt); +} + +function addXcassets(path, group, opt) { + myProj.addResourceFile(path, opt); +} + +// +//pbxProject.prototype.addResourceFile = function(path, opt) { +// opt = opt || {}; +// +// var file; +// +// if (opt.plugin) { +// file = this.addPluginFile(path, opt); +// if (!file) return false; +// } else { +// file = new pbxFile(path, opt); +// if (this.hasFile(file.path)) return false; +// } +// +// file.uuid = this.generateUuid(); +// file.target = opt ? opt.target : undefined; +// +// if (!opt.plugin) { +// correctForResourcesPath(file, this); +// file.fileRef = this.generateUuid(); +// } +// +// this.addToPbxBuildFileSection(file); // PBXBuildFile +// this.addToPbxResourcesBuildPhase(file); // PBXResourcesBuildPhase +// +// if (!opt.plugin) { +// this.addToPbxFileReferenceSection(file); // PBXFileReference +// this.addToResourcesPbxGroup(file); // PBXGroup +// } +// +// return file; +//} diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj index 2ccb832..e8f0342 100644 --- a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -5,7 +5,13 @@ }; objectVersion = 46; objects = { + /* Begin PBXBuildFile section */ + 1633717AA6294BD4B13F3ED7 /* TestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C091F8560FBB4B8693F87C1F /* TestViewController.m */; }; + 70459B39CB83470FAEC65357 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B96CF0CB8B164CA7B961B7C8 /* HTTestRequest.m */; }; + 7068F19789004D5D81E338AD /* HTTestModel1.m in Sources */ = {isa = PBXBuildFile; fileRef = C986780B42C44F2598E4E234 /* HTTestModel1.m */; }; + 7134CF06962A4FE08E75D36B /* TestViewController1.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E124782988F4EA8A210945F /* TestViewController1.m */; }; + D4224B2B6F6443B5BAA60C2B /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BF6840A3E42462796687B18 /* HTTestModel.m */; }; E63CC7931C2CEB1E0092683A /* HTTestModel1.m in Sources */ = {isa = PBXBuildFile; fileRef = E63CC7921C2CEB1E0092683A /* HTTestModel1.m */; settings = {ASSET_TAGS = (); }; }; E63CC7961C2CEB6F0092683A /* TestViewController1.m in Sources */ = {isa = PBXBuildFile; fileRef = E63CC7951C2CEB6F0092683A /* TestViewController1.m */; settings = {ASSET_TAGS = (); }; }; E6AFD0081C1E99040027F340 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0071C1E99040027F340 /* main.m */; }; @@ -16,11 +22,6 @@ E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */; }; E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */; }; E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */; }; - D4224B2B6F6443B5BAA60C2B /* HTTestModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BF6840A3E42462796687B18 /* HTTestModel.m */; }; - 7068F19789004D5D81E338AD /* HTTestModel1.m in Sources */ = {isa = PBXBuildFile; fileRef = C986780B42C44F2598E4E234 /* HTTestModel1.m */; }; - 70459B39CB83470FAEC65357 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B96CF0CB8B164CA7B961B7C8 /* HTTestRequest.m */; }; - 1633717AA6294BD4B13F3ED7 /* TestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C091F8560FBB4B8693F87C1F /* TestViewController.m */; }; - 7134CF06962A4FE08E75D36B /* TestViewController1.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E124782988F4EA8A210945F /* TestViewController1.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -41,6 +42,16 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 31D0B9D061014AAF95C2A624 /* HTTestModel1.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; path = HTTestModel1.h; sourceTree = ""; }; + 4BF6840A3E42462796687B18 /* HTTestModel.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = HTTestModel.m; sourceTree = ""; }; + 7DA58FFAAE624AC88D81D21B /* TestViewController.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; path = TestViewController.h; sourceTree = ""; }; + 9477E58C648F4B9CBF695A18 /* TestViewController1.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; path = TestViewController1.h; sourceTree = ""; }; + 9E124782988F4EA8A210945F /* TestViewController1.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = TestViewController1.m; sourceTree = ""; }; + AF82B515094B4A86B9276616 /* HTTestModel.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; path = HTTestModel.h; sourceTree = ""; }; + B96CF0CB8B164CA7B961B7C8 /* HTTestRequest.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = HTTestRequest.m; sourceTree = ""; }; + C091F8560FBB4B8693F87C1F /* TestViewController.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = TestViewController.m; sourceTree = ""; }; + C986780B42C44F2598E4E234 /* HTTestModel1.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = HTTestModel1.m; sourceTree = ""; }; + D06C33858A124437A6D331E1 /* HTTestRequest.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; path = HTTestRequest.h; sourceTree = ""; }; E63CC7911C2CEB1E0092683A /* HTTestModel1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTestModel1.h; path = Models/HTTestModel1.h; sourceTree = ""; }; E63CC7921C2CEB1E0092683A /* HTTestModel1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTTestModel1.m; path = Models/HTTestModel1.m; sourceTree = ""; }; E63CC7941C2CEB6F0092683A /* TestViewController1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestViewController1.h; path = Requests/TestViewController1.h; sourceTree = ""; }; @@ -54,23 +65,10 @@ E6AFD0101C1E99040027F340 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; E6AFD0121C1E99040027F340 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; E6AFD0151C1E99040027F340 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - E6AFD0171C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; E6AFD01C1C1E99040027F340 /* HTJSGeneratorCodeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeTests.m; sourceTree = ""; }; - E6AFD0221C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; - E6AFD02D1C1E99040027F340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AF82B515094B4A86B9276616 /* HTTestModel.h */ = {isa = PBXFileReference; name = "HTTestModel.h"; path = "HTTestModel.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - 31D0B9D061014AAF95C2A624 /* HTTestModel1.h */ = {isa = PBXFileReference; name = "HTTestModel1.h"; path = "HTTestModel1.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - 4BF6840A3E42462796687B18 /* HTTestModel.m */ = {isa = PBXFileReference; name = "HTTestModel.m"; path = "HTTestModel.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; - C986780B42C44F2598E4E234 /* HTTestModel1.m */ = {isa = PBXFileReference; name = "HTTestModel1.m"; path = "HTTestModel1.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; - D06C33858A124437A6D331E1 /* HTTestRequest.h */ = {isa = PBXFileReference; name = "HTTestRequest.h"; path = "HTTestRequest.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - 7DA58FFAAE624AC88D81D21B /* TestViewController.h */ = {isa = PBXFileReference; name = "TestViewController.h"; path = "TestViewController.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - 9477E58C648F4B9CBF695A18 /* TestViewController1.h */ = {isa = PBXFileReference; name = "TestViewController1.h"; path = "TestViewController1.h"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; - B96CF0CB8B164CA7B961B7C8 /* HTTestRequest.m */ = {isa = PBXFileReference; name = "HTTestRequest.m"; path = "HTTestRequest.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; - C091F8560FBB4B8693F87C1F /* TestViewController.m */ = {isa = PBXFileReference; name = "TestViewController.m"; path = "TestViewController.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; - 9E124782988F4EA8A210945F /* TestViewController1.m */ = {isa = PBXFileReference; name = "TestViewController1.m"; path = "TestViewController1.m"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -151,7 +149,6 @@ E6AFD00F1C1E99040027F340 /* Main.storyboard */, E6AFD0121C1E99040027F340 /* Assets.xcassets */, E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */, - E6AFD0171C1E99040027F340 /* Info.plist */, E6AFD0061C1E99040027F340 /* Supporting Files */, BA604265FA2841C1B310F4EB /* Models */, ED6D750F3C0B43478EDB8BE5 /* Requests */, diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index a0fb79dd1cffc09e792d077fca6e5c6c18c559b8..a0e36e0523f97982aa550ddb3982972d99985d23 100644 GIT binary patch literal 31941 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 From 036a5cdd7ac51a3485c2bae8a8f41d723f37d020 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Tue, 29 Dec 2015 11:02:16 +0800 Subject: [PATCH 26/28] =?UTF-8?q?=E6=B7=BB=E5=8A=A0plist=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 38 +++++++++--------- test/HTTestResources/AddResources.js | 2 + .../project.pbxproj | 3 +- .../UserInterfaceState.xcuserstate | Bin 31941 -> 32294 bytes 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 969f418..0e85e13 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -3,7 +3,7 @@ - + @@ -35,11 +35,11 @@ - + - - + + @@ -57,10 +57,10 @@ - + - + @@ -384,11 +384,11 @@ - + - + @@ -624,7 +624,7 @@ file://$PROJECT_DIR$/test/HTTestResources/AddResources.js - 492 + 493 @@ -1034,21 +1034,21 @@ - + - - - - - + + + - + - - - + + + + + diff --git a/test/HTTestResources/AddResources.js b/test/HTTestResources/AddResources.js index 7e020a8..d0f1a9d 100644 --- a/test/HTTestResources/AddResources.js +++ b/test/HTTestResources/AddResources.js @@ -489,10 +489,12 @@ function addStoryboardFile(path, opt) { myProj.addResourceFile(path, opt); } +// 测试通过. function addPlistFile(path, group, opt) { myProj.addFile(path, group, opt); } + function addXcassets(path, group, opt) { myProj.addResourceFile(path, opt); } diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj index e8f0342..adb88ea 100644 --- a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -5,7 +5,6 @@ }; objectVersion = 46; objects = { - /* Begin PBXBuildFile section */ 1633717AA6294BD4B13F3ED7 /* TestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C091F8560FBB4B8693F87C1F /* TestViewController.m */; }; 70459B39CB83470FAEC65357 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B96CF0CB8B164CA7B961B7C8 /* HTTestRequest.m */; }; @@ -69,6 +68,7 @@ E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeTests.m; sourceTree = ""; }; E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; + 7988091A02B246179926A120 /* Info.plist */ = {isa = PBXFileReference; name = "Info.plist"; path = "Info.plist"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = text.plist.xml; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -152,6 +152,7 @@ E6AFD0061C1E99040027F340 /* Supporting Files */, BA604265FA2841C1B310F4EB /* Models */, ED6D750F3C0B43478EDB8BE5 /* Requests */, + 7988091A02B246179926A120 /* Info.plist */, ); path = HTJSGeneratorCode; sourceTree = ""; diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index a0e36e0523f97982aa550ddb3982972d99985d23..c6ab6371b9b36d6e2bbf50aa4bfbee6be606aada 100644 GIT binary patch delta 15732 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 From 060373d31b5b6c3664a54a6644c156db33236ea9 Mon Sep 17 00:00:00 2001 From: Wangliping Date: Tue, 29 Dec 2015 11:06:07 +0800 Subject: [PATCH 27/28] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95xib?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 13 ++++++------- test/HTTestResources/AddResources.js | 3 ++- .../project.pbxproj | 9 ++++++--- .../UserInterfaceState.xcuserstate | Bin 32294 -> 33984 bytes .../HTJSGeneratorCode/TestXib.xib | 16 ++++++++++++++++ 5 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 test/HTTestResources/HTJSGeneratorCode/TestXib.xib diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 0e85e13..ab17a1a 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,7 +4,6 @@ - @@ -38,8 +37,8 @@ - - + + @@ -619,12 +618,12 @@ file://$PROJECT_DIR$/test/HTTestResources/AddResources.js - 474 + 475 file://$PROJECT_DIR$/test/HTTestResources/AddResources.js - 493 + 494 @@ -1044,8 +1043,8 @@ - - + + diff --git a/test/HTTestResources/AddResources.js b/test/HTTestResources/AddResources.js index d0f1a9d..131ae5c 100644 --- a/test/HTTestResources/AddResources.js +++ b/test/HTTestResources/AddResources.js @@ -471,8 +471,9 @@ function addResources () { console.log("Could not find group to add resource file"); } + //addXcassets("Assets.xcassets", parentGroupKey); - addPlistFile("Info.plist", parentGroupKey, {}); + //addPlistFile("Info.plist", parentGroupKey, {}); // 将内容写回到工程文件中. fs.writeFileSync(projectPath, myProj.writeSync()); diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj index adb88ea..6f32b53 100644 --- a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -5,6 +5,7 @@ }; objectVersion = 46; objects = { + /* Begin PBXBuildFile section */ 1633717AA6294BD4B13F3ED7 /* TestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C091F8560FBB4B8693F87C1F /* TestViewController.m */; }; 70459B39CB83470FAEC65357 /* HTTestRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B96CF0CB8B164CA7B961B7C8 /* HTTestRequest.m */; }; @@ -21,6 +22,7 @@ E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */; }; E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */; }; E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */; }; + E6DC62771C322FB70000D1A8 /* TestXib.xib in Resources */ = {isa = PBXBuildFile; fileRef = E6DC62761C322FB70000D1A8 /* TestXib.xib */; settings = {ASSET_TAGS = (); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -43,6 +45,7 @@ /* Begin PBXFileReference section */ 31D0B9D061014AAF95C2A624 /* HTTestModel1.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; path = HTTestModel1.h; sourceTree = ""; }; 4BF6840A3E42462796687B18 /* HTTestModel.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = HTTestModel.m; sourceTree = ""; }; + 7988091A02B246179926A120 /* Info.plist */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7DA58FFAAE624AC88D81D21B /* TestViewController.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; path = TestViewController.h; sourceTree = ""; }; 9477E58C648F4B9CBF695A18 /* TestViewController1.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; path = TestViewController1.h; sourceTree = ""; }; 9E124782988F4EA8A210945F /* TestViewController1.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; path = TestViewController1.m; sourceTree = ""; }; @@ -68,7 +71,7 @@ E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeTests.m; sourceTree = ""; }; E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; - 7988091A02B246179926A120 /* Info.plist */ = {isa = PBXFileReference; name = "Info.plist"; path = "Info.plist"; sourceTree = ""; fileEncoding = 4; lastKnownFileType = text.plist.xml; explicitFileType = undefined; includeInIndex = 0; }; + E6DC62761C322FB70000D1A8 /* TestXib.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TestXib.xib; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -153,6 +156,7 @@ BA604265FA2841C1B310F4EB /* Models */, ED6D750F3C0B43478EDB8BE5 /* Requests */, 7988091A02B246179926A120 /* Info.plist */, + E6DC62761C322FB70000D1A8 /* TestXib.xib */, ); path = HTJSGeneratorCode; sourceTree = ""; @@ -169,7 +173,6 @@ isa = PBXGroup; children = ( E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */, - E6AFD0221C1E99040027F340 /* Info.plist */, ); path = HTJSGeneratorCodeTests; sourceTree = ""; @@ -178,7 +181,6 @@ isa = PBXGroup; children = ( E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */, - E6AFD02D1C1E99040027F340 /* Info.plist */, ); path = HTJSGeneratorCodeUITests; sourceTree = ""; @@ -313,6 +315,7 @@ E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */, E6AFD0131C1E99040027F340 /* Assets.xcassets in Resources */, E6AFD0111C1E99040027F340 /* Main.storyboard in Resources */, + E6DC62771C322FB70000D1A8 /* TestXib.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index c6ab6371b9b36d6e2bbf50aa4bfbee6be606aada..43e3f1d051ef0cf28fa668bc0f65023d99a7f045 100644 GIT binary patch literal 33984 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 delta 15564 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 Y>vFow&&HA{gvOuzY~#<*-@9D;Kdy;>-T(jq diff --git a/test/HTTestResources/HTJSGeneratorCode/TestXib.xib b/test/HTTestResources/HTJSGeneratorCode/TestXib.xib new file mode 100644 index 0000000..f897fa7 --- /dev/null +++ b/test/HTTestResources/HTJSGeneratorCode/TestXib.xib @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + From 59c26029e57b087126fc55bbe01e8b35a6e56b4b Mon Sep 17 00:00:00 2001 From: Wangliping Date: Tue, 29 Dec 2015 11:06:25 +0800 Subject: [PATCH 28/28] =?UTF-8?q?=E4=BB=8E=E5=B7=A5=E7=A8=8B=E4=B8=AD?= =?UTF-8?q?=E5=88=A0=E9=99=A4xib=E4=BB=A5=E6=B5=8B=E8=AF=95=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=B5=84=E6=BA=90=E6=96=87=E4=BB=B6=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 4 ---- .../UserInterfaceState.xcuserstate | Bin 33984 -> 33836 bytes 2 files changed, 4 deletions(-) diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj index 6f32b53..69126ba 100644 --- a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj +++ b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.pbxproj @@ -22,7 +22,6 @@ E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E6AFD0141C1E99040027F340 /* LaunchScreen.storyboard */; }; E6AFD0211C1E99040027F340 /* HTJSGeneratorCodeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */; }; E6AFD02C1C1E99040027F340 /* HTJSGeneratorCodeUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */; }; - E6DC62771C322FB70000D1A8 /* TestXib.xib in Resources */ = {isa = PBXBuildFile; fileRef = E6DC62761C322FB70000D1A8 /* TestXib.xib */; settings = {ASSET_TAGS = (); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -71,7 +70,6 @@ E6AFD0201C1E99040027F340 /* HTJSGeneratorCodeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeTests.m; sourceTree = ""; }; E6AFD0271C1E99040027F340 /* HTJSGeneratorCodeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTJSGeneratorCodeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E6AFD02B1C1E99040027F340 /* HTJSGeneratorCodeUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HTJSGeneratorCodeUITests.m; sourceTree = ""; }; - E6DC62761C322FB70000D1A8 /* TestXib.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TestXib.xib; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -156,7 +154,6 @@ BA604265FA2841C1B310F4EB /* Models */, ED6D750F3C0B43478EDB8BE5 /* Requests */, 7988091A02B246179926A120 /* Info.plist */, - E6DC62761C322FB70000D1A8 /* TestXib.xib */, ); path = HTJSGeneratorCode; sourceTree = ""; @@ -315,7 +312,6 @@ E6AFD0161C1E99040027F340 /* LaunchScreen.storyboard in Resources */, E6AFD0131C1E99040027F340 /* Assets.xcassets in Resources */, E6AFD0111C1E99040027F340 /* Main.storyboard in Resources */, - E6DC62771C322FB70000D1A8 /* TestXib.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate b/test/HTTestResources/HTJSGeneratorCode.xcodeproj/project.xcworkspace/xcuserdata/netease.xcuserdatad/UserInterfaceState.xcuserstate index 43e3f1d051ef0cf28fa668bc0f65023d99a7f045..129806adfa05bc769d0614e66a95d6dc97ed562f 100644 GIT binary patch delta 16276 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 YbxWHYw+5A3b5fiHr!#j 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 Zv8SY`!tgf@7=*^3f^g%{PyhGy{6EDH$(H~C