From 14fa21541de7bc7d1cc66d9af6983f815c1fbf6e Mon Sep 17 00:00:00 2001 From: Mccc <> Date: Thu, 26 Sep 2024 11:53:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81Combine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Example/Podfile.lock | 4 +- .../Local Podspecs/SmartCodable.podspec.json | 4 +- Example/Pods/Manifest.lock | 4 +- Example/Pods/Pods.xcodeproj/project.pbxproj | 890 +++++++++--------- .../SmartCodable/SmartCodable-Info.plist | 2 +- .../SmartCodable.xcodeproj/project.pbxproj | 8 + Example/SmartCodable/1231231.swift | 50 + .../IntroduceViewController.swift" | 1 + .../Introduce_12ViewController.swift" | 70 ++ .../SmartCodable/Test2ViewController.swift | 38 +- .../SmartCodable/Test3ViewController.swift | 66 +- Example/SmartCodable/TestViewController.swift | 16 +- SmartCodable.podspec | 2 +- .../Impl/JSONDecoderImpl+KeyedContainer.swift | 22 +- .../Classes/SmartType/SmartPublished.swift | 169 ++++ 15 files changed, 831 insertions(+), 515 deletions(-) create mode 100644 Example/SmartCodable/1231231.swift create mode 100644 "Example/SmartCodable/Smart/1.Introduce(\344\275\277\347\224\250\344\273\213\347\273\215)/Introduce_12ViewController.swift" create mode 100644 SmartCodable/Classes/SmartType/SmartPublished.swift diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 0230ccc..14f1e88 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -8,7 +8,7 @@ PODS: - FBSnapshotTestCase/SwiftSupport (2.1.4): - FBSnapshotTestCase/Core - HandyJSON (5.0.0-beta.1) - - SmartCodable (4.1.10) + - SmartCodable (4.1.11-beta) - SnapKit (5.6.0) DEPENDENCIES: @@ -39,7 +39,7 @@ SPEC CHECKSUMS: CleanJSON: 910a36465ce4829e264a902ccf6d1455fdd9f980 FBSnapshotTestCase: 094f9f314decbabe373b87cc339bea235a63e07a HandyJSON: 582477127ab3ab65bd2e471815f1a7b846856978 - SmartCodable: f1e865bb983fdcf51b8bc45c6dda8a08379c315c + SmartCodable: 07ad5f71014a288baaf3c221e1061b547af08607 SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25 PODFILE CHECKSUM: 7f3af03f81934df0c035518074a7abbec8fa9d3f diff --git a/Example/Pods/Local Podspecs/SmartCodable.podspec.json b/Example/Pods/Local Podspecs/SmartCodable.podspec.json index d724338..5b5152b 100644 --- a/Example/Pods/Local Podspecs/SmartCodable.podspec.json +++ b/Example/Pods/Local Podspecs/SmartCodable.podspec.json @@ -1,6 +1,6 @@ { "name": "SmartCodable", - "version": "4.1.10", + "version": "4.1.11-beta", "summary": "数据解析库", "homepage": "https://github.com/intsig171", "license": { @@ -12,7 +12,7 @@ }, "source": { "git": "https://github.com/intsig171/SmartCodable.git", - "tag": "4.1.10" + "tag": "4.1.11-beta" }, "platforms": { "ios": "11.0", diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 0230ccc..14f1e88 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -8,7 +8,7 @@ PODS: - FBSnapshotTestCase/SwiftSupport (2.1.4): - FBSnapshotTestCase/Core - HandyJSON (5.0.0-beta.1) - - SmartCodable (4.1.10) + - SmartCodable (4.1.11-beta) - SnapKit (5.6.0) DEPENDENCIES: @@ -39,7 +39,7 @@ SPEC CHECKSUMS: CleanJSON: 910a36465ce4829e264a902ccf6d1455fdd9f980 FBSnapshotTestCase: 094f9f314decbabe373b87cc339bea235a63e07a HandyJSON: 582477127ab3ab65bd2e471815f1a7b846856978 - SmartCodable: f1e865bb983fdcf51b8bc45c6dda8a08379c315c + SmartCodable: 07ad5f71014a288baaf3c221e1061b547af08607 SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25 PODFILE CHECKSUM: 7f3af03f81934df0c035518074a7abbec8fa9d3f diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 0a8d970..3cde9c6 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -17,167 +17,170 @@ 0591132B5EA1BE4DDA268D8A9C3D0421 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46D532B60E5A862BAED6B9ED6A3A06F7 /* LayoutConstraint.swift */; }; 06E43B4751069B47B3BD4AFD936A57E3 /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B1648D17E6B6A33B54A7906BC560E10 /* ConstraintPriority.swift */; }; 0833E66E7F19849322305D67777B77DB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57221B54D014471C3D3E1925EFC917C8 /* Foundation.framework */; }; - 09C640A3D8D231523EA022E9C914914A /* IgnoredKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F799AB967E9C5B183338194DF9975B /* IgnoredKey.swift */; }; 0B994CDC79B1AD3A7BE62490D27C60C8 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3DD3A510DCBD287B46973C5625A7FB1 /* ConstraintAttributes.swift */; }; + 0CD7BCEB5167C6670443B68E47B3BD3D /* JSONDecoderImpl+Unwrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FD7F8031F4CC7E3EF669464EA390A76 /* JSONDecoderImpl+Unwrap.swift */; }; + 0D2E1FC3E4F836BF1ED440C3AEBE2BA8 /* DecodingError+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFAF4131266F8B7DC565C434931941E1 /* DecodingError+Extension.swift */; }; 0F4D0B7B522466B970AA826F57343EFF /* DataTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC6DB121D8A9523A91FDAB8376BE09FD /* DataTransform.swift */; }; - 11890AF7730428D891E2A738069AA93D /* DecodingCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AA1A9803E90CE6BC7ADDF5965F33F7 /* DecodingCache.swift */; }; 121A1E851C4ED624C40C631C653B12A6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57221B54D014471C3D3E1925EFC917C8 /* Foundation.framework */; }; 123E6BAD784E74477DC5B5CFF0272759 /* AnyExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD07779AA8B42688ED0FF74BACC5AA5 /* AnyExtensions.swift */; }; - 170D20E76ED47F45049C0DCB695E6B3F /* SmartJSONEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21F733C10404C35E050A56B18417CB90 /* SmartJSONEncoder.swift */; }; 17B9A1C9CB9555CF5C3D70318BD98BFF /* BTBubble+Check.swift in Sources */ = {isa = PBXBuildFile; fileRef = 319CD0A8663A00A572B4418C10FE8894 /* BTBubble+Check.swift */; }; 183D8B3E057B885EA7DF9A8CDCCE9029 /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD311A04C42FFDF8D95E30DC09B7EA57 /* ConstraintMakerRelatable.swift */; }; + 19B6E001850F688656EF6AD148B6F475 /* EncodingCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C0E9B59561302B7057595838F0BC60 /* EncodingCache.swift */; }; 19BB09AF94BD545E40C2766045BDDD77 /* ExtendCustomBasicType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63337F29437FD6A05DCA6E50C4DF6945 /* ExtendCustomBasicType.swift */; }; 1A78E1104DB6D444ECAF63AB362C8115 /* Pods-SmartCodable_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E3F09186EE217FC9713BA39404EB7B24 /* Pods-SmartCodable_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1B14ABB3EBE1CF1E69D4E393ADE3E9E4 /* OtherExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7D0C8FFA3D3F1791A00D06DA9FB06C3 /* OtherExtension.swift */; }; 1B8CE6509886B2FF237F5844B9C64C8B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57221B54D014471C3D3E1925EFC917C8 /* Foundation.framework */; }; 1BACCB396E184BBE1534DA7B2537578F /* CleanJSONDecodingStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF34C278263A81DD03B77202C061698C /* CleanJSONDecodingStorage.swift */; }; 1F84FE646CD1D7BAFFB58C243277AFF8 /* FBSnapshotTestCase-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FF03B8E2DF800F666228FD3C0F9026B /* FBSnapshotTestCase-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 20A299A2B5518B865C47D5DC4623DEF0 /* JSONValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = E253E8DF11BD01C06EE00110797C9096 /* JSONValue.swift */; }; 20B4141230DED5149833C6554AFC8EFB /* _CleanJSONDecoder+SingleValueDecodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DAD6DAD58F97DC6978669ECC1DCB217 /* _CleanJSONDecoder+SingleValueDecodingContainer.swift */; }; 220D6AC9B1B1EC8EFFB204F9C1EAC842 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B3CBC4CFD3D5E9ABDC56DDC685EACE4 /* ConstraintMakerEditable.swift */; }; + 227B40964DF57E4E006A369BABB56C70 /* KeysMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57ABB808729D0960596E20534FFCE2FD /* KeysMapper.swift */; }; + 22DFC9A3182F5150B08F0D42E0176DA4 /* DataTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33D493F4A1649816722315B147959195 /* DataTransformer.swift */; }; 2307EFF154B93A7CF3BBD066F9D2479E /* Pods-SmartCodable_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E5FA84A6FC991F1497F1DC0F7EA5CAD8 /* Pods-SmartCodable_Tests-dummy.m */; }; + 23A99217AFE2E844C00667C1D644A45A /* SmartLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 727E2EEF9E6C9854B1A98AF4CB6EFCE9 /* SmartLog.swift */; }; 24658CFD39BCB4586D56C427F8EA751D /* BuiltInBasicType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93B6822011E346FDFA44C5A0CAB94482 /* BuiltInBasicType.swift */; }; - 24B8F3340BBB1B99480144E954E7BFF7 /* KeysMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = E190016CCA3DDEB92796FF25B0FE692A /* KeysMapper.swift */; }; - 254138EDA641C82997944A4ED0832F22 /* JSONUnkeyedEncodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD3AEF84831817C3EBACB964BD25C970 /* JSONUnkeyedEncodingContainer.swift */; }; 256558233B40ACA6818F143BBC5B8017 /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = C958AC7215CB092EEC6FA33BD843AC29 /* ConstraintViewDSL.swift */; }; 2878735FE61E1EEB4C493A8B8ED3DCAC /* EnumType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC81D310210EE3584DF75E7C318F9318 /* EnumType.swift */; }; + 28E9659A3F9FBD9C607450568025DFD0 /* IgnoredKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2391A45CB07E7373F5542CCBA67C07D9 /* IgnoredKey.swift */; }; 2975A09730FD83DC0897129A11EA6585 /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 992A16CABA4C83CBEACADDABDE5021A8 /* SwiftSupport.swift */; }; - 299EB3042DC7AFAAB850F558532DE8F9 /* SmartJSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A02695CA5BA14EF7D6013FAB142889E /* SmartJSONDecoder.swift */; }; 2B88C28DD20CBFA7B3AEB21A365197FE /* FBSnapshotTestController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A29F6A0D45AF40A67824A0487C3A989 /* FBSnapshotTestController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C186192D573778E026E3CE693F5F9CB /* JSONKeyedEncodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC8255EB144B2BAA28F1F9E896F07A4 /* JSONKeyedEncodingContainer.swift */; }; 2CB61F6FA511CAACB43A50DC3A82E0DD /* UIImage+Snapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 02B734C740F66C4CA7D3E58A2E3A71ED /* UIImage+Snapshot.m */; }; - 2CCD17EC8A650B81A117878EBBCF4251 /* SmartUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4844C3AE5731C372261F2F1D5129A42C /* SmartUpdater.swift */; }; - 2D9190CD7E6DD720A73A411AADC89BF1 /* JSONDecoderImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECA9FC7AECDB148E561AD475BE6D72FA /* JSONDecoderImpl.swift */; }; 2ECCAC52EF4C74E1032E0BC646BBE5B9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57221B54D014471C3D3E1925EFC917C8 /* Foundation.framework */; }; 302638AD965D971A268A2114F7742607 /* CleanJSONUnkeyedDecodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39B2DBA2FFE481C74723D3D77C1C4151 /* CleanJSONUnkeyedDecodingContainer.swift */; }; 309C54EC9536180B960B9CB8EBD412E3 /* CustomDateFormatTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADDD58F0A7F5CBCD84256A572196E486 /* CustomDateFormatTransform.swift */; }; 30D475DF57C0C682A723231E7BCA0D14 /* FBSnapshotTestCasePlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = B3CC75B7FCBD0A88F04962B84E46D054 /* FBSnapshotTestCasePlatform.m */; }; 31BBDE6D8EF669C30F5140D8058DCC76 /* CleanDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8F06552F963B43848600AFDC8043A19 /* CleanDecoder.swift */; }; + 3226314937DF60764E1F13197E75AB80 /* SmartCodable-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 16DE0323BE27EF402AD3DE841312EEC5 /* SmartCodable-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 334D2C004D221A7E48202BF0C5EF7A9C /* SmartKeyDecodingStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4628EDC5D3E832597B6F2DEC7BD8F689 /* SmartKeyDecodingStrategy.swift */; }; 33BC540DE351661FAAA24950E165D4F1 /* MangledName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6AE0B9AEB52789C2BA9C70151E337A /* MangledName.swift */; }; 361EA7ABBDD80F154DDC208D9CE920DD /* Deserializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E274A3EAC25DB6D5C25C3CBB604248B /* Deserializer.swift */; }; 3660B4F629053ABC3C1DF69366770289 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077FF679DE0A788D695D32FCF72B1002 /* ConstraintConfig.swift */; }; - 3700889891FFF72B524FD268347E6CB2 /* SmartColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5A4B099D6B6C19273025A7E4BC6B7B /* SmartColor.swift */; }; 373413256658309F9053CE22BF62077E /* UIImage+Snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 60B0F726C42000735EC1B76226554746 /* UIImage+Snapshot.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 37AEE543E1F06554044E1CE36AA0B4BC /* SmartCaseDefaultable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9741C9099C80C82AA38386510EE0634D /* SmartCaseDefaultable.swift */; }; - 37DDC069AE25734DCDE5C45BD3E824CE /* DateTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 872A303F84F8E2A8F34473198AC0ABAB /* DateTransformer.swift */; }; 380F4FCB4A16A8BEE8C65EDDA025FEF3 /* _CleanJSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ADF3C4B3DE46FA90A67725C575E757 /* _CleanJSONDecoder.swift */; }; 38B9D58E94D9C1CECD7E381C64A2329D /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3C77A10532266D4C2017D4C5657D22 /* UILayoutSupport+Extensions.swift */; }; 3A030CA5A4DD41F59802F907A93F85DF /* HexColorTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36F93E9634821D816540140F7E1D6199 /* HexColorTransform.swift */; }; - 3B9DCA7CD6FF36287D93FF80C2AC0BB1 /* JSONDecoderImpl+SingleValueContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE3994DC269F18D22356B445B6E38226 /* JSONDecoderImpl+SingleValueContainer.swift */; }; 3C53583CB1A5F4926491D8838F580074 /* BuiltInBridgeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E920302DBA2124AFF869243E5CB6351 /* BuiltInBridgeType.swift */; }; - 4061431910C9FF38677270D70B2D90A9 /* Patcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99F56CDCDED62FFB08323F03A9F714B3 /* Patcher.swift */; }; 409FF499AEF8324ABFBA13C7A68D6349 /* BTBubble-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CAE8816531C7030F85857D829CF295C /* BTBubble-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 42B6ACFCF650183030867CB3EF345E95 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB1035777F9D0FAD25F91B78CF571685 /* ConstraintMakerFinalizable.swift */; }; - 46299168D10E2826AFE4033D4EB3D4E7 /* ColorTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1538EE2E56D54D12D82A50CC1358E5F /* ColorTransformer.swift */; }; - 46A2608FE28FE830D89FF68BC66174F8 /* SmartAny.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0CEE409E4A4D2FDA4F0F3586EBE7D61 /* SmartAny.swift */; }; + 45527509DB924747789E81BDD7BB6A84 /* SmartColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6444393AFB3BD991BAE85797BA7EF414 /* SmartColor.swift */; }; 46BD19D7708E8AAA015506480ED796A5 /* BTPrint-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 926AFEC77F93BCAD652BB781C5D0AA8C /* BTPrint-dummy.m */; }; 4BAD99B7394E225CEDBF94B8100BCC7F /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 464FF18D590547BE7F4826907AFFE76D /* ConstraintRelation.swift */; }; + 4CE7DEF513B5D845E204618AB1A49566 /* Cachable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 969F04EFBFF10592BD8EDB9FD9C29F9D /* Cachable.swift */; }; 4D9E3A4C588EA10E1B072DD95DF150E9 /* CleanJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A370EE4D019ADFE65F2DC1FF9EDBA187 /* CleanJSON-dummy.m */; }; 4DA72FD7F1FB2C0449EDEF4B8A579807 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DBF99060B70E1B6830A780BA2524ADA /* ConstraintPriorityTarget.swift */; }; - 4EC9F3D7BADE272E116CBB82C1B09733 /* DecodingError+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31209995A953E9383DF4F23549B1CA09 /* DecodingError+Extension.swift */; }; + 4FF59894E6F9A4D2124051FA7724A628 /* _SpecialTreatmentEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 968743DB7D00A0751F7D7842D998B698 /* _SpecialTreatmentEncoder.swift */; }; 5380454C48A12A6E376122ABD8096968 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7570803E9622B6523B3325B01B79E44B /* ConstraintDescription.swift */; }; + 53EFC330E33FD43CAD337D8B3CCA005E /* JSONDecoderImpl+KeyedContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D76DE7139B532063A6055FBA46589B8 /* JSONDecoderImpl+KeyedContainer.swift */; }; + 546611D589D13772290AD7D2C2C210C3 /* JSONSingleValueEncodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5307735E8C21EF4084FFD00D74C85F3 /* JSONSingleValueEncodingContainer.swift */; }; 5558B876B579BC1E79BD3D2B19148329 /* UIApplication+StrictKeyWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 233DAEDE45A5CF0A47B6462C8C9F92B4 /* UIApplication+StrictKeyWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; 55E51F45F1E157D3B4942BA7252C277E /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1F4D4D87CBE3DA68AFC92D6F05636AF /* ConstraintRelatableTarget.swift */; }; + 5673B99B3C1F81F9660291EBCA4155E1 /* JSONDecoderImpl+UnkeyedContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B660FC7921D44C76E9B1148267BAB68A /* JSONDecoderImpl+UnkeyedContainer.swift */; }; 56A72F6D13D930C4A2568F24DEA33C8D /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F043A0A52D038042BE4B2E250F39C46 /* ConstraintLayoutSupportDSL.swift */; }; 56AC6DC6459AE47E7BC4AF06E5B148D2 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDEF3ACF04599EB1C214870D993C7153 /* ConstraintDSL.swift */; }; 56CAC06DB79E51F4ED416927D57C79A9 /* Measuable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0C0E237F70C307DF23B940F50265F5 /* Measuable.swift */; }; 5A8FAA2FBC1E5BC5F5137CB211218A1E /* CleanJSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB06E31B883A63C5DE4A5A6308F36C8F /* CleanJSONDecoder.swift */; }; 5BE525FF6FA14B999ED2CCC0AA4FA0CF /* FBSnapshotTestCase-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B9E9FCD5E63CE808B8773D040F1E2BA8 /* FBSnapshotTestCase-dummy.m */; }; 5CCB87A1A86D7C03A5D678B262B37071 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57221B54D014471C3D3E1925EFC917C8 /* Foundation.framework */; }; - 5CF8186504D6DF7D65E8AE96161A1633 /* Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F22E01957313DD33E69A20A61F7ADBB /* Transformer.swift */; }; 5D0C8EE39661E929D4881B314AA90123 /* ToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9121AADFDAA9E940775A36390D6DDBC7 /* ToJSON.swift */; }; 5D36B99F3CAB1FC7337082D9581FECA6 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418DA1AEA18C4A4A1E5D84FCB60DA427 /* Debugging.swift */; }; + 5F2783B5CC883D243A68A25EB11F53B4 /* SmartUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA322902978520DD93C6959819B21B3D /* SmartUpdater.swift */; }; 5FCE0936FD3B817C74C1EB6B26D459D7 /* BTBubble+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02A4470686F2D00D08E538160531B64E /* BTBubble+Menu.swift */; }; 5FD7858E6AA15774EDCD172DFE731D66 /* JSONAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A2453FB81C81C62905E16C3FD41C15D /* JSONAdapter.swift */; }; 604D3C93C17978C23600EC415949AB64 /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45DCF5151BEFE9D3018AFB99FE8F580F /* ConstraintInsets.swift */; }; 611CEF7FF1EF9EA1BCEF6C73EEE3ACCF /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70E88BDB3FDACE8F2B23F3247435107D /* ConstraintLayoutGuide.swift */; }; 61FCA0616CE6512DCA67D74562D6EA1D /* ReflectionHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAF69AF530FDB1A1819B8E00A3E4775A /* ReflectionHelper.swift */; }; - 62294521012EBDF5183FB333DC5C0F1A /* SmartDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA316868E83DD6B6EB31EB4B0A87EB90 /* SmartDecodable.swift */; }; - 62A3A1BBFC4FE40DD36FD2DE8724AA08 /* JSONSingleValueEncodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2743D2660B497CF9171B80049A6254B2 /* JSONSingleValueEncodingContainer.swift */; }; 62C1A489E5C6414819815F3219B52FE8 /* URLTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 510325960A63C34B69B7173F76A69109 /* URLTransform.swift */; }; + 63CAEA94F586401016D74C882CF36FCD /* Patcher+Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CED1303830CD461EE4D0B1B76767EEC /* Patcher+Transformer.swift */; }; 640CCE9C3A28AA3CA15510899F9140EE /* FBSnapshotTestCasePlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 87EF2DCAFAACA539DB4A58A75FC36303 /* FBSnapshotTestCasePlatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 67684DA6FC62869722555B2B692597BF /* Patcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84318B394E1B7AA7A62F127B2AD82FB /* Patcher.swift */; }; 67F1963AA7C9EDB78127AD5F566A4949 /* UIImage+Diff.h in Headers */ = {isa = PBXBuildFile; fileRef = D283527F80A00FBB2FF5776A4E3B27B2 /* UIImage+Diff.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 68E95FB1A5A8401FB99920794041343F /* Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AFF21DDB3A5F41D266313B6BB8E85CC /* Transformer.swift */; }; 69DE75BA185BBAB5FDAA28321F3C849F /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05DE8DDCC94E79120DAB11B9DBD24069 /* ConstraintItem.swift */; }; 6AC1B881BB319C89AD023A02CDC8FC3D /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EE456287EB50E4B04F1A29EC19043B7 /* ConstraintLayoutGuide+Extensions.swift */; }; 6EAC8B6FA2D115DE708A58C601DD25E1 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD91016CD3E4DB108E6B6B782539B2EC /* Constraint.swift */; }; - 6FAA96BB68FE547684137B95F5705530 /* SmartCodable-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4522B54A668007E5C7BAE9AA3CBD9DF9 /* SmartCodable-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7018DA48BBE5B5A36DD63AEF50AF8F16 /* JSONValue+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C9909368B615A605A5844EA2A3B5775 /* JSONValue+Extension.swift */; }; + 7190C38D89A301621CB7E01C09FF12AD /* SmartEncodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50289A4369AA00415CB77222EC753C18 /* SmartEncodable.swift */; }; 731D27FC388519A4D24B52D2A29E11C8 /* Defaultable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 541A55046863031E15A9FA69EA99FE8E /* Defaultable.swift */; }; 74339C58AC4E5631FB8C0E662668A796 /* UIApplication+StrictKeyWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 87C56FECBDEE19803E1748DE1C16FBBA /* UIApplication+StrictKeyWindow.m */; }; - 7443DBAE6EDF8317C0E34FB6849A6E2A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57221B54D014471C3D3E1925EFC917C8 /* Foundation.framework */; }; 75A9C102F3A707CD1C58A32620CB97FB /* PrintFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F9222551C78E09BFE29291610498A56 /* PrintFormat.swift */; }; 78079FE3271F118CE83CFD8D5E4F8C21 /* TransformOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746BABF0910774EB502DC3C4F232413D /* TransformOf.swift */; }; 798C7D29511D498BDB7BEC4996708557 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CB9011E862E377A63B0CA2058DCEB78 /* Configuration.swift */; }; 79C7D4E9901AA11C25F8C71F3E9DF612 /* Properties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0600D0B09DB5802D6B378850043ADD4D /* Properties.swift */; }; - 79DFFAFFF2E66C8B2353339AEB7C368C /* LogContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BD2A8A6A6AF07EA45FEBFCD0E888972 /* LogContainer.swift */; }; 79FCA569BCE23251EE345047D3A15EFB /* BTBubble+Draw.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8396A1DCA6FC67A7830D34F6F815289 /* BTBubble+Draw.swift */; }; 7AD2DE331157EFDE3B334048A5509E27 /* DecodingStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D804957148656B5405037FC4821F4DB /* DecodingStrategy.swift */; }; 7C67CBD15D9B5D0B7769B2F469478332 /* FBSnapshotTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = A11B531AF457EC4F99F06F115FDE0A45 /* FBSnapshotTestCase.m */; }; 7D9031DCB898CD9DE37C4BD4F3FC550D /* DateFormatterTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76F616A528D452098E003EDF888C54AC /* DateFormatterTransform.swift */; }; + 80BEAF2CD68CB723DD0DC966F7F934A6 /* JSONUnkeyedEncodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60F9F3C9F4EC40E05E7E793D861F38AE /* JSONUnkeyedEncodingContainer.swift */; }; 846C97A8C420EFD9B8C4B77ADBB1E8F5 /* TransformType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E20ABA9C7B9C59A9D3A5EA7AB0215871 /* TransformType.swift */; }; - 856524D53848D8A483177D2AC503963D /* SmartFlat.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA355F56591A4B2ED4948A641503D5A6 /* SmartFlat.swift */; }; 85913D5AC8449037C282EB84450592A1 /* CleanJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D3430E32742C8A84D354226C873C6C /* CleanJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 869B56CCB4CD42940E094F803B9E1491 /* _SpecialTreatmentEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F7CB4AA09FC386F4AEA3F876318448C /* _SpecialTreatmentEncoder.swift */; }; + 85A0A5658FC4FE1082B06FBE2407C45B /* JSONFuture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 214A685AF5F66075AA464B6379029DAE /* JSONFuture.swift */; }; + 86EB92EDA31B229682FD289E4412799D /* SmartCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A874797EF0840708D4980AD55B3512C3 /* SmartCodable.swift */; }; 875A310EAF4D0C136C3FFFF5E0335BE4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DA24A38BA9EE106B59E3D4C8DD1CE0E /* UIKit.framework */; }; 884DB7B8E20C199509BC5B9A17263113 /* BTBubble.swift in Sources */ = {isa = PBXBuildFile; fileRef = F09645CD0AE835FD6F2CC1C70F2768E6 /* BTBubble.swift */; }; 8AE19756F0126FE92AF625E36F3D70FE /* UIImage+Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = 60E0A4F5EA0780653EDE0A8F48FE2B14 /* UIImage+Compare.h */; settings = {ATTRIBUTES = (Private, ); }; }; 8B85D89911D50E1DEAF25D920B6F3C5F /* Pods-SmartCodable_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AB62CDC1D9A84669428234D73C264AF /* Pods-SmartCodable_Example-dummy.m */; }; 8C3394695CB4CCECD873D1384F4BA076 /* Export.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B376CE8FE7B39265B74DCF06C524D2 /* Export.swift */; }; 8CD5DE204C3C5F6557878ADE2675A406 /* HelpingMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4749570A46F497B425767CB4569ADF9 /* HelpingMapper.swift */; }; - 8D3556BB6063CDEF78CD36FCE845A413 /* JSONDecoderImpl+UnkeyedContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FFA4851C0DDF4854A55A23373789958 /* JSONDecoderImpl+UnkeyedContainer.swift */; }; 8D72B695C7EF0186A0C0F1A18F944880 /* PropertyInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DCC7F0112605A85E8861B6A4E92D154 /* PropertyInfo.swift */; }; 8E181742809C6F03AE51D0F6E52E57DA /* BTPrint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68F996F21CE4381BFEAC8BDD8BC5E788 /* BTPrint.swift */; }; - 8E8B1CA2D22EF1ED40C132088CAD5236 /* JSONEncoderImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = A55888C63C71B327F88486B6AD7AB1E3 /* JSONEncoderImpl.swift */; }; + 8FFAD52B8FE8B1418A371B2F4577D25A /* JSONValue+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FF28B29930E68EA2F4E270AD51856B /* JSONValue+Extension.swift */; }; 90087A9E35991CBA33825140C0A58757 /* CleanJSONKeyedDecodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DFBE39A8F2F3352B5AB28C6FFC990E7 /* CleanJSONKeyedDecodingContainer.swift */; }; + 914055A3C0D5545281274C1D8A04A2B9 /* SmartDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBC01A60097AA2C3B9D1CB1471FE9BA /* SmartDecodable.swift */; }; 92CC91D4B6AF0B3E18068CCFBE36A3B7 /* BubbleTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE7E7A774098C77B700C918B4B303354 /* BubbleTools.swift */; }; - 946753DFD025B199BEDDC98243E0D938 /* JSONValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFDCC5CEBBCB596FEFDC2C47EFD224AC /* JSONValue.swift */; }; 95E194A3AABB5407231E898B6686F73E /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC6BD8F9EB57322C72A42B7031485790 /* ConstraintMakerRelatable+Extensions.swift */; }; 96D8402B4AFC4AC7349F1B487D6EB08C /* Transformable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2852BF0E7B62CAF6AB4E994FD9DFF2DF /* Transformable.swift */; }; 98F570DA48370453D648BD526FDAAEAA /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D20FD964253D6C1E0040497B2CA5505E /* LayoutConstraintItem.swift */; }; - 9980AB0041C2B3A5040B03A139F8F9EC /* SmartCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D78AA8B32A754F35A8C0EBB9F75CBBD /* SmartCodable.swift */; }; + 99A1CE0CB9556921DD65249CE3738005 /* URLTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D4A46A1379753F02FBCE6C10F06B21D /* URLTransformer.swift */; }; + 9A6AB1DF5A7D46504FF5DAA458C409A7 /* LogContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E876749C60E4D5D899279BFB1CAA6CFD /* LogContainer.swift */; }; 9A6CCC7BCACBE8218126670E6B08EF9E /* BTPrint-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6226D5547537E7D1F86B312E2F57D4F0 /* BTPrint-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9C271308C57ABF601FA728BDEF051CA2 /* SmartEncodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09980E45AC9049376D9CB477074B220 /* SmartEncodable.swift */; }; 9C9548E8B4675954566202F7B87FF0E6 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D588A73906F98B13FC731364A9247E2 /* ConstraintConstantTarget.swift */; }; + 9CE8B122210F37A746E7A3DB29D5D5E7 /* Patcher+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81FF5036284C558A020D1CA019129CE6 /* Patcher+Provider.swift */; }; 9D3C5E2F56838937146191468A893244 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E658F388F01C72599CA75537950B6095 /* XCTest.framework */; }; 9E02CFFEFE1BEC978B512286F03D31DA /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30C72CEDB9E9899CABE8976D237E6C74 /* ConstraintInsetTarget.swift */; }; + 9ECE16672429A42AD17DE432F38C5133 /* DecodingCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = A899927834949BE733C3B462269D7C60 /* DecodingCache.swift */; }; A03FDA8BC5741880B1EF11AFD248EF48 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFC3023119381C8AA8F1A4F4106F012A /* ConstraintOffsetTarget.swift */; }; A0BCC2B78BCA27EFAE901B4406942557 /* BTBubble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A77DB2179984C4C073E5FC6BDCD19B77 /* BTBubble-dummy.m */; }; A0E5EC9E431A5BD01C4695BC6AE5DEDA /* ExtendCustomModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1287F892FF63395DDABB49A2F8C39A3B /* ExtendCustomModelType.swift */; }; A2D6CC53EF61C755B77BBFF31B1F0E76 /* _CleanJSONDecoder+Decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = A247AF8B486EBFFB5B5CED8A27FD6D94 /* _CleanJSONDecoder+Decode.swift */; }; + A3A0155FFD20C255A0C9115D6906473B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57221B54D014471C3D3E1925EFC917C8 /* Foundation.framework */; }; A3E3AB7C765C21AE17B1E6EE6560040C /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FC33890F5B9F948392563B47A573A0 /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A46A4425E81D04C4BE4D35662090879A /* Patcher+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3B7F1B152F0AA98FA2D2291E6EF4CDE /* Patcher+Provider.swift */; }; - A53DAC9DCF8CFC2D8132F358358A711A /* Cachable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6669711F8D8DA962A99BCA3CA844C6E9 /* Cachable.swift */; }; A5A8BF973BFE9C9304372A26C9F2E35B /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCBDA27A176AE2D1C34BA797339DE8BB /* ConstraintMakerExtendable.swift */; }; A5E849B00E179FB98F3A2CC91378245A /* DecodingError+CleanJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9E5E84322D1072C445D51381EACDD7D /* DecodingError+CleanJSON.swift */; }; A674A2F3F5F0304A6524F702EA301B42 /* NSDecimalNumberTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD9C9CD93F7F692FE8121F7F78EE6DB8 /* NSDecimalNumberTransform.swift */; }; - A82CB75E0FBF78C93E1D221F306B1514 /* SmartAnyImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24969EF227BB11FD7DCCE6A7EED44FB8 /* SmartAnyImpl.swift */; }; AA75627FBC8A28CB9F9E26CDE0062EFE /* Pods-SmartCodable_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6021C11E2C3E5FCDE30179E13E0E6452 /* Pods-SmartCodable_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AC02F23C7A973408360250190ED04E4C /* LogCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4006851427C999AD7B42576C9ED35269 /* LogCache.swift */; }; - ACF7FD0E2F1722FB2684CAD5F0F9754C /* SmartLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8B77C6786A6560D0F28A173A47CBEE0 /* SmartLog.swift */; }; - AF083831A977430C74E2DD79239E9F70 /* SmartKeyDecodingStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 452E01D097B57F499E63BE4B112A9B16 /* SmartKeyDecodingStrategy.swift */; }; + AE67F2CB6F05CC86E2BF638EEBE16EDE /* JSONEncoderImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA20A04ED87342C08245FCCDD757CFDF /* JSONEncoderImpl.swift */; }; B03B5579590D528CBA6D11FF638BC2AF /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = F324FE66E2BF9B4B5B507729C64FD069 /* Typealiases.swift */; }; B43017FEC99D227D4CDD81DD2C27D9D9 /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EEAE2746CE46B4119A1EF4CB96853D4 /* ConstraintMakerPrioritizable.swift */; }; B52281F9F4340D4FC8ABB2FEB1FEC08E /* UIImage+Compare.m in Sources */ = {isa = PBXBuildFile; fileRef = C5688C4B8AAD0B0302EE6D8567AB0A03 /* UIImage+Compare.m */; }; + B6BB9565ED99667A7D8AFEB5BB6FB357 /* SmartAny.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12C1EB28501D74C0063A814AAABC72B8 /* SmartAny.swift */; }; B752F7C4BECB65894B1F49421049CE5F /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFE40591DCBDB38549AD0FC756F3D616 /* ConstraintView.swift */; }; - BB5649AF1187F9EA6F90B983C2A1DC8E /* URLTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9745BB72B5A3B7C0F0FBE5AB769F0B /* URLTransformer.swift */; }; + B78B93FF12028D01BB5FDE34B194186F /* SmartCodable-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 74C90F8263A4133C644A4865033EE349 /* SmartCodable-dummy.m */; }; + BB2BEF164BA71F210432FC489EC1A880 /* JSONParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBC09F57122DDB17D6552A3966AC5816 /* JSONParser.swift */; }; + BB92ADD171A75A3CFCAE4C4DB2ECE2A9 /* SmartCaseDefaultable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEE4A6C73268CF5FBC7BE3AA11263514 /* SmartCaseDefaultable.swift */; }; + BC4F43304CCD4CEA9C261FEC4A658574 /* DateTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB820D84387A26D571F9C2B5623A7565 /* DateTransformer.swift */; }; BD47CB74CD9B2B4D2D942C9B65748DFB /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 89305DC7AA8CF17C4DFF5582FDC4E381 /* SnapKit-dummy.m */; }; + BD4CD2D9AE5AC3515AEC4779298CF031 /* SmartJSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B9CD23AFAC8714F94482E32948963C /* SmartJSONDecoder.swift */; }; BD90F922C39E6EAEAD85EBD1F2363841 /* CodingKeysConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CDB55010FADC798A0E3768269292E5E /* CodingKeysConverter.swift */; }; BE432D00488E08C853DC689BE24C54F4 /* HandyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 26D82883F952766DDE67EB5398B66E76 /* HandyJSON-dummy.m */; }; - C07B7B52652B21207EBE47F104F1DAF1 /* JSONDecoderImpl+KeyedContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ECBF15BCB3A93D6F21CAACA322E25AC /* JSONDecoderImpl+KeyedContainer.swift */; }; - C0F572D6E53B27FE0055AA0E5AB84AF5 /* SafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3534F4E4B4427041509351D15B895F3D /* SafeDictionary.swift */; }; + C17C77D89CC82E5A744440373374CC5E /* SafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 743A6533D4D50D971E4C7AED9EAC7BE0 /* SafeDictionary.swift */; }; C390C6005353FB986CB52F474CEF8588 /* FBSnapshotTestController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAD959505600831AE1B1760854D7178 /* FBSnapshotTestController.m */; }; C586DC95274CF5AABAD935AF549A8FB6 /* BTBubble+Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4475151C4A7FB0660C3CDE88C6863EEF /* BTBubble+Location.swift */; }; C920144CE195D2198DAE63F2D976AADB /* HandyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 91D961BD3D7E5A4FD5EFC37B4EF49FD4 /* HandyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9F76407497DF0205D7460B36D22259F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3280BB5E7B57C31D41117A74F76E9DF3 /* QuartzCore.framework */; }; CA54C09A12400567AFFCB407EEB7E154 /* UIImage+Diff.m in Sources */ = {isa = PBXBuildFile; fileRef = 209CC75BF3B9E4EF12E2CCE8787F9095 /* UIImage+Diff.m */; }; + CAB32710FC64787F12D0A148872D2A24 /* LogItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FD6A69CE82729BA38530337F0612A11 /* LogItem.swift */; }; + CC1CA01AA2D95FABFA16195F269A8AFA /* JSONDecoderImpl+SingleValueContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD3A7793FAE1853E791CB079C4B50B63 /* JSONDecoderImpl+SingleValueContainer.swift */; }; CCCEE128C2F395CE7E3A13D343BC350B /* BTBubble+Animation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C236F0CDFBBFF56E8E482E41A943E19E /* BTBubble+Animation.swift */; }; CF7FAB0C5D474E379798F82E5DB4092B /* ContextDescriptorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 796F5B9A676DF8041A953891F97BCA27 /* ContextDescriptorType.swift */; }; - D5D2317CAD334B7F2E377833967C042A /* JSONDecoderImpl+Unwrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95EBB31F2830BE27E38D4FE66F18EE90 /* JSONDecoderImpl+Unwrap.swift */; }; - DC237D98BF3D52F611F16AB50B6358DD /* SmartCodable-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 53D51F602C52F04F5CB71BE0F8551F93 /* SmartCodable-dummy.m */; }; + D6974D975D146093556E2CEFC06CF3EA /* ColorTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BDD72969062AB65E9229808B6F2CE94 /* ColorTransformer.swift */; }; + DD497A62D094D47044BEE3F911A352E8 /* JSONDecoderImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17BA7C13C417D277BA9AAB657E815587 /* JSONDecoderImpl.swift */; }; DE13D920EE02866495C19B6484C998DD /* BTBubbleConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 666C02C1B42B0868B4A816FBD07E22A6 /* BTBubbleConfig.swift */; }; DF493E247E463CAC344C15784C9EF5AC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57221B54D014471C3D3E1925EFC917C8 /* Foundation.framework */; }; - E0F7FB86C184BE231F38E361118D95AC /* JSONParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = C01A3132ED5114F11C386F447287F57C /* JSONParser.swift */; }; - E1A549288829A53454B5D0647E11E6DC /* DataTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CB5E17D5752EEFA4FACC5806D56E2DA /* DataTransformer.swift */; }; + E209959737E5872C8BECBDD35D9056B0 /* SmartJSONEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DAEA986B1CA15E290DA5902E2BA1820 /* SmartJSONEncoder.swift */; }; + E2A21F764F8B46F16B40EF8D21E6FBB5 /* SmartPublished.swift in Sources */ = {isa = PBXBuildFile; fileRef = 114E927F855FC20BDDAEC0E49C059C70 /* SmartPublished.swift */; }; E2EF09A2D0A87418F0628B2CFAD304D8 /* Metadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1BBC050B82F2DBD3175EBCDBBAE1B6 /* Metadata.swift */; }; - E5841B5CDD395256F1E31D88D706583E /* LogItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF7985344EF5FCE8B0EA02B44157CF13 /* LogItem.swift */; }; + E3301DD4B6344B6C5377676E8DE646FE /* SmartAnyImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CBDB773D6CFE93A2E9F392152D4E6BD /* SmartAnyImpl.swift */; }; E7035A074129575E62A0136DD93D8E8F /* DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FD0E02013F60456068DC82258C06AB1 /* DateTransform.swift */; }; E710A550162879CE918FC411CF567789 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0965E60C4A8A6CB4CDB3FD2D5BF45433 /* Logger.swift */; }; E98DC8FB2578E76A812E0C94BA10E1B1 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3803A342F79D0DBAEE0150E93A6B807B /* ConstraintDirectionalInsets.swift */; }; @@ -186,80 +189,77 @@ EF21586EC3DFF6097A58EEC87376A0C1 /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1245F46A35053D954B8985EFAFD068D7 /* ConstraintLayoutGuideDSL.swift */; }; F16D0BB1231D60CBF7B3AE25B92D0D74 /* EnumTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = C30DC42DFE9E9BEB719E4821761599C5 /* EnumTransform.swift */; }; F47FA5DC0D1BD01F21FEE05C02A165AD /* _CleanJSONDecoder+Unbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7BBDFD017622786401A39F6BD9686C8 /* _CleanJSONDecoder+Unbox.swift */; }; - F73487EF44E6F79E972B5335E573E01B /* JSONKeyedEncodingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C489B232517D17DB8EDC664CA57C0218 /* JSONKeyedEncodingContainer.swift */; }; F7425A58E24926CCAC413F85D403B9FA /* FieldDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ACD8767AB4E2B782160808FED94FADE /* FieldDescriptor.swift */; }; F7C0960CEEB8F0C18F4503B405EAC08F /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 551BC954C9673D937C2CA52B935158E1 /* ConstraintMultiplierTarget.swift */; }; F953AA9104BFE0C2DAD639EA60104A75 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59BB800622705BC689D002AFE6C24643 /* ConstraintView+Extensions.swift */; }; F98E3202B0021DC8B2DB77256FBE5DD3 /* ISO8601DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = C57A6E8C38153E40B8497C02204DF7F4 /* ISO8601DateTransform.swift */; }; + F9ED89CA7C4D71A2AC379B689E526733 /* SmartFlat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E743427240405F9D4DFC6803DAE5D00 /* SmartFlat.swift */; }; FAB03959C2357E325B19E08BC4775DAB /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A4757260F219342EC59610827085045 /* ConstraintMaker.swift */; }; - FB996AA9AD236E2D353B68BD10AAD59E /* EncodingCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FF6C295EA60F3701557941049EF920D /* EncodingCache.swift */; }; - FD51EBCB0539A93F0FD84EBE4C24B4E6 /* Patcher+Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60C75B0E1E9EBF948044BDE0F83EF802 /* Patcher+Transformer.swift */; }; - FDB88B71E230C8F3FC5565AC751F9549 /* JSONFuture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D572B9A00DDC548FB5EA35A1E339393 /* JSONFuture.swift */; }; + FC8F033B78C44ACF0446FA2300084879 /* LogCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 312B4E3A4A5FE501E0DDF353C993D47B /* LogCache.swift */; }; FEFE2DDEB18C3D76F500C974F166CD53 /* CaseDefaultable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBDE8674ED579EE94A0773028BD44AF1 /* CaseDefaultable.swift */; }; FF8307B7346F4D3BA13C11AECFE6EDD0 /* FBSnapshotTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = 20BC59163CF72AADA6459ADA846EBF1F /* FBSnapshotTestCase.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0BDC7C20613502D8AB78280A113BC9FF /* PBXContainerItemProxy */ = { + 00447BA89B43FCCA005ECFBA868A6896 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 10D88C24864319FF583AD6D156896F32; - remoteInfo = HandyJSON; + remoteGlobalIDString = 86A81D2B2BFEFD93197A1D6C3C7EF60A; + remoteInfo = BTPrint; }; - 368190FF68A1BFDDCB6303CD6A601C4F /* PBXContainerItemProxy */ = { + 0397EE3763A641B8B718933ACE58C9C6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 300904838EEDDC3BB8242817D8F97CB6; - remoteInfo = CleanJSON; + remoteGlobalIDString = 8ABBD9D5C40976C9B3FC1E227AAC109C; + remoteInfo = BTBubble; }; - 3C379A41743D9549D81F9BED83C35C90 /* PBXContainerItemProxy */ = { + 20CB5A542481E5BEB663DF15D8E8CC7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; + remoteGlobalIDString = BD33823B9D08265B6F1D35EC259EE307; + remoteInfo = SmartCodable; }; - 4F219DA66BC80D3FB997F6EDB8E5C54C /* PBXContainerItemProxy */ = { + 268B6FB18F60CE24008B205A51738B35 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 98A98149697C80CEF8D5772791E92E66; remoteInfo = FBSnapshotTestCase; }; - 5EEDD5D6D0427464FAB674A3F9536AB0 /* PBXContainerItemProxy */ = { + 4158AA0869474981980A214F0A9247B4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = B8474377209826CA7C2ADD548D40C1EA; - remoteInfo = "Pods-SmartCodable_Example"; + remoteGlobalIDString = 10D88C24864319FF583AD6D156896F32; + remoteInfo = HandyJSON; }; - 653B96460FE90CF4373D1E62933C99F1 /* PBXContainerItemProxy */ = { + 4A63A8D5327A16F55B547D60B34756CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 8ABBD9D5C40976C9B3FC1E227AAC109C; - remoteInfo = BTBubble; + remoteGlobalIDString = B8474377209826CA7C2ADD548D40C1EA; + remoteInfo = "Pods-SmartCodable_Example"; }; - B1CF3F11BB47503F685F009B7AB1DE22 /* PBXContainerItemProxy */ = { + A08BD463F0E598F3C8834CF7AC850D53 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = BD33823B9D08265B6F1D35EC259EE307; - remoteInfo = SmartCodable; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; }; - FB6A9FCEFB35DC8380CBABC10ECD9BF3 /* PBXContainerItemProxy */ = { + FCA4FE005E1F2110E6529F126611D189 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 86A81D2B2BFEFD93197A1D6C3C7EF60A; - remoteInfo = BTPrint; + remoteGlobalIDString = 300904838EEDDC3BB8242817D8F97CB6; + remoteInfo = CleanJSON; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0191B942D4B65CBE15AF9B5302AE1115 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 019BF859EEBE1D8469A3CE37606A8760 /* HandyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = HandyJSON.modulemap; sourceTree = ""; }; 02A4470686F2D00D08E538160531B64E /* BTBubble+Menu.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BTBubble+Menu.swift"; path = "BTBubble/Classes/BTBubble+Menu.swift"; sourceTree = ""; }; 02B734C740F66C4CA7D3E58A2E3A71ED /* UIImage+Snapshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Snapshot.m"; path = "FBSnapshotTestCase/Categories/UIImage+Snapshot.m"; sourceTree = ""; }; @@ -269,46 +269,49 @@ 07ADF3C4B3DE46FA90A67725C575E757 /* _CleanJSONDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = _CleanJSONDecoder.swift; path = Sources/CleanJSON/_CleanJSONDecoder.swift; sourceTree = ""; }; 0965E60C4A8A6CB4CDB3FD2D5BF45433 /* Logger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Logger.swift; path = Source/Logger.swift; sourceTree = ""; }; 0B9662B4BE2283F2E38F7155D5266F8E /* Pods-SmartCodable_Tests */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-SmartCodable_Tests"; path = Pods_SmartCodable_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0CB5E17D5752EEFA4FACC5806D56E2DA /* DataTransformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DataTransformer.swift; sourceTree = ""; }; 0EE11E0147F987FD843DF343F4BEF9C5 /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; }; 0F043A0A52D038042BE4B2E250F39C46 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; 0F3C77A10532266D4C2017D4C5657D22 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Sources/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; 0F6C61A3718CAD5B727FA89E9A50D662 /* CleanJSON.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CleanJSON.debug.xcconfig; sourceTree = ""; }; 0FD0E02013F60456068DC82258C06AB1 /* DateTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateTransform.swift; path = Source/DateTransform.swift; sourceTree = ""; }; - 0FFA4851C0DDF4854A55A23373789958 /* JSONDecoderImpl+UnkeyedContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoderImpl+UnkeyedContainer.swift"; sourceTree = ""; }; + 114E927F855FC20BDDAEC0E49C059C70 /* SmartPublished.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartPublished.swift; sourceTree = ""; }; 1245F46A35053D954B8985EFAFD068D7 /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Sources/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; 1287F892FF63395DDABB49A2F8C39A3B /* ExtendCustomModelType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtendCustomModelType.swift; path = Source/ExtendCustomModelType.swift; sourceTree = ""; }; + 12C1EB28501D74C0063A814AAABC72B8 /* SmartAny.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartAny.swift; sourceTree = ""; }; 12D66D4EBB5005BCB197AA15A08144D1 /* BTPrint.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BTPrint.release.xcconfig; sourceTree = ""; }; + 16DE0323BE27EF402AD3DE841312EEC5 /* SmartCodable-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SmartCodable-umbrella.h"; sourceTree = ""; }; + 17BA7C13C417D277BA9AAB657E815587 /* JSONDecoderImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONDecoderImpl.swift; sourceTree = ""; }; + 19B9CD23AFAC8714F94482E32948963C /* SmartJSONDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartJSONDecoder.swift; sourceTree = ""; }; 1A2453FB81C81C62905E16C3FD41C15D /* JSONAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JSONAdapter.swift; path = Sources/CleanJSON/JSONAdapter.swift; sourceTree = ""; }; 1ACD8767AB4E2B782160808FED94FADE /* FieldDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FieldDescriptor.swift; path = Source/FieldDescriptor.swift; sourceTree = ""; }; - 1D572B9A00DDC548FB5EA35A1E339393 /* JSONFuture.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONFuture.swift; sourceTree = ""; }; 1DA24A38BA9EE106B59E3D4C8DD1CE0E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 1DAEA986B1CA15E290DA5902E2BA1820 /* SmartJSONEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartJSONEncoder.swift; sourceTree = ""; }; 1EE51CB52688C6956C3806BE1352E6A1 /* BTPrint.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BTPrint.debug.xcconfig; sourceTree = ""; }; - 1F7CB4AA09FC386F4AEA3F876318448C /* _SpecialTreatmentEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = _SpecialTreatmentEncoder.swift; sourceTree = ""; }; 209CC75BF3B9E4EF12E2CCE8787F9095 /* UIImage+Diff.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Diff.m"; path = "FBSnapshotTestCase/Categories/UIImage+Diff.m"; sourceTree = ""; }; 20BC59163CF72AADA6459ADA846EBF1F /* FBSnapshotTestCase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestCase.h; path = FBSnapshotTestCase/FBSnapshotTestCase.h; sourceTree = ""; }; - 21F733C10404C35E050A56B18417CB90 /* SmartJSONEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartJSONEncoder.swift; sourceTree = ""; }; + 214A685AF5F66075AA464B6379029DAE /* JSONFuture.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONFuture.swift; sourceTree = ""; }; 233DAEDE45A5CF0A47B6462C8C9F92B4 /* UIApplication+StrictKeyWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+StrictKeyWindow.h"; path = "FBSnapshotTestCase/Categories/UIApplication+StrictKeyWindow.h"; sourceTree = ""; }; + 2391A45CB07E7373F5542CCBA67C07D9 /* IgnoredKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = IgnoredKey.swift; sourceTree = ""; }; 24562DC38CD0C27E5FCC2152077E3513 /* BTBubble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BTBubble-prefix.pch"; sourceTree = ""; }; - 24969EF227BB11FD7DCCE6A7EED44FB8 /* SmartAnyImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartAnyImpl.swift; sourceTree = ""; }; 2565E609AC51A4E4FCA81F2594C690F6 /* FBSnapshotTestCase.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSnapshotTestCase.debug.xcconfig; sourceTree = ""; }; 25A597F47861F7BE3A2E02D5EC48740D /* FBSnapshotTestCase-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FBSnapshotTestCase-Info.plist"; sourceTree = ""; }; 26D82883F952766DDE67EB5398B66E76 /* HandyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "HandyJSON-dummy.m"; sourceTree = ""; }; - 2743D2660B497CF9171B80049A6254B2 /* JSONSingleValueEncodingContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONSingleValueEncodingContainer.swift; sourceTree = ""; }; 274BB5419B8D40BD05519C560CFC077D /* BTBubble-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "BTBubble-Info.plist"; sourceTree = ""; }; 2852BF0E7B62CAF6AB4E994FD9DFF2DF /* Transformable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transformable.swift; path = Source/Transformable.swift; sourceTree = ""; }; 2CAD959505600831AE1B1760854D7178 /* FBSnapshotTestController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestController.m; path = FBSnapshotTestCase/FBSnapshotTestController.m; sourceTree = ""; }; + 2CED1303830CD461EE4D0B1B76767EEC /* Patcher+Transformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Patcher+Transformer.swift"; sourceTree = ""; }; + 2D76DE7139B532063A6055FBA46589B8 /* JSONDecoderImpl+KeyedContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoderImpl+KeyedContainer.swift"; sourceTree = ""; }; 2D804957148656B5405037FC4821F4DB /* DecodingStrategy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DecodingStrategy.swift; path = Sources/CleanJSON/DecodingStrategy.swift; sourceTree = ""; }; 2DBF99060B70E1B6830A780BA2524ADA /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Sources/ConstraintPriorityTarget.swift; sourceTree = ""; }; 2DCC7F0112605A85E8861B6A4E92D154 /* PropertyInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PropertyInfo.swift; path = Source/PropertyInfo.swift; sourceTree = ""; }; 2E274A3EAC25DB6D5C25C3CBB604248B /* Deserializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deserializer.swift; path = Source/Deserializer.swift; sourceTree = ""; }; 2EBF008F9DBB55C9A18375B6B87D22A3 /* HandyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HandyJSON-prefix.pch"; sourceTree = ""; }; 30C72CEDB9E9899CABE8976D237E6C74 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Sources/ConstraintInsetTarget.swift; sourceTree = ""; }; - 31209995A953E9383DF4F23549B1CA09 /* DecodingError+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "DecodingError+Extension.swift"; sourceTree = ""; }; + 312B4E3A4A5FE501E0DDF353C993D47B /* LogCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LogCache.swift; sourceTree = ""; }; 319CD0A8663A00A572B4418C10FE8894 /* BTBubble+Check.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BTBubble+Check.swift"; path = "BTBubble/Classes/BTBubble+Check.swift"; sourceTree = ""; }; 3280BB5E7B57C31D41117A74F76E9DF3 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; 32B376CE8FE7B39265B74DCF06C524D2 /* Export.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Export.swift; path = Source/Export.swift; sourceTree = ""; }; - 3534F4E4B4427041509351D15B895F3D /* SafeDictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SafeDictionary.swift; sourceTree = ""; }; + 33D493F4A1649816722315B147959195 /* DataTransformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DataTransformer.swift; sourceTree = ""; }; 36EE49CE4B82B9346139D56A516D1DB0 /* Pods-SmartCodable_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SmartCodable_Tests.debug.xcconfig"; sourceTree = ""; }; 36F93E9634821D816540140F7E1D6199 /* HexColorTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HexColorTransform.swift; path = Source/HexColorTransform.swift; sourceTree = ""; }; 3803A342F79D0DBAEE0150E93A6B807B /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Sources/ConstraintDirectionalInsets.swift; sourceTree = ""; }; @@ -316,31 +319,30 @@ 39B2DBA2FFE481C74723D3D77C1C4151 /* CleanJSONUnkeyedDecodingContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CleanJSONUnkeyedDecodingContainer.swift; path = Sources/CleanJSON/CleanJSONUnkeyedDecodingContainer.swift; sourceTree = ""; }; 3A10F19A7083CCBB70471917A1BD6C04 /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; 3B1648D17E6B6A33B54A7906BC560E10 /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Sources/ConstraintPriority.swift; sourceTree = ""; }; + 3CBDB773D6CFE93A2E9F392152D4E6BD /* SmartAnyImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartAnyImpl.swift; sourceTree = ""; }; + 3D4A46A1379753F02FBCE6C10F06B21D /* URLTransformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = URLTransformer.swift; sourceTree = ""; }; 3E623AAE662B463FDDE8B268BDEA3E7B /* SmartCodable */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SmartCodable; path = SmartCodable.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3E6F38F38A655D1D2F8385D4A13D03BD /* FBSnapshotTestCase.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSnapshotTestCase.release.xcconfig; sourceTree = ""; }; 3EF66D087C187059D6E79CD68D3907BC /* Pods-SmartCodable_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SmartCodable_Tests-acknowledgements.plist"; sourceTree = ""; }; - 3F3FDC5FCC431AA5CF0EDB1E45F721A0 /* SmartCodable-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SmartCodable-Info.plist"; sourceTree = ""; }; - 4006851427C999AD7B42576C9ED35269 /* LogCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LogCache.swift; sourceTree = ""; }; + 3FD7F8031F4CC7E3EF669464EA390A76 /* JSONDecoderImpl+Unwrap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoderImpl+Unwrap.swift"; sourceTree = ""; }; 418DA1AEA18C4A4A1E5D84FCB60DA427 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Sources/Debugging.swift; sourceTree = ""; }; 43FB1C7B536B80216B8B21E7440AEC8C /* Pods-SmartCodable_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-SmartCodable_Tests.modulemap"; sourceTree = ""; }; 4475151C4A7FB0660C3CDE88C6863EEF /* BTBubble+Location.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BTBubble+Location.swift"; path = "BTBubble/Classes/BTBubble+Location.swift"; sourceTree = ""; }; - 4522B54A668007E5C7BAE9AA3CBD9DF9 /* SmartCodable-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SmartCodable-umbrella.h"; sourceTree = ""; }; - 452E01D097B57F499E63BE4B112A9B16 /* SmartKeyDecodingStrategy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartKeyDecodingStrategy.swift; sourceTree = ""; }; 45DCF5151BEFE9D3018AFB99FE8F580F /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Sources/ConstraintInsets.swift; sourceTree = ""; }; + 4628EDC5D3E832597B6F2DEC7BD8F689 /* SmartKeyDecodingStrategy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartKeyDecodingStrategy.swift; sourceTree = ""; }; 464021711643A3159A0B5B78CCC0347A /* Pods-SmartCodable_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SmartCodable_Tests-acknowledgements.markdown"; sourceTree = ""; }; 464FF18D590547BE7F4826907AFFE76D /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Sources/ConstraintRelation.swift; sourceTree = ""; }; 46D532B60E5A862BAED6B9ED6A3A06F7 /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Sources/LayoutConstraint.swift; sourceTree = ""; }; - 483E5F1F1C340F61905A0907694620D4 /* SmartCodable.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SmartCodable.modulemap; sourceTree = ""; }; - 4844C3AE5731C372261F2F1D5129A42C /* SmartUpdater.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartUpdater.swift; sourceTree = ""; }; 4A29F6A0D45AF40A67824A0487C3A989 /* FBSnapshotTestController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestController.h; path = FBSnapshotTestCase/FBSnapshotTestController.h; sourceTree = ""; }; 4B3CBC4CFD3D5E9ABDC56DDC685EACE4 /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Sources/ConstraintMakerEditable.swift; sourceTree = ""; }; 4B882D619BB4F3DBCA3958CF51481D0F /* Pods-SmartCodable_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-SmartCodable_Example.modulemap"; sourceTree = ""; }; 4C4A4F11E0D54192FCD7E73E00FD2841 /* Pods-SmartCodable_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SmartCodable_Tests-frameworks.sh"; sourceTree = ""; }; 4CAE8816531C7030F85857D829CF295C /* BTBubble-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BTBubble-umbrella.h"; sourceTree = ""; }; 4FD9F7D2497A25B05DF82AF7F12F84DF /* BTBubble.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BTBubble.debug.xcconfig; sourceTree = ""; }; + 50289A4369AA00415CB77222EC753C18 /* SmartEncodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartEncodable.swift; sourceTree = ""; }; 510325960A63C34B69B7173F76A69109 /* URLTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLTransform.swift; path = Source/URLTransform.swift; sourceTree = ""; }; + 51C0E9B59561302B7057595838F0BC60 /* EncodingCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EncodingCache.swift; sourceTree = ""; }; 537BE90B32A5F1814137F702A3A820F6 /* HandyJSON.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HandyJSON.debug.xcconfig; sourceTree = ""; }; - 53D51F602C52F04F5CB71BE0F8551F93 /* SmartCodable-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SmartCodable-dummy.m"; sourceTree = ""; }; 541A55046863031E15A9FA69EA99FE8E /* Defaultable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Defaultable.swift; path = Sources/CleanJSON/Defaultable.swift; sourceTree = ""; }; 544353E196F6C41D2674EF54DDCED631 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Sources/ConstraintLayoutSupport.swift; sourceTree = ""; }; 54E6DE8DDA000868195FED827A109AD1 /* BTPrint-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BTPrint-prefix.pch"; sourceTree = ""; }; @@ -348,33 +350,37 @@ 555C1F46B8C3D9749B4FADF32ED4458D /* CleanJSONKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CleanJSONKey.swift; path = Sources/CleanJSON/CleanJSONKey.swift; sourceTree = ""; }; 56F3BDAC789DF61F2D9350035669FEE3 /* CleanJSON-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CleanJSON-Info.plist"; sourceTree = ""; }; 57221B54D014471C3D3E1925EFC917C8 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 5908FCB5507214584AC792887EF96311 /* SmartCodable-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SmartCodable-prefix.pch"; sourceTree = ""; }; + 57ABB808729D0960596E20534FFCE2FD /* KeysMapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeysMapper.swift; sourceTree = ""; }; 59BB800622705BC689D002AFE6C24643 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Sources/ConstraintView+Extensions.swift"; sourceTree = ""; }; + 5AFF21DDB3A5F41D266313B6BB8E85CC /* Transformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Transformer.swift; sourceTree = ""; }; + 5BC8255EB144B2BAA28F1F9E896F07A4 /* JSONKeyedEncodingContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONKeyedEncodingContainer.swift; sourceTree = ""; }; 5C4F31330DFA99D699E4BDC8C3573D73 /* FBSnapshotTestCase */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBSnapshotTestCase; path = FBSnapshotTestCase.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5D1C54C47A2FE062765D133366160F7F /* Pods-SmartCodable_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SmartCodable_Example-acknowledgements.plist"; sourceTree = ""; }; 5DAD6DAD58F97DC6978669ECC1DCB217 /* _CleanJSONDecoder+SingleValueDecodingContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "_CleanJSONDecoder+SingleValueDecodingContainer.swift"; path = "Sources/CleanJSON/_CleanJSONDecoder+SingleValueDecodingContainer.swift"; sourceTree = ""; }; 5EE456287EB50E4B04F1A29EC19043B7 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Sources/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; 6021C11E2C3E5FCDE30179E13E0E6452 /* Pods-SmartCodable_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SmartCodable_Example-umbrella.h"; sourceTree = ""; }; 60B0F726C42000735EC1B76226554746 /* UIImage+Snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Snapshot.h"; path = "FBSnapshotTestCase/Categories/UIImage+Snapshot.h"; sourceTree = ""; }; - 60C75B0E1E9EBF948044BDE0F83EF802 /* Patcher+Transformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Patcher+Transformer.swift"; sourceTree = ""; }; 60E0A4F5EA0780653EDE0A8F48FE2B14 /* UIImage+Compare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Compare.h"; path = "FBSnapshotTestCase/Categories/UIImage+Compare.h"; sourceTree = ""; }; + 60F9F3C9F4EC40E05E7E793D861F38AE /* JSONUnkeyedEncodingContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONUnkeyedEncodingContainer.swift; sourceTree = ""; }; 6170F13C22D7194151A678E232C31D12 /* Pods-SmartCodable_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SmartCodable_Example.release.xcconfig"; sourceTree = ""; }; 6226D5547537E7D1F86B312E2F57D4F0 /* BTPrint-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BTPrint-umbrella.h"; sourceTree = ""; }; 63337F29437FD6A05DCA6E50C4DF6945 /* ExtendCustomBasicType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtendCustomBasicType.swift; path = Source/ExtendCustomBasicType.swift; sourceTree = ""; }; 63D6FCCD448B91FE5083D3C830B09E34 /* BTPrint */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = BTPrint; path = BTPrint.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6669711F8D8DA962A99BCA3CA844C6E9 /* Cachable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Cachable.swift; sourceTree = ""; }; + 6444393AFB3BD991BAE85797BA7EF414 /* SmartColor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartColor.swift; sourceTree = ""; }; 666C02C1B42B0868B4A816FBD07E22A6 /* BTBubbleConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BTBubbleConfig.swift; path = BTBubble/Classes/BTBubbleConfig.swift; sourceTree = ""; }; 68F996F21CE4381BFEAC8BDD8BC5E788 /* BTPrint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BTPrint.swift; path = BTPrint/Classes/BTPrint.swift; sourceTree = ""; }; - 6B5A4B099D6B6C19273025A7E4BC6B7B /* SmartColor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartColor.swift; sourceTree = ""; }; 6B6AE0B9AEB52789C2BA9C70151E337A /* MangledName.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MangledName.swift; path = Source/MangledName.swift; sourceTree = ""; }; - 6BD2A8A6A6AF07EA45FEBFCD0E888972 /* LogContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LogContainer.swift; sourceTree = ""; }; 6CDB55010FADC798A0E3768269292E5E /* CodingKeysConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CodingKeysConverter.swift; path = Sources/CleanJSON/CodingKeysConverter.swift; sourceTree = ""; }; 6CF935F6F0BF80B0C79325C2A66921C8 /* HandyJSON.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HandyJSON.release.xcconfig; sourceTree = ""; }; 6DFBE39A8F2F3352B5AB28C6FFC990E7 /* CleanJSONKeyedDecodingContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CleanJSONKeyedDecodingContainer.swift; path = Sources/CleanJSON/CleanJSONKeyedDecodingContainer.swift; sourceTree = ""; }; 6FD01EC1237ED966BE6C99E868971093 /* Serializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Serializer.swift; path = Source/Serializer.swift; sourceTree = ""; }; + 6FD6A69CE82729BA38530337F0612A11 /* LogItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LogItem.swift; sourceTree = ""; }; 70E88BDB3FDACE8F2B23F3247435107D /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Sources/ConstraintLayoutGuide.swift; sourceTree = ""; }; 70EF9FF8800B0AA22F5E4FE76FECA8D7 /* Pods-SmartCodable_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SmartCodable_Example-Info.plist"; sourceTree = ""; }; + 727E2EEF9E6C9854B1A98AF4CB6EFCE9 /* SmartLog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartLog.swift; sourceTree = ""; }; + 743A6533D4D50D971E4C7AED9EAC7BE0 /* SafeDictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SafeDictionary.swift; sourceTree = ""; }; 746BABF0910774EB502DC3C4F232413D /* TransformOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformOf.swift; path = Source/TransformOf.swift; sourceTree = ""; }; + 74C90F8263A4133C644A4865033EE349 /* SmartCodable-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SmartCodable-dummy.m"; sourceTree = ""; }; 7570803E9622B6523B3325B01B79E44B /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Sources/ConstraintDescription.swift; sourceTree = ""; }; 767825513CDDC33C98AB0A7A3C9681D4 /* Pods-SmartCodable_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SmartCodable_Example-frameworks.sh"; sourceTree = ""; }; 76F616A528D452098E003EDF888C54AC /* DateFormatterTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateFormatterTransform.swift; path = Source/DateFormatterTransform.swift; sourceTree = ""; }; @@ -383,124 +389,120 @@ 7D0C0E237F70C307DF23B940F50265F5 /* Measuable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Measuable.swift; path = Source/Measuable.swift; sourceTree = ""; }; 7D588A73906F98B13FC731364A9247E2 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = ""; }; 7E920302DBA2124AFF869243E5CB6351 /* BuiltInBridgeType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BuiltInBridgeType.swift; path = Source/BuiltInBridgeType.swift; sourceTree = ""; }; - 7ECBF15BCB3A93D6F21CAACA322E25AC /* JSONDecoderImpl+KeyedContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoderImpl+KeyedContainer.swift"; sourceTree = ""; }; 7EEAE2746CE46B4119A1EF4CB96853D4 /* ConstraintMakerPrioritizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPrioritizable.swift; path = Sources/ConstraintMakerPrioritizable.swift; sourceTree = ""; }; 7F1BBC050B82F2DBD3175EBCDBBAE1B6 /* Metadata.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Metadata.swift; path = Source/Metadata.swift; sourceTree = ""; }; 7F9222551C78E09BFE29291610498A56 /* PrintFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrintFormat.swift; path = BTPrint/Classes/PrintFormat.swift; sourceTree = ""; }; 7FF03B8E2DF800F666228FD3C0F9026B /* FBSnapshotTestCase-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSnapshotTestCase-umbrella.h"; sourceTree = ""; }; - 7FF6C295EA60F3701557941049EF920D /* EncodingCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EncodingCache.swift; sourceTree = ""; }; - 85AA1A9803E90CE6BC7ADDF5965F33F7 /* DecodingCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DecodingCache.swift; sourceTree = ""; }; + 81FF5036284C558A020D1CA019129CE6 /* Patcher+Provider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Patcher+Provider.swift"; sourceTree = ""; }; 85D2CD4F67092C56E310282E114ADE5B /* Pods-SmartCodable_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SmartCodable_Example-acknowledgements.markdown"; sourceTree = ""; }; - 860DA5499F796D40F05197157FEAA96F /* SmartCodable.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SmartCodable.release.xcconfig; sourceTree = ""; }; - 872A303F84F8E2A8F34473198AC0ABAB /* DateTransformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DateTransformer.swift; sourceTree = ""; }; 87C56FECBDEE19803E1748DE1C16FBBA /* UIApplication+StrictKeyWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIApplication+StrictKeyWindow.m"; path = "FBSnapshotTestCase/Categories/UIApplication+StrictKeyWindow.m"; sourceTree = ""; }; 87EF2DCAFAACA539DB4A58A75FC36303 /* FBSnapshotTestCasePlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestCasePlatform.h; path = FBSnapshotTestCase/FBSnapshotTestCasePlatform.h; sourceTree = ""; }; 89305DC7AA8CF17C4DFF5582FDC4E381 /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; - 8A02695CA5BA14EF7D6013FAB142889E /* SmartJSONDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartJSONDecoder.swift; sourceTree = ""; }; + 8BDD72969062AB65E9229808B6F2CE94 /* ColorTransformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ColorTransformer.swift; sourceTree = ""; }; 8D31C1D12C0D9C516CE738486208A159 /* HandyJSON.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HandyJSON.h; path = Source/HandyJSON.h; sourceTree = ""; }; - 8F22E01957313DD33E69A20A61F7ADBB /* Transformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Transformer.swift; sourceTree = ""; }; 9121AADFDAA9E940775A36390D6DDBC7 /* ToJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToJSON.swift; path = Sources/CleanJSON/ToJSON.swift; sourceTree = ""; }; 91D961BD3D7E5A4FD5EFC37B4EF49FD4 /* HandyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HandyJSON-umbrella.h"; sourceTree = ""; }; 926AFEC77F93BCAD652BB781C5D0AA8C /* BTPrint-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BTPrint-dummy.m"; sourceTree = ""; }; - 92D0AE3BD80E870CCAA5AE5CF580E549 /* SmartCodable.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = SmartCodable.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 939CD691A4C331500EEFE204BAB43C57 /* SmartCodable-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SmartCodable-Info.plist"; sourceTree = ""; }; 93B6822011E346FDFA44C5A0CAB94482 /* BuiltInBasicType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BuiltInBasicType.swift; path = Source/BuiltInBasicType.swift; sourceTree = ""; }; - 95EBB31F2830BE27E38D4FE66F18EE90 /* JSONDecoderImpl+Unwrap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoderImpl+Unwrap.swift"; sourceTree = ""; }; + 95DCB970D3A1645FD2DD54A0A47E8E63 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + 968743DB7D00A0751F7D7842D998B698 /* _SpecialTreatmentEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = _SpecialTreatmentEncoder.swift; sourceTree = ""; }; + 969F04EFBFF10592BD8EDB9FD9C29F9D /* Cachable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Cachable.swift; sourceTree = ""; }; 96FC33890F5B9F948392563B47A573A0 /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; - 9741C9099C80C82AA38386510EE0634D /* SmartCaseDefaultable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartCaseDefaultable.swift; sourceTree = ""; }; 979486118B3E90C08386079D57962701 /* SnapKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 992A16CABA4C83CBEACADDABDE5021A8 /* SwiftSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftSupport.swift; path = FBSnapshotTestCase/SwiftSupport.swift; sourceTree = ""; }; - 99F56CDCDED62FFB08323F03A9F714B3 /* Patcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Patcher.swift; sourceTree = ""; }; 9A4757260F219342EC59610827085045 /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Sources/ConstraintMaker.swift; sourceTree = ""; }; 9AB62CDC1D9A84669428234D73C264AF /* Pods-SmartCodable_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SmartCodable_Example-dummy.m"; sourceTree = ""; }; - 9C9909368B615A605A5844EA2A3B5775 /* JSONValue+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONValue+Extension.swift"; sourceTree = ""; }; 9D5AD1AE1022A579A49D4DE848C3C5D9 /* PointerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PointerType.swift; path = Source/PointerType.swift; sourceTree = ""; }; - 9D78AA8B32A754F35A8C0EBB9F75CBBD /* SmartCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartCodable.swift; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9E743427240405F9D4DFC6803DAE5D00 /* SmartFlat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartFlat.swift; sourceTree = ""; }; A11B531AF457EC4F99F06F115FDE0A45 /* FBSnapshotTestCase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestCase.m; path = FBSnapshotTestCase/FBSnapshotTestCase.m; sourceTree = ""; }; A247AF8B486EBFFB5B5CED8A27FD6D94 /* _CleanJSONDecoder+Decode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "_CleanJSONDecoder+Decode.swift"; path = "Sources/CleanJSON/_CleanJSONDecoder+Decode.swift"; sourceTree = ""; }; A370EE4D019ADFE65F2DC1FF9EDBA187 /* CleanJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CleanJSON-dummy.m"; sourceTree = ""; }; - A3B7F1B152F0AA98FA2D2291E6EF4CDE /* Patcher+Provider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Patcher+Provider.swift"; sourceTree = ""; }; A4CFCEB2A58CA7A3CB15E26DD28CA8D6 /* Pods-SmartCodable_Example */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-SmartCodable_Example"; path = Pods_SmartCodable_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A55888C63C71B327F88486B6AD7AB1E3 /* JSONEncoderImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONEncoderImpl.swift; sourceTree = ""; }; A77DB2179984C4C073E5FC6BDCD19B77 /* BTBubble-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BTBubble-dummy.m"; sourceTree = ""; }; A8396A1DCA6FC67A7830D34F6F815289 /* BTBubble+Draw.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BTBubble+Draw.swift"; path = "BTBubble/Classes/BTBubble+Draw.swift"; sourceTree = ""; }; + A874797EF0840708D4980AD55B3512C3 /* SmartCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartCodable.swift; sourceTree = ""; }; + A899927834949BE733C3B462269D7C60 /* DecodingCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DecodingCache.swift; sourceTree = ""; }; AB1035777F9D0FAD25F91B78CF571685 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Sources/ConstraintMakerFinalizable.swift; sourceTree = ""; }; - AD9745BB72B5A3B7C0F0FBE5AB769F0B /* URLTransformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = URLTransformer.swift; sourceTree = ""; }; + ACE89CF54300FD0B06F1A646317306B0 /* SmartCodable.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SmartCodable.release.xcconfig; sourceTree = ""; }; ADDD58F0A7F5CBCD84256A572196E486 /* CustomDateFormatTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomDateFormatTransform.swift; path = Source/CustomDateFormatTransform.swift; sourceTree = ""; }; - AE3994DC269F18D22356B445B6E38226 /* JSONDecoderImpl+SingleValueContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoderImpl+SingleValueContainer.swift"; sourceTree = ""; }; - AF7985344EF5FCE8B0EA02B44157CF13 /* LogItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LogItem.swift; sourceTree = ""; }; - B0CEE409E4A4D2FDA4F0F3586EBE7D61 /* SmartAny.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartAny.swift; sourceTree = ""; }; B3CC75B7FCBD0A88F04962B84E46D054 /* FBSnapshotTestCasePlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestCasePlatform.m; path = FBSnapshotTestCase/FBSnapshotTestCasePlatform.m; sourceTree = ""; }; + B5307735E8C21EF4084FFD00D74C85F3 /* JSONSingleValueEncodingContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONSingleValueEncodingContainer.swift; sourceTree = ""; }; + B660FC7921D44C76E9B1148267BAB68A /* JSONDecoderImpl+UnkeyedContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoderImpl+UnkeyedContainer.swift"; sourceTree = ""; }; B66F7BC9A4DCD060099089C86B6DBC00 /* BTBubble */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = BTBubble; path = BTBubble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B790B95D0548DB0CD32819370E150379 /* SmartCodable.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = SmartCodable.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; B884BE2A9A48EFA0DCB33348C5EECBCA /* BTBubble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = BTBubble.modulemap; sourceTree = ""; }; B8F06552F963B43848600AFDC8043A19 /* CleanDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CleanDecoder.swift; path = Sources/CleanJSON/CleanDecoder.swift; sourceTree = ""; }; B9E5E84322D1072C445D51381EACDD7D /* DecodingError+CleanJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DecodingError+CleanJSON.swift"; path = "Sources/CleanJSON/DecodingError+CleanJSON.swift"; sourceTree = ""; }; B9E9FCD5E63CE808B8773D040F1E2BA8 /* FBSnapshotTestCase-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSnapshotTestCase-dummy.m"; sourceTree = ""; }; - BA316868E83DD6B6EB31EB4B0A87EB90 /* SmartDecodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartDecodable.swift; sourceTree = ""; }; BAF69AF530FDB1A1819B8E00A3E4775A /* ReflectionHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReflectionHelper.swift; path = Source/ReflectionHelper.swift; sourceTree = ""; }; BC6DB121D8A9523A91FDAB8376BE09FD /* DataTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataTransform.swift; path = Source/DataTransform.swift; sourceTree = ""; }; - BD3AEF84831817C3EBACB964BD25C970 /* JSONUnkeyedEncodingContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONUnkeyedEncodingContainer.swift; sourceTree = ""; }; BF34C278263A81DD03B77202C061698C /* CleanJSONDecodingStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CleanJSONDecodingStorage.swift; path = Sources/CleanJSON/CleanJSONDecodingStorage.swift; sourceTree = ""; }; - C01A3132ED5114F11C386F447287F57C /* JSONParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONParser.swift; sourceTree = ""; }; + BFAF4131266F8B7DC565C434931941E1 /* DecodingError+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "DecodingError+Extension.swift"; sourceTree = ""; }; C236F0CDFBBFF56E8E482E41A943E19E /* BTBubble+Animation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BTBubble+Animation.swift"; path = "BTBubble/Classes/BTBubble+Animation.swift"; sourceTree = ""; }; C2C99A53F71055734332736B13A49C28 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; C30DC42DFE9E9BEB719E4821761599C5 /* EnumTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EnumTransform.swift; path = Source/EnumTransform.swift; sourceTree = ""; }; C4749570A46F497B425767CB4569ADF9 /* HelpingMapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HelpingMapper.swift; path = Source/HelpingMapper.swift; sourceTree = ""; }; C4750BB7C125054792532A6CE7EFC1F8 /* BTPrint-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "BTPrint-Info.plist"; sourceTree = ""; }; - C489B232517D17DB8EDC664CA57C0218 /* JSONKeyedEncodingContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONKeyedEncodingContainer.swift; sourceTree = ""; }; + C4FF28B29930E68EA2F4E270AD51856B /* JSONValue+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONValue+Extension.swift"; sourceTree = ""; }; C53C2DBE2FECF12DA6C33264A027EC82 /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Sources/ConstraintDirectionalInsetTarget.swift; sourceTree = ""; }; C548E3997850B2E10E6E8D21CACB81A3 /* CleanJSON.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CleanJSON.release.xcconfig; sourceTree = ""; }; C5688C4B8AAD0B0302EE6D8567AB0A03 /* UIImage+Compare.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Compare.m"; path = "FBSnapshotTestCase/Categories/UIImage+Compare.m"; sourceTree = ""; }; C57A6E8C38153E40B8497C02204DF7F4 /* ISO8601DateTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ISO8601DateTransform.swift; path = Source/ISO8601DateTransform.swift; sourceTree = ""; }; C6D3430E32742C8A84D354226C873C6C /* CleanJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CleanJSON-umbrella.h"; sourceTree = ""; }; - C71893536DFFAFEF6A68642E82405824 /* SmartCodable.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SmartCodable.debug.xcconfig; sourceTree = ""; }; C7BBDFD017622786401A39F6BD9686C8 /* _CleanJSONDecoder+Unbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "_CleanJSONDecoder+Unbox.swift"; path = "Sources/CleanJSON/_CleanJSONDecoder+Unbox.swift"; sourceTree = ""; }; C958AC7215CB092EEC6FA33BD843AC29 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Sources/ConstraintViewDSL.swift; sourceTree = ""; }; CC6BD8F9EB57322C72A42B7031485790 /* ConstraintMakerRelatable+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintMakerRelatable+Extensions.swift"; path = "Sources/ConstraintMakerRelatable+Extensions.swift"; sourceTree = ""; }; CD54121DDA84872534168702B5F92950 /* HandyJSON */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = HandyJSON; path = HandyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CDD07779AA8B42688ED0FF74BACC5AA5 /* AnyExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyExtensions.swift; path = Source/AnyExtensions.swift; sourceTree = ""; }; + CEAA93F43B791EF80D105425A5E9178E /* SmartCodable.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SmartCodable.debug.xcconfig; sourceTree = ""; }; + CEBC01A60097AA2C3B9D1CB1471FE9BA /* SmartDecodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartDecodable.swift; sourceTree = ""; }; CF572B5B26ACF0A775C07589992A5507 /* Pods-SmartCodable_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SmartCodable_Example.debug.xcconfig"; sourceTree = ""; }; CFC3023119381C8AA8F1A4F4106F012A /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Sources/ConstraintOffsetTarget.swift; sourceTree = ""; }; - CFDCC5CEBBCB596FEFDC2C47EFD224AC /* JSONValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONValue.swift; sourceTree = ""; }; CFE40591DCBDB38549AD0FC756F3D616 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Sources/ConstraintView.swift; sourceTree = ""; }; - D09980E45AC9049376D9CB477074B220 /* SmartEncodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartEncodable.swift; sourceTree = ""; }; - D0F799AB967E9C5B183338194DF9975B /* IgnoredKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = IgnoredKey.swift; sourceTree = ""; }; + CFF84F06B74615C36B213FCAC3C6CB3A /* SmartCodable.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SmartCodable.modulemap; sourceTree = ""; }; D20FD964253D6C1E0040497B2CA5505E /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Sources/LayoutConstraintItem.swift; sourceTree = ""; }; D283527F80A00FBB2FF5776A4E3B27B2 /* UIImage+Diff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Diff.h"; path = "FBSnapshotTestCase/Categories/UIImage+Diff.h"; sourceTree = ""; }; D8123B10463E4148BBE847951CD834B0 /* BTBubble.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BTBubble.release.xcconfig; sourceTree = ""; }; D9B8AA14A5BB1D0CE3A003CB6A566265 /* CleanJSON */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CleanJSON; path = CleanJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DA322902978520DD93C6959819B21B3D /* SmartUpdater.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartUpdater.swift; sourceTree = ""; }; DB06E31B883A63C5DE4A5A6308F36C8F /* CleanJSONDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CleanJSONDecoder.swift; path = Sources/CleanJSON/CleanJSONDecoder.swift; sourceTree = ""; }; + DBC09F57122DDB17D6552A3966AC5816 /* JSONParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONParser.swift; sourceTree = ""; }; DC816DCD26D7E20707BD2C4B66521329 /* FBSnapshotTestCase.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FBSnapshotTestCase.modulemap; sourceTree = ""; }; DCD54B400F0BA763829F393B36FC4C7F /* CleanJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CleanJSON.modulemap; sourceTree = ""; }; + DD139E05D3E6C5B8E5173E23A69995C3 /* SmartCodable-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SmartCodable-prefix.pch"; sourceTree = ""; }; DD91016CD3E4DB108E6B6B782539B2EC /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Sources/Constraint.swift; sourceTree = ""; }; DDEF3ACF04599EB1C214870D993C7153 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Sources/ConstraintDSL.swift; sourceTree = ""; }; + DEE4A6C73268CF5FBC7BE3AA11263514 /* SmartCaseDefaultable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartCaseDefaultable.swift; sourceTree = ""; }; E1687BCA2D5089035366568970461716 /* Pods-SmartCodable_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SmartCodable_Tests-Info.plist"; sourceTree = ""; }; - E190016CCA3DDEB92796FF25B0FE692A /* KeysMapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeysMapper.swift; sourceTree = ""; }; E20ABA9C7B9C59A9D3A5EA7AB0215871 /* TransformType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformType.swift; path = Source/TransformType.swift; sourceTree = ""; }; + E253E8DF11BD01C06EE00110797C9096 /* JSONValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONValue.swift; sourceTree = ""; }; E30EB7375ADE85CDDB7E41CEAB4FB6D5 /* BTPrint.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = BTPrint.modulemap; sourceTree = ""; }; E3F09186EE217FC9713BA39404EB7B24 /* Pods-SmartCodable_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SmartCodable_Tests-umbrella.h"; sourceTree = ""; }; E5FA84A6FC991F1497F1DC0F7EA5CAD8 /* Pods-SmartCodable_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SmartCodable_Tests-dummy.m"; sourceTree = ""; }; E658F388F01C72599CA75537950B6095 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; E7D0C8FFA3D3F1791A00D06DA9FB06C3 /* OtherExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OtherExtension.swift; path = Source/OtherExtension.swift; sourceTree = ""; }; - E8B4598293826BF8D9D07BE0D72778ED /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; - EA355F56591A4B2ED4948A641503D5A6 /* SmartFlat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartFlat.swift; sourceTree = ""; }; + E876749C60E4D5D899279BFB1CAA6CFD /* LogContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LogContainer.swift; sourceTree = ""; }; + EA20A04ED87342C08245FCCDD757CFDF /* JSONEncoderImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONEncoderImpl.swift; sourceTree = ""; }; + EB820D84387A26D571F9C2B5623A7565 /* DateTransformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DateTransformer.swift; sourceTree = ""; }; EBDE8674ED579EE94A0773028BD44AF1 /* CaseDefaultable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CaseDefaultable.swift; path = Sources/CleanJSON/CaseDefaultable.swift; sourceTree = ""; }; EC81D310210EE3584DF75E7C318F9318 /* EnumType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EnumType.swift; path = Source/EnumType.swift; sourceTree = ""; }; - ECA9FC7AECDB148E561AD475BE6D72FA /* JSONDecoderImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JSONDecoderImpl.swift; sourceTree = ""; }; EE3F9FF6983083751E8AF8D756034C35 /* Pods-SmartCodable_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SmartCodable_Tests.release.xcconfig"; sourceTree = ""; }; EE7E7A774098C77B700C918B4B303354 /* BubbleTools.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleTools.swift; path = BTBubble/Classes/BubbleTools.swift; sourceTree = ""; }; EEAB8D6BB2A7369CCEF3D49B4BB21A9D /* CleanJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CleanJSON-prefix.pch"; sourceTree = ""; }; F09645CD0AE835FD6F2CC1C70F2768E6 /* BTBubble.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BTBubble.swift; path = BTBubble/Classes/BTBubble.swift; sourceTree = ""; }; - F1538EE2E56D54D12D82A50CC1358E5F /* ColorTransformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ColorTransformer.swift; sourceTree = ""; }; F1F4D4D87CBE3DA68AFC92D6F05636AF /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Sources/ConstraintRelatableTarget.swift; sourceTree = ""; }; F324FE66E2BF9B4B5B507729C64FD069 /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Sources/Typealiases.swift; sourceTree = ""; }; F3DD3A510DCBD287B46973C5625A7FB1 /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Sources/ConstraintAttributes.swift; sourceTree = ""; }; - F8B77C6786A6560D0F28A173A47CBEE0 /* SmartLog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SmartLog.swift; sourceTree = ""; }; + F7EA684DD513026EBD232AB19749F9E7 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + F84318B394E1B7AA7A62F127B2AD82FB /* Patcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Patcher.swift; sourceTree = ""; }; F8C4BD4F4718E6FA4AC7DEA7CFD13293 /* FBSnapshotTestCase-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSnapshotTestCase-prefix.pch"; sourceTree = ""; }; F9693744257055D6E8D886301B98967F /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = ""; }; FA5EA7509BA3790A709778D9D36944E7 /* HandyJSON-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "HandyJSON-Info.plist"; sourceTree = ""; }; FCBDA27A176AE2D1C34BA797339DE8BB /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Sources/ConstraintMakerExtendable.swift; sourceTree = ""; }; FD311A04C42FFDF8D95E30DC09B7EA57 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Sources/ConstraintMakerRelatable.swift; sourceTree = ""; }; + FD3A7793FAE1853E791CB079C4B50B63 /* JSONDecoderImpl+SingleValueContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoderImpl+SingleValueContainer.swift"; sourceTree = ""; }; FD9C9CD93F7F692FE8121F7F78EE6DB8 /* NSDecimalNumberTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSDecimalNumberTransform.swift; path = Source/NSDecimalNumberTransform.swift; sourceTree = ""; }; FF1E4A64EAB2DB18EB9CAD95399FE5C9 /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -538,11 +540,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 9C18EA5D22421596E9DECBB845DBA90A /* Frameworks */ = { + C1D6219122609D7AC3EFBD6DA62F50C1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7443DBAE6EDF8317C0E34FB6849A6E2A /* Foundation.framework in Frameworks */, + A3A0155FFD20C255A0C9115D6906473B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -595,26 +597,22 @@ path = FBSnapshotTestCase; sourceTree = ""; }; - 0E4E1A9219322C33F239A78C7F5E2F3B /* SwiftSupport */ = { + 07BE72261BF17D34D7DCC9DFBB0ABF58 /* Pod */ = { isa = PBXGroup; children = ( - 992A16CABA4C83CBEACADDABDE5021A8 /* SwiftSupport.swift */, + F7EA684DD513026EBD232AB19749F9E7 /* LICENSE */, + 95DCB970D3A1645FD2DD54A0A47E8E63 /* README.md */, + B790B95D0548DB0CD32819370E150379 /* SmartCodable.podspec */, ); - name = SwiftSupport; + name = Pod; sourceTree = ""; }; - 169349216A6FCECF61292EEA88427DE8 /* Decoder */ = { + 0E4E1A9219322C33F239A78C7F5E2F3B /* SwiftSupport */ = { isa = PBXGroup; children = ( - 85AA1A9803E90CE6BC7ADDF5965F33F7 /* DecodingCache.swift */, - 31209995A953E9383DF4F23549B1CA09 /* DecodingError+Extension.swift */, - E190016CCA3DDEB92796FF25B0FE692A /* KeysMapper.swift */, - 8A02695CA5BA14EF7D6013FAB142889E /* SmartJSONDecoder.swift */, - 452E01D097B57F499E63BE4B112A9B16 /* SmartKeyDecodingStrategy.swift */, - FE1D8520593E7B58A22292F3110C6F0F /* Impl */, + 992A16CABA4C83CBEACADDABDE5021A8 /* SwiftSupport.swift */, ); - name = Decoder; - path = Decoder; + name = SwiftSupport; sourceTree = ""; }; 16C17349BA1B06E17DADE08F8DFF5502 /* Targets Support Files */ = { @@ -626,6 +624,19 @@ name = "Targets Support Files"; sourceTree = ""; }; + 1E19657C2AE20DB4B03A973BA006A442 /* Log */ = { + isa = PBXGroup; + children = ( + 312B4E3A4A5FE501E0DDF353C993D47B /* LogCache.swift */, + E876749C60E4D5D899279BFB1CAA6CFD /* LogContainer.swift */, + 6FD6A69CE82729BA38530337F0612A11 /* LogItem.swift */, + 743A6533D4D50D971E4C7AED9EAC7BE0 /* SafeDictionary.swift */, + 727E2EEF9E6C9854B1A98AF4CB6EFCE9 /* SmartLog.swift */, + ); + name = Log; + path = SmartCodable/Classes/Log; + sourceTree = ""; + }; 1EC73E5802EDCA8941212E2C0320FD68 /* Support Files */ = { isa = PBXGroup; children = ( @@ -641,22 +652,26 @@ path = "../Target Support Files/BTPrint"; sourceTree = ""; }; - 2A88AAB86B2B6B01A7ABAFE6B10AD906 /* SmartCodable */ = { + 1EE92AA3BC183010EC86AC9FDD919973 /* Impl */ = { + isa = PBXGroup; + children = ( + 968743DB7D00A0751F7D7842D998B698 /* _SpecialTreatmentEncoder.swift */, + EA20A04ED87342C08245FCCDD757CFDF /* JSONEncoderImpl.swift */, + ); + name = Impl; + path = Impl; + sourceTree = ""; + }; + 1F333A0613D57DCEADD87878629042B7 /* SmartCodable */ = { isa = PBXGroup; children = ( - 663ACE61568E204BE2FFC856B73C1BBD /* Cache */, - 8C894BD6D62C0C384C634AA90A2C0A2A /* JSONDecoder */, - C9F0930CD67CC925F8F5C469972CB8C8 /* JSONEncoder */, - C12AB2DC7B81FEF9DF2F745BBB02D4E6 /* JSONValue */, - D2AABCF08C08A9C2321A7EA309CFFD8C /* Log */, - 86FD15B76B6442EFF28D63F0E300B94A /* Pod */, - 94738995D7201AF55494AE86A5AB15BE /* SmartCodable */, - 8D4C1D627C1F3841295470F98C35137A /* SmartType */, - 516D228C19C966400E46D9D10FD0D404 /* Support Files */, - AEE94DE71769CD2351E4785ADDDEE8B3 /* Transformer */, + A874797EF0840708D4980AD55B3512C3 /* SmartCodable.swift */, + CEBC01A60097AA2C3B9D1CB1471FE9BA /* SmartDecodable.swift */, + 50289A4369AA00415CB77222EC753C18 /* SmartEncodable.swift */, + DA322902978520DD93C6959819B21B3D /* SmartUpdater.swift */, ); name = SmartCodable; - path = ../..; + path = SmartCodable/Classes/SmartCodable; sourceTree = ""; }; 31D698C122DAC16CE786204DDC7267E6 /* Products */ = { @@ -690,14 +705,15 @@ path = "../Target Support Files/HandyJSON"; sourceTree = ""; }; - 39063E920A57510F3935EE6A31F99D01 /* SmartAny */ = { + 37CE252827A6E2DD06544BD0FACD75B3 /* JSONValue */ = { isa = PBXGroup; children = ( - B0CEE409E4A4D2FDA4F0F3586EBE7D61 /* SmartAny.swift */, - 24969EF227BB11FD7DCCE6A7EED44FB8 /* SmartAnyImpl.swift */, + DBC09F57122DDB17D6552A3966AC5816 /* JSONParser.swift */, + E253E8DF11BD01C06EE00110797C9096 /* JSONValue.swift */, + C4FF28B29930E68EA2F4E270AD51856B /* JSONValue+Extension.swift */, ); - name = SmartAny; - path = SmartAny; + name = JSONValue; + path = SmartCodable/Classes/JSONValue; sourceTree = ""; }; 4261FFE260332A8857E6A48C5BD8E0CB /* HandyJSON */ = { @@ -745,17 +761,6 @@ path = HandyJSON; sourceTree = ""; }; - 428B8BC245531F0385AF8C26885E585D /* Container */ = { - isa = PBXGroup; - children = ( - C489B232517D17DB8EDC664CA57C0218 /* JSONKeyedEncodingContainer.swift */, - 2743D2660B497CF9171B80049A6254B2 /* JSONSingleValueEncodingContainer.swift */, - BD3AEF84831817C3EBACB964BD25C970 /* JSONUnkeyedEncodingContainer.swift */, - ); - name = Container; - path = Container; - sourceTree = ""; - }; 47E83401A7A3D80C30C5C1DF7F4429F2 /* BTBubble */ = { isa = PBXGroup; children = ( @@ -773,36 +778,92 @@ path = BTBubble; sourceTree = ""; }; - 516D228C19C966400E46D9D10FD0D404 /* Support Files */ = { + 6066A9705C7D7B3FBF5996E88A0E517D /* Container */ = { isa = PBXGroup; children = ( - 483E5F1F1C340F61905A0907694620D4 /* SmartCodable.modulemap */, - 53D51F602C52F04F5CB71BE0F8551F93 /* SmartCodable-dummy.m */, - 3F3FDC5FCC431AA5CF0EDB1E45F721A0 /* SmartCodable-Info.plist */, - 5908FCB5507214584AC792887EF96311 /* SmartCodable-prefix.pch */, - 4522B54A668007E5C7BAE9AA3CBD9DF9 /* SmartCodable-umbrella.h */, - C71893536DFFAFEF6A68642E82405824 /* SmartCodable.debug.xcconfig */, - 860DA5499F796D40F05197157FEAA96F /* SmartCodable.release.xcconfig */, + 5BC8255EB144B2BAA28F1F9E896F07A4 /* JSONKeyedEncodingContainer.swift */, + B5307735E8C21EF4084FFD00D74C85F3 /* JSONSingleValueEncodingContainer.swift */, + 60F9F3C9F4EC40E05E7E793D861F38AE /* JSONUnkeyedEncodingContainer.swift */, ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/SmartCodable"; + name = Container; + path = Container; sourceTree = ""; }; - 663ACE61568E204BE2FFC856B73C1BBD /* Cache */ = { + 732A086ECC941D37A14E38C56E1A9B2A /* Development Pods */ = { isa = PBXGroup; children = ( - 6669711F8D8DA962A99BCA3CA844C6E9 /* Cachable.swift */, + 747610FCE18CA047488D53EBFD5A0F19 /* SmartCodable */, ); - name = Cache; - path = SmartCodable/Classes/Cache; + name = "Development Pods"; sourceTree = ""; }; - 732A086ECC941D37A14E38C56E1A9B2A /* Development Pods */ = { + 739C1D1D8D837064ECFC4EDB7EB9C718 /* JSONEncoder */ = { isa = PBXGroup; children = ( - 2A88AAB86B2B6B01A7ABAFE6B10AD906 /* SmartCodable */, + 51C0E9B59561302B7057595838F0BC60 /* EncodingCache.swift */, + 214A685AF5F66075AA464B6379029DAE /* JSONFuture.swift */, + 1DAEA986B1CA15E290DA5902E2BA1820 /* SmartJSONEncoder.swift */, + 6066A9705C7D7B3FBF5996E88A0E517D /* Container */, + 1EE92AA3BC183010EC86AC9FDD919973 /* Impl */, ); - name = "Development Pods"; + name = JSONEncoder; + path = SmartCodable/Classes/JSONEncoder; + sourceTree = ""; + }; + 747610FCE18CA047488D53EBFD5A0F19 /* SmartCodable */ = { + isa = PBXGroup; + children = ( + 8DAE5CFB020B8B2E04C15EA1A46A49A2 /* Cache */, + 7AE4A93221799F79A95D20C931403983 /* JSONDecoder */, + 739C1D1D8D837064ECFC4EDB7EB9C718 /* JSONEncoder */, + 37CE252827A6E2DD06544BD0FACD75B3 /* JSONValue */, + 1E19657C2AE20DB4B03A973BA006A442 /* Log */, + 07BE72261BF17D34D7DCC9DFBB0ABF58 /* Pod */, + 1F333A0613D57DCEADD87878629042B7 /* SmartCodable */, + E80C5FD35F33F38A4201F13CED31B4D8 /* SmartType */, + 79E20870888AE09BE457D6CD237DADF8 /* Support Files */, + 7643A88B3BC97F72F2A1A70C28FA1283 /* Transformer */, + ); + name = SmartCodable; + path = ../..; + sourceTree = ""; + }; + 7643A88B3BC97F72F2A1A70C28FA1283 /* Transformer */ = { + isa = PBXGroup; + children = ( + 8BDD72969062AB65E9229808B6F2CE94 /* ColorTransformer.swift */, + 33D493F4A1649816722315B147959195 /* DataTransformer.swift */, + EB820D84387A26D571F9C2B5623A7565 /* DateTransformer.swift */, + 5AFF21DDB3A5F41D266313B6BB8E85CC /* Transformer.swift */, + 3D4A46A1379753F02FBCE6C10F06B21D /* URLTransformer.swift */, + ); + name = Transformer; + path = SmartCodable/Classes/Transformer; + sourceTree = ""; + }; + 79E20870888AE09BE457D6CD237DADF8 /* Support Files */ = { + isa = PBXGroup; + children = ( + CFF84F06B74615C36B213FCAC3C6CB3A /* SmartCodable.modulemap */, + 74C90F8263A4133C644A4865033EE349 /* SmartCodable-dummy.m */, + 939CD691A4C331500EEFE204BAB43C57 /* SmartCodable-Info.plist */, + DD139E05D3E6C5B8E5173E23A69995C3 /* SmartCodable-prefix.pch */, + 16DE0323BE27EF402AD3DE841312EEC5 /* SmartCodable-umbrella.h */, + CEAA93F43B791EF80D105425A5E9178E /* SmartCodable.debug.xcconfig */, + ACE89CF54300FD0B06F1A646317306B0 /* SmartCodable.release.xcconfig */, + ); + name = "Support Files"; + path = "Example/Pods/Target Support Files/SmartCodable"; + sourceTree = ""; + }; + 7AE4A93221799F79A95D20C931403983 /* JSONDecoder */ = { + isa = PBXGroup; + children = ( + F8241C92EB626AC3DCB61A508A574805 /* Decoder */, + D164ACFBE1C073B6D403228E55EB0B2E /* Patcher */, + ); + name = JSONDecoder; + path = SmartCodable/Classes/JSONDecoder; sourceTree = ""; }; 7E972BBD4D0CAB239B62B38A7CFE09A9 /* Support Files */ = { @@ -835,60 +896,23 @@ path = "../Target Support Files/BTBubble"; sourceTree = ""; }; - 86FD15B76B6442EFF28D63F0E300B94A /* Pod */ = { - isa = PBXGroup; - children = ( - E8B4598293826BF8D9D07BE0D72778ED /* LICENSE */, - 0191B942D4B65CBE15AF9B5302AE1115 /* README.md */, - 92D0AE3BD80E870CCAA5AE5CF580E549 /* SmartCodable.podspec */, - ); - name = Pod; - sourceTree = ""; - }; - 891302A17215789D3C02C8F70BCEA12C /* Patcher */ = { - isa = PBXGroup; - children = ( - 99F56CDCDED62FFB08323F03A9F714B3 /* Patcher.swift */, - A3B7F1B152F0AA98FA2D2291E6EF4CDE /* Patcher+Provider.swift */, - 60C75B0E1E9EBF948044BDE0F83EF802 /* Patcher+Transformer.swift */, - ); - name = Patcher; - path = Patcher; - sourceTree = ""; - }; - 8C894BD6D62C0C384C634AA90A2C0A2A /* JSONDecoder */ = { + 8C687465DB6405703C70062685B20E43 /* SmartAny */ = { isa = PBXGroup; children = ( - 169349216A6FCECF61292EEA88427DE8 /* Decoder */, - 891302A17215789D3C02C8F70BCEA12C /* Patcher */, + 12C1EB28501D74C0063A814AAABC72B8 /* SmartAny.swift */, + 3CBDB773D6CFE93A2E9F392152D4E6BD /* SmartAnyImpl.swift */, ); - name = JSONDecoder; - path = SmartCodable/Classes/JSONDecoder; - sourceTree = ""; - }; - 8D4C1D627C1F3841295470F98C35137A /* SmartType */ = { - isa = PBXGroup; - children = ( - D0F799AB967E9C5B183338194DF9975B /* IgnoredKey.swift */, - 9741C9099C80C82AA38386510EE0634D /* SmartCaseDefaultable.swift */, - 6B5A4B099D6B6C19273025A7E4BC6B7B /* SmartColor.swift */, - EA355F56591A4B2ED4948A641503D5A6 /* SmartFlat.swift */, - 39063E920A57510F3935EE6A31F99D01 /* SmartAny */, - ); - name = SmartType; - path = SmartCodable/Classes/SmartType; + name = SmartAny; + path = SmartAny; sourceTree = ""; }; - 94738995D7201AF55494AE86A5AB15BE /* SmartCodable */ = { + 8DAE5CFB020B8B2E04C15EA1A46A49A2 /* Cache */ = { isa = PBXGroup; children = ( - 9D78AA8B32A754F35A8C0EBB9F75CBBD /* SmartCodable.swift */, - BA316868E83DD6B6EB31EB4B0A87EB90 /* SmartDecodable.swift */, - D09980E45AC9049376D9CB477074B220 /* SmartEncodable.swift */, - 4844C3AE5731C372261F2F1D5129A42C /* SmartUpdater.swift */, + 969F04EFBFF10592BD8EDB9FD9C29F9D /* Cachable.swift */, ); - name = SmartCodable; - path = SmartCodable/Classes/SmartCodable; + name = Cache; + path = SmartCodable/Classes/Cache; sourceTree = ""; }; 98C45354D057DFD460070868850871E7 /* Support Files */ = { @@ -906,29 +930,6 @@ path = "../Target Support Files/CleanJSON"; sourceTree = ""; }; - 9DE332D9423DDD3394AB44E87CA94D5B /* Impl */ = { - isa = PBXGroup; - children = ( - 1F7CB4AA09FC386F4AEA3F876318448C /* _SpecialTreatmentEncoder.swift */, - A55888C63C71B327F88486B6AD7AB1E3 /* JSONEncoderImpl.swift */, - ); - name = Impl; - path = Impl; - sourceTree = ""; - }; - AEE94DE71769CD2351E4785ADDDEE8B3 /* Transformer */ = { - isa = PBXGroup; - children = ( - F1538EE2E56D54D12D82A50CC1358E5F /* ColorTransformer.swift */, - 0CB5E17D5752EEFA4FACC5806D56E2DA /* DataTransformer.swift */, - 872A303F84F8E2A8F34473198AC0ABAB /* DateTransformer.swift */, - 8F22E01957313DD33E69A20A61F7ADBB /* Transformer.swift */, - AD9745BB72B5A3B7C0F0FBE5AB769F0B /* URLTransformer.swift */, - ); - name = Transformer; - path = SmartCodable/Classes/Transformer; - sourceTree = ""; - }; BA4F31F07263C99FC76E66D632A59F09 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -937,30 +938,6 @@ name = Frameworks; sourceTree = ""; }; - C12AB2DC7B81FEF9DF2F745BBB02D4E6 /* JSONValue */ = { - isa = PBXGroup; - children = ( - C01A3132ED5114F11C386F447287F57C /* JSONParser.swift */, - CFDCC5CEBBCB596FEFDC2C47EFD224AC /* JSONValue.swift */, - 9C9909368B615A605A5844EA2A3B5775 /* JSONValue+Extension.swift */, - ); - name = JSONValue; - path = SmartCodable/Classes/JSONValue; - sourceTree = ""; - }; - C9F0930CD67CC925F8F5C469972CB8C8 /* JSONEncoder */ = { - isa = PBXGroup; - children = ( - 7FF6C295EA60F3701557941049EF920D /* EncodingCache.swift */, - 1D572B9A00DDC548FB5EA35A1E339393 /* JSONFuture.swift */, - 21F733C10404C35E050A56B18417CB90 /* SmartJSONEncoder.swift */, - 428B8BC245531F0385AF8C26885E585D /* Container */, - 9DE332D9423DDD3394AB44E87CA94D5B /* Impl */, - ); - name = JSONEncoder; - path = SmartCodable/Classes/JSONEncoder; - sourceTree = ""; - }; CCE6F2769C982E839E4E6CB9D554361C /* Pods-SmartCodable_Example */ = { isa = PBXGroup; children = ( @@ -1011,17 +988,15 @@ name = Core; sourceTree = ""; }; - D2AABCF08C08A9C2321A7EA309CFFD8C /* Log */ = { + D164ACFBE1C073B6D403228E55EB0B2E /* Patcher */ = { isa = PBXGroup; children = ( - 4006851427C999AD7B42576C9ED35269 /* LogCache.swift */, - 6BD2A8A6A6AF07EA45FEBFCD0E888972 /* LogContainer.swift */, - AF7985344EF5FCE8B0EA02B44157CF13 /* LogItem.swift */, - 3534F4E4B4427041509351D15B895F3D /* SafeDictionary.swift */, - F8B77C6786A6560D0F28A173A47CBEE0 /* SmartLog.swift */, + F84318B394E1B7AA7A62F127B2AD82FB /* Patcher.swift */, + 81FF5036284C558A020D1CA019129CE6 /* Patcher+Provider.swift */, + 2CED1303830CD461EE4D0B1B76767EEC /* Patcher+Transformer.swift */, ); - name = Log; - path = SmartCodable/Classes/Log; + name = Patcher; + path = Patcher; sourceTree = ""; }; D5089C05AA8DF4AEE19DA89A217C7CD8 /* Support Files */ = { @@ -1085,6 +1060,20 @@ path = SnapKit; sourceTree = ""; }; + E80C5FD35F33F38A4201F13CED31B4D8 /* SmartType */ = { + isa = PBXGroup; + children = ( + 2391A45CB07E7373F5542CCBA67C07D9 /* IgnoredKey.swift */, + DEE4A6C73268CF5FBC7BE3AA11263514 /* SmartCaseDefaultable.swift */, + 6444393AFB3BD991BAE85797BA7EF414 /* SmartColor.swift */, + 9E743427240405F9D4DFC6803DAE5D00 /* SmartFlat.swift */, + 114E927F855FC20BDDAEC0E49C059C70 /* SmartPublished.swift */, + 8C687465DB6405703C70062685B20E43 /* SmartAny */, + ); + name = SmartType; + path = SmartCodable/Classes/SmartType; + sourceTree = ""; + }; F02A47C6E8279678BBAFA51319D05818 /* BTPrint */ = { isa = PBXGroup; children = ( @@ -1122,6 +1111,20 @@ path = CleanJSON; sourceTree = ""; }; + F8241C92EB626AC3DCB61A508A574805 /* Decoder */ = { + isa = PBXGroup; + children = ( + A899927834949BE733C3B462269D7C60 /* DecodingCache.swift */, + BFAF4131266F8B7DC565C434931941E1 /* DecodingError+Extension.swift */, + 57ABB808729D0960596E20534FFCE2FD /* KeysMapper.swift */, + 19B9CD23AFAC8714F94482E32948963C /* SmartJSONDecoder.swift */, + 4628EDC5D3E832597B6F2DEC7BD8F689 /* SmartKeyDecodingStrategy.swift */, + FDBAA8E9323F175027D6F64B56FEB3C9 /* Impl */, + ); + name = Decoder; + path = Decoder; + sourceTree = ""; + }; FB2668559AE577E6E8078C0C291AD417 /* iOS */ = { isa = PBXGroup; children = ( @@ -1133,6 +1136,19 @@ name = iOS; sourceTree = ""; }; + FDBAA8E9323F175027D6F64B56FEB3C9 /* Impl */ = { + isa = PBXGroup; + children = ( + 17BA7C13C417D277BA9AAB657E815587 /* JSONDecoderImpl.swift */, + 2D76DE7139B532063A6055FBA46589B8 /* JSONDecoderImpl+KeyedContainer.swift */, + FD3A7793FAE1853E791CB079C4B50B63 /* JSONDecoderImpl+SingleValueContainer.swift */, + B660FC7921D44C76E9B1148267BAB68A /* JSONDecoderImpl+UnkeyedContainer.swift */, + 3FD7F8031F4CC7E3EF669464EA390A76 /* JSONDecoderImpl+Unwrap.swift */, + ); + name = Impl; + path = Impl; + sourceTree = ""; + }; FDCBEBF5E487956EF93414AE43BD350B /* Pods */ = { isa = PBXGroup; children = ( @@ -1146,19 +1162,6 @@ name = Pods; sourceTree = ""; }; - FE1D8520593E7B58A22292F3110C6F0F /* Impl */ = { - isa = PBXGroup; - children = ( - ECA9FC7AECDB148E561AD475BE6D72FA /* JSONDecoderImpl.swift */, - 7ECBF15BCB3A93D6F21CAACA322E25AC /* JSONDecoderImpl+KeyedContainer.swift */, - AE3994DC269F18D22356B445B6E38226 /* JSONDecoderImpl+SingleValueContainer.swift */, - 0FFA4851C0DDF4854A55A23373789958 /* JSONDecoderImpl+UnkeyedContainer.swift */, - 95EBB31F2830BE27E38D4FE66F18EE90 /* JSONDecoderImpl+Unwrap.swift */, - ); - name = Impl; - path = Impl; - sourceTree = ""; - }; FE9C729707A5477C1EF6D1BFC9BB59FA /* Pods-SmartCodable_Tests */ = { isa = PBXGroup; children = ( @@ -1179,6 +1182,14 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 2BE2612BE3A0A6FB077023FBB007A351 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3226314937DF60764E1F13197E75AB80 /* SmartCodable-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 5FA4790A32ECD84F2CEA55509107BD0A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1236,14 +1247,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A2C67C1CF87AC4881ACC06C896907D6B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 6FAA96BB68FE547684137B95F5705530 /* SmartCodable-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; D4CF7A53AFE8275DDE075747E8245F97 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1274,8 +1277,8 @@ buildRules = ( ); dependencies = ( - 3DD2A4F91AF1372A292963A491388ABF /* PBXTargetDependency */, - 61E3510FF6AEB125EC144E651B2B4967 /* PBXTargetDependency */, + 9225D5D319B49CB40EB113FEECCFE9AE /* PBXTargetDependency */, + DCEDC56083CCD02DF2EA507D664888CF /* PBXTargetDependency */, ); name = "Pods-SmartCodable_Tests"; productName = Pods_SmartCodable_Tests; @@ -1402,12 +1405,12 @@ buildRules = ( ); dependencies = ( - 2B41689D5CBA7A9DD853563BE1C896B3 /* PBXTargetDependency */, - 683BA3A58C6B7FFF94FDCACCE51656D2 /* PBXTargetDependency */, - AB54C1067223DE170F34DBFBEF2EC17C /* PBXTargetDependency */, - 2650A8259CC1DF7A32C7DF4639951DC0 /* PBXTargetDependency */, - C9529089F71D15DA09168CAA5DAA27AE /* PBXTargetDependency */, - 44B0F69E418265F3BB83A2D04F15A79D /* PBXTargetDependency */, + 8E33D197B6C1BD487FD4EA951E5A1F76 /* PBXTargetDependency */, + 1A95A1675C43E2A5E213BB88A9445436 /* PBXTargetDependency */, + 47160F114D6E781F74D1725EFA6E14AF /* PBXTargetDependency */, + 611ADB03DB8A0A3FB6C42835B9ABC136 /* PBXTargetDependency */, + C689DF88D538E65BDFF4AE1363925814 /* PBXTargetDependency */, + ADC988E8048F28F7AA75B8AF46F2FB06 /* PBXTargetDependency */, ); name = "Pods-SmartCodable_Example"; productName = Pods_SmartCodable_Example; @@ -1416,12 +1419,12 @@ }; BD33823B9D08265B6F1D35EC259EE307 /* SmartCodable */ = { isa = PBXNativeTarget; - buildConfigurationList = 3D41D1EC0DBBCD971749433A09E0C096 /* Build configuration list for PBXNativeTarget "SmartCodable" */; + buildConfigurationList = 3F9F8C27C41F0DA1F8B9074411557C6E /* Build configuration list for PBXNativeTarget "SmartCodable" */; buildPhases = ( - A2C67C1CF87AC4881ACC06C896907D6B /* Headers */, - B001559CAFD702A24EE60A950026E318 /* Sources */, - 9C18EA5D22421596E9DECBB845DBA90A /* Frameworks */, - 5BD56FAFF8C07097D963B5E3F72D2AE8 /* Resources */, + 2BE2612BE3A0A6FB077023FBB007A351 /* Headers */, + 66B0421F705B71932338E924692ECF4B /* Sources */, + C1D6219122609D7AC3EFBD6DA62F50C1 /* Frameworks */, + B48C7AEE52FFED632B1F94EA00B5497F /* Resources */, ); buildRules = ( ); @@ -1496,28 +1499,28 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5BD56FAFF8C07097D963B5E3F72D2AE8 /* Resources */ = { + 7BBEEC7A97C07C1990B46249A15F7AFF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 7BBEEC7A97C07C1990B46249A15F7AFF /* Resources */ = { + 820C67429A90336F5AF1C850DF03B1B9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 820C67429A90336F5AF1C850DF03B1B9 /* Resources */ = { + B2F14DBF469CA27BCA557E279D69A1D6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - B2F14DBF469CA27BCA557E279D69A1D6 /* Resources */ = { + B48C7AEE52FFED632B1F94EA00B5497F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -1558,6 +1561,60 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 66B0421F705B71932338E924692ECF4B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4FF59894E6F9A4D2124051FA7724A628 /* _SpecialTreatmentEncoder.swift in Sources */, + 4CE7DEF513B5D845E204618AB1A49566 /* Cachable.swift in Sources */, + D6974D975D146093556E2CEFC06CF3EA /* ColorTransformer.swift in Sources */, + 22DFC9A3182F5150B08F0D42E0176DA4 /* DataTransformer.swift in Sources */, + BC4F43304CCD4CEA9C261FEC4A658574 /* DateTransformer.swift in Sources */, + 9ECE16672429A42AD17DE432F38C5133 /* DecodingCache.swift in Sources */, + 0D2E1FC3E4F836BF1ED440C3AEBE2BA8 /* DecodingError+Extension.swift in Sources */, + 19B6E001850F688656EF6AD148B6F475 /* EncodingCache.swift in Sources */, + 28E9659A3F9FBD9C607450568025DFD0 /* IgnoredKey.swift in Sources */, + DD497A62D094D47044BEE3F911A352E8 /* JSONDecoderImpl.swift in Sources */, + 53EFC330E33FD43CAD337D8B3CCA005E /* JSONDecoderImpl+KeyedContainer.swift in Sources */, + CC1CA01AA2D95FABFA16195F269A8AFA /* JSONDecoderImpl+SingleValueContainer.swift in Sources */, + 5673B99B3C1F81F9660291EBCA4155E1 /* JSONDecoderImpl+UnkeyedContainer.swift in Sources */, + 0CD7BCEB5167C6670443B68E47B3BD3D /* JSONDecoderImpl+Unwrap.swift in Sources */, + AE67F2CB6F05CC86E2BF638EEBE16EDE /* JSONEncoderImpl.swift in Sources */, + 85A0A5658FC4FE1082B06FBE2407C45B /* JSONFuture.swift in Sources */, + 2C186192D573778E026E3CE693F5F9CB /* JSONKeyedEncodingContainer.swift in Sources */, + BB2BEF164BA71F210432FC489EC1A880 /* JSONParser.swift in Sources */, + 546611D589D13772290AD7D2C2C210C3 /* JSONSingleValueEncodingContainer.swift in Sources */, + 80BEAF2CD68CB723DD0DC966F7F934A6 /* JSONUnkeyedEncodingContainer.swift in Sources */, + 20A299A2B5518B865C47D5DC4623DEF0 /* JSONValue.swift in Sources */, + 8FFAD52B8FE8B1418A371B2F4577D25A /* JSONValue+Extension.swift in Sources */, + 227B40964DF57E4E006A369BABB56C70 /* KeysMapper.swift in Sources */, + FC8F033B78C44ACF0446FA2300084879 /* LogCache.swift in Sources */, + 9A6AB1DF5A7D46504FF5DAA458C409A7 /* LogContainer.swift in Sources */, + CAB32710FC64787F12D0A148872D2A24 /* LogItem.swift in Sources */, + 67684DA6FC62869722555B2B692597BF /* Patcher.swift in Sources */, + 9CE8B122210F37A746E7A3DB29D5D5E7 /* Patcher+Provider.swift in Sources */, + 63CAEA94F586401016D74C882CF36FCD /* Patcher+Transformer.swift in Sources */, + C17C77D89CC82E5A744440373374CC5E /* SafeDictionary.swift in Sources */, + B6BB9565ED99667A7D8AFEB5BB6FB357 /* SmartAny.swift in Sources */, + E3301DD4B6344B6C5377676E8DE646FE /* SmartAnyImpl.swift in Sources */, + BB92ADD171A75A3CFCAE4C4DB2ECE2A9 /* SmartCaseDefaultable.swift in Sources */, + 86EB92EDA31B229682FD289E4412799D /* SmartCodable.swift in Sources */, + B78B93FF12028D01BB5FDE34B194186F /* SmartCodable-dummy.m in Sources */, + 45527509DB924747789E81BDD7BB6A84 /* SmartColor.swift in Sources */, + 914055A3C0D5545281274C1D8A04A2B9 /* SmartDecodable.swift in Sources */, + 7190C38D89A301621CB7E01C09FF12AD /* SmartEncodable.swift in Sources */, + F9ED89CA7C4D71A2AC379B689E526733 /* SmartFlat.swift in Sources */, + BD4CD2D9AE5AC3515AEC4779298CF031 /* SmartJSONDecoder.swift in Sources */, + E209959737E5872C8BECBDD35D9056B0 /* SmartJSONEncoder.swift in Sources */, + 334D2C004D221A7E48202BF0C5EF7A9C /* SmartKeyDecodingStrategy.swift in Sources */, + 23A99217AFE2E844C00667C1D644A45A /* SmartLog.swift in Sources */, + E2A21F764F8B46F16B40EF8D21E6FBB5 /* SmartPublished.swift in Sources */, + 5F2783B5CC883D243A68A25EB11F53B4 /* SmartUpdater.swift in Sources */, + 68E95FB1A5A8401FB99920794041343F /* Transformer.swift in Sources */, + 99A1CE0CB9556921DD65249CE3738005 /* URLTransformer.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 6FD3DF3A6BB24552A9EEFAF301B1F7FB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1636,59 +1693,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B001559CAFD702A24EE60A950026E318 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 869B56CCB4CD42940E094F803B9E1491 /* _SpecialTreatmentEncoder.swift in Sources */, - A53DAC9DCF8CFC2D8132F358358A711A /* Cachable.swift in Sources */, - 46299168D10E2826AFE4033D4EB3D4E7 /* ColorTransformer.swift in Sources */, - E1A549288829A53454B5D0647E11E6DC /* DataTransformer.swift in Sources */, - 37DDC069AE25734DCDE5C45BD3E824CE /* DateTransformer.swift in Sources */, - 11890AF7730428D891E2A738069AA93D /* DecodingCache.swift in Sources */, - 4EC9F3D7BADE272E116CBB82C1B09733 /* DecodingError+Extension.swift in Sources */, - FB996AA9AD236E2D353B68BD10AAD59E /* EncodingCache.swift in Sources */, - 09C640A3D8D231523EA022E9C914914A /* IgnoredKey.swift in Sources */, - 2D9190CD7E6DD720A73A411AADC89BF1 /* JSONDecoderImpl.swift in Sources */, - C07B7B52652B21207EBE47F104F1DAF1 /* JSONDecoderImpl+KeyedContainer.swift in Sources */, - 3B9DCA7CD6FF36287D93FF80C2AC0BB1 /* JSONDecoderImpl+SingleValueContainer.swift in Sources */, - 8D3556BB6063CDEF78CD36FCE845A413 /* JSONDecoderImpl+UnkeyedContainer.swift in Sources */, - D5D2317CAD334B7F2E377833967C042A /* JSONDecoderImpl+Unwrap.swift in Sources */, - 8E8B1CA2D22EF1ED40C132088CAD5236 /* JSONEncoderImpl.swift in Sources */, - FDB88B71E230C8F3FC5565AC751F9549 /* JSONFuture.swift in Sources */, - F73487EF44E6F79E972B5335E573E01B /* JSONKeyedEncodingContainer.swift in Sources */, - E0F7FB86C184BE231F38E361118D95AC /* JSONParser.swift in Sources */, - 62A3A1BBFC4FE40DD36FD2DE8724AA08 /* JSONSingleValueEncodingContainer.swift in Sources */, - 254138EDA641C82997944A4ED0832F22 /* JSONUnkeyedEncodingContainer.swift in Sources */, - 946753DFD025B199BEDDC98243E0D938 /* JSONValue.swift in Sources */, - 7018DA48BBE5B5A36DD63AEF50AF8F16 /* JSONValue+Extension.swift in Sources */, - 24B8F3340BBB1B99480144E954E7BFF7 /* KeysMapper.swift in Sources */, - AC02F23C7A973408360250190ED04E4C /* LogCache.swift in Sources */, - 79DFFAFFF2E66C8B2353339AEB7C368C /* LogContainer.swift in Sources */, - E5841B5CDD395256F1E31D88D706583E /* LogItem.swift in Sources */, - 4061431910C9FF38677270D70B2D90A9 /* Patcher.swift in Sources */, - A46A4425E81D04C4BE4D35662090879A /* Patcher+Provider.swift in Sources */, - FD51EBCB0539A93F0FD84EBE4C24B4E6 /* Patcher+Transformer.swift in Sources */, - C0F572D6E53B27FE0055AA0E5AB84AF5 /* SafeDictionary.swift in Sources */, - 46A2608FE28FE830D89FF68BC66174F8 /* SmartAny.swift in Sources */, - A82CB75E0FBF78C93E1D221F306B1514 /* SmartAnyImpl.swift in Sources */, - 37AEE543E1F06554044E1CE36AA0B4BC /* SmartCaseDefaultable.swift in Sources */, - 9980AB0041C2B3A5040B03A139F8F9EC /* SmartCodable.swift in Sources */, - DC237D98BF3D52F611F16AB50B6358DD /* SmartCodable-dummy.m in Sources */, - 3700889891FFF72B524FD268347E6CB2 /* SmartColor.swift in Sources */, - 62294521012EBDF5183FB333DC5C0F1A /* SmartDecodable.swift in Sources */, - 9C271308C57ABF601FA728BDEF051CA2 /* SmartEncodable.swift in Sources */, - 856524D53848D8A483177D2AC503963D /* SmartFlat.swift in Sources */, - 299EB3042DC7AFAAB850F558532DE8F9 /* SmartJSONDecoder.swift in Sources */, - 170D20E76ED47F45049C0DCB695E6B3F /* SmartJSONEncoder.swift in Sources */, - AF083831A977430C74E2DD79239E9F70 /* SmartKeyDecodingStrategy.swift in Sources */, - ACF7FD0E2F1722FB2684CAD5F0F9754C /* SmartLog.swift in Sources */, - 2CCD17EC8A650B81A117878EBBCF4251 /* SmartUpdater.swift in Sources */, - 5CF8186504D6DF7D65E8AE96161A1633 /* Transformer.swift in Sources */, - BB5649AF1187F9EA6F90B983C2A1DC8E /* URLTransformer.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; B186292004011247A56FAC41B9D6C6A2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1761,53 +1765,53 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 2650A8259CC1DF7A32C7DF4639951DC0 /* PBXTargetDependency */ = { + 1A95A1675C43E2A5E213BB88A9445436 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = BTPrint; + target = 86A81D2B2BFEFD93197A1D6C3C7EF60A /* BTPrint */; + targetProxy = 00447BA89B43FCCA005ECFBA868A6896 /* PBXContainerItemProxy */; + }; + 47160F114D6E781F74D1725EFA6E14AF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = CleanJSON; + target = 300904838EEDDC3BB8242817D8F97CB6 /* CleanJSON */; + targetProxy = FCA4FE005E1F2110E6529F126611D189 /* PBXContainerItemProxy */; + }; + 611ADB03DB8A0A3FB6C42835B9ABC136 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = HandyJSON; target = 10D88C24864319FF583AD6D156896F32 /* HandyJSON */; - targetProxy = 0BDC7C20613502D8AB78280A113BC9FF /* PBXContainerItemProxy */; + targetProxy = 4158AA0869474981980A214F0A9247B4 /* PBXContainerItemProxy */; }; - 2B41689D5CBA7A9DD853563BE1C896B3 /* PBXTargetDependency */ = { + 8E33D197B6C1BD487FD4EA951E5A1F76 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = BTBubble; target = 8ABBD9D5C40976C9B3FC1E227AAC109C /* BTBubble */; - targetProxy = 653B96460FE90CF4373D1E62933C99F1 /* PBXContainerItemProxy */; + targetProxy = 0397EE3763A641B8B718933ACE58C9C6 /* PBXContainerItemProxy */; }; - 3DD2A4F91AF1372A292963A491388ABF /* PBXTargetDependency */ = { + 9225D5D319B49CB40EB113FEECCFE9AE /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FBSnapshotTestCase; target = 98A98149697C80CEF8D5772791E92E66 /* FBSnapshotTestCase */; - targetProxy = 4F219DA66BC80D3FB997F6EDB8E5C54C /* PBXContainerItemProxy */; + targetProxy = 268B6FB18F60CE24008B205A51738B35 /* PBXContainerItemProxy */; }; - 44B0F69E418265F3BB83A2D04F15A79D /* PBXTargetDependency */ = { + ADC988E8048F28F7AA75B8AF46F2FB06 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SnapKit; target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 3C379A41743D9549D81F9BED83C35C90 /* PBXContainerItemProxy */; + targetProxy = A08BD463F0E598F3C8834CF7AC850D53 /* PBXContainerItemProxy */; }; - 61E3510FF6AEB125EC144E651B2B4967 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Pods-SmartCodable_Example"; - target = B8474377209826CA7C2ADD548D40C1EA /* Pods-SmartCodable_Example */; - targetProxy = 5EEDD5D6D0427464FAB674A3F9536AB0 /* PBXContainerItemProxy */; - }; - 683BA3A58C6B7FFF94FDCACCE51656D2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = BTPrint; - target = 86A81D2B2BFEFD93197A1D6C3C7EF60A /* BTPrint */; - targetProxy = FB6A9FCEFB35DC8380CBABC10ECD9BF3 /* PBXContainerItemProxy */; - }; - AB54C1067223DE170F34DBFBEF2EC17C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CleanJSON; - target = 300904838EEDDC3BB8242817D8F97CB6 /* CleanJSON */; - targetProxy = 368190FF68A1BFDDCB6303CD6A601C4F /* PBXContainerItemProxy */; - }; - C9529089F71D15DA09168CAA5DAA27AE /* PBXTargetDependency */ = { + C689DF88D538E65BDFF4AE1363925814 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SmartCodable; target = BD33823B9D08265B6F1D35EC259EE307 /* SmartCodable */; - targetProxy = B1CF3F11BB47503F685F009B7AB1DE22 /* PBXContainerItemProxy */; + targetProxy = 20CB5A542481E5BEB663DF15D8E8CC7D /* PBXContainerItemProxy */; + }; + DCEDC56083CCD02DF2EA507D664888CF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Pods-SmartCodable_Example"; + target = B8474377209826CA7C2ADD548D40C1EA /* Pods-SmartCodable_Example */; + targetProxy = 4A63A8D5327A16F55B547D60B34756CF /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -1843,6 +1847,38 @@ }; name = Release; }; + 197E9B033E69228A8598FEB54523DB06 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CEAA93F43B791EF80D105425A5E9178E /* SmartCodable.debug.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SmartCodable/SmartCodable-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SmartCodable/SmartCodable-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SmartCodable/SmartCodable.modulemap"; + PRODUCT_MODULE_NAME = SmartCodable; + PRODUCT_NAME = SmartCodable; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 1D30A40E8BEDDA4A0CD0C3E03D28EFC6 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 2565E609AC51A4E4FCA81F2594C690F6 /* FBSnapshotTestCase.debug.xcconfig */; @@ -1906,9 +1942,9 @@ }; name = Release; }; - 2F5D9D9A61CE76D8B525DB853AD9B7F7 /* Debug */ = { + 30D053AB57CB2206C2706B6E8156C15E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C71893536DFFAFEF6A68642E82405824 /* SmartCodable.debug.xcconfig */; + baseConfigurationReference = ACE89CF54300FD0B06F1A646317306B0 /* SmartCodable.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -1933,10 +1969,11 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; 321A2120D400C5B8DC97CEE0924C9F21 /* Release */ = { isa = XCBuildConfiguration; @@ -2066,39 +2103,6 @@ }; name = Debug; }; - 4C7A37A60995F04BB7F8BCE158B5DC42 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 860DA5499F796D40F05197157FEAA96F /* SmartCodable.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SmartCodable/SmartCodable-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SmartCodable/SmartCodable-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SmartCodable/SmartCodable.modulemap"; - PRODUCT_MODULE_NAME = SmartCodable; - PRODUCT_NAME = SmartCodable; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; 510C72C4D456365385331898DC3EBDBB /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = D8123B10463E4148BBE847951CD834B0 /* BTBubble.release.xcconfig */; @@ -2537,11 +2541,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3D41D1EC0DBBCD971749433A09E0C096 /* Build configuration list for PBXNativeTarget "SmartCodable" */ = { + 3F9F8C27C41F0DA1F8B9074411557C6E /* Build configuration list for PBXNativeTarget "SmartCodable" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2F5D9D9A61CE76D8B525DB853AD9B7F7 /* Debug */, - 4C7A37A60995F04BB7F8BCE158B5DC42 /* Release */, + 197E9B033E69228A8598FEB54523DB06 /* Debug */, + 30D053AB57CB2206C2706B6E8156C15E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Target Support Files/SmartCodable/SmartCodable-Info.plist b/Example/Pods/Target Support Files/SmartCodable/SmartCodable-Info.plist index b930948..cfd36e1 100644 --- a/Example/Pods/Target Support Files/SmartCodable/SmartCodable-Info.plist +++ b/Example/Pods/Target Support Files/SmartCodable/SmartCodable-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 4.1.10 + 4.1.11 CFBundleSignature ???? CFBundleVersion diff --git a/Example/SmartCodable.xcodeproj/project.pbxproj b/Example/SmartCodable.xcodeproj/project.pbxproj index 55c9814..c6009fc 100644 --- a/Example/SmartCodable.xcodeproj/project.pbxproj +++ b/Example/SmartCodable.xcodeproj/project.pbxproj @@ -25,6 +25,7 @@ 990512A52C0869CA00A2C5D8 /* Decoding_globalKeyStrategyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990512A42C0869CA00A2C5D8 /* Decoding_globalKeyStrategyViewController.swift */; }; 990512A72C086FBB00A2C5D8 /* Decoding_globalValueStrategyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990512A62C086FBB00A2C5D8 /* Decoding_globalValueStrategyViewController.swift */; }; 990512A92C0873F200A2C5D8 /* Decoding_valueMapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990512A82C0873F200A2C5D8 /* Decoding_valueMapViewController.swift */; }; + 990CBAF42CA4F5300099E4C7 /* 1231231.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990CBAF32CA4F5300099E4C7 /* 1231231.swift */; }; 990ECFA92B95A45B003D37F1 /* Support_JSONStringViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990ECFA82B95A45B003D37F1 /* Support_JSONStringViewController.swift */; }; 991259ED2BFB5B2000ED76B5 /* BaseData_Int8ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 991259EC2BFB5B2000ED76B5 /* BaseData_Int8ViewController.swift */; }; 991259EF2BFB6C1000ED76B5 /* Container_DictViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 991259EE2BFB6C1000ED76B5 /* Container_DictViewController.swift */; }; @@ -133,6 +134,7 @@ 99D9458A2B91C75600CC6470 /* SpecialData_dateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99D945892B91C75600CC6470 /* SpecialData_dateViewController.swift */; }; 99D9458C2B91C80300CC6470 /* SpecialData_dataViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99D9458B2B91C80300CC6470 /* SpecialData_dataViewController.swift */; }; 99D9458E2B91C80C00CC6470 /* SpecialData_FloatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99D9458D2B91C80C00CC6470 /* SpecialData_FloatViewController.swift */; }; + 99E438A92CA50D2E001C08B9 /* Introduce_12ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99E438A82CA50D2E001C08B9 /* Introduce_12ViewController.swift */; }; 99F9E8A62BB5139900D68037 /* MixDecodingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99F9E8A52BB5139900D68037 /* MixDecodingViewController.swift */; }; AF374D4C62AA92DE0D9ED2B7 /* Pods_SmartCodable_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EB62463C4F6AEFEAA2A5E1E /* Pods_SmartCodable_Tests.framework */; }; /* End PBXBuildFile section */ @@ -172,6 +174,7 @@ 990512A42C0869CA00A2C5D8 /* Decoding_globalKeyStrategyViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Decoding_globalKeyStrategyViewController.swift; sourceTree = ""; }; 990512A62C086FBB00A2C5D8 /* Decoding_globalValueStrategyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Decoding_globalValueStrategyViewController.swift; sourceTree = ""; }; 990512A82C0873F200A2C5D8 /* Decoding_valueMapViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Decoding_valueMapViewController.swift; sourceTree = ""; }; + 990CBAF32CA4F5300099E4C7 /* 1231231.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = 1231231.swift; sourceTree = ""; }; 990ECFA82B95A45B003D37F1 /* Support_JSONStringViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Support_JSONStringViewController.swift; sourceTree = ""; }; 991259EC2BFB5B2000ED76B5 /* BaseData_Int8ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseData_Int8ViewController.swift; sourceTree = ""; }; 991259EE2BFB6C1000ED76B5 /* Container_DictViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Container_DictViewController.swift; sourceTree = ""; }; @@ -274,6 +277,7 @@ 99D945892B91C75600CC6470 /* SpecialData_dateViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpecialData_dateViewController.swift; sourceTree = ""; }; 99D9458B2B91C80300CC6470 /* SpecialData_dataViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpecialData_dataViewController.swift; sourceTree = ""; }; 99D9458D2B91C80C00CC6470 /* SpecialData_FloatViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpecialData_FloatViewController.swift; sourceTree = ""; }; + 99E438A82CA50D2E001C08B9 /* Introduce_12ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Introduce_12ViewController.swift; sourceTree = ""; }; 99F9E8A52BB5139900D68037 /* MixDecodingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MixDecodingViewController.swift; sourceTree = ""; }; AD8215B5E8E50F277C1C4356 /* Pods-SmartCodable_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmartCodable_Example.release.xcconfig"; path = "Target Support Files/Pods-SmartCodable_Example/Pods-SmartCodable_Example.release.xcconfig"; sourceTree = ""; }; AFEADC35BC2373F1DC69B73B /* Pods-SmartCodable_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmartCodable_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmartCodable_Tests/Pods-SmartCodable_Tests.release.xcconfig"; sourceTree = ""; }; @@ -339,6 +343,7 @@ 99675FDC2B3EC930006C83EC /* TestViewController.swift */, 99CE4D512BC687700006D435 /* Test2ViewController.swift */, 99153D762BD1124C004C01AD /* Test3ViewController.swift */, + 990CBAF32CA4F5300099E4C7 /* 1231231.swift */, 99C1E70C2B99A55E0090E8FD /* 说明信息 */, 99675FDF2B3EC930006C83EC /* Smart */, 9902B4CE2BB2F32D00310E69 /* 平替HandyJSON */, @@ -506,6 +511,7 @@ 99CE4D632BC6AB8B0006D435 /* Introduce_9ViewController.swift */, 9955576D2BE0DCC6005F9ABD /* Introduce_10ViewController.swift */, 995E03C12C182C68009E1E5B /* Introduce_11ViewController.swift */, + 99E438A82CA50D2E001C08B9 /* Introduce_12ViewController.swift */, 99CE4D652BC6AFC90006D435 /* IntroduceViewController.swift */, ); path = "1.Introduce(使用介绍)"; @@ -1011,6 +1017,7 @@ 996760402B3EC930006C83EC /* Introduce_3ViewController.swift in Sources */, 9956B9B92BD92D1900C711F5 /* DecodingArrayLogViewController.swift in Sources */, 998567292C12A3AE0021B7FD /* Encode_CustomKeyViewController.swift in Sources */, + 99E438A92CA50D2E001C08B9 /* Introduce_12ViewController.swift in Sources */, 9967604A2B3EC930006C83EC /* BaseViewController.swift in Sources */, 9967601B2B3EC930006C83EC /* ViewController.swift in Sources */, 9985671A2C11C6010021B7FD /* Encode_SpecialData_dateViewController.swift in Sources */, @@ -1082,6 +1089,7 @@ 996760242B3EC930006C83EC /* BaseData_BoolViewController.swift in Sources */, 9985670E2C11B9810021B7FD /* TestEncodeCaseViewController.swift in Sources */, 996760372B3EC930006C83EC /* CaseOneViewController.swift in Sources */, + 990CBAF42CA4F5300099E4C7 /* 1231231.swift in Sources */, 9902B4DC2BB304B400310E69 /* ReplaceHandyJSON_6ViewController.swift in Sources */, 9985671C2C11C6510021B7FD /* Encode_SpecialData_dataViewController.swift in Sources */, ); diff --git a/Example/SmartCodable/1231231.swift b/Example/SmartCodable/1231231.swift new file mode 100644 index 0000000..9a0f5bc --- /dev/null +++ b/Example/SmartCodable/1231231.swift @@ -0,0 +1,50 @@ +// +// 1231231.swift +// SmartCodable_Example +// +// Created by qixin on 2024/9/26. +// Copyright © 2024 CocoaPods. All rights reserved. +// + +import Foundation +import SwiftUI +import Combine +import SmartCodable + +class MyModel: ObservableObject, SmartCodable { + required init() { + + } + @Published + var name: String = "iOS Developer" + + enum CodingKeys: String, CodingKey { + case name + } + + // 自定义的编码方法 + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + } + + // 自定义的解码方法 + required init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + name = try container.decode(String.self, forKey: .name) + } + +} + +//struct ContentView: View { +// @ObservedObject var model = MyModel() +// +// var body: some View { +// VStack { +// Text("Hello, \(model.name)") +// Button("Change Name") { +// model.name = "Swift Developer" +// } +// } +// } +//} diff --git "a/Example/SmartCodable/Smart/1.Introduce(\344\275\277\347\224\250\344\273\213\347\273\215)/IntroduceViewController.swift" "b/Example/SmartCodable/Smart/1.Introduce(\344\275\277\347\224\250\344\273\213\347\273\215)/IntroduceViewController.swift" index 56fa032..0fdfa93 100644 --- "a/Example/SmartCodable/Smart/1.Introduce(\344\275\277\347\224\250\344\273\213\347\273\215)/IntroduceViewController.swift" +++ "b/Example/SmartCodable/Smart/1.Introduce(\344\275\277\347\224\250\344\273\213\347\273\215)/IntroduceViewController.swift" @@ -51,6 +51,7 @@ extension IntroduceViewController { ["name": "9. 支持UIColor的解析", "vc": "Introduce_9ViewController"], ["name": "10. 指定解析路径", "vc": "Introduce_10ViewController"], ["name": "11. 更新现有模型", "vc": "Introduce_11ViewController"], + ["name": "12. 支持Combine", "vc": "Introduce_12ViewController"], ] diff --git "a/Example/SmartCodable/Smart/1.Introduce(\344\275\277\347\224\250\344\273\213\347\273\215)/Introduce_12ViewController.swift" "b/Example/SmartCodable/Smart/1.Introduce(\344\275\277\347\224\250\344\273\213\347\273\215)/Introduce_12ViewController.swift" new file mode 100644 index 0000000..20b4c45 --- /dev/null +++ "b/Example/SmartCodable/Smart/1.Introduce(\344\275\277\347\224\250\344\273\213\347\273\215)/Introduce_12ViewController.swift" @@ -0,0 +1,70 @@ +// +// Introduce_12ViewController.swift +// SmartCodable_Example +// +// Created by qixin on 2024/9/26. +// Copyright © 2024 CocoaPods. All rights reserved. +// + +import Foundation +import Combine +import SmartCodable + +class Introduce_12ViewController: BaseViewController { + var cancellables = Set() + + override func viewDidLoad() { + super.viewDidLoad() + + let dict: [String: Any] = [ + "newName": 1, + "age": "333333" + ] + + if let model = PublishedModel.deserialize(from: dict) { + print("反序列化后的 name 值: \(model.name)") + + // 正确访问 name 属性的 Publisher + model.$name + .sink { newName in + print("name 属性发生变化,新值为: \(newName)") + } + .store(in: &cancellables) + + // 修改 model 的 name 属性 + model.name = "Updated iOS Developer" + } + } +} + +// 定义 PublishedModel,并实现反序列化 +class PublishedModel: ObservableObject, SmartCodable { + required init() {} + + @SmartPublished @SmartAny + var name: Any = "iOS Developer" + + static func mappingForKey() -> [SmartKeyTransformer]? { + [CodingKeys.name <--- "newName"] + } + +// static func mappingForValue() -> [SmartValueTransformer]? { +// [ +// CodingKeys.name <--- PublishedValueTransformer(), +// ] +// } +} + +struct PublishedValueTransformer: ValueTransformable { + func transformFromJSON(_ value: Any) -> String? { + return "good" + } + + func transformToJSON(_ value: String) -> String? { + return "gooooooood" + } + + typealias Object = String + + typealias JSON = String +} diff --git a/Example/SmartCodable/Test2ViewController.swift b/Example/SmartCodable/Test2ViewController.swift index 0331eb2..14282ab 100644 --- a/Example/SmartCodable/Test2ViewController.swift +++ b/Example/SmartCodable/Test2ViewController.swift @@ -8,45 +8,13 @@ import SmartCodable import BTPrint +import Combine class Test2ViewController: BaseViewController { - + var cancellables = Set() + override func viewDidLoad() { super.viewDidLoad() - - - SmartConfig.debugMode = .none - - guard let image = UIImage(named: "question") else { return } - let byte = UIImagePNGRepresentation(image)! - - - var dict111: [String: Any] = [ - "id": "112312", - "name": "hello", - "byte": byte - ] - -// print(dict111) - - let model = DataModel11.deserialize(from: dict111) - print(model) - print(model?.thumbnail_picture) - } -} -struct DataModel11: SmartCodable { - /// 表id - var id: Int = -1 - /// 名称 - var name: String = "" - /// 缩略图流 - var byte: Data? = nil - - var thumbnail_picture: UIImage? { - guard let byte = byte else { - return nil - } - return UIImage(data: byte) } } diff --git a/Example/SmartCodable/Test3ViewController.swift b/Example/SmartCodable/Test3ViewController.swift index ab3923c..2891d8b 100644 --- a/Example/SmartCodable/Test3ViewController.swift +++ b/Example/SmartCodable/Test3ViewController.swift @@ -19,25 +19,73 @@ import CleanJSON */ +import SmartCodable + class Test3ViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - - let string = "{\"id\":1, \"sex\":{\"id\":1}}" + - if let model = Model.deserialize(from: string) { - smartPrint(value: model) + + let dict1: [String: Any] = [ + "age": 10, + "name": "Mccc", + "location": [ + "province": "Jiang zhou", + "city": "Su zhou", + ] + + ] + + if let jsonData = try? JSONSerialization.data(withJSONObject: dict1, options: []) { + // Successfully converted Dictionary to Data + print("JSON Data:", jsonData) + + do { + let obj = try JSONDecoder().decode(Model.self, from: jsonData) + print("obj = ", obj) + + } catch { + print("error = ", error) + } + + // If you want to convert it back to a String for debugging purposes + if let jsonString = String(data: jsonData, encoding: .utf8) { + print("JSON String:", jsonString) + } } + if let model = Model.deserialize(from: dict1) { + smartPrint(value: model) + print("\n") + let dict = model.toDictionary() ?? [:] + print(dict) + } } - +} + + + + +extension Test3ViewController { struct Model: SmartCodable { - var id: Int = 0 - var sex: SubModel = SubModel() + var name: String = "" + @IgnoredKey + var ignore: String = "" + @IgnoredKey + var ignore2 = "" + var age: Int = 0 + var location: Location? } - struct SubModel: SmartCodable { - var id : Int = 0 + struct Location: SmartCodable { + var province: String = "" + + // 忽略解析 + @IgnoredKey + var city: String = "area123" } } + + diff --git a/Example/SmartCodable/TestViewController.swift b/Example/SmartCodable/TestViewController.swift index f9f4847..b75935f 100644 --- a/Example/SmartCodable/TestViewController.swift +++ b/Example/SmartCodable/TestViewController.swift @@ -16,20 +16,8 @@ import BTPrint /** 字典的值情况 - * 无key - * 值为null - * 值类型错误 - */ - -/** 字典的类型情况 - * 非可选基础字典 - * 可选基础字典 - * - * 非可续Model - * 可选Model - * - * 使用 SmartAny 修饰 - * 使用 SmartPlat 修饰 + 1. @Published 修饰的属性的解析。 + 2. 继承关系!!!! * */ diff --git a/SmartCodable.podspec b/SmartCodable.podspec index 69f97a4..ffe2a7d 100644 --- a/SmartCodable.podspec +++ b/SmartCodable.podspec @@ -12,7 +12,7 @@ Pod::Spec.new do |s| s.name = 'SmartCodable' - s.version = '4.1.10' + s.version = '4.1.11-beta' s.summary = '数据解析库' s.homepage = 'https://github.com/intsig171' diff --git a/SmartCodable/Classes/JSONDecoder/Decoder/Impl/JSONDecoderImpl+KeyedContainer.swift b/SmartCodable/Classes/JSONDecoder/Decoder/Impl/JSONDecoderImpl+KeyedContainer.swift index 0ade4d9..48a45b3 100644 --- a/SmartCodable/Classes/JSONDecoder/Decoder/Impl/JSONDecoderImpl+KeyedContainer.swift +++ b/SmartCodable/Classes/JSONDecoder/Decoder/Impl/JSONDecoderImpl+KeyedContainer.swift @@ -182,7 +182,7 @@ extension JSONDecoderImpl.KeyedContainer { guard let value = try? getValue(forKey: key) else { return try forceDecode(forKey: key) } - + if let decoded = impl.cache.tranform(value: value, for: key) as? String { return decoded } @@ -288,11 +288,21 @@ extension JSONDecoderImpl.KeyedContainer { return try decode(CGFloat.self, forKey: key) as! T } + + print("type = \(type)"); + // 如果值可以被成功获取 if let value = try? getValue(forKey: key) { - if let decoded = impl.cache.tranform(value: value, for: key) as? T { - return decoded - } - } + if let decoded = impl.cache.tranform(value: value, for: key) { + + // 检查 SmartPublished 包装器类型 + if let publishedType = T.self as? any SmartPublishedProtocol.Type, + let wrappedValue = decoded as? Any, + let publishedValue = publishedType.createInstance(with: wrappedValue) as? T { + return publishedValue + } + } + } + if let type = type as? FlatType.Type { @@ -463,7 +473,7 @@ extension JSONDecoderImpl.KeyedContainer { if let decoded = try? newDecoder.unwrap(as: type) { return didFinishMapping(decoded) } - + if let decoded: T = optionalDecode(forKey: key) { return didFinishMapping(decoded) } else { diff --git a/SmartCodable/Classes/SmartType/SmartPublished.swift b/SmartCodable/Classes/SmartType/SmartPublished.swift new file mode 100644 index 0000000..1b0e30a --- /dev/null +++ b/SmartCodable/Classes/SmartType/SmartPublished.swift @@ -0,0 +1,169 @@ +// +// SmartPublished.swift +// SmartCodable +// +// Created by qixin on 2024/9/26. +// + +#if canImport(Combine) && swift(>=5.1) +import Foundation +import SwiftUI +import Combine + + +/// 这段代码实现了一个自定义的属性包装器 SmartPublished, +/// 将Combine 的发布功能与 Codable 的数据序列化能力结合。通过属性包装器简化属性的声明,同时支持相应式编程。 +/// 用于结合 Combine 的功能和编码解码支持。以下是对整个代码的说明。 + + +/// 协议SmartPublishedProtocol,目标是为任何遵循该协议的类型提供统一的接口。 +/// WrappedValue定义泛型类型,必须要求符合 Codable 协议。 +/// createInstance方法,尝试给定义的值创建实例。 +public protocol SmartPublishedProtocol { + associatedtype WrappedValue: Codable + init(wrappedValue: WrappedValue) + + static func createInstance(with value: Any) -> Self? +} + +/// PublishedContainer +/// @Published使属性成为一个发布者,自动发布变更。 +/// ObservableObject可以被SwiftUI或其他观察者订阅以监听其变化。 +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) +public class PublishedContainer: ObservableObject { + @Published public var wrappedValue: Value + + public init(wrappedValue: Value) { + self.wrappedValue = wrappedValue + } +} + + +/// 属性包装器SmartPublished,允许在声明属性时附加额外的行为。 +/// container使用PublishedContainer管理值和发布功能。 +/// wrappedValue提供对实际值的访问。 +/// projectedValue提供一个发布者,可供订阅。 +@propertyWrapper +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) +public struct SmartPublished: Codable { + private var container: PublishedContainer + + public var wrappedValue: Value { + get { container.wrappedValue } + set { container.wrappedValue = newValue } + } + + public var projectedValue: Published.Publisher { + container.$wrappedValue + } + + public init(wrappedValue: Value) { + self.container = PublishedContainer(wrappedValue: wrappedValue) + } + + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + let value = try container.decode(Value.self) + self.container = PublishedContainer(wrappedValue: value) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + try container.encode(self.wrappedValue) + } +} + + + +/// 协议扩展 +/// 使 SmartPublished 符合 SmartPublishedProtocol。 +/// 利用泛型和类型检查,从任意值创建 SmartPublished 实例。 +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) +extension SmartPublished: SmartPublishedProtocol { + public static func createInstance(with value: Any) -> SmartPublished? { + if let value = value as? Value { + return SmartPublished(wrappedValue: value) + } + return nil + } +} +#else +#error("SmartPublished requires iOS 13 or later. Please update your deployment target.") +#endif + + + + + + + +/** + @propertyWrapper + public struct AnySmartPublished: Codable { + public var wrappedValue: Value + + public init(wrappedValue: Value) { + self.wrappedValue = wrappedValue + } + + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + self.wrappedValue = try container.decode(Value.self) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + try container.encode(wrappedValue) + } + } + + protocol SmartPublishedProtocol { + associatedtype WrappedValue + init(wrappedValue: WrappedValue) + + static func createInstance(with value: Any) -> Self? + } + + extension AnySmartPublished: SmartPublishedProtocol { + static func createInstance(with value: Any) -> AnySmartPublished? { + if let value = value as? Value { + return AnySmartPublished(wrappedValue: value) + } + return nil + } + } + */ + + + + +/** + // 自定义的 PublishedCodable 属性包装器 + @propertyWrapper + public class PublishedCodable: Codable { + + // 包含 Published 的属性 + @Published public var wrappedValue: Value + + // 用于暴露 Published 的 publisher + public var projectedValue: Published.Publisher { + return $wrappedValue + } + + public init(wrappedValue: Value) { + self.wrappedValue = wrappedValue + } + + // 解码器的实现 + required public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + self._wrappedValue = Published(wrappedValue: try container.decode(Value.self)) + } + + // 编码器的实现 + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + try container.encode(wrappedValue) + } + } + */