From 793260c89f57945aa0557bf8ea23c1fec5fb404a Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Mon, 29 Sep 2014 22:51:41 -0400 Subject: [PATCH 01/39] renamed podspec file to match name of forked Cocoapod --- RaptureXML.podspec => RaptureXML@Gilt.podspec | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) rename RaptureXML.podspec => RaptureXML@Gilt.podspec (60%) diff --git a/RaptureXML.podspec b/RaptureXML@Gilt.podspec similarity index 60% rename from RaptureXML.podspec rename to RaptureXML@Gilt.podspec index bf23ef8..f57bb19 100644 --- a/RaptureXML.podspec +++ b/RaptureXML@Gilt.podspec @@ -1,15 +1,16 @@ Pod::Spec.new do |s| - s.name = 'RaptureXML' - s.version = '1.0.1' + s.name = 'RaptureXML@Gilt' + s.version = '1.0.2' s.license = 'MIT' s.summary = 'A simple, sensible, block-based XML API for iOS and Mac development.' + s.description = 'Forked by Gilt Groupe to allow access to the xml property of the RXMLElement class from within CocoaPods.' s.homepage = 'https://github.com/ZaBlanc/RaptureXML' s.author = { 'John Blanco' => 'zablanc@gmail.com' } - s.source = { :git => 'https://github.com/ZaBlanc/RaptureXML.git', :tag => s.version.to_s } + s.source = { :git => 'https://github.com/gilt/RaptureXML.git', :tag => s.version.to_s } s.platform = :ios s.source_files = 'RaptureXML/*' s.libraries = 'z', 'xml2' s.xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' } s.requires_arc = true -end \ No newline at end of file +end From 59479f82af63097ba73a948782fd48cbcdc9beb0 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Mon, 29 Sep 2014 23:02:18 -0400 Subject: [PATCH 02/39] updated podspec to point to correct repo location --- RaptureXML@Gilt.podspec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RaptureXML@Gilt.podspec b/RaptureXML@Gilt.podspec index f57bb19..c3a9ae3 100644 --- a/RaptureXML@Gilt.podspec +++ b/RaptureXML@Gilt.podspec @@ -1,12 +1,12 @@ Pod::Spec.new do |s| s.name = 'RaptureXML@Gilt' - s.version = '1.0.2' + s.version = '1.0.3' s.license = 'MIT' s.summary = 'A simple, sensible, block-based XML API for iOS and Mac development.' s.description = 'Forked by Gilt Groupe to allow access to the xml property of the RXMLElement class from within CocoaPods.' s.homepage = 'https://github.com/ZaBlanc/RaptureXML' s.author = { 'John Blanco' => 'zablanc@gmail.com' } - s.source = { :git => 'https://github.com/gilt/RaptureXML.git', :tag => s.version.to_s } + s.source = { :git => 'https://github.com/emaloney/RaptureXML.git', :tag => s.version.to_s } s.platform = :ios s.source_files = 'RaptureXML/*' From 91ccaf1521d34dc9d3cfa4ef16fdd9e9f66a4c1e Mon Sep 17 00:00:00 2001 From: "E. Maloney" Date: Thu, 25 Jun 2015 09:55:57 -0400 Subject: [PATCH 03/39] add OS X support --- Library-Prefix.pch | 1 - RaptureXML.xcodeproj/project.pbxproj | 160 ++++++++++++++++-- .../xcschemes/RaptureXML OSX.xcscheme | 77 +++++++++ .../xcschemes/RaptureXML iOS.xcscheme | 77 +++++++++ RaptureXML@Gilt.podspec | 3 +- 5 files changed, 300 insertions(+), 18 deletions(-) create mode 100644 RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX.xcscheme create mode 100644 RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS.xcscheme diff --git a/Library-Prefix.pch b/Library-Prefix.pch index 27c1907..60070a9 100644 --- a/Library-Prefix.pch +++ b/Library-Prefix.pch @@ -1,4 +1,3 @@ #ifdef __OBJC__ - #import #import #endif diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index 580da9f..216818b 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -23,7 +23,6 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 02041DB81526A71200D1F36A /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 02041DB71526A71200D1F36A /* libxml2.dylib */; }; 02041DBA1526B0DE00D1F36A /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 02041DB71526A71200D1F36A /* libxml2.dylib */; }; 0252B2DF142ADFC60018B75D /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B2DE142ADFC60018B75D /* SenTestingKit.framework */; }; 0252B2E0142ADFC60018B75D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B2C3142ADFC60018B75D /* UIKit.framework */; }; @@ -43,8 +42,8 @@ 02ADE6A916A0E491008643D5 /* EncodingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 02F3A4041526D7BC00E8C822 /* EncodingTests.m */; }; 02ADE6AA16A0E491008643D5 /* XPathTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 027B6BCF153C652E00A4EDF2 /* XPathTests.m */; }; 02F3A3FF1526D22600E8C822 /* players.xml in Resources */ = {isa = PBXBuildFile; fileRef = 0DEB8F2D14681BD800024989 /* players.xml */; }; - 0DEB8EB51467EC9B00024989 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B2C5142ADFC60018B75D /* Foundation.framework */; }; 0DEB8F2C14681A9400024989 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B305142AE3FF0018B75D /* libz.dylib */; }; + 20370A021B3C3E2D0043E14E /* RXMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 027DAC2F14FBF443001BA563 /* RXMLElement.m */; }; 5415BE4216FC638100AFC566 /* HTMLTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5415BE4116FC638100AFC566 /* HTMLTests.m */; }; 6BD1BDA91558B91400F1D055 /* RXMLElement.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; }; /* End PBXBuildFile section */ @@ -89,6 +88,7 @@ 0DEB8F2B14681A0800024989 /* Tests-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Tests-Prefix.pch"; path = "Tests/Tests-Prefix.pch"; sourceTree = SOURCE_ROOT; }; 0DEB8F2D14681BD800024989 /* players.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = players.xml; path = Tests/players.xml; sourceTree = SOURCE_ROOT; }; 1413670716D9BEC700501ABB /* CopyTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CopyTests.m; path = Tests/CopyTests.m; sourceTree = SOURCE_ROOT; }; + 20370A0A1B3C3E2D0043E14E /* libRaptureXML.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRaptureXML.a; sourceTree = BUILT_PRODUCTS_DIR; }; 5415BE4116FC638100AFC566 /* HTMLTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTMLTests.m; path = Tests/HTMLTests.m; sourceTree = SOURCE_ROOT; }; 6BD1BD951558B7A800F1D055 /* RaptureXML-StaticLib-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RaptureXML-StaticLib-Prefix.pch"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -111,8 +111,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 02041DB81526A71200D1F36A /* libxml2.dylib in Frameworks */, - 0DEB8EB51467EC9B00024989 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20370A031B3C3E2D0043E14E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( ); runOnlyForDeploymentPostprocessing = 0; }; @@ -136,6 +141,7 @@ children = ( 0252B2DD142ADFC60018B75D /* RaptureXMLTests.octest */, 0DEB8EB41467EC9B00024989 /* libRaptureXML.a */, + 20370A0A1B3C3E2D0043E14E /* libRaptureXML.a */, ); name = Products; sourceTree = ""; @@ -211,6 +217,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 20370A061B3C3E2D0043E14E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -230,11 +243,11 @@ name = RaptureXMLTests; productName = RaptureXMLTests; productReference = 0252B2DD142ADFC60018B75D /* RaptureXMLTests.octest */; - productType = "com.apple.product-type.bundle"; + productType = "com.apple.product-type.bundle.ocunit-test"; }; - 0DEB8EB31467EC9B00024989 /* RaptureXML */ = { + 0DEB8EB31467EC9B00024989 /* RaptureXML iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 0DEB8EBC1467EC9B00024989 /* Build configuration list for PBXNativeTarget "RaptureXML" */; + buildConfigurationList = 0DEB8EBC1467EC9B00024989 /* Build configuration list for PBXNativeTarget "RaptureXML iOS" */; buildPhases = ( 0DEB8EB01467EC9B00024989 /* Sources */, 0DEB8EB11467EC9B00024989 /* Frameworks */, @@ -244,18 +257,36 @@ ); dependencies = ( ); - name = RaptureXML; + name = "RaptureXML iOS"; productName = RaptureXML; productReference = 0DEB8EB41467EC9B00024989 /* libRaptureXML.a */; productType = "com.apple.product-type.library.static"; }; + 20370A001B3C3E2D0043E14E /* RaptureXML OSX */ = { + isa = PBXNativeTarget; + buildConfigurationList = 20370A071B3C3E2D0043E14E /* Build configuration list for PBXNativeTarget "RaptureXML OSX" */; + buildPhases = ( + 20370A011B3C3E2D0043E14E /* Sources */, + 20370A031B3C3E2D0043E14E /* Frameworks */, + 20370A061B3C3E2D0043E14E /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "RaptureXML OSX"; + productName = RaptureXML; + productReference = 20370A0A1B3C3E2D0043E14E /* libRaptureXML.a */; + productType = "com.apple.product-type.library.static"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 0252B2B6142ADFC60018B75D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0460; + LastTestingUpgradeCheck = 0640; + LastUpgradeCheck = 0640; ORGANIZATIONNAME = "Rapture In Venice"; }; buildConfigurationList = 0252B2B9142ADFC60018B75D /* Build configuration list for PBXProject "RaptureXML" */; @@ -277,7 +308,8 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 0DEB8EB31467EC9B00024989 /* RaptureXML */, + 0DEB8EB31467EC9B00024989 /* RaptureXML iOS */, + 20370A001B3C3E2D0043E14E /* RaptureXML OSX */, 0252B2DC142ADFC60018B75D /* RaptureXMLTests */, 6BD1BD9D1558B7FA00F1D055 /* RaptureXMLFramework */, ); @@ -368,6 +400,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 20370A011B3C3E2D0043E14E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 20370A021B3C3E2D0043E14E /* RXMLElement.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ @@ -375,15 +415,19 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = 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", @@ -391,11 +435,15 @@ ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 4.3; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; @@ -404,18 +452,25 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 4.3; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; @@ -488,7 +543,7 @@ "\"$(SRCROOT)/../TaskList/FlurryLib\"", "\"$(SRCROOT)/../WordsWithPractice/WordsWithPractice/GoogleAdMobAdsSDK\"", ); - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = RaptureXML; SKIP_INSTALL = YES; }; name = Debug; @@ -519,7 +574,73 @@ "\"$(SRCROOT)/../TaskList/FlurryLib\"", "\"$(SRCROOT)/../WordsWithPractice/WordsWithPractice/GoogleAdMobAdsSDK\"", ); - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = RaptureXML; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 20370A081B3C3E2D0043E14E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + COMBINE_HIDPI_IMAGES = YES; + DSTROOT = /tmp/RaptureXML.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../.metadata/.plugins/org.eclipse.debug.core/.launches/System/Library/Frameworks\"", + "\"$(SRCROOT)/../Cognitive\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Library-Prefix.pch"; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2/**"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../FuzzAlert/AdMob\"", + "\"$(SRCROOT)/../FuzzAlert/FlurryLibWithLocation\"", + "\"$(SRCROOT)/../FuzzAlert/libGHUnitIPhone4_0-0.4.21\"", + "\"$(SRCROOT)/../FuzzAlert/three20/Build/Products/Debug-iphonesimulator\"", + "\"$(SRCROOT)/../FuzzAlert/three20/Build/Products/Release-iphonesimulator\"", + "\"$(SRCROOT)/../InnerBand/libGHUnitIPhone4_0-0.4.22\"", + "\"$(SRCROOT)/../TaskList/FlurryLib\"", + "\"$(SRCROOT)/../WordsWithPractice/WordsWithPractice/GoogleAdMobAdsSDK\"", + ); + PRODUCT_NAME = RaptureXML; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 20370A091B3C3E2D0043E14E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + COMBINE_HIDPI_IMAGES = YES; + DSTROOT = /tmp/RaptureXML.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../.metadata/.plugins/org.eclipse.debug.core/.launches/System/Library/Frameworks\"", + "\"$(SRCROOT)/../Cognitive\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Library-Prefix.pch"; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2/**"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../FuzzAlert/AdMob\"", + "\"$(SRCROOT)/../FuzzAlert/FlurryLibWithLocation\"", + "\"$(SRCROOT)/../FuzzAlert/libGHUnitIPhone4_0-0.4.21\"", + "\"$(SRCROOT)/../FuzzAlert/three20/Build/Products/Debug-iphonesimulator\"", + "\"$(SRCROOT)/../FuzzAlert/three20/Build/Products/Release-iphonesimulator\"", + "\"$(SRCROOT)/../InnerBand/libGHUnitIPhone4_0-0.4.22\"", + "\"$(SRCROOT)/../TaskList/FlurryLib\"", + "\"$(SRCROOT)/../WordsWithPractice/WordsWithPractice/GoogleAdMobAdsSDK\"", + ); + PRODUCT_NAME = RaptureXML; + SDKROOT = macosx; SKIP_INSTALL = YES; }; name = Release; @@ -559,7 +680,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 0DEB8EBC1467EC9B00024989 /* Build configuration list for PBXNativeTarget "RaptureXML" */ = { + 0DEB8EBC1467EC9B00024989 /* Build configuration list for PBXNativeTarget "RaptureXML iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 0DEB8EBD1467EC9B00024989 /* Debug */, @@ -568,6 +689,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 20370A071B3C3E2D0043E14E /* Build configuration list for PBXNativeTarget "RaptureXML OSX" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 20370A081B3C3E2D0043E14E /* Debug */, + 20370A091B3C3E2D0043E14E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 6BD1BD9E1558B7FA00F1D055 /* Build configuration list for PBXAggregateTarget "RaptureXMLFramework" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX.xcscheme b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX.xcscheme new file mode 100644 index 0000000..260108e --- /dev/null +++ b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS.xcscheme b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS.xcscheme new file mode 100644 index 0000000..52071ae --- /dev/null +++ b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RaptureXML@Gilt.podspec b/RaptureXML@Gilt.podspec index c3a9ae3..6221b39 100644 --- a/RaptureXML@Gilt.podspec +++ b/RaptureXML@Gilt.podspec @@ -1,13 +1,12 @@ Pod::Spec.new do |s| s.name = 'RaptureXML@Gilt' - s.version = '1.0.3' + s.version = '1.0.4' s.license = 'MIT' s.summary = 'A simple, sensible, block-based XML API for iOS and Mac development.' s.description = 'Forked by Gilt Groupe to allow access to the xml property of the RXMLElement class from within CocoaPods.' s.homepage = 'https://github.com/ZaBlanc/RaptureXML' s.author = { 'John Blanco' => 'zablanc@gmail.com' } s.source = { :git => 'https://github.com/emaloney/RaptureXML.git', :tag => s.version.to_s } - s.platform = :ios s.source_files = 'RaptureXML/*' s.libraries = 'z', 'xml2' From 5c8c776f13230d6d54f7d48286756a45c1454527 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 22 Dec 2015 15:13:22 -0500 Subject: [PATCH 04/39] attempting better framework integration --- .../xcschemes/RaptureXML OSX.xcscheme | 17 ++++++++++------- .../xcschemes/RaptureXML iOS.xcscheme | 17 ++++++++++------- RaptureXML@Gilt.podspec | 3 ++- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX.xcscheme b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX.xcscheme index 260108e..0de60d6 100644 --- a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX.xcscheme +++ b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX.xcscheme @@ -15,7 +15,7 @@ @@ -23,27 +23,30 @@ + shouldUseLaunchSchemeArgsEnv = "YES"> + + @@ -52,16 +55,16 @@ diff --git a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS.xcscheme b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS.xcscheme index 52071ae..1e05c75 100644 --- a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS.xcscheme +++ b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS.xcscheme @@ -15,7 +15,7 @@ @@ -23,27 +23,30 @@ + shouldUseLaunchSchemeArgsEnv = "YES"> + + @@ -52,16 +55,16 @@ diff --git a/RaptureXML@Gilt.podspec b/RaptureXML@Gilt.podspec index 6221b39..7dd61d4 100644 --- a/RaptureXML@Gilt.podspec +++ b/RaptureXML@Gilt.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'RaptureXML@Gilt' - s.version = '1.0.4' + s.version = '1.0.5' s.license = 'MIT' s.summary = 'A simple, sensible, block-based XML API for iOS and Mac development.' s.description = 'Forked by Gilt Groupe to allow access to the xml property of the RXMLElement class from within CocoaPods.' @@ -12,4 +12,5 @@ Pod::Spec.new do |s| s.libraries = 'z', 'xml2' s.xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' } s.requires_arc = true + s.module_name = 'RaptureXML' end From 402211e81ab9b01c109e0be3812cfebcc18e59d6 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 22 Dec 2015 17:17:47 -0500 Subject: [PATCH 05/39] address header import problem with use_frameworks! --- RaptureXML@Gilt.podspec | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/RaptureXML@Gilt.podspec b/RaptureXML@Gilt.podspec index 7dd61d4..dadceef 100644 --- a/RaptureXML@Gilt.podspec +++ b/RaptureXML@Gilt.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'RaptureXML@Gilt' - s.version = '1.0.5' + s.version = '1.0.6' s.license = 'MIT' s.summary = 'A simple, sensible, block-based XML API for iOS and Mac development.' s.description = 'Forked by Gilt Groupe to allow access to the xml property of the RXMLElement class from within CocoaPods.' @@ -8,9 +8,10 @@ Pod::Spec.new do |s| s.author = { 'John Blanco' => 'zablanc@gmail.com' } s.source = { :git => 'https://github.com/emaloney/RaptureXML.git', :tag => s.version.to_s } s.source_files = 'RaptureXML/*' + s.module_name = 'RaptureXML' + s.header_dir = 'RaptureXML' s.libraries = 'z', 'xml2' s.xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' } s.requires_arc = true - s.module_name = 'RaptureXML' end From 12fa7ab0aa35cdf1445e17dc38158bc6347a5b54 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 22 Dec 2015 17:43:20 -0500 Subject: [PATCH 06/39] add public header for framework builds --- RaptureXML.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index 216818b..bec7a3d 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -44,6 +44,8 @@ 02F3A3FF1526D22600E8C822 /* players.xml in Resources */ = {isa = PBXBuildFile; fileRef = 0DEB8F2D14681BD800024989 /* players.xml */; }; 0DEB8F2C14681A9400024989 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B305142AE3FF0018B75D /* libz.dylib */; }; 20370A021B3C3E2D0043E14E /* RXMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 027DAC2F14FBF443001BA563 /* RXMLElement.m */; }; + 3B5E33091C2A08C200121E9E /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B5E330A1C2A08C700121E9E /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5415BE4216FC638100AFC566 /* HTMLTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5415BE4116FC638100AFC566 /* HTMLTests.m */; }; 6BD1BDA91558B91400F1D055 /* RXMLElement.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; }; /* End PBXBuildFile section */ @@ -214,6 +216,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + 3B5E33091C2A08C200121E9E /* RXMLElement.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -221,6 +224,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + 3B5E330A1C2A08C700121E9E /* RXMLElement.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; From 521c2a031d4415dc5ce4ef3e57e52b0d7dd78f1d Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 22 Dec 2015 17:44:05 -0500 Subject: [PATCH 07/39] bump cocoapods version --- RaptureXML@Gilt.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RaptureXML@Gilt.podspec b/RaptureXML@Gilt.podspec index dadceef..73b05d1 100644 --- a/RaptureXML@Gilt.podspec +++ b/RaptureXML@Gilt.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'RaptureXML@Gilt' - s.version = '1.0.6' + s.version = '1.0.7' s.license = 'MIT' s.summary = 'A simple, sensible, block-based XML API for iOS and Mac development.' s.description = 'Forked by Gilt Groupe to allow access to the xml property of the RXMLElement class from within CocoaPods.' From 25ed6784028989ae94e10b9b3e166e1831912a72 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 22 Dec 2015 23:31:11 -0500 Subject: [PATCH 08/39] now that we're building as a framework, we need an umbrella header --- RaptureXML.xcodeproj/project.pbxproj | 6 ++++++ RaptureXML/RaptureXML.h | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 RaptureXML/RaptureXML.h diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index bec7a3d..c396829 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -44,6 +44,8 @@ 02F3A3FF1526D22600E8C822 /* players.xml in Resources */ = {isa = PBXBuildFile; fileRef = 0DEB8F2D14681BD800024989 /* players.xml */; }; 0DEB8F2C14681A9400024989 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B305142AE3FF0018B75D /* libz.dylib */; }; 20370A021B3C3E2D0043E14E /* RXMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 027DAC2F14FBF443001BA563 /* RXMLElement.m */; }; + 3B067BFC1C2A5A1300DE2495 /* RaptureXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B067BFD1C2A5A1300DE2495 /* RaptureXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3B5E33091C2A08C200121E9E /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3B5E330A1C2A08C700121E9E /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5415BE4216FC638100AFC566 /* HTMLTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5415BE4116FC638100AFC566 /* HTMLTests.m */; }; @@ -91,6 +93,7 @@ 0DEB8F2D14681BD800024989 /* players.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = players.xml; path = Tests/players.xml; sourceTree = SOURCE_ROOT; }; 1413670716D9BEC700501ABB /* CopyTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CopyTests.m; path = Tests/CopyTests.m; sourceTree = SOURCE_ROOT; }; 20370A0A1B3C3E2D0043E14E /* libRaptureXML.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRaptureXML.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RaptureXML.h; sourceTree = ""; }; 5415BE4116FC638100AFC566 /* HTMLTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTMLTests.m; path = Tests/HTMLTests.m; sourceTree = SOURCE_ROOT; }; 6BD1BD951558B7A800F1D055 /* RaptureXML-StaticLib-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RaptureXML-StaticLib-Prefix.pch"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -187,6 +190,7 @@ 027DAC2B14FBF443001BA563 /* RaptureXML */ = { isa = PBXGroup; children = ( + 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */, 027DAC2E14FBF443001BA563 /* RXMLElement.h */, 027DAC2F14FBF443001BA563 /* RXMLElement.m */, ); @@ -216,6 +220,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + 3B067BFC1C2A5A1300DE2495 /* RaptureXML.h in Headers */, 3B5E33091C2A08C200121E9E /* RXMLElement.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -224,6 +229,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + 3B067BFD1C2A5A1300DE2495 /* RaptureXML.h in Headers */, 3B5E330A1C2A08C700121E9E /* RXMLElement.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/RaptureXML/RaptureXML.h b/RaptureXML/RaptureXML.h new file mode 100644 index 0000000..b5edfb9 --- /dev/null +++ b/RaptureXML/RaptureXML.h @@ -0,0 +1,27 @@ +// +// RaptureXML.h +// +// Created by Evan Maloney on 12/22/15. +// Copyright © 2015 Gilt Groupe. All rights reserved. +// + +#ifndef __OBJC__ + +#error RaptureXML requires Objective-C + +#else + +#import + +//! Project version number for RaptureXML. +FOUNDATION_EXPORT double RaptureXMLVersionNumber; + +//! Project version string for RaptureXML. +FOUNDATION_EXPORT const unsigned char RaptureXMLVersionString[]; + +// import the public headers + +#import + +#endif + From 69cebbaea2f4b00bc2734b38d7448f0b54b628ce Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 22 Dec 2015 23:31:29 -0500 Subject: [PATCH 09/39] remove RaptureXMLFramework target --- RaptureXML.xcodeproj/project.pbxproj | 83 ---------------------------- 1 file changed, 83 deletions(-) diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index c396829..a1c251f 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -6,22 +6,6 @@ objectVersion = 46; objects = { -/* Begin PBXAggregateTarget section */ - 6BD1BD9D1558B7FA00F1D055 /* RaptureXMLFramework */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 6BD1BD9E1558B7FA00F1D055 /* Build configuration list for PBXAggregateTarget "RaptureXMLFramework" */; - buildPhases = ( - 6BD1BDA61558B82400F1D055 /* Build static lib */, - 6BD1BDA71558B85A00F1D055 /* Assemble Framework */, - 6BD1BDA81558B90300F1D055 /* Copy Headers */, - ); - dependencies = ( - ); - name = RaptureXMLFramework; - productName = RaptureXMLKit; - }; -/* End PBXAggregateTarget section */ - /* Begin PBXBuildFile section */ 02041DBA1526B0DE00D1F36A /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 02041DB71526A71200D1F36A /* libxml2.dylib */; }; 0252B2DF142ADFC60018B75D /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B2DE142ADFC60018B75D /* SenTestingKit.framework */; }; @@ -49,23 +33,8 @@ 3B5E33091C2A08C200121E9E /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3B5E330A1C2A08C700121E9E /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5415BE4216FC638100AFC566 /* HTMLTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5415BE4116FC638100AFC566 /* HTMLTests.m */; }; - 6BD1BDA91558B91400F1D055 /* RXMLElement.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; }; /* End PBXBuildFile section */ -/* Begin PBXCopyFilesBuildPhase section */ - 6BD1BDA81558B90300F1D055 /* Copy Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal/${PRODUCT_NAME}.framework/Versions/A/Headers/"; - dstSubfolderSpec = 0; - files = ( - 6BD1BDA91558B91400F1D055 /* RXMLElement.h in Copy Headers */, - ); - name = "Copy Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ 02041DB71526A71200D1F36A /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; }; 02041DC21526D03A00D1F36A /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; @@ -321,7 +290,6 @@ 0DEB8EB31467EC9B00024989 /* RaptureXML iOS */, 20370A001B3C3E2D0043E14E /* RaptureXML OSX */, 0252B2DC142ADFC60018B75D /* RaptureXMLTests */, - 6BD1BD9D1558B7FA00F1D055 /* RaptureXMLFramework */, ); }; /* End PBXProject section */ @@ -351,34 +319,6 @@ shellPath = /bin/sh; shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; }; - 6BD1BDA61558B82400F1D055 /* Build static lib */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Build static lib"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/usr/bin/xcodebuild -project ${PROJECT_NAME}.xcodeproj -sdk iphonesimulator -target ${PROJECT_NAME} -configuration ${CONFIGURATION} clean build\n/usr/bin/xcodebuild -project ${PROJECT_NAME}.xcodeproj -sdk iphoneos -target ${PROJECT_NAME} -configuration ${CONFIGURATION} clean build\n"; - }; - 6BD1BDA71558B85A00F1D055 /* Assemble Framework */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Assemble Framework"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin\nSIMULATOR_LIBRARY_PATH=\"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a\" &&\nDEVICE_LIBRARY_PATH=\"${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a\" &&\nUNIVERSAL_LIBRARY_DIR=\"${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal\" &&\nUNIVERSAL_LIBRARY_PATH=\"${UNIVERSAL_LIBRARY_DIR}/${PRODUCT_NAME}\" &&\nFRAMEWORK=\"${UNIVERSAL_LIBRARY_DIR}/${PRODUCT_NAME}.framework\" &&\n\n# Create framework directory structure.\nrm -rf \"${FRAMEWORK}\" &&\nmkdir -p \"${UNIVERSAL_LIBRARY_DIR}\" &&\nmkdir -p \"${FRAMEWORK}/Versions/A/Headers\" &&\nmkdir -p \"${FRAMEWORK}/Versions/A/Resources\" &&\n\n# Generate universal binary from desktop, device, and simulator builds.\nlipo \"${SIMULATOR_LIBRARY_PATH}\" \"${DEVICE_LIBRARY_PATH}\" -create -output \"${UNIVERSAL_LIBRARY_PATH}\" &&\n\n# Move files to appropriate locations in framework paths.\ncp \"${UNIVERSAL_LIBRARY_PATH}\" \"${FRAMEWORK}/Versions/A\" &&\nln -s \"A\" \"${FRAMEWORK}/Versions/Current\" &&\nln -s \"Versions/Current/Headers\" \"${FRAMEWORK}/Headers\" &&\nln -s \"Versions/Current/Resources\" \"${FRAMEWORK}/Resources\" &&\nln -s \"Versions/Current/${PRODUCT_NAME}\" \"${FRAMEWORK}/${PRODUCT_NAME}\"\n#cp \"${SRCROOT}/Resources/Info.plist\" \"${FRAMEWORK}/Resources/Info.plist\""; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -655,20 +595,6 @@ }; name = Release; }; - 6BD1BD9F1558B7FA00F1D055 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = RaptureXML; - }; - name = Debug; - }; - 6BD1BDA01558B7FA00F1D055 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = RaptureXML; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -708,15 +634,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 6BD1BD9E1558B7FA00F1D055 /* Build configuration list for PBXAggregateTarget "RaptureXMLFramework" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6BD1BD9F1558B7FA00F1D055 /* Debug */, - 6BD1BDA01558B7FA00F1D055 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = 0252B2B6142ADFC60018B75D /* Project object */; From e687ce323657281ee1fcd484930a65efb0d12958 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 22 Dec 2015 23:35:02 -0500 Subject: [PATCH 10/39] bump cocoapods version --- RaptureXML@Gilt.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RaptureXML@Gilt.podspec b/RaptureXML@Gilt.podspec index 73b05d1..960949b 100644 --- a/RaptureXML@Gilt.podspec +++ b/RaptureXML@Gilt.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'RaptureXML@Gilt' - s.version = '1.0.7' + s.version = '1.0.8' s.license = 'MIT' s.summary = 'A simple, sensible, block-based XML API for iOS and Mac development.' s.description = 'Forked by Gilt Groupe to allow access to the xml property of the RXMLElement class from within CocoaPods.' From 714834dab551ca6ee2bd7abe3d53420ffb590c08 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 22 Dec 2015 23:52:54 -0500 Subject: [PATCH 11/39] an attempt at fixing framework header conundrum --- RaptureXML.xcodeproj/project.pbxproj | 6 ++++-- RaptureXML/RXMLElement.h | 5 ----- RaptureXML/RXMLElement.m | 2 +- RaptureXML/RaptureXML.h | 8 ++++++++ 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index a1c251f..66639f1 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -14,7 +14,6 @@ 0252B2E2142ADFC60018B75D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B2C7142ADFC60018B75D /* CoreGraphics.framework */; }; 02565F9916E6320700A882F9 /* CopyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1413670716D9BEC700501ABB /* CopyTests.m */; }; 027B3571153C624700A4EDF2 /* DeepChildrenTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DEB8EC71467ED9C00024989 /* DeepChildrenTests.m */; }; - 027DAC3314FBF443001BA563 /* RXMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 027DAC2F14FBF443001BA563 /* RXMLElement.m */; }; 027DAC3614FBF465001BA563 /* RXMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 027DAC2F14FBF443001BA563 /* RXMLElement.m */; }; 02ADE6A216A0E33A008643D5 /* AttributeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 02ADE6A116A0E33A008643D5 /* AttributeTests.m */; }; 02ADE6A316A0E491008643D5 /* BoundaryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DEB8EC61467ED9C00024989 /* BoundaryTests.m */; }; @@ -326,7 +325,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 027DAC3314FBF443001BA563 /* RXMLElement.m in Sources */, 027B3571153C624700A4EDF2 /* DeepChildrenTests.m in Sources */, 02ADE6A216A0E33A008643D5 /* AttributeTests.m in Sources */, 02ADE6A316A0E491008643D5 /* BoundaryTests.m in Sources */, @@ -471,6 +469,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_ARC = YES; + DEFINES_MODULE = YES; DSTROOT = /tmp/RaptureXML.dst; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -502,6 +501,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_OBJC_ARC = YES; + DEFINES_MODULE = YES; DSTROOT = /tmp/RaptureXML.dst; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -534,6 +534,7 @@ buildSettings = { CLANG_ENABLE_OBJC_ARC = YES; COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; DSTROOT = /tmp/RaptureXML.dst; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -567,6 +568,7 @@ buildSettings = { CLANG_ENABLE_OBJC_ARC = YES; COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; DSTROOT = /tmp/RaptureXML.dst; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", diff --git a/RaptureXML/RXMLElement.h b/RaptureXML/RXMLElement.h index 6bc81a0..5f0a3d5 100644 --- a/RaptureXML/RXMLElement.h +++ b/RaptureXML/RXMLElement.h @@ -29,11 +29,6 @@ // #import -#import -#import -#import -#import -#import @interface RXMLDocHolder : NSObject { xmlDocPtr doc_; diff --git a/RaptureXML/RXMLElement.m b/RaptureXML/RXMLElement.m index eaf0733..9a41b01 100644 --- a/RaptureXML/RXMLElement.m +++ b/RaptureXML/RXMLElement.m @@ -28,7 +28,7 @@ // ================================================================================================ // -#import "RXMLElement.h" +#import @implementation RXMLDocHolder diff --git a/RaptureXML/RaptureXML.h b/RaptureXML/RaptureXML.h index b5edfb9..713ca3c 100644 --- a/RaptureXML/RaptureXML.h +++ b/RaptureXML/RaptureXML.h @@ -19,6 +19,14 @@ FOUNDATION_EXPORT double RaptureXMLVersionNumber; //! Project version string for RaptureXML. FOUNDATION_EXPORT const unsigned char RaptureXMLVersionString[]; +// XML library dependencies + +#import +#import +#import +#import +#import + // import the public headers #import From 0db1ab5a6da2ad1237cb5f192fb6b11150d678ab Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 22 Dec 2015 23:53:10 -0500 Subject: [PATCH 12/39] bump cocoapods version --- RaptureXML@Gilt.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RaptureXML@Gilt.podspec b/RaptureXML@Gilt.podspec index 960949b..e2578c3 100644 --- a/RaptureXML@Gilt.podspec +++ b/RaptureXML@Gilt.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'RaptureXML@Gilt' - s.version = '1.0.8' + s.version = '1.0.9' s.license = 'MIT' s.summary = 'A simple, sensible, block-based XML API for iOS and Mac development.' s.description = 'Forked by Gilt Groupe to allow access to the xml property of the RXMLElement class from within CocoaPods.' From e78de0e50500a8465200f4b94f6cff6725199f60 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 22 Dec 2015 23:59:55 -0500 Subject: [PATCH 13/39] attempt fix for "non-modular header in framework" --- RaptureXML/RXMLElement.m | 8 ++++++++ RaptureXML/RaptureXML.h | 8 -------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/RaptureXML/RXMLElement.m b/RaptureXML/RXMLElement.m index 9a41b01..8fccb89 100644 --- a/RaptureXML/RXMLElement.m +++ b/RaptureXML/RXMLElement.m @@ -28,6 +28,14 @@ // ================================================================================================ // +// XML library dependencies + +#import +#import +#import +#import +#import + #import @implementation RXMLDocHolder diff --git a/RaptureXML/RaptureXML.h b/RaptureXML/RaptureXML.h index 713ca3c..b5edfb9 100644 --- a/RaptureXML/RaptureXML.h +++ b/RaptureXML/RaptureXML.h @@ -19,14 +19,6 @@ FOUNDATION_EXPORT double RaptureXMLVersionNumber; //! Project version string for RaptureXML. FOUNDATION_EXPORT const unsigned char RaptureXMLVersionString[]; -// XML library dependencies - -#import -#import -#import -#import -#import - // import the public headers #import From b2ff20c8301db52d207f4df4e32a79d1c4a7e318 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Wed, 23 Dec 2015 00:00:02 -0500 Subject: [PATCH 14/39] bump cocoapods version --- RaptureXML@Gilt.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RaptureXML@Gilt.podspec b/RaptureXML@Gilt.podspec index e2578c3..5dbe903 100644 --- a/RaptureXML@Gilt.podspec +++ b/RaptureXML@Gilt.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'RaptureXML@Gilt' - s.version = '1.0.9' + s.version = '1.0.10' s.license = 'MIT' s.summary = 'A simple, sensible, block-based XML API for iOS and Mac development.' s.description = 'Forked by Gilt Groupe to allow access to the xml property of the RXMLElement class from within CocoaPods.' From dd21b419798328e19f7fba8ba0779a9d90767c07 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Wed, 23 Dec 2015 00:08:06 -0500 Subject: [PATCH 15/39] kludging around a cocoapods build bug --- RaptureXML/RXMLElement.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/RaptureXML/RXMLElement.h b/RaptureXML/RXMLElement.h index 5f0a3d5..e5a74f1 100644 --- a/RaptureXML/RXMLElement.h +++ b/RaptureXML/RXMLElement.h @@ -30,6 +30,11 @@ #import +#ifndef __XML_TREE_H__ +typedef void* xmlDocPtr; +typedef void* xmlNodePtr; +#endif + @interface RXMLDocHolder : NSObject { xmlDocPtr doc_; } From 5a8843f677f918ab4b52fc591835771c8adc2abb Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Wed, 23 Dec 2015 00:08:36 -0500 Subject: [PATCH 16/39] bump cocoapods version --- RaptureXML@Gilt.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RaptureXML@Gilt.podspec b/RaptureXML@Gilt.podspec index 5dbe903..0fb1e16 100644 --- a/RaptureXML@Gilt.podspec +++ b/RaptureXML@Gilt.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'RaptureXML@Gilt' - s.version = '1.0.10' + s.version = '1.0.11' s.license = 'MIT' s.summary = 'A simple, sensible, block-based XML API for iOS and Mac development.' s.description = 'Forked by Gilt Groupe to allow access to the xml property of the RXMLElement class from within CocoaPods.' From df5e992d9e9876748d67ba1c45bd274227f269d5 Mon Sep 17 00:00:00 2001 From: ReadmeCritic Date: Wed, 17 Feb 2016 07:49:09 -0800 Subject: [PATCH 17/39] Correct the capitalization of Xcode in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 845a473..7830c42 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,7 @@ RaptureXML is easily integrated into RubyMotion! [Here's how.](http://rapturein # Unit Tests as Documentation # -You can see the full usage of RaptureXML by reading the unit tests in the project. Not only does it show you all the code, but you'll know it works! (You can run the unit tests by pressing Command-U in XCode) +You can see the full usage of RaptureXML by reading the unit tests in the project. Not only does it show you all the code, but you'll know it works! (You can run the unit tests by pressing Command-U in Xcode) # Who Created RaptureXML? # From 8a72ce66fe564166087fafd67d6da4539e84d651 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Fri, 4 Mar 2016 12:00:45 -0500 Subject: [PATCH 18/39] update RaptureXML to use as a submodule --- RaptureXML.xcodeproj/project.pbxproj | 286 ++++++++++++++++++ ...heme => RaptureXML OSX Framework.xcscheme} | 20 +- ...heme => RaptureXML iOS Framework.xcscheme} | 20 +- RaptureXML/Info.plist | 28 ++ RaptureXML/RaptureXML.h | 16 +- RaptureXML@Gilt.podspec | 17 -- 6 files changed, 338 insertions(+), 49 deletions(-) rename RaptureXML.xcodeproj/xcshareddata/xcschemes/{RaptureXML OSX.xcscheme => RaptureXML OSX Framework.xcscheme} (82%) rename RaptureXML.xcodeproj/xcshareddata/xcschemes/{RaptureXML iOS.xcscheme => RaptureXML iOS Framework.xcscheme} (82%) create mode 100644 RaptureXML/Info.plist delete mode 100644 RaptureXML@Gilt.podspec diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index 66639f1..48767d5 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -31,6 +31,14 @@ 3B067BFD1C2A5A1300DE2495 /* RaptureXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3B5E33091C2A08C200121E9E /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3B5E330A1C2A08C700121E9E /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B6D82901C89EFF500504542 /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B6D82911C89EFF500504542 /* RXMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 027DAC2F14FBF443001BA563 /* RXMLElement.m */; }; + 3B6D829F1C89F08F00504542 /* RaptureXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B6D82A01C89F08F00504542 /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B6D82A11C89F08F00504542 /* RXMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 027DAC2F14FBF443001BA563 /* RXMLElement.m */; }; + 3B6D82A21C89F09000504542 /* RaptureXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B6D82A51C89F1BF00504542 /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B6D82A31C89F12D00504542 /* libxml2.tbd */; }; + 3B6D82A71C89F1D900504542 /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B6D82A61C89F1D900504542 /* libxml2.tbd */; }; 5415BE4216FC638100AFC566 /* HTMLTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5415BE4116FC638100AFC566 /* HTMLTests.m */; }; /* End PBXBuildFile section */ @@ -62,6 +70,10 @@ 1413670716D9BEC700501ABB /* CopyTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CopyTests.m; path = Tests/CopyTests.m; sourceTree = SOURCE_ROOT; }; 20370A0A1B3C3E2D0043E14E /* libRaptureXML.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRaptureXML.a; sourceTree = BUILT_PRODUCTS_DIR; }; 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RaptureXML.h; sourceTree = ""; }; + 3B6D82881C89EFCB00504542 /* RaptureXML.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RaptureXML.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B6D82971C89F02600504542 /* RaptureXML.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RaptureXML.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B6D82A31C89F12D00504542 /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = usr/lib/libxml2.tbd; sourceTree = SDKROOT; }; + 3B6D82A61C89F1D900504542 /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/lib/libxml2.tbd; sourceTree = DEVELOPER_DIR; }; 5415BE4116FC638100AFC566 /* HTMLTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTMLTests.m; path = Tests/HTMLTests.m; sourceTree = SOURCE_ROOT; }; 6BD1BD951558B7A800F1D055 /* RaptureXML-StaticLib-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RaptureXML-StaticLib-Prefix.pch"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -94,6 +106,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 3B6D82841C89EFCB00504542 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3B6D82A51C89F1BF00504542 /* libxml2.tbd in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3B6D82931C89F02600504542 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3B6D82A71C89F1D900504542 /* libxml2.tbd in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -115,6 +143,8 @@ 0252B2DD142ADFC60018B75D /* RaptureXMLTests.octest */, 0DEB8EB41467EC9B00024989 /* libRaptureXML.a */, 20370A0A1B3C3E2D0043E14E /* libRaptureXML.a */, + 3B6D82881C89EFCB00504542 /* RaptureXML.framework */, + 3B6D82971C89F02600504542 /* RaptureXML.framework */, ); name = Products; sourceTree = ""; @@ -122,6 +152,8 @@ 0252B2C2142ADFC60018B75D /* Frameworks */ = { isa = PBXGroup; children = ( + 3B6D82A61C89F1D900504542 /* libxml2.tbd */, + 3B6D82A31C89F12D00504542 /* libxml2.tbd */, 02041DC21526D03A00D1F36A /* MediaPlayer.framework */, 02041DB71526A71200D1F36A /* libxml2.dylib */, 0252B305142AE3FF0018B75D /* libz.dylib */, @@ -202,6 +234,24 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 3B6D82851C89EFCB00504542 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3B6D82A21C89F09000504542 /* RaptureXML.h in Headers */, + 3B6D82901C89EFF500504542 /* RXMLElement.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3B6D82941C89F02600504542 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3B6D82A01C89F08F00504542 /* RXMLElement.h in Headers */, + 3B6D829F1C89F08F00504542 /* RaptureXML.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -257,6 +307,42 @@ productReference = 20370A0A1B3C3E2D0043E14E /* libRaptureXML.a */; productType = "com.apple.product-type.library.static"; }; + 3B6D82871C89EFCB00504542 /* RaptureXML-iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3B6D828F1C89EFCB00504542 /* Build configuration list for PBXNativeTarget "RaptureXML-iOS" */; + buildPhases = ( + 3B6D82831C89EFCB00504542 /* Sources */, + 3B6D82841C89EFCB00504542 /* Frameworks */, + 3B6D82851C89EFCB00504542 /* Headers */, + 3B6D82861C89EFCB00504542 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "RaptureXML-iOS"; + productName = RaptureXML; + productReference = 3B6D82881C89EFCB00504542 /* RaptureXML.framework */; + productType = "com.apple.product-type.framework"; + }; + 3B6D82961C89F02600504542 /* RaptureXML-OSX */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3B6D829C1C89F02600504542 /* Build configuration list for PBXNativeTarget "RaptureXML-OSX" */; + buildPhases = ( + 3B6D82921C89F02600504542 /* Sources */, + 3B6D82931C89F02600504542 /* Frameworks */, + 3B6D82941C89F02600504542 /* Headers */, + 3B6D82951C89F02600504542 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "RaptureXML-OSX"; + productName = RaptureXML; + productReference = 3B6D82971C89F02600504542 /* RaptureXML.framework */; + productType = "com.apple.product-type.framework"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -266,6 +352,14 @@ LastTestingUpgradeCheck = 0640; LastUpgradeCheck = 0640; ORGANIZATIONNAME = "Rapture In Venice"; + TargetAttributes = { + 3B6D82871C89EFCB00504542 = { + CreatedOnToolsVersion = 7.3; + }; + 3B6D82961C89F02600504542 = { + CreatedOnToolsVersion = 7.3; + }; + }; }; buildConfigurationList = 0252B2B9142ADFC60018B75D /* Build configuration list for PBXProject "RaptureXML" */; compatibilityVersion = "Xcode 3.2"; @@ -289,6 +383,8 @@ 0DEB8EB31467EC9B00024989 /* RaptureXML iOS */, 20370A001B3C3E2D0043E14E /* RaptureXML OSX */, 0252B2DC142ADFC60018B75D /* RaptureXMLTests */, + 3B6D82871C89EFCB00504542 /* RaptureXML-iOS */, + 3B6D82961C89F02600504542 /* RaptureXML-OSX */, ); }; /* End PBXProject section */ @@ -302,6 +398,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 3B6D82861C89EFCB00504542 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3B6D82951C89F02600504542 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -356,6 +466,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 3B6D82831C89EFCB00504542 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3B6D82911C89EFF500504542 /* RXMLElement.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3B6D82921C89F02600504542 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3B6D82A11C89F08F00504542 /* RXMLElement.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ @@ -597,6 +723,150 @@ }; name = Release; }; + 3B6D828D1C89EFCB00504542 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; + INFOPLIST_FILE = RaptureXML/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.gilt.RaptureXML; + PRODUCT_NAME = RaptureXML; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 3B6D828E1C89EFCB00504542 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_NS_ASSERTIONS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; + INFOPLIST_FILE = RaptureXML/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.gilt.RaptureXML; + PRODUCT_NAME = RaptureXML; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 3B6D829D1C89F02600504542 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CODE_SIGN_IDENTITY = "-"; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_VERSION = A; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; + INFOPLIST_FILE = RaptureXML/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.gilt.RaptureXML; + PRODUCT_NAME = RaptureXML; + SDKROOT = macosx; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 3B6D829E1C89F02600504542 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CODE_SIGN_IDENTITY = "-"; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_NS_ASSERTIONS = NO; + FRAMEWORK_VERSION = A; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; + INFOPLIST_FILE = RaptureXML/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.gilt.RaptureXML; + PRODUCT_NAME = RaptureXML; + SDKROOT = macosx; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -636,6 +906,22 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 3B6D828F1C89EFCB00504542 /* Build configuration list for PBXNativeTarget "RaptureXML-iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3B6D828D1C89EFCB00504542 /* Debug */, + 3B6D828E1C89EFCB00504542 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + 3B6D829C1C89F02600504542 /* Build configuration list for PBXNativeTarget "RaptureXML-OSX" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3B6D829D1C89F02600504542 /* Debug */, + 3B6D829E1C89F02600504542 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; /* End XCConfigurationList section */ }; rootObject = 0252B2B6142ADFC60018B75D /* Project object */; diff --git a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX.xcscheme b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX Framework.xcscheme similarity index 82% rename from RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX.xcscheme rename to RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX Framework.xcscheme index 0de60d6..c96c16f 100644 --- a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX.xcscheme +++ b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX Framework.xcscheme @@ -1,6 +1,6 @@ @@ -45,9 +45,9 @@ @@ -63,9 +63,9 @@ diff --git a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS.xcscheme b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS Framework.xcscheme similarity index 82% rename from RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS.xcscheme rename to RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS Framework.xcscheme index 1e05c75..86d2b15 100644 --- a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS.xcscheme +++ b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS Framework.xcscheme @@ -1,6 +1,6 @@ @@ -45,9 +45,9 @@ @@ -63,9 +63,9 @@ diff --git a/RaptureXML/Info.plist b/RaptureXML/Info.plist new file mode 100644 index 0000000..0cf9721 --- /dev/null +++ b/RaptureXML/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSHumanReadableCopyright + Copyright © 2016 Rapture In Venice. All rights reserved. + NSPrincipalClass + + + diff --git a/RaptureXML/RaptureXML.h b/RaptureXML/RaptureXML.h index b5edfb9..3a7effd 100644 --- a/RaptureXML/RaptureXML.h +++ b/RaptureXML/RaptureXML.h @@ -1,16 +1,11 @@ // // RaptureXML.h +// RaptureXML // -// Created by Evan Maloney on 12/22/15. -// Copyright © 2015 Gilt Groupe. All rights reserved. +// Created by emaloney on 3/4/16. +// Copyright © 2016 Rapture In Venice. All rights reserved. // -#ifndef __OBJC__ - -#error RaptureXML requires Objective-C - -#else - #import //! Project version number for RaptureXML. @@ -19,9 +14,6 @@ FOUNDATION_EXPORT double RaptureXMLVersionNumber; //! Project version string for RaptureXML. FOUNDATION_EXPORT const unsigned char RaptureXMLVersionString[]; -// import the public headers +// In this header, you should import all the public headers of your framework using statements like #import #import - -#endif - diff --git a/RaptureXML@Gilt.podspec b/RaptureXML@Gilt.podspec deleted file mode 100644 index 0fb1e16..0000000 --- a/RaptureXML@Gilt.podspec +++ /dev/null @@ -1,17 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'RaptureXML@Gilt' - s.version = '1.0.11' - s.license = 'MIT' - s.summary = 'A simple, sensible, block-based XML API for iOS and Mac development.' - s.description = 'Forked by Gilt Groupe to allow access to the xml property of the RXMLElement class from within CocoaPods.' - s.homepage = 'https://github.com/ZaBlanc/RaptureXML' - s.author = { 'John Blanco' => 'zablanc@gmail.com' } - s.source = { :git => 'https://github.com/emaloney/RaptureXML.git', :tag => s.version.to_s } - s.source_files = 'RaptureXML/*' - s.module_name = 'RaptureXML' - s.header_dir = 'RaptureXML' - - s.libraries = 'z', 'xml2' - s.xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' } - s.requires_arc = true -end From 445e752c8575ce5e666aa05daae39b146c892156 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Fri, 4 Mar 2016 12:33:05 -0500 Subject: [PATCH 19/39] build all platform architectures --- RaptureXML.xcodeproj/project.pbxproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index 48767d5..74c410c 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -517,7 +517,6 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 4.3; - ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; @@ -913,6 +912,7 @@ 3B6D828E1C89EFCB00504542 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 3B6D829C1C89F02600504542 /* Build configuration list for PBXNativeTarget "RaptureXML-OSX" */ = { isa = XCConfigurationList; @@ -921,6 +921,7 @@ 3B6D829E1C89F02600504542 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; From f5cb007d670081c94c380bd6f2bad545d8613258 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 6 Sep 2016 12:01:29 -0400 Subject: [PATCH 20/39] prepare for Xcode 8 --- RaptureXML.xcodeproj/project.pbxproj | 28 +++++++++++++------ .../RaptureXML OSX Framework.xcscheme | 2 +- .../RaptureXML iOS Framework.xcscheme | 2 +- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index 74c410c..c5c6d79 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -350,7 +350,7 @@ isa = PBXProject; attributes = { LastTestingUpgradeCheck = 0640; - LastUpgradeCheck = 0640; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = "Rapture In Venice"; TargetAttributes = { 3B6D82871C89EFCB00504542 = { @@ -489,16 +489,20 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -516,7 +520,8 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; @@ -525,11 +530,14 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -545,7 +553,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; @@ -605,7 +613,7 @@ GCC_PREFIX_HEADER = "Library-Prefix.pch"; GCC_VERSION = ""; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2/**"; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../FuzzAlert/AdMob\"", @@ -637,7 +645,7 @@ GCC_PREFIX_HEADER = "Library-Prefix.pch"; GCC_VERSION = ""; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2/**"; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../FuzzAlert/AdMob\"", @@ -670,7 +678,7 @@ GCC_PREFIX_HEADER = "Library-Prefix.pch"; GCC_VERSION = ""; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2/**"; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../FuzzAlert/AdMob\"", @@ -704,7 +712,7 @@ GCC_PREFIX_HEADER = "Library-Prefix.pch"; GCC_VERSION = ""; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2/**"; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../FuzzAlert/AdMob\"", @@ -732,6 +740,7 @@ CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; @@ -766,6 +775,7 @@ CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -801,7 +811,7 @@ CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; @@ -838,7 +848,7 @@ CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; diff --git a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX Framework.xcscheme b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX Framework.xcscheme index c96c16f..7f70ecb 100644 --- a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX Framework.xcscheme +++ b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX Framework.xcscheme @@ -1,6 +1,6 @@ Date: Tue, 13 Sep 2016 22:43:10 -0400 Subject: [PATCH 21/39] update to latest standard .gitignore --- .gitignore | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 0b64641..49776c5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,10 @@ +# Finder/Mac OS X +# +.DS_Store + # Xcode -build/* +# +build/ *.pbxuser !default.pbxuser *.mode1v3 @@ -8,8 +13,17 @@ build/* !default.mode2v3 *.perspectivev3 !default.perspectivev3 -*.xcworkspace -!default.xcworkspace xcuserdata -profile -*.moved-aside \ No newline at end of file +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +*.xcscmblueprint + +# Carthage: we --use-submodules for our non-leaf dependencies +# +Carthage/* +!Carthage/Checkouts/ +**/Carthage/ From dc8111a30ac7bf8014bf0e3dc02339832132e74d Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Wed, 5 Apr 2017 22:05:42 -0400 Subject: [PATCH 22/39] rework to x-platform: iOS, macOS, tvOS, watchOS --- .../Info-Framework.plist | 0 BuildControl/Info-Tests.plist | 24 + BuildControl/bin/releaseMe.sh | 555 +++++++++++ BuildControl/bin/travisBuildHelper.sh | 72 ++ BuildControl/config/Debug.xcconfig | 6 + BuildControl/config/Framework.xcconfig | 5 + BuildControl/config/Project.xcconfig | 56 ++ BuildControl/config/Release.xcconfig | 5 + BuildControl/config/Tests.xcconfig | 5 + License.txt | 7 - RaptureXML.xcodeproj/project.pbxproj | 922 +++++------------- .../contents.xcworkspacedata | 2 +- .../RaptureXML iOS Framework.xcscheme | 80 -- ...Framework.xcscheme => RaptureXML.xcscheme} | 33 +- {RaptureXML => Sources}/RXMLElement.h | 0 {RaptureXML => Sources}/RXMLElement.m | 0 {RaptureXML => Sources}/RaptureXML.h | 0 17 files changed, 999 insertions(+), 773 deletions(-) rename RaptureXML/Info.plist => BuildControl/Info-Framework.plist (100%) create mode 100644 BuildControl/Info-Tests.plist create mode 100755 BuildControl/bin/releaseMe.sh create mode 100755 BuildControl/bin/travisBuildHelper.sh create mode 100644 BuildControl/config/Debug.xcconfig create mode 100644 BuildControl/config/Framework.xcconfig create mode 100644 BuildControl/config/Project.xcconfig create mode 100644 BuildControl/config/Release.xcconfig create mode 100644 BuildControl/config/Tests.xcconfig delete mode 100644 License.txt delete mode 100644 RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS Framework.xcscheme rename RaptureXML.xcodeproj/xcshareddata/xcschemes/{RaptureXML OSX Framework.xcscheme => RaptureXML.xcscheme} (68%) rename {RaptureXML => Sources}/RXMLElement.h (100%) rename {RaptureXML => Sources}/RXMLElement.m (100%) rename {RaptureXML => Sources}/RaptureXML.h (100%) diff --git a/RaptureXML/Info.plist b/BuildControl/Info-Framework.plist similarity index 100% rename from RaptureXML/Info.plist rename to BuildControl/Info-Framework.plist diff --git a/BuildControl/Info-Tests.plist b/BuildControl/Info-Tests.plist new file mode 100644 index 0000000..7a09667 --- /dev/null +++ b/BuildControl/Info-Tests.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.0.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/BuildControl/bin/releaseMe.sh b/BuildControl/bin/releaseMe.sh new file mode 100755 index 0000000..6f2fc3a --- /dev/null +++ b/BuildControl/bin/releaseMe.sh @@ -0,0 +1,555 @@ +#!/bin/bash + +# +# Cleanroom Project release generator script +# +# by emaloney, 7 June 2015 +# + +set -o pipefail # to ensure xcodebuild pipeline errors are propagated correctly + +SCRIPT_NAME=$(basename "$0") +SCRIPT_DIR=$(cd "$PWD" ; cd `dirname "$0"` ; echo "$PWD") + +showHelp() +{ + echo "$SCRIPT_NAME" + echo + printf "\tGenerates a new release of the project contained in this git\n" + printf "\trepository.\n" + echo + echo "Usage:" + echo + printf "\t$SCRIPT_NAME \n" + echo + echo "Where:" + echo + printf "\t is 'major', 'minor' or 'patch', depending on which\n" + printf "\t\tportion of the version number should be incremented for this\n" + printf "\t\trelease.\n" + echo + printf "\tThis script also accepts these optional command-line arguments:\n" + echo + printf "\t\t--set-version \n" + printf "\t\t\tMake the version number being released\n" + echo + printf "\t\t--auto\n" + printf "\t\t\tRun automatically without awaiting user confirmation\n" + echo + printf "\t\t--tag\n" + printf "\t\t\tTags the repo with the version number upon success\n" + echo + printf "\t\t--push\n" + printf "\t\t\tPush all changes upon success\n" + echo + printf "\t\t--no-commit\n" + printf "\t\t\tSkips committing any changes; implies --no-tag\n" + echo + printf "\t\t--no-tag\n" + printf "\t\t\tOverrides --tag if specified; --no-tag is the default\n" + echo + printf "\t\t--stash-dirty-files\n" + printf "\t\t\tStashes dirty files before attempting to release\n" + echo + printf "\t\t--commit-dirty-files\n" + printf "\t\t\tCommits dirty files before attempting to release\n" + echo + printf "\t\t--ignore-dirty-files\n" + printf "\t\t\tIgnores dirty files; implies --no-commit --no-tag\n" + echo + printf "\t\t--skip-docs\n" + printf "\t\t\tSkips generating the documentation\n" + echo + printf "\t\t--skip-tests\n" + printf "\t\t\tSkips running the unit tests :-(\n" + echo + printf "\t\t--dry-run\n" + printf "\t\t\tShow commands to be executed instead of executing them\n" + echo + printf "\tFurther detail about these options can be found below.\n" + echo + echo "How it works" + echo + printf "\tBy default, the script inspects the appropriate property list file(s)\n" + printf "\tto determine the current version of the project. The script then\n" + printf "\tincrements the version number according to the release type\n" + printf "\tspecified:\n" + echo + printf "\tmajor — When the major release type is specified, the major version\n" + printf "\t\tcomponent is incremented, and both the minor and patch\n" + printf "\t\tcomponents are reset to zero. 2.1.3 becomes 3.0.0.\n" + echo + printf "\tminor — When the minor release type is specified, the major version\n" + printf "\t\tcomponent is not changed, while the minor component is\n" + printf "\t\tincremented and patch component is reset to zero.\n" + printf "\t\t2.1.3 becomes 2.2.0.\n" + echo + printf "\tpatch — When the patch release type is specified, the major and minor\n" + printf "\t\tversion components remain unchanged, while the patch component\n" + printf "\t\tis incremented. 2.1.3 becomes 2.1.4.\n" + echo + printf "\tThe script then updates all necessary references to the version\n" + printf "\telsewhere in the project.\n" + echo + printf "\tThen, the API documentation is rebuilt, and the repository is tagged\n" + printf "\twith the appropriate version number for the release.\n" + echo + printf "\tFinally, if the --push argument was supplied, the entire release is\n" + printf "\tpushed to the repo's origin remote.\n" + echo + echo "Specifying the version explicitly" + echo + printf "\tThe --set-version argument can be supplied along with a version number\n" + printf "\tif you wish to specify the exact version number to use.\n" + echo + printf "\tThe version number is expected to contain exactly three integer\n" + printf "\tcomponents separated by periods; trailing zeros are used if\n" + printf "\tnecessary.\n" + echo + printf "\tIf you wanted to set a release version of 4.2.1, for example, you\n" + printf "\tcould call the script as follows:\n" + echo + printf "\t\t$SCRIPT_NAME --set-version 4.2.1\n" + echo + printf "\tNOTE: When the --set-version argument is supplied, the release-type\n" + printf "\t argument does not need to be specified (and it will be ignored\n" + printf "\t if it is).\n" + echo + echo "User Confirmation" + echo + printf "\tBy default, this script requires user confirmation before making\n" + printf "\tany changes.\n" + echo + printf "\tTo allow this script to be invoked by other scripts, an automated\n" + printf "\tmode is also supported.\n" + echo + printf "\tWhen this script is run in automated mode, the user will not be\n" + printf "\tasked to confirm any actions; all actions are performed immediately.\n" + echo + printf "\tTo enable automated mode, supply the --auto argument.\n" + echo + echo "Releasing with uncommitted changes" + echo + printf "\tNormally, this script will refuse to continue if the repository\n" + printf "\tis dirty; that is, if there are any modified files that haven't\n" + printf "\tyet been committed.\n" + echo + printf "\tHowever, you can force a release to be issued from a dirty repo\n" + printf "\tusing either the --stash-dirty-files or the --commit-dirty-files\n" + printf "\targument.\n" + echo + printf "\tThe --stash-dirty-files option causes a git stash operation to\n" + printf "\toccur at the start of the release process, and a stash pop at the\n" + printf "\tend. This safely moves the dirty files out of the way when the\n" + printf "\tscript it doing its thing, and restores them when it is done.\n" + echo + printf "\tThe --commit-dirty-files option causes the dirty files to be\n" + printf "\tcommitted along with the other changes that occur during the\n" + printf "\trelease process.\n" + echo + printf "\tIn addition, an --ignore-dirty-files option is available, which\n" + printf "\tlets you go through the entire release process, but stops short\n" + printf "\tof committing and tagging. This allows you to run through the\n" + printf "\tentire release process without committing you to committing.\n" + echo + printf "\tNote that these options are mutually exclusive and may not be\n" + printf "\tused with each other.\n" + echo + echo "Dry run mode" + echo + printf "\tUsing the --dry-run argument prevents the release from occurring\n" + printf "\tand instead shows what would occur if the release were to be\n" + printf "\texecuted using the supplied command-line arguments.\n" + echo + echo "Help" + echo + printf "\tThis documentation is displayed when supplying the --help (or\n" + printf "\t-h or -?) argument.\n" + echo + printf "\tNote that when this script displays help documentation, all other\n" + printf "\tcommand line arguments are ignored and no other actions are performed.\n" + echo +} + +printError() +{ + echo "error: $1" + echo + if [[ ! -z $2 ]]; then + printf " $2\n\n" + fi +} + +exitWithError() +{ + printError "$1" "$2" + exit 1 +} + +exitWithErrorSuggestHelp() +{ + printError "$1" "$2" + printf " To display help, run:\n\n\t$0 --help\n" + exit 1 +} + +validateVersion() +{ + if [[ ! ($1 =~ ^[0-9]+\.[0-9]+\.[0-9]+$) ]]; then + exitWithErrorSuggestHelp "Expected $2 to contain three period-separated numeric components (eg., 3.6.1, 4.0.0, etc.); got $1 instead" + fi +} + +updateStatus() +{ + echo + echo "$1" + echo +} + +confirmationPrompt() +{ + echo + echo $1 + if [[ -z $AUTOMATED_MODE ]]; then + echo + read -p "Are you sure you want to do this? " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit -1 + fi + fi +} + +executeCommand() +{ + if [[ $DRY_RUN_MODE ]]; then + if [[ ! $DID_DRY_RUN_MSG ]]; then + printf "\t!!! DRY RUN MODE - Will only show commands, not execute them !!!\n" + echo + DID_DRY_RUN_MSG=1 + fi + echo "> executing: " + echo + echo " set -o pipefail && $1" + else + eval "set -o pipefail && $1" + if [[ $? != 0 ]]; then + exitWithError "Command failed" + fi + fi +} + +cleanupDirtyStash() +{ + updateStatus "Restoring previously-stashed modified files" + executeCommand "git stash pop" +} + +# +# make sure we're in a git repo +# +cd "$SCRIPT_DIR/../../." +git status 2&> /dev/null +if [[ $? != 0 ]]; then + exitWithErrorSuggestHelp "You must invoke this script from within a git repo" +fi + +# +# parse the command-line arguments +# +STASH_DIRTY_FILES=0 +COMMIT_DIRTY_FILES=0 +IGNORE_DIRTY_FILES=0 +while [[ $1 ]]; do + case $1 in + --set-version) + shift + if [[ -z $1 ]]; then + exitWithErrorSuggestHelp "The $1 argument expects a value" + else + validateVersion $1 "the version passed with the --set-version argument" + SET_VERSION=$1 + fi + ;; + + --auto|-a) + AUTOMATED_MODE=1 + ;; + + --stash-dirty-files) + STASH_DIRTY_FILES=1 + ;; + + --commit-dirty-files) + COMMIT_DIRTY_FILES=1 + ;; + + --ignore-dirty-files) + IGNORE_DIRTY_FILES=1 + NO_COMMIT=1 + NO_TAG=1 + ;; + + --no-commit) + NO_COMMIT=1 + NO_TAG=1 + ;; + + --no-tag) + NO_TAG=1 + ;; + + --tag) + TAG_WHEN_DONE=1 + ;; + + --push) + PUSH_WHEN_DONE=1 + ;; + + --skip-docs) + SKIP_DOCUMENTATION=1 + ;; + + --skip-tests) + SKIP_TESTS=1 + ;; + + --dry-run) + DRY_RUN_MODE=1 + ;; + + --help|-h|-\?) + SHOW_HELP=1 + ;; + + -*) + exitWithErrorSuggestHelp "Unrecognized argument: $1" + ;; + + *) + if [[ -z $ARGS ]]; then + ARGS=$1 + else + ARGS="$ARGS $1" + fi + esac + shift +done + +if [[ $SHOW_HELP ]]; then + showHelp + exit 1 +fi + +for ARG in $ARGS; do + if [[ -z $RELEASE_TYPE ]]; then + RELEASE_TYPE="$ARG" + else + exitWithErrorSuggestHelp "Unrecognized argument: $ARG" + fi +done + +# +# validate the input +# +if [[ $(( $STASH_DIRTY_FILES + $COMMIT_DIRTY_FILES + $IGNORE_DIRTY_FILES )) > 1 ]]; then + exitWithErrorSuggestHelp "The --stash-dirty-files, --commit-dirty-files and --ignore-dirty-files arguments are mutually exclusive and can't be used with each other" +fi +if [[ ! -z $RELEASE_TYPE ]]; then + if [[ ! -z $SET_VERSION ]]; then + exitWithErrorSuggestHelp "The release type can't be specified when --set-version is used" + elif [[ $RELEASE_TYPE != "major" && $RELEASE_TYPE != "minor" && $RELEASE_TYPE != "patch" ]]; then + exitWithErrorSuggestHelp "The release type argument must be one of: 'major', 'minor' or 'patch'" + fi +elif [[ -z $SET_VERSION ]]; then + if [[ -z $RELEASE_TYPE ]]; then + exitWithErrorSuggestHelp "The release type ('major', 'minor' or 'patch') must be specified as an argument." + fi +fi + +# +# figure out what the current version is +# +PLIST_BUDDY=/usr/libexec/PlistBuddy +if [[ ! -x "$PLIST_BUDDY" ]]; then + exitWithErrorSuggestHelp "Expected to find PlistBuddy at path $PLIST_BUDDY" +fi +FRAMEWORK_PLIST_FILE="Info-Framework.plist" +FRAMEWORK_PLIST_PATH="$SCRIPT_DIR/../$FRAMEWORK_PLIST_FILE" +CURRENT_VERSION=`$PLIST_BUDDY "$FRAMEWORK_PLIST_PATH" -c "Print :CFBundleShortVersionString"` +validateVersion "$CURRENT_VERSION" "the CFBundleShortVersionString value in the $FRAMEWORK_PLIST_FILE file" + +# +# now, do the right thing depending on the command-line arguments +# +if [[ ! -z $SET_VERSION ]]; then + VERSION=$SET_VERSION +elif [[ ! -z $RELEASE_TYPE ]]; then + MAJOR_VERSION=`echo $CURRENT_VERSION | awk -F . '{print int($1)}'` + MINOR_VERSION=`echo $CURRENT_VERSION | awk -F . '{print int($2)}'` + PATCH_VERSION=`echo $CURRENT_VERSION | awk -F . '{print int($3)}'` + + case $RELEASE_TYPE in + major) + MAJOR_VERSION=$(( $MAJOR_VERSION + 1 )) + MINOR_VERSION=0 + PATCH_VERSION=0 + ;; + + minor) + MINOR_VERSION=$(( $MINOR_VERSION + 1 )) + PATCH_VERSION=0 + ;; + + patch) + PATCH_VERSION=$(( $PATCH_VERSION + 1 )) + ;; + esac + + VERSION="${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}" +fi + +# +# try to figure out the origin repo name +# +REPO_NAME=$(git remote -v | grep "^origin" | grep "(fetch)" | awk '{print $2}' | xargs basename | sed 'sq.git$qq') +if [[ -z "$REPO_NAME" ]]; then + exitWithErrorSuggestHelp "Couldn't determine repo name" +fi + +# +# output a warning if there are conflicting tag flags +# +if [[ $TAG_WHEN_DONE && $NO_TAG ]]; then + exitWithErrorSuggestHelp "--tag can't be specified with --no-tag, --no-commit or --ignore-dirty-files" +fi + +# +# see if we've got uncommitted changes +# +git diff-index --quiet HEAD -- ; REPO_IS_DIRTY=$? +if [[ $REPO_IS_DIRTY != 0 && $(( $STASH_DIRTY_FILES + $COMMIT_DIRTY_FILES + $IGNORE_DIRTY_FILES )) == 0 ]]; then + exitWithErrorSuggestHelp "You have uncommitted changes in this repo; won't do anything" "(use --stash-dirty-files, --commit-dirty-files or\n\t--ignore-dirty-files to bypass this error)" +fi + +confirmationPrompt "Releasing $REPO_NAME $VERSION (current is $CURRENT_VERSION)" + +if [[ $REPO_IS_DIRTY && $STASH_DIRTY_FILES > 0 ]]; then + updateStatus "Stashing modified files" + executeCommand "git stash" + trap cleanupDirtyStash EXIT +fi + +# +# make sure it builds +# +updateStatus "Verifying that $REPO_NAME builds" +XCODEBUILD=/usr/bin/xcodebuild +if [[ ! -x "$XCODEBUILD" ]]; then + exitWithErrorSuggestHelp "Expected to find xcodebuild at path $XCODEBUILD" +fi + +# +# use xcpretty if it is available +# +XCODEBUILD_PIPETO="" +XCPRETTY=`which xcpretty` +if [[ $? == 0 ]]; then + XCODEBUILD_PIPETO="| $XCPRETTY" +fi + +# +# determine build settings +# +PROJECT_SPECIFIER="-project RaptureXML.xcodeproj" +COMPILE_PLATFORMS="iOS macOS tvOS watchOS" +PROJECT_NAME="RaptureXML" + +testActionForPlatform() +{ + case $1 in + iOS) echo "test";; + macOS) echo "test";; + tvOS) echo "test";; + watchOS) echo "build";; + esac +} + +runDestinationForPlatform() +{ + case $1 in + iOS) echo "platform=iOS Simulator,OS=10.3,name=iPad Pro (9.7 inch)";; + macOS) echo "platform=macOS";; + tvOS) echo "platform=tvOS Simulator,OS=10.2,name=Apple TV 1080p";; + watchOS) echo "platform=watchOS Simulator,OS=3.2,name=Apple Watch Series 2 - 42mm";; + esac +} + +# +# build for each platform +# +for PLATFORM in $COMPILE_PLATFORMS; do + updateStatus "Building: $PROJECT_NAME for $PLATFORM..." + if [[ $SKIP_TESTS ]]; then + BUILD_ACTION="clean build" + else + BUILD_ACTION="clean $(testActionForPlatform $PLATFORM)" + fi + RUN_DESTINATION="$(runDestinationForPlatform $PLATFORM)" + executeCommand "$XCODEBUILD $PROJECT_SPECIFIER -scheme \"${REPO_NAME}\" -configuration Debug -destination \"$RUN_DESTINATION\" $BUILD_ACTION $XCODEBUILD_PIPETO" +done + +# +# bump version numbers +# +updateStatus "Adjusting version numbers" +executeCommand "$PLIST_BUDDY \"$FRAMEWORK_PLIST_PATH\" -c \"Set :CFBundleShortVersionString $VERSION\"" +executeCommand "agvtool bump" + +if [[ ! $SKIP_DOCUMENTATION ]]; then + updateStatus "Rebuilding documentation" + executeCommand "$SCRIPT_DIR/generateDocumentationForAPI.sh" + executeCommand "git add Documentation/." +fi + +# +# commit changes +# +BUILD_NUMBER=`agvtool vers -terse` +COMMIT_COMMENT="Release $VERSION (build $BUILD_NUMBER)" +if [[ $REPO_IS_DIRTY && $COMMIT_DIRTY_FILES > 0 ]]; then + COMMIT_COMMENT="$COMMIT_COMMENT -- committed with other changes" +fi +if [[ -z $NO_COMMIT ]]; then + updateStatus "Committing changes" + executeCommand "git commit -a -m '$COMMIT_COMMENT'" +else + updateStatus "! Not committing changes; --no-commit or --ignore-dirty-files was specified" + printf "> To commit manually, use:\n\n git commit -a -m '$COMMIT_COMMENT'\n" +fi + +# +# tag repo with new version number +# +if [[ $TAG_WHEN_DONE && -z $NO_COMMIT && -z $NO_TAG ]]; then + updateStatus "Tagging repo for $VERSION release" + executeCommand "git tag -a $VERSION -m 'Release $VERSION issued by $SCRIPT_NAME'" +else + updateStatus "! Not tagging repo; --tag was not specified" + printf "> To tag manually, use:\n\n git tag -a $VERSION -m 'Release $VERSION issued by $SCRIPT_NAME'\n" +fi + +# +# push if we should +# +if [[ $PUSH_WHEN_DONE && -z $NO_COMMIT ]]; then + updateStatus "Pushing changes to origin" + executeCommand "git push" + if [[ $TAG_WHEN_DONE && !$NO_TAG ]]; then + executeCommand "git push --tags" + fi +else + printf "\n> REMEMBER: The release isn't done until you push the changes! Don't forget to:\n\n git push && git push --tags\n" +fi diff --git a/BuildControl/bin/travisBuildHelper.sh b/BuildControl/bin/travisBuildHelper.sh new file mode 100755 index 0000000..a87b761 --- /dev/null +++ b/BuildControl/bin/travisBuildHelper.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +set -o pipefail + +if [[ $# != 2 ]]; then + echo "error: Expecting 2 arguments; " + exit 1 +fi + +OPERATION="$1" +PLATFORM="$2" + +# +# this function compensates for the fact that macOS is still on bash 3.x +# and therefore a more sensible implementation using associative +# arrays is not currently possible +# +runDestinationForPlatform() +{ + case $1 in + iOS) echo "platform=iOS Simulator,OS=10.3,name=iPad Pro (9.7 inch)";; + macOS) echo "platform=macOS";; + tvOS) echo "platform=tvOS Simulator,OS=10.2,name=Apple TV 1080p";; + watchOS) echo "platform=watchOS Simulator,OS=3.2,name=Apple Watch Series 2 - 42mm";; + esac +} + +case $OPERATION in + build) + MAXIMUM_TRIES=1 + XCODE_ACTION="clean build";; + + test) + MAXIMUM_TRIES=3 + XCODE_ACTION="test";; + + *) + echo "error: Unknown operation: $OPERATION" + exit 1;; +esac + +DESTINATION=$(runDestinationForPlatform $PLATFORM) + +# +# this retry loop is an unfortunate hack; Travis unit tests periodically fail +# without explanation with an exit code of 65. Sometimes this is just a temporary +# glitch and re-trying will succeed. We retry a few times if we keep hitting 65 +# to avoid the temporary error. If it fails enough times, we assume it's a 'real' +# failure +# +THIS_TRY=0 +while [[ $THIS_TRY < $MAXIMUM_TRIES ]]; do + THIS_TRY=$(( $THIS_TRY + 1 )) + if [[ $MAXIMUM_TRIES > 1 ]]; then + echo "Attempt $THIS_TRY of $MAXIMUM_TRIES..." + fi + + ( set -o pipefail && xcodebuild -project RaptureXML.xcodeproj -configuration Debug -scheme "RaptureXML" -destination "$DESTINATION" -destination-timeout 300 $XCODE_ACTION 2>&1 | tee "RaptureXML-$PLATFORM-$OPERATION.log" | xcpretty ) + XCODE_RESULT="${PIPESTATUS[0]}" + if [[ "$XCODE_RESULT" == "0" ]]; then + rm "RaptureXML-$PLATFORM-$OPERATION.log" + exit 0 + elif [[ "$XCODE_RESULT" != "65" ]]; then + echo "Failed with exit code $XCODE_RESULT." + exit $XCODE_RESULT + elif [[ $MAXIMUM_TRIES > 1 && $THIS_TRY < $MAXIMUM_TRIES ]]; then + echo "Failed with exit code 65. This may be a transient error; trying again." + echo + fi +done + +exit $XCODE_RESULT diff --git a/BuildControl/config/Debug.xcconfig b/BuildControl/config/Debug.xcconfig new file mode 100644 index 0000000..1256493 --- /dev/null +++ b/BuildControl/config/Debug.xcconfig @@ -0,0 +1,6 @@ +#include "Framework.xcconfig" + +ONLY_ACTIVE_ARCH = YES +SWIFT_OPTIMIZATION_LEVEL = -Onone +SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) DEBUG +ENABLE_BITCODE = NO diff --git a/BuildControl/config/Framework.xcconfig b/BuildControl/config/Framework.xcconfig new file mode 100644 index 0000000..f50a478 --- /dev/null +++ b/BuildControl/config/Framework.xcconfig @@ -0,0 +1,5 @@ +PRODUCT_NAME = RaptureXML +PRODUCT_BUNDLE_IDENTIFIER = com.raptureinvenice.$(PRODUCT_NAME:rfc1034identifier) +INFOPLIST_FILE = BuildControl/Info-Framework.plist +DYLIB_CURRENT_VERSION = $(CURRENT_PROJECT_VERSION) + diff --git a/BuildControl/config/Project.xcconfig b/BuildControl/config/Project.xcconfig new file mode 100644 index 0000000..d6a0aae --- /dev/null +++ b/BuildControl/config/Project.xcconfig @@ -0,0 +1,56 @@ +SUPPORTED_PLATFORMS = iphoneos iphonesimulator macosx appletvos appletvsimulator watchos watchsimulator +TARGETED_DEVICE_FAMILY = 1,2,3,4 + +//////////////////////////////////////////////////////////////////////////////// +// +// iOS-specific settings +// +IPHONEOS_DEPLOYMENT_TARGET = 9.0 + +VALID_ARCHS[sdk=iphoneos*] = arm64 armv7 armv7s +VALID_ARCHS[sdk=iphonesimulator*] = i386 x86_64 + +LD_RUNPATH_SEARCH_PATHS[sdk=iphoneos*] = @executable_path/Frameworks @loader_path/Frameworks +LD_RUNPATH_SEARCH_PATHS[sdk=iphonesimulator*] = @executable_path/Frameworks @loader_path/Frameworks + +ENABLE_BITCODE[sdk=iphone*] = YES + +//////////////////////////////////////////////////////////////////////////////// +// +// macOS-specific settings +// +MACOSX_DEPLOYMENT_TARGET = 10.11 + +VALID_ARCHS[sdk=macosx*] = i386 x86_64 + +LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = @executable_path/../Frameworks @loader_path/../Frameworks + +ENABLE_BITCODE[sdk=macosx*] = NO + +//////////////////////////////////////////////////////////////////////////////// +// +// tvOS-specific settings +// +TVOS_DEPLOYMENT_TARGET = 9.0 + +VALID_ARCHS[sdk=appletvos*] = arm64 +VALID_ARCHS[sdk=appletvsimulator*] = x86_64 + +LD_RUNPATH_SEARCH_PATHS[sdk=appletvos*] = @executable_path/Frameworks @loader_path/Frameworks +LD_RUNPATH_SEARCH_PATHS[sdk=appletvsimulator*] = @executable_path/Frameworks @loader_path/Frameworks + +ENABLE_BITCODE[sdk=appletv*] = YES + +//////////////////////////////////////////////////////////////////////////////// +// +// watchOS-specific settings +// +WATCHOS_DEPLOYMENT_TARGET = 2.0 + +VALID_ARCHS[sdk=watchos*] = armv7k +VALID_ARCHS[sdk=watchsimulator*] = i386 + +LD_RUNPATH_SEARCH_PATHS[sdk=watchos*] = @executable_path/Frameworks @loader_path/Frameworks +LD_RUNPATH_SEARCH_PATHS[sdk=watchsimulator*] = @executable_path/Frameworks @loader_path/Frameworks + +ENABLE_BITCODE[sdk=watch*] = YES diff --git a/BuildControl/config/Release.xcconfig b/BuildControl/config/Release.xcconfig new file mode 100644 index 0000000..72d6b83 --- /dev/null +++ b/BuildControl/config/Release.xcconfig @@ -0,0 +1,5 @@ +#include "Framework.xcconfig" + +ONLY_ACTIVE_ARCH = NO +SWIFT_OPTIMIZATION_LEVEL = -Owholemodule +BITCODE_GENERATION_MODE = bitcode diff --git a/BuildControl/config/Tests.xcconfig b/BuildControl/config/Tests.xcconfig new file mode 100644 index 0000000..5cfdfa4 --- /dev/null +++ b/BuildControl/config/Tests.xcconfig @@ -0,0 +1,5 @@ +INFOPLIST_FILE = BuildControl/Info-Tests.plist +PRODUCT_NAME = RaptureXMLUnitTests +PRODUCT_BUNDLE_IDENTIFIER = com.raptureinvenice.test.$(PRODUCT_NAME:rfc1034identifier) +SWIFT_OPTIMIZATION_LEVEL = -Onone +ONLY_ACTIVE_ARCH = YES diff --git a/License.txt b/License.txt deleted file mode 100644 index 256df4a..0000000 --- a/License.txt +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (c) 2013 John Blanco - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index c5c6d79..21f67bf 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -7,500 +7,354 @@ objects = { /* Begin PBXBuildFile section */ - 02041DBA1526B0DE00D1F36A /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 02041DB71526A71200D1F36A /* libxml2.dylib */; }; - 0252B2DF142ADFC60018B75D /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B2DE142ADFC60018B75D /* SenTestingKit.framework */; }; - 0252B2E0142ADFC60018B75D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B2C3142ADFC60018B75D /* UIKit.framework */; }; - 0252B2E1142ADFC60018B75D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B2C5142ADFC60018B75D /* Foundation.framework */; }; - 0252B2E2142ADFC60018B75D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B2C7142ADFC60018B75D /* CoreGraphics.framework */; }; - 02565F9916E6320700A882F9 /* CopyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1413670716D9BEC700501ABB /* CopyTests.m */; }; - 027B3571153C624700A4EDF2 /* DeepChildrenTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DEB8EC71467ED9C00024989 /* DeepChildrenTests.m */; }; - 027DAC3614FBF465001BA563 /* RXMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 027DAC2F14FBF443001BA563 /* RXMLElement.m */; }; - 02ADE6A216A0E33A008643D5 /* AttributeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 02ADE6A116A0E33A008643D5 /* AttributeTests.m */; }; - 02ADE6A316A0E491008643D5 /* BoundaryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DEB8EC61467ED9C00024989 /* BoundaryTests.m */; }; - 02ADE6A416A0E491008643D5 /* DeepTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DEB8EC81467ED9C00024989 /* DeepTests.m */; }; - 02ADE6A516A0E491008643D5 /* ErrorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DEB8EC91467ED9C00024989 /* ErrorTests.m */; }; - 02ADE6A616A0E491008643D5 /* SimpleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DEB8ECA1467ED9C00024989 /* SimpleTests.m */; }; - 02ADE6A716A0E491008643D5 /* TextConversionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DEB8ECB1467ED9C00024989 /* TextConversionTests.m */; }; - 02ADE6A816A0E491008643D5 /* WildcardTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DEB8ECC1467ED9C00024989 /* WildcardTests.m */; }; - 02ADE6A916A0E491008643D5 /* EncodingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 02F3A4041526D7BC00E8C822 /* EncodingTests.m */; }; - 02ADE6AA16A0E491008643D5 /* XPathTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 027B6BCF153C652E00A4EDF2 /* XPathTests.m */; }; - 02F3A3FF1526D22600E8C822 /* players.xml in Resources */ = {isa = PBXBuildFile; fileRef = 0DEB8F2D14681BD800024989 /* players.xml */; }; - 0DEB8F2C14681A9400024989 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0252B305142AE3FF0018B75D /* libz.dylib */; }; - 20370A021B3C3E2D0043E14E /* RXMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 027DAC2F14FBF443001BA563 /* RXMLElement.m */; }; - 3B067BFC1C2A5A1300DE2495 /* RaptureXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B067BFD1C2A5A1300DE2495 /* RaptureXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B5E33091C2A08C200121E9E /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B5E330A1C2A08C700121E9E /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B6D82901C89EFF500504542 /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B6D82911C89EFF500504542 /* RXMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 027DAC2F14FBF443001BA563 /* RXMLElement.m */; }; - 3B6D829F1C89F08F00504542 /* RaptureXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B6D82A01C89F08F00504542 /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 027DAC2E14FBF443001BA563 /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B6D82A11C89F08F00504542 /* RXMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 027DAC2F14FBF443001BA563 /* RXMLElement.m */; }; - 3B6D82A21C89F09000504542 /* RaptureXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B6D82A51C89F1BF00504542 /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B6D82A31C89F12D00504542 /* libxml2.tbd */; }; - 3B6D82A71C89F1D900504542 /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B6D82A61C89F1D900504542 /* libxml2.tbd */; }; - 5415BE4216FC638100AFC566 /* HTMLTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5415BE4116FC638100AFC566 /* HTMLTests.m */; }; + 3B3B9D6D1E95CEC8005AB4DE /* RaptureXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B3B9D6A1E95CEC8005AB4DE /* RaptureXML.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B3B9D6E1E95CEC8005AB4DE /* RXMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B3B9D6B1E95CEC8005AB4DE /* RXMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B3B9D6F1E95CEC8005AB4DE /* RXMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D6C1E95CEC8005AB4DE /* RXMLElement.m */; }; + 3B3B9D801E95CEE5005AB4DE /* AttributeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D711E95CEE5005AB4DE /* AttributeTests.m */; }; + 3B3B9D811E95CEE5005AB4DE /* BoundaryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D721E95CEE5005AB4DE /* BoundaryTests.m */; }; + 3B3B9D821E95CEE5005AB4DE /* CopyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D731E95CEE5005AB4DE /* CopyTests.m */; }; + 3B3B9D831E95CEE5005AB4DE /* DeepChildrenTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D741E95CEE5005AB4DE /* DeepChildrenTests.m */; }; + 3B3B9D841E95CEE5005AB4DE /* DeepTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D751E95CEE5005AB4DE /* DeepTests.m */; }; + 3B3B9D851E95CEE5005AB4DE /* EncodingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D761E95CEE5005AB4DE /* EncodingTests.m */; }; + 3B3B9D861E95CEE5005AB4DE /* ErrorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D771E95CEE5005AB4DE /* ErrorTests.m */; }; + 3B3B9D871E95CEE5005AB4DE /* HTMLTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D781E95CEE5005AB4DE /* HTMLTests.m */; }; + 3B3B9D881E95CEE5005AB4DE /* players.xml in Resources */ = {isa = PBXBuildFile; fileRef = 3B3B9D7A1E95CEE5005AB4DE /* players.xml */; }; + 3B3B9D891E95CEE5005AB4DE /* SimpleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D7B1E95CEE5005AB4DE /* SimpleTests.m */; }; + 3B3B9D8A1E95CEE5005AB4DE /* TextConversionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D7D1E95CEE5005AB4DE /* TextConversionTests.m */; }; + 3B3B9D8B1E95CEE5005AB4DE /* WildcardTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D7E1E95CEE5005AB4DE /* WildcardTests.m */; }; + 3B3B9D8C1E95CEE5005AB4DE /* XPathTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D7F1E95CEE5005AB4DE /* XPathTests.m */; }; + 3B3B9D8F1E95CF8B005AB4DE /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B3B9D8E1E95CF8B005AB4DE /* libxml2.tbd */; }; + 3B3B9D921E95D5C8005AB4DE /* RaptureTestSuite.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B9D911E95D5C8005AB4DE /* RaptureTestSuite.m */; }; + 3B90590D1DAECB5200B4EEC0 /* RaptureXML.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B9059031DAECB5200B4EEC0 /* RaptureXML.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 3B90590E1DAECB5200B4EEC0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 3B9058FA1DAECB5200B4EEC0 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3B9059021DAECB5200B4EEC0; + remoteInfo = RaptureXML; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ - 02041DB71526A71200D1F36A /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; }; - 02041DC21526D03A00D1F36A /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; - 0252B2C3142ADFC60018B75D /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 0252B2C5142ADFC60018B75D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 0252B2C7142ADFC60018B75D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 0252B2DD142ADFC60018B75D /* RaptureXMLTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RaptureXMLTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; - 0252B2DE142ADFC60018B75D /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; - 0252B305142AE3FF0018B75D /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; - 027B6BCF153C652E00A4EDF2 /* XPathTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XPathTests.m; path = Tests/XPathTests.m; sourceTree = SOURCE_ROOT; }; - 027DAC2E14FBF443001BA563 /* RXMLElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RXMLElement.h; sourceTree = ""; }; - 027DAC2F14FBF443001BA563 /* RXMLElement.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RXMLElement.m; sourceTree = ""; }; - 027DAC3814FBF4B5001BA563 /* Library-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Library-Prefix.pch"; sourceTree = ""; }; - 02ADE6A116A0E33A008643D5 /* AttributeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AttributeTests.m; sourceTree = SOURCE_ROOT; }; - 02F3A4041526D7BC00E8C822 /* EncodingTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EncodingTests.m; sourceTree = SOURCE_ROOT; }; - 0DEB8EB41467EC9B00024989 /* libRaptureXML.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRaptureXML.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 0DEB8EC61467ED9C00024989 /* BoundaryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BoundaryTests.m; path = Tests/BoundaryTests.m; sourceTree = SOURCE_ROOT; }; - 0DEB8EC71467ED9C00024989 /* DeepChildrenTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DeepChildrenTests.m; path = Tests/DeepChildrenTests.m; sourceTree = SOURCE_ROOT; }; - 0DEB8EC81467ED9C00024989 /* DeepTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DeepTests.m; path = Tests/DeepTests.m; sourceTree = SOURCE_ROOT; }; - 0DEB8EC91467ED9C00024989 /* ErrorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ErrorTests.m; path = Tests/ErrorTests.m; sourceTree = SOURCE_ROOT; }; - 0DEB8ECA1467ED9C00024989 /* SimpleTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SimpleTests.m; path = Tests/SimpleTests.m; sourceTree = SOURCE_ROOT; }; - 0DEB8ECB1467ED9C00024989 /* TextConversionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TextConversionTests.m; path = Tests/TextConversionTests.m; sourceTree = SOURCE_ROOT; }; - 0DEB8ECC1467ED9C00024989 /* WildcardTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WildcardTests.m; path = Tests/WildcardTests.m; sourceTree = SOURCE_ROOT; }; - 0DEB8F2B14681A0800024989 /* Tests-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Tests-Prefix.pch"; path = "Tests/Tests-Prefix.pch"; sourceTree = SOURCE_ROOT; }; - 0DEB8F2D14681BD800024989 /* players.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = players.xml; path = Tests/players.xml; sourceTree = SOURCE_ROOT; }; - 1413670716D9BEC700501ABB /* CopyTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CopyTests.m; path = Tests/CopyTests.m; sourceTree = SOURCE_ROOT; }; - 20370A0A1B3C3E2D0043E14E /* libRaptureXML.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRaptureXML.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RaptureXML.h; sourceTree = ""; }; - 3B6D82881C89EFCB00504542 /* RaptureXML.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RaptureXML.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B6D82971C89F02600504542 /* RaptureXML.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RaptureXML.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B6D82A31C89F12D00504542 /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = usr/lib/libxml2.tbd; sourceTree = SDKROOT; }; - 3B6D82A61C89F1D900504542 /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/lib/libxml2.tbd; sourceTree = DEVELOPER_DIR; }; - 5415BE4116FC638100AFC566 /* HTMLTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTMLTests.m; path = Tests/HTMLTests.m; sourceTree = SOURCE_ROOT; }; - 6BD1BD951558B7A800F1D055 /* RaptureXML-StaticLib-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RaptureXML-StaticLib-Prefix.pch"; sourceTree = ""; }; + 3B3B9D6A1E95CEC8005AB4DE /* RaptureXML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RaptureXML.h; sourceTree = ""; }; + 3B3B9D6B1E95CEC8005AB4DE /* RXMLElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RXMLElement.h; sourceTree = ""; }; + 3B3B9D6C1E95CEC8005AB4DE /* RXMLElement.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RXMLElement.m; sourceTree = ""; }; + 3B3B9D711E95CEE5005AB4DE /* AttributeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AttributeTests.m; sourceTree = ""; }; + 3B3B9D721E95CEE5005AB4DE /* BoundaryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BoundaryTests.m; sourceTree = ""; }; + 3B3B9D731E95CEE5005AB4DE /* CopyTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CopyTests.m; sourceTree = ""; }; + 3B3B9D741E95CEE5005AB4DE /* DeepChildrenTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeepChildrenTests.m; sourceTree = ""; }; + 3B3B9D751E95CEE5005AB4DE /* DeepTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeepTests.m; sourceTree = ""; }; + 3B3B9D761E95CEE5005AB4DE /* EncodingTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EncodingTests.m; sourceTree = ""; }; + 3B3B9D771E95CEE5005AB4DE /* ErrorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ErrorTests.m; sourceTree = ""; }; + 3B3B9D781E95CEE5005AB4DE /* HTMLTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLTests.m; sourceTree = ""; }; + 3B3B9D7A1E95CEE5005AB4DE /* players.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = players.xml; sourceTree = ""; }; + 3B3B9D7B1E95CEE5005AB4DE /* SimpleTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimpleTests.m; sourceTree = ""; }; + 3B3B9D7D1E95CEE5005AB4DE /* TextConversionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TextConversionTests.m; sourceTree = ""; }; + 3B3B9D7E1E95CEE5005AB4DE /* WildcardTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WildcardTests.m; sourceTree = ""; }; + 3B3B9D7F1E95CEE5005AB4DE /* XPathTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPathTests.m; sourceTree = ""; }; + 3B3B9D8E1E95CF8B005AB4DE /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = usr/lib/libxml2.tbd; sourceTree = SDKROOT; }; + 3B3B9D901E95D5C8005AB4DE /* RaptureTestSuite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RaptureTestSuite.h; sourceTree = ""; }; + 3B3B9D911E95D5C8005AB4DE /* RaptureTestSuite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RaptureTestSuite.m; sourceTree = ""; }; + 3B9059031DAECB5200B4EEC0 /* RaptureXML.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RaptureXML.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B90590C1DAECB5200B4EEC0 /* RaptureXMLUnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RaptureXMLUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B9059251DAECB9E00B4EEC0 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + 3B9059261DAECB9E00B4EEC0 /* Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Framework.xcconfig; sourceTree = ""; }; + 3B9059271DAECB9E00B4EEC0 /* Project.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; }; + 3B9059281DAECB9E00B4EEC0 /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 3B9059291DAECB9E00B4EEC0 /* Tests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Tests.xcconfig; sourceTree = ""; }; + 3B90592B1DAECD9800B4EEC0 /* Info-Framework.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Framework.plist"; sourceTree = ""; }; + 3B90592C1DAECD9800B4EEC0 /* Info-Tests.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Tests.plist"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 0252B2D9142ADFC60018B75D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 02041DBA1526B0DE00D1F36A /* libxml2.dylib in Frameworks */, - 0DEB8F2C14681A9400024989 /* libz.dylib in Frameworks */, - 0252B2DF142ADFC60018B75D /* SenTestingKit.framework in Frameworks */, - 0252B2E0142ADFC60018B75D /* UIKit.framework in Frameworks */, - 0252B2E1142ADFC60018B75D /* Foundation.framework in Frameworks */, - 0252B2E2142ADFC60018B75D /* CoreGraphics.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 0DEB8EB11467EC9B00024989 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 20370A031B3C3E2D0043E14E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3B6D82841C89EFCB00504542 /* Frameworks */ = { + 3B9058FF1DAECB5200B4EEC0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3B6D82A51C89F1BF00504542 /* libxml2.tbd in Frameworks */, + 3B3B9D8F1E95CF8B005AB4DE /* libxml2.tbd in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3B6D82931C89F02600504542 /* Frameworks */ = { + 3B9059091DAECB5200B4EEC0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3B6D82A71C89F1D900504542 /* libxml2.tbd in Frameworks */, + 3B90590D1DAECB5200B4EEC0 /* RaptureXML.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0252B2B4142ADFC60018B75D = { + 3B3B9D701E95CEE5005AB4DE /* Tests */ = { isa = PBXGroup; children = ( - 027DAC3814FBF4B5001BA563 /* Library-Prefix.pch */, - 027DAC2B14FBF443001BA563 /* RaptureXML */, - 0252B2E5142ADFC60018B75D /* Tests */, - 6BD1BD931558B7A800F1D055 /* RaptureXML-StaticLib */, - 0252B2C2142ADFC60018B75D /* Frameworks */, - 0252B2C0142ADFC60018B75D /* Products */, - ); + 3B3B9D791E95CEE5005AB4DE /* Resources */, + 3B3B9D711E95CEE5005AB4DE /* AttributeTests.m */, + 3B3B9D721E95CEE5005AB4DE /* BoundaryTests.m */, + 3B3B9D731E95CEE5005AB4DE /* CopyTests.m */, + 3B3B9D741E95CEE5005AB4DE /* DeepChildrenTests.m */, + 3B3B9D751E95CEE5005AB4DE /* DeepTests.m */, + 3B3B9D761E95CEE5005AB4DE /* EncodingTests.m */, + 3B3B9D771E95CEE5005AB4DE /* ErrorTests.m */, + 3B3B9D781E95CEE5005AB4DE /* HTMLTests.m */, + 3B3B9D901E95D5C8005AB4DE /* RaptureTestSuite.h */, + 3B3B9D911E95D5C8005AB4DE /* RaptureTestSuite.m */, + 3B3B9D7B1E95CEE5005AB4DE /* SimpleTests.m */, + 3B3B9D7D1E95CEE5005AB4DE /* TextConversionTests.m */, + 3B3B9D7E1E95CEE5005AB4DE /* WildcardTests.m */, + 3B3B9D7F1E95CEE5005AB4DE /* XPathTests.m */, + ); + path = Tests; sourceTree = ""; }; - 0252B2C0142ADFC60018B75D /* Products */ = { + 3B3B9D791E95CEE5005AB4DE /* Resources */ = { isa = PBXGroup; children = ( - 0252B2DD142ADFC60018B75D /* RaptureXMLTests.octest */, - 0DEB8EB41467EC9B00024989 /* libRaptureXML.a */, - 20370A0A1B3C3E2D0043E14E /* libRaptureXML.a */, - 3B6D82881C89EFCB00504542 /* RaptureXML.framework */, - 3B6D82971C89F02600504542 /* RaptureXML.framework */, + 3B3B9D7A1E95CEE5005AB4DE /* players.xml */, ); - name = Products; + path = Resources; sourceTree = ""; }; - 0252B2C2142ADFC60018B75D /* Frameworks */ = { + 3B3B9D8D1E95CF8B005AB4DE /* Frameworks */ = { isa = PBXGroup; children = ( - 3B6D82A61C89F1D900504542 /* libxml2.tbd */, - 3B6D82A31C89F12D00504542 /* libxml2.tbd */, - 02041DC21526D03A00D1F36A /* MediaPlayer.framework */, - 02041DB71526A71200D1F36A /* libxml2.dylib */, - 0252B305142AE3FF0018B75D /* libz.dylib */, - 0252B2C3142ADFC60018B75D /* UIKit.framework */, - 0252B2C5142ADFC60018B75D /* Foundation.framework */, - 0252B2C7142ADFC60018B75D /* CoreGraphics.framework */, - 0252B2DE142ADFC60018B75D /* SenTestingKit.framework */, + 3B3B9D8E1E95CF8B005AB4DE /* libxml2.tbd */, ); name = Frameworks; sourceTree = ""; }; - 0252B2E5142ADFC60018B75D /* Tests */ = { + 3B9058F91DAECB5200B4EEC0 = { isa = PBXGroup; children = ( - 1413670716D9BEC700501ABB /* CopyTests.m */, - 0DEB8F2D14681BD800024989 /* players.xml */, - 0DEB8F2B14681A0800024989 /* Tests-Prefix.pch */, - 0DEB8EC61467ED9C00024989 /* BoundaryTests.m */, - 0DEB8EC71467ED9C00024989 /* DeepChildrenTests.m */, - 0DEB8EC81467ED9C00024989 /* DeepTests.m */, - 0DEB8EC91467ED9C00024989 /* ErrorTests.m */, - 0DEB8ECA1467ED9C00024989 /* SimpleTests.m */, - 0DEB8ECB1467ED9C00024989 /* TextConversionTests.m */, - 0DEB8ECC1467ED9C00024989 /* WildcardTests.m */, - 02F3A4041526D7BC00E8C822 /* EncodingTests.m */, - 027B6BCF153C652E00A4EDF2 /* XPathTests.m */, - 02ADE6A116A0E33A008643D5 /* AttributeTests.m */, - 5415BE4116FC638100AFC566 /* HTMLTests.m */, + 3B90592F1DAECF7400B4EEC0 /* Sources */, + 3B3B9D701E95CEE5005AB4DE /* Tests */, + 3B90591D1DAECB9E00B4EEC0 /* BuildControl */, + 3B9059041DAECB5200B4EEC0 /* Products */, + 3B3B9D8D1E95CF8B005AB4DE /* Frameworks */, ); - name = Tests; - path = RaptureXMLTests; sourceTree = ""; }; - 027DAC2B14FBF443001BA563 /* RaptureXML */ = { + 3B9059041DAECB5200B4EEC0 /* Products */ = { isa = PBXGroup; children = ( - 3B067BFB1C2A5A1300DE2495 /* RaptureXML.h */, - 027DAC2E14FBF443001BA563 /* RXMLElement.h */, - 027DAC2F14FBF443001BA563 /* RXMLElement.m */, + 3B9059031DAECB5200B4EEC0 /* RaptureXML.framework */, + 3B90590C1DAECB5200B4EEC0 /* RaptureXMLUnitTests.xctest */, ); - path = RaptureXML; + name = Products; sourceTree = ""; }; - 6BD1BD931558B7A800F1D055 /* RaptureXML-StaticLib */ = { + 3B90591D1DAECB9E00B4EEC0 /* BuildControl */ = { isa = PBXGroup; children = ( - 6BD1BD941558B7A800F1D055 /* Supporting Files */, + 3B9059241DAECB9E00B4EEC0 /* config */, + 3B90592B1DAECD9800B4EEC0 /* Info-Framework.plist */, + 3B90592C1DAECD9800B4EEC0 /* Info-Tests.plist */, ); - path = "RaptureXML-StaticLib"; + path = BuildControl; sourceTree = ""; }; - 6BD1BD941558B7A800F1D055 /* Supporting Files */ = { + 3B9059241DAECB9E00B4EEC0 /* config */ = { isa = PBXGroup; children = ( - 6BD1BD951558B7A800F1D055 /* RaptureXML-StaticLib-Prefix.pch */, + 3B9059251DAECB9E00B4EEC0 /* Debug.xcconfig */, + 3B9059261DAECB9E00B4EEC0 /* Framework.xcconfig */, + 3B9059271DAECB9E00B4EEC0 /* Project.xcconfig */, + 3B9059281DAECB9E00B4EEC0 /* Release.xcconfig */, + 3B9059291DAECB9E00B4EEC0 /* Tests.xcconfig */, ); - name = "Supporting Files"; + path = config; + sourceTree = ""; + }; + 3B90592F1DAECF7400B4EEC0 /* Sources */ = { + isa = PBXGroup; + children = ( + 3B3B9D6A1E95CEC8005AB4DE /* RaptureXML.h */, + 3B3B9D6B1E95CEC8005AB4DE /* RXMLElement.h */, + 3B3B9D6C1E95CEC8005AB4DE /* RXMLElement.m */, + ); + path = Sources; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 0DEB8EB21467EC9B00024989 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 3B067BFC1C2A5A1300DE2495 /* RaptureXML.h in Headers */, - 3B5E33091C2A08C200121E9E /* RXMLElement.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 20370A061B3C3E2D0043E14E /* Headers */ = { + 3B9059001DAECB5200B4EEC0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3B067BFD1C2A5A1300DE2495 /* RaptureXML.h in Headers */, - 3B5E330A1C2A08C700121E9E /* RXMLElement.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3B6D82851C89EFCB00504542 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 3B6D82A21C89F09000504542 /* RaptureXML.h in Headers */, - 3B6D82901C89EFF500504542 /* RXMLElement.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3B6D82941C89F02600504542 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 3B6D82A01C89F08F00504542 /* RXMLElement.h in Headers */, - 3B6D829F1C89F08F00504542 /* RaptureXML.h in Headers */, + 3B3B9D6E1E95CEC8005AB4DE /* RXMLElement.h in Headers */, + 3B3B9D6D1E95CEC8005AB4DE /* RaptureXML.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 0252B2DC142ADFC60018B75D /* RaptureXMLTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0252B2F4142ADFC70018B75D /* Build configuration list for PBXNativeTarget "RaptureXMLTests" */; - buildPhases = ( - 0252B2D8142ADFC60018B75D /* Sources */, - 0252B2D9142ADFC60018B75D /* Frameworks */, - 0252B2DA142ADFC60018B75D /* Resources */, - 0252B2DB142ADFC60018B75D /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = RaptureXMLTests; - productName = RaptureXMLTests; - productReference = 0252B2DD142ADFC60018B75D /* RaptureXMLTests.octest */; - productType = "com.apple.product-type.bundle.ocunit-test"; - }; - 0DEB8EB31467EC9B00024989 /* RaptureXML iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0DEB8EBC1467EC9B00024989 /* Build configuration list for PBXNativeTarget "RaptureXML iOS" */; - buildPhases = ( - 0DEB8EB01467EC9B00024989 /* Sources */, - 0DEB8EB11467EC9B00024989 /* Frameworks */, - 0DEB8EB21467EC9B00024989 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "RaptureXML iOS"; - productName = RaptureXML; - productReference = 0DEB8EB41467EC9B00024989 /* libRaptureXML.a */; - productType = "com.apple.product-type.library.static"; - }; - 20370A001B3C3E2D0043E14E /* RaptureXML OSX */ = { - isa = PBXNativeTarget; - buildConfigurationList = 20370A071B3C3E2D0043E14E /* Build configuration list for PBXNativeTarget "RaptureXML OSX" */; - buildPhases = ( - 20370A011B3C3E2D0043E14E /* Sources */, - 20370A031B3C3E2D0043E14E /* Frameworks */, - 20370A061B3C3E2D0043E14E /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "RaptureXML OSX"; - productName = RaptureXML; - productReference = 20370A0A1B3C3E2D0043E14E /* libRaptureXML.a */; - productType = "com.apple.product-type.library.static"; - }; - 3B6D82871C89EFCB00504542 /* RaptureXML-iOS */ = { + 3B9059021DAECB5200B4EEC0 /* RaptureXML */ = { isa = PBXNativeTarget; - buildConfigurationList = 3B6D828F1C89EFCB00504542 /* Build configuration list for PBXNativeTarget "RaptureXML-iOS" */; + buildConfigurationList = 3B9059171DAECB5200B4EEC0 /* Build configuration list for PBXNativeTarget "RaptureXML" */; buildPhases = ( - 3B6D82831C89EFCB00504542 /* Sources */, - 3B6D82841C89EFCB00504542 /* Frameworks */, - 3B6D82851C89EFCB00504542 /* Headers */, - 3B6D82861C89EFCB00504542 /* Resources */, + 3B9058FE1DAECB5200B4EEC0 /* Sources */, + 3B9058FF1DAECB5200B4EEC0 /* Frameworks */, + 3B9059001DAECB5200B4EEC0 /* Headers */, + 3B9059011DAECB5200B4EEC0 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = "RaptureXML-iOS"; + name = RaptureXML; productName = RaptureXML; - productReference = 3B6D82881C89EFCB00504542 /* RaptureXML.framework */; + productReference = 3B9059031DAECB5200B4EEC0 /* RaptureXML.framework */; productType = "com.apple.product-type.framework"; }; - 3B6D82961C89F02600504542 /* RaptureXML-OSX */ = { + 3B90590B1DAECB5200B4EEC0 /* RaptureXMLTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 3B6D829C1C89F02600504542 /* Build configuration list for PBXNativeTarget "RaptureXML-OSX" */; + buildConfigurationList = 3B90591A1DAECB5200B4EEC0 /* Build configuration list for PBXNativeTarget "RaptureXMLTests" */; buildPhases = ( - 3B6D82921C89F02600504542 /* Sources */, - 3B6D82931C89F02600504542 /* Frameworks */, - 3B6D82941C89F02600504542 /* Headers */, - 3B6D82951C89F02600504542 /* Resources */, + 3B9059081DAECB5200B4EEC0 /* Sources */, + 3B9059091DAECB5200B4EEC0 /* Frameworks */, + 3B90590A1DAECB5200B4EEC0 /* Resources */, ); buildRules = ( ); dependencies = ( + 3B90590F1DAECB5200B4EEC0 /* PBXTargetDependency */, ); - name = "RaptureXML-OSX"; - productName = RaptureXML; - productReference = 3B6D82971C89F02600504542 /* RaptureXML.framework */; - productType = "com.apple.product-type.framework"; + name = RaptureXMLTests; + productName = RaptureXMLTests; + productReference = 3B90590C1DAECB5200B4EEC0 /* RaptureXMLUnitTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 0252B2B6142ADFC60018B75D /* Project object */ = { + 3B9058FA1DAECB5200B4EEC0 /* Project object */ = { isa = PBXProject; attributes = { - LastTestingUpgradeCheck = 0640; - LastUpgradeCheck = 0800; - ORGANIZATIONNAME = "Rapture In Venice"; + LastSwiftUpdateCheck = 0800; + LastUpgradeCheck = 0830; + ORGANIZATIONNAME = "Gilt Groupe"; TargetAttributes = { - 3B6D82871C89EFCB00504542 = { - CreatedOnToolsVersion = 7.3; + 3B9059021DAECB5200B4EEC0 = { + CreatedOnToolsVersion = 8.0; + DevelopmentTeam = MTP6A36P8K; + ProvisioningStyle = Automatic; }; - 3B6D82961C89F02600504542 = { - CreatedOnToolsVersion = 7.3; + 3B90590B1DAECB5200B4EEC0 = { + CreatedOnToolsVersion = 8.0; + DevelopmentTeam = MTP6A36P8K; + LastSwiftMigration = 0830; + ProvisioningStyle = Automatic; }; }; }; - buildConfigurationList = 0252B2B9142ADFC60018B75D /* Build configuration list for PBXProject "RaptureXML" */; + buildConfigurationList = 3B9058FD1DAECB5200B4EEC0 /* Build configuration list for PBXProject "RaptureXML" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, - English, - de, - el, - es, - fr, - it, - ru, ); - mainGroup = 0252B2B4142ADFC60018B75D; - productRefGroup = 0252B2C0142ADFC60018B75D /* Products */; + mainGroup = 3B9058F91DAECB5200B4EEC0; + productRefGroup = 3B9059041DAECB5200B4EEC0 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 0DEB8EB31467EC9B00024989 /* RaptureXML iOS */, - 20370A001B3C3E2D0043E14E /* RaptureXML OSX */, - 0252B2DC142ADFC60018B75D /* RaptureXMLTests */, - 3B6D82871C89EFCB00504542 /* RaptureXML-iOS */, - 3B6D82961C89F02600504542 /* RaptureXML-OSX */, + 3B9059021DAECB5200B4EEC0 /* RaptureXML */, + 3B90590B1DAECB5200B4EEC0 /* RaptureXMLTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 0252B2DA142ADFC60018B75D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 02F3A3FF1526D22600E8C822 /* players.xml in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3B6D82861C89EFCB00504542 /* Resources */ = { + 3B9059011DAECB5200B4EEC0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 3B6D82951C89F02600504542 /* Resources */ = { + 3B90590A1DAECB5200B4EEC0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 3B3B9D881E95CEE5005AB4DE /* players.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 0252B2DB142ADFC60018B75D /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ - 0252B2D8142ADFC60018B75D /* Sources */ = { + 3B9058FE1DAECB5200B4EEC0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 027B3571153C624700A4EDF2 /* DeepChildrenTests.m in Sources */, - 02ADE6A216A0E33A008643D5 /* AttributeTests.m in Sources */, - 02ADE6A316A0E491008643D5 /* BoundaryTests.m in Sources */, - 02ADE6A416A0E491008643D5 /* DeepTests.m in Sources */, - 02ADE6A516A0E491008643D5 /* ErrorTests.m in Sources */, - 02ADE6A616A0E491008643D5 /* SimpleTests.m in Sources */, - 02ADE6A716A0E491008643D5 /* TextConversionTests.m in Sources */, - 02ADE6A816A0E491008643D5 /* WildcardTests.m in Sources */, - 02ADE6A916A0E491008643D5 /* EncodingTests.m in Sources */, - 02ADE6AA16A0E491008643D5 /* XPathTests.m in Sources */, - 02565F9916E6320700A882F9 /* CopyTests.m in Sources */, - 5415BE4216FC638100AFC566 /* HTMLTests.m in Sources */, + 3B3B9D6F1E95CEC8005AB4DE /* RXMLElement.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 0DEB8EB01467EC9B00024989 /* Sources */ = { + 3B9059081DAECB5200B4EEC0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 027DAC3614FBF465001BA563 /* RXMLElement.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 20370A011B3C3E2D0043E14E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 20370A021B3C3E2D0043E14E /* RXMLElement.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3B6D82831C89EFCB00504542 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3B6D82911C89EFF500504542 /* RXMLElement.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3B6D82921C89F02600504542 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3B6D82A11C89F08F00504542 /* RXMLElement.m in Sources */, + 3B3B9D851E95CEE5005AB4DE /* EncodingTests.m in Sources */, + 3B3B9D8B1E95CEE5005AB4DE /* WildcardTests.m in Sources */, + 3B3B9D831E95CEE5005AB4DE /* DeepChildrenTests.m in Sources */, + 3B3B9D8C1E95CEE5005AB4DE /* XPathTests.m in Sources */, + 3B3B9D821E95CEE5005AB4DE /* CopyTests.m in Sources */, + 3B3B9D801E95CEE5005AB4DE /* AttributeTests.m in Sources */, + 3B3B9D841E95CEE5005AB4DE /* DeepTests.m in Sources */, + 3B3B9D811E95CEE5005AB4DE /* BoundaryTests.m in Sources */, + 3B3B9D8A1E95CEE5005AB4DE /* TextConversionTests.m in Sources */, + 3B3B9D871E95CEE5005AB4DE /* HTMLTests.m in Sources */, + 3B3B9D921E95D5C8005AB4DE /* RaptureTestSuite.m in Sources */, + 3B3B9D861E95CEE5005AB4DE /* ErrorTests.m in Sources */, + 3B3B9D891E95CEE5005AB4DE /* SimpleTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 3B90590F1DAECB5200B4EEC0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3B9059021DAECB5200B4EEC0 /* RaptureXML */; + targetProxy = 3B90590E1DAECB5200B4EEC0 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ - 0252B2EF142ADFC70018B75D /* Debug */ = { + 3B9059151DAECB5200B4EEC0 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 3B9059271DAECB9E00B4EEC0 /* Project.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 0; + DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -511,429 +365,141 @@ "DEBUG=1", "$(inherited)", ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 0252B2F0142ADFC70018B75D /* Release */ = { + 3B9059161DAECB5200B4EEC0 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 3B9059281DAECB9E00B4EEC0 /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 0; + 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_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - SDKROOT = iphoneos; + MTL_ENABLE_DEBUG_INFO = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Release; }; - 0252B2F5142ADFC70018B75D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_ARC = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(DEVELOPER_LIBRARY_DIR)/Frameworks", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; - GCC_VERSION = ""; - HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2/**"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_AFTER_BUILD = YES; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = octest; - }; - name = Debug; - }; - 0252B2F6142ADFC70018B75D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_ARC = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(DEVELOPER_LIBRARY_DIR)/Frameworks", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; - GCC_VERSION = ""; - HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2/**"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_AFTER_BUILD = YES; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = octest; - }; - name = Release; - }; - 0DEB8EBD1467EC9B00024989 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_ARC = YES; - DEFINES_MODULE = YES; - DSTROOT = /tmp/RaptureXML.dst; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../.metadata/.plugins/org.eclipse.debug.core/.launches/System/Library/Frameworks\"", - "\"$(SRCROOT)/../Cognitive\"", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Library-Prefix.pch"; - GCC_VERSION = ""; - HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2/**"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../FuzzAlert/AdMob\"", - "\"$(SRCROOT)/../FuzzAlert/FlurryLibWithLocation\"", - "\"$(SRCROOT)/../FuzzAlert/libGHUnitIPhone4_0-0.4.21\"", - "\"$(SRCROOT)/../FuzzAlert/three20/Build/Products/Debug-iphonesimulator\"", - "\"$(SRCROOT)/../FuzzAlert/three20/Build/Products/Release-iphonesimulator\"", - "\"$(SRCROOT)/../InnerBand/libGHUnitIPhone4_0-0.4.22\"", - "\"$(SRCROOT)/../TaskList/FlurryLib\"", - "\"$(SRCROOT)/../WordsWithPractice/WordsWithPractice/GoogleAdMobAdsSDK\"", - ); - PRODUCT_NAME = RaptureXML; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 0DEB8EBE1467EC9B00024989 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_ARC = YES; - DEFINES_MODULE = YES; - DSTROOT = /tmp/RaptureXML.dst; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../.metadata/.plugins/org.eclipse.debug.core/.launches/System/Library/Frameworks\"", - "\"$(SRCROOT)/../Cognitive\"", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Library-Prefix.pch"; - GCC_VERSION = ""; - HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2/**"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../FuzzAlert/AdMob\"", - "\"$(SRCROOT)/../FuzzAlert/FlurryLibWithLocation\"", - "\"$(SRCROOT)/../FuzzAlert/libGHUnitIPhone4_0-0.4.21\"", - "\"$(SRCROOT)/../FuzzAlert/three20/Build/Products/Debug-iphonesimulator\"", - "\"$(SRCROOT)/../FuzzAlert/three20/Build/Products/Release-iphonesimulator\"", - "\"$(SRCROOT)/../InnerBand/libGHUnitIPhone4_0-0.4.22\"", - "\"$(SRCROOT)/../TaskList/FlurryLib\"", - "\"$(SRCROOT)/../WordsWithPractice/WordsWithPractice/GoogleAdMobAdsSDK\"", - ); - PRODUCT_NAME = RaptureXML; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 20370A081B3C3E2D0043E14E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_ARC = YES; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DSTROOT = /tmp/RaptureXML.dst; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../.metadata/.plugins/org.eclipse.debug.core/.launches/System/Library/Frameworks\"", - "\"$(SRCROOT)/../Cognitive\"", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Library-Prefix.pch"; - GCC_VERSION = ""; - HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2/**"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../FuzzAlert/AdMob\"", - "\"$(SRCROOT)/../FuzzAlert/FlurryLibWithLocation\"", - "\"$(SRCROOT)/../FuzzAlert/libGHUnitIPhone4_0-0.4.21\"", - "\"$(SRCROOT)/../FuzzAlert/three20/Build/Products/Debug-iphonesimulator\"", - "\"$(SRCROOT)/../FuzzAlert/three20/Build/Products/Release-iphonesimulator\"", - "\"$(SRCROOT)/../InnerBand/libGHUnitIPhone4_0-0.4.22\"", - "\"$(SRCROOT)/../TaskList/FlurryLib\"", - "\"$(SRCROOT)/../WordsWithPractice/WordsWithPractice/GoogleAdMobAdsSDK\"", - ); - PRODUCT_NAME = RaptureXML; - SDKROOT = macosx; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 20370A091B3C3E2D0043E14E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_ARC = YES; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DSTROOT = /tmp/RaptureXML.dst; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../.metadata/.plugins/org.eclipse.debug.core/.launches/System/Library/Frameworks\"", - "\"$(SRCROOT)/../Cognitive\"", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Library-Prefix.pch"; - GCC_VERSION = ""; - HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2/**"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../FuzzAlert/AdMob\"", - "\"$(SRCROOT)/../FuzzAlert/FlurryLibWithLocation\"", - "\"$(SRCROOT)/../FuzzAlert/libGHUnitIPhone4_0-0.4.21\"", - "\"$(SRCROOT)/../FuzzAlert/three20/Build/Products/Debug-iphonesimulator\"", - "\"$(SRCROOT)/../FuzzAlert/three20/Build/Products/Release-iphonesimulator\"", - "\"$(SRCROOT)/../InnerBand/libGHUnitIPhone4_0-0.4.22\"", - "\"$(SRCROOT)/../TaskList/FlurryLib\"", - "\"$(SRCROOT)/../WordsWithPractice/WordsWithPractice/GoogleAdMobAdsSDK\"", - ); - PRODUCT_NAME = RaptureXML; - SDKROOT = macosx; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 3B6D828D1C89EFCB00504542 /* Debug */ = { + 3B9059181DAECB5200B4EEC0 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 3B9059251DAECB9E00B4EEC0 /* Debug.xcconfig */; buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_TESTABILITY = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; - INFOPLIST_FILE = RaptureXML/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.gilt.RaptureXML; - PRODUCT_NAME = RaptureXML; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 3B6D828E1C89EFCB00504542 /* Release */ = { + 3B9059191DAECB5200B4EEC0 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 3B9059261DAECB9E00B4EEC0 /* Framework.xcconfig */; buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; - INFOPLIST_FILE = RaptureXML/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.gilt.RaptureXML; - PRODUCT_NAME = RaptureXML; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; }; name = Release; }; - 3B6D829D1C89F02600504542 /* Debug */ = { + 3B90591B1DAECB5200B4EEC0 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 3B9059291DAECB9E00B4EEC0 /* Tests.xcconfig */; buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CODE_SIGN_IDENTITY = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; - INFOPLIST_FILE = RaptureXML/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.gilt.RaptureXML; - PRODUCT_NAME = RaptureXML; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + SWIFT_VERSION = 3.0; }; name = Debug; }; - 3B6D829E1C89F02600504542 /* Release */ = { + 3B90591C1DAECB5200B4EEC0 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 3B9059291DAECB9E00B4EEC0 /* Tests.xcconfig */; buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CODE_SIGN_IDENTITY = ""; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - FRAMEWORK_VERSION = A; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; - INFOPLIST_FILE = RaptureXML/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.gilt.RaptureXML; - PRODUCT_NAME = RaptureXML; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0252B2B9142ADFC60018B75D /* Build configuration list for PBXProject "RaptureXML" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0252B2EF142ADFC70018B75D /* Debug */, - 0252B2F0142ADFC70018B75D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 0252B2F4142ADFC70018B75D /* Build configuration list for PBXNativeTarget "RaptureXMLTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0252B2F5142ADFC70018B75D /* Debug */, - 0252B2F6142ADFC70018B75D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 0DEB8EBC1467EC9B00024989 /* Build configuration list for PBXNativeTarget "RaptureXML iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0DEB8EBD1467EC9B00024989 /* Debug */, - 0DEB8EBE1467EC9B00024989 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 20370A071B3C3E2D0043E14E /* Build configuration list for PBXNativeTarget "RaptureXML OSX" */ = { + 3B9058FD1DAECB5200B4EEC0 /* Build configuration list for PBXProject "RaptureXML" */ = { isa = XCConfigurationList; buildConfigurations = ( - 20370A081B3C3E2D0043E14E /* Debug */, - 20370A091B3C3E2D0043E14E /* Release */, + 3B9059151DAECB5200B4EEC0 /* Debug */, + 3B9059161DAECB5200B4EEC0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3B6D828F1C89EFCB00504542 /* Build configuration list for PBXNativeTarget "RaptureXML-iOS" */ = { + 3B9059171DAECB5200B4EEC0 /* Build configuration list for PBXNativeTarget "RaptureXML" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3B6D828D1C89EFCB00504542 /* Debug */, - 3B6D828E1C89EFCB00504542 /* Release */, + 3B9059181DAECB5200B4EEC0 /* Debug */, + 3B9059191DAECB5200B4EEC0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3B6D829C1C89F02600504542 /* Build configuration list for PBXNativeTarget "RaptureXML-OSX" */ = { + 3B90591A1DAECB5200B4EEC0 /* Build configuration list for PBXNativeTarget "RaptureXMLTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3B6D829D1C89F02600504542 /* Debug */, - 3B6D829E1C89F02600504542 /* Release */, + 3B90591B1DAECB5200B4EEC0 /* Debug */, + 3B90591C1DAECB5200B4EEC0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 0252B2B6142ADFC60018B75D /* Project object */; + rootObject = 3B9058FA1DAECB5200B4EEC0 /* Project object */; } diff --git a/RaptureXML.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/RaptureXML.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 919434a..30826c0 100644 --- a/RaptureXML.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/RaptureXML.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:RaptureXML.xcodeproj"> diff --git a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS Framework.xcscheme b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS Framework.xcscheme deleted file mode 100644 index 7988810..0000000 --- a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML iOS Framework.xcscheme +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX Framework.xcscheme b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML.xcscheme similarity index 68% rename from RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX Framework.xcscheme rename to RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML.xcscheme index 7f70ecb..432f80d 100644 --- a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML OSX Framework.xcscheme +++ b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML.xcscheme @@ -1,6 +1,6 @@ @@ -28,7 +28,26 @@ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> + + + + + + + + @@ -45,9 +64,9 @@ @@ -63,9 +82,9 @@ diff --git a/RaptureXML/RXMLElement.h b/Sources/RXMLElement.h similarity index 100% rename from RaptureXML/RXMLElement.h rename to Sources/RXMLElement.h diff --git a/RaptureXML/RXMLElement.m b/Sources/RXMLElement.m similarity index 100% rename from RaptureXML/RXMLElement.m rename to Sources/RXMLElement.m diff --git a/RaptureXML/RaptureXML.h b/Sources/RaptureXML.h similarity index 100% rename from RaptureXML/RaptureXML.h rename to Sources/RaptureXML.h From e4134591dfa7fda9f84dbdcf54d44e71df49258a Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Wed, 5 Apr 2017 22:06:28 -0400 Subject: [PATCH 23/39] convert tests from SenTest to XCUnit --- AttributeTests.m => Tests/AttributeTests.m | 17 ++++----- Tests/BoundaryTests.m | 39 ++++++++++---------- Tests/CopyTests.m | 29 +++++++-------- Tests/DeepChildrenTests.m | 18 +++++----- Tests/DeepTests.m | 12 +++---- EncodingTests.m => Tests/EncodingTests.m | 5 +-- Tests/ErrorTests.m | 11 +++--- Tests/HTMLTests.m | 15 ++++---- Tests/RaptureTestSuite.h | 16 +++++++++ Tests/RaptureTestSuite.m | 22 ++++++++++++ Tests/{ => Resources}/players.xml | 0 Tests/SimpleTests.m | 41 +++++++++++----------- Tests/Tests-Prefix.pch | 5 --- Tests/TextConversionTests.m | 13 +++---- Tests/WildcardTests.m | 16 ++++----- Tests/XPathTests.m | 11 +++--- 16 files changed, 155 insertions(+), 115 deletions(-) rename AttributeTests.m => Tests/AttributeTests.m (65%) rename EncodingTests.m => Tests/EncodingTests.m (76%) create mode 100644 Tests/RaptureTestSuite.h create mode 100644 Tests/RaptureTestSuite.m rename Tests/{ => Resources}/players.xml (100%) delete mode 100644 Tests/Tests-Prefix.pch diff --git a/AttributeTests.m b/Tests/AttributeTests.m similarity index 65% rename from AttributeTests.m rename to Tests/AttributeTests.m index b7e15f0..0325069 100644 --- a/AttributeTests.m +++ b/Tests/AttributeTests.m @@ -6,9 +6,10 @@ // Copyright (c) 2011 Rapture In Venice. All rights reserved. // +#import #import "RXMLElement.h" -@interface AttributeTests : SenTestCase { +@interface AttributeTests : XCTestCase { NSString *attributedXML_; } @@ -28,16 +29,16 @@ - (void)setUp { - (void)testAttributedText { RXMLElement *rxml = [RXMLElement elementFromXMLString:attributedXML_ encoding:NSUTF8StringEncoding]; NSArray *atts = [rxml attributeNames]; - STAssertEquals(atts.count, 2U, nil); - STAssertTrue([atts containsObject:@"count"], nil); - STAssertTrue([atts containsObject:@"style"], nil); + XCTAssertEqual(atts.count, 2U); + XCTAssertTrue([atts containsObject:@"count"]); + XCTAssertTrue([atts containsObject:@"style"]); RXMLElement *squarexml = [rxml child:@"square"]; atts = [squarexml attributeNames]; - STAssertEquals(atts.count, 3U, nil); - STAssertTrue([atts containsObject:@"name"], nil); - STAssertTrue([atts containsObject:@"id"], nil); - STAssertTrue([atts containsObject:@"sideLength"], nil); + XCTAssertEqual(atts.count, 3U); + XCTAssertTrue([atts containsObject:@"name"]); + XCTAssertTrue([atts containsObject:@"id"]); + XCTAssertTrue([atts containsObject:@"sideLength"]); } @end diff --git a/Tests/BoundaryTests.m b/Tests/BoundaryTests.m index aa218ed..acd8874 100644 --- a/Tests/BoundaryTests.m +++ b/Tests/BoundaryTests.m @@ -6,9 +6,10 @@ // Copyright (c) 2011 Rapture In Venice. All rights reserved. // +#import #import "RXMLElement.h" -@interface BoundaryTests : SenTestCase { +@interface BoundaryTests : XCTestCase { NSString *emptyXML_; NSString *emptyTopTagXML_; NSString *childXML_; @@ -34,52 +35,52 @@ - (void)setUp { - (void)testEmptyXML { RXMLElement *rxml = [RXMLElement elementFromXMLString:emptyXML_ encoding:NSUTF8StringEncoding]; - STAssertFalse(rxml.isValid, nil); + XCTAssertFalse(rxml.isValid); } - (void)testEmptyTopTagXML { RXMLElement *rxml = [RXMLElement elementFromXMLString:emptyTopTagXML_ encoding:NSUTF8StringEncoding]; - STAssertTrue(rxml.isValid, nil); - STAssertEqualObjects(rxml.text, @"", nil); - STAssertEqualObjects([rxml childrenWithRootXPath:@"*"], [NSArray array], nil); + XCTAssertTrue(rxml.isValid); + XCTAssertEqualObjects(rxml.text, @""); + XCTAssertEqualObjects([rxml childrenWithRootXPath:@"*"], [NSArray array]); } - (void)testAttribute { RXMLElement *rxml = [RXMLElement elementFromXMLString:attributeXML_ encoding:NSUTF8StringEncoding]; - STAssertTrue(rxml.isValid, nil); - STAssertEqualObjects([rxml attribute:@"foo"], @"bar", nil); + XCTAssertTrue(rxml.isValid); + XCTAssertEqualObjects([rxml attribute:@"foo"], @"bar"); } - (void)testNamespaceAttribute { RXMLElement *rxml = [RXMLElement elementFromXMLString:namespaceXML_ encoding:NSUTF8StringEncoding]; - STAssertTrue(rxml.isValid, nil); - STAssertEqualObjects([rxml attribute:@"foo" inNamespace:@"*"], @"bar", nil); - STAssertEquals([rxml attributeAsInt:@"one" inNamespace:@"*"], 1, nil); + XCTAssertTrue(rxml.isValid); + XCTAssertEqualObjects([rxml attribute:@"foo" inNamespace:@"*"], @"bar"); + XCTAssertEqual([rxml attributeAsInt:@"one" inNamespace:@"*"], 1); } - (void)testChild { RXMLElement *rxml = [RXMLElement elementFromXMLString:childXML_ encoding:NSUTF8StringEncoding]; - STAssertTrue(rxml.isValid, nil); - STAssertEqualObjects([rxml child:@"empty_child"].text, @"", nil); - STAssertEqualObjects([rxml child:@"text_child"].text, @"foo", nil); + XCTAssertTrue(rxml.isValid); + XCTAssertEqualObjects([rxml child:@"empty_child"].text, @""); + XCTAssertEqualObjects([rxml child:@"text_child"].text, @"foo"); } - (void)testNamespaceChild { RXMLElement *rxml = [RXMLElement elementFromXMLString:namespaceXML_ encoding:NSUTF8StringEncoding]; - STAssertTrue(rxml.isValid, nil); - STAssertEqualObjects([rxml child:@"text" inNamespace:@"*"].text, @"something", nil); + XCTAssertTrue(rxml.isValid); + XCTAssertEqualObjects([rxml child:@"text" inNamespace:@"*"].text, @"something"); } - (void)testChildren { RXMLElement *rxml = [RXMLElement elementFromXMLString:childrenXML_ encoding:NSUTF8StringEncoding]; - STAssertTrue(rxml.isValid, nil); - STAssertEquals([rxml children:@"child"].count, 3U, nil); + XCTAssertTrue(rxml.isValid); + XCTAssertEqual([rxml children:@"child"].count, 3U); } - (void)testNamespaceChildren { RXMLElement *rxml = [RXMLElement elementFromXMLString:namespaceXML_ encoding:NSUTF8StringEncoding]; - STAssertTrue(rxml.isValid, nil); - STAssertEquals([rxml children:@"text" inNamespace:@"*"].count, 1U, nil); + XCTAssertTrue(rxml.isValid); + XCTAssertEqual([rxml children:@"text" inNamespace:@"*"].count, 1U); } @end diff --git a/Tests/CopyTests.m b/Tests/CopyTests.m index 92d43c8..ee377d6 100644 --- a/Tests/CopyTests.m +++ b/Tests/CopyTests.m @@ -7,9 +7,10 @@ // Copyright (c) 2011 Rapture In Venice. All rights reserved. // +#import #import "RXMLElement.h" -@interface CopyTests : SenTestCase { +@interface CopyTests : XCTestCase { NSString *simplifiedXML_; NSString *attributedXML_; NSString *interruptedTextXML_; @@ -41,13 +42,13 @@ - (void)setUp { - (void)testInterruptedText { RXMLElement *rxml = [RXMLElement elementFromXMLString:interruptedTextXML_ encoding:NSUTF8StringEncoding]; RXMLElement *rxml2 = [rxml copy]; - STAssertEqualObjects(rxml2.text, @"thisisinterruptedtext", nil); + XCTAssertEqualObjects(rxml2.text, @"thisisinterruptedtext"); } - (void)testCDataText { RXMLElement *rxml = [RXMLElement elementFromXMLString:cdataXML_ encoding:NSUTF8StringEncoding]; RXMLElement *rxml2 = [rxml copy]; - STAssertEqualObjects(rxml2.text, @"thisiscdata", nil); + XCTAssertEqualObjects(rxml2.text, @"thisiscdata"); } - (void)testTags { @@ -57,20 +58,20 @@ - (void)testTags { [rxml2 iterate:@"*" usingBlock:^(RXMLElement *e) { if (i == 0) { - STAssertEqualObjects(e.tag, @"square", nil); - STAssertEqualObjects(e.text, @"Square", nil); + XCTAssertEqualObjects(e.tag, @"square"); + XCTAssertEqualObjects(e.text, @"Square"); } else if (i == 1) { - STAssertEqualObjects(e.tag, @"triangle", nil); - STAssertEqualObjects(e.text, @"Triangle", nil); + XCTAssertEqualObjects(e.tag, @"triangle"); + XCTAssertEqualObjects(e.text, @"Triangle"); } else if (i == 2) { - STAssertEqualObjects(e.tag, @"circle", nil); - STAssertEqualObjects(e.text, @"Circle", nil); + XCTAssertEqualObjects(e.tag, @"circle"); + XCTAssertEqualObjects(e.text, @"Circle"); } i++; }]; - STAssertEquals(i, 3, nil); + XCTAssertEqual(i, 3); } - (void)testAttributes { @@ -80,17 +81,17 @@ - (void)testAttributes { [rxml2 iterate:@"*" usingBlock:^(RXMLElement *e) { if (i == 0) { - STAssertEqualObjects([e attribute:@"name"], @"Square", nil); + XCTAssertEqualObjects([e attribute:@"name"], @"Square"); } else if (i == 1) { - STAssertEqualObjects([e attribute:@"name"], @"Triangle", nil); + XCTAssertEqualObjects([e attribute:@"name"], @"Triangle"); } else if (i == 2) { - STAssertEqualObjects([e attribute:@"name"], @"Circle", nil); + XCTAssertEqualObjects([e attribute:@"name"], @"Circle"); } i++; }]; - STAssertEquals(i, 3, nil); + XCTAssertEqual(i, 3); } @end diff --git a/Tests/DeepChildrenTests.m b/Tests/DeepChildrenTests.m index 7579b96..23f0dec 100644 --- a/Tests/DeepChildrenTests.m +++ b/Tests/DeepChildrenTests.m @@ -6,9 +6,9 @@ // Copyright (c) 2011 Rapture In Venice. All rights reserved. // -#import "RXMLElement.h" +#import "RaptureTestSuite.h" -@interface DeepChildrenTests : SenTestCase { +@interface DeepChildrenTests : RaptureTestSuite { } @end @@ -18,7 +18,7 @@ @interface DeepChildrenTests : SenTestCase { @implementation DeepChildrenTests - (void)testQuery { - RXMLElement *rxml = [RXMLElement elementFromXMLFile:@"players.xml"]; + RXMLElement *rxml = [self testXML]; __block NSInteger i = 0; // count the players @@ -29,26 +29,26 @@ - (void)testQuery { i++; }]; - STAssertEquals(i, 9, nil); + XCTAssertEqual(i, 9); } - (void)testDeepChildQuery { - RXMLElement *rxml = [RXMLElement elementFromXMLFile:@"players.xml"]; - + RXMLElement *rxml = [self testXML]; + // count the players RXMLElement *coachingYears = [rxml child:@"players.coach.experience.years"]; - STAssertEquals(coachingYears.textAsInt, 1, nil); + XCTAssertEqual(coachingYears.textAsInt, 1); } - (void)testDeepChildQueryWithWildcard { - RXMLElement *rxml = [RXMLElement elementFromXMLFile:@"players.xml"]; + RXMLElement *rxml = [self testXML]; // count the players RXMLElement *coachingYears = [rxml child:@"players.coach.experience.teams.*"]; // first team returned - STAssertEquals(coachingYears.textAsInt, 53, nil); + XCTAssertEqual(coachingYears.textAsInt, 53); } @end diff --git a/Tests/DeepTests.m b/Tests/DeepTests.m index f595091..e40f6a5 100644 --- a/Tests/DeepTests.m +++ b/Tests/DeepTests.m @@ -6,9 +6,9 @@ // Copyright (c) 2011 Rapture In Venice. All rights reserved. // -#import "RXMLElement.h" +#import "RaptureTestSuite.h" -@interface DeepTests : SenTestCase { +@interface DeepTests : RaptureTestSuite { } @end @@ -18,7 +18,7 @@ @interface DeepTests : SenTestCase { @implementation DeepTests - (void)testQuery { - RXMLElement *rxml = [RXMLElement elementFromXMLFile:@"players.xml"]; + RXMLElement *rxml = [self testXML]; __block NSInteger i; // count the players @@ -28,7 +28,7 @@ - (void)testQuery { i++; }]; - STAssertEquals(i, 9, nil); + XCTAssertEqual(i, 9); // count the first player's name i = 0; @@ -37,7 +37,7 @@ - (void)testQuery { i++; }]; - STAssertEquals(i, 1, nil); + XCTAssertEqual(i, 1); // count the coaches i = 0; @@ -46,7 +46,7 @@ - (void)testQuery { i++; }]; - STAssertEquals(i, 1, nil); + XCTAssertEqual(i, 1); } @end diff --git a/EncodingTests.m b/Tests/EncodingTests.m similarity index 76% rename from EncodingTests.m rename to Tests/EncodingTests.m index 6890af8..5330462 100644 --- a/EncodingTests.m +++ b/Tests/EncodingTests.m @@ -6,9 +6,10 @@ // Copyright (c) 2012 Rapture In Venice. All rights reserved. // +#import #import "RXMLElement.h" -@interface EncodingTests : SenTestCase { +@interface EncodingTests : XCTestCase { NSString *chineseXML_; } @@ -24,7 +25,7 @@ - (void)setUp { - (void)testChinese { RXMLElement *rxml = [RXMLElement elementFromXMLString:chineseXML_ encoding:NSUTF8StringEncoding]; - STAssertEqualObjects([rxml attribute:@"data"], @"以晴为主", nil); + XCTAssertEqualObjects([rxml attribute:@"data"], @"以晴为主"); } @end diff --git a/Tests/ErrorTests.m b/Tests/ErrorTests.m index c6370c2..d2dc9ce 100644 --- a/Tests/ErrorTests.m +++ b/Tests/ErrorTests.m @@ -6,9 +6,10 @@ // Copyright (c) 2011 Rapture In Venice. All rights reserved. // +#import #import "RXMLElement.h" -@interface ErrorTests : SenTestCase { +@interface ErrorTests : XCTestCase { NSString *simplifiedXML_; NSString *badXML_; } @@ -31,14 +32,14 @@ - (void)setUp { - (void)testBadXML { RXMLElement *rxml = [RXMLElement elementFromXMLString:badXML_ encoding:NSUTF8StringEncoding]; - STAssertFalse([rxml isValid], nil); + XCTAssertFalse([rxml isValid]); } - (void)testMissingTag { RXMLElement *rxml = [RXMLElement elementFromXMLString:simplifiedXML_ encoding:NSUTF8StringEncoding]; RXMLElement *hexagon = [rxml child:@"hexagon"]; - STAssertNil(hexagon, nil); + XCTAssertNil(hexagon); } - (void)testMissingTagIteration { @@ -49,14 +50,14 @@ - (void)testMissingTagIteration { i++; }]; - STAssertEquals(i, 0, nil); + XCTAssertEqual(i, 0); } - (void)testMissingAttribute { RXMLElement *rxml = [RXMLElement elementFromXMLString:simplifiedXML_ encoding:NSUTF8StringEncoding]; NSString *missingName = [rxml attribute:@"name"]; - STAssertNil(missingName, nil); + XCTAssertNil(missingName); } @end diff --git a/Tests/HTMLTests.m b/Tests/HTMLTests.m index 8f1552e..94a8d6e 100644 --- a/Tests/HTMLTests.m +++ b/Tests/HTMLTests.m @@ -6,9 +6,10 @@ // Copyright (c) 2013 Rapture In Venice. All rights reserved. // +#import #import "RXMLElement.h" -@interface HTMLTests : SenTestCase { +@interface HTMLTests : XCTestCase { NSString *simpleHTML_; } @end @@ -32,25 +33,25 @@ - (void)setUp { - (void)testBasicXHTML { RXMLElement *html = [RXMLElement elementFromHTMLString:simpleHTML_ encoding:NSUTF8StringEncoding]; NSArray *atts = [html attributeNames]; - STAssertEquals(atts.count, 2U, nil); + XCTAssertEqual(atts.count, 2U); NSArray* children = [html childrenWithRootXPath:@"//html/body/p"]; - STAssertTrue([children count] > 0, nil); + XCTAssertTrue([children count] > 0); RXMLElement* child = [children objectAtIndex:0]; NSLog(@"content: %@", [child text]); - STAssertEqualObjects([child text], @"This is a minimal XHTML 1.1 document.", nil); + XCTAssertEqualObjects([child text], @"This is a minimal XHTML 1.1 document."); } -(void) testHtmlEntity { RXMLElement* html = [RXMLElement elementFromHTMLString:@"

Don't say "lazy"

" encoding:NSUTF8StringEncoding]; - STAssertEqualObjects([html text], @"Don't say \"lazy\"", nil); + XCTAssertEqualObjects([html text], @"Don't say \"lazy\""); } -(void) testFixBrokenHtml { RXMLElement* html = [RXMLElement elementFromHTMLString:@"

Test

Broken HTML" encoding:NSUTF8StringEncoding]; - STAssertEqualObjects([html text], @"Test Broken HTML", nil); - STAssertEqualObjects([html xml], @"

Test

Broken HTML", nil); + XCTAssertEqualObjects([html text], @"Test Broken HTML"); + XCTAssertEqualObjects([html xml], @"

Test

Broken HTML"); } @end diff --git a/Tests/RaptureTestSuite.h b/Tests/RaptureTestSuite.h new file mode 100644 index 0000000..b788d52 --- /dev/null +++ b/Tests/RaptureTestSuite.h @@ -0,0 +1,16 @@ +// +// RaptureTestSuite.h +// RaptureXML +// +// Created by Evan Maloney on 4/5/17. +// Copyright © 2017 Gilt Groupe. All rights reserved. +// + +#import +#import "RXMLElement.h" + +@interface RaptureTestSuite : XCTestCase + +- (RXMLElement*) testXML; + +@end diff --git a/Tests/RaptureTestSuite.m b/Tests/RaptureTestSuite.m new file mode 100644 index 0000000..e72162f --- /dev/null +++ b/Tests/RaptureTestSuite.m @@ -0,0 +1,22 @@ +// +// RaptureTestSuite.m +// RaptureXML +// +// Created by Evan Maloney on 4/5/17. +// Copyright © 2017 Gilt Groupe. All rights reserved. +// + +#import "RaptureTestSuite.h" + +@implementation RaptureTestSuite + +- (RXMLElement*) testXML +{ + NSBundle* bundle = [NSBundle bundleForClass:[self class]]; + NSString* xmlPath = [[bundle bundlePath] stringByAppendingPathComponent:@"players.xml"]; + RXMLElement* rxml = [RXMLElement elementFromXMLFilePath:xmlPath]; + XCTAssertTrue(rxml.isValid); + return rxml; +} + +@end diff --git a/Tests/players.xml b/Tests/Resources/players.xml similarity index 100% rename from Tests/players.xml rename to Tests/Resources/players.xml diff --git a/Tests/SimpleTests.m b/Tests/SimpleTests.m index c6f6463..3378ff2 100644 --- a/Tests/SimpleTests.m +++ b/Tests/SimpleTests.m @@ -6,9 +6,10 @@ // Copyright (c) 2011 Rapture In Venice. All rights reserved. // +#import #import "RXMLElement.h" -@interface SimpleTests : SenTestCase { +@interface SimpleTests : XCTestCase { NSString *simplifiedXML_; NSString *attributedXML_; NSString *interruptedTextXML_; @@ -43,12 +44,12 @@ - (void)setUp { - (void)testInterruptedText { RXMLElement *rxml = [RXMLElement elementFromXMLString:interruptedTextXML_ encoding:NSUTF8StringEncoding]; - STAssertEqualObjects(rxml.text, @"thisisinterruptedtext", nil); + XCTAssertEqualObjects(rxml.text, @"thisisinterruptedtext"); } - (void)testCDataText { RXMLElement *rxml = [RXMLElement elementFromXMLString:cdataXML_ encoding:NSUTF8StringEncoding]; - STAssertEqualObjects(rxml.text, @"thisiscdata", nil); + XCTAssertEqualObjects(rxml.text, @"thisiscdata"); } - (void)testTags { @@ -57,20 +58,20 @@ - (void)testTags { [rxml iterate:@"*" usingBlock:^(RXMLElement *e) { if (i == 0) { - STAssertEqualObjects(e.tag, @"square", nil); - STAssertEqualObjects(e.text, @"Square", nil); + XCTAssertEqualObjects(e.tag, @"square"); + XCTAssertEqualObjects(e.text, @"Square"); } else if (i == 1) { - STAssertEqualObjects(e.tag, @"triangle", nil); - STAssertEqualObjects(e.text, @"Triangle", nil); + XCTAssertEqualObjects(e.tag, @"triangle"); + XCTAssertEqualObjects(e.text, @"Triangle"); } else if (i == 2) { - STAssertEqualObjects(e.tag, @"circle", nil); - STAssertEqualObjects(e.text, @"Circle", nil); + XCTAssertEqualObjects(e.tag, @"circle"); + XCTAssertEqualObjects(e.text, @"Circle"); } i++; }]; - STAssertEquals(i, 3, nil); + XCTAssertEqual(i, 3); } - (void)testAttributes { @@ -79,17 +80,17 @@ - (void)testAttributes { [rxml iterate:@"*" usingBlock:^(RXMLElement *e) { if (i == 0) { - STAssertEqualObjects([e attribute:@"name"], @"Square", nil); + XCTAssertEqualObjects([e attribute:@"name"], @"Square"); } else if (i == 1) { - STAssertEqualObjects([e attribute:@"name"], @"Triangle", nil); + XCTAssertEqualObjects([e attribute:@"name"], @"Triangle"); } else if (i == 2) { - STAssertEqualObjects([e attribute:@"name"], @"Circle", nil); + XCTAssertEqualObjects([e attribute:@"name"], @"Circle"); } i++; }]; - STAssertEquals(i, 3, nil); + XCTAssertEqual(i, 3); } -(void) testInnerXml { @@ -100,16 +101,16 @@ -(void) testInnerXml { RXMLElement *rxml = [RXMLElement elementFromXMLString:treeXML_ encoding:NSUTF8StringEncoding]; RXMLElement* shapes = [rxml child:@"shapes"]; - STAssertEqualObjects(shapes.xml, @"Circle", nil); - STAssertEqualObjects(shapes.innerXml, @"Circle", nil); + XCTAssertEqualObjects(shapes.xml, @"Circle"); + XCTAssertEqualObjects(shapes.innerXml, @"Circle"); RXMLElement* colors = [rxml child:@"colors"]; - STAssertEqualObjects(colors.xml, @"TESTBlackdefault color", nil); - STAssertEqualObjects(colors.innerXml, @"TESTBlackdefault color", nil); + XCTAssertEqualObjects(colors.xml, @"TESTBlackdefault color"); + XCTAssertEqualObjects(colors.innerXml, @"TESTBlackdefault color"); RXMLElement *cdata = [RXMLElement elementFromXMLString:cdataXML_ encoding:NSUTF8StringEncoding]; - STAssertEqualObjects(cdata.xml, @"", nil); - STAssertEqualObjects(cdata.innerXml, @"", nil); + XCTAssertEqualObjects(cdata.xml, @""); + XCTAssertEqualObjects(cdata.innerXml, @""); } @end diff --git a/Tests/Tests-Prefix.pch b/Tests/Tests-Prefix.pch deleted file mode 100644 index 75038aa..0000000 --- a/Tests/Tests-Prefix.pch +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __OBJC__ - #import - #import - #import -#endif diff --git a/Tests/TextConversionTests.m b/Tests/TextConversionTests.m index 9c98ef3..86b4875 100644 --- a/Tests/TextConversionTests.m +++ b/Tests/TextConversionTests.m @@ -6,9 +6,10 @@ // Copyright (c) 2011 Rapture In Venice. All rights reserved. // +#import #import "RXMLElement.h" -@interface TextConversionTests : SenTestCase { +@interface TextConversionTests : XCTestCase { NSString *simplifiedXML_; NSString *attributedXML_; } @@ -49,9 +50,9 @@ - (void)testIntTags { [rxml iterate:@"*" usingBlock:^(RXMLElement *e) { if (i == 0) { - STAssertEquals([e child:@"id"].textAsInt, 1, nil); + XCTAssertEqual([e child:@"id"].textAsInt, 1); } else if (i == 1) { - STAssertEqualsWithAccuracy([e child:@"id"].textAsDouble, 2.5, 0.01, nil); + XCTAssertEqualWithAccuracy([e child:@"id"].textAsDouble, 2.5, 0.01); } i++; @@ -64,11 +65,11 @@ - (void)testIntAttributes { [rxml iterate:@"*" usingBlock:^(RXMLElement *e) { if (i == 0) { - STAssertEquals([e attributeAsInt:@"id"], 1, nil); + XCTAssertEqual([e attributeAsInt:@"id"], 1); } else if (i == 1) { - STAssertEqualsWithAccuracy([e attributeAsDouble:@"id"], 2.5, 0.01, nil); + XCTAssertEqualWithAccuracy([e attributeAsDouble:@"id"], 2.5, 0.01); } else if (i == 2) { - STAssertEquals([e attributeAsInt:@"id"], 3, nil); + XCTAssertEqual([e attributeAsInt:@"id"], 3); } i++; diff --git a/Tests/WildcardTests.m b/Tests/WildcardTests.m index 1819c98..53b8b8a 100644 --- a/Tests/WildcardTests.m +++ b/Tests/WildcardTests.m @@ -6,19 +6,17 @@ // Copyright (c) 2011 Rapture In Venice. All rights reserved. // -#import "RXMLElement.h" +#import "RaptureTestSuite.h" -@interface WildcardTests : SenTestCase { +@interface WildcardTests : RaptureTestSuite { } @end - - @implementation WildcardTests - (void)testEndingWildcard { - RXMLElement *rxml = [RXMLElement elementFromXMLFile:@"players.xml"]; + RXMLElement *rxml = [self testXML]; __block NSInteger i; // count the players and coaches @@ -28,11 +26,11 @@ - (void)testEndingWildcard { i++; }]; - STAssertEquals(i, 10, nil); + XCTAssertEqual(i, 10); } - (void)testMidstreamWildcard { - RXMLElement *rxml = [RXMLElement elementFromXMLFile:@"players.xml"]; + RXMLElement *rxml = [self testXML]; __block NSInteger i; // count the tags that have a name @@ -42,7 +40,7 @@ - (void)testMidstreamWildcard { i++; }]; - // STAssertEquals(i, 10, nil); + // XCTAssertEqual(i, 10); // count the tags that have a position i = 0; @@ -51,7 +49,7 @@ - (void)testMidstreamWildcard { i++; }]; - // STAssertEquals(i, 9, nil); + // XCTAssertEqual(i, 9); } @end diff --git a/Tests/XPathTests.m b/Tests/XPathTests.m index 71d11d2..74977a7 100644 --- a/Tests/XPathTests.m +++ b/Tests/XPathTests.m @@ -6,9 +6,10 @@ // Copyright (c) 2012 Rapture In Venice. All rights reserved. // +#import #import "RXMLElement.h" -@interface XPathTests : SenTestCase { +@interface XPathTests : XCTestCase { NSString *simplifiedXML_; NSString *attributedXML_; NSString *interruptedTextXML_; @@ -45,11 +46,11 @@ - (void)testBasicPath { RXMLElement *rxml = [RXMLElement elementFromXMLString:simplifiedXML_ encoding:NSUTF8StringEncoding]; [rxml iterateWithRootXPath:@"//circle" usingBlock:^(RXMLElement *element) { - STAssertEqualObjects(element.text, @"Circle", nil); + XCTAssertEqualObjects(element.text, @"Circle"); i++; }]; - STAssertEquals(i, 1, nil); + XCTAssertEqual(i, 1); } - (void)testAttributePath { @@ -58,11 +59,11 @@ - (void)testAttributePath { RXMLElement *rxml = [RXMLElement elementFromXMLString:attributedXML_ encoding:NSUTF8StringEncoding]; [rxml iterateWithRootXPath:@"//circle[@name='Circle']" usingBlock:^(RXMLElement *element) { - STAssertEqualObjects([element attribute:@"name"], @"Circle", nil); + XCTAssertEqualObjects([element attribute:@"name"], @"Circle"); i++; }]; - STAssertEquals(i, 1, nil); + XCTAssertEqual(i, 1); } @end From 9597bb186833d1281271c5f494257f713c13ee44 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Wed, 5 Apr 2017 22:06:47 -0400 Subject: [PATCH 24/39] rename license file to GitHub standard --- LICENSE | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..256df4a --- /dev/null +++ b/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2013 John Blanco + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file From 148041994e2e7e1aff76a2a28245957299cbf615 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Wed, 5 Apr 2017 22:06:58 -0400 Subject: [PATCH 25/39] remove unneeded assets --- Library-Prefix.pch | 3 --- icon.png | Bin 162428 -> 0 bytes 2 files changed, 3 deletions(-) delete mode 100644 Library-Prefix.pch delete mode 100644 icon.png diff --git a/Library-Prefix.pch b/Library-Prefix.pch deleted file mode 100644 index 60070a9..0000000 --- a/Library-Prefix.pch +++ /dev/null @@ -1,3 +0,0 @@ -#ifdef __OBJC__ - #import -#endif diff --git a/icon.png b/icon.png deleted file mode 100644 index 84d185557780a893f97eb026faca676e325b6d76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162428 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 X%ivt@Ih*KJ00000NkvXXu0mjf&uMAZ From c727b283e5e157318964c538d5e624c54c610fbf Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Wed, 5 Apr 2017 22:17:03 -0400 Subject: [PATCH 26/39] fix resource search --- Tests/RaptureTestSuite.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/RaptureTestSuite.m b/Tests/RaptureTestSuite.m index e72162f..bd6fd7d 100644 --- a/Tests/RaptureTestSuite.m +++ b/Tests/RaptureTestSuite.m @@ -13,7 +13,7 @@ @implementation RaptureTestSuite - (RXMLElement*) testXML { NSBundle* bundle = [NSBundle bundleForClass:[self class]]; - NSString* xmlPath = [[bundle bundlePath] stringByAppendingPathComponent:@"players.xml"]; + NSString* xmlPath = [bundle pathForResource:@"players" ofType:@"xml"]; RXMLElement* rxml = [RXMLElement elementFromXMLFilePath:xmlPath]; XCTAssertTrue(rxml.isValid); return rxml; From a0dfffc40f18cd475d9e2fdf0ecda6d67199221a Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Wed, 5 Apr 2017 22:19:19 -0400 Subject: [PATCH 27/39] set version number to current --- BuildControl/Info-Framework.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BuildControl/Info-Framework.plist b/BuildControl/Info-Framework.plist index 0cf9721..dbc92da 100644 --- a/BuildControl/Info-Framework.plist +++ b/BuildControl/Info-Framework.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.0 + 2.0.0 CFBundleSignature ???? CFBundleVersion From b8b5f8ecc007e3d9c4635e78d46a4fbfc6ff2c03 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Wed, 5 Apr 2017 22:22:58 -0400 Subject: [PATCH 28/39] generate documentation --- .../bin/generateDocumentationForAPI.sh | 97 ++ Documentation/API/Blocks/RXMLBlock.html | 109 ++ Documentation/API/Classes/RXMLDocHolder.html | 166 +++ Documentation/API/Classes/RXMLElement.html | 987 ++++++++++++++++++ Documentation/API/css/scss/_index.scss | 17 + Documentation/API/css/scss/_layout.scss | 302 ++++++ Documentation/API/css/scss/_normalize.scss | 581 +++++++++++ Documentation/API/css/scss/_object.scss | 89 ++ Documentation/API/css/scss/_print.scss | 42 + Documentation/API/css/scss/_variables.scss | 12 + Documentation/API/css/scss/_xcode.scss | 29 + Documentation/API/css/scss/style.scss | 1 + Documentation/API/css/style.css | 2 + .../docset/Contents/Info.plist | 35 + .../Resources/Documents/Blocks/RXMLBlock.html | 109 ++ .../Documents/Classes/RXMLDocHolder.html | 166 +++ .../Documents/Classes/RXMLElement.html | 987 ++++++++++++++++++ .../Resources/Documents/css/scss/_index.scss | 17 + .../Resources/Documents/css/scss/_layout.scss | 302 ++++++ .../Documents/css/scss/_normalize.scss | 581 +++++++++++ .../Resources/Documents/css/scss/_object.scss | 89 ++ .../Resources/Documents/css/scss/_print.scss | 42 + .../Documents/css/scss/_variables.scss | 12 + .../Resources/Documents/css/scss/_xcode.scss | 29 + .../Resources/Documents/css/scss/style.scss | 1 + .../Resources/Documents/css/style.css | 2 + .../Resources/Documents/hierarchy.html | 89 ++ .../Documents/img/button_bar_background.png | Bin 0 -> 2825 bytes .../Resources/Documents/img/disclosure.png | Bin 0 -> 115 bytes .../Documents/img/disclosure_open.png | Bin 0 -> 131 bytes .../Documents/img/library_background.png | Bin 0 -> 183 bytes .../Documents/img/title_background.png | Bin 0 -> 177 bytes .../Contents/Resources/Documents/index.html | 276 +++++ .../Contents/Resources/Documents/js/script.js | 59 ++ .../docset/Contents/Resources/Nodes.xml | 115 ++ .../docset/Contents/Resources/Tokens1.xml | 42 + .../docset/Contents/Resources/Tokens2.xml | 774 ++++++++++++++ .../docset/Contents/Resources/Tokens3.xml | 9 + .../docset/Contents/Resources/docSet.dsidx | Bin 0 -> 253952 bytes .../Contents/Resources/docSet.dsidx-shm | Bin 0 -> 32768 bytes .../Contents/Resources/docSet.dsidx-wal | Bin 0 -> 193672 bytes .../docset/Contents/Resources/docSet.mom | Bin 0 -> 11683 bytes .../docset/Contents/Resources/docSet.skidx | Bin 0 -> 22528 bytes .../docset/Contents/Resources/docSet.toc | Bin 0 -> 820 bytes .../Contents/Resources/docSet.tokencache | Bin 0 -> 10732 bytes Documentation/API/hierarchy.html | 89 ++ .../API/img/button_bar_background.png | Bin 0 -> 2825 bytes Documentation/API/img/disclosure.png | Bin 0 -> 115 bytes Documentation/API/img/disclosure_open.png | Bin 0 -> 131 bytes Documentation/API/img/library_background.png | Bin 0 -> 183 bytes Documentation/API/img/title_background.png | Bin 0 -> 177 bytes Documentation/API/index.html | 276 +++++ Documentation/API/js/script.js | 59 ++ 53 files changed, 6594 insertions(+) create mode 100755 BuildControl/bin/generateDocumentationForAPI.sh create mode 100644 Documentation/API/Blocks/RXMLBlock.html create mode 100644 Documentation/API/Classes/RXMLDocHolder.html create mode 100644 Documentation/API/Classes/RXMLElement.html create mode 100644 Documentation/API/css/scss/_index.scss create mode 100644 Documentation/API/css/scss/_layout.scss create mode 100644 Documentation/API/css/scss/_normalize.scss create mode 100644 Documentation/API/css/scss/_object.scss create mode 100644 Documentation/API/css/scss/_print.scss create mode 100644 Documentation/API/css/scss/_variables.scss create mode 100644 Documentation/API/css/scss/_xcode.scss create mode 100644 Documentation/API/css/scss/style.scss create mode 100644 Documentation/API/css/style.css create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Info.plist create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/Blocks/RXMLBlock.html create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/Classes/RXMLDocHolder.html create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/Classes/RXMLElement.html create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_index.scss create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_layout.scss create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_normalize.scss create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_object.scss create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_print.scss create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_variables.scss create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_xcode.scss create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/style.scss create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/style.css create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/hierarchy.html create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/img/button_bar_background.png create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/img/disclosure.png create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/img/disclosure_open.png create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/img/library_background.png create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/img/title_background.png create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/index.html create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/js/script.js create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Nodes.xml create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Tokens1.xml create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Tokens2.xml create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Tokens3.xml create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.dsidx create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.dsidx-shm create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.dsidx-wal create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.mom create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.skidx create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.toc create mode 100644 Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.tokencache create mode 100644 Documentation/API/hierarchy.html create mode 100644 Documentation/API/img/button_bar_background.png create mode 100644 Documentation/API/img/disclosure.png create mode 100644 Documentation/API/img/disclosure_open.png create mode 100644 Documentation/API/img/library_background.png create mode 100644 Documentation/API/img/title_background.png create mode 100644 Documentation/API/index.html create mode 100644 Documentation/API/js/script.js diff --git a/BuildControl/bin/generateDocumentationForAPI.sh b/BuildControl/bin/generateDocumentationForAPI.sh new file mode 100755 index 0000000..70f2033 --- /dev/null +++ b/BuildControl/bin/generateDocumentationForAPI.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +# set -x + +# constant values +DOCSET_PLATFORM_FAMILY="iphoneos" + +# allow the APPLEDOC_PATH environment variable to override +# the default installation location of the appledoc tool +if [[ -z "$APPLEDOC_PATH" ]]; then + APPLEDOC_PATH=`which appledoc` +fi +if [[ -z "$APPLEDOC_PATH" ]]; then + APPLEDOC_PATH=/usr/local/bin/appledoc +fi +if [[ -z "$APPLEDOC_PATH" || ! -x "$APPLEDOC_PATH" ]]; then + printf "error: 'appledoc' must be installed in order to generate documentation. + + You may download it from: + + https://github.com/tomaz/appledoc" + exit 1 +fi + +exitWithError() +{ + echo "error: $1" + exit 2 +} + +verifyResult() +{ + if [[ $1 != 0 ]]; then + exitWithError "Command failed; exiting" + fi +} + +# settings +DOCSET_PUBLISHER_ID="com.raptureinvenice.documentation" +DOCSET_BUNDLE_ID="${DOCSET_PUBLISHER_ID}.RaptureXML" +DOCSET_FILENAME="${DOCSET_BUNDLE_ID}.docset" +TEMP_DIR=`mktemp -d` +APPLEDOC_OUTPUT_DIR="${TEMP_DIR}/appledoc-generated" +INDEX_OUTPUT_FILE="${TEMP_DIR}/README-rewritten.md" +HTML_OUTPUT_DIR="${APPLEDOC_OUTPUT_DIR}/html" +HTML_INSTALL_DIR="Documentation/API" +DOCSET_OUTPUT_DIR="${APPLEDOC_OUTPUT_DIR}/docset" +DOCSET_INSTALL_DIR="${HTML_INSTALL_DIR}/docsets/${DOCSET_FILENAME}" +ONLINE_ROOT_URL="https://rawgit.com/emaloney/RaptureXML/master/Documentation/API/" + +# verify that we can find the source code +SOURCE_DIR="Sources" +if [[ -z "$SOURCE_DIR" || ! -d "$SOURCE_DIR" ]]; then + exitWithError "Couldn't find source directory: $SOURCE_DIR"; +fi + +# rewrite the links in the README.md file to work properly in the docset +cat "$SOURCE_DIR/README.md" | sed sq${ONLINE_ROOT_URL}qqg > "${INDEX_OUTPUT_FILE}" + +echo "Building documentation..." + +# create the documentation +find "$SOURCE_DIR" -name "*.h" ! -path "*/Private/*" -print0 | xargs -0 \ +$APPLEDOC_PATH \ + --output "$APPLEDOC_OUTPUT_DIR" \ + --clean-output \ + --project-name "RaptureXML" \ + --project-company "Rapture In Venice" \ + --company-id "$DOCSET_PUBLISHER_ID" \ + --docset-bundle-id "$DOCSET_BUNDLE_ID" \ + --docset-platform-family "$DOCSET_PLATFORM_FAMILY" \ + --create-html \ + --create-docset \ + --install-docset \ + --keep-intermediate-files \ + --keep-undocumented-objects \ + --keep-undocumented-members \ + --no-repeat-first-par \ + --no-merge-categories \ + --logformat xcode \ + --index-desc "${INDEX_OUTPUT_FILE}" > /dev/null + +if [[ $? != 0 ]]; then + echo "warning: HTML documentation generation finished with errors or warnings." +fi + +# install the HTML and docset in the project's Documentation dir +rm -rf "$HTML_INSTALL_DIR" +mkdir -p "$HTML_INSTALL_DIR" +cp -R "$HTML_OUTPUT_DIR"/* "$HTML_INSTALL_DIR"/. +verifyResult $? + +mkdir -p "$DOCSET_INSTALL_DIR" +cp -R "$DOCSET_OUTPUT_DIR" "$DOCSET_INSTALL_DIR" +verifyResult $? + +echo "Success!" diff --git a/Documentation/API/Blocks/RXMLBlock.html b/Documentation/API/Blocks/RXMLBlock.html new file mode 100644 index 0000000..1d4781e --- /dev/null +++ b/Documentation/API/Blocks/RXMLBlock.html @@ -0,0 +1,109 @@ + + + + + + RXMLBlock Block Reference + + + + + + +

+
+ +

+ RaptureXML +

+ +

+ Rapture In Venice +

+ +
+
+ + + +
+
+
+
+

RXMLBlock Block Reference

+ + +
+ + + + +
Declared inRXMLElement.h
+ + + + + + + + + + +

Block Definition

+

RXMLBlock

+ + +typedef void (^RXMLBlock) (RXMLElement *element) + + + + + +
+ +
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/API/Classes/RXMLDocHolder.html b/Documentation/API/Classes/RXMLDocHolder.html new file mode 100644 index 0000000..cb10abf --- /dev/null +++ b/Documentation/API/Classes/RXMLDocHolder.html @@ -0,0 +1,166 @@ + + + + + + RXMLDocHolder Class Reference + + + + + + +
+
+ +

+ RaptureXML +

+ +

+ Rapture In Venice +

+ +
+
+ + + +
+
+
+
+

RXMLDocHolder Class Reference

+ + +
+ + + + + + + +
Inherits fromNSObject
Declared inRXMLElement.h
+ + + + + + +
+ + + + + + +
+
+ +

– initWithDocPtr: +

+ +
+
+ +
+ + +
- (id)initWithDocPtr:(xmlDocPtr)doc
+ + +
+
+
+ +

– doc +

+ +
+
+ +
+ + +
- (xmlDocPtr)doc
+ + +
+
+
+
+ +
+ + + + + + +
+ +
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/API/Classes/RXMLElement.html b/Documentation/API/Classes/RXMLElement.html new file mode 100644 index 0000000..8654138 --- /dev/null +++ b/Documentation/API/Classes/RXMLElement.html @@ -0,0 +1,987 @@ + + + + + + RXMLElement Class Reference + + + + + + +
+
+ +

+ RaptureXML +

+ +

+ Rapture In Venice +

+ +
+
+ + + +
+
+
+
+

RXMLElement Class Reference

+ + +
+ + + + + + + + + + +
Inherits fromNSObject
Conforms toNSCopying
Declared inRXMLElement.h
+ + + + + + +
+ + + + + + +
+
+ +

– initFromXMLString:encoding: +

+ +
+
+ +
+ + +
- (id)initFromXMLString:(NSString *)xmlString encoding:(NSStringEncoding)encoding
+ + +
+
+
+ +

– initFromXMLFile: +

+ +
+
+ +
+ + +
- (id)initFromXMLFile:(NSString *)filename
+ + +
+
+
+ +

– initFromXMLFile:fileExtension: +

+ +
+
+ +
+ + +
- (id)initFromXMLFile:(NSString *)filename fileExtension:(NSString *)extension
+ + +
+
+
+ +

– initFromXMLFilePath: +

+ +
+
+ +
+ + +
- (id)initFromXMLFilePath:(NSString *)fullPath
+ + +
+
+
+ +

– initFromURL: +

+ +
+
+ +
+ + +
- (id)initFromURL:(NSURL *)url
+ + +
+
+
+ +

– initFromXMLData: +

+ +
+
+ +
+ + +
- (id)initFromXMLData:(NSData *)data
+ + +
+
+
+ +

– initFromXMLDoc:node: +

+ +
+
+ +
+ + +
- (id)initFromXMLDoc:(RXMLDocHolder *)doc node:(xmlNodePtr)node
+ + +
+
+
+ +

– initFromHTMLString:encoding: +

+ +
+
+ +
+ + +
- (id)initFromHTMLString:(NSString *)xmlString encoding:(NSStringEncoding)encoding
+ + +
+
+
+ +

– initFromHTMLFile: +

+ +
+
+ +
+ + +
- (id)initFromHTMLFile:(NSString *)filename
+ + +
+
+
+ +

– initFromHTMLFile:fileExtension: +

+ +
+
+ +
+ + +
- (id)initFromHTMLFile:(NSString *)filename fileExtension:(NSString *)extension
+ + +
+
+
+ +

– initFromHTMLFilePath: +

+ +
+
+ +
+ + +
- (id)initFromHTMLFilePath:(NSString *)fullPath
+ + +
+
+
+ +

– initFromHTMLData: +

+ +
+
+ +
+ + +
- (id)initFromHTMLData:(NSData *)data
+ + +
+
+
+ +

+ elementFromXMLString:encoding: +

+ +
+
+ +
+ + +
+ (id)elementFromXMLString:(NSString *)xmlString encoding:(NSStringEncoding)encoding
+ + +
+
+
+ +

+ elementFromXMLFile: +

+ +
+
+ +
+ + +
+ (id)elementFromXMLFile:(NSString *)filename
+ + +
+
+
+ +

+ elementFromXMLFilename:fileExtension: +

+ +
+
+ +
+ + +
+ (id)elementFromXMLFilename:(NSString *)filename fileExtension:(NSString *)extension
+ + +
+
+
+ +

+ elementFromXMLFilePath: +

+ +
+
+ +
+ + +
+ (id)elementFromXMLFilePath:(NSString *)fullPath
+ + +
+
+
+ +

+ elementFromURL: +

+ +
+
+ +
+ + +
+ (id)elementFromURL:(NSURL *)url
+ + +
+
+
+ +

+ elementFromXMLData: +

+ +
+
+ +
+ + +
+ (id)elementFromXMLData:(NSData *)data
+ + +
+
+
+ +

+ elementFromXMLDoc:node: +

+ +
+
+ +
+ + +
+ (id)elementFromXMLDoc:(RXMLDocHolder *)doc node:(xmlNodePtr)node
+ + +
+
+
+ +

+ elementFromHTMLString:encoding: +

+ +
+
+ +
+ + +
+ (id)elementFromHTMLString:(NSString *)xmlString encoding:(NSStringEncoding)encoding
+ + +
+
+
+ +

+ elementFromHTMLFile: +

+ +
+
+ +
+ + +
+ (id)elementFromHTMLFile:(NSString *)filename
+ + +
+
+
+ +

+ elementFromHTMLFile:fileExtension: +

+ +
+
+ +
+ + +
+ (id)elementFromHTMLFile:(NSString *)filename fileExtension:(NSString *)extension
+ + +
+
+
+ +

+ elementFromHTMLFilePath: +

+ +
+
+ +
+ + +
+ (id)elementFromHTMLFilePath:(NSString *)fullPath
+ + +
+
+
+ +

+ elementFromHTMLData: +

+ +
+
+ +
+ + +
+ (id)elementFromHTMLData:(NSData *)data
+ + +
+
+
+ +

– attribute: +

+ +
+
+ +
+ + +
- (NSString *)attribute:(NSString *)attributeName
+ + +
+
+
+ +

– attribute:inNamespace: +

+ +
+
+ +
+ + +
- (NSString *)attribute:(NSString *)attributeName inNamespace:(NSString *)ns
+ + +
+
+
+ +

– attributeNames +

+ +
+
+ +
+ + +
- (NSArray *)attributeNames
+ + +
+
+
+ +

– attributeAsInt: +

+ +
+
+ +
+ + +
- (NSInteger)attributeAsInt:(NSString *)attributeName
+ + +
+
+
+ +

– attributeAsInt:inNamespace: +

+ +
+
+ +
+ + +
- (NSInteger)attributeAsInt:(NSString *)attributeName inNamespace:(NSString *)ns
+ + +
+
+
+ +

– attributeAsDouble: +

+ +
+
+ +
+ + +
- (double)attributeAsDouble:(NSString *)attributeName
+ + +
+
+
+ +

– attributeAsDouble:inNamespace: +

+ +
+
+ +
+ + +
- (double)attributeAsDouble:(NSString *)attributeName inNamespace:(NSString *)ns
+ + +
+
+
+ +

– child: +

+ +
+
+ +
+ + +
- (RXMLElement *)child:(NSString *)tag
+ + +
+
+
+ +

– child:inNamespace: +

+ +
+
+ +
+ + +
- (RXMLElement *)child:(NSString *)tag inNamespace:(NSString *)ns
+ + +
+
+
+ +

– children: +

+ +
+
+ +
+ + +
- (NSArray *)children:(NSString *)tag
+ + +
+
+
+ +

– children:inNamespace: +

+ +
+
+ +
+ + +
- (NSArray *)children:(NSString *)tag inNamespace:(NSString *)ns
+ + +
+
+
+ +

– childrenWithRootXPath: +

+ +
+
+ +
+ + +
- (NSArray *)childrenWithRootXPath:(NSString *)xpath
+ + +
+
+
+ +

– iterate:usingBlock: +

+ +
+
+ +
+ + +
- (void)iterate:(NSString *)query usingBlock:(void ( ^ ) ( RXMLElement *))blk
+ + +
+
+
+ +

– iterateWithRootXPath:usingBlock: +

+ +
+
+ +
+ + +
- (void)iterateWithRootXPath:(NSString *)xpath usingBlock:(void ( ^ ) ( RXMLElement *))blk
+ + +
+
+
+ +

– iterateElements:usingBlock: +

+ +
+
+ +
+ + +
- (void)iterateElements:(NSArray *)elements usingBlock:(void ( ^ ) ( RXMLElement *))blk
+ + +
+
+
+ +

  xmlDoc +

+ +
+
+ +
+ + +
@property (nonatomic, strong) RXMLDocHolder *xmlDoc
+ + +
+
+
+ +

  tag +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) NSString *tag
+ + +
+
+
+ +

  text +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) NSString *text
+ + +
+
+
+ +

  xml +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) NSString *xml
+ + +
+
+
+ +

  innerXml +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) NSString *innerXml
+ + +
+
+
+ +

  textAsInt +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) NSInteger textAsInt
+ + +
+
+
+ +

  textAsDouble +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) double textAsDouble
+ + +
+
+
+ +

  isValid +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) BOOL isValid
+ + +
+
+
+
+ +
+ + + + + + +
+ +
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/API/css/scss/_index.scss b/Documentation/API/css/scss/_index.scss new file mode 100644 index 0000000..6a57ec5 --- /dev/null +++ b/Documentation/API/css/scss/_index.scss @@ -0,0 +1,17 @@ +.index-container { + -webkit-flex-direction: column; + flex-direction: column; + + @media (min-width: $desktop-min-width) { + display: flex; + -webkit-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; + } + + .index-column { + -webkit-flex: 1 1 33%; + flex: 1 1 33%; + } +} diff --git a/Documentation/API/css/scss/_layout.scss b/Documentation/API/css/scss/_layout.scss new file mode 100644 index 0000000..da46aef --- /dev/null +++ b/Documentation/API/css/scss/_layout.scss @@ -0,0 +1,302 @@ +* { + box-sizing: border-box; +} + +.clear { + clear: both; +} + +.clearfix { + &:before, &:after { + clear: both; + display: table; + content: ""; + } +} + +.xcode .hide-in-xcode { + display: none; +} + +body { + font: 62.5% $body-font; + background: $body-background; + + @media (max-width: $mobile-max-width) { + background-color: $content-background; + } +} + +h1, h2, h3 { + font-weight: 300; + color: #808080; +} + +h1 { + font-size: 2em; + color: #000; +} + +h4 { + font-size: 13px; + line-height: 1.5; + margin: 21px 0 0 0; +} + +a { + color: $tint-color; + text-decoration: none; +} + +pre, code { + font-family: $code-font; + word-wrap: break-word; +} + +pre > code, .method-declaration code { + display: inline-block; + font-size: .85em; + padding: 4px 0 4px 10px; + border-left: 5px solid rgba(0, 155, 51, .2); + + &:before { + content: "Objective-C"; + display: block; + + font: 9px/1 $body-font; + color: #009b33; + text-transform: uppercase; + letter-spacing: 2px; + padding-bottom: 6px; + } +} + +pre > code { + font-size: inherit; +} + +table, th, td { + border: 1px solid #e9e9e9; +} + +table { + width: 100%; +} + +th, td { + padding: 7px; + + > :first-child { + margin-top: 0; + } + + > :last-child { + margin-bottom: 0; + } +} + +.container { + @extend .clearfix; + + max-width: 980px; + padding: 0 10px; + margin: 0 auto; + + @media (max-width: $mobile-max-width) { + padding: 0; + } +} + +header { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 2; + + background: #414141; + color: #fff; + font-size: 1.1em; + line-height: 25px; + letter-spacing: .05em; + + #library-title { + float: left; + } + + #developer-home { + float: right; + } + + h1 { + font-size: inherit; + font-weight: inherit; + margin: 0; + } + + p { + margin: 0; + } + + h1, a { + color: inherit; + } + + @media (max-width: $mobile-max-width) { + .container { + padding: 0 10px; + } + } +} + +aside { + position: fixed; + top: 25px; + left: 0; + width: 100%; + height: 25px; + z-index: 2; + + font-size: 1.1em; + + #header-buttons { + background: rgba(255, 255, 255, .8); + margin: 0 1px; + padding: 0; + list-style: none; + text-align: right; + line-height: 32px; + + li { + display: inline-block; + cursor: pointer; + padding: 0 10px; + } + + label, select { + cursor: inherit; + } + + #on-this-page { + position: relative; + + .chevron { + display: inline-block; + width: 14px; + height: 4px; + position: relative; + + .chevy { + background: #878787; + height: 2px; + position: absolute; + width: 10px; + + &.chevron-left { + left: 0; + transform: rotateZ(45deg) scale(0.6); + } + + &.chevron-right { + right: 0; + transform: rotateZ(-45deg) scale(0.6); + } + } + } + + #jump-to { + opacity: 0; + font-size: 16px; + + position: absolute; + top: 5px; + left: 0; + width: 100%; + height: 100%; + } + } + } +} + +article { + margin-top: 25px; + + #content { + @extend .clearfix; + + background: $content-background; + border: 1px solid $content-border; + padding: 15px 25px 30px 25px; + + font-size: 1.4em; + line-height: 1.45; + + position: relative; + + @media (max-width: $mobile-max-width) { + padding: 15px 10px 20px 10px; + border: none; + } + + .navigation-top { + position: absolute; + top: 15px; + right: 25px; + } + + .title { + margin: 21px 0 0 0; + padding: 15px 0; + } + + p { + color: #414141; + margin: 0 0 15px 0; + } + + th, td { + p:last-child { + margin-bottom: 0; + } + } + + main { + ul { + list-style: none; + margin-left: 24px; + margin-bottom: 12px; + padding: 0; + + li { + position: relative; + padding-left: 1.3em; + + &:before { + content: "\02022"; + + color: #414141; + font-size: 1.08em; + line-height: 1; + + position: absolute; + left: 0; + padding-top: 2px; + } + } + } + } + + footer { + @extend .clearfix; + + .footer-copyright { + margin: 70px 25px 10px 0; + } + + p { + font-size: .71em; + color: #a0a0a0; + } + } + } +} diff --git a/Documentation/API/css/scss/_normalize.scss b/Documentation/API/css/scss/_normalize.scss new file mode 100644 index 0000000..9b8848a --- /dev/null +++ b/Documentation/API/css/scss/_normalize.scss @@ -0,0 +1,581 @@ +/* ========================================================================== + Normalize.scss settings + ========================================================================== */ +/** + * Includes legacy browser support IE6/7 + * + * Set to false if you want to drop support for IE6 and IE7 + */ + +$legacy_browser_support: false !default; + +/* Base + ========================================================================== */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + * 3. Corrects text resizing oddly in IE 6/7 when body `font-size` is set using + * `em` units. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ + @if $legacy_browser_support { + *font-size: 100%; /* 3 */ + } +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ + @if $legacy_browser_support { + *display: inline; + *zoom: 1; + } +} + +/** + * Prevents modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a { + &:active, &:hover { + outline: 0; + }; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +@if $legacy_browser_support { + blockquote { + margin: 1em 40px; + } +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +@if $legacy_browser_support { + h2 { + font-size: 1.5em; + margin: 0.83em 0; + } + + h3 { + font-size: 1.17em; + margin: 1em 0; + } + + h4 { + font-size: 1em; + margin: 1.33em 0; + } + + h5 { + font-size: 0.83em; + margin: 1.67em 0; + } + + h6 { + font-size: 0.67em; + margin: 2.33em 0; + } +} + +/** + * Addresses styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +@if $legacy_browser_support { + + /** + * Addresses margins set differently in IE 6/7. + */ + + p, + pre { + *margin: 1em 0; + } + + /* + * Addresses CSS quotes not supported in IE 6/7. + */ + + q { + *quotes: none; + } + + /* + * Addresses `quotes` property not supported in Safari 4. + */ + + q:before, + q:after { + content: ''; + content: none; + } +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +@if $legacy_browser_support { + + /* ========================================================================== + Lists + ========================================================================== */ + + /* + * Addresses margins set differently in IE 6/7. + */ + + dl, + menu, + ol, + ul { + *margin: 1em 0; + } + + dd { + *margin: 0 0 0 40px; + } + + /* + * Addresses paddings set differently in IE 6/7. + */ + + menu, + ol, + ul { + *padding: 0 0 0 40px; + } + + /* + * Corrects list images handled incorrectly in IE 7. + */ + + nav ul, + nav ol { + *list-style: none; + *list-style-image: none; + } + +} + +/* Embedded content + ========================================================================== */ + +/** + * 1. Remove border when inside `a` element in IE 8/9/10. + * 2. Improves image quality when scaled in IE 7. + */ + +img { + border: 0; + @if $legacy_browser_support { + *-ms-interpolation-mode: bicubic; /* 2 */ + } +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + @if $legacy_browser_support { + _font-family: 'courier new', monospace; + } + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + * 4. Improves appearance and consistency in all browsers. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ + @if $legacy_browser_support { + vertical-align: baseline; /* 3 */ + *vertical-align: middle; /* 3 */ + } +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + * 4. Removes inner spacing in IE 7 without affecting normal text inputs. + * Known issue: inner spacing remains in IE 6. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ + @if $legacy_browser_support { + *overflow: visible; /* 4 */ + } +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + * Known issue: excess padding remains in IE 6. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ + @if $legacy_browser_support { + *height: 13px; /* 3 */ + *width: 13px; /* 3 */ + } +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + * 3. Corrects text not wrapping in Firefox 3. + * 4. Corrects alignment displayed oddly in IE 6/7. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ + @if $legacy_browser_support { + white-space: normal; /* 3 */ + *margin-left: -7px; /* 4 */ + } +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} diff --git a/Documentation/API/css/scss/_object.scss b/Documentation/API/css/scss/_object.scss new file mode 100644 index 0000000..22eebd8 --- /dev/null +++ b/Documentation/API/css/scss/_object.scss @@ -0,0 +1,89 @@ +.section-specification { + table { + width: auto; + + th { + text-align: left; + } + } +} + +.method-title { + margin-left: -15px; + margin-bottom: 8px; + transition: margin-left .3s ease-out; + + .section-method.hide & { + margin-left: 0; + } + + code { + font-weight: 400; + font-size: .85em; + } +} + +.method-info { + background: $object-background; + border-bottom: 1px solid $object-border; + margin: 0 -25px; + padding: 20px 25px 0 25px; + transition: height .3s ease-out; + + position: relative; + + .pointy-thing { + background: $content-background; + height: 10px; + border-bottom: 1px solid $object-border; + margin: -20px -25px 16px -25px; + + &:before { + display: inline-block; + content: ""; + + background: $object-background; + border: 1px solid $object-border; + border-bottom: 0; + border-right: 0; + + position: absolute; + left: 21px; + top: 3px; + width: 12px; + height: 12px; + transform: rotate(45deg); + } + } + + .method-subsection { + margin-bottom: 15px; + + .argument-name { + width: 1px; + text-align: right; + + code { + color: #808080; + font-style: italic; + font-weight: 400; + } + } + } +} + +.section-method { + &.hide .method-info { + height: 0 !important; + overflow: hidden; + display: none; + } + + &.hide.animating .method-info { + display: block; + } + + &.animating .method-info { + overflow: hidden; + } +} diff --git a/Documentation/API/css/scss/_print.scss b/Documentation/API/css/scss/_print.scss new file mode 100644 index 0000000..61bdf99 --- /dev/null +++ b/Documentation/API/css/scss/_print.scss @@ -0,0 +1,42 @@ +@media print { + body { + background: #fff; + padding: 8px; + } + + header { + position: static; + background: #fff; + color: #000; + } + + aside { + display: none; + } + + .container { + max-width: none; + padding: 0; + } + + article { + margin-top: 0; + + #content { + border: 0; + background: #fff; + padding: 15px 0 0 0; + + .title { + margin-top: 0; + padding-top: 0; + } + } + } + + .method-info { + &, & .pointy-thing { + background: #fff; + } + } +} diff --git a/Documentation/API/css/scss/_variables.scss b/Documentation/API/css/scss/_variables.scss new file mode 100644 index 0000000..38e072d --- /dev/null +++ b/Documentation/API/css/scss/_variables.scss @@ -0,0 +1,12 @@ +$body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; +$code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; + +$body-background: #f2f2f2; +$content-background: #fff; +$content-border: #e9e9e9; +$tint-color: #08c; +$object-background: #f9f9f9; +$object-border: #e9e9e9; + +$mobile-max-width: 650px; +$desktop-min-width: 768px; \ No newline at end of file diff --git a/Documentation/API/css/scss/_xcode.scss b/Documentation/API/css/scss/_xcode.scss new file mode 100644 index 0000000..340b1f6 --- /dev/null +++ b/Documentation/API/css/scss/_xcode.scss @@ -0,0 +1,29 @@ +.xcode { + header, aside { + display: none; + } + + .container { + padding: 0; + } + + article { + margin-top: 0; + + #content { + border: 0; + margin: 0; + } + } + + .method-info { + &, .section-method.hide & { + max-height: auto; + overflow: visible; + + &.hiding { + display: block; + } + } + } +} diff --git a/Documentation/API/css/scss/style.scss b/Documentation/API/css/scss/style.scss new file mode 100644 index 0000000..648a608 --- /dev/null +++ b/Documentation/API/css/scss/style.scss @@ -0,0 +1 @@ +@import "variables", "normalize", "layout", "index", "object", "print", "xcode"; diff --git a/Documentation/API/css/style.css b/Documentation/API/css/style.css new file mode 100644 index 0000000..d9d59dd --- /dev/null +++ b/Documentation/API/css/style.css @@ -0,0 +1,2 @@ +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}.clear{clear:both}.clearfix:before,.container:before,article #content:before,article #content footer:before,.clearfix:after,.container:after,article #content:after,article #content footer:after{clear:both;display:table;content:""}.xcode .hide-in-xcode{display:none}body{font:62.5% -apple-system-font,"Helvetica Neue",Helvetica,sans-serif;background:#f2f2f2}@media (max-width: 650px){body{background-color:#fff}}h1,h2,h3{font-weight:300;color:#808080}h1{font-size:2em;color:#000}h4{font-size:13px;line-height:1.5;margin:21px 0 0 0}a{color:#08c;text-decoration:none}pre,code{font-family:"Source Code Pro",Monaco,Menlo,Consolas,monospace;word-wrap:break-word}pre>code,.method-declaration code{display:inline-block;font-size:.85em;padding:4px 0 4px 10px;border-left:5px solid rgba(0,155,51,0.2)}pre>code:before,.method-declaration code:before{content:"Objective-C";display:block;font:9px/1 -apple-system-font,"Helvetica Neue",Helvetica,sans-serif;color:#009b33;text-transform:uppercase;letter-spacing:2px;padding-bottom:6px}pre>code{font-size:inherit}table,th,td{border:1px solid #e9e9e9}table{width:100%}th,td{padding:7px}th>:first-child,td>:first-child{margin-top:0}th>:last-child,td>:last-child{margin-bottom:0}.container{max-width:980px;padding:0 10px;margin:0 auto}@media (max-width: 650px){.container{padding:0}}header{position:fixed;top:0;left:0;width:100%;z-index:2;background:#414141;color:#fff;font-size:1.1em;line-height:25px;letter-spacing:.05em}header #library-title{float:left}header #developer-home{float:right}header h1{font-size:inherit;font-weight:inherit;margin:0}header p{margin:0}header h1,header a{color:inherit}@media (max-width: 650px){header .container{padding:0 10px}}aside{position:fixed;top:25px;left:0;width:100%;height:25px;z-index:2;font-size:1.1em}aside #header-buttons{background:rgba(255,255,255,0.8);margin:0 1px;padding:0;list-style:none;text-align:right;line-height:32px}aside #header-buttons li{display:inline-block;cursor:pointer;padding:0 10px}aside #header-buttons label,aside #header-buttons select{cursor:inherit}aside #header-buttons #on-this-page{position:relative}aside #header-buttons #on-this-page .chevron{display:inline-block;width:14px;height:4px;position:relative}aside #header-buttons #on-this-page .chevron .chevy{background:#878787;height:2px;position:absolute;width:10px}aside #header-buttons #on-this-page .chevron .chevy.chevron-left{left:0;transform:rotateZ(45deg) scale(0.6)}aside #header-buttons #on-this-page .chevron .chevy.chevron-right{right:0;transform:rotateZ(-45deg) scale(0.6)}aside #header-buttons #on-this-page #jump-to{opacity:0;font-size:16px;position:absolute;top:5px;left:0;width:100%;height:100%}article{margin-top:25px}article #content{background:#fff;border:1px solid #e9e9e9;padding:15px 25px 30px 25px;font-size:1.4em;line-height:1.45;position:relative}@media (max-width: 650px){article #content{padding:15px 10px 20px 10px;border:none}}article #content .navigation-top{position:absolute;top:15px;right:25px}article #content .title{margin:21px 0 0 0;padding:15px 0}article #content p{color:#414141;margin:0 0 15px 0}article #content th p:last-child,article #content td p:last-child{margin-bottom:0}article #content main ul{list-style:none;margin-left:24px;margin-bottom:12px;padding:0}article #content main ul li{position:relative;padding-left:1.3em}article #content main ul li:before{content:"\02022";color:#414141;font-size:1.08em;line-height:1;position:absolute;left:0;padding-top:2px}article #content footer .footer-copyright{margin:70px 25px 10px 0}article #content footer p{font-size:.71em;color:#a0a0a0}.index-container{-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.index-container{display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap}}.index-container .index-column{-webkit-flex:1 1 33%;flex:1 1 33%}.section-specification table{width:auto}.section-specification table th{text-align:left}.method-title{margin-left:-15px;margin-bottom:8px;transition:margin-left .3s ease-out}.section-method.hide .method-title{margin-left:0}.method-title code{font-weight:400;font-size:.85em}.method-info{background:#f9f9f9;border-bottom:1px solid #e9e9e9;margin:0 -25px;padding:20px 25px 0 25px;transition:height .3s ease-out;position:relative}.method-info .pointy-thing{background:#fff;height:10px;border-bottom:1px solid #e9e9e9;margin:-20px -25px 16px -25px}.method-info .pointy-thing:before{display:inline-block;content:"";background:#f9f9f9;border:1px solid #e9e9e9;border-bottom:0;border-right:0;position:absolute;left:21px;top:3px;width:12px;height:12px;-webkit-transform:rotate(45deg);transform:rotate(45deg) }.method-info .method-subsection{margin-bottom:15px}.method-info .method-subsection .argument-name{width:1px;text-align:right}.method-info .method-subsection .argument-name code{color:#808080;font-style:italic;font-weight:400}.section-method.hide .method-info{height:0 !important;overflow:hidden;display:none}.section-method.hide.animating .method-info{display:block}.section-method.animating .method-info{overflow:hidden}@media print{body{background:#fff;padding:8px}header{position:static;background:#fff;color:#000}aside{display:none}.container{max-width:none;padding:0}article{margin-top:0}article #content{border:0;background:#fff;padding:15px 0 0 0}article #content .title{margin-top:0;padding-top:0}.method-info,.method-info .pointy-thing{background:#fff}}.xcode header,.xcode aside{display:none}.xcode .container{padding:0}.xcode article{margin-top:0}.xcode article #content{border:0;margin:0}.xcode .method-info,.section-method.hide .xcode .method-info{max-height:auto;overflow:visible}.xcode .method-info.hiding,.section-method.hide .xcode .method-info.hiding{display:block} + diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Info.plist b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Info.plist new file mode 100644 index 0000000..83f65d6 --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Info.plist @@ -0,0 +1,35 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + com.raptureinvenice.documentation.RaptureXML + CFBundleName + RaptureXML Documentation + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1.0 + + + + + DocSetFeedName + RaptureXML Documentation + + DocSetMinimumXcodeVersion + 3.0 + DocSetPlatformFamily + iphoneos + DashDocSetFamily + appledoc + DocSetPublisherIdentifier + com.raptureinvenice.documentation.documentation + DocSetPublisherName + Rapture In Venice + NSHumanReadableCopyright + Copyright © 2017 Rapture In Venice. All rights reserved. + + diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/Blocks/RXMLBlock.html b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/Blocks/RXMLBlock.html new file mode 100644 index 0000000..1d4781e --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/Blocks/RXMLBlock.html @@ -0,0 +1,109 @@ + + + + + + RXMLBlock Block Reference + + + + + + +
+
+ +

+ RaptureXML +

+ +

+ Rapture In Venice +

+ +
+
+ + + +
+
+
+
+

RXMLBlock Block Reference

+ + +
+ + + + +
Declared inRXMLElement.h
+ + + + + + + + + + +

Block Definition

+

RXMLBlock

+ + +typedef void (^RXMLBlock) (RXMLElement *element) + + + + + +
+ +
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/Classes/RXMLDocHolder.html b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/Classes/RXMLDocHolder.html new file mode 100644 index 0000000..cb10abf --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/Classes/RXMLDocHolder.html @@ -0,0 +1,166 @@ + + + + + + RXMLDocHolder Class Reference + + + + + + +
+
+ +

+ RaptureXML +

+ +

+ Rapture In Venice +

+ +
+
+ + + +
+
+
+
+

RXMLDocHolder Class Reference

+ + +
+ + + + + + + +
Inherits fromNSObject
Declared inRXMLElement.h
+ + + + + + +
+ + + + + + +
+
+ +

– initWithDocPtr: +

+ +
+
+ +
+ + +
- (id)initWithDocPtr:(xmlDocPtr)doc
+ + +
+
+
+ +

– doc +

+ +
+
+ +
+ + +
- (xmlDocPtr)doc
+ + +
+
+
+
+ +
+ + + + + + +
+ +
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/Classes/RXMLElement.html b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/Classes/RXMLElement.html new file mode 100644 index 0000000..8654138 --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/Classes/RXMLElement.html @@ -0,0 +1,987 @@ + + + + + + RXMLElement Class Reference + + + + + + +
+
+ +

+ RaptureXML +

+ +

+ Rapture In Venice +

+ +
+
+ + + +
+
+
+
+

RXMLElement Class Reference

+ + +
+ + + + + + + + + + +
Inherits fromNSObject
Conforms toNSCopying
Declared inRXMLElement.h
+ + + + + + +
+ + + + + + +
+
+ +

– initFromXMLString:encoding: +

+ +
+
+ +
+ + +
- (id)initFromXMLString:(NSString *)xmlString encoding:(NSStringEncoding)encoding
+ + +
+
+
+ +

– initFromXMLFile: +

+ +
+
+ +
+ + +
- (id)initFromXMLFile:(NSString *)filename
+ + +
+
+
+ +

– initFromXMLFile:fileExtension: +

+ +
+
+ +
+ + +
- (id)initFromXMLFile:(NSString *)filename fileExtension:(NSString *)extension
+ + +
+
+
+ +

– initFromXMLFilePath: +

+ +
+
+ +
+ + +
- (id)initFromXMLFilePath:(NSString *)fullPath
+ + +
+
+
+ +

– initFromURL: +

+ +
+
+ +
+ + +
- (id)initFromURL:(NSURL *)url
+ + +
+
+
+ +

– initFromXMLData: +

+ +
+
+ +
+ + +
- (id)initFromXMLData:(NSData *)data
+ + +
+
+
+ +

– initFromXMLDoc:node: +

+ +
+
+ +
+ + +
- (id)initFromXMLDoc:(RXMLDocHolder *)doc node:(xmlNodePtr)node
+ + +
+
+
+ +

– initFromHTMLString:encoding: +

+ +
+
+ +
+ + +
- (id)initFromHTMLString:(NSString *)xmlString encoding:(NSStringEncoding)encoding
+ + +
+
+
+ +

– initFromHTMLFile: +

+ +
+
+ +
+ + +
- (id)initFromHTMLFile:(NSString *)filename
+ + +
+
+
+ +

– initFromHTMLFile:fileExtension: +

+ +
+
+ +
+ + +
- (id)initFromHTMLFile:(NSString *)filename fileExtension:(NSString *)extension
+ + +
+
+
+ +

– initFromHTMLFilePath: +

+ +
+
+ +
+ + +
- (id)initFromHTMLFilePath:(NSString *)fullPath
+ + +
+
+
+ +

– initFromHTMLData: +

+ +
+
+ +
+ + +
- (id)initFromHTMLData:(NSData *)data
+ + +
+
+
+ +

+ elementFromXMLString:encoding: +

+ +
+
+ +
+ + +
+ (id)elementFromXMLString:(NSString *)xmlString encoding:(NSStringEncoding)encoding
+ + +
+
+
+ +

+ elementFromXMLFile: +

+ +
+
+ +
+ + +
+ (id)elementFromXMLFile:(NSString *)filename
+ + +
+
+
+ +

+ elementFromXMLFilename:fileExtension: +

+ +
+
+ +
+ + +
+ (id)elementFromXMLFilename:(NSString *)filename fileExtension:(NSString *)extension
+ + +
+
+
+ +

+ elementFromXMLFilePath: +

+ +
+
+ +
+ + +
+ (id)elementFromXMLFilePath:(NSString *)fullPath
+ + +
+
+
+ +

+ elementFromURL: +

+ +
+
+ +
+ + +
+ (id)elementFromURL:(NSURL *)url
+ + +
+
+
+ +

+ elementFromXMLData: +

+ +
+
+ +
+ + +
+ (id)elementFromXMLData:(NSData *)data
+ + +
+
+
+ +

+ elementFromXMLDoc:node: +

+ +
+
+ +
+ + +
+ (id)elementFromXMLDoc:(RXMLDocHolder *)doc node:(xmlNodePtr)node
+ + +
+
+
+ +

+ elementFromHTMLString:encoding: +

+ +
+
+ +
+ + +
+ (id)elementFromHTMLString:(NSString *)xmlString encoding:(NSStringEncoding)encoding
+ + +
+
+
+ +

+ elementFromHTMLFile: +

+ +
+
+ +
+ + +
+ (id)elementFromHTMLFile:(NSString *)filename
+ + +
+
+
+ +

+ elementFromHTMLFile:fileExtension: +

+ +
+
+ +
+ + +
+ (id)elementFromHTMLFile:(NSString *)filename fileExtension:(NSString *)extension
+ + +
+
+
+ +

+ elementFromHTMLFilePath: +

+ +
+
+ +
+ + +
+ (id)elementFromHTMLFilePath:(NSString *)fullPath
+ + +
+
+
+ +

+ elementFromHTMLData: +

+ +
+
+ +
+ + +
+ (id)elementFromHTMLData:(NSData *)data
+ + +
+
+
+ +

– attribute: +

+ +
+
+ +
+ + +
- (NSString *)attribute:(NSString *)attributeName
+ + +
+
+
+ +

– attribute:inNamespace: +

+ +
+
+ +
+ + +
- (NSString *)attribute:(NSString *)attributeName inNamespace:(NSString *)ns
+ + +
+
+
+ +

– attributeNames +

+ +
+
+ +
+ + +
- (NSArray *)attributeNames
+ + +
+
+
+ +

– attributeAsInt: +

+ +
+
+ +
+ + +
- (NSInteger)attributeAsInt:(NSString *)attributeName
+ + +
+
+
+ +

– attributeAsInt:inNamespace: +

+ +
+
+ +
+ + +
- (NSInteger)attributeAsInt:(NSString *)attributeName inNamespace:(NSString *)ns
+ + +
+
+
+ +

– attributeAsDouble: +

+ +
+
+ +
+ + +
- (double)attributeAsDouble:(NSString *)attributeName
+ + +
+
+
+ +

– attributeAsDouble:inNamespace: +

+ +
+
+ +
+ + +
- (double)attributeAsDouble:(NSString *)attributeName inNamespace:(NSString *)ns
+ + +
+
+
+ +

– child: +

+ +
+
+ +
+ + +
- (RXMLElement *)child:(NSString *)tag
+ + +
+
+
+ +

– child:inNamespace: +

+ +
+
+ +
+ + +
- (RXMLElement *)child:(NSString *)tag inNamespace:(NSString *)ns
+ + +
+
+
+ +

– children: +

+ +
+
+ +
+ + +
- (NSArray *)children:(NSString *)tag
+ + +
+
+
+ +

– children:inNamespace: +

+ +
+
+ +
+ + +
- (NSArray *)children:(NSString *)tag inNamespace:(NSString *)ns
+ + +
+
+
+ +

– childrenWithRootXPath: +

+ +
+
+ +
+ + +
- (NSArray *)childrenWithRootXPath:(NSString *)xpath
+ + +
+
+
+ +

– iterate:usingBlock: +

+ +
+
+ +
+ + +
- (void)iterate:(NSString *)query usingBlock:(void ( ^ ) ( RXMLElement *))blk
+ + +
+
+
+ +

– iterateWithRootXPath:usingBlock: +

+ +
+
+ +
+ + +
- (void)iterateWithRootXPath:(NSString *)xpath usingBlock:(void ( ^ ) ( RXMLElement *))blk
+ + +
+
+
+ +

– iterateElements:usingBlock: +

+ +
+
+ +
+ + +
- (void)iterateElements:(NSArray *)elements usingBlock:(void ( ^ ) ( RXMLElement *))blk
+ + +
+
+
+ +

  xmlDoc +

+ +
+
+ +
+ + +
@property (nonatomic, strong) RXMLDocHolder *xmlDoc
+ + +
+
+
+ +

  tag +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) NSString *tag
+ + +
+
+
+ +

  text +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) NSString *text
+ + +
+
+
+ +

  xml +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) NSString *xml
+ + +
+
+
+ +

  innerXml +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) NSString *innerXml
+ + +
+
+
+ +

  textAsInt +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) NSInteger textAsInt
+ + +
+
+
+ +

  textAsDouble +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) double textAsDouble
+ + +
+
+
+ +

  isValid +

+ +
+
+ +
+ + +
@property (nonatomic, readonly) BOOL isValid
+ + +
+
+
+
+ +
+ + + + + + +
+ +
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_index.scss b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_index.scss new file mode 100644 index 0000000..6a57ec5 --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_index.scss @@ -0,0 +1,17 @@ +.index-container { + -webkit-flex-direction: column; + flex-direction: column; + + @media (min-width: $desktop-min-width) { + display: flex; + -webkit-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; + } + + .index-column { + -webkit-flex: 1 1 33%; + flex: 1 1 33%; + } +} diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_layout.scss b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_layout.scss new file mode 100644 index 0000000..da46aef --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_layout.scss @@ -0,0 +1,302 @@ +* { + box-sizing: border-box; +} + +.clear { + clear: both; +} + +.clearfix { + &:before, &:after { + clear: both; + display: table; + content: ""; + } +} + +.xcode .hide-in-xcode { + display: none; +} + +body { + font: 62.5% $body-font; + background: $body-background; + + @media (max-width: $mobile-max-width) { + background-color: $content-background; + } +} + +h1, h2, h3 { + font-weight: 300; + color: #808080; +} + +h1 { + font-size: 2em; + color: #000; +} + +h4 { + font-size: 13px; + line-height: 1.5; + margin: 21px 0 0 0; +} + +a { + color: $tint-color; + text-decoration: none; +} + +pre, code { + font-family: $code-font; + word-wrap: break-word; +} + +pre > code, .method-declaration code { + display: inline-block; + font-size: .85em; + padding: 4px 0 4px 10px; + border-left: 5px solid rgba(0, 155, 51, .2); + + &:before { + content: "Objective-C"; + display: block; + + font: 9px/1 $body-font; + color: #009b33; + text-transform: uppercase; + letter-spacing: 2px; + padding-bottom: 6px; + } +} + +pre > code { + font-size: inherit; +} + +table, th, td { + border: 1px solid #e9e9e9; +} + +table { + width: 100%; +} + +th, td { + padding: 7px; + + > :first-child { + margin-top: 0; + } + + > :last-child { + margin-bottom: 0; + } +} + +.container { + @extend .clearfix; + + max-width: 980px; + padding: 0 10px; + margin: 0 auto; + + @media (max-width: $mobile-max-width) { + padding: 0; + } +} + +header { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 2; + + background: #414141; + color: #fff; + font-size: 1.1em; + line-height: 25px; + letter-spacing: .05em; + + #library-title { + float: left; + } + + #developer-home { + float: right; + } + + h1 { + font-size: inherit; + font-weight: inherit; + margin: 0; + } + + p { + margin: 0; + } + + h1, a { + color: inherit; + } + + @media (max-width: $mobile-max-width) { + .container { + padding: 0 10px; + } + } +} + +aside { + position: fixed; + top: 25px; + left: 0; + width: 100%; + height: 25px; + z-index: 2; + + font-size: 1.1em; + + #header-buttons { + background: rgba(255, 255, 255, .8); + margin: 0 1px; + padding: 0; + list-style: none; + text-align: right; + line-height: 32px; + + li { + display: inline-block; + cursor: pointer; + padding: 0 10px; + } + + label, select { + cursor: inherit; + } + + #on-this-page { + position: relative; + + .chevron { + display: inline-block; + width: 14px; + height: 4px; + position: relative; + + .chevy { + background: #878787; + height: 2px; + position: absolute; + width: 10px; + + &.chevron-left { + left: 0; + transform: rotateZ(45deg) scale(0.6); + } + + &.chevron-right { + right: 0; + transform: rotateZ(-45deg) scale(0.6); + } + } + } + + #jump-to { + opacity: 0; + font-size: 16px; + + position: absolute; + top: 5px; + left: 0; + width: 100%; + height: 100%; + } + } + } +} + +article { + margin-top: 25px; + + #content { + @extend .clearfix; + + background: $content-background; + border: 1px solid $content-border; + padding: 15px 25px 30px 25px; + + font-size: 1.4em; + line-height: 1.45; + + position: relative; + + @media (max-width: $mobile-max-width) { + padding: 15px 10px 20px 10px; + border: none; + } + + .navigation-top { + position: absolute; + top: 15px; + right: 25px; + } + + .title { + margin: 21px 0 0 0; + padding: 15px 0; + } + + p { + color: #414141; + margin: 0 0 15px 0; + } + + th, td { + p:last-child { + margin-bottom: 0; + } + } + + main { + ul { + list-style: none; + margin-left: 24px; + margin-bottom: 12px; + padding: 0; + + li { + position: relative; + padding-left: 1.3em; + + &:before { + content: "\02022"; + + color: #414141; + font-size: 1.08em; + line-height: 1; + + position: absolute; + left: 0; + padding-top: 2px; + } + } + } + } + + footer { + @extend .clearfix; + + .footer-copyright { + margin: 70px 25px 10px 0; + } + + p { + font-size: .71em; + color: #a0a0a0; + } + } + } +} diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_normalize.scss b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_normalize.scss new file mode 100644 index 0000000..9b8848a --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_normalize.scss @@ -0,0 +1,581 @@ +/* ========================================================================== + Normalize.scss settings + ========================================================================== */ +/** + * Includes legacy browser support IE6/7 + * + * Set to false if you want to drop support for IE6 and IE7 + */ + +$legacy_browser_support: false !default; + +/* Base + ========================================================================== */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + * 3. Corrects text resizing oddly in IE 6/7 when body `font-size` is set using + * `em` units. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ + @if $legacy_browser_support { + *font-size: 100%; /* 3 */ + } +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ + @if $legacy_browser_support { + *display: inline; + *zoom: 1; + } +} + +/** + * Prevents modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a { + &:active, &:hover { + outline: 0; + }; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +@if $legacy_browser_support { + blockquote { + margin: 1em 40px; + } +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +@if $legacy_browser_support { + h2 { + font-size: 1.5em; + margin: 0.83em 0; + } + + h3 { + font-size: 1.17em; + margin: 1em 0; + } + + h4 { + font-size: 1em; + margin: 1.33em 0; + } + + h5 { + font-size: 0.83em; + margin: 1.67em 0; + } + + h6 { + font-size: 0.67em; + margin: 2.33em 0; + } +} + +/** + * Addresses styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +@if $legacy_browser_support { + + /** + * Addresses margins set differently in IE 6/7. + */ + + p, + pre { + *margin: 1em 0; + } + + /* + * Addresses CSS quotes not supported in IE 6/7. + */ + + q { + *quotes: none; + } + + /* + * Addresses `quotes` property not supported in Safari 4. + */ + + q:before, + q:after { + content: ''; + content: none; + } +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +@if $legacy_browser_support { + + /* ========================================================================== + Lists + ========================================================================== */ + + /* + * Addresses margins set differently in IE 6/7. + */ + + dl, + menu, + ol, + ul { + *margin: 1em 0; + } + + dd { + *margin: 0 0 0 40px; + } + + /* + * Addresses paddings set differently in IE 6/7. + */ + + menu, + ol, + ul { + *padding: 0 0 0 40px; + } + + /* + * Corrects list images handled incorrectly in IE 7. + */ + + nav ul, + nav ol { + *list-style: none; + *list-style-image: none; + } + +} + +/* Embedded content + ========================================================================== */ + +/** + * 1. Remove border when inside `a` element in IE 8/9/10. + * 2. Improves image quality when scaled in IE 7. + */ + +img { + border: 0; + @if $legacy_browser_support { + *-ms-interpolation-mode: bicubic; /* 2 */ + } +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + @if $legacy_browser_support { + _font-family: 'courier new', monospace; + } + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + * 4. Improves appearance and consistency in all browsers. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ + @if $legacy_browser_support { + vertical-align: baseline; /* 3 */ + *vertical-align: middle; /* 3 */ + } +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + * 4. Removes inner spacing in IE 7 without affecting normal text inputs. + * Known issue: inner spacing remains in IE 6. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ + @if $legacy_browser_support { + *overflow: visible; /* 4 */ + } +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + * Known issue: excess padding remains in IE 6. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ + @if $legacy_browser_support { + *height: 13px; /* 3 */ + *width: 13px; /* 3 */ + } +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + * 3. Corrects text not wrapping in Firefox 3. + * 4. Corrects alignment displayed oddly in IE 6/7. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ + @if $legacy_browser_support { + white-space: normal; /* 3 */ + *margin-left: -7px; /* 4 */ + } +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_object.scss b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_object.scss new file mode 100644 index 0000000..22eebd8 --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_object.scss @@ -0,0 +1,89 @@ +.section-specification { + table { + width: auto; + + th { + text-align: left; + } + } +} + +.method-title { + margin-left: -15px; + margin-bottom: 8px; + transition: margin-left .3s ease-out; + + .section-method.hide & { + margin-left: 0; + } + + code { + font-weight: 400; + font-size: .85em; + } +} + +.method-info { + background: $object-background; + border-bottom: 1px solid $object-border; + margin: 0 -25px; + padding: 20px 25px 0 25px; + transition: height .3s ease-out; + + position: relative; + + .pointy-thing { + background: $content-background; + height: 10px; + border-bottom: 1px solid $object-border; + margin: -20px -25px 16px -25px; + + &:before { + display: inline-block; + content: ""; + + background: $object-background; + border: 1px solid $object-border; + border-bottom: 0; + border-right: 0; + + position: absolute; + left: 21px; + top: 3px; + width: 12px; + height: 12px; + transform: rotate(45deg); + } + } + + .method-subsection { + margin-bottom: 15px; + + .argument-name { + width: 1px; + text-align: right; + + code { + color: #808080; + font-style: italic; + font-weight: 400; + } + } + } +} + +.section-method { + &.hide .method-info { + height: 0 !important; + overflow: hidden; + display: none; + } + + &.hide.animating .method-info { + display: block; + } + + &.animating .method-info { + overflow: hidden; + } +} diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_print.scss b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_print.scss new file mode 100644 index 0000000..61bdf99 --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_print.scss @@ -0,0 +1,42 @@ +@media print { + body { + background: #fff; + padding: 8px; + } + + header { + position: static; + background: #fff; + color: #000; + } + + aside { + display: none; + } + + .container { + max-width: none; + padding: 0; + } + + article { + margin-top: 0; + + #content { + border: 0; + background: #fff; + padding: 15px 0 0 0; + + .title { + margin-top: 0; + padding-top: 0; + } + } + } + + .method-info { + &, & .pointy-thing { + background: #fff; + } + } +} diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_variables.scss b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_variables.scss new file mode 100644 index 0000000..38e072d --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_variables.scss @@ -0,0 +1,12 @@ +$body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; +$code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; + +$body-background: #f2f2f2; +$content-background: #fff; +$content-border: #e9e9e9; +$tint-color: #08c; +$object-background: #f9f9f9; +$object-border: #e9e9e9; + +$mobile-max-width: 650px; +$desktop-min-width: 768px; \ No newline at end of file diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_xcode.scss b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_xcode.scss new file mode 100644 index 0000000..340b1f6 --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/_xcode.scss @@ -0,0 +1,29 @@ +.xcode { + header, aside { + display: none; + } + + .container { + padding: 0; + } + + article { + margin-top: 0; + + #content { + border: 0; + margin: 0; + } + } + + .method-info { + &, .section-method.hide & { + max-height: auto; + overflow: visible; + + &.hiding { + display: block; + } + } + } +} diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/style.scss b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/style.scss new file mode 100644 index 0000000..648a608 --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/scss/style.scss @@ -0,0 +1 @@ +@import "variables", "normalize", "layout", "index", "object", "print", "xcode"; diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/style.css b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/style.css new file mode 100644 index 0000000..d9d59dd --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/css/style.css @@ -0,0 +1,2 @@ +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}.clear{clear:both}.clearfix:before,.container:before,article #content:before,article #content footer:before,.clearfix:after,.container:after,article #content:after,article #content footer:after{clear:both;display:table;content:""}.xcode .hide-in-xcode{display:none}body{font:62.5% -apple-system-font,"Helvetica Neue",Helvetica,sans-serif;background:#f2f2f2}@media (max-width: 650px){body{background-color:#fff}}h1,h2,h3{font-weight:300;color:#808080}h1{font-size:2em;color:#000}h4{font-size:13px;line-height:1.5;margin:21px 0 0 0}a{color:#08c;text-decoration:none}pre,code{font-family:"Source Code Pro",Monaco,Menlo,Consolas,monospace;word-wrap:break-word}pre>code,.method-declaration code{display:inline-block;font-size:.85em;padding:4px 0 4px 10px;border-left:5px solid rgba(0,155,51,0.2)}pre>code:before,.method-declaration code:before{content:"Objective-C";display:block;font:9px/1 -apple-system-font,"Helvetica Neue",Helvetica,sans-serif;color:#009b33;text-transform:uppercase;letter-spacing:2px;padding-bottom:6px}pre>code{font-size:inherit}table,th,td{border:1px solid #e9e9e9}table{width:100%}th,td{padding:7px}th>:first-child,td>:first-child{margin-top:0}th>:last-child,td>:last-child{margin-bottom:0}.container{max-width:980px;padding:0 10px;margin:0 auto}@media (max-width: 650px){.container{padding:0}}header{position:fixed;top:0;left:0;width:100%;z-index:2;background:#414141;color:#fff;font-size:1.1em;line-height:25px;letter-spacing:.05em}header #library-title{float:left}header #developer-home{float:right}header h1{font-size:inherit;font-weight:inherit;margin:0}header p{margin:0}header h1,header a{color:inherit}@media (max-width: 650px){header .container{padding:0 10px}}aside{position:fixed;top:25px;left:0;width:100%;height:25px;z-index:2;font-size:1.1em}aside #header-buttons{background:rgba(255,255,255,0.8);margin:0 1px;padding:0;list-style:none;text-align:right;line-height:32px}aside #header-buttons li{display:inline-block;cursor:pointer;padding:0 10px}aside #header-buttons label,aside #header-buttons select{cursor:inherit}aside #header-buttons #on-this-page{position:relative}aside #header-buttons #on-this-page .chevron{display:inline-block;width:14px;height:4px;position:relative}aside #header-buttons #on-this-page .chevron .chevy{background:#878787;height:2px;position:absolute;width:10px}aside #header-buttons #on-this-page .chevron .chevy.chevron-left{left:0;transform:rotateZ(45deg) scale(0.6)}aside #header-buttons #on-this-page .chevron .chevy.chevron-right{right:0;transform:rotateZ(-45deg) scale(0.6)}aside #header-buttons #on-this-page #jump-to{opacity:0;font-size:16px;position:absolute;top:5px;left:0;width:100%;height:100%}article{margin-top:25px}article #content{background:#fff;border:1px solid #e9e9e9;padding:15px 25px 30px 25px;font-size:1.4em;line-height:1.45;position:relative}@media (max-width: 650px){article #content{padding:15px 10px 20px 10px;border:none}}article #content .navigation-top{position:absolute;top:15px;right:25px}article #content .title{margin:21px 0 0 0;padding:15px 0}article #content p{color:#414141;margin:0 0 15px 0}article #content th p:last-child,article #content td p:last-child{margin-bottom:0}article #content main ul{list-style:none;margin-left:24px;margin-bottom:12px;padding:0}article #content main ul li{position:relative;padding-left:1.3em}article #content main ul li:before{content:"\02022";color:#414141;font-size:1.08em;line-height:1;position:absolute;left:0;padding-top:2px}article #content footer .footer-copyright{margin:70px 25px 10px 0}article #content footer p{font-size:.71em;color:#a0a0a0}.index-container{-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.index-container{display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap}}.index-container .index-column{-webkit-flex:1 1 33%;flex:1 1 33%}.section-specification table{width:auto}.section-specification table th{text-align:left}.method-title{margin-left:-15px;margin-bottom:8px;transition:margin-left .3s ease-out}.section-method.hide .method-title{margin-left:0}.method-title code{font-weight:400;font-size:.85em}.method-info{background:#f9f9f9;border-bottom:1px solid #e9e9e9;margin:0 -25px;padding:20px 25px 0 25px;transition:height .3s ease-out;position:relative}.method-info .pointy-thing{background:#fff;height:10px;border-bottom:1px solid #e9e9e9;margin:-20px -25px 16px -25px}.method-info .pointy-thing:before{display:inline-block;content:"";background:#f9f9f9;border:1px solid #e9e9e9;border-bottom:0;border-right:0;position:absolute;left:21px;top:3px;width:12px;height:12px;-webkit-transform:rotate(45deg);transform:rotate(45deg) }.method-info .method-subsection{margin-bottom:15px}.method-info .method-subsection .argument-name{width:1px;text-align:right}.method-info .method-subsection .argument-name code{color:#808080;font-style:italic;font-weight:400}.section-method.hide .method-info{height:0 !important;overflow:hidden;display:none}.section-method.hide.animating .method-info{display:block}.section-method.animating .method-info{overflow:hidden}@media print{body{background:#fff;padding:8px}header{position:static;background:#fff;color:#000}aside{display:none}.container{max-width:none;padding:0}article{margin-top:0}article #content{border:0;background:#fff;padding:15px 0 0 0}article #content .title{margin-top:0;padding-top:0}.method-info,.method-info .pointy-thing{background:#fff}}.xcode header,.xcode aside{display:none}.xcode .container{padding:0}.xcode article{margin-top:0}.xcode article #content{border:0;margin:0}.xcode .method-info,.section-method.hide .xcode .method-info{max-height:auto;overflow:visible}.xcode .method-info.hiding,.section-method.hide .xcode .method-info.hiding{display:block} + diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/hierarchy.html b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/hierarchy.html new file mode 100644 index 0000000..074b14e --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/hierarchy.html @@ -0,0 +1,89 @@ + + + + + + RaptureXML Hierarchy + + + + + + +
+
+ +

+ RaptureXML +

+ +

+ Rapture In Venice +

+ +
+
+ + + +
+
+
+
+

RaptureXML Hierarchy

+ + +
+

Class Hierarchy

+ + + +
+ + + +
+ + + +
+ + +
+ +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/img/button_bar_background.png b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/img/button_bar_background.png new file mode 100644 index 0000000000000000000000000000000000000000..71d1019bc0c5c571dea84ff9775aa243444d2d4a GIT binary patch literal 2825 zcmV+k3-KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0000qNkl%Np<^ZU>0nqLSy#7X21yZJL b18@fb!nF!3r##!100000NkvXXu0mjf;Lkd# literal 0 HcmV?d00001 diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/img/disclosure.png b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/img/disclosure.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5cbf445602efefe8ee0475703d36ba4132ff21 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRM!2%>3kI32qDJxGG#}JO_`KyqCDY z*KXE?%k|6ufBPK!<6_I4f7W}-SGbGsdN0tg!V=WD=wjWz$u?adUkEVRH#$H4{$dk9 P&=dwwS3j3^P63kI32qDKAeK#}JO|$v@6N$mnnQFZs`y zVdCMs<^KgT?B%tdsPGFGRJ=dLFZ%0zg1x*>$p86_dQT3$|8Vc2oeOUWM@HOU=Rfsq fB8n*;t{e<2Cp(|jRn^)AG?l^A)z4*}Q$iB}AA>A0 literal 0 HcmV?d00001 diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/img/library_background.png b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/img/library_background.png new file mode 100644 index 0000000000000000000000000000000000000000..3006248afe8822e2c9761d9e76a900b2e9781366 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!3HEfN&F!HD`A7 zGAIf#2eRk&s%13)vlW+lq|A78-&7mDt%)5zO3YC!PX6C6d@N^ihs=xXE6;3R6D_$Y ZpF#6xy3}8Re4y=ES4z)+>iz|hdl!0_`wkbcR)P-?)y@G60U!DwdS5Kjv*DdV!92v z7!-Jp7=8I~ult4BS5`!1y1 + + + + + RaptureXML Reference + + + + + + +
+
+ +

+ RaptureXML +

+ +

+ Rapture In Venice +

+ +
+
+ + + +
+
+
+
+

RaptureXML Reference

+ + +
+ + +

RaptureXML is a simple, block-based XML library for the iOS platform that provides an expressive API that makes XML processing freakin' fun for once in my life.

+ +

Why do we need another XML library?

+ +

You tell me. Processing XML in Objective-C is an awful, frustrating experience and the resulting code is never readable. I’m tired of it! RaptureXML solves this by providing a powerful new interface on top of libxml2. Imagine for a minute the code you’d write to process the XML for a list of baseball team members, retrieving their numbers, names, and positions using your favorite XML processing library. Now, take a look at how you do it with RaptureXML:

+ +
RXMLElement *rootXML = [RXMLElement elementFromXMLFile:@"players.xml"];
+
+[rootXML iterate:@"players.player" usingBlock: ^(RXMLElement *e) {
+    NSLog(@"Player #%@: %@", [e attribute:@"number"], [e child:@"name"].text);
+}];    
+
+ +

RaptureXML changes the game when it comes to XML processing in Objective-C. As you can see from the code, it takes only seconds to understand what this code does. There are no wasted arrays and verbose looping you have to do. The code is a breeze to read and maintain.

+ +

I don’t think any more needs to be said.

+ +

Adding RaptureXML to Your Project

+ +

The recommended way to add RaptureXML to your project is through CocoaPods. Simply add ‘RaptureXML’ into your Podfile.

+ +

To install manually, there’s just a few simple steps:

+ +
    +
  • Copy the RaptureXML/RaptureXML folder into your own project and import “RXMLElement.h” somewhere (e.g., your PCH file).
  • +
  • Link in libz.dylib to your target.
  • +
  • Link in libxml2.dylib to your target.
  • +
  • In your build settings, for the key “Header Search Paths”, add “$(SDK_DIR)”/usr/include/libxml2
  • +
+ + +

RaptureXML supports ARC. You are free to use any version of LLVM or gcc as well! (Though you should be using LLVM by now.)

+ +

ARC isn’t just supported, it’s required!

+ +

RaptureXML supports ARC. In fact, it only supports ARC. If you’re still running a project that doesn’t use ARC, RaptureXML won’t be your cup of tea.

+ +

Getting Started

+ +

RaptureXML processes XML in two steps: load and path. This means that you first load the XML from any source you want such as file, data, or string. Then, you simply use its query language to find what you need.

+ +

You can load the XML with any of the following constructors:

+ +
RXMLElement *rootXML = [RXMLElement elementFromXMLString:@"...my xml..." encoding:NSUTF8StringEncoding];
+RXMLElement *rootXML = [RXMLElement elementFromXMLFile:@"myfile.xml"];
+RXMLElement *rootXML = [RXMLElement elementFromXMLFilename:@"myfile" elementFromXMLFilename:@"xml"];
+RXMLElement *rootXML = [RXMLElement elementFromXMLData:myData];
+
+ +

These constructors return an RXMLElement object that represents the top-level tags. Now, you can query the data in any number of ways.

+ +

Let’s pretend your XML looks like this:

+ +
<team year="2011" name="New York Mets">
+    <players>
+        <coach>
+            <name>Terry Collins</name>
+            <year>1</year>
+        </coach>
+
+        <player number="7">
+            <name>Jose Reyes</name>
+            <position>SS</position>
+        </player>
+
+        <player number="16">
+            <name>Angel Pagan</name>
+            <position>CF</position>
+        </player>
+
+        <player number="5">
+            <name>David Wright</name>
+            <position>3B</position>
+        </player>
+
+        ...
+
+    </players>
+</team>
+
+ +

First, we’d load the XML:

+ +
RXMLElement *rootXML = [RXMLElement elementFromXMLFile:@"players.xml"];
+
+ +

We can immediately query the top-level tag name:

+ +
rootXML.tag --> @"team"
+
+ +

We can read attributes with:

+ +
[rootXML attribute:@"year"] --> @"2011"
+[rootXML attribute:@"name"] --> @"New York Mets"
+
+ +

We can get the players tag with:

+ +
RXMLElement *rxmlPlayers = [rootXML child:@"players"];
+
+ +

If we like, we can get all the individual player tags with:

+ +
NSArray *rxmlIndividualPlayers = [rxmlPlayers children:@"player"];
+
+ +

From there, we can process the individual players and be happy. Now, this is already much better than any other XML library we’ve seen, but RaptureXML can use query paths to make this ridiculously easy. Let’s use query paths to improve the conciseness our code:

+ +
[rootXML iterate:@"players.player" usingBlock: ^(RXMLElement *player) {
+    NSLog(@"Player: %@ (#%@)", [player child:@"name"].text, [player attribute:@"number"]);
+}];    
+
+ +

Your block is passed an RXMLElement representing each player in just one line! Alternatively, you could have shortened it with:

+ +
[rootXML iterate:@"players.player" usingBlock: ^(RXMLElement *player) {
+    NSLog(@"Player: %@ (#%@)", [player child:@"name"], [player attribute:@"number"]);
+}];    
+
+ +

This also works because RXMLElement#description returns the text of the tag. Query paths are even more powerful with wildcards. Let’s say we wanted the name of every person on the team, player or coach. We use the wildcard to get it:

+ +
[rootXML iterate:@"players.*.name" usingBlock: ^(RXMLElement *name) {
+    NSLog(@"Name: %@", name.text);
+}];
+
+ +

The wildcard processes every tag rather than the one you would’ve named. You can also use the wildcard to iterate all the children of an element:

+ +
[rootXML iterate:@"players.coach.*" usingBlock: ^(RXMLElement *e) {
+    NSLog(@"Tag: %@, Text: %@", e.tag, e.text);
+}];
+
+ +

This gives us all the tags for the coach. Easy enough?

+ +

XPath

+ +

If you don’t want to use the custom RaptureXML iteration query syntax, you can use the standard XPath query language as well. Here’s how you query all players with XPath:

+ +
[rootXML iterateWithRootXPath:@"//player" usingBlock: ^(RXMLElement *player) {
+    NSLog(@"Player: %@ (#%@)", [player child:@"name"], [player attribute:@"number"]);
+}];    
+
+ +

And remember, you can also test attributes using XPath as well. Here’s how you can find the player with #5:

+ +
[rootXML iterateWithRootXPath:@"//player[@number='5']" usingBlock: ^(RXMLElement *player) {
+    NSLog(@"Player #5: %@", [player child:@"name"]);
+}];    
+
+ +

Note that you can only use XPath from the document root and it won’t matter what RXMLElement you have. If you have a derived RXMLElement, you can still build from the document root. If you’re not familiar with XPath, you can use this handy guide.

+ +

Namespaces

+ +

Namespaces are supported for most methods, however not for iterations. If you want to use namespaces for that kind of thing, use the -children method manually. When specifying namespaces, be sure to specify the namespace URI and not the prefix. For example, if your XML looked like:

+ +
<team xmlns:sport="*" sport:year="2011" sport:name="New York Mets">
+    ...
+</team>
+
+ +

You would access the attributes with:

+ +
NSLog(@"Team Name: %@", [e attribute:@"name" inNamespace:@"*"]);
+
+ +

RubyMotion Support

+ +

RaptureXML is easily integrated into RubyMotion! Here’s how.

+ +

Unit Tests as Documentation

+ +

You can see the full usage of RaptureXML by reading the unit tests in the project. Not only does it show you all the code, but you’ll know it works! (You can run the unit tests by pressing Command-U in Xcode)

+ +

Who Created RaptureXML?

+ +

RaptureXML was created by John Blanco john.blanco@raptureinvenice.com of Rapture In Venice because he got sick of using all of the bizarre XML solutions for iPhone development. If you like this code and/or need an iOS consultant, get in touch with me via my website, Rapture In Venice.

+ + +
+ + +
+ + + +
+

Class References

+ +
+ + + +
+ + + + + +
+ +
+ +
+ +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/js/script.js b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/js/script.js new file mode 100644 index 0000000..4074361 --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Documents/js/script.js @@ -0,0 +1,59 @@ +function $() { + return document.querySelector.apply(document, arguments); +} + +if (navigator.userAgent.indexOf("Xcode") != -1) { + document.documentElement.classList.add("xcode"); +} + +var jumpTo = $("#jump-to"); + +if (jumpTo) { + jumpTo.addEventListener("change", function(e) { + location.hash = this.options[this.selectedIndex].value; + }); +} + +function hashChanged() { + if (/^#\/\/api\//.test(location.hash)) { + var element = document.querySelector("a[name='" + location.hash.substring(1) + "']"); + + if (!element) { + return; + } + + element = element.parentNode; + + element.classList.remove("hide"); + fixScrollPosition(element); + } +} + +function fixScrollPosition(element) { + var scrollTop = element.offsetTop - 150; + document.documentElement.scrollTop = scrollTop; + document.body.scrollTop = scrollTop; +} + +[].forEach.call(document.querySelectorAll(".section-method"), function(element) { + element.classList.add("hide"); + + element.querySelector(".method-title a").addEventListener("click", function(e) { + var info = element.querySelector(".method-info"), + infoContainer = element.querySelector(".method-info-container"); + + element.classList.add("animating"); + info.style.height = (infoContainer.clientHeight + 40) + "px"; + fixScrollPosition(element); + element.classList.toggle("hide"); + if (element.classList.contains("hide")) { + e.preventDefault(); + } + setTimeout(function() { + element.classList.remove("animating"); + }, 300); + }); +}); + +window.addEventListener("hashchange", hashChanged); +hashChanged(); diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Nodes.xml b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Nodes.xml new file mode 100644 index 0000000..4363843 --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Nodes.xml @@ -0,0 +1,115 @@ + + + + + RaptureXML + index.html + + + + + Classes + index.html + + + + + + + + + + + + + Blocks + index.html + + + + + + + + + + + + + RXMLDocHolder + Classes/RXMLDocHolder.html + + + + Classes/RXMLDocHolder.html + Overview + overview + + + Classes/RXMLDocHolder.html + Tasks + tasks + + + + + + Classes/RXMLDocHolder.html + Instance Methods + instance_methods + + + + + + + RXMLElement + Classes/RXMLElement.html + + + + Classes/RXMLElement.html + Overview + overview + + + Classes/RXMLElement.html + Tasks + tasks + + + + Classes/RXMLElement.html + Properties + properties + + + + + Classes/RXMLElement.html + Class Methods + class_methods + + + + + Classes/RXMLElement.html + Instance Methods + instance_methods + + + + + + + + + + + RXMLBlock + Blocks/RXMLBlock.html + + + + + \ No newline at end of file diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Tokens1.xml b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Tokens1.xml new file mode 100644 index 0000000..8e4767f --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Tokens1.xml @@ -0,0 +1,42 @@ + + + + + + //apple_ref/occ/cl/RXMLDocHolder + + RXMLElement.h + + + + + + + + //apple_ref/occ/instm/RXMLDocHolder/initWithDocPtr: + + RXMLElement.h + + - (id)initWithDocPtr:(xmlDocPtr)doc + + + //api/name/initWithDocPtr: + + + + + //apple_ref/occ/instm/RXMLDocHolder/doc + + RXMLElement.h + + - (xmlDocPtr)doc + + + //api/name/doc + + + + + + + \ No newline at end of file diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Tokens2.xml b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Tokens2.xml new file mode 100644 index 0000000..6fe654e --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Tokens2.xml @@ -0,0 +1,774 @@ + + + + + + //apple_ref/occ/cl/RXMLElement + + RXMLElement.h + + + + + + + + //apple_ref/occ/instm/RXMLElement/initFromXMLString:encoding: + + RXMLElement.h + + - (id)initFromXMLString:(NSString *)xmlString encoding:(NSStringEncoding)encoding + + + //api/name/initFromXMLString:encoding: + + + + + //apple_ref/occ/instm/RXMLElement/initFromXMLFile: + + RXMLElement.h + + - (id)initFromXMLFile:(NSString *)filename + + + //api/name/initFromXMLFile: + + + + + //apple_ref/occ/instm/RXMLElement/initFromXMLFile:fileExtension: + + RXMLElement.h + + - (id)initFromXMLFile:(NSString *)filename fileExtension:(NSString *)extension + + + //api/name/initFromXMLFile:fileExtension: + + + + + //apple_ref/occ/instm/RXMLElement/initFromXMLFilePath: + + RXMLElement.h + + - (id)initFromXMLFilePath:(NSString *)fullPath + + + //api/name/initFromXMLFilePath: + + + + + //apple_ref/occ/instm/RXMLElement/initFromURL: + + RXMLElement.h + + - (id)initFromURL:(NSURL *)url + + + //api/name/initFromURL: + + + + + //apple_ref/occ/instm/RXMLElement/initFromXMLData: + + RXMLElement.h + + - (id)initFromXMLData:(NSData *)data + + + //api/name/initFromXMLData: + + + + + //apple_ref/occ/instm/RXMLElement/initFromXMLDoc:node: + + RXMLElement.h + + - (id)initFromXMLDoc:(RXMLDocHolder *)doc node:(xmlNodePtr)node + + + //api/name/initFromXMLDoc:node: + + + + + //apple_ref/occ/instm/RXMLElement/initFromHTMLString:encoding: + + RXMLElement.h + + - (id)initFromHTMLString:(NSString *)xmlString encoding:(NSStringEncoding)encoding + + + //api/name/initFromHTMLString:encoding: + + + + + //apple_ref/occ/instm/RXMLElement/initFromHTMLFile: + + RXMLElement.h + + - (id)initFromHTMLFile:(NSString *)filename + + + //api/name/initFromHTMLFile: + + + + + //apple_ref/occ/instm/RXMLElement/initFromHTMLFile:fileExtension: + + RXMLElement.h + + - (id)initFromHTMLFile:(NSString *)filename fileExtension:(NSString *)extension + + + //api/name/initFromHTMLFile:fileExtension: + + + + + //apple_ref/occ/instm/RXMLElement/initFromHTMLFilePath: + + RXMLElement.h + + - (id)initFromHTMLFilePath:(NSString *)fullPath + + + //api/name/initFromHTMLFilePath: + + + + + //apple_ref/occ/instm/RXMLElement/initFromHTMLData: + + RXMLElement.h + + - (id)initFromHTMLData:(NSData *)data + + + //api/name/initFromHTMLData: + + + + + //apple_ref/occ/clm/RXMLElement/elementFromXMLString:encoding: + + RXMLElement.h + + + (id)elementFromXMLString:(NSString *)xmlString encoding:(NSStringEncoding)encoding + + + //api/name/elementFromXMLString:encoding: + + + + + //apple_ref/occ/clm/RXMLElement/elementFromXMLFile: + + RXMLElement.h + + + (id)elementFromXMLFile:(NSString *)filename + + + //api/name/elementFromXMLFile: + + + + + //apple_ref/occ/clm/RXMLElement/elementFromXMLFilename:fileExtension: + + RXMLElement.h + + + (id)elementFromXMLFilename:(NSString *)filename fileExtension:(NSString *)extension + + + //api/name/elementFromXMLFilename:fileExtension: + + + + + //apple_ref/occ/clm/RXMLElement/elementFromXMLFilePath: + + RXMLElement.h + + + (id)elementFromXMLFilePath:(NSString *)fullPath + + + //api/name/elementFromXMLFilePath: + + + + + //apple_ref/occ/clm/RXMLElement/elementFromURL: + + RXMLElement.h + + + (id)elementFromURL:(NSURL *)url + + + //api/name/elementFromURL: + + + + + //apple_ref/occ/clm/RXMLElement/elementFromXMLData: + + RXMLElement.h + + + (id)elementFromXMLData:(NSData *)data + + + //api/name/elementFromXMLData: + + + + + //apple_ref/occ/clm/RXMLElement/elementFromXMLDoc:node: + + RXMLElement.h + + + (id)elementFromXMLDoc:(RXMLDocHolder *)doc node:(xmlNodePtr)node + + + //api/name/elementFromXMLDoc:node: + + + + + //apple_ref/occ/clm/RXMLElement/elementFromHTMLString:encoding: + + RXMLElement.h + + + (id)elementFromHTMLString:(NSString *)xmlString encoding:(NSStringEncoding)encoding + + + //api/name/elementFromHTMLString:encoding: + + + + + //apple_ref/occ/clm/RXMLElement/elementFromHTMLFile: + + RXMLElement.h + + + (id)elementFromHTMLFile:(NSString *)filename + + + //api/name/elementFromHTMLFile: + + + + + //apple_ref/occ/clm/RXMLElement/elementFromHTMLFile:fileExtension: + + RXMLElement.h + + + (id)elementFromHTMLFile:(NSString *)filename fileExtension:(NSString *)extension + + + //api/name/elementFromHTMLFile:fileExtension: + + + + + //apple_ref/occ/clm/RXMLElement/elementFromHTMLFilePath: + + RXMLElement.h + + + (id)elementFromHTMLFilePath:(NSString *)fullPath + + + //api/name/elementFromHTMLFilePath: + + + + + //apple_ref/occ/clm/RXMLElement/elementFromHTMLData: + + RXMLElement.h + + + (id)elementFromHTMLData:(NSData *)data + + + //api/name/elementFromHTMLData: + + + + + //apple_ref/occ/instm/RXMLElement/attribute: + + RXMLElement.h + + - (NSString *)attribute:(NSString *)attributeName + + + //api/name/attribute: + + + + + //apple_ref/occ/instm/RXMLElement/attribute:inNamespace: + + RXMLElement.h + + - (NSString *)attribute:(NSString *)attributeName inNamespace:(NSString *)ns + + + //api/name/attribute:inNamespace: + + + + + //apple_ref/occ/instm/RXMLElement/attributeNames + + RXMLElement.h + + - (NSArray *)attributeNames + + + //api/name/attributeNames + + + + + //apple_ref/occ/instm/RXMLElement/attributeAsInt: + + RXMLElement.h + + - (NSInteger)attributeAsInt:(NSString *)attributeName + + + //api/name/attributeAsInt: + + + + + //apple_ref/occ/instm/RXMLElement/attributeAsInt:inNamespace: + + RXMLElement.h + + - (NSInteger)attributeAsInt:(NSString *)attributeName inNamespace:(NSString *)ns + + + //api/name/attributeAsInt:inNamespace: + + + + + //apple_ref/occ/instm/RXMLElement/attributeAsDouble: + + RXMLElement.h + + - (double)attributeAsDouble:(NSString *)attributeName + + + //api/name/attributeAsDouble: + + + + + //apple_ref/occ/instm/RXMLElement/attributeAsDouble:inNamespace: + + RXMLElement.h + + - (double)attributeAsDouble:(NSString *)attributeName inNamespace:(NSString *)ns + + + //api/name/attributeAsDouble:inNamespace: + + + + + //apple_ref/occ/instm/RXMLElement/child: + + RXMLElement.h + + - (RXMLElement *)child:(NSString *)tag + + + //api/name/child: + + + + + //apple_ref/occ/instm/RXMLElement/child:inNamespace: + + RXMLElement.h + + - (RXMLElement *)child:(NSString *)tag inNamespace:(NSString *)ns + + + //api/name/child:inNamespace: + + + + + //apple_ref/occ/instm/RXMLElement/children: + + RXMLElement.h + + - (NSArray *)children:(NSString *)tag + + + //api/name/children: + + + + + //apple_ref/occ/instm/RXMLElement/children:inNamespace: + + RXMLElement.h + + - (NSArray *)children:(NSString *)tag inNamespace:(NSString *)ns + + + //api/name/children:inNamespace: + + + + + //apple_ref/occ/instm/RXMLElement/childrenWithRootXPath: + + RXMLElement.h + + - (NSArray *)childrenWithRootXPath:(NSString *)xpath + + + //api/name/childrenWithRootXPath: + + + + + //apple_ref/occ/instm/RXMLElement/iterate:usingBlock: + + RXMLElement.h + + - (void)iterate:(NSString *)query usingBlock:(void ( ^ ) ( RXMLElement *))blk + + + //api/name/iterate:usingBlock: + + + + + //apple_ref/occ/instm/RXMLElement/iterateWithRootXPath:usingBlock: + + RXMLElement.h + + - (void)iterateWithRootXPath:(NSString *)xpath usingBlock:(void ( ^ ) ( RXMLElement *))blk + + + //api/name/iterateWithRootXPath:usingBlock: + + + + + //apple_ref/occ/instm/RXMLElement/iterateElements:usingBlock: + + RXMLElement.h + + - (void)iterateElements:(NSArray *)elements usingBlock:(void ( ^ ) ( RXMLElement *))blk + + + //api/name/iterateElements:usingBlock: + + + + + //apple_ref/occ/instm/RXMLElement/setXmlDoc: + + RXMLElement.h + + @property (nonatomic, strong) RXMLDocHolder *xmlDoc + + + //api/name/xmlDoc + + + + + //apple_ref/occ/instm/RXMLElement/xmlDoc + + RXMLElement.h + + @property (nonatomic, strong) RXMLDocHolder *xmlDoc + + + //api/name/xmlDoc + + + + + //apple_ref/occ/instp/RXMLElement/xmlDoc + + RXMLElement.h + + @property (nonatomic, strong) RXMLDocHolder *xmlDoc + + + //api/name/xmlDoc + + + + + //apple_ref/occ/instm/RXMLElement/setTag: + + RXMLElement.h + + @property (nonatomic, readonly) NSString *tag + + + //api/name/tag + + + + + //apple_ref/occ/instm/RXMLElement/tag + + RXMLElement.h + + @property (nonatomic, readonly) NSString *tag + + + //api/name/tag + + + + + //apple_ref/occ/instp/RXMLElement/tag + + RXMLElement.h + + @property (nonatomic, readonly) NSString *tag + + + //api/name/tag + + + + + //apple_ref/occ/instm/RXMLElement/setText: + + RXMLElement.h + + @property (nonatomic, readonly) NSString *text + + + //api/name/text + + + + + //apple_ref/occ/instm/RXMLElement/text + + RXMLElement.h + + @property (nonatomic, readonly) NSString *text + + + //api/name/text + + + + + //apple_ref/occ/instp/RXMLElement/text + + RXMLElement.h + + @property (nonatomic, readonly) NSString *text + + + //api/name/text + + + + + //apple_ref/occ/instm/RXMLElement/setXml: + + RXMLElement.h + + @property (nonatomic, readonly) NSString *xml + + + //api/name/xml + + + + + //apple_ref/occ/instm/RXMLElement/xml + + RXMLElement.h + + @property (nonatomic, readonly) NSString *xml + + + //api/name/xml + + + + + //apple_ref/occ/instp/RXMLElement/xml + + RXMLElement.h + + @property (nonatomic, readonly) NSString *xml + + + //api/name/xml + + + + + //apple_ref/occ/instm/RXMLElement/setInnerXml: + + RXMLElement.h + + @property (nonatomic, readonly) NSString *innerXml + + + //api/name/innerXml + + + + + //apple_ref/occ/instm/RXMLElement/innerXml + + RXMLElement.h + + @property (nonatomic, readonly) NSString *innerXml + + + //api/name/innerXml + + + + + //apple_ref/occ/instp/RXMLElement/innerXml + + RXMLElement.h + + @property (nonatomic, readonly) NSString *innerXml + + + //api/name/innerXml + + + + + //apple_ref/occ/instm/RXMLElement/setTextAsInt: + + RXMLElement.h + + @property (nonatomic, readonly) NSInteger textAsInt + + + //api/name/textAsInt + + + + + //apple_ref/occ/instm/RXMLElement/textAsInt + + RXMLElement.h + + @property (nonatomic, readonly) NSInteger textAsInt + + + //api/name/textAsInt + + + + + //apple_ref/occ/instp/RXMLElement/textAsInt + + RXMLElement.h + + @property (nonatomic, readonly) NSInteger textAsInt + + + //api/name/textAsInt + + + + + //apple_ref/occ/instm/RXMLElement/setTextAsDouble: + + RXMLElement.h + + @property (nonatomic, readonly) double textAsDouble + + + //api/name/textAsDouble + + + + + //apple_ref/occ/instm/RXMLElement/textAsDouble + + RXMLElement.h + + @property (nonatomic, readonly) double textAsDouble + + + //api/name/textAsDouble + + + + + //apple_ref/occ/instp/RXMLElement/textAsDouble + + RXMLElement.h + + @property (nonatomic, readonly) double textAsDouble + + + //api/name/textAsDouble + + + + + //apple_ref/occ/instm/RXMLElement/setIsValid: + + RXMLElement.h + + @property (nonatomic, readonly) BOOL isValid + + + //api/name/isValid + + + + + //apple_ref/occ/instm/RXMLElement/isValid + + RXMLElement.h + + @property (nonatomic, readonly) BOOL isValid + + + //api/name/isValid + + + + + //apple_ref/occ/instp/RXMLElement/isValid + + RXMLElement.h + + @property (nonatomic, readonly) BOOL isValid + + + //api/name/isValid + + + + + + + \ No newline at end of file diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Tokens3.xml b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Tokens3.xml new file mode 100644 index 0000000..3fc40be --- /dev/null +++ b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/Tokens3.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.dsidx b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.dsidx new file mode 100644 index 0000000000000000000000000000000000000000..e905197b3810353028e4935e89bb1a2758d78388 GIT binary patch literal 253952 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 z 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 literal 0 HcmV?d00001 diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.dsidx-shm b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.dsidx-shm new file mode 100644 index 0000000000000000000000000000000000000000..d71a4fcdcd8c0163de855de8581a2e1048a22328 GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.mom b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.mom new file mode 100644 index 0000000000000000000000000000000000000000..35b91bd9bdcda18f3545662fcaac057d3380c959 GIT binary patch literal 11683 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 X{nMlK9M&N$|^5X(1 literal 0 HcmV?d00001 diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.toc b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.toc new file mode 100644 index 0000000000000000000000000000000000000000..84fed6c2c4976c4bdfd85916ad49012392dddbc5 GIT binary patch literal 820 zcmYk4&rcIk5XWa;e{6qHT0vVYAS#NAparCYh*+rFYPA%pRD{IRK4HUlx7l3^9!xk9 zZ^nZcV~AVzVw6OWdee9_9z8D!+>9Rd?WSvXlD98A-|uH;XR@D%*osr`MLuWP|PR`}_X824wqXul6r|~a~ z6##Dn0age*y2V!?Fa?+950I3N33hfIHA6$=cGJLV{*==qe|9*7TxjR6-I+oFwXkV( zJZ@@kF<<_-wVN4tg0qxw*|S#*r2_#M%eeu-sx`Om*Fq@|Q>@wcgNMvgsQE3Z^{bmY zjxbc8#fo+vJ!Yad1NGLrTG8&FUeiR_zu%_3Pngh#BgjQh4_CvUL>)8w*pP-f92*(cqScT;uCIFi?78!a>7=S?-f?0-Nw1w%`~1Mh@#SgkkK&UhKmW zOyW3B;2es$gtu@N@8UgtfDci_XZRdn;TwF5@9`sk#c#NYKkz4R;U7YXmxM?w=^*_i YMv^2=vg8I^Bn!g+W+SfD?%GAfe{omcyZ`_I literal 0 HcmV?d00001 diff --git a/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.tokencache b/Documentation/API/docsets/com.raptureinvenice.documentation.RaptureXML.docset/docset/Contents/Resources/docSet.tokencache new file mode 100644 index 0000000000000000000000000000000000000000..c7c2c8e88a9bee3ae8d94e6bd33303bf5b797430 GIT binary patch literal 10732 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 + + + + + RaptureXML Hierarchy + + + + + + +
+
+ +

+ RaptureXML +

+ +

+ Rapture In Venice +

+ +
+
+ + + +
+
+
+
+

RaptureXML Hierarchy

+ + +
+

Class Hierarchy

+ + + +
+ + + +
+ + + +
+ + +
+ +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/API/img/button_bar_background.png b/Documentation/API/img/button_bar_background.png new file mode 100644 index 0000000000000000000000000000000000000000..71d1019bc0c5c571dea84ff9775aa243444d2d4a GIT binary patch literal 2825 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 b18@fb!nF!3r##!100000NkvXXu0mjf;Lkd# literal 0 HcmV?d00001 diff --git a/Documentation/API/img/disclosure.png b/Documentation/API/img/disclosure.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5cbf445602efefe8ee0475703d36ba4132ff21 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRM!2%>3kI32qDJxGG#}JO_`KyqCDY z*KXE?%k|6ufBPK!<6_I4f7W}-SGbGsdN0tg!V=WD=wjWz$u?adUkEVRH#$H4{$dk9 P&=dwwS3j3^P63kI32qDKAeK#}JO|$v@6N$mnnQFZs`y zVdCMs<^KgT?B%tdsPGFGRJ=dLFZ%0zg1x*>$p86_dQT3$|8Vc2oeOUWM@HOU=Rfsq fB8n*;t{e<2Cp(|jRn^)AG?l^A)z4*}Q$iB}AA>A0 literal 0 HcmV?d00001 diff --git a/Documentation/API/img/library_background.png b/Documentation/API/img/library_background.png new file mode 100644 index 0000000000000000000000000000000000000000..3006248afe8822e2c9761d9e76a900b2e9781366 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!3HEfN&F!HD`A7 zGAIf#2eRk&s%13)vlW+lq|A78-&7mDt%)5zO3YC!PX6C6d@N^ihs=xXE6;3R6D_$Y ZpF#6xy3}8Re4y=ES4z)+>iz|hdl!0_`wkbcR)P-?)y@G60U!DwdS5Kjv*DdV!92v z7!-Jp7=8I~ult4BS5`!1y1 + + + + + RaptureXML Reference + + + + + + +
+
+ +

+ RaptureXML +

+ +

+ Rapture In Venice +

+ +
+
+ + + +
+
+
+
+

RaptureXML Reference

+ + +
+ + +

RaptureXML is a simple, block-based XML library for the iOS platform that provides an expressive API that makes XML processing freakin' fun for once in my life.

+ +

Why do we need another XML library?

+ +

You tell me. Processing XML in Objective-C is an awful, frustrating experience and the resulting code is never readable. I’m tired of it! RaptureXML solves this by providing a powerful new interface on top of libxml2. Imagine for a minute the code you’d write to process the XML for a list of baseball team members, retrieving their numbers, names, and positions using your favorite XML processing library. Now, take a look at how you do it with RaptureXML:

+ +
RXMLElement *rootXML = [RXMLElement elementFromXMLFile:@"players.xml"];
+
+[rootXML iterate:@"players.player" usingBlock: ^(RXMLElement *e) {
+    NSLog(@"Player #%@: %@", [e attribute:@"number"], [e child:@"name"].text);
+}];    
+
+ +

RaptureXML changes the game when it comes to XML processing in Objective-C. As you can see from the code, it takes only seconds to understand what this code does. There are no wasted arrays and verbose looping you have to do. The code is a breeze to read and maintain.

+ +

I don’t think any more needs to be said.

+ +

Adding RaptureXML to Your Project

+ +

The recommended way to add RaptureXML to your project is through CocoaPods. Simply add ‘RaptureXML’ into your Podfile.

+ +

To install manually, there’s just a few simple steps:

+ +
    +
  • Copy the RaptureXML/RaptureXML folder into your own project and import “RXMLElement.h” somewhere (e.g., your PCH file).
  • +
  • Link in libz.dylib to your target.
  • +
  • Link in libxml2.dylib to your target.
  • +
  • In your build settings, for the key “Header Search Paths”, add “$(SDK_DIR)”/usr/include/libxml2
  • +
+ + +

RaptureXML supports ARC. You are free to use any version of LLVM or gcc as well! (Though you should be using LLVM by now.)

+ +

ARC isn’t just supported, it’s required!

+ +

RaptureXML supports ARC. In fact, it only supports ARC. If you’re still running a project that doesn’t use ARC, RaptureXML won’t be your cup of tea.

+ +

Getting Started

+ +

RaptureXML processes XML in two steps: load and path. This means that you first load the XML from any source you want such as file, data, or string. Then, you simply use its query language to find what you need.

+ +

You can load the XML with any of the following constructors:

+ +
RXMLElement *rootXML = [RXMLElement elementFromXMLString:@"...my xml..." encoding:NSUTF8StringEncoding];
+RXMLElement *rootXML = [RXMLElement elementFromXMLFile:@"myfile.xml"];
+RXMLElement *rootXML = [RXMLElement elementFromXMLFilename:@"myfile" elementFromXMLFilename:@"xml"];
+RXMLElement *rootXML = [RXMLElement elementFromXMLData:myData];
+
+ +

These constructors return an RXMLElement object that represents the top-level tags. Now, you can query the data in any number of ways.

+ +

Let’s pretend your XML looks like this:

+ +
<team year="2011" name="New York Mets">
+    <players>
+        <coach>
+            <name>Terry Collins</name>
+            <year>1</year>
+        </coach>
+
+        <player number="7">
+            <name>Jose Reyes</name>
+            <position>SS</position>
+        </player>
+
+        <player number="16">
+            <name>Angel Pagan</name>
+            <position>CF</position>
+        </player>
+
+        <player number="5">
+            <name>David Wright</name>
+            <position>3B</position>
+        </player>
+
+        ...
+
+    </players>
+</team>
+
+ +

First, we’d load the XML:

+ +
RXMLElement *rootXML = [RXMLElement elementFromXMLFile:@"players.xml"];
+
+ +

We can immediately query the top-level tag name:

+ +
rootXML.tag --> @"team"
+
+ +

We can read attributes with:

+ +
[rootXML attribute:@"year"] --> @"2011"
+[rootXML attribute:@"name"] --> @"New York Mets"
+
+ +

We can get the players tag with:

+ +
RXMLElement *rxmlPlayers = [rootXML child:@"players"];
+
+ +

If we like, we can get all the individual player tags with:

+ +
NSArray *rxmlIndividualPlayers = [rxmlPlayers children:@"player"];
+
+ +

From there, we can process the individual players and be happy. Now, this is already much better than any other XML library we’ve seen, but RaptureXML can use query paths to make this ridiculously easy. Let’s use query paths to improve the conciseness our code:

+ +
[rootXML iterate:@"players.player" usingBlock: ^(RXMLElement *player) {
+    NSLog(@"Player: %@ (#%@)", [player child:@"name"].text, [player attribute:@"number"]);
+}];    
+
+ +

Your block is passed an RXMLElement representing each player in just one line! Alternatively, you could have shortened it with:

+ +
[rootXML iterate:@"players.player" usingBlock: ^(RXMLElement *player) {
+    NSLog(@"Player: %@ (#%@)", [player child:@"name"], [player attribute:@"number"]);
+}];    
+
+ +

This also works because RXMLElement#description returns the text of the tag. Query paths are even more powerful with wildcards. Let’s say we wanted the name of every person on the team, player or coach. We use the wildcard to get it:

+ +
[rootXML iterate:@"players.*.name" usingBlock: ^(RXMLElement *name) {
+    NSLog(@"Name: %@", name.text);
+}];
+
+ +

The wildcard processes every tag rather than the one you would’ve named. You can also use the wildcard to iterate all the children of an element:

+ +
[rootXML iterate:@"players.coach.*" usingBlock: ^(RXMLElement *e) {
+    NSLog(@"Tag: %@, Text: %@", e.tag, e.text);
+}];
+
+ +

This gives us all the tags for the coach. Easy enough?

+ +

XPath

+ +

If you don’t want to use the custom RaptureXML iteration query syntax, you can use the standard XPath query language as well. Here’s how you query all players with XPath:

+ +
[rootXML iterateWithRootXPath:@"//player" usingBlock: ^(RXMLElement *player) {
+    NSLog(@"Player: %@ (#%@)", [player child:@"name"], [player attribute:@"number"]);
+}];    
+
+ +

And remember, you can also test attributes using XPath as well. Here’s how you can find the player with #5:

+ +
[rootXML iterateWithRootXPath:@"//player[@number='5']" usingBlock: ^(RXMLElement *player) {
+    NSLog(@"Player #5: %@", [player child:@"name"]);
+}];    
+
+ +

Note that you can only use XPath from the document root and it won’t matter what RXMLElement you have. If you have a derived RXMLElement, you can still build from the document root. If you’re not familiar with XPath, you can use this handy guide.

+ +

Namespaces

+ +

Namespaces are supported for most methods, however not for iterations. If you want to use namespaces for that kind of thing, use the -children method manually. When specifying namespaces, be sure to specify the namespace URI and not the prefix. For example, if your XML looked like:

+ +
<team xmlns:sport="*" sport:year="2011" sport:name="New York Mets">
+    ...
+</team>
+
+ +

You would access the attributes with:

+ +
NSLog(@"Team Name: %@", [e attribute:@"name" inNamespace:@"*"]);
+
+ +

RubyMotion Support

+ +

RaptureXML is easily integrated into RubyMotion! Here’s how.

+ +

Unit Tests as Documentation

+ +

You can see the full usage of RaptureXML by reading the unit tests in the project. Not only does it show you all the code, but you’ll know it works! (You can run the unit tests by pressing Command-U in Xcode)

+ +

Who Created RaptureXML?

+ +

RaptureXML was created by John Blanco john.blanco@raptureinvenice.com of Rapture In Venice because he got sick of using all of the bizarre XML solutions for iPhone development. If you like this code and/or need an iOS consultant, get in touch with me via my website, Rapture In Venice.

+ + +
+ + +
+ + + +
+

Class References

+ +
+ + + +
+ + + + + +
+ +
+ +
+ +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/Documentation/API/js/script.js b/Documentation/API/js/script.js new file mode 100644 index 0000000..4074361 --- /dev/null +++ b/Documentation/API/js/script.js @@ -0,0 +1,59 @@ +function $() { + return document.querySelector.apply(document, arguments); +} + +if (navigator.userAgent.indexOf("Xcode") != -1) { + document.documentElement.classList.add("xcode"); +} + +var jumpTo = $("#jump-to"); + +if (jumpTo) { + jumpTo.addEventListener("change", function(e) { + location.hash = this.options[this.selectedIndex].value; + }); +} + +function hashChanged() { + if (/^#\/\/api\//.test(location.hash)) { + var element = document.querySelector("a[name='" + location.hash.substring(1) + "']"); + + if (!element) { + return; + } + + element = element.parentNode; + + element.classList.remove("hide"); + fixScrollPosition(element); + } +} + +function fixScrollPosition(element) { + var scrollTop = element.offsetTop - 150; + document.documentElement.scrollTop = scrollTop; + document.body.scrollTop = scrollTop; +} + +[].forEach.call(document.querySelectorAll(".section-method"), function(element) { + element.classList.add("hide"); + + element.querySelector(".method-title a").addEventListener("click", function(e) { + var info = element.querySelector(".method-info"), + infoContainer = element.querySelector(".method-info-container"); + + element.classList.add("animating"); + info.style.height = (infoContainer.clientHeight + 40) + "px"; + fixScrollPosition(element); + element.classList.toggle("hide"); + if (element.classList.contains("hide")) { + e.preventDefault(); + } + setTimeout(function() { + element.classList.remove("animating"); + }, 300); + }); +}); + +window.addEventListener("hashchange", hashChanged); +hashChanged(); From eb6aba2cff361dcd529b499a8695c07d137b10a1 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Wed, 5 Apr 2017 22:23:33 -0400 Subject: [PATCH 29/39] Release 3.0.0 (build 1) --- BuildControl/Info-Framework.plist | 2 +- RaptureXML.xcodeproj/project.pbxproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BuildControl/Info-Framework.plist b/BuildControl/Info-Framework.plist index dbc92da..d818f5a 100644 --- a/BuildControl/Info-Framework.plist +++ b/BuildControl/Info-Framework.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.0.0 + 3.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index 21f67bf..7b3b299 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -353,7 +353,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -404,7 +404,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; From 5bdbcda80fc795f4cf8db4f99db411f303904505 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Thu, 6 Apr 2017 10:59:18 -0400 Subject: [PATCH 30/39] fix build configuration for Release --- RaptureXML.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index 7b3b299..5f745b1 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -440,7 +440,7 @@ }; 3B9059191DAECB5200B4EEC0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B9059261DAECB9E00B4EEC0 /* Framework.xcconfig */; + baseConfigurationReference = 3B9059281DAECB9E00B4EEC0 /* Release.xcconfig */; buildSettings = { DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; From 1999e2259b4724d5bf62a381f160c5ec70b2f0d7 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Thu, 6 Apr 2017 10:59:58 -0400 Subject: [PATCH 31/39] Release 3.0.1 (build 2) --- BuildControl/Info-Framework.plist | 2 +- RaptureXML.xcodeproj/project.pbxproj | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/BuildControl/Info-Framework.plist b/BuildControl/Info-Framework.plist index d818f5a..721a9cf 100644 --- a/BuildControl/Info-Framework.plist +++ b/BuildControl/Info-Framework.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.0 + 3.0.1 CFBundleSignature ???? CFBundleVersion diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index 5f745b1..7ac0e41 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -353,7 +353,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -404,7 +404,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -430,7 +430,7 @@ buildSettings = { DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; + DYLIB_CURRENT_VERSION = 2; DYLIB_INSTALL_NAME_BASE = "@rpath"; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -444,7 +444,7 @@ buildSettings = { DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; + DYLIB_CURRENT_VERSION = 2; DYLIB_INSTALL_NAME_BASE = "@rpath"; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; From 31cc4aa69e7bb1aa9127916e69c4783a6c5dc81a Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Thu, 6 Apr 2017 11:44:05 -0400 Subject: [PATCH 32/39] fix it again, this time differently --- RaptureXML.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index 7ac0e41..f0e9a14 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -382,7 +382,7 @@ }; 3B9059161DAECB5200B4EEC0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B9059281DAECB9E00B4EEC0 /* Release.xcconfig */; + baseConfigurationReference = 3B9059271DAECB9E00B4EEC0 /* Project.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; From 3147df047e96f34700c5ec84e74f8f28d899023f Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Thu, 6 Apr 2017 11:44:36 -0400 Subject: [PATCH 33/39] Release 3.0.2 (build 3) --- BuildControl/Info-Framework.plist | 2 +- RaptureXML.xcodeproj/project.pbxproj | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/BuildControl/Info-Framework.plist b/BuildControl/Info-Framework.plist index 721a9cf..d545725 100644 --- a/BuildControl/Info-Framework.plist +++ b/BuildControl/Info-Framework.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.1 + 3.0.2 CFBundleSignature ???? CFBundleVersion diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index f0e9a14..d9219a9 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -353,7 +353,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -404,7 +404,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -430,7 +430,7 @@ buildSettings = { DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 2; + DYLIB_CURRENT_VERSION = 3; DYLIB_INSTALL_NAME_BASE = "@rpath"; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -444,7 +444,7 @@ buildSettings = { DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 2; + DYLIB_CURRENT_VERSION = 3; DYLIB_INSTALL_NAME_BASE = "@rpath"; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; From 6faf253741a8ba4e8e84fb9dfc7b0c19217a99bc Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 12 Sep 2017 03:34:04 -0400 Subject: [PATCH 34/39] update settings for Xcode 9 --- RaptureXML.xcodeproj/project.pbxproj | 14 +++++++++++++- .../xcshareddata/xcschemes/RaptureXML.xcscheme | 4 +++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index d9219a9..f42cfe7 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -237,7 +237,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0800; - LastUpgradeCheck = 0830; + LastUpgradeCheck = 0900; ORGANIZATIONNAME = "Gilt Groupe"; TargetAttributes = { 3B9059021DAECB5200B4EEC0 = { @@ -339,7 +339,9 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; @@ -347,7 +349,11 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; CLANG_WARN_UNREACHABLE_CODE = YES; @@ -390,7 +396,9 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; @@ -398,7 +406,11 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; CLANG_WARN_UNREACHABLE_CODE = YES; diff --git a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML.xcscheme b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML.xcscheme index 432f80d..352603a 100644 --- a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML.xcscheme +++ b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML.xcscheme @@ -1,6 +1,6 @@ Date: Tue, 12 Sep 2017 03:39:23 -0400 Subject: [PATCH 35/39] update for Xcode 9 --- .gitignore | 7 +- .travis.yml | 42 ++ ...Info-Framework.plist => Info-Target.plist} | 0 BuildControl/RaptureXML.xml | 20 + BuildControl/bin/buildCheck.sh | 146 +++++ BuildControl/bin/carthageUpdate.sh | 1 + BuildControl/bin/include-common.sh | 114 ++++ BuildControl/bin/processBoilerplate.sh | 41 ++ BuildControl/bin/releaseMe.sh | 553 +++++++++--------- BuildControl/bin/travisBuildHelper.sh | 22 +- BuildControl/bin/validatePullRequest.sh | 157 +++++ BuildControl/config/Debug.xcconfig | 2 +- BuildControl/config/Release.xcconfig | 2 +- .../{Framework.xcconfig => Target.xcconfig} | 2 +- BuildControl/repos.xml | 158 +++++ RaptureXML.xcodeproj/project.pbxproj | 8 +- 16 files changed, 971 insertions(+), 304 deletions(-) create mode 100644 .travis.yml rename BuildControl/{Info-Framework.plist => Info-Target.plist} (100%) create mode 100644 BuildControl/RaptureXML.xml create mode 100755 BuildControl/bin/buildCheck.sh create mode 100755 BuildControl/bin/carthageUpdate.sh create mode 100755 BuildControl/bin/include-common.sh create mode 100755 BuildControl/bin/processBoilerplate.sh create mode 100755 BuildControl/bin/validatePullRequest.sh rename BuildControl/config/{Framework.xcconfig => Target.xcconfig} (75%) create mode 100644 BuildControl/repos.xml diff --git a/.gitignore b/.gitignore index 49776c5..8c26242 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,9 @@ # .DS_Store -# Xcode +# Xcode / Swift # +.build/ build/ *.pbxuser !default.pbxuser @@ -22,6 +23,10 @@ DerivedData *.xcuserstate *.xcscmblueprint +# jazzy documentation generator +# +undocumented.json + # Carthage: we --use-submodules for our non-leaf dependencies # Carthage/* diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..cb7ab2e --- /dev/null +++ b/.travis.yml @@ -0,0 +1,42 @@ +language: objective-c +xcode_project: RaptureXML.xcodeproj +os: osx +osx_image: xcode9 + +branches: + only: + - master + +git: + depth: 1 + submodules: false + +before_install: + - sudo systemsetup -settimezone America/New_York # temporary hack: NYC timezone is required for some MBDataEnvironment date-related unit tests + - git submodule update --init + +install: + - gem install xcpretty --no-rdoc --no-ri --no-document --quiet + - rm -rf ~/Library/Developer/CoreSimulator # these two lines are a hack around a recurring Travis problem: multiple versions of the + - sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService # same simulator: https://github.com/travis-ci/travis-ci/issues/7580#issuecomment-292974395 + +script: + - ./BuildControl/bin/travisBuildHelper.sh build iOS + - ./BuildControl/bin/travisBuildHelper.sh test iOS + - ./BuildControl/bin/travisBuildHelper.sh build macOS + - ./BuildControl/bin/travisBuildHelper.sh test macOS + - ./BuildControl/bin/travisBuildHelper.sh build tvOS + - ./BuildControl/bin/travisBuildHelper.sh test tvOS + - ./BuildControl/bin/travisBuildHelper.sh build watchOS + +after_failure: + - test -f "RaptureXML-iOS-build.log" && tail -n 2500 "RaptureXML-iOS-build.log" + - test -f "RaptureXML-iOS-test.log" && tail -n 2500 "RaptureXML-iOS-test.log" + - test -f "RaptureXML-iOS-test.log" && LINE_BEFORE=`cat "RaptureXML-iOS-test.log" | grep -n "IDETestOperationsObserverDebug. Writing diagnostic log for test session to." | awk -F':' '{print $1}'` && LINE=`expr $LINE_BEFORE + 1` && LOG_FILE=`head -n $LINE "RaptureXML-iOS-test.log" | tail -n 1` && cat "$LOG_FILE" + - test -f "RaptureXML-macOS-build.log" && tail -n 2500 "RaptureXML-macOS-build.log" + - test -f "RaptureXML-macOS-test.log" && tail -n 2500 "RaptureXML-macOS-test.log" + - test -f "RaptureXML-macOS-test.log" && LINE_BEFORE=`cat "RaptureXML-macOS-test.log" | grep -n "IDETestOperationsObserverDebug. Writing diagnostic log for test session to." | awk -F':' '{print $1}'` && LINE=`expr $LINE_BEFORE + 1` && LOG_FILE=`head -n $LINE "RaptureXML-macOS-test.log" | tail -n 1` && cat "$LOG_FILE" + - test -f "RaptureXML-tvOS-build.log" && tail -n 2500 "RaptureXML-tvOS-build.log" + - test -f "RaptureXML-tvOS-test.log" && tail -n 2500 "RaptureXML-tvOS-test.log" + - test -f "RaptureXML-tvOS-test.log" && LINE_BEFORE=`cat "RaptureXML-tvOS-test.log" | grep -n "IDETestOperationsObserverDebug. Writing diagnostic log for test session to." | awk -F':' '{print $1}'` && LINE=`expr $LINE_BEFORE + 1` && LOG_FILE=`head -n $LINE "RaptureXML-tvOS-test.log" | tail -n 1` && cat "$LOG_FILE" + - test -f "RaptureXML-watchOS-build.log" && tail -n 2500 "RaptureXML-watchOS-build.log" diff --git a/BuildControl/Info-Framework.plist b/BuildControl/Info-Target.plist similarity index 100% rename from BuildControl/Info-Framework.plist rename to BuildControl/Info-Target.plist diff --git a/BuildControl/RaptureXML.xml b/BuildControl/RaptureXML.xml new file mode 100644 index 0000000..4c0c923 --- /dev/null +++ b/BuildControl/RaptureXML.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + A simple, sensible, block-based XML API for Apple Platforms development. + + + + + + + + diff --git a/BuildControl/bin/buildCheck.sh b/BuildControl/bin/buildCheck.sh new file mode 100755 index 0000000..7bc6890 --- /dev/null +++ b/BuildControl/bin/buildCheck.sh @@ -0,0 +1,146 @@ +#!/bin/bash + +# +# checks that the project builds & passes all unit tests +# +# by emaloney, 11 September 2017 +# + +set -o pipefail # to ensure xcodebuild pipeline errors are propagated correctly + +SCRIPT_NAME=$(basename "$0") +SCRIPT_DIR=$(cd "$PWD" ; cd `dirname "$0"` ; echo "$PWD") + +source "${SCRIPT_DIR}/include-common.sh" + +showHelp() +{ + define HELP < /dev/null +if [[ $? != 0 ]]; then + exitWithErrorSuggestHelp "You must invoke this script from within a git repo" +fi + +# +# parse the command-line arguments +# +while [[ $1 ]]; do + case $1 in + --skip-tests) + SKIP_TESTS=1 + ;; + + --quiet|-q) + QUIET=1 + QUIET_ARG="-q" + ;; + + --help|-help|-h|-\?) + SHOW_HELP=1 + ;; + + -*) + exitWithErrorSuggestHelp "Unrecognized argument: $1" + ;; + + *) + if [[ -z $ARGS ]]; then + ARGS=$1 + else + ARGS="$ARGS $1" + fi + esac + shift +done + +if [[ $SHOW_HELP ]]; then + showHelp + exit 1 +fi + +for ARG in $ARGS; do + exitWithErrorSuggestHelp "Unrecognized argument: $ARG" +done + +# +# make sure it builds +# +PROJECT_NAME="RaptureXML" +XCODEBUILD=/usr/bin/xcodebuild +XCODEBUILD_CMD="$XCODEBUILD" +if [[ $SKIP_TESTS ]]; then + updateStatus "Verifying that $PROJECT_NAME builds" +else + updateStatus "Verifying that $PROJECT_NAME builds and passes unit tests" +fi +if [[ $QUIET ]]; then + XCODEBUILD_CMD="$XCODEBUILD -quiet" +fi +if [[ ! -x "$XCODEBUILD" ]]; then + exitWithErrorSuggestHelp "Expected to find xcodebuild at path $XCODEBUILD" +fi + +# +# use xcpretty if it is available +# +XCODEBUILD_PIPETO="" +XCPRETTY=`which xcpretty` +if [[ $? == 0 ]]; then + XCODEBUILD_PIPETO="| $XCPRETTY" +fi + +# +# determine build settings +# +PROJECT_SPECIFIER="-project RaptureXML.xcodeproj" +COMPILE_PLATFORMS="iOS macOS tvOS watchOS" + +# +# build for each platform +# +for PLATFORM in $COMPILE_PLATFORMS; do + updateStatus "Building: $PROJECT_NAME for $PLATFORM..." + if [[ $SKIP_TESTS ]]; then + BUILD_ACTION="clean build" + else + BUILD_ACTION="clean $(testActionForPlatform $PLATFORM)" + fi + RUN_DESTINATION="$(runDestinationForPlatform $PLATFORM)" + if [[ $QUIET ]]; then + executeCommand "$XCODEBUILD_CMD $PROJECT_SPECIFIER -scheme \"${PROJECT_NAME}\" -configuration Debug -destination \"$RUN_DESTINATION\" $BUILD_ACTION $XCODEBUILD_PIPETO" 2&> /dev/null + else + executeCommand "$XCODEBUILD_CMD $PROJECT_SPECIFIER -scheme \"${PROJECT_NAME}\" -configuration Debug -destination \"$RUN_DESTINATION\" $BUILD_ACTION $XCODEBUILD_PIPETO" + fi +done diff --git a/BuildControl/bin/carthageUpdate.sh b/BuildControl/bin/carthageUpdate.sh new file mode 100755 index 0000000..b0ebd20 --- /dev/null +++ b/BuildControl/bin/carthageUpdate.sh @@ -0,0 +1 @@ +carthage update $@ --use-submodules --no-build diff --git a/BuildControl/bin/include-common.sh b/BuildControl/bin/include-common.sh new file mode 100755 index 0000000..a3521ad --- /dev/null +++ b/BuildControl/bin/include-common.sh @@ -0,0 +1,114 @@ +#!/bin/bash + +define() +{ + IFS='\n' read -r -d '' ${1} || true +} + +printError() +{ + echo "error: $1" + echo + if [[ ! -z $2 ]]; then + printf " $2\n\n" + fi +} + +exitWithError() +{ + printError "$1" "$2" + exit 1 +} + +exitWithErrorSuggestHelp() +{ + printError "$1" "$2" + printf " To display help, run:\n\n\t$0 --help\n" + exit 1 +} + +updateStatus() +{ + if [[ ! $QUIET ]]; then + echo + echo "$1" + echo + fi +} + +summarize() +{ + if [[ $SUMMARIZE ]]; then + printf "\t...%s\n" "$1" + fi +} + +confirmationPrompt() +{ + if [[ ! $QUIET || ! $AUTOMATED_MODE ]]; then + echo + echo $1 + fi + if [[ -z $AUTOMATED_MODE ]]; then + echo + read -p "Are you sure you want to do this? " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit -1 + fi + fi +} + +executeCommand() +{ + unset _CMD + if [[ $QUIET ]]; then + _CMD="set -o pipefail && $1 > /dev/null" + else + _CMD="set -o pipefail && $1" + fi + eval $_CMD + if [[ $? != 0 ]]; then + exitWithError "Command failed: $_CMD" + fi +} + +# +# these functions compensate for the fact that macOS is still on bash 3.x +# and therefore a more sensible implementation using associative +# arrays is not currently possible +# +testActionForPlatform() +{ + case $1 in + iOS) echo "test";; + macOS) echo "test";; + tvOS) echo "test";; + watchOS) echo "build";; + esac +} + +runDestinationForPlatform() +{ + case $1 in + iOS) + SIMULATOR_ID=`xcrun simctl list | grep -v unavailable | grep "iPad Pro" | grep inch | tail -1 | sed "s/^.*inch) (//" | sed "s/).*$//"` + echo "id=$SIMULATOR_ID" + ;; + + macOS) + echo "platform=macOS" + ;; + + tvOS) + SIMULATOR_ID=`xcrun simctl list | grep -v unavailable | grep "Apple TV" | tail -1 | sed "s/) (.*)\$//" | sed "s/^.*(//"` + echo "id=$SIMULATOR_ID" + ;; + + watchOS) + SIMULATOR_ID=`xcrun simctl list | grep -v unavailable | grep -v "Watch:" | grep "Apple Watch Series" | tail -1 | sed "s/) (.*)\$//" | sed "s/^.*(//"` + echo "id=$SIMULATOR_ID" + ;; + + esac +} diff --git a/BuildControl/bin/processBoilerplate.sh b/BuildControl/bin/processBoilerplate.sh new file mode 100755 index 0000000..468709b --- /dev/null +++ b/BuildControl/bin/processBoilerplate.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +SCRIPT_NAME=$(basename "$0") +SCRIPT_DIR=$(cd "$PWD" ; cd `dirname "$0"` ; echo "$PWD") + +PLATE_EXECUTABLE=$( which plate ) +if [[ $? != 0 ]]; then + echo "error: Couldn't find 'plate' executable; available at https://github.com/emaloney/Boilerplate" + exit 1 +fi + +cd "${SCRIPT_DIR}/../../" + +PROJECT_XML=BuildControl/RaptureXML.xml +REPOS_XML=BuildControl/repos.xml +FILE_COUNT=0 + +echo "Searching for boilerplate files in $PWD" + +for f in `find . -name "*.boilerplate"` +do + BOILERPLATE_FILE="$f" + OUTPUT_FILE=$( echo $f | sed sq.boilerplate\$qq ) + + ECHO_OUTPUT_FILE=$( basename "$OUTPUT_FILE" ) + echo " $BOILERPLATE_FILE -> $ECHO_OUTPUT_FILE" + "$PLATE_EXECUTABLE" -t "$BOILERPLATE_FILE" -d "$PROJECT_XML" -m "$REPOS_XML" -o "$OUTPUT_FILE" + if [[ $? == 0 ]]; then + FILE_COUNT=$(( $FILE_COUNT + 1 )) + else + exit 2 + fi +done + +if [[ $FILE_COUNT == 0 ]]; then + echo "No boilerplate files found." +elif [[ $FILE_COUNT == 1 ]]; then + echo "Successfully processed $FILE_COUNT boilerplate file" +else + echo "Successfully processed $FILE_COUNT boilerplate files" +fi diff --git a/BuildControl/bin/releaseMe.sh b/BuildControl/bin/releaseMe.sh index 6f2fc3a..ace0406 100755 --- a/BuildControl/bin/releaseMe.sh +++ b/BuildControl/bin/releaseMe.sh @@ -11,232 +11,179 @@ set -o pipefail # to ensure xcodebuild pipeline errors are propagated correctly SCRIPT_NAME=$(basename "$0") SCRIPT_DIR=$(cd "$PWD" ; cd `dirname "$0"` ; echo "$PWD") +source "${SCRIPT_DIR}/include-common.sh" + showHelp() { - echo "$SCRIPT_NAME" - echo - printf "\tGenerates a new release of the project contained in this git\n" - printf "\trepository.\n" - echo - echo "Usage:" - echo - printf "\t$SCRIPT_NAME \n" - echo - echo "Where:" - echo - printf "\t is 'major', 'minor' or 'patch', depending on which\n" - printf "\t\tportion of the version number should be incremented for this\n" - printf "\t\trelease.\n" - echo - printf "\tThis script also accepts these optional command-line arguments:\n" - echo - printf "\t\t--set-version \n" - printf "\t\t\tMake the version number being released\n" - echo - printf "\t\t--auto\n" - printf "\t\t\tRun automatically without awaiting user confirmation\n" - echo - printf "\t\t--tag\n" - printf "\t\t\tTags the repo with the version number upon success\n" - echo - printf "\t\t--push\n" - printf "\t\t\tPush all changes upon success\n" - echo - printf "\t\t--no-commit\n" - printf "\t\t\tSkips committing any changes; implies --no-tag\n" - echo - printf "\t\t--no-tag\n" - printf "\t\t\tOverrides --tag if specified; --no-tag is the default\n" - echo - printf "\t\t--stash-dirty-files\n" - printf "\t\t\tStashes dirty files before attempting to release\n" - echo - printf "\t\t--commit-dirty-files\n" - printf "\t\t\tCommits dirty files before attempting to release\n" - echo - printf "\t\t--ignore-dirty-files\n" - printf "\t\t\tIgnores dirty files; implies --no-commit --no-tag\n" - echo - printf "\t\t--skip-docs\n" - printf "\t\t\tSkips generating the documentation\n" - echo - printf "\t\t--skip-tests\n" - printf "\t\t\tSkips running the unit tests :-(\n" - echo - printf "\t\t--dry-run\n" - printf "\t\t\tShow commands to be executed instead of executing them\n" - echo - printf "\tFurther detail about these options can be found below.\n" - echo - echo "How it works" - echo - printf "\tBy default, the script inspects the appropriate property list file(s)\n" - printf "\tto determine the current version of the project. The script then\n" - printf "\tincrements the version number according to the release type\n" - printf "\tspecified:\n" - echo - printf "\tmajor — When the major release type is specified, the major version\n" - printf "\t\tcomponent is incremented, and both the minor and patch\n" - printf "\t\tcomponents are reset to zero. 2.1.3 becomes 3.0.0.\n" - echo - printf "\tminor — When the minor release type is specified, the major version\n" - printf "\t\tcomponent is not changed, while the minor component is\n" - printf "\t\tincremented and patch component is reset to zero.\n" - printf "\t\t2.1.3 becomes 2.2.0.\n" - echo - printf "\tpatch — When the patch release type is specified, the major and minor\n" - printf "\t\tversion components remain unchanged, while the patch component\n" - printf "\t\tis incremented. 2.1.3 becomes 2.1.4.\n" - echo - printf "\tThe script then updates all necessary references to the version\n" - printf "\telsewhere in the project.\n" - echo - printf "\tThen, the API documentation is rebuilt, and the repository is tagged\n" - printf "\twith the appropriate version number for the release.\n" - echo - printf "\tFinally, if the --push argument was supplied, the entire release is\n" - printf "\tpushed to the repo's origin remote.\n" - echo - echo "Specifying the version explicitly" - echo - printf "\tThe --set-version argument can be supplied along with a version number\n" - printf "\tif you wish to specify the exact version number to use.\n" - echo - printf "\tThe version number is expected to contain exactly three integer\n" - printf "\tcomponents separated by periods; trailing zeros are used if\n" - printf "\tnecessary.\n" - echo - printf "\tIf you wanted to set a release version of 4.2.1, for example, you\n" - printf "\tcould call the script as follows:\n" - echo - printf "\t\t$SCRIPT_NAME --set-version 4.2.1\n" - echo - printf "\tNOTE: When the --set-version argument is supplied, the release-type\n" - printf "\t argument does not need to be specified (and it will be ignored\n" - printf "\t if it is).\n" - echo - echo "User Confirmation" - echo - printf "\tBy default, this script requires user confirmation before making\n" - printf "\tany changes.\n" - echo - printf "\tTo allow this script to be invoked by other scripts, an automated\n" - printf "\tmode is also supported.\n" - echo - printf "\tWhen this script is run in automated mode, the user will not be\n" - printf "\tasked to confirm any actions; all actions are performed immediately.\n" - echo - printf "\tTo enable automated mode, supply the --auto argument.\n" - echo - echo "Releasing with uncommitted changes" - echo - printf "\tNormally, this script will refuse to continue if the repository\n" - printf "\tis dirty; that is, if there are any modified files that haven't\n" - printf "\tyet been committed.\n" - echo - printf "\tHowever, you can force a release to be issued from a dirty repo\n" - printf "\tusing either the --stash-dirty-files or the --commit-dirty-files\n" - printf "\targument.\n" - echo - printf "\tThe --stash-dirty-files option causes a git stash operation to\n" - printf "\toccur at the start of the release process, and a stash pop at the\n" - printf "\tend. This safely moves the dirty files out of the way when the\n" - printf "\tscript it doing its thing, and restores them when it is done.\n" - echo - printf "\tThe --commit-dirty-files option causes the dirty files to be\n" - printf "\tcommitted along with the other changes that occur during the\n" - printf "\trelease process.\n" - echo - printf "\tIn addition, an --ignore-dirty-files option is available, which\n" - printf "\tlets you go through the entire release process, but stops short\n" - printf "\tof committing and tagging. This allows you to run through the\n" - printf "\tentire release process without committing you to committing.\n" - echo - printf "\tNote that these options are mutually exclusive and may not be\n" - printf "\tused with each other.\n" - echo - echo "Dry run mode" - echo - printf "\tUsing the --dry-run argument prevents the release from occurring\n" - printf "\tand instead shows what would occur if the release were to be\n" - printf "\texecuted using the supplied command-line arguments.\n" - echo - echo "Help" - echo - printf "\tThis documentation is displayed when supplying the --help (or\n" - printf "\t-h or -?) argument.\n" - echo - printf "\tNote that when this script displays help documentation, all other\n" - printf "\tcommand line arguments are ignored and no other actions are performed.\n" - echo -} + define HELP < [...] -validateVersion() -{ - if [[ ! ($1 =~ ^[0-9]+\.[0-9]+\.[0-9]+$) ]]; then - exitWithErrorSuggestHelp "Expected $2 to contain three period-separated numeric components (eg., 3.6.1, 4.0.0, etc.); got $1 instead" - fi -} +Where: -updateStatus() -{ - echo - echo "$1" - echo -} + is 'major', 'minor' or 'patch', depending on which portion + of the version number should be incremented for this release. -confirmationPrompt() -{ - echo - echo $1 - if [[ -z $AUTOMATED_MODE ]]; then - echo - read -p "Are you sure you want to do this? " -n 1 -r - echo - if [[ ! $REPLY =~ ^[Yy]$ ]]; then - exit -1 - fi - fi +Optional arguments: + + --set-version + Make the version number being released + + --auto + Run automatically without awaiting user confirmation + + --tag + Tags the repo with the version number upon success + + --push + Push all changes upon success + + --amend + Causes any commits to be amends to the previous commit + + --branch + Specifies be used as the git branch for operations + + --commit-message-file + Specifies the contents should be used as the commit message + + --no-commit + Skips committing any changes; implies --no-tag + + --no-tag + Overrides --tag if specified; --no-tag is the default + + --stash-dirty-files + Stashes dirty files before attempting to release + + --commit-dirty-files + Commits dirty files before attempting to release + + --ignore-dirty-files + Ignores dirty files; implies --no-commit --no-tag + + --skip-docs + Skips generating the documentation + + --skip-tests + Skips running the unit tests :-( + + --quiet + Silences output + + --summarize + Minimizes output (ideal for invoking from other scripts) + + Further detail can be found below. + +How it works + + By default, the script inspects the appropriate property list file(s) + to determine the current version of the project. The script then + increments the version number according to the release type + specified: + + major — When the major release type is specified, the major version + component is incremented, and both the minor and patch + components are reset to zero. 2.1.3 becomes 3.0.0. + + minor — When the minor release type is specified, the major version + component is not changed, while the minor component is + incremented and patch component is reset to zero. + 2.1.3 becomes 2.2.0. + + patch — When the patch release type is specified, the major and minor + version components remain unchanged, while the patch component + is incremented. 2.1.3 becomes 2.1.4. + + The script then updates all necessary references to the version + elsewhere in the project. + + Then, the API documentation is rebuilt, and the repository is tagged + with the appropriate version number for the release. + + Finally, if the --push argument was supplied, the entire release is + pushed to the repo's origin remote. + +Specifying the version explicitly + + The --set-version argument can be supplied along with a version number + if you wish to specify the exact version number to use. + + The version number is expected to contain exactly three integer + components separated by periods; trailing zeros are used if + necessary. + + If you wanted to set a release version of 4.2.1, for example, you + could call the script as follows: + + $SCRIPT_NAME --set-version 4.2.1 + + NOTE: When the --set-version argument is supplied, the release-type + argument does not need to be specified (and it will be ignored + if it is). + +User Confirmation + + By default, this script requires user confirmation before making + any changes. + + To allow this script to be invoked by other scripts, an automated + mode is also supported. + + When this script is run in automated mode, the user will not be + asked to confirm any actions; all actions are performed immediately. + + To enable automated mode, supply the --auto argument. + +Releasing with uncommitted changes + + Normally, this script will refuse to continue if the repository + is dirty; that is, if there are any modified files that haven't + yet been committed. + + However, you can force a release to be issued from a dirty repo + using either the --stash-dirty-files or the --commit-dirty-files + argument. + + The --stash-dirty-files option causes a git stash operation to + occur at the start of the release process, and a stash pop at the + end. This safely moves the dirty files out of the way when the + script it doing its thing, and restores them when it is done. + + The --commit-dirty-files option causes the dirty files to be + committed along with the other changes that occur during the + release process. + + In addition, an --ignore-dirty-files option is available, which + lets you go through the entire release process, but stops short + of committing and tagging. This allows you to run through the + entire release process without committing you to committing. + + Note that these options are mutually exclusive and may not be + used with each other. + +Help + + This documentation is displayed when supplying the --help (or -help, -h, + or -?) argument. + + Note that when this script displays help documentation, all other + command line arguments are ignored and no other actions are performed. + +HELP + printf "$HELP" | less } -executeCommand() +validateVersion() { - if [[ $DRY_RUN_MODE ]]; then - if [[ ! $DID_DRY_RUN_MSG ]]; then - printf "\t!!! DRY RUN MODE - Will only show commands, not execute them !!!\n" - echo - DID_DRY_RUN_MSG=1 - fi - echo "> executing: " - echo - echo " set -o pipefail && $1" - else - eval "set -o pipefail && $1" - if [[ $? != 0 ]]; then - exitWithError "Command failed" - fi + if [[ ! ($1 =~ ^[0-9]+\.[0-9]+\.[0-9]+$) ]]; then + exitWithErrorSuggestHelp "Expected $2 to contain three period-separated numeric components (eg., 3.6.1, 4.0.0, etc.); got $1 instead" fi } @@ -258,6 +205,8 @@ fi # # parse the command-line arguments # +AMEND_ARGS="" +BRANCH=master STASH_DIRTY_FILES=0 COMMIT_DIRTY_FILES=0 IGNORE_DIRTY_FILES=0 @@ -272,65 +221,94 @@ while [[ $1 ]]; do SET_VERSION=$1 fi ;; - + --auto|-a) AUTOMATED_MODE=1 ;; - + + --amend) + AMEND_ARGS="--amend --no-edit" + ;; + --stash-dirty-files) STASH_DIRTY_FILES=1 ;; - + --commit-dirty-files) COMMIT_DIRTY_FILES=1 ;; - + --ignore-dirty-files) IGNORE_DIRTY_FILES=1 NO_COMMIT=1 NO_TAG=1 ;; - + --no-commit) NO_COMMIT=1 NO_TAG=1 ;; - + --no-tag) NO_TAG=1 ;; - + --tag) TAG_WHEN_DONE=1 ;; - + --push) PUSH_WHEN_DONE=1 ;; - + + --branch|-b) + if [[ $2 ]]; then + BRANCH="$2" + shift + fi + ;; + + --commit-message-file|-m) + if [[ $2 ]]; then + COMMIT_MESSAGE=`cat "$2"` + shift + fi + ;; + --skip-docs) SKIP_DOCUMENTATION=1 ;; - + --skip-tests) SKIP_TESTS=1 ;; - - --dry-run) - DRY_RUN_MODE=1 + + --quiet|-q) + QUIET=1 + QUIET_ARG="-q" + ;; + + --summarize|-z) + SUMMARIZE=1 + QUIET=1 + QUIET_ARG="-q" ;; - - --help|-h|-\?) + + --rebase) + REBASE=1 + ;; + + --help|-help|-h|-\?) SHOW_HELP=1 ;; - + -*) exitWithErrorSuggestHelp "Unrecognized argument: $1" ;; - + *) if [[ -z $ARGS ]]; then - ARGS=$1 + ARGS=$1 else ARGS="$ARGS $1" fi @@ -346,7 +324,7 @@ fi for ARG in $ARGS; do if [[ -z $RELEASE_TYPE ]]; then RELEASE_TYPE="$ARG" - else + else exitWithErrorSuggestHelp "Unrecognized argument: $ARG" fi done @@ -372,12 +350,9 @@ fi # # figure out what the current version is # -PLIST_BUDDY=/usr/libexec/PlistBuddy -if [[ ! -x "$PLIST_BUDDY" ]]; then - exitWithErrorSuggestHelp "Expected to find PlistBuddy at path $PLIST_BUDDY" -fi -FRAMEWORK_PLIST_FILE="Info-Framework.plist" +FRAMEWORK_PLIST_FILE="Info-Target.plist" FRAMEWORK_PLIST_PATH="$SCRIPT_DIR/../$FRAMEWORK_PLIST_FILE" +PLIST_BUDDY=/usr/libexec/PlistBuddy CURRENT_VERSION=`$PLIST_BUDDY "$FRAMEWORK_PLIST_PATH" -c "Print :CFBundleShortVersionString"` validateVersion "$CURRENT_VERSION" "the CFBundleShortVersionString value in the $FRAMEWORK_PLIST_FILE file" @@ -397,17 +372,17 @@ elif [[ ! -z $RELEASE_TYPE ]]; then MINOR_VERSION=0 PATCH_VERSION=0 ;; - + minor) MINOR_VERSION=$(( $MINOR_VERSION + 1 )) PATCH_VERSION=0 ;; - + patch) PATCH_VERSION=$(( $PATCH_VERSION + 1 )) ;; esac - + VERSION="${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}" fi @@ -429,10 +404,27 @@ fi # # see if we've got uncommitted changes # -git diff-index --quiet HEAD -- ; REPO_IS_DIRTY=$? +git rev-parse --quiet --verify HEAD > /dev/null +if [[ $? == 0 ]]; then + git diff-index --quiet HEAD -- ; REPO_IS_DIRTY=$? +else + # if HEAD doesn't exist (which is how we get here), then treat the + # repo as if it were dirty + REPO_IS_DIRTY=1 +fi if [[ $REPO_IS_DIRTY != 0 && $(( $STASH_DIRTY_FILES + $COMMIT_DIRTY_FILES + $IGNORE_DIRTY_FILES )) == 0 ]]; then exitWithErrorSuggestHelp "You have uncommitted changes in this repo; won't do anything" "(use --stash-dirty-files, --commit-dirty-files or\n\t--ignore-dirty-files to bypass this error)" fi +REPO_URL=`git remote get-url --push origin 2> /dev/null` +if [[ $? == 0 ]]; then + git ls-remote --heads $REPO_URL $BRANCH | grep "refs/heads/$BRANCH" > /dev/null + if [[ $? == 0 ]]; then + REMOTE_BRANCH_EXISTS=1 + fi +fi +if [[ ! $REMOTE_BRANCH_EXISTS ]]; then + GIT_PUSH_ARGS="--set-upstream origin $BRANCH" +fi confirmationPrompt "Releasing $REPO_NAME $VERSION (current is $CURRENT_VERSION)" @@ -445,8 +437,12 @@ fi # # make sure it builds # -updateStatus "Verifying that $REPO_NAME builds" XCODEBUILD=/usr/bin/xcodebuild +XCODEBUILD_CMD="$XCODEBUILD" +updateStatus "Verifying that $REPO_NAME builds" +if [[ $QUIET ]]; then + XCODEBUILD_CMD="$XCODEBUILD -quiet" +fi if [[ ! -x "$XCODEBUILD" ]]; then exitWithErrorSuggestHelp "Expected to find xcodebuild at path $XCODEBUILD" fi @@ -467,38 +463,23 @@ PROJECT_SPECIFIER="-project RaptureXML.xcodeproj" COMPILE_PLATFORMS="iOS macOS tvOS watchOS" PROJECT_NAME="RaptureXML" -testActionForPlatform() -{ - case $1 in - iOS) echo "test";; - macOS) echo "test";; - tvOS) echo "test";; - watchOS) echo "build";; - esac -} - -runDestinationForPlatform() -{ - case $1 in - iOS) echo "platform=iOS Simulator,OS=10.3,name=iPad Pro (9.7 inch)";; - macOS) echo "platform=macOS";; - tvOS) echo "platform=tvOS Simulator,OS=10.2,name=Apple TV 1080p";; - watchOS) echo "platform=watchOS Simulator,OS=3.2,name=Apple Watch Series 2 - 42mm";; - esac -} - # # build for each platform # for PLATFORM in $COMPILE_PLATFORMS; do updateStatus "Building: $PROJECT_NAME for $PLATFORM..." + summarize "building $PROJECT_NAME for $PLATFORM" if [[ $SKIP_TESTS ]]; then BUILD_ACTION="clean build" else BUILD_ACTION="clean $(testActionForPlatform $PLATFORM)" fi RUN_DESTINATION="$(runDestinationForPlatform $PLATFORM)" - executeCommand "$XCODEBUILD $PROJECT_SPECIFIER -scheme \"${REPO_NAME}\" -configuration Debug -destination \"$RUN_DESTINATION\" $BUILD_ACTION $XCODEBUILD_PIPETO" + if [[ $QUIET ]]; then + executeCommand "$XCODEBUILD_CMD $PROJECT_SPECIFIER -scheme \"${REPO_NAME}\" -configuration Debug -destination \"$RUN_DESTINATION\" $BUILD_ACTION $XCODEBUILD_PIPETO" 2&> /dev/null + else + executeCommand "$XCODEBUILD_CMD $PROJECT_SPECIFIER -scheme \"${REPO_NAME}\" -configuration Debug -destination \"$RUN_DESTINATION\" $BUILD_ACTION $XCODEBUILD_PIPETO" + fi done # @@ -506,28 +487,37 @@ done # updateStatus "Adjusting version numbers" executeCommand "$PLIST_BUDDY \"$FRAMEWORK_PLIST_PATH\" -c \"Set :CFBundleShortVersionString $VERSION\"" -executeCommand "agvtool bump" - -if [[ ! $SKIP_DOCUMENTATION ]]; then - updateStatus "Rebuilding documentation" - executeCommand "$SCRIPT_DIR/generateDocumentationForAPI.sh" - executeCommand "git add Documentation/." -fi +agvtool bump > /dev/null +summarize "bumped version to $VERSION from $CURRENT_VERSION for $RELEASE_TYPE release" # # commit changes # BUILD_NUMBER=`agvtool vers -terse` -COMMIT_COMMENT="Release $VERSION (build $BUILD_NUMBER)" -if [[ $REPO_IS_DIRTY && $COMMIT_DIRTY_FILES > 0 ]]; then - COMMIT_COMMENT="$COMMIT_COMMENT -- committed with other changes" +if [[ -z $COMMIT_MESSAGE ]]; then + COMMIT_MESSAGE="Release $VERSION (build $BUILD_NUMBER)" + if [[ $REPO_IS_DIRTY && $COMMIT_DIRTY_FILES > 0 ]]; then + COMMIT_MESSAGE="$COMMIT_MESSAGE -- committed with other changes" + fi +else + COMMIT_MESSAGE="[$VERSION] $COMMIT_MESSAGE" fi if [[ -z $NO_COMMIT ]]; then updateStatus "Committing changes" - executeCommand "git commit -a -m '$COMMIT_COMMENT'" + printf "%s" "$COMMIT_MESSAGE" | git commit -a $QUIET_ARG $AMEND_ARGS -F - + summarize "committed changes to \"$BRANCH\" branch" else updateStatus "! Not committing changes; --no-commit or --ignore-dirty-files was specified" - printf "> To commit manually, use:\n\n git commit -a -m '$COMMIT_COMMENT'\n" + printf "> To commit manually, use:\n\n git commit -a -m '$COMMIT_MESSAGE'\n" +fi + +# +# rebase with existing changes if needed +# +if [[ $REBASE && $REMOTE_BRANCH_EXISTS ]]; then + updateStatus "Rebasing with existing $BRANCH branch" + executeCommand "git pull origin $BRANCH $QUIET_ARG --rebase --allow-unrelated-histories --strategy=recursive -Xtheirs" + summarize "rebased \"$BRANCH\" branch" fi # @@ -536,6 +526,7 @@ fi if [[ $TAG_WHEN_DONE && -z $NO_COMMIT && -z $NO_TAG ]]; then updateStatus "Tagging repo for $VERSION release" executeCommand "git tag -a $VERSION -m 'Release $VERSION issued by $SCRIPT_NAME'" + summarize "tagged \"$BRANCH\" branch with $VERSION" else updateStatus "! Not tagging repo; --tag was not specified" printf "> To tag manually, use:\n\n git tag -a $VERSION -m 'Release $VERSION issued by $SCRIPT_NAME'\n" @@ -545,11 +536,13 @@ fi # push if we should # if [[ $PUSH_WHEN_DONE && -z $NO_COMMIT ]]; then - updateStatus "Pushing changes to origin" - executeCommand "git push" + ORIGIN_URL=`git remote get-url --push origin` + updateStatus "Pushing changes to \"$BRANCH\" branch of $ORIGIN_URL" + executeCommand "git push $QUIET_ARG $GIT_PUSH_ARGS" if [[ $TAG_WHEN_DONE && !$NO_TAG ]]; then - executeCommand "git push --tags" + executeCommand "git push --tags $QUIET_ARG" fi + summarize "pushed changes to \"$BRANCH\" branch of $ORIGIN_URL" else printf "\n> REMEMBER: The release isn't done until you push the changes! Don't forget to:\n\n git push && git push --tags\n" fi diff --git a/BuildControl/bin/travisBuildHelper.sh b/BuildControl/bin/travisBuildHelper.sh index a87b761..11e2167 100755 --- a/BuildControl/bin/travisBuildHelper.sh +++ b/BuildControl/bin/travisBuildHelper.sh @@ -10,22 +10,12 @@ fi OPERATION="$1" PLATFORM="$2" -# -# this function compensates for the fact that macOS is still on bash 3.x -# and therefore a more sensible implementation using associative -# arrays is not currently possible -# -runDestinationForPlatform() -{ - case $1 in - iOS) echo "platform=iOS Simulator,OS=10.3,name=iPad Pro (9.7 inch)";; - macOS) echo "platform=macOS";; - tvOS) echo "platform=tvOS Simulator,OS=10.2,name=Apple TV 1080p";; - watchOS) echo "platform=watchOS Simulator,OS=3.2,name=Apple Watch Series 2 - 42mm";; - esac -} +SCRIPT_NAME=$(basename "$0") +SCRIPT_DIR=$(cd "$PWD" ; cd `dirname "$0"` ; echo "$PWD") -case $OPERATION in +source "${SCRIPT_DIR}/include-common.sh" + +case $OPERATION in build) MAXIMUM_TRIES=1 XCODE_ACTION="clean build";; @@ -54,7 +44,7 @@ while [[ $THIS_TRY < $MAXIMUM_TRIES ]]; do if [[ $MAXIMUM_TRIES > 1 ]]; then echo "Attempt $THIS_TRY of $MAXIMUM_TRIES..." fi - + ( set -o pipefail && xcodebuild -project RaptureXML.xcodeproj -configuration Debug -scheme "RaptureXML" -destination "$DESTINATION" -destination-timeout 300 $XCODE_ACTION 2>&1 | tee "RaptureXML-$PLATFORM-$OPERATION.log" | xcpretty ) XCODE_RESULT="${PIPESTATUS[0]}" if [[ "$XCODE_RESULT" == "0" ]]; then diff --git a/BuildControl/bin/validatePullRequest.sh b/BuildControl/bin/validatePullRequest.sh new file mode 100755 index 0000000..b772793 --- /dev/null +++ b/BuildControl/bin/validatePullRequest.sh @@ -0,0 +1,157 @@ +#!/bin/bash + +# +# validates that a pull request builds & passes all unit tests +# +# by emaloney, 11 September 2017 +# + +set -o pipefail # to ensure xcodebuild pipeline errors are propagated correctly + +SCRIPT_NAME=$(basename "$0") +SCRIPT_DIR=$(cd "$PWD" ; cd `dirname "$0"` ; echo "$PWD") + +source "${SCRIPT_DIR}/include-common.sh" + +showHelp() +{ + define HELP < [--owner ] + +Where: + + is the GitHub branch published by that corresponds to the + given pull request being validated. + + is the GitHub organization or user under which the pull request + was posted. This argument may be omitted if is the same as the + owner of this repo. + +Optional arguments: + + -o + Shorthand for --owner + + --skip-tests + Skips running the unit tests :-( + + --quiet (or -q) + Silences output + +Help + + This documentation is displayed when supplying the --help (or -help, -h, + or -?) argument. + + Note that when this script displays help documentation, all other + command line arguments are ignored and no other actions are performed. + +HELP + printf "$HELP" | less +} + +# +# make sure we're in a git repo +# +cd "$SCRIPT_DIR/../../." +git status 2&> /dev/null +if [[ $? != 0 ]]; then + exitWithErrorSuggestHelp "You must invoke this script from within a git repo" +fi + +# +# figure out the default --owner +# +ORIGIN_URL=`git remote get-url origin` +if [[ `echo $ORIGIN_URL | grep -c "^https://"` > 0 ]]; then + DEFAULT_OWNER=`echo $ORIGIN_URL | sed "sq^https://.*github.com/qq" | sed "sq/.*qq"` +elif [[ `echo $ORIGIN_URL | grep -c "^ssh://"` > 0 ]]; then + DEFAULT_OWNER=`echo $ORIGIN_URL | sed "sq^ssh://.*github.com/qq" | sed "sq/.*qq"` +else + DEFAULT_OWNER=`echo $ORIGIN_URL | sed "sq.*:qq" | sed "sq/.*qq"` +fi + +# +# parse the command-line arguments +# +QUIET_ARG="" +OWNER="$DEFAULT_OWNER" +while [[ $1 ]]; do + case $1 in + --owner|-o) + if [[ $2 ]]; then + OWNER="$2" + shift + fi + ;; + + --skip-tests) + SKIP_TESTS=1 + ;; + + --quiet|-q) + QUIET=1 + QUIET_ARG="-q" + ;; + + --help|-help|-h|-\?) + SHOW_HELP=1 + ;; + + -*) + exitWithErrorSuggestHelp "Unrecognized argument: $1" + ;; + + *) + if [[ -z $BRANCH ]]; then + BRANCH=$1 + elif [[ -z $ARGS ]]; then + ARGS=$1 + else + ARGS="$ARGS $1" + fi + esac + shift +done + +if [[ $SHOW_HELP ]]; then + showHelp + exit 1 +fi + +if [[ -z $BRANCH ]]; then + exitWithErrorSuggestHelp "The pull request branch name must be specified" +fi + +for ARG in $ARGS; do + exitWithErrorSuggestHelp "Unrecognized argument: $ARG" +done + +# +# clone the repo using the pull request branch +# +PROJECT_NAME="RaptureXML" +REPO_URL="ssh://github.com/$OWNER/$PROJECT_NAME" +REPO_TEMP_DIR=`mktemp -d` +updateStatus "Cloning $BRANCH from $REPO_URL into $REPO_TEMP_DIR" +cd "$REPO_TEMP_DIR" +executeCommand "git clone --recursive $QUIET_ARG -b $BRANCH $REPO_URL" +cd "$PROJECT_NAME" + +# +# execute buildCheck.sh, preferring the one in the repo (if any) +# +BUILD_CHECK_SCRIPT="BuildControl/bin/buildCheck.sh" +if [[ -e "$BUILD_CHECK_SCRIPT" ]]; then + executeCommand "$BUILD_CHECK_SCRIPT $QUIET_ARG" +else + exitWithError "Couldn't find expected script at $PWD/$BUILD_CHECK_SCRIPT" +fi + +updateStatus "Success! The $BRANCH branch of $PROJECT_NAME passes all checks." diff --git a/BuildControl/config/Debug.xcconfig b/BuildControl/config/Debug.xcconfig index 1256493..f1d6b8c 100644 --- a/BuildControl/config/Debug.xcconfig +++ b/BuildControl/config/Debug.xcconfig @@ -1,4 +1,4 @@ -#include "Framework.xcconfig" +#include "Target.xcconfig" ONLY_ACTIVE_ARCH = YES SWIFT_OPTIMIZATION_LEVEL = -Onone diff --git a/BuildControl/config/Release.xcconfig b/BuildControl/config/Release.xcconfig index 72d6b83..4bc5365 100644 --- a/BuildControl/config/Release.xcconfig +++ b/BuildControl/config/Release.xcconfig @@ -1,4 +1,4 @@ -#include "Framework.xcconfig" +#include "Target.xcconfig" ONLY_ACTIVE_ARCH = NO SWIFT_OPTIMIZATION_LEVEL = -Owholemodule diff --git a/BuildControl/config/Framework.xcconfig b/BuildControl/config/Target.xcconfig similarity index 75% rename from BuildControl/config/Framework.xcconfig rename to BuildControl/config/Target.xcconfig index f50a478..a98190b 100644 --- a/BuildControl/config/Framework.xcconfig +++ b/BuildControl/config/Target.xcconfig @@ -1,5 +1,5 @@ PRODUCT_NAME = RaptureXML PRODUCT_BUNDLE_IDENTIFIER = com.raptureinvenice.$(PRODUCT_NAME:rfc1034identifier) -INFOPLIST_FILE = BuildControl/Info-Framework.plist +INFOPLIST_FILE = BuildControl/Info-Target.plist DYLIB_CURRENT_VERSION = $(CURRENT_PROJECT_VERSION) diff --git a/BuildControl/repos.xml b/BuildControl/repos.xml new file mode 100644 index 0000000..82ede10 --- /dev/null +++ b/BuildControl/repos.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Cleanroom Project began as an experiment to re-imagine Gilt’s iOS codebase in a legacy-free, Swift-based incarnation. + +Since then, we’ve expanded the Cleanroom Project to include multi-platform support. Much of our codebase now supports tvOS in addition to iOS, and our lower-level code is usable on macOS and watchOS as well. + +Cleanroom Project code serves as the foundation of Gilt on TV, our tvOS app [featured by Apple during the launch of the new Apple TV](http://www.apple.com/apple-events/september-2015/). And as time goes on, we'll be replacing more and more of our existing Objective-C codebase with Cleanroom implementations. + +In the meantime, we’ll be tracking the latest releases of Swift & Xcode, and [open-sourcing major portions of our codebase](https://github.com/gilt/Cleanroom#open-source-by-default) along the way. + If you’d like to contribute to this or any other Cleanroom Project repo, please read [the contribution guidelines](https://github.com/gilt/Cleanroom#contributing-to-the-cleanroom-project). + API documentation is generated using [Realm](http://realm.io)’s [jazzy](https://github.com/realm/jazzy/) project, maintained by [JP Simard](https://github.com/jpsim) and [Samuel E. Giddins](https://github.com/segiddins). + + + + + + Over the years, Gilt Groupe has used and refined Mockingbird Library as the base for its various Apple Platform projects. + +Mockingbird began life as AppFramework, created by Jesse Boyes. + +AppFramework found a home at Gilt Groupe and eventually became Mockingbird Library. + +In recent years, Mockingbird Library has been developed and maintained by Evan Maloney. + API documentation is generated using [appledoc](http://gentlebytes.com/appledoc/) from [Gentle Bytes](http://gentlebytes.com/). + + + + + + + + + + + + + + + + + + + + + diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index f42cfe7..804f607 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -58,14 +58,14 @@ 3B3B9D8E1E95CF8B005AB4DE /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = usr/lib/libxml2.tbd; sourceTree = SDKROOT; }; 3B3B9D901E95D5C8005AB4DE /* RaptureTestSuite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RaptureTestSuite.h; sourceTree = ""; }; 3B3B9D911E95D5C8005AB4DE /* RaptureTestSuite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RaptureTestSuite.m; sourceTree = ""; }; + 3B6E351D1F67C67C000741A0 /* Info-Target.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Target.plist"; sourceTree = ""; }; + 3B6E351E1F67C688000741A0 /* Target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Target.xcconfig; sourceTree = ""; }; 3B9059031DAECB5200B4EEC0 /* RaptureXML.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RaptureXML.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B90590C1DAECB5200B4EEC0 /* RaptureXMLUnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RaptureXMLUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B9059251DAECB9E00B4EEC0 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 3B9059261DAECB9E00B4EEC0 /* Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Framework.xcconfig; sourceTree = ""; }; 3B9059271DAECB9E00B4EEC0 /* Project.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; }; 3B9059281DAECB9E00B4EEC0 /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 3B9059291DAECB9E00B4EEC0 /* Tests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Tests.xcconfig; sourceTree = ""; }; - 3B90592B1DAECD9800B4EEC0 /* Info-Framework.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Framework.plist"; sourceTree = ""; }; 3B90592C1DAECD9800B4EEC0 /* Info-Tests.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Tests.plist"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -151,7 +151,7 @@ isa = PBXGroup; children = ( 3B9059241DAECB9E00B4EEC0 /* config */, - 3B90592B1DAECD9800B4EEC0 /* Info-Framework.plist */, + 3B6E351D1F67C67C000741A0 /* Info-Target.plist */, 3B90592C1DAECD9800B4EEC0 /* Info-Tests.plist */, ); path = BuildControl; @@ -161,9 +161,9 @@ isa = PBXGroup; children = ( 3B9059251DAECB9E00B4EEC0 /* Debug.xcconfig */, - 3B9059261DAECB9E00B4EEC0 /* Framework.xcconfig */, 3B9059271DAECB9E00B4EEC0 /* Project.xcconfig */, 3B9059281DAECB9E00B4EEC0 /* Release.xcconfig */, + 3B6E351E1F67C688000741A0 /* Target.xcconfig */, 3B9059291DAECB9E00B4EEC0 /* Tests.xcconfig */, ); path = config; From 68a98d1ed49565d457dcbe959249d4782e0439e7 Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 12 Sep 2017 03:40:51 -0400 Subject: [PATCH 36/39] Release 3.1.0 (build 4) --- BuildControl/Info-Target.plist | 2 +- RaptureXML.xcodeproj/project.pbxproj | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/BuildControl/Info-Target.plist b/BuildControl/Info-Target.plist index d545725..f98dce1 100644 --- a/BuildControl/Info-Target.plist +++ b/BuildControl/Info-Target.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.2 + 3.1.0 CFBundleSignature ???? CFBundleVersion diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index 804f607..25a9584 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -359,7 +359,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 4; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -416,7 +416,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 4; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -442,7 +442,7 @@ buildSettings = { DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 3; + DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -456,7 +456,7 @@ buildSettings = { DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 3; + DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; From 42726275361eb93e6b3039177858c5dafbba4dbb Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 5 Dec 2017 15:09:11 -0500 Subject: [PATCH 37/39] Xcode 9.2 updated this --- RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML.xcscheme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML.xcscheme b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML.xcscheme index 352603a..676dd10 100644 --- a/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML.xcscheme +++ b/RaptureXML.xcodeproj/xcshareddata/xcschemes/RaptureXML.xcscheme @@ -1,6 +1,6 @@ Date: Tue, 5 Dec 2017 15:13:16 -0500 Subject: [PATCH 38/39] update generated files --- .travis.yml | 16 ++++----- BuildControl/bin/include-common.sh | 2 +- BuildControl/bin/travisBuildHelper.sh | 48 ++++----------------------- 3 files changed, 16 insertions(+), 50 deletions(-) diff --git a/.travis.yml b/.travis.yml index cb7ab2e..dc59059 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,7 @@ git: before_install: - sudo systemsetup -settimezone America/New_York # temporary hack: NYC timezone is required for some MBDataEnvironment date-related unit tests - - git submodule update --init + - travis_wait 30 git submodule update --init install: - gem install xcpretty --no-rdoc --no-ri --no-document --quiet @@ -21,13 +21,13 @@ install: - sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService # same simulator: https://github.com/travis-ci/travis-ci/issues/7580#issuecomment-292974395 script: - - ./BuildControl/bin/travisBuildHelper.sh build iOS - - ./BuildControl/bin/travisBuildHelper.sh test iOS - - ./BuildControl/bin/travisBuildHelper.sh build macOS - - ./BuildControl/bin/travisBuildHelper.sh test macOS - - ./BuildControl/bin/travisBuildHelper.sh build tvOS - - ./BuildControl/bin/travisBuildHelper.sh test tvOS - - ./BuildControl/bin/travisBuildHelper.sh build watchOS + - travis_wait 30 ./BuildControl/bin/travisBuildHelper.sh build iOS + - travis_wait 30 ./BuildControl/bin/travisBuildHelper.sh test iOS + - travis_wait 30 ./BuildControl/bin/travisBuildHelper.sh build macOS + - travis_wait 30 ./BuildControl/bin/travisBuildHelper.sh test macOS + - travis_wait 30 ./BuildControl/bin/travisBuildHelper.sh build tvOS + - travis_wait 30 ./BuildControl/bin/travisBuildHelper.sh test tvOS + - travis_wait 30 ./BuildControl/bin/travisBuildHelper.sh build watchOS after_failure: - test -f "RaptureXML-iOS-build.log" && tail -n 2500 "RaptureXML-iOS-build.log" diff --git a/BuildControl/bin/include-common.sh b/BuildControl/bin/include-common.sh index a3521ad..eefcb7c 100755 --- a/BuildControl/bin/include-common.sh +++ b/BuildControl/bin/include-common.sh @@ -101,7 +101,7 @@ runDestinationForPlatform() ;; tvOS) - SIMULATOR_ID=`xcrun simctl list | grep -v unavailable | grep "Apple TV" | tail -1 | sed "s/) (.*)\$//" | sed "s/^.*(//"` + SIMULATOR_ID=`xcrun simctl list | grep -v unavailable | grep "Apple TV" | grep -v "(at " | tail -1 | sed "s/) (.*)\$//" | sed "s/^.*(//"` echo "id=$SIMULATOR_ID" ;; diff --git a/BuildControl/bin/travisBuildHelper.sh b/BuildControl/bin/travisBuildHelper.sh index 11e2167..addbe16 100755 --- a/BuildControl/bin/travisBuildHelper.sh +++ b/BuildControl/bin/travisBuildHelper.sh @@ -15,48 +15,14 @@ SCRIPT_DIR=$(cd "$PWD" ; cd `dirname "$0"` ; echo "$PWD") source "${SCRIPT_DIR}/include-common.sh" -case $OPERATION in - build) - MAXIMUM_TRIES=1 - XCODE_ACTION="clean build";; - - test) - MAXIMUM_TRIES=3 - XCODE_ACTION="test";; - - *) - echo "error: Unknown operation: $OPERATION" - exit 1;; -esac - +BUILD_ACTION="clean $(testActionForPlatform $PLATFORM)" DESTINATION=$(runDestinationForPlatform $PLATFORM) -# -# this retry loop is an unfortunate hack; Travis unit tests periodically fail -# without explanation with an exit code of 65. Sometimes this is just a temporary -# glitch and re-trying will succeed. We retry a few times if we keep hitting 65 -# to avoid the temporary error. If it fails enough times, we assume it's a 'real' -# failure -# -THIS_TRY=0 -while [[ $THIS_TRY < $MAXIMUM_TRIES ]]; do - THIS_TRY=$(( $THIS_TRY + 1 )) - if [[ $MAXIMUM_TRIES > 1 ]]; then - echo "Attempt $THIS_TRY of $MAXIMUM_TRIES..." - fi - - ( set -o pipefail && xcodebuild -project RaptureXML.xcodeproj -configuration Debug -scheme "RaptureXML" -destination "$DESTINATION" -destination-timeout 300 $XCODE_ACTION 2>&1 | tee "RaptureXML-$PLATFORM-$OPERATION.log" | xcpretty ) - XCODE_RESULT="${PIPESTATUS[0]}" - if [[ "$XCODE_RESULT" == "0" ]]; then - rm "RaptureXML-$PLATFORM-$OPERATION.log" - exit 0 - elif [[ "$XCODE_RESULT" != "65" ]]; then - echo "Failed with exit code $XCODE_RESULT." - exit $XCODE_RESULT - elif [[ $MAXIMUM_TRIES > 1 && $THIS_TRY < $MAXIMUM_TRIES ]]; then - echo "Failed with exit code 65. This may be a transient error; trying again." - echo - fi -done +( set -o pipefail && xcodebuild -project RaptureXML.xcodeproj -configuration Debug -scheme "RaptureXML" -destination "$DESTINATION" -destination-timeout 300 $BUILD_ACTION 2>&1 | tee "RaptureXML-$PLATFORM-$OPERATION.log" | xcpretty ) +XCODE_RESULT="${PIPESTATUS[0]}" +if [[ "$XCODE_RESULT" == "0" ]]; then + rm "RaptureXML-$PLATFORM-$OPERATION.log" + exit 0 +fi exit $XCODE_RESULT From d3e40c3a65d060269ae4312836c0f02344eab0dc Mon Sep 17 00:00:00 2001 From: Evan Maloney Date: Tue, 5 Dec 2017 15:14:21 -0500 Subject: [PATCH 39/39] Release 3.1.1 (build 5) --- BuildControl/Info-Target.plist | 2 +- RaptureXML.xcodeproj/project.pbxproj | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/BuildControl/Info-Target.plist b/BuildControl/Info-Target.plist index f98dce1..900e0ae 100644 --- a/BuildControl/Info-Target.plist +++ b/BuildControl/Info-Target.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.1.0 + 3.1.1 CFBundleSignature ???? CFBundleVersion diff --git a/RaptureXML.xcodeproj/project.pbxproj b/RaptureXML.xcodeproj/project.pbxproj index 25a9584..9461138 100644 --- a/RaptureXML.xcodeproj/project.pbxproj +++ b/RaptureXML.xcodeproj/project.pbxproj @@ -359,7 +359,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 4; + CURRENT_PROJECT_VERSION = 5; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -416,7 +416,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 4; + CURRENT_PROJECT_VERSION = 5; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -442,7 +442,7 @@ buildSettings = { DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 4; + DYLIB_CURRENT_VERSION = 5; DYLIB_INSTALL_NAME_BASE = "@rpath"; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -456,7 +456,7 @@ buildSettings = { DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 4; + DYLIB_CURRENT_VERSION = 5; DYLIB_INSTALL_NAME_BASE = "@rpath"; HEADER_SEARCH_PATHS = "\"$(SDK_DIR)\"/usr/include/libxml2"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";