├── .gitignore ├── .swift-version ├── .swiftpm └── xcode │ └── package.xcworkspace │ └── contents.xcworkspacedata ├── .travis.yml ├── Classes ├── CodableExtensions.swift ├── DecodingContainerTransformer.swift └── RegexCodeableTransformer.swift ├── CodableExtensions.podspec ├── Example ├── CodableExtensions.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── CodableExtensions-Example.xcscheme ├── CodableExtensions.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── CodableExtensions.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── CodableExtensions.xcscheme │ └── Target Support Files │ │ ├── CodableExtensions │ │ ├── CodableExtensions-dummy.m │ │ ├── CodableExtensions-prefix.pch │ │ ├── CodableExtensions-umbrella.h │ │ ├── CodableExtensions.modulemap │ │ ├── CodableExtensions.xcconfig │ │ └── Info.plist │ │ └── Pods-CodableExtensions_Tests │ │ ├── Info.plist │ │ ├── Pods-CodableExtensions_Tests-acknowledgements.markdown │ │ ├── Pods-CodableExtensions_Tests-acknowledgements.plist │ │ ├── Pods-CodableExtensions_Tests-dummy.m │ │ ├── Pods-CodableExtensions_Tests-frameworks.sh │ │ ├── Pods-CodableExtensions_Tests-resources.sh │ │ ├── Pods-CodableExtensions_Tests-umbrella.h │ │ ├── Pods-CodableExtensions_Tests.debug.xcconfig │ │ ├── Pods-CodableExtensions_Tests.modulemap │ │ └── Pods-CodableExtensions_Tests.release.xcconfig └── Tests │ ├── Info.plist │ └── Tests.swift ├── LICENSE ├── Package.swift ├── README.md └── _Pods.xcodeproj /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | Carthage 26 | # We recommend against adding the Pods directory to your .gitignore. However 27 | # you should judge for yourself, the pros and cons are mentioned at: 28 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 29 | # 30 | # Note: if you ignore the Pods directory, make sure to uncomment 31 | # `pod install` in .travis.yml 32 | # 33 | # Pods/ 34 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 5.0 2 | -------------------------------------------------------------------------------- /.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * http://www.objc.io/issue-6/travis-ci.html 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | script: 13 | - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/CodableExtensions.xcworkspace -scheme CodableExtensions-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /Classes/CodableExtensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CodableExtensions.swift 3 | // CodableExtensions 4 | // 5 | // Created by James Ruston on 11/10/2017. 6 | // 7 | 8 | import Foundation 9 | 10 | public extension KeyedDecodingContainer { 11 | func decode(_ key: KeyedDecodingContainer.Key, 12 | transformer: Transformer) throws -> Transformer.Output where Transformer.Input : Decodable { 13 | let decoded: Transformer.Input = try self.decode(key) 14 | 15 | return try transformer.transform(decoded) 16 | } 17 | 18 | func decode(_ key: KeyedDecodingContainer.Key) throws -> T where T : Decodable { 19 | return try self.decode(T.self, forKey: key) 20 | } 21 | } 22 | 23 | public extension KeyedEncodingContainer { 24 | 25 | mutating func encode(_ value: Transformer.Output, 26 | forKey key: KeyedEncodingContainer.Key, 27 | transformer: Transformer) throws where Transformer.Input : Encodable { 28 | let transformed: Transformer.Input = try transformer.transform(value) 29 | try self.encode(transformed, forKey: key) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Classes/DecodingContainerTransformer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DecodingContainerTransformer.swift 3 | // CodeableExtensions 4 | // 5 | // Created by James Ruston on 11/10/2017. 6 | // 7 | 8 | import Foundation 9 | 10 | public protocol DecodingContainerTransformer { 11 | associatedtype Input 12 | associatedtype Output 13 | func transform(_ decoded: Input) throws -> Output 14 | } 15 | 16 | public protocol EncodingContainerTransformer { 17 | associatedtype Input 18 | associatedtype Output 19 | func transform(_ encoded: Output) throws -> Input 20 | } 21 | 22 | public typealias CodingContainerTransformer = DecodingContainerTransformer & EncodingContainerTransformer 23 | -------------------------------------------------------------------------------- /Classes/RegexCodeableTransformer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RegexCodableTransformer.swift 3 | // CodableExtensions 4 | // 5 | // Created by James Ruston on 11/10/2017. 6 | // 7 | 8 | import Foundation 9 | 10 | public class RegexCodableTransformer: CodingContainerTransformer { 11 | 12 | public typealias Input = String 13 | public typealias Output = NSRegularExpression 14 | 15 | public init() {} 16 | 17 | public func transform(_ decoded: Input) throws -> Output { 18 | return try NSRegularExpression(pattern: decoded, options: []) 19 | } 20 | 21 | public func transform(_ encoded: NSRegularExpression) throws -> String { 22 | return encoded.pattern 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /CodableExtensions.podspec: -------------------------------------------------------------------------------- 1 | 2 | Pod::Spec.new do |s| 3 | s.name = 'CodableExtensions' 4 | s.swift_version = '5.0' 5 | s.version = '0.3.0' 6 | s.summary = 'CodableExtensions provides some useful extensions to Swift Codable' 7 | s.description = <<-DESC 8 | Adds extensions to allow custom transformations during decoding. Also makes the interface a bit cleaner. 9 | DESC 10 | 11 | s.homepage = 'https://github.com/jamesruston/CodableExtensions' 12 | s.license = { :type => 'MIT', :file => 'LICENSE' } 13 | s.author = { 'jamesruston' => 'jruston90@gmail.com' } 14 | s.source = { :git => 'https://github.com/jamesruston/CodableExtensions.git', :tag => s.version.to_s } 15 | s.social_media_url = 'https://twitter.com/james_ruston' 16 | 17 | s.ios.deployment_target = '9.0' 18 | 19 | s.source_files = 'Classes/**/*' 20 | end 21 | -------------------------------------------------------------------------------- /Example/CodableExtensions.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; 11 | 7A64111E5E8E2635486C50A5 /* Pods_CodableExtensions_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56B587E1D7B3A34CF5D0114B /* Pods_CodableExtensions_Tests.framework */; }; 12 | /* End PBXBuildFile section */ 13 | 14 | /* Begin PBXFileReference section */ 15 | 199B80666E2684FFB30FF585 /* CodableExtensions.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = CodableExtensions.podspec; path = ../CodableExtensions.podspec; sourceTree = ""; }; 16 | 1BA8059839D851DEFB9EB707 /* Pods-CodableExtensions_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CodableExtensions_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests.release.xcconfig"; sourceTree = ""; }; 17 | 1D897BED7D9E0676D38B855E /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 18 | 27FB76640D2D437DA3E08BE9 /* Pods-CodableExtensions_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CodableExtensions_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests.debug.xcconfig"; sourceTree = ""; }; 19 | 56B587E1D7B3A34CF5D0114B /* Pods_CodableExtensions_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CodableExtensions_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 20 | 5E37490A89BA87C8FA89710A /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 21 | 607FACE51AFB9204008FA782 /* CodableExtensions_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CodableExtensions_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 22 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 23 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 24 | /* End PBXFileReference section */ 25 | 26 | /* Begin PBXFrameworksBuildPhase section */ 27 | 607FACE21AFB9204008FA782 /* Frameworks */ = { 28 | isa = PBXFrameworksBuildPhase; 29 | buildActionMask = 2147483647; 30 | files = ( 31 | 7A64111E5E8E2635486C50A5 /* Pods_CodableExtensions_Tests.framework in Frameworks */, 32 | ); 33 | runOnlyForDeploymentPostprocessing = 0; 34 | }; 35 | /* End PBXFrameworksBuildPhase section */ 36 | 37 | /* Begin PBXGroup section */ 38 | 0E6E546304252B8DC88CC7E8 /* Frameworks */ = { 39 | isa = PBXGroup; 40 | children = ( 41 | 56B587E1D7B3A34CF5D0114B /* Pods_CodableExtensions_Tests.framework */, 42 | ); 43 | name = Frameworks; 44 | sourceTree = ""; 45 | }; 46 | 607FACC71AFB9204008FA782 = { 47 | isa = PBXGroup; 48 | children = ( 49 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 50 | 607FACE81AFB9204008FA782 /* Tests */, 51 | 607FACD11AFB9204008FA782 /* Products */, 52 | F6A1DD21B2468C10587F2161 /* Pods */, 53 | 0E6E546304252B8DC88CC7E8 /* Frameworks */, 54 | ); 55 | sourceTree = ""; 56 | }; 57 | 607FACD11AFB9204008FA782 /* Products */ = { 58 | isa = PBXGroup; 59 | children = ( 60 | 607FACE51AFB9204008FA782 /* CodableExtensions_Tests.xctest */, 61 | ); 62 | name = Products; 63 | sourceTree = ""; 64 | }; 65 | 607FACE81AFB9204008FA782 /* Tests */ = { 66 | isa = PBXGroup; 67 | children = ( 68 | 607FACEB1AFB9204008FA782 /* Tests.swift */, 69 | 607FACE91AFB9204008FA782 /* Supporting Files */, 70 | ); 71 | path = Tests; 72 | sourceTree = ""; 73 | }; 74 | 607FACE91AFB9204008FA782 /* Supporting Files */ = { 75 | isa = PBXGroup; 76 | children = ( 77 | 607FACEA1AFB9204008FA782 /* Info.plist */, 78 | ); 79 | name = "Supporting Files"; 80 | sourceTree = ""; 81 | }; 82 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 83 | isa = PBXGroup; 84 | children = ( 85 | 199B80666E2684FFB30FF585 /* CodableExtensions.podspec */, 86 | 1D897BED7D9E0676D38B855E /* README.md */, 87 | 5E37490A89BA87C8FA89710A /* LICENSE */, 88 | ); 89 | name = "Podspec Metadata"; 90 | sourceTree = ""; 91 | }; 92 | F6A1DD21B2468C10587F2161 /* Pods */ = { 93 | isa = PBXGroup; 94 | children = ( 95 | 27FB76640D2D437DA3E08BE9 /* Pods-CodableExtensions_Tests.debug.xcconfig */, 96 | 1BA8059839D851DEFB9EB707 /* Pods-CodableExtensions_Tests.release.xcconfig */, 97 | ); 98 | name = Pods; 99 | sourceTree = ""; 100 | }; 101 | /* End PBXGroup section */ 102 | 103 | /* Begin PBXNativeTarget section */ 104 | 607FACE41AFB9204008FA782 /* CodableExtensions_Tests */ = { 105 | isa = PBXNativeTarget; 106 | buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "CodableExtensions_Tests" */; 107 | buildPhases = ( 108 | 23C4517F81D503C05D15F386 /* [CP] Check Pods Manifest.lock */, 109 | 607FACE11AFB9204008FA782 /* Sources */, 110 | 607FACE21AFB9204008FA782 /* Frameworks */, 111 | 607FACE31AFB9204008FA782 /* Resources */, 112 | 92A9794B5372136EE5A05851 /* [CP] Embed Pods Frameworks */, 113 | 3E0D3BFC1AED45A1AC30E0F8 /* [CP] Copy Pods Resources */, 114 | ); 115 | buildRules = ( 116 | ); 117 | dependencies = ( 118 | ); 119 | name = CodableExtensions_Tests; 120 | productName = Tests; 121 | productReference = 607FACE51AFB9204008FA782 /* CodableExtensions_Tests.xctest */; 122 | productType = "com.apple.product-type.bundle.unit-test"; 123 | }; 124 | /* End PBXNativeTarget section */ 125 | 126 | /* Begin PBXProject section */ 127 | 607FACC81AFB9204008FA782 /* Project object */ = { 128 | isa = PBXProject; 129 | attributes = { 130 | LastSwiftUpdateCheck = 0830; 131 | LastUpgradeCheck = 1020; 132 | ORGANIZATIONNAME = CocoaPods; 133 | TargetAttributes = { 134 | 607FACE41AFB9204008FA782 = { 135 | CreatedOnToolsVersion = 6.3.1; 136 | DevelopmentTeam = 3EWBZ32HU3; 137 | LastSwiftMigration = 1020; 138 | TestTargetID = 607FACCF1AFB9204008FA782; 139 | }; 140 | }; 141 | }; 142 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "CodableExtensions" */; 143 | compatibilityVersion = "Xcode 3.2"; 144 | developmentRegion = English; 145 | hasScannedForEncodings = 0; 146 | knownRegions = ( 147 | English, 148 | en, 149 | Base, 150 | ); 151 | mainGroup = 607FACC71AFB9204008FA782; 152 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 153 | projectDirPath = ""; 154 | projectRoot = ""; 155 | targets = ( 156 | 607FACE41AFB9204008FA782 /* CodableExtensions_Tests */, 157 | ); 158 | }; 159 | /* End PBXProject section */ 160 | 161 | /* Begin PBXResourcesBuildPhase section */ 162 | 607FACE31AFB9204008FA782 /* Resources */ = { 163 | isa = PBXResourcesBuildPhase; 164 | buildActionMask = 2147483647; 165 | files = ( 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXResourcesBuildPhase section */ 170 | 171 | /* Begin PBXShellScriptBuildPhase section */ 172 | 23C4517F81D503C05D15F386 /* [CP] Check Pods Manifest.lock */ = { 173 | isa = PBXShellScriptBuildPhase; 174 | buildActionMask = 2147483647; 175 | files = ( 176 | ); 177 | inputPaths = ( 178 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 179 | "${PODS_ROOT}/Manifest.lock", 180 | ); 181 | name = "[CP] Check Pods Manifest.lock"; 182 | outputPaths = ( 183 | "$(DERIVED_FILE_DIR)/Pods-CodableExtensions_Tests-checkManifestLockResult.txt", 184 | ); 185 | runOnlyForDeploymentPostprocessing = 0; 186 | shellPath = /bin/sh; 187 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 188 | showEnvVarsInLog = 0; 189 | }; 190 | 3E0D3BFC1AED45A1AC30E0F8 /* [CP] Copy Pods Resources */ = { 191 | isa = PBXShellScriptBuildPhase; 192 | buildActionMask = 2147483647; 193 | files = ( 194 | ); 195 | inputPaths = ( 196 | ); 197 | name = "[CP] Copy Pods Resources"; 198 | outputPaths = ( 199 | ); 200 | runOnlyForDeploymentPostprocessing = 0; 201 | shellPath = /bin/sh; 202 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests-resources.sh\"\n"; 203 | showEnvVarsInLog = 0; 204 | }; 205 | 92A9794B5372136EE5A05851 /* [CP] Embed Pods Frameworks */ = { 206 | isa = PBXShellScriptBuildPhase; 207 | buildActionMask = 2147483647; 208 | files = ( 209 | ); 210 | inputPaths = ( 211 | "${SRCROOT}/Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests-frameworks.sh", 212 | "${BUILT_PRODUCTS_DIR}/CodableExtensions/CodableExtensions.framework", 213 | ); 214 | name = "[CP] Embed Pods Frameworks"; 215 | outputPaths = ( 216 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CodableExtensions.framework", 217 | ); 218 | runOnlyForDeploymentPostprocessing = 0; 219 | shellPath = /bin/sh; 220 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests-frameworks.sh\"\n"; 221 | showEnvVarsInLog = 0; 222 | }; 223 | /* End PBXShellScriptBuildPhase section */ 224 | 225 | /* Begin PBXSourcesBuildPhase section */ 226 | 607FACE11AFB9204008FA782 /* Sources */ = { 227 | isa = PBXSourcesBuildPhase; 228 | buildActionMask = 2147483647; 229 | files = ( 230 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, 231 | ); 232 | runOnlyForDeploymentPostprocessing = 0; 233 | }; 234 | /* End PBXSourcesBuildPhase section */ 235 | 236 | /* Begin XCBuildConfiguration section */ 237 | 607FACED1AFB9204008FA782 /* Debug */ = { 238 | isa = XCBuildConfiguration; 239 | buildSettings = { 240 | ALWAYS_SEARCH_USER_PATHS = NO; 241 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 242 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 243 | CLANG_CXX_LIBRARY = "libc++"; 244 | CLANG_ENABLE_MODULES = YES; 245 | CLANG_ENABLE_OBJC_ARC = YES; 246 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 247 | CLANG_WARN_BOOL_CONVERSION = YES; 248 | CLANG_WARN_COMMA = YES; 249 | CLANG_WARN_CONSTANT_CONVERSION = YES; 250 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 251 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 252 | CLANG_WARN_EMPTY_BODY = YES; 253 | CLANG_WARN_ENUM_CONVERSION = YES; 254 | CLANG_WARN_INFINITE_RECURSION = YES; 255 | CLANG_WARN_INT_CONVERSION = YES; 256 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 257 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 258 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 259 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 260 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 261 | CLANG_WARN_STRICT_PROTOTYPES = YES; 262 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 263 | CLANG_WARN_UNREACHABLE_CODE = YES; 264 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 265 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 266 | COPY_PHASE_STRIP = NO; 267 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 268 | ENABLE_STRICT_OBJC_MSGSEND = YES; 269 | ENABLE_TESTABILITY = YES; 270 | GCC_C_LANGUAGE_STANDARD = gnu99; 271 | GCC_DYNAMIC_NO_PIC = NO; 272 | GCC_NO_COMMON_BLOCKS = YES; 273 | GCC_OPTIMIZATION_LEVEL = 0; 274 | GCC_PREPROCESSOR_DEFINITIONS = ( 275 | "DEBUG=1", 276 | "$(inherited)", 277 | ); 278 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 279 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 280 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 281 | GCC_WARN_UNDECLARED_SELECTOR = YES; 282 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 283 | GCC_WARN_UNUSED_FUNCTION = YES; 284 | GCC_WARN_UNUSED_VARIABLE = YES; 285 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 286 | MTL_ENABLE_DEBUG_INFO = YES; 287 | ONLY_ACTIVE_ARCH = YES; 288 | SDKROOT = iphoneos; 289 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 290 | SWIFT_VERSION = 5.0; 291 | }; 292 | name = Debug; 293 | }; 294 | 607FACEE1AFB9204008FA782 /* Release */ = { 295 | isa = XCBuildConfiguration; 296 | buildSettings = { 297 | ALWAYS_SEARCH_USER_PATHS = NO; 298 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 299 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 300 | CLANG_CXX_LIBRARY = "libc++"; 301 | CLANG_ENABLE_MODULES = YES; 302 | CLANG_ENABLE_OBJC_ARC = YES; 303 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 304 | CLANG_WARN_BOOL_CONVERSION = YES; 305 | CLANG_WARN_COMMA = YES; 306 | CLANG_WARN_CONSTANT_CONVERSION = YES; 307 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 308 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 309 | CLANG_WARN_EMPTY_BODY = YES; 310 | CLANG_WARN_ENUM_CONVERSION = YES; 311 | CLANG_WARN_INFINITE_RECURSION = YES; 312 | CLANG_WARN_INT_CONVERSION = YES; 313 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 314 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 315 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 316 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 317 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 318 | CLANG_WARN_STRICT_PROTOTYPES = YES; 319 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 320 | CLANG_WARN_UNREACHABLE_CODE = YES; 321 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 322 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 323 | COPY_PHASE_STRIP = NO; 324 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 325 | ENABLE_NS_ASSERTIONS = NO; 326 | ENABLE_STRICT_OBJC_MSGSEND = YES; 327 | GCC_C_LANGUAGE_STANDARD = gnu99; 328 | GCC_NO_COMMON_BLOCKS = YES; 329 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 330 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 331 | GCC_WARN_UNDECLARED_SELECTOR = YES; 332 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 333 | GCC_WARN_UNUSED_FUNCTION = YES; 334 | GCC_WARN_UNUSED_VARIABLE = YES; 335 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 336 | MTL_ENABLE_DEBUG_INFO = NO; 337 | SDKROOT = iphoneos; 338 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 339 | SWIFT_VERSION = 5.0; 340 | VALIDATE_PRODUCT = YES; 341 | }; 342 | name = Release; 343 | }; 344 | 607FACF31AFB9204008FA782 /* Debug */ = { 345 | isa = XCBuildConfiguration; 346 | baseConfigurationReference = 27FB76640D2D437DA3E08BE9 /* Pods-CodableExtensions_Tests.debug.xcconfig */; 347 | buildSettings = { 348 | DEVELOPMENT_TEAM = 3EWBZ32HU3; 349 | FRAMEWORK_SEARCH_PATHS = ( 350 | "$(SDKROOT)/Developer/Library/Frameworks", 351 | "$(inherited)", 352 | ); 353 | GCC_PREPROCESSOR_DEFINITIONS = ( 354 | "DEBUG=1", 355 | "$(inherited)", 356 | ); 357 | INFOPLIST_FILE = Tests/Info.plist; 358 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 359 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 360 | PRODUCT_NAME = "$(TARGET_NAME)"; 361 | }; 362 | name = Debug; 363 | }; 364 | 607FACF41AFB9204008FA782 /* Release */ = { 365 | isa = XCBuildConfiguration; 366 | baseConfigurationReference = 1BA8059839D851DEFB9EB707 /* Pods-CodableExtensions_Tests.release.xcconfig */; 367 | buildSettings = { 368 | DEVELOPMENT_TEAM = 3EWBZ32HU3; 369 | FRAMEWORK_SEARCH_PATHS = ( 370 | "$(SDKROOT)/Developer/Library/Frameworks", 371 | "$(inherited)", 372 | ); 373 | INFOPLIST_FILE = Tests/Info.plist; 374 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 375 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 376 | PRODUCT_NAME = "$(TARGET_NAME)"; 377 | }; 378 | name = Release; 379 | }; 380 | /* End XCBuildConfiguration section */ 381 | 382 | /* Begin XCConfigurationList section */ 383 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "CodableExtensions" */ = { 384 | isa = XCConfigurationList; 385 | buildConfigurations = ( 386 | 607FACED1AFB9204008FA782 /* Debug */, 387 | 607FACEE1AFB9204008FA782 /* Release */, 388 | ); 389 | defaultConfigurationIsVisible = 0; 390 | defaultConfigurationName = Release; 391 | }; 392 | 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "CodableExtensions_Tests" */ = { 393 | isa = XCConfigurationList; 394 | buildConfigurations = ( 395 | 607FACF31AFB9204008FA782 /* Debug */, 396 | 607FACF41AFB9204008FA782 /* Release */, 397 | ); 398 | defaultConfigurationIsVisible = 0; 399 | defaultConfigurationName = Release; 400 | }; 401 | /* End XCConfigurationList section */ 402 | }; 403 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 404 | } 405 | -------------------------------------------------------------------------------- /Example/CodableExtensions.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/CodableExtensions.xcodeproj/xcshareddata/xcschemes/CodableExtensions-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /Example/CodableExtensions.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/CodableExtensions.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | target 'CodableExtensions_Tests' do 3 | pod 'CodableExtensions', :path => '../' 4 | 5 | 6 | end 7 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - CodableExtensions (0.1.0) 3 | 4 | DEPENDENCIES: 5 | - CodableExtensions (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | CodableExtensions: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | CodableExtensions: 69ecd31563c06fcd71ab0c291ff63c0c9c1f308d 13 | 14 | PODFILE CHECKSUM: d72bb615bb0a397c04145c45109081feb40309c1 15 | 16 | COCOAPODS: 1.3.1 17 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/CodableExtensions.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CodableExtensions", 3 | "version": "0.1.0", 4 | "summary": "A short description of CodableExtensions.", 5 | "description": "TODO: Add long description of the pod here.", 6 | "homepage": "https://github.com/jamesruston/CodableExtensions", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "jamesruston": "jruston90@gmail.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/jamesruston/CodableExtensions.git", 16 | "tag": "0.1.0" 17 | }, 18 | "platforms": { 19 | "ios": "8.0" 20 | }, 21 | "source_files": "CodableExtensions/Classes/**/*" 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - CodableExtensions (0.1.0) 3 | 4 | DEPENDENCIES: 5 | - CodableExtensions (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | CodableExtensions: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | CodableExtensions: 69ecd31563c06fcd71ab0c291ff63c0c9c1f308d 13 | 14 | PODFILE CHECKSUM: d72bb615bb0a397c04145c45109081feb40309c1 15 | 16 | COCOAPODS: 1.3.1 17 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 17BCD5653136238CE59267975D2120E2 /* CodableExtensions-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B7D1760A68DE3F1D9901A2F0D00DDA7E /* CodableExtensions-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 1A2635681F8E4CF300E12897 /* DecodingContainerTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A2635651F8E4CF200E12897 /* DecodingContainerTransformer.swift */; }; 12 | 1A2635691F8E4CF300E12897 /* RegexCodeableTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A2635661F8E4CF200E12897 /* RegexCodeableTransformer.swift */; }; 13 | 1A26356A1F8E4CF300E12897 /* CodableExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A2635671F8E4CF200E12897 /* CodableExtensions.swift */; }; 14 | 1BFD4B1EB2103FF855C0D7564BBF9DBE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 15 | 5BCE68D338D2DB0218D83CB87F20E9F6 /* Pods-CodableExtensions_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A7D1FA96ADC0FCDC3465A9D8AF7CF8E /* Pods-CodableExtensions_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 16 | 5DCE57CF69A6507DFFB7A1DD876F89B9 /* CodableExtensions-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1443701F9F9211CC9B1185C62C4B8143 /* CodableExtensions-dummy.m */; }; 17 | A5E1D97DF4A3399DFE3C52751A2BD59F /* Pods-CodableExtensions_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ADD280DBE0663CECB3E7435CBF55DA2 /* Pods-CodableExtensions_Tests-dummy.m */; }; 18 | E4AB6974A21724CFED2EF5C85F2B59A0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | DBEA4108721796ECE34A498E94AA6144 /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 25 | proxyType = 1; 26 | remoteGlobalIDString = FD48043DCB4919B6C8F5DAC3390B02D3; 27 | remoteInfo = CodableExtensions; 28 | }; 29 | /* End PBXContainerItemProxy section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 13D6DD7FAF32B814FA77AFE7840C8C4A /* Pods-CodableExtensions_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-CodableExtensions_Tests.modulemap"; sourceTree = ""; }; 33 | 1443701F9F9211CC9B1185C62C4B8143 /* CodableExtensions-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CodableExtensions-dummy.m"; sourceTree = ""; }; 34 | 1A2635651F8E4CF200E12897 /* DecodingContainerTransformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DecodingContainerTransformer.swift; sourceTree = ""; }; 35 | 1A2635661F8E4CF200E12897 /* RegexCodeableTransformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegexCodeableTransformer.swift; sourceTree = ""; }; 36 | 1A2635671F8E4CF200E12897 /* CodableExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CodableExtensions.swift; sourceTree = ""; }; 37 | 1C297B1487DC2B1D013390967A70AFC2 /* Pods-CodableExtensions_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CodableExtensions_Tests-resources.sh"; sourceTree = ""; }; 38 | 2A7D1FA96ADC0FCDC3465A9D8AF7CF8E /* Pods-CodableExtensions_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CodableExtensions_Tests-umbrella.h"; sourceTree = ""; }; 39 | 4A1018FF6D98152385AE06D7F97DDF75 /* CodableExtensions.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = CodableExtensions.modulemap; sourceTree = ""; }; 40 | 4F95CA9D8EB51DBFB21533CB46955A3B /* Pods-CodableExtensions_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CodableExtensions_Tests.release.xcconfig"; sourceTree = ""; }; 41 | 5ADD280DBE0663CECB3E7435CBF55DA2 /* Pods-CodableExtensions_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CodableExtensions_Tests-dummy.m"; sourceTree = ""; }; 42 | 5B4868BF5750C783F1450CCB51B04D5B /* Pods-CodableExtensions_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CodableExtensions_Tests.debug.xcconfig"; sourceTree = ""; }; 43 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 44 | 717AF681E39D76EFB702CB298779F515 /* CodableExtensions-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CodableExtensions-prefix.pch"; sourceTree = ""; }; 45 | 723AADE460367B567F2149FDF202BFA7 /* Pods-CodableExtensions_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CodableExtensions_Tests-frameworks.sh"; sourceTree = ""; }; 46 | 757208C7DAF12F6D9EA08C3CEA72544B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 47 | 8E80CC2C0224B1C426EA23283FDC0611 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 48 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 49 | 95E27344F6DC16BB9F8BD2E78FBA0E06 /* Pods_CodableExtensions_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CodableExtensions_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 50 | 96A9653ABAF83C9135103D627A2ABF0A /* Pods-CodableExtensions_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CodableExtensions_Tests-acknowledgements.plist"; sourceTree = ""; }; 51 | 9E8F97E60FAFF70E369F92808D8B75F7 /* Pods-CodableExtensions_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-CodableExtensions_Tests-acknowledgements.markdown"; sourceTree = ""; }; 52 | B05266C99499A754E55DEF3242DC5F78 /* CodableExtensions.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CodableExtensions.xcconfig; sourceTree = ""; }; 53 | B7D1760A68DE3F1D9901A2F0D00DDA7E /* CodableExtensions-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CodableExtensions-umbrella.h"; sourceTree = ""; }; 54 | C62BADF5277E77EDC9D318C68BAFFB5C /* CodableExtensions.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CodableExtensions.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | /* End PBXFileReference section */ 56 | 57 | /* Begin PBXFrameworksBuildPhase section */ 58 | 2FE73C5A4D8AE124D1480510F1B3C235 /* Frameworks */ = { 59 | isa = PBXFrameworksBuildPhase; 60 | buildActionMask = 2147483647; 61 | files = ( 62 | E4AB6974A21724CFED2EF5C85F2B59A0 /* Foundation.framework in Frameworks */, 63 | ); 64 | runOnlyForDeploymentPostprocessing = 0; 65 | }; 66 | DBE0886D79F9CF2FF835B68160394797 /* Frameworks */ = { 67 | isa = PBXFrameworksBuildPhase; 68 | buildActionMask = 2147483647; 69 | files = ( 70 | 1BFD4B1EB2103FF855C0D7564BBF9DBE /* Foundation.framework in Frameworks */, 71 | ); 72 | runOnlyForDeploymentPostprocessing = 0; 73 | }; 74 | /* End PBXFrameworksBuildPhase section */ 75 | 76 | /* Begin PBXGroup section */ 77 | 1A26356B1F8E56CE00E12897 /* Classes */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | 1A2635671F8E4CF200E12897 /* CodableExtensions.swift */, 81 | 1A2635651F8E4CF200E12897 /* DecodingContainerTransformer.swift */, 82 | 1A2635661F8E4CF200E12897 /* RegexCodeableTransformer.swift */, 83 | ); 84 | path = Classes; 85 | sourceTree = ""; 86 | }; 87 | 1F3D0A99271E532CC39FE07BBFAD73B2 /* Development Pods */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | F489167A08AC05F69D102D38063B0473 /* CodableExtensions */, 91 | ); 92 | name = "Development Pods"; 93 | sourceTree = ""; 94 | }; 95 | 2CA52D4B0F689931B4311516D18B0FE9 /* Pods-CodableExtensions_Tests */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | 8E80CC2C0224B1C426EA23283FDC0611 /* Info.plist */, 99 | 13D6DD7FAF32B814FA77AFE7840C8C4A /* Pods-CodableExtensions_Tests.modulemap */, 100 | 9E8F97E60FAFF70E369F92808D8B75F7 /* Pods-CodableExtensions_Tests-acknowledgements.markdown */, 101 | 96A9653ABAF83C9135103D627A2ABF0A /* Pods-CodableExtensions_Tests-acknowledgements.plist */, 102 | 5ADD280DBE0663CECB3E7435CBF55DA2 /* Pods-CodableExtensions_Tests-dummy.m */, 103 | 723AADE460367B567F2149FDF202BFA7 /* Pods-CodableExtensions_Tests-frameworks.sh */, 104 | 1C297B1487DC2B1D013390967A70AFC2 /* Pods-CodableExtensions_Tests-resources.sh */, 105 | 2A7D1FA96ADC0FCDC3465A9D8AF7CF8E /* Pods-CodableExtensions_Tests-umbrella.h */, 106 | 5B4868BF5750C783F1450CCB51B04D5B /* Pods-CodableExtensions_Tests.debug.xcconfig */, 107 | 4F95CA9D8EB51DBFB21533CB46955A3B /* Pods-CodableExtensions_Tests.release.xcconfig */, 108 | ); 109 | name = "Pods-CodableExtensions_Tests"; 110 | path = "Target Support Files/Pods-CodableExtensions_Tests"; 111 | sourceTree = ""; 112 | }; 113 | 3FB285B50B9209E77D961ECFC3B4D091 /* Targets Support Files */ = { 114 | isa = PBXGroup; 115 | children = ( 116 | 2CA52D4B0F689931B4311516D18B0FE9 /* Pods-CodableExtensions_Tests */, 117 | ); 118 | name = "Targets Support Files"; 119 | sourceTree = ""; 120 | }; 121 | 4B19AE21BD230A1F61E537A2990A919D /* Support Files */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 4A1018FF6D98152385AE06D7F97DDF75 /* CodableExtensions.modulemap */, 125 | B05266C99499A754E55DEF3242DC5F78 /* CodableExtensions.xcconfig */, 126 | 1443701F9F9211CC9B1185C62C4B8143 /* CodableExtensions-dummy.m */, 127 | 717AF681E39D76EFB702CB298779F515 /* CodableExtensions-prefix.pch */, 128 | B7D1760A68DE3F1D9901A2F0D00DDA7E /* CodableExtensions-umbrella.h */, 129 | 757208C7DAF12F6D9EA08C3CEA72544B /* Info.plist */, 130 | ); 131 | name = "Support Files"; 132 | path = "Example/Pods/Target Support Files/CodableExtensions"; 133 | sourceTree = ""; 134 | }; 135 | 6DEC1EDEBF7BDE2A4D237BD4B7F77E04 /* Products */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | C62BADF5277E77EDC9D318C68BAFFB5C /* CodableExtensions.framework */, 139 | 95E27344F6DC16BB9F8BD2E78FBA0E06 /* Pods_CodableExtensions_Tests.framework */, 140 | ); 141 | name = Products; 142 | sourceTree = ""; 143 | }; 144 | 7DB346D0F39D3F0E887471402A8071AB = { 145 | isa = PBXGroup; 146 | children = ( 147 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 148 | 1F3D0A99271E532CC39FE07BBFAD73B2 /* Development Pods */, 149 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 150 | 6DEC1EDEBF7BDE2A4D237BD4B7F77E04 /* Products */, 151 | 3FB285B50B9209E77D961ECFC3B4D091 /* Targets Support Files */, 152 | ); 153 | sourceTree = ""; 154 | }; 155 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 156 | isa = PBXGroup; 157 | children = ( 158 | D35AF013A5F0BAD4F32504907A52519E /* iOS */, 159 | ); 160 | name = Frameworks; 161 | sourceTree = ""; 162 | }; 163 | D35AF013A5F0BAD4F32504907A52519E /* iOS */ = { 164 | isa = PBXGroup; 165 | children = ( 166 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */, 167 | ); 168 | name = iOS; 169 | sourceTree = ""; 170 | }; 171 | F489167A08AC05F69D102D38063B0473 /* CodableExtensions */ = { 172 | isa = PBXGroup; 173 | children = ( 174 | 1A26356B1F8E56CE00E12897 /* Classes */, 175 | 4B19AE21BD230A1F61E537A2990A919D /* Support Files */, 176 | ); 177 | name = CodableExtensions; 178 | path = ../..; 179 | sourceTree = ""; 180 | }; 181 | /* End PBXGroup section */ 182 | 183 | /* Begin PBXHeadersBuildPhase section */ 184 | 0DBD5E54E62E5ADAA1197B4B125C6767 /* Headers */ = { 185 | isa = PBXHeadersBuildPhase; 186 | buildActionMask = 2147483647; 187 | files = ( 188 | 17BCD5653136238CE59267975D2120E2 /* CodableExtensions-umbrella.h in Headers */, 189 | ); 190 | runOnlyForDeploymentPostprocessing = 0; 191 | }; 192 | 9E3978C22C5555037024B2766A1BBA56 /* Headers */ = { 193 | isa = PBXHeadersBuildPhase; 194 | buildActionMask = 2147483647; 195 | files = ( 196 | 5BCE68D338D2DB0218D83CB87F20E9F6 /* Pods-CodableExtensions_Tests-umbrella.h in Headers */, 197 | ); 198 | runOnlyForDeploymentPostprocessing = 0; 199 | }; 200 | /* End PBXHeadersBuildPhase section */ 201 | 202 | /* Begin PBXNativeTarget section */ 203 | D499E1646F011E05EB84EB6852736874 /* Pods-CodableExtensions_Tests */ = { 204 | isa = PBXNativeTarget; 205 | buildConfigurationList = 6D8046A8FA4C9746E6AEEA032F1DC73C /* Build configuration list for PBXNativeTarget "Pods-CodableExtensions_Tests" */; 206 | buildPhases = ( 207 | AC53434FDC98FCBC732B3619DD886B67 /* Sources */, 208 | DBE0886D79F9CF2FF835B68160394797 /* Frameworks */, 209 | 9E3978C22C5555037024B2766A1BBA56 /* Headers */, 210 | ); 211 | buildRules = ( 212 | ); 213 | dependencies = ( 214 | 4AAB48891ADDD386269A96A1E2AE9221 /* PBXTargetDependency */, 215 | ); 216 | name = "Pods-CodableExtensions_Tests"; 217 | productName = "Pods-CodableExtensions_Tests"; 218 | productReference = 95E27344F6DC16BB9F8BD2E78FBA0E06 /* Pods_CodableExtensions_Tests.framework */; 219 | productType = "com.apple.product-type.framework"; 220 | }; 221 | FD48043DCB4919B6C8F5DAC3390B02D3 /* CodableExtensions */ = { 222 | isa = PBXNativeTarget; 223 | buildConfigurationList = 9670CF95606F960194E5D94E6147AC00 /* Build configuration list for PBXNativeTarget "CodableExtensions" */; 224 | buildPhases = ( 225 | 78ABA52BB6C3900F92B59F9C99912DD6 /* Sources */, 226 | 2FE73C5A4D8AE124D1480510F1B3C235 /* Frameworks */, 227 | 0DBD5E54E62E5ADAA1197B4B125C6767 /* Headers */, 228 | ); 229 | buildRules = ( 230 | ); 231 | dependencies = ( 232 | ); 233 | name = CodableExtensions; 234 | productName = CodableExtensions; 235 | productReference = C62BADF5277E77EDC9D318C68BAFFB5C /* CodableExtensions.framework */; 236 | productType = "com.apple.product-type.framework"; 237 | }; 238 | /* End PBXNativeTarget section */ 239 | 240 | /* Begin PBXProject section */ 241 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 242 | isa = PBXProject; 243 | attributes = { 244 | LastSwiftUpdateCheck = 0830; 245 | LastUpgradeCheck = 0700; 246 | TargetAttributes = { 247 | FD48043DCB4919B6C8F5DAC3390B02D3 = { 248 | LastSwiftMigration = 1020; 249 | }; 250 | }; 251 | }; 252 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 253 | compatibilityVersion = "Xcode 3.2"; 254 | developmentRegion = English; 255 | hasScannedForEncodings = 0; 256 | knownRegions = ( 257 | English, 258 | en, 259 | ); 260 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 261 | productRefGroup = 6DEC1EDEBF7BDE2A4D237BD4B7F77E04 /* Products */; 262 | projectDirPath = ""; 263 | projectRoot = ""; 264 | targets = ( 265 | FD48043DCB4919B6C8F5DAC3390B02D3 /* CodableExtensions */, 266 | D499E1646F011E05EB84EB6852736874 /* Pods-CodableExtensions_Tests */, 267 | ); 268 | }; 269 | /* End PBXProject section */ 270 | 271 | /* Begin PBXSourcesBuildPhase section */ 272 | 78ABA52BB6C3900F92B59F9C99912DD6 /* Sources */ = { 273 | isa = PBXSourcesBuildPhase; 274 | buildActionMask = 2147483647; 275 | files = ( 276 | 5DCE57CF69A6507DFFB7A1DD876F89B9 /* CodableExtensions-dummy.m in Sources */, 277 | 1A2635681F8E4CF300E12897 /* DecodingContainerTransformer.swift in Sources */, 278 | 1A2635691F8E4CF300E12897 /* RegexCodeableTransformer.swift in Sources */, 279 | 1A26356A1F8E4CF300E12897 /* CodableExtensions.swift in Sources */, 280 | ); 281 | runOnlyForDeploymentPostprocessing = 0; 282 | }; 283 | AC53434FDC98FCBC732B3619DD886B67 /* Sources */ = { 284 | isa = PBXSourcesBuildPhase; 285 | buildActionMask = 2147483647; 286 | files = ( 287 | A5E1D97DF4A3399DFE3C52751A2BD59F /* Pods-CodableExtensions_Tests-dummy.m in Sources */, 288 | ); 289 | runOnlyForDeploymentPostprocessing = 0; 290 | }; 291 | /* End PBXSourcesBuildPhase section */ 292 | 293 | /* Begin PBXTargetDependency section */ 294 | 4AAB48891ADDD386269A96A1E2AE9221 /* PBXTargetDependency */ = { 295 | isa = PBXTargetDependency; 296 | name = CodableExtensions; 297 | target = FD48043DCB4919B6C8F5DAC3390B02D3 /* CodableExtensions */; 298 | targetProxy = DBEA4108721796ECE34A498E94AA6144 /* PBXContainerItemProxy */; 299 | }; 300 | /* End PBXTargetDependency section */ 301 | 302 | /* Begin XCBuildConfiguration section */ 303 | 007B4CFE61B51219FAA070C7CC220B30 /* Release */ = { 304 | isa = XCBuildConfiguration; 305 | baseConfigurationReference = B05266C99499A754E55DEF3242DC5F78 /* CodableExtensions.xcconfig */; 306 | buildSettings = { 307 | CODE_SIGN_IDENTITY = ""; 308 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 309 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 310 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 311 | CURRENT_PROJECT_VERSION = 1; 312 | DEFINES_MODULE = YES; 313 | DYLIB_COMPATIBILITY_VERSION = 1; 314 | DYLIB_CURRENT_VERSION = 1; 315 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 316 | GCC_PREFIX_HEADER = "Target Support Files/CodableExtensions/CodableExtensions-prefix.pch"; 317 | INFOPLIST_FILE = "Target Support Files/CodableExtensions/Info.plist"; 318 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 319 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 320 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 321 | MODULEMAP_FILE = "Target Support Files/CodableExtensions/CodableExtensions.modulemap"; 322 | PRODUCT_NAME = CodableExtensions; 323 | SDKROOT = iphoneos; 324 | SKIP_INSTALL = YES; 325 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 326 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 327 | SWIFT_VERSION = 5.0; 328 | TARGETED_DEVICE_FAMILY = "1,2"; 329 | VALIDATE_PRODUCT = YES; 330 | VERSIONING_SYSTEM = "apple-generic"; 331 | VERSION_INFO_PREFIX = ""; 332 | }; 333 | name = Release; 334 | }; 335 | 13D0EF502F6EBD13FFE09E53F7862FB1 /* Debug */ = { 336 | isa = XCBuildConfiguration; 337 | baseConfigurationReference = B05266C99499A754E55DEF3242DC5F78 /* CodableExtensions.xcconfig */; 338 | buildSettings = { 339 | CODE_SIGN_IDENTITY = ""; 340 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 341 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 342 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 343 | CURRENT_PROJECT_VERSION = 1; 344 | DEFINES_MODULE = YES; 345 | DYLIB_COMPATIBILITY_VERSION = 1; 346 | DYLIB_CURRENT_VERSION = 1; 347 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 348 | GCC_PREFIX_HEADER = "Target Support Files/CodableExtensions/CodableExtensions-prefix.pch"; 349 | INFOPLIST_FILE = "Target Support Files/CodableExtensions/Info.plist"; 350 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 351 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 352 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 353 | MODULEMAP_FILE = "Target Support Files/CodableExtensions/CodableExtensions.modulemap"; 354 | PRODUCT_NAME = CodableExtensions; 355 | SDKROOT = iphoneos; 356 | SKIP_INSTALL = YES; 357 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 358 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 359 | SWIFT_VERSION = 5.0; 360 | TARGETED_DEVICE_FAMILY = "1,2"; 361 | VERSIONING_SYSTEM = "apple-generic"; 362 | VERSION_INFO_PREFIX = ""; 363 | }; 364 | name = Debug; 365 | }; 366 | 1F0EC9947B831F52DE567DDBC6A7FBC6 /* Release */ = { 367 | isa = XCBuildConfiguration; 368 | baseConfigurationReference = 4F95CA9D8EB51DBFB21533CB46955A3B /* Pods-CodableExtensions_Tests.release.xcconfig */; 369 | buildSettings = { 370 | CODE_SIGN_IDENTITY = ""; 371 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 372 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 373 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 374 | CURRENT_PROJECT_VERSION = 1; 375 | DEFINES_MODULE = YES; 376 | DYLIB_COMPATIBILITY_VERSION = 1; 377 | DYLIB_CURRENT_VERSION = 1; 378 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 379 | INFOPLIST_FILE = "Target Support Files/Pods-CodableExtensions_Tests/Info.plist"; 380 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 381 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 382 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 383 | MACH_O_TYPE = staticlib; 384 | MODULEMAP_FILE = "Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests.modulemap"; 385 | OTHER_LDFLAGS = ""; 386 | OTHER_LIBTOOLFLAGS = ""; 387 | PODS_ROOT = "$(SRCROOT)"; 388 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 389 | PRODUCT_NAME = Pods_CodableExtensions_Tests; 390 | SDKROOT = iphoneos; 391 | SKIP_INSTALL = YES; 392 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 393 | TARGETED_DEVICE_FAMILY = "1,2"; 394 | VALIDATE_PRODUCT = YES; 395 | VERSIONING_SYSTEM = "apple-generic"; 396 | VERSION_INFO_PREFIX = ""; 397 | }; 398 | name = Release; 399 | }; 400 | 33DA7F43A1D2FA3C74A8C8FC246E1FA6 /* Debug */ = { 401 | isa = XCBuildConfiguration; 402 | buildSettings = { 403 | ALWAYS_SEARCH_USER_PATHS = NO; 404 | CLANG_ANALYZER_NONNULL = YES; 405 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 406 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 407 | CLANG_CXX_LIBRARY = "libc++"; 408 | CLANG_ENABLE_MODULES = YES; 409 | CLANG_ENABLE_OBJC_ARC = YES; 410 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 411 | CLANG_WARN_BOOL_CONVERSION = YES; 412 | CLANG_WARN_COMMA = YES; 413 | CLANG_WARN_CONSTANT_CONVERSION = YES; 414 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 415 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 416 | CLANG_WARN_EMPTY_BODY = YES; 417 | CLANG_WARN_ENUM_CONVERSION = YES; 418 | CLANG_WARN_INFINITE_RECURSION = YES; 419 | CLANG_WARN_INT_CONVERSION = YES; 420 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 421 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 422 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 423 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 424 | CLANG_WARN_STRICT_PROTOTYPES = YES; 425 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 426 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 427 | CLANG_WARN_UNREACHABLE_CODE = YES; 428 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 429 | CODE_SIGNING_REQUIRED = NO; 430 | COPY_PHASE_STRIP = NO; 431 | DEBUG_INFORMATION_FORMAT = dwarf; 432 | ENABLE_STRICT_OBJC_MSGSEND = YES; 433 | ENABLE_TESTABILITY = YES; 434 | GCC_C_LANGUAGE_STANDARD = gnu11; 435 | GCC_DYNAMIC_NO_PIC = NO; 436 | GCC_NO_COMMON_BLOCKS = YES; 437 | GCC_OPTIMIZATION_LEVEL = 0; 438 | GCC_PREPROCESSOR_DEFINITIONS = ( 439 | "POD_CONFIGURATION_DEBUG=1", 440 | "DEBUG=1", 441 | "$(inherited)", 442 | ); 443 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 444 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 445 | GCC_WARN_UNDECLARED_SELECTOR = YES; 446 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 447 | GCC_WARN_UNUSED_FUNCTION = YES; 448 | GCC_WARN_UNUSED_VARIABLE = YES; 449 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 450 | MTL_ENABLE_DEBUG_INFO = YES; 451 | ONLY_ACTIVE_ARCH = YES; 452 | PRODUCT_NAME = "$(TARGET_NAME)"; 453 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 454 | STRIP_INSTALLED_PRODUCT = NO; 455 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 456 | SYMROOT = "${SRCROOT}/../build"; 457 | }; 458 | name = Debug; 459 | }; 460 | 731DC216E1A58545B559F6E0A2418060 /* Release */ = { 461 | isa = XCBuildConfiguration; 462 | buildSettings = { 463 | ALWAYS_SEARCH_USER_PATHS = NO; 464 | CLANG_ANALYZER_NONNULL = YES; 465 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 466 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 467 | CLANG_CXX_LIBRARY = "libc++"; 468 | CLANG_ENABLE_MODULES = YES; 469 | CLANG_ENABLE_OBJC_ARC = YES; 470 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 471 | CLANG_WARN_BOOL_CONVERSION = YES; 472 | CLANG_WARN_COMMA = YES; 473 | CLANG_WARN_CONSTANT_CONVERSION = YES; 474 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 475 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 476 | CLANG_WARN_EMPTY_BODY = YES; 477 | CLANG_WARN_ENUM_CONVERSION = YES; 478 | CLANG_WARN_INFINITE_RECURSION = YES; 479 | CLANG_WARN_INT_CONVERSION = YES; 480 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 481 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 482 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 483 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 484 | CLANG_WARN_STRICT_PROTOTYPES = YES; 485 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 486 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 487 | CLANG_WARN_UNREACHABLE_CODE = YES; 488 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 489 | CODE_SIGNING_REQUIRED = NO; 490 | COPY_PHASE_STRIP = NO; 491 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 492 | ENABLE_NS_ASSERTIONS = NO; 493 | ENABLE_STRICT_OBJC_MSGSEND = YES; 494 | GCC_C_LANGUAGE_STANDARD = gnu11; 495 | GCC_NO_COMMON_BLOCKS = YES; 496 | GCC_PREPROCESSOR_DEFINITIONS = ( 497 | "POD_CONFIGURATION_RELEASE=1", 498 | "$(inherited)", 499 | ); 500 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 501 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 502 | GCC_WARN_UNDECLARED_SELECTOR = YES; 503 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 504 | GCC_WARN_UNUSED_FUNCTION = YES; 505 | GCC_WARN_UNUSED_VARIABLE = YES; 506 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 507 | MTL_ENABLE_DEBUG_INFO = NO; 508 | PRODUCT_NAME = "$(TARGET_NAME)"; 509 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 510 | STRIP_INSTALLED_PRODUCT = NO; 511 | SYMROOT = "${SRCROOT}/../build"; 512 | }; 513 | name = Release; 514 | }; 515 | 9942314C10536020440615D808F04906 /* Debug */ = { 516 | isa = XCBuildConfiguration; 517 | baseConfigurationReference = 5B4868BF5750C783F1450CCB51B04D5B /* Pods-CodableExtensions_Tests.debug.xcconfig */; 518 | buildSettings = { 519 | CODE_SIGN_IDENTITY = ""; 520 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 521 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 522 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 523 | CURRENT_PROJECT_VERSION = 1; 524 | DEFINES_MODULE = YES; 525 | DYLIB_COMPATIBILITY_VERSION = 1; 526 | DYLIB_CURRENT_VERSION = 1; 527 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 528 | INFOPLIST_FILE = "Target Support Files/Pods-CodableExtensions_Tests/Info.plist"; 529 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 530 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 531 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 532 | MACH_O_TYPE = staticlib; 533 | MODULEMAP_FILE = "Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests.modulemap"; 534 | OTHER_LDFLAGS = ""; 535 | OTHER_LIBTOOLFLAGS = ""; 536 | PODS_ROOT = "$(SRCROOT)"; 537 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 538 | PRODUCT_NAME = Pods_CodableExtensions_Tests; 539 | SDKROOT = iphoneos; 540 | SKIP_INSTALL = YES; 541 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 542 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 543 | TARGETED_DEVICE_FAMILY = "1,2"; 544 | VERSIONING_SYSTEM = "apple-generic"; 545 | VERSION_INFO_PREFIX = ""; 546 | }; 547 | name = Debug; 548 | }; 549 | /* End XCBuildConfiguration section */ 550 | 551 | /* Begin XCConfigurationList section */ 552 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 553 | isa = XCConfigurationList; 554 | buildConfigurations = ( 555 | 33DA7F43A1D2FA3C74A8C8FC246E1FA6 /* Debug */, 556 | 731DC216E1A58545B559F6E0A2418060 /* Release */, 557 | ); 558 | defaultConfigurationIsVisible = 0; 559 | defaultConfigurationName = Release; 560 | }; 561 | 6D8046A8FA4C9746E6AEEA032F1DC73C /* Build configuration list for PBXNativeTarget "Pods-CodableExtensions_Tests" */ = { 562 | isa = XCConfigurationList; 563 | buildConfigurations = ( 564 | 9942314C10536020440615D808F04906 /* Debug */, 565 | 1F0EC9947B831F52DE567DDBC6A7FBC6 /* Release */, 566 | ); 567 | defaultConfigurationIsVisible = 0; 568 | defaultConfigurationName = Release; 569 | }; 570 | 9670CF95606F960194E5D94E6147AC00 /* Build configuration list for PBXNativeTarget "CodableExtensions" */ = { 571 | isa = XCConfigurationList; 572 | buildConfigurations = ( 573 | 13D0EF502F6EBD13FFE09E53F7862FB1 /* Debug */, 574 | 007B4CFE61B51219FAA070C7CC220B30 /* Release */, 575 | ); 576 | defaultConfigurationIsVisible = 0; 577 | defaultConfigurationName = Release; 578 | }; 579 | /* End XCConfigurationList section */ 580 | }; 581 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 582 | } 583 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/CodableExtensions.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/CodableExtensions/CodableExtensions-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_CodableExtensions : NSObject 3 | @end 4 | @implementation PodsDummy_CodableExtensions 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/CodableExtensions/CodableExtensions-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/CodableExtensions/CodableExtensions-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double CodableExtensionsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char CodableExtensionsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/CodableExtensions/CodableExtensions.modulemap: -------------------------------------------------------------------------------- 1 | framework module CodableExtensions { 2 | umbrella header "CodableExtensions-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/CodableExtensions/CodableExtensions.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/CodableExtensions 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/CodableExtensions/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-CodableExtensions_Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## CodableExtensions 5 | 6 | Copyright (c) 2017 jamesruston 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - https://cocoapods.org 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright (c) 2017 jamesruston <jruston90@gmail.com> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | License 38 | MIT 39 | Title 40 | CodableExtensions 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - https://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_CodableExtensions_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_CodableExtensions_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 10 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 11 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 12 | 13 | install_framework() 14 | { 15 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 16 | local source="${BUILT_PRODUCTS_DIR}/$1" 17 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 18 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 19 | elif [ -r "$1" ]; then 20 | local source="$1" 21 | fi 22 | 23 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 24 | 25 | if [ -L "${source}" ]; then 26 | echo "Symlinked..." 27 | source="$(readlink "${source}")" 28 | fi 29 | 30 | # Use filter instead of exclude so missing patterns don't throw errors. 31 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 32 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 33 | 34 | local basename 35 | basename="$(basename -s .framework "$1")" 36 | binary="${destination}/${basename}.framework/${basename}" 37 | if ! [ -r "$binary" ]; then 38 | binary="${destination}/${basename}" 39 | fi 40 | 41 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 42 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 43 | strip_invalid_archs "$binary" 44 | fi 45 | 46 | # Resign the code if required by the build settings to avoid unstable apps 47 | code_sign_if_enabled "${destination}/$(basename "$1")" 48 | 49 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 50 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 51 | local swift_runtime_libs 52 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 53 | for lib in $swift_runtime_libs; do 54 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 55 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 56 | code_sign_if_enabled "${destination}/${lib}" 57 | done 58 | fi 59 | } 60 | 61 | # Copies the dSYM of a vendored framework 62 | install_dsym() { 63 | local source="$1" 64 | if [ -r "$source" ]; then 65 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" 66 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" 67 | fi 68 | } 69 | 70 | # Signs a framework with the provided identity 71 | code_sign_if_enabled() { 72 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 73 | # Use the current code_sign_identitiy 74 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 75 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 76 | 77 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 78 | code_sign_cmd="$code_sign_cmd &" 79 | fi 80 | echo "$code_sign_cmd" 81 | eval "$code_sign_cmd" 82 | fi 83 | } 84 | 85 | # Strip invalid architectures 86 | strip_invalid_archs() { 87 | binary="$1" 88 | # Get architectures for current file 89 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 90 | stripped="" 91 | for arch in $archs; do 92 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 93 | # Strip non-valid architectures in-place 94 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 95 | stripped="$stripped $arch" 96 | fi 97 | done 98 | if [[ "$stripped" ]]; then 99 | echo "Stripped $binary of architectures:$stripped" 100 | fi 101 | } 102 | 103 | 104 | if [[ "$CONFIGURATION" == "Debug" ]]; then 105 | install_framework "${BUILT_PRODUCTS_DIR}/CodableExtensions/CodableExtensions.framework" 106 | fi 107 | if [[ "$CONFIGURATION" == "Release" ]]; then 108 | install_framework "${BUILT_PRODUCTS_DIR}/CodableExtensions/CodableExtensions.framework" 109 | fi 110 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 111 | wait 112 | fi 113 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 14 | 15 | case "${TARGETED_DEVICE_FAMILY}" in 16 | 1,2) 17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 18 | ;; 19 | 1) 20 | TARGET_DEVICE_ARGS="--target-device iphone" 21 | ;; 22 | 2) 23 | TARGET_DEVICE_ARGS="--target-device ipad" 24 | ;; 25 | 3) 26 | TARGET_DEVICE_ARGS="--target-device tv" 27 | ;; 28 | 4) 29 | TARGET_DEVICE_ARGS="--target-device watch" 30 | ;; 31 | *) 32 | TARGET_DEVICE_ARGS="--target-device mac" 33 | ;; 34 | esac 35 | 36 | install_resource() 37 | { 38 | if [[ "$1" = /* ]] ; then 39 | RESOURCE_PATH="$1" 40 | else 41 | RESOURCE_PATH="${PODS_ROOT}/$1" 42 | fi 43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 44 | cat << EOM 45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 46 | EOM 47 | exit 1 48 | fi 49 | case $RESOURCE_PATH in 50 | *.storyboard) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.xib) 55 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 56 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 57 | ;; 58 | *.framework) 59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 63 | ;; 64 | *.xcdatamodel) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 67 | ;; 68 | *.xcdatamodeld) 69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 71 | ;; 72 | *.xcmappingmodel) 73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 75 | ;; 76 | *.xcassets) 77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 79 | ;; 80 | *) 81 | echo "$RESOURCE_PATH" || true 82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 83 | ;; 84 | esac 85 | } 86 | 87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 92 | fi 93 | rm -f "$RESOURCES_TO_COPY" 94 | 95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 96 | then 97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 99 | while read line; do 100 | if [[ $line != "${PODS_ROOT}*" ]]; then 101 | XCASSET_FILES+=("$line") 102 | fi 103 | done <<<"$OTHER_XCASSETS" 104 | 105 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 106 | fi 107 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_CodableExtensions_TestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_CodableExtensions_TestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/CodableExtensions" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/CodableExtensions/CodableExtensions.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "CodableExtensions" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = $BUILD_DIR 9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_CodableExtensions_Tests { 2 | umbrella header "Pods-CodableExtensions_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-CodableExtensions_Tests/Pods-CodableExtensions_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/CodableExtensions" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/CodableExtensions/CodableExtensions.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "CodableExtensions" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = $BUILD_DIR 9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Tests/Tests.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | import CodableExtensions 4 | 5 | struct Person: Decodable { 6 | let name: String 7 | 8 | private enum CodingKeys: String, CodingKey { 9 | case name 10 | } 11 | 12 | init(from decoder: Decoder) throws { 13 | let container = try decoder.container(keyedBy: CodingKeys.self) 14 | name = try container.decode(.name) 15 | } 16 | } 17 | 18 | struct RegexWrapper: Codable { 19 | let regex: NSRegularExpression 20 | 21 | private enum CodingKeys: String, CodingKey { 22 | case regex 23 | } 24 | 25 | init(from decoder: Decoder) throws { 26 | let container = try decoder.container(keyedBy: CodingKeys.self) 27 | regex = try container.decode(.regex, transformer: RegexCodableTransformer()) 28 | } 29 | 30 | func encode(to encoder: Encoder) throws { 31 | var container = encoder.container(keyedBy: CodingKeys.self) 32 | try container.encode(regex, forKey: .regex, transformer: RegexCodableTransformer()) 33 | } 34 | } 35 | 36 | struct OptionalRegexWrapper: Decodable { 37 | let regex: NSRegularExpression? 38 | 39 | private enum CodingKeys: String, CodingKey { 40 | case regex 41 | } 42 | 43 | init(from decoder: Decoder) throws { 44 | let container = try decoder.container(keyedBy: CodingKeys.self) 45 | regex = try? container.decode(.regex, transformer: RegexCodableTransformer()) 46 | } 47 | } 48 | 49 | class Tests: XCTestCase { 50 | 51 | func testDecodingStandardType() { 52 | let json = """ 53 | { 54 | "name": "James Ruston" 55 | } 56 | """.data(using: .utf8)! 57 | 58 | let person = try! JSONDecoder().decode(Person.self, from: json) 59 | 60 | XCTAssertEqual(person.name, "James Ruston") 61 | } 62 | 63 | func testCustomTransformer() { 64 | let json = """ 65 | { 66 | "regex": ".*" 67 | } 68 | """.data(using: .utf8)! 69 | 70 | let wrapper = try! JSONDecoder().decode(RegexWrapper.self, from: json) 71 | 72 | XCTAssertEqual(wrapper.regex.pattern, ".*") 73 | } 74 | 75 | func testInvalidType() { 76 | let json = """ 77 | { 78 | "regex": true 79 | } 80 | """.data(using: .utf8)! 81 | 82 | let wrapper = try? JSONDecoder().decode(RegexWrapper.self, from: json) 83 | 84 | XCTAssertNil(wrapper) 85 | } 86 | 87 | func testInvalidRegex() { 88 | let json = """ 89 | { 90 | "regex": "[" 91 | } 92 | """.data(using: .utf8)! 93 | 94 | let wrapper = try! JSONDecoder().decode(OptionalRegexWrapper.self, from: json) 95 | 96 | XCTAssertNil(wrapper.regex) 97 | } 98 | 99 | func testEncoding() { 100 | let jsonString = "{\"regex\":\".*\"}" 101 | let json = jsonString.data(using: .utf8)! 102 | 103 | let wrapper = try! JSONDecoder().decode(RegexWrapper.self, from: json) 104 | let encoded = try! JSONEncoder().encode(wrapper) 105 | 106 | let output = String(data: encoded, encoding: .utf8)! 107 | 108 | XCTAssertEqual(jsonString, output) 109 | 110 | } 111 | } 112 | 113 | 114 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 jamesruston 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.2 2 | import PackageDescription 3 | 4 | let package = Package( 5 | name: "CodableExtensions", 6 | products: [ 7 | .library( 8 | name: "CodableExtensions", 9 | targets: ["CodableExtensions"]), 10 | ], 11 | dependencies: [ 12 | ], 13 | targets: [ 14 | .target( 15 | name: "CodableExtensions", 16 | dependencies: [], 17 | path: "Classes"), 18 | .testTarget( 19 | name: "CodableExtensionsTests", 20 | dependencies: ["CodableExtensions"]), 21 | ] 22 | ) 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CodableExtensions 2 | 3 | [![Version](https://img.shields.io/cocoapods/v/CodableExtensions.svg?style=flat)](http://cocoapods.org/pods/CodableExtensions) 4 | [![License](https://img.shields.io/cocoapods/l/CodableExtensions.svg?style=flat)](http://cocoapods.org/pods/CodableExtensions) 5 | [![Platform](https://img.shields.io/cocoapods/p/CodableExtensions.svg?style=flat)](http://cocoapods.org/pods/CodableExtensions) 6 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 7 | 8 | ## Installation 9 | 10 | CodableExtensions is available through [CocoaPods](http://cocoapods.org). To install 11 | it, simply add the following line to your Podfile: 12 | 13 | ```ruby 14 | pod 'CodableExtensions' 15 | ``` 16 | 17 | and run 18 | 19 | ```bash 20 | pod install 21 | ``` 22 | 23 | ## Usage 24 | 25 | ### Decoding 26 | 27 | To make a custom decoding transformer, you just need to implement `DecodingContainerTransformer` 28 | An example is provided in the project for converting a Regex 29 | 30 | ```swift 31 | import CodableExtensions 32 | 33 | public class RegexCodableTransformer: DecodingContainerTransformer { 34 | 35 | public typealias Input = String 36 | public typealias Output = NSRegularExpression 37 | 38 | public init() {} 39 | 40 | public func transform(_ decoded: Input) throws -> Output { 41 | return try NSRegularExpression(pattern: decoded, options: []) 42 | } 43 | } 44 | ``` 45 | 46 | The `Input` and `Output` types need defining to match the type you expect to be converting from and to, in this case the input is a `String` and the output is an `NSRegularExpression`. 47 | 48 | The logic to perfrom the transformation is then performed in the `transform` function. If there's an error at any point then that needs to be thrown. 49 | 50 | The custom transformer can then be used in the `Decodable` initialiser 51 | 52 | ```swift 53 | init(from decoder: Decoder) throws { 54 | let container = try decoder.container(keyedBy: CodingKeys.self) 55 | regex = try container.decode(.regex, transformer: RegexCodableTransformer()) 56 | } 57 | ``` 58 | 59 | ### Encoding 60 | 61 | To make a custom encoding transformer, make a class implementing `EncodingContainerTransformer` 62 | 63 | Example encoding an NSRegularExpression 64 | ```swift 65 | class RegexCodableTransformer: EncodingContainerTransformer { 66 | 67 | typealias Input = String 68 | typealias Output = NSRegularExpression 69 | 70 | public func transform(_ encoded: Output) throws -> Input { 71 | return encoded.pattern 72 | } 73 | } 74 | ``` 75 | and to use this transformer implement the Encodable function `encode(to encoder: Encoder)` 76 | 77 | ```swift 78 | func encode(to encoder: Encoder) throws { 79 | var container = encoder.container(keyedBy: CodingKeys.self) 80 | try container.encode(regex, forKey: .regex, transformer: RegexCodableTransformer()) 81 | } 82 | ``` 83 | 84 | If your transformer conforms to both the `EncodingContainerTransformer` and `DecodingContainerTransformer` you can use the `CodingContainerTransformer` typealias 85 | 86 | For full examples check out the tests https://github.com/jamesruston/CodableExtensions/blob/master/Example/Tests/Tests.swift 87 | 88 | For a writeup on the motivation behind this library check my Medium article out https://medium.com/@James_Ruston/codable-vs-objectmapper-af5fe8e8efd5 89 | 90 | ## Installation 91 | 92 | ### Cocoapods 93 | 94 | CodableExtensions is available through [CocoaPods](https://cocoapods.org). To install it, simply add the following line to your Podfile: 95 | 96 | ```ruby 97 | pod 'CodableExtensions' 98 | ``` 99 | 100 | Run `pod install` to integrate `CodableExtensions ` with your workspace. 101 | 102 | ### Carthage 103 | 104 | CodableExtensions is available through [Carthage](https://github.com/Carthage/Carthage). To install it, simply add the following line to your Carthage file: 105 | 106 | 107 | ``` 108 | github "jamesruston/CodableExtensions" 109 | ``` 110 | 111 | Run `carthage update` to build the framework and drag the built `CodableExtensions.framework` into your Xcode project. 112 | 113 | 114 | ## Author 115 | 116 | https://medium.com/@James_Ruston/ 117 | 118 | ## License 119 | 120 | CodableExtensions is available under the MIT license. See the LICENSE file for more info. 121 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj --------------------------------------------------------------------------------