From 9db326829d41e119169d5956c59bcb5e9bbbe6ca Mon Sep 17 00:00:00 2001 From: Jim Boyd Date: Tue, 6 Apr 2021 13:26:46 -0600 Subject: [PATCH 1/3] Add better support for SwiftPM through the new `Bundled` protocol. --- Example/Podfile.lock | 12 +- .../Pods/Local Podspecs/Reusable.podspec.json | 17 + Example/Pods/Manifest.lock | 12 +- Example/Pods/Pods.xcodeproj/project.pbxproj | 705 +++++++++--------- .../xcschemes/Reusable-iOS.xcscheme | 2 +- .../xcschemes/Reusable-tvOS.xcscheme | 2 +- .../Pods-ReusableDemo iOS-frameworks.sh | 94 ++- .../Pods-ReusableDemo iOS.debug.xcconfig | 2 + .../Pods-ReusableDemo iOS.release.xcconfig | 2 + .../Pods-ReusableDemo tvOS-frameworks.sh | 94 ++- .../Pods-ReusableDemo tvOS.debug.xcconfig | 2 + .../Pods-ReusableDemo tvOS.release.xcconfig | 2 + .../Reusable-iOS/Reusable-iOS.debug.xcconfig | 13 + .../Reusable-iOS.release.xcconfig | 13 + .../Reusable-tvOS.debug.xcconfig | 13 + .../Reusable-tvOS.release.xcconfig | 13 + .../CollectionHeaderView.swift | 2 +- .../MyXIBIndexSquaceCell.swift | 2 +- .../CustomViews/MyCustomWidget.swift | 2 +- .../Storyboards/InfoViewController.swift | 2 +- .../TableViewCells/MyHeaderTableView.swift | 2 +- .../TableViewCells/MyXIBInfoCell.swift | 2 +- .../TableViewCells/MyXIBTextCell.swift | 2 +- .../ReusableDemo tvOS/MyCustomWidget.swift | 2 +- .../ReusableDemo.xcodeproj/project.pbxproj | 16 +- .../xcschemes/ReusableDemo iOS.xcscheme | 10 +- .../xcschemes/ReusableDemo tvOS.xcscheme | 10 +- Package.swift | 2 +- README.md | 45 ++ Reusable.podspec | 7 + Sources/Bundle/Bundled.swift | 23 + Sources/Bundle/BundledModule.swift | 31 + Sources/Bundle/BundledSelf.swift | 28 + Sources/Storyboard/StoryboardBased.swift | 4 +- Sources/Storyboard/StoryboardSceneBased.swift | 2 +- Sources/View/NibLoadable.swift | 4 +- Sources/View/NibOwnerLoadable.swift | 4 +- Sources/View/Reusable.swift | 2 +- 38 files changed, 731 insertions(+), 471 deletions(-) create mode 100644 Example/Pods/Target Support Files/Reusable-iOS/Reusable-iOS.debug.xcconfig create mode 100644 Example/Pods/Target Support Files/Reusable-iOS/Reusable-iOS.release.xcconfig create mode 100644 Example/Pods/Target Support Files/Reusable-tvOS/Reusable-tvOS.debug.xcconfig create mode 100644 Example/Pods/Target Support Files/Reusable-tvOS/Reusable-tvOS.release.xcconfig create mode 100644 Sources/Bundle/Bundled.swift create mode 100644 Sources/Bundle/BundledModule.swift create mode 100644 Sources/Bundle/BundledSelf.swift diff --git a/Example/Podfile.lock b/Example/Podfile.lock index b862518..e8f8ff6 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,9 +1,13 @@ PODS: - Reusable (4.1.1): + - Reusable/Bundled (= 4.1.1) - Reusable/Storyboard (= 4.1.1) - Reusable/View (= 4.1.1) - - Reusable/Storyboard (4.1.1) - - Reusable/View (4.1.1) + - Reusable/Bundled (4.1.1) + - Reusable/Storyboard (4.1.1): + - Reusable/Bundled + - Reusable/View (4.1.1): + - Reusable/Bundled DEPENDENCIES: - Reusable (from `../`) @@ -13,8 +17,8 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - Reusable: 53a9acf5c536f229b31b5865782414b508252ddb + Reusable: 7b5afdfc25a6e28b6f81839ee5235c168a788487 PODFILE CHECKSUM: 0bd0b2356bb3b5810dfd8bef84ec4a18a8f93156 -COCOAPODS: 1.8.4 +COCOAPODS: 1.10.1 diff --git a/Example/Pods/Local Podspecs/Reusable.podspec.json b/Example/Pods/Local Podspecs/Reusable.podspec.json index 48ad035..e612844 100644 --- a/Example/Pods/Local Podspecs/Reusable.podspec.json +++ b/Example/Pods/Local Podspecs/Reusable.podspec.json @@ -24,12 +24,29 @@ "swift_versions": "5.0", "frameworks": "UIKit", "subspecs": [ + { + "name": "Bundled", + "source_files": [ + "Sources/Bundle/Bundled.swift", + "Sources/Bundle/BundledSelf.swift" + ] + }, { "name": "View", + "dependencies": { + "Reusable/Bundled": [ + + ] + }, "source_files": "Sources/View/*.swift" }, { "name": "Storyboard", + "dependencies": { + "Reusable/Bundled": [ + + ] + }, "source_files": "Sources/Storyboard/*.swift" } ], diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index b862518..e8f8ff6 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,9 +1,13 @@ PODS: - Reusable (4.1.1): + - Reusable/Bundled (= 4.1.1) - Reusable/Storyboard (= 4.1.1) - Reusable/View (= 4.1.1) - - Reusable/Storyboard (4.1.1) - - Reusable/View (4.1.1) + - Reusable/Bundled (4.1.1) + - Reusable/Storyboard (4.1.1): + - Reusable/Bundled + - Reusable/View (4.1.1): + - Reusable/Bundled DEPENDENCIES: - Reusable (from `../`) @@ -13,8 +17,8 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - Reusable: 53a9acf5c536f229b31b5865782414b508252ddb + Reusable: 7b5afdfc25a6e28b6f81839ee5235c168a788487 PODFILE CHECKSUM: 0bd0b2356bb3b5810dfd8bef84ec4a18a8f93156 -COCOAPODS: 1.8.4 +COCOAPODS: 1.10.1 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index e946bb6..9741f55 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,45 +7,49 @@ objects = { /* Begin PBXBuildFile section */ - 00FB389BAEF752C3379ECAE86539EFFF /* Reusable-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 315FC5890D52AA8E3AEA6899FAC211F0 /* Reusable-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0EC77D80825ECBC0562B63685AADCE16 /* NibOwnerLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A449A0BEF03C4BCBE3E688825F37208F /* NibOwnerLoadable.swift */; }; - 1A95822F6E94E50E1FAC98BCC258BFC1 /* Pods-ReusableDemo iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 05563169DADAC018DAC8C47C0A28319F /* Pods-ReusableDemo iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1EC6F5426B95FB5ABC14458DB8262270 /* Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E8D205357C129827F66030FC4A9BB95 /* Reusable.swift */; }; - 22F24CCF51CABB64EFF449A70D77F456 /* UITableView+Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C02902C45345E22CD0B969822F6DECF /* UITableView+Reusable.swift */; }; - 276926752A433995D023E56D6BAB715C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AAF8895BC2A4ACC7A5B2AA1F78CC8F9 /* UIKit.framework */; }; - 277B0ABA7CBE8C829BD479768FEDD982 /* NibLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 700767BA88CFC6741E9F2F58DAB84F33 /* NibLoadable.swift */; }; - 2DDD941F642BAFE42BC59A7238410275 /* Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E8D205357C129827F66030FC4A9BB95 /* Reusable.swift */; }; - 4D80E76C7FD4E1AD214A624AE350F1B2 /* Reusable-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F01C64608E610A556FC5CC5472406B50 /* Reusable-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4FE892071375477A47FF38B9949A6686 /* UICollectionView+Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B9449D4F8133CF6EF5B70BE7F974896 /* UICollectionView+Reusable.swift */; }; - 5717332B0A4931BD1C4B04B9C62FB0D2 /* UICollectionView+Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B9449D4F8133CF6EF5B70BE7F974896 /* UICollectionView+Reusable.swift */; }; - 6262615835FA8FA550C4455E3286B82C /* StoryboardBased.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13B5D0EF2914F9702B1D25E38DF92B29 /* StoryboardBased.swift */; }; - 640AB5AC3D7B09BF4D8745D0E2999AD3 /* Pods-ReusableDemo iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3281318B7BC8371AE487827AB5365395 /* Pods-ReusableDemo iOS-dummy.m */; }; - 66CB5E5218878EC21D89E17A374FF48C /* StoryboardSceneBased.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A3A9D7A779306CE519FC8A3AE7248E /* StoryboardSceneBased.swift */; }; - 7048421A42604066FC79934F5668BF6B /* StoryboardBased.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13B5D0EF2914F9702B1D25E38DF92B29 /* StoryboardBased.swift */; }; - 921D3F32416F81213EC05E4E8D4AAD1F /* Pods-ReusableDemo tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E606CF5AC0A9E4F651F4CF2EF4BD3D /* Pods-ReusableDemo tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 979CED18FA554A2F13E49376EDAC74DD /* NibLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 700767BA88CFC6741E9F2F58DAB84F33 /* NibLoadable.swift */; }; - 97A70EE840A09E9D2A8346F54E95F53E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D5B5499AB1EBE369788EC320431977E4 /* Foundation.framework */; }; - 9C1075367813DDE5F8DFC26CB81E439A /* Reusable-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E213D9D3B55925BC6E54276F37CF0F72 /* Reusable-iOS-dummy.m */; }; - 9C3C5D174F00C6FFD23A5B140A320A5A /* NibOwnerLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A449A0BEF03C4BCBE3E688825F37208F /* NibOwnerLoadable.swift */; }; - A3B94C9471CD7C8C1B6E960AE489E387 /* StoryboardSceneBased.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A3A9D7A779306CE519FC8A3AE7248E /* StoryboardSceneBased.swift */; }; - AE6AC0D1661454AB328835868B4595D2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17580998B7269440BF57F2E2736B4EED /* Foundation.framework */; }; - B6135F0966A50325B41F4259AB9B3E35 /* UITableView+Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C02902C45345E22CD0B969822F6DECF /* UITableView+Reusable.swift */; }; - B9F44625E7AD4A367A40122DB66B1CD2 /* Pods-ReusableDemo tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D735DF71FCB8ABBFAE3640101A407832 /* Pods-ReusableDemo tvOS-dummy.m */; }; - D0C59326797466183A54F98B3CA765E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17580998B7269440BF57F2E2736B4EED /* Foundation.framework */; }; - DEBC4EDFE55B627D37CCFDF5ACEE972D /* Reusable-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A36B27980F2030A691EF1D36AFF101 /* Reusable-tvOS-dummy.m */; }; - F976BBDD68272F53C8F4637C938F33EF /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BF2A9BCD31BA3F8E3F99956FBE1F2E4 /* UIKit.framework */; }; - F99CAA0F70891D99A34C61BD5857E6D4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D5B5499AB1EBE369788EC320431977E4 /* Foundation.framework */; }; + 02BC760C2A49A3B54250722F968B234F /* Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5CC0DBB430BEA4B5415663CFBCE8585 /* Reusable.swift */; }; + 1BC6E7FB02320214D6ABDA3918A2254A /* StoryboardSceneBased.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCC4878128AF4D27D3A8EA250083A1E8 /* StoryboardSceneBased.swift */; }; + 23215E06BB1015E2C525D27B6CA47DE1 /* Pods-ReusableDemo tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E606CF5AC0A9E4F651F4CF2EF4BD3D /* Pods-ReusableDemo tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F8ABBF18526CFC6BC0C9E6283D13BF6 /* Reusable-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 48A2F48C11C7EC23FA21E3ED59229FC6 /* Reusable-iOS-dummy.m */; }; + 33C07999439B14576686E27B554E779A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97D7A80426FAC3F53796169282DA9188 /* UIKit.framework */; }; + 3D30854F8DAF3D6A45DD3D1FBC51DB93 /* Pods-ReusableDemo tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D735DF71FCB8ABBFAE3640101A407832 /* Pods-ReusableDemo tvOS-dummy.m */; }; + 4A5018B30C30666ED1C0BD6873F374FA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 656D92F635410D7659FD9BE5201F202B /* Foundation.framework */; }; + 4E9871864A73FF21A94A4769BF61CE73 /* BundledSelf.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAEF7B5A4A35543CF4A8E492F3B28F3A /* BundledSelf.swift */; }; + 4ED06F517C8EAEA42C9C3FD81EEAF0B8 /* StoryboardBased.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D0D781C7BB1824C20B51DBF042F9305 /* StoryboardBased.swift */; }; + 5B444F7837C4334D7176F3EBC3D1B8AB /* NibLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE6BD3D20F6611F99957578E2F3313D7 /* NibLoadable.swift */; }; + 6043D8A4275BC42D8EDBC57EF70CC696 /* Reusable-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = ED78C61343518535DB5ABDC379B60E2A /* Reusable-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 633C78A39D3121403DBC4B1932CCDB50 /* Bundled.swift in Sources */ = {isa = PBXBuildFile; fileRef = 414796F6B45E1D0798DBDDB99729F50D /* Bundled.swift */; }; + 76449B80AB61DBBA3F739527FF794398 /* StoryboardBased.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D0D781C7BB1824C20B51DBF042F9305 /* StoryboardBased.swift */; }; + 79DA2CDEED058E4CE1D789A6EFC2A668 /* NibOwnerLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A71AE25DF8990521A088D3F20ACD09F /* NibOwnerLoadable.swift */; }; + 8A75E9A41CC53359CAA699C3163008C7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2B1C95F34E7D919EE33DF34EAFD8D66 /* Foundation.framework */; }; + 8BF2C57FCEAD5D910794E6841A964DFE /* StoryboardSceneBased.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCC4878128AF4D27D3A8EA250083A1E8 /* StoryboardSceneBased.swift */; }; + 8CEF0FFEC3E3458873ECF757F52BF17B /* Bundled.swift in Sources */ = {isa = PBXBuildFile; fileRef = 414796F6B45E1D0798DBDDB99729F50D /* Bundled.swift */; }; + 8ECE932BA7A25A09F87639AE6F0B5F3B /* Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5CC0DBB430BEA4B5415663CFBCE8585 /* Reusable.swift */; }; + 9AD3188C759205C07AFD2F12720BB817 /* UITableView+Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6041048F89BD951383BDCDA5BBFBBE5B /* UITableView+Reusable.swift */; }; + 9C6BF5C0F997EB868049DB7894DC3571 /* UICollectionView+Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7184F3243C5B14665A22CA691D66D6B2 /* UICollectionView+Reusable.swift */; }; + 9D9C3EF08E5F6824EDF8BD40EF373569 /* Pods-ReusableDemo iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3281318B7BC8371AE487827AB5365395 /* Pods-ReusableDemo iOS-dummy.m */; }; + 9F80F13100ADFEB68FA64E1C3BAE54E7 /* Pods-ReusableDemo iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 05563169DADAC018DAC8C47C0A28319F /* Pods-ReusableDemo iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A452240C21A242446C6294B3A9B1D45D /* NibOwnerLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A71AE25DF8990521A088D3F20ACD09F /* NibOwnerLoadable.swift */; }; + A8C476085F6B40EC115DAA442019F022 /* Reusable-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 91B35049CD30161AFB2E1293E0DCD765 /* Reusable-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ACD592F2435E0888A90FE4535E8CF401 /* NibLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE6BD3D20F6611F99957578E2F3313D7 /* NibLoadable.swift */; }; + C49105048133AFB260CD7A1C4E8A0146 /* UICollectionView+Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7184F3243C5B14665A22CA691D66D6B2 /* UICollectionView+Reusable.swift */; }; + D365C6B1E4ABEA42E356B6802172F6C1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 656D92F635410D7659FD9BE5201F202B /* Foundation.framework */; }; + D47A6036D122B83DBC87DA6ED9F6BD1B /* Reusable-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DFB8A7388637CE7F10BC61C2D23EBCA /* Reusable-tvOS-dummy.m */; }; + EBD0387AF78F3CBD069857DEAF5378F0 /* UITableView+Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6041048F89BD951383BDCDA5BBFBBE5B /* UITableView+Reusable.swift */; }; + EC9F81B52EB698EAE7E38A9F5BD31BA0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2B1C95F34E7D919EE33DF34EAFD8D66 /* Foundation.framework */; }; + FD747D8452EB0F51BA1399B61BAB004C /* BundledSelf.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAEF7B5A4A35543CF4A8E492F3B28F3A /* BundledSelf.swift */; }; + FFCEDC4595701BA3D9CF0B4CFEE84A47 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70A7330240151590C87494B8C5CE367A /* UIKit.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 12F63F9FF8DC624BA5073CED5773EF4C /* PBXContainerItemProxy */ = { + AC9BDA25BA88CEEDCD99880E54029AF4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 5B17BD52D480B5C801102C36AE584EFC; remoteInfo = "Reusable-iOS"; }; - 661F3C1ECEEF85B31CCEC7673047ACDC /* PBXContainerItemProxy */ = { + BD92B8B98B0318A2F756769DC0EA2704 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; @@ -56,110 +60,128 @@ /* Begin PBXFileReference section */ 05563169DADAC018DAC8C47C0A28319F /* Pods-ReusableDemo iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ReusableDemo iOS-umbrella.h"; sourceTree = ""; }; - 080A03A9616CB8F003769F910C0F873B /* Reusable-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Reusable-tvOS.xcconfig"; path = "../Reusable-tvOS/Reusable-tvOS.xcconfig"; sourceTree = ""; }; + 05E2A31D3C782A099594C1B559E7A2F1 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 09191999E9810C9C3893F9FB97DCB69C /* Pods-ReusableDemo tvOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReusableDemo tvOS-acknowledgements.plist"; sourceTree = ""; }; - 12D38603E02E247F62298B168410FE4E /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; - 13B5D0EF2914F9702B1D25E38DF92B29 /* StoryboardBased.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoryboardBased.swift; path = Sources/Storyboard/StoryboardBased.swift; sourceTree = ""; }; - 17580998B7269440BF57F2E2736B4EED /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 15D03F9152C580FFC79A285DE698ED7F /* Reusable-tvOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "Reusable-tvOS-Info.plist"; path = "../Reusable-tvOS/Reusable-tvOS-Info.plist"; sourceTree = ""; }; 194544F6DB8473C9AC0B356557BF10F9 /* Pods-ReusableDemo iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReusableDemo iOS.debug.xcconfig"; sourceTree = ""; }; - 1FCD317B673774D77E5BB05FD425BB30 /* Reusable-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Reusable-iOS-Info.plist"; sourceTree = ""; }; - 2662AE7D7A2CC9CD798783BFBEE81DB9 /* Reusable.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Reusable.framework; path = "Reusable-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 29BC824DB679C32E8A3C976518F5A79F /* Reusable-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Reusable-tvOS-prefix.pch"; path = "../Reusable-tvOS/Reusable-tvOS-prefix.pch"; sourceTree = ""; }; - 315FC5890D52AA8E3AEA6899FAC211F0 /* Reusable-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Reusable-iOS-umbrella.h"; sourceTree = ""; }; + 2662AE7D7A2CC9CD798783BFBEE81DB9 /* Reusable.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Reusable.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 29EE454C23FFB86F0044AEF332824505 /* Reusable-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Reusable-tvOS-prefix.pch"; path = "../Reusable-tvOS/Reusable-tvOS-prefix.pch"; sourceTree = ""; }; + 2A71AE25DF8990521A088D3F20ACD09F /* NibOwnerLoadable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NibOwnerLoadable.swift; path = Sources/View/NibOwnerLoadable.swift; sourceTree = ""; }; + 2DFB8A7388637CE7F10BC61C2D23EBCA /* Reusable-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Reusable-tvOS-dummy.m"; path = "../Reusable-tvOS/Reusable-tvOS-dummy.m"; sourceTree = ""; }; 3281318B7BC8371AE487827AB5365395 /* Pods-ReusableDemo iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ReusableDemo iOS-dummy.m"; sourceTree = ""; }; - 3867CC990A1B21FE0FD3330A3C2C8484 /* Reusable.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Reusable.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 38FB14722EFC63670DCFD642A1F433B4 /* Pods-ReusableDemo tvOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReusableDemo tvOS-Info.plist"; sourceTree = ""; }; - 42C803AFCB18642EA9CE002B06A59943 /* Pods_ReusableDemo_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ReusableDemo_iOS.framework; path = "Pods-ReusableDemo iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3F74DB65374086A0C8F0F796961CE78A /* Reusable-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Reusable-iOS.debug.xcconfig"; sourceTree = ""; }; + 414796F6B45E1D0798DBDDB99729F50D /* Bundled.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bundled.swift; path = Sources/Bundle/Bundled.swift; sourceTree = ""; }; + 42729F801CD55A509F3A2F2624C6CE5D /* Reusable-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Reusable-iOS-prefix.pch"; sourceTree = ""; }; + 42C803AFCB18642EA9CE002B06A59943 /* Pods_ReusableDemo_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ReusableDemo_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4461D0024D5923CD1DCE0EFC3D256E3B /* Reusable-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Reusable-iOS.modulemap"; sourceTree = ""; }; + 45E7385011ADC41A6C953EF4B5D388A3 /* Reusable-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Reusable-tvOS.debug.xcconfig"; path = "../Reusable-tvOS/Reusable-tvOS.debug.xcconfig"; sourceTree = ""; }; 47C65ED1E1FFC7096A69FFD51FAA1D3D /* Pods-ReusableDemo iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ReusableDemo iOS.modulemap"; sourceTree = ""; }; - 4BF2A9BCD31BA3F8E3F99956FBE1F2E4 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 48A2F48C11C7EC23FA21E3ED59229FC6 /* Reusable-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Reusable-iOS-dummy.m"; sourceTree = ""; }; 4ED6871CA98E69032399F416BC988DBD /* Pods-ReusableDemo iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReusableDemo iOS-acknowledgements.plist"; sourceTree = ""; }; - 5154F448376A5DC3123584BF82E0EBC4 /* Reusable-tvOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "Reusable-tvOS-Info.plist"; path = "../Reusable-tvOS/Reusable-tvOS-Info.plist"; sourceTree = ""; }; 5668A35DE24EFF2FF7DDB2247EE0FC2F /* Pods-ReusableDemo tvOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ReusableDemo tvOS-acknowledgements.markdown"; sourceTree = ""; }; - 5B9449D4F8133CF6EF5B70BE7F974896 /* UICollectionView+Reusable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UICollectionView+Reusable.swift"; path = "Sources/View/UICollectionView+Reusable.swift"; sourceTree = ""; }; + 5A698CCAB7384E185E2E3FB946A234EF /* Reusable-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Reusable-iOS.release.xcconfig"; sourceTree = ""; }; 5F95A22540D1045CACC4B09CCCEA5127 /* Pods-ReusableDemo iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReusableDemo iOS-frameworks.sh"; sourceTree = ""; }; 5FF460DDAD2269541A3F2B425AD5A5C8 /* Pods-ReusableDemo iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReusableDemo iOS.release.xcconfig"; sourceTree = ""; }; + 6041048F89BD951383BDCDA5BBFBBE5B /* UITableView+Reusable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+Reusable.swift"; path = "Sources/View/UITableView+Reusable.swift"; sourceTree = ""; }; + 65355DFAC0E2B8D5D851F461F1089434 /* Reusable-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Reusable-tvOS.modulemap"; path = "../Reusable-tvOS/Reusable-tvOS.modulemap"; sourceTree = ""; }; + 656D92F635410D7659FD9BE5201F202B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 677F50DC2DE6906C3C2E7C534D6EAD75 /* Pods-ReusableDemo tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReusableDemo tvOS.release.xcconfig"; sourceTree = ""; }; 6BD3512BBD6CD0B49D077A5F0AA6788F /* Pods-ReusableDemo tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ReusableDemo tvOS.modulemap"; sourceTree = ""; }; - 700767BA88CFC6741E9F2F58DAB84F33 /* NibLoadable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NibLoadable.swift; path = Sources/View/NibLoadable.swift; sourceTree = ""; }; - 7AAF8895BC2A4ACC7A5B2AA1F78CC8F9 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 70A7330240151590C87494B8C5CE367A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 7184F3243C5B14665A22CA691D66D6B2 /* UICollectionView+Reusable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UICollectionView+Reusable.swift"; path = "Sources/View/UICollectionView+Reusable.swift"; sourceTree = ""; }; 7DA67DD47FE45B93B13D6CCCD59EC578 /* Pods-ReusableDemo iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReusableDemo iOS-Info.plist"; sourceTree = ""; }; - 7E0220E452D37669D260C22EC01BF6EC /* Reusable-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Reusable-iOS.xcconfig"; sourceTree = ""; }; 7E73E647B0D7DFBB4B6B6A0ABFE16505 /* Pods-ReusableDemo tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReusableDemo tvOS.debug.xcconfig"; sourceTree = ""; }; - 83A36B27980F2030A691EF1D36AFF101 /* Reusable-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Reusable-tvOS-dummy.m"; path = "../Reusable-tvOS/Reusable-tvOS-dummy.m"; sourceTree = ""; }; - 8C02902C45345E22CD0B969822F6DECF /* UITableView+Reusable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+Reusable.swift"; path = "Sources/View/UITableView+Reusable.swift"; sourceTree = ""; }; - 8E8D205357C129827F66030FC4A9BB95 /* Reusable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reusable.swift; path = Sources/View/Reusable.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; }; - 9F98279E10963E4CAE9C9D485726917D /* Reusable-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Reusable-tvOS.modulemap"; path = "../Reusable-tvOS/Reusable-tvOS.modulemap"; sourceTree = ""; }; + 8E285BFCEE7554FD2873D010F21CF149 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 91B35049CD30161AFB2E1293E0DCD765 /* Reusable-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Reusable-iOS-umbrella.h"; sourceTree = ""; }; + 97D7A80426FAC3F53796169282DA9188 /* 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; }; + 9B34630B17DC04D6EE0FE0C4F24B5090 /* Reusable-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Reusable-iOS-Info.plist"; sourceTree = ""; }; + 9D0D781C7BB1824C20B51DBF042F9305 /* StoryboardBased.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoryboardBased.swift; path = Sources/Storyboard/StoryboardBased.swift; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; A3E606CF5AC0A9E4F651F4CF2EF4BD3D /* Pods-ReusableDemo tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ReusableDemo tvOS-umbrella.h"; sourceTree = ""; }; - A449A0BEF03C4BCBE3E688825F37208F /* NibOwnerLoadable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NibOwnerLoadable.swift; path = Sources/View/NibOwnerLoadable.swift; sourceTree = ""; }; - A9A3A9D7A779306CE519FC8A3AE7248E /* StoryboardSceneBased.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoryboardSceneBased.swift; path = Sources/Storyboard/StoryboardSceneBased.swift; sourceTree = ""; }; - C2F389995DE86899F7534AB7850D1E13 /* Reusable-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Reusable-iOS.modulemap"; sourceTree = ""; }; - CE36487AAC2DE854F71347EFA51632A6 /* Pods_ReusableDemo_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ReusableDemo_tvOS.framework; path = "Pods-ReusableDemo tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - D5B5499AB1EBE369788EC320431977E4 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - D643F6CC053BC7206F607AB6CC95D678 /* Reusable.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Reusable.framework; path = "Reusable-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + AAEF7B5A4A35543CF4A8E492F3B28F3A /* BundledSelf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BundledSelf.swift; path = Sources/Bundle/BundledSelf.swift; sourceTree = ""; }; + AE6BD3D20F6611F99957578E2F3313D7 /* NibLoadable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NibLoadable.swift; path = Sources/View/NibLoadable.swift; sourceTree = ""; }; + BA159CAE762D1273AF428D60D42BB753 /* Reusable-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Reusable-tvOS.release.xcconfig"; path = "../Reusable-tvOS/Reusable-tvOS.release.xcconfig"; sourceTree = ""; }; + BCC4878128AF4D27D3A8EA250083A1E8 /* StoryboardSceneBased.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoryboardSceneBased.swift; path = Sources/Storyboard/StoryboardSceneBased.swift; sourceTree = ""; }; + CE36487AAC2DE854F71347EFA51632A6 /* Pods_ReusableDemo_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ReusableDemo_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D2B1C95F34E7D919EE33DF34EAFD8D66 /* 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; }; + D5CC0DBB430BEA4B5415663CFBCE8585 /* Reusable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reusable.swift; path = Sources/View/Reusable.swift; sourceTree = ""; }; + D61BEDB7E8DBC4132AFCFECD7926D2E4 /* Reusable.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = Reusable.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + D643F6CC053BC7206F607AB6CC95D678 /* Reusable.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Reusable.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D735DF71FCB8ABBFAE3640101A407832 /* Pods-ReusableDemo tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ReusableDemo tvOS-dummy.m"; sourceTree = ""; }; - D75B627F0FA22EF1AD6AF683C11170BB /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; DB816F3B568786B8EE351C20D8BD0717 /* Pods-ReusableDemo tvOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReusableDemo tvOS-frameworks.sh"; sourceTree = ""; }; - E213D9D3B55925BC6E54276F37CF0F72 /* Reusable-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Reusable-iOS-dummy.m"; sourceTree = ""; }; - F01C64608E610A556FC5CC5472406B50 /* Reusable-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Reusable-tvOS-umbrella.h"; path = "../Reusable-tvOS/Reusable-tvOS-umbrella.h"; sourceTree = ""; }; + ED78C61343518535DB5ABDC379B60E2A /* Reusable-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Reusable-tvOS-umbrella.h"; path = "../Reusable-tvOS/Reusable-tvOS-umbrella.h"; sourceTree = ""; }; F962C98723FA2982FC6582BC27F58D3D /* Pods-ReusableDemo iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ReusableDemo iOS-acknowledgements.markdown"; sourceTree = ""; }; - FF983F1E61E4CDB377808E3C58A95915 /* Reusable-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Reusable-iOS-prefix.pch"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1738D55411DE78FE4628838BCB8AFEE6 /* Frameworks */ = { + 0BB23D7D09F76B2CE30EFCB039D4AD4E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F99CAA0F70891D99A34C61BD5857E6D4 /* Foundation.framework in Frameworks */, + D365C6B1E4ABEA42E356B6802172F6C1 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C1D8C25CA474CE17B69289AA9F535A09 /* Frameworks */ = { + 67A82DB24335699907D4DCABABC0ECE4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AE6AC0D1661454AB328835868B4595D2 /* Foundation.framework in Frameworks */, - F976BBDD68272F53C8F4637C938F33EF /* UIKit.framework in Frameworks */, + 4A5018B30C30666ED1C0BD6873F374FA /* Foundation.framework in Frameworks */, + FFCEDC4595701BA3D9CF0B4CFEE84A47 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C1EEECC4DE323D680E922E2C93875EFB /* Frameworks */ = { + C5F8895F080393491ABF317BB8E7DF76 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D0C59326797466183A54F98B3CA765E4 /* Foundation.framework in Frameworks */, + EC9F81B52EB698EAE7E38A9F5BD31BA0 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F7EC5887E1E240248A0DD319F1DA8094 /* Frameworks */ = { + F67CD306518AEE98D948BF1B0A7E49DF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 97A70EE840A09E9D2A8346F54E95F53E /* Foundation.framework in Frameworks */, - 276926752A433995D023E56D6BAB715C /* UIKit.framework in Frameworks */, + 8A75E9A41CC53359CAA699C3163008C7 /* Foundation.framework in Frameworks */, + 33C07999439B14576686E27B554E779A /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 27E08C0A424F8E3B5F0D55C1FCCFB83D /* tvOS */ = { + 333B429DDB88645AB8AB7B19807E7376 /* Support Files */ = { isa = PBXGroup; children = ( - D5B5499AB1EBE369788EC320431977E4 /* Foundation.framework */, - 7AAF8895BC2A4ACC7A5B2AA1F78CC8F9 /* UIKit.framework */, + 4461D0024D5923CD1DCE0EFC3D256E3B /* Reusable-iOS.modulemap */, + 48A2F48C11C7EC23FA21E3ED59229FC6 /* Reusable-iOS-dummy.m */, + 9B34630B17DC04D6EE0FE0C4F24B5090 /* Reusable-iOS-Info.plist */, + 42729F801CD55A509F3A2F2624C6CE5D /* Reusable-iOS-prefix.pch */, + 91B35049CD30161AFB2E1293E0DCD765 /* Reusable-iOS-umbrella.h */, + 3F74DB65374086A0C8F0F796961CE78A /* Reusable-iOS.debug.xcconfig */, + 5A698CCAB7384E185E2E3FB946A234EF /* Reusable-iOS.release.xcconfig */, + 65355DFAC0E2B8D5D851F461F1089434 /* Reusable-tvOS.modulemap */, + 2DFB8A7388637CE7F10BC61C2D23EBCA /* Reusable-tvOS-dummy.m */, + 15D03F9152C580FFC79A285DE698ED7F /* Reusable-tvOS-Info.plist */, + 29EE454C23FFB86F0044AEF332824505 /* Reusable-tvOS-prefix.pch */, + ED78C61343518535DB5ABDC379B60E2A /* Reusable-tvOS-umbrella.h */, + 45E7385011ADC41A6C953EF4B5D388A3 /* Reusable-tvOS.debug.xcconfig */, + BA159CAE762D1273AF428D60D42BB753 /* Reusable-tvOS.release.xcconfig */, ); - name = tvOS; + name = "Support Files"; + path = "Example/Pods/Target Support Files/Reusable-iOS"; sourceTree = ""; }; - 2FC72BAC7B36550536873B3D3C27BFE7 /* iOS */ = { + 348154DB6F65E7CF03CF92F3F2F669B5 /* Pod */ = { isa = PBXGroup; children = ( - 17580998B7269440BF57F2E2736B4EED /* Foundation.framework */, - 4BF2A9BCD31BA3F8E3F99956FBE1F2E4 /* UIKit.framework */, + 05E2A31D3C782A099594C1B559E7A2F1 /* LICENSE */, + 8E285BFCEE7554FD2873D010F21CF149 /* README.md */, + D61BEDB7E8DBC4132AFCFECD7926D2E4 /* Reusable.podspec */, ); - name = iOS; + name = Pod; sourceTree = ""; }; 3EFD761C3698679705D74BC682A55777 /* Products */ = { @@ -173,14 +195,6 @@ name = Products; sourceTree = ""; }; - 4C2EEEC7253CD0A56D0D71985A9336D1 /* Development Pods */ = { - isa = PBXGroup; - children = ( - AEA1BBC1D82949969D576E390403BD75 /* Reusable */, - ); - name = "Development Pods"; - sourceTree = ""; - }; 55D30D3FEC1CB1D84689FB090585C8F6 /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -190,45 +204,22 @@ name = "Targets Support Files"; sourceTree = ""; }; - 6952FDF2BFC802B13E6C8BEA19BF4FEF /* Storyboard */ = { - isa = PBXGroup; - children = ( - 13B5D0EF2914F9702B1D25E38DF92B29 /* StoryboardBased.swift */, - A9A3A9D7A779306CE519FC8A3AE7248E /* StoryboardSceneBased.swift */, - ); - name = Storyboard; - sourceTree = ""; - }; - 6BDA1C1801F48CD773C1F2792DFE74C5 /* Support Files */ = { + 8F1FEFBCE0046B5D3E21A8D08411F8CB /* iOS */ = { isa = PBXGroup; children = ( - C2F389995DE86899F7534AB7850D1E13 /* Reusable-iOS.modulemap */, - 7E0220E452D37669D260C22EC01BF6EC /* Reusable-iOS.xcconfig */, - E213D9D3B55925BC6E54276F37CF0F72 /* Reusable-iOS-dummy.m */, - 1FCD317B673774D77E5BB05FD425BB30 /* Reusable-iOS-Info.plist */, - FF983F1E61E4CDB377808E3C58A95915 /* Reusable-iOS-prefix.pch */, - 315FC5890D52AA8E3AEA6899FAC211F0 /* Reusable-iOS-umbrella.h */, - 9F98279E10963E4CAE9C9D485726917D /* Reusable-tvOS.modulemap */, - 080A03A9616CB8F003769F910C0F873B /* Reusable-tvOS.xcconfig */, - 83A36B27980F2030A691EF1D36AFF101 /* Reusable-tvOS-dummy.m */, - 5154F448376A5DC3123584BF82E0EBC4 /* Reusable-tvOS-Info.plist */, - 29BC824DB679C32E8A3C976518F5A79F /* Reusable-tvOS-prefix.pch */, - F01C64608E610A556FC5CC5472406B50 /* Reusable-tvOS-umbrella.h */, + D2B1C95F34E7D919EE33DF34EAFD8D66 /* Foundation.framework */, + 97D7A80426FAC3F53796169282DA9188 /* UIKit.framework */, ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/Reusable-iOS"; + name = iOS; sourceTree = ""; }; - 937EE5FC91A0CF8106547B2CC78E1C5C /* View */ = { + 996D02FAA51C0B1204393BF111797C72 /* Storyboard */ = { isa = PBXGroup; children = ( - 700767BA88CFC6741E9F2F58DAB84F33 /* NibLoadable.swift */, - A449A0BEF03C4BCBE3E688825F37208F /* NibOwnerLoadable.swift */, - 8E8D205357C129827F66030FC4A9BB95 /* Reusable.swift */, - 5B9449D4F8133CF6EF5B70BE7F974896 /* UICollectionView+Reusable.swift */, - 8C02902C45345E22CD0B969822F6DECF /* UITableView+Reusable.swift */, + 9D0D781C7BB1824C20B51DBF042F9305 /* StoryboardBased.swift */, + BCC4878128AF4D27D3A8EA250083A1E8 /* StoryboardSceneBased.swift */, ); - name = View; + name = Storyboard; sourceTree = ""; }; AA77AEDFDE4D786ABBBF0594281A5CBD /* Pods-ReusableDemo iOS */ = { @@ -248,48 +239,60 @@ path = "Target Support Files/Pods-ReusableDemo iOS"; sourceTree = ""; }; - AD5425924FE10000CF4FF255ECA3C3EE /* Frameworks */ = { + AAB02F19F8ABCE8666DC498F91E48413 /* Bundled */ = { isa = PBXGroup; children = ( - 2FC72BAC7B36550536873B3D3C27BFE7 /* iOS */, - 27E08C0A424F8E3B5F0D55C1FCCFB83D /* tvOS */, + 414796F6B45E1D0798DBDDB99729F50D /* Bundled.swift */, + AAEF7B5A4A35543CF4A8E492F3B28F3A /* BundledSelf.swift */, ); - name = Frameworks; + name = Bundled; sourceTree = ""; }; - AEA1BBC1D82949969D576E390403BD75 /* Reusable */ = { + AD5425924FE10000CF4FF255ECA3C3EE /* Frameworks */ = { isa = PBXGroup; children = ( - C0C523B9E794AFB55741DEE04387A60A /* Pod */, - 6952FDF2BFC802B13E6C8BEA19BF4FEF /* Storyboard */, - 6BDA1C1801F48CD773C1F2792DFE74C5 /* Support Files */, - 937EE5FC91A0CF8106547B2CC78E1C5C /* View */, + 8F1FEFBCE0046B5D3E21A8D08411F8CB /* iOS */, + EDE633C9C5D12F74C055E87D14BF56B2 /* tvOS */, ); - name = Reusable; - path = ../..; + name = Frameworks; sourceTree = ""; }; - C0C523B9E794AFB55741DEE04387A60A /* Pod */ = { + CA1EB7E7EE0F9647E6A409A857C1EE93 /* View */ = { isa = PBXGroup; children = ( - 12D38603E02E247F62298B168410FE4E /* LICENSE */, - D75B627F0FA22EF1AD6AF683C11170BB /* README.md */, - 3867CC990A1B21FE0FD3330A3C2C8484 /* Reusable.podspec */, + AE6BD3D20F6611F99957578E2F3313D7 /* NibLoadable.swift */, + 2A71AE25DF8990521A088D3F20ACD09F /* NibOwnerLoadable.swift */, + D5CC0DBB430BEA4B5415663CFBCE8585 /* Reusable.swift */, + 7184F3243C5B14665A22CA691D66D6B2 /* UICollectionView+Reusable.swift */, + 6041048F89BD951383BDCDA5BBFBBE5B /* UITableView+Reusable.swift */, ); - name = Pod; + name = View; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 4C2EEEC7253CD0A56D0D71985A9336D1 /* Development Pods */, + FE79D1BBE15027C9B8FF1F1E3AE12775 /* Development Pods */, AD5425924FE10000CF4FF255ECA3C3EE /* Frameworks */, 3EFD761C3698679705D74BC682A55777 /* Products */, 55D30D3FEC1CB1D84689FB090585C8F6 /* Targets Support Files */, ); sourceTree = ""; }; + D3B2DB00BF9922ECA1E9FB5A6F8541D8 /* Reusable */ = { + isa = PBXGroup; + children = ( + AAB02F19F8ABCE8666DC498F91E48413 /* Bundled */, + 348154DB6F65E7CF03CF92F3F2F669B5 /* Pod */, + 996D02FAA51C0B1204393BF111797C72 /* Storyboard */, + 333B429DDB88645AB8AB7B19807E7376 /* Support Files */, + CA1EB7E7EE0F9647E6A409A857C1EE93 /* View */, + ); + name = Reusable; + path = ../..; + sourceTree = ""; + }; ED228D6295FF209E1CD434EE75FC2AC9 /* Pods-ReusableDemo tvOS */ = { isa = PBXGroup; children = ( @@ -307,38 +310,55 @@ path = "Target Support Files/Pods-ReusableDemo tvOS"; sourceTree = ""; }; + EDE633C9C5D12F74C055E87D14BF56B2 /* tvOS */ = { + isa = PBXGroup; + children = ( + 656D92F635410D7659FD9BE5201F202B /* Foundation.framework */, + 70A7330240151590C87494B8C5CE367A /* UIKit.framework */, + ); + name = tvOS; + sourceTree = ""; + }; + FE79D1BBE15027C9B8FF1F1E3AE12775 /* Development Pods */ = { + isa = PBXGroup; + children = ( + D3B2DB00BF9922ECA1E9FB5A6F8541D8 /* Reusable */, + ); + name = "Development Pods"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 6AD1BBF1FF0B9B4E0518E85A961AA35D /* Headers */ = { + 504F4E251D466B2F802D72F4AB7CC824 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 1A95822F6E94E50E1FAC98BCC258BFC1 /* Pods-ReusableDemo iOS-umbrella.h in Headers */, + A8C476085F6B40EC115DAA442019F022 /* Reusable-iOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7750B777C7EC19DCBCB9B7488FC2D781 /* Headers */ = { + 51B166534696F8B27976FF2E53A40647 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 00FB389BAEF752C3379ECAE86539EFFF /* Reusable-iOS-umbrella.h in Headers */, + 6043D8A4275BC42D8EDBC57EF70CC696 /* Reusable-tvOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - B5893073FFD6955C7D1D011DE5899549 /* Headers */ = { + 6B07E09ED7E0B1030A9D5665E990EEF4 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 921D3F32416F81213EC05E4E8D4AAD1F /* Pods-ReusableDemo tvOS-umbrella.h in Headers */, + 23215E06BB1015E2C525D27B6CA47DE1 /* Pods-ReusableDemo tvOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F7F4D5DBDAE7250034454C223AFE2971 /* Headers */ = { + D2E26173079A63F221269F992CF58F60 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4D80E76C7FD4E1AD214A624AE350F1B2 /* Reusable-tvOS-umbrella.h in Headers */, + 9F80F13100ADFEB68FA64E1C3BAE54E7 /* Pods-ReusableDemo iOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -347,12 +367,12 @@ /* Begin PBXNativeTarget section */ 5B17BD52D480B5C801102C36AE584EFC /* Reusable-iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 4C5201B463E361DFA30A2DE196681ACB /* Build configuration list for PBXNativeTarget "Reusable-iOS" */; + buildConfigurationList = 2274EC04DA93E5D107236662D834C124 /* Build configuration list for PBXNativeTarget "Reusable-iOS" */; buildPhases = ( - 7750B777C7EC19DCBCB9B7488FC2D781 /* Headers */, - 8D89694A9713CEBA5B0C2857291D709B /* Sources */, - C1D8C25CA474CE17B69289AA9F535A09 /* Frameworks */, - 0100F0C9514AC6E19852BF7E8B0AD5FC /* Resources */, + 504F4E251D466B2F802D72F4AB7CC824 /* Headers */, + B36E0AC0262EC1B17CEEAC45104542FC /* Sources */, + F67CD306518AEE98D948BF1B0A7E49DF /* Frameworks */, + D9E3A623BBC867C85031DAEF27472E83 /* Resources */, ); buildRules = ( ); @@ -365,17 +385,17 @@ }; 5D941AB1BB505573FFFD682FBF2064A5 /* Pods-ReusableDemo tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = CE133F8C674B1390CC0DC982714708CE /* Build configuration list for PBXNativeTarget "Pods-ReusableDemo tvOS" */; + buildConfigurationList = 1ECBCF7ABE0FFF9C1D06C02553BEB900 /* Build configuration list for PBXNativeTarget "Pods-ReusableDemo tvOS" */; buildPhases = ( - B5893073FFD6955C7D1D011DE5899549 /* Headers */, - CE343C7DA36C11D060DF62CDFEDFE3F9 /* Sources */, - 1738D55411DE78FE4628838BCB8AFEE6 /* Frameworks */, - 28036D3529A2442D2E06C9E224D81397 /* Resources */, + 6B07E09ED7E0B1030A9D5665E990EEF4 /* Headers */, + 316B27CBF2A129CB00780B998686D981 /* Sources */, + 0BB23D7D09F76B2CE30EFCB039D4AD4E /* Frameworks */, + 7ADFCE862D5DE4BB037AF196937E99F5 /* Resources */, ); buildRules = ( ); dependencies = ( - 0BB7672B0892E90F79145B3F8B895A0B /* PBXTargetDependency */, + 2F32A9FF2EC3C635B9CDD6591A47385D /* PBXTargetDependency */, ); name = "Pods-ReusableDemo tvOS"; productName = "Pods-ReusableDemo tvOS"; @@ -384,17 +404,17 @@ }; A038C352F4DD91DC3B8F32842CF5F001 /* Pods-ReusableDemo iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = E558DF7B0EA65A033EA576DD5A79EDCE /* Build configuration list for PBXNativeTarget "Pods-ReusableDemo iOS" */; + buildConfigurationList = 95AD01882D7E8B9BDE66F1E38AEF8EA3 /* Build configuration list for PBXNativeTarget "Pods-ReusableDemo iOS" */; buildPhases = ( - 6AD1BBF1FF0B9B4E0518E85A961AA35D /* Headers */, - A483A9338833F632E2137F6A06968106 /* Sources */, - C1EEECC4DE323D680E922E2C93875EFB /* Frameworks */, - C49AFC7CA2AB950C587453615CBA129B /* Resources */, + D2E26173079A63F221269F992CF58F60 /* Headers */, + 3D539A5A1888A3E2813092DD5A496684 /* Sources */, + C5F8895F080393491ABF317BB8E7DF76 /* Frameworks */, + 9C94DD9350E091381E6BAF038367276A /* Resources */, ); buildRules = ( ); dependencies = ( - DA0123B44F73D66E5D4595ACF2472810 /* PBXTargetDependency */, + D76D85588A6D72153E9DE3AADB432B47 /* PBXTargetDependency */, ); name = "Pods-ReusableDemo iOS"; productName = "Pods-ReusableDemo iOS"; @@ -403,12 +423,12 @@ }; BB512E6F4CF1839C61449FFF7639197E /* Reusable-tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 26F1ACD9B9E7B560809742872B41B474 /* Build configuration list for PBXNativeTarget "Reusable-tvOS" */; + buildConfigurationList = 6547E1A3BAA9397B2C03E2AA34BE79B9 /* Build configuration list for PBXNativeTarget "Reusable-tvOS" */; buildPhases = ( - F7F4D5DBDAE7250034454C223AFE2971 /* Headers */, - 616FB82A1F9FB4008F58574385F91A00 /* Sources */, - F7EC5887E1E240248A0DD319F1DA8094 /* Frameworks */, - 1727CC9B233E131C280A3F73A8F71DDA /* Resources */, + 51B166534696F8B27976FF2E53A40647 /* Headers */, + DE9E9ACB72F227A482998368DCD8E7DC /* Sources */, + 67A82DB24335699907D4DCABABC0ECE4 /* Frameworks */, + A24C5744EC166260A20227E4DF949F39 /* Resources */, ); buildRules = ( ); @@ -450,28 +470,28 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 0100F0C9514AC6E19852BF7E8B0AD5FC /* Resources */ = { + 7ADFCE862D5DE4BB037AF196937E99F5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 1727CC9B233E131C280A3F73A8F71DDA /* Resources */ = { + 9C94DD9350E091381E6BAF038367276A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 28036D3529A2442D2E06C9E224D81397 /* Resources */ = { + A24C5744EC166260A20227E4DF949F39 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - C49AFC7CA2AB950C587453615CBA129B /* Resources */ = { + D9E3A623BBC867C85031DAEF27472E83 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -481,172 +501,79 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 616FB82A1F9FB4008F58574385F91A00 /* Sources */ = { + 316B27CBF2A129CB00780B998686D981 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 979CED18FA554A2F13E49376EDAC74DD /* NibLoadable.swift in Sources */, - 9C3C5D174F00C6FFD23A5B140A320A5A /* NibOwnerLoadable.swift in Sources */, - DEBC4EDFE55B627D37CCFDF5ACEE972D /* Reusable-tvOS-dummy.m in Sources */, - 1EC6F5426B95FB5ABC14458DB8262270 /* Reusable.swift in Sources */, - 7048421A42604066FC79934F5668BF6B /* StoryboardBased.swift in Sources */, - 66CB5E5218878EC21D89E17A374FF48C /* StoryboardSceneBased.swift in Sources */, - 5717332B0A4931BD1C4B04B9C62FB0D2 /* UICollectionView+Reusable.swift in Sources */, - B6135F0966A50325B41F4259AB9B3E35 /* UITableView+Reusable.swift in Sources */, + 3D30854F8DAF3D6A45DD3D1FBC51DB93 /* Pods-ReusableDemo tvOS-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8D89694A9713CEBA5B0C2857291D709B /* Sources */ = { + 3D539A5A1888A3E2813092DD5A496684 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 277B0ABA7CBE8C829BD479768FEDD982 /* NibLoadable.swift in Sources */, - 0EC77D80825ECBC0562B63685AADCE16 /* NibOwnerLoadable.swift in Sources */, - 9C1075367813DDE5F8DFC26CB81E439A /* Reusable-iOS-dummy.m in Sources */, - 2DDD941F642BAFE42BC59A7238410275 /* Reusable.swift in Sources */, - 6262615835FA8FA550C4455E3286B82C /* StoryboardBased.swift in Sources */, - A3B94C9471CD7C8C1B6E960AE489E387 /* StoryboardSceneBased.swift in Sources */, - 4FE892071375477A47FF38B9949A6686 /* UICollectionView+Reusable.swift in Sources */, - 22F24CCF51CABB64EFF449A70D77F456 /* UITableView+Reusable.swift in Sources */, + 9D9C3EF08E5F6824EDF8BD40EF373569 /* Pods-ReusableDemo iOS-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A483A9338833F632E2137F6A06968106 /* Sources */ = { + B36E0AC0262EC1B17CEEAC45104542FC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 640AB5AC3D7B09BF4D8745D0E2999AD3 /* Pods-ReusableDemo iOS-dummy.m in Sources */, + 633C78A39D3121403DBC4B1932CCDB50 /* Bundled.swift in Sources */, + 4E9871864A73FF21A94A4769BF61CE73 /* BundledSelf.swift in Sources */, + ACD592F2435E0888A90FE4535E8CF401 /* NibLoadable.swift in Sources */, + A452240C21A242446C6294B3A9B1D45D /* NibOwnerLoadable.swift in Sources */, + 2F8ABBF18526CFC6BC0C9E6283D13BF6 /* Reusable-iOS-dummy.m in Sources */, + 8ECE932BA7A25A09F87639AE6F0B5F3B /* Reusable.swift in Sources */, + 4ED06F517C8EAEA42C9C3FD81EEAF0B8 /* StoryboardBased.swift in Sources */, + 8BF2C57FCEAD5D910794E6841A964DFE /* StoryboardSceneBased.swift in Sources */, + 9C6BF5C0F997EB868049DB7894DC3571 /* UICollectionView+Reusable.swift in Sources */, + 9AD3188C759205C07AFD2F12720BB817 /* UITableView+Reusable.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - CE343C7DA36C11D060DF62CDFEDFE3F9 /* Sources */ = { + DE9E9ACB72F227A482998368DCD8E7DC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B9F44625E7AD4A367A40122DB66B1CD2 /* Pods-ReusableDemo tvOS-dummy.m in Sources */, + 8CEF0FFEC3E3458873ECF757F52BF17B /* Bundled.swift in Sources */, + FD747D8452EB0F51BA1399B61BAB004C /* BundledSelf.swift in Sources */, + 5B444F7837C4334D7176F3EBC3D1B8AB /* NibLoadable.swift in Sources */, + 79DA2CDEED058E4CE1D789A6EFC2A668 /* NibOwnerLoadable.swift in Sources */, + D47A6036D122B83DBC87DA6ED9F6BD1B /* Reusable-tvOS-dummy.m in Sources */, + 02BC760C2A49A3B54250722F968B234F /* Reusable.swift in Sources */, + 76449B80AB61DBBA3F739527FF794398 /* StoryboardBased.swift in Sources */, + 1BC6E7FB02320214D6ABDA3918A2254A /* StoryboardSceneBased.swift in Sources */, + C49105048133AFB260CD7A1C4E8A0146 /* UICollectionView+Reusable.swift in Sources */, + EBD0387AF78F3CBD069857DEAF5378F0 /* UITableView+Reusable.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0BB7672B0892E90F79145B3F8B895A0B /* PBXTargetDependency */ = { + 2F32A9FF2EC3C635B9CDD6591A47385D /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Reusable-tvOS"; target = BB512E6F4CF1839C61449FFF7639197E /* Reusable-tvOS */; - targetProxy = 661F3C1ECEEF85B31CCEC7673047ACDC /* PBXContainerItemProxy */; + targetProxy = BD92B8B98B0318A2F756769DC0EA2704 /* PBXContainerItemProxy */; }; - DA0123B44F73D66E5D4595ACF2472810 /* PBXTargetDependency */ = { + D76D85588A6D72153E9DE3AADB432B47 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Reusable-iOS"; target = 5B17BD52D480B5C801102C36AE584EFC /* Reusable-iOS */; - targetProxy = 12F63F9FF8DC624BA5073CED5773EF4C /* PBXContainerItemProxy */; + targetProxy = AC9BDA25BA88CEEDCD99880E54029AF4 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 1762BF39B7A08FE5FAE2713EC357AA30 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 080A03A9616CB8F003769F910C0F873B /* Reusable-tvOS.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - "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/Reusable-tvOS/Reusable-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Reusable-tvOS/Reusable-tvOS-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Reusable-tvOS/Reusable-tvOS.modulemap"; - PRODUCT_MODULE_NAME = Reusable; - PRODUCT_NAME = Reusable; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 24B2AC15B8FBC3CA9FBEF808134AF145 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7E0220E452D37669D260C22EC01BF6EC /* Reusable-iOS.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - "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/Reusable-iOS/Reusable-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Reusable-iOS/Reusable-iOS-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Reusable-iOS/Reusable-iOS.modulemap"; - PRODUCT_MODULE_NAME = Reusable; - PRODUCT_NAME = Reusable; - 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; - }; - 270983374B5567E308D0CB05694B2E18 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7E73E647B0D7DFBB4B6B6A0ABFE16505 /* Pods-ReusableDemo tvOS.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - "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"; - INFOPLIST_FILE = "Target Support Files/Pods-ReusableDemo tvOS/Pods-ReusableDemo tvOS-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-ReusableDemo tvOS/Pods-ReusableDemo tvOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 2EDCC58BE386897EEC127BDD0D413BD5 /* Release */ = { + 14991702D3B8F9317C0179FD8599B45E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -669,6 +596,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -696,18 +624,52 @@ MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; - 7D91118FE72B6228C6580F26FB60F1E8 /* Debug */ = { + 264984E226490060B6766E3DD6608051 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 677F50DC2DE6906C3C2E7C534D6EAD75 /* Pods-ReusableDemo tvOS.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + APPLICATION_EXTENSION_API_ONLY = YES; + "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"; + INFOPLIST_FILE = "Target Support Files/Pods-ReusableDemo tvOS/Pods-ReusableDemo tvOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-ReusableDemo tvOS/Pods-ReusableDemo tvOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 350D4BE586A900A0A3A8B29D8F399294 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -730,6 +692,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -769,12 +732,45 @@ }; name = Debug; }; - 853093E8E850211E8235DCF4A765D3A3 /* Release */ = { + 39E954933352B3DDF78CDF311559A7CD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7E0220E452D37669D260C22EC01BF6EC /* Reusable-iOS.xcconfig */; + baseConfigurationReference = 5FF460DDAD2269541A3F2B425AD5A5C8 /* Pods-ReusableDemo iOS.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + APPLICATION_EXTENSION_API_ONLY = YES; + "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"; + INFOPLIST_FILE = "Target Support Files/Pods-ReusableDemo iOS/Pods-ReusableDemo iOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-ReusableDemo iOS/Pods-ReusableDemo iOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 834A9D3D375D5ED8189563020AC7FC96 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3F74DB65374086A0C8F0F796961CE78A /* Reusable-iOS.debug.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -786,7 +782,7 @@ GCC_PREFIX_HEADER = "Target Support Files/Reusable-iOS/Reusable-iOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/Reusable-iOS/Reusable-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/Reusable-iOS/Reusable-iOS.modulemap"; PRODUCT_MODULE_NAME = Reusable; @@ -796,19 +792,16 @@ 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; + name = Debug; }; - 8851F1BE424D1DA3A4FE327110EE3A93 /* Release */ = { + 961B72C108D9C6347C1F64EBF844EC91 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 677F50DC2DE6906C3C2E7C534D6EAD75 /* Pods-ReusableDemo tvOS.release.xcconfig */; + baseConfigurationReference = 45E7385011ADC41A6C953EF4B5D388A3 /* Reusable-tvOS.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -817,33 +810,30 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-ReusableDemo tvOS/Pods-ReusableDemo tvOS-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Reusable-tvOS/Reusable-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Reusable-tvOS/Reusable-tvOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-ReusableDemo tvOS/Pods-ReusableDemo tvOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/Reusable-tvOS/Reusable-tvOS.modulemap"; + PRODUCT_MODULE_NAME = Reusable; + PRODUCT_NAME = Reusable; SDKROOT = appletvos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 99A2CF1525AC04E3DFB205BBB57D9A3F /* Debug */ = { + A50F0E135AD3CF6A969E3C9904149123 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 194544F6DB8473C9AC0B356557BF10F9 /* Pods-ReusableDemo iOS.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -871,12 +861,11 @@ }; name = Debug; }; - A41C665BED4B9D72873A71E1549F5B37 /* Release */ = { + C00036A58CDE8599AC70B6C5A63E290A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 080A03A9616CB8F003769F910C0F873B /* Reusable-tvOS.xcconfig */; + baseConfigurationReference = BA159CAE762D1273AF428D60D42BB753 /* Reusable-tvOS.release.xcconfig */; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -904,13 +893,12 @@ }; name = Release; }; - D1E67959CDFAE7CB1BB6C6D5441F2AE6 /* Release */ = { + CFCEC9F4EB63A541E22011EF513C7694 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5FF460DDAD2269541A3F2B425AD5A5C8 /* Pods-ReusableDemo iOS.release.xcconfig */; + baseConfigurationReference = 7E73E647B0D7DFBB4B6B6A0ABFE16505 /* Pods-ReusableDemo tvOS.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -919,19 +907,50 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-ReusableDemo iOS/Pods-ReusableDemo iOS-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-ReusableDemo tvOS/Pods-ReusableDemo tvOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-ReusableDemo iOS/Pods-ReusableDemo iOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-ReusableDemo tvOS/Pods-ReusableDemo tvOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + D19E6AD8D0339A43EB88F67AACC57EF5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5A698CCAB7384E185E2E3FB946A234EF /* Reusable-iOS.release.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + "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/Reusable-iOS/Reusable-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Reusable-iOS/Reusable-iOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Reusable-iOS/Reusable-iOS.modulemap"; + PRODUCT_MODULE_NAME = Reusable; + PRODUCT_NAME = Reusable; 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"; @@ -942,47 +961,47 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 26F1ACD9B9E7B560809742872B41B474 /* Build configuration list for PBXNativeTarget "Reusable-tvOS" */ = { + 1ECBCF7ABE0FFF9C1D06C02553BEB900 /* Build configuration list for PBXNativeTarget "Pods-ReusableDemo tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1762BF39B7A08FE5FAE2713EC357AA30 /* Debug */, - A41C665BED4B9D72873A71E1549F5B37 /* Release */, + CFCEC9F4EB63A541E22011EF513C7694 /* Debug */, + 264984E226490060B6766E3DD6608051 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + 2274EC04DA93E5D107236662D834C124 /* Build configuration list for PBXNativeTarget "Reusable-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7D91118FE72B6228C6580F26FB60F1E8 /* Debug */, - 2EDCC58BE386897EEC127BDD0D413BD5 /* Release */, + 834A9D3D375D5ED8189563020AC7FC96 /* Debug */, + D19E6AD8D0339A43EB88F67AACC57EF5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4C5201B463E361DFA30A2DE196681ACB /* Build configuration list for PBXNativeTarget "Reusable-iOS" */ = { + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 24B2AC15B8FBC3CA9FBEF808134AF145 /* Debug */, - 853093E8E850211E8235DCF4A765D3A3 /* Release */, + 350D4BE586A900A0A3A8B29D8F399294 /* Debug */, + 14991702D3B8F9317C0179FD8599B45E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CE133F8C674B1390CC0DC982714708CE /* Build configuration list for PBXNativeTarget "Pods-ReusableDemo tvOS" */ = { + 6547E1A3BAA9397B2C03E2AA34BE79B9 /* Build configuration list for PBXNativeTarget "Reusable-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 270983374B5567E308D0CB05694B2E18 /* Debug */, - 8851F1BE424D1DA3A4FE327110EE3A93 /* Release */, + 961B72C108D9C6347C1F64EBF844EC91 /* Debug */, + C00036A58CDE8599AC70B6C5A63E290A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E558DF7B0EA65A033EA576DD5A79EDCE /* Build configuration list for PBXNativeTarget "Pods-ReusableDemo iOS" */ = { + 95AD01882D7E8B9BDE66F1E38AEF8EA3 /* Build configuration list for PBXNativeTarget "Pods-ReusableDemo iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 99A2CF1525AC04E3DFB205BBB57D9A3F /* Debug */, - D1E67959CDFAE7CB1BB6C6D5441F2AE6 /* Release */, + A50F0E135AD3CF6A969E3C9904149123 /* Debug */, + 39E954933352B3DDF78CDF311559A7CD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Reusable-iOS.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Reusable-iOS.xcscheme index e9834ba..29d5c9f 100644 --- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Reusable-iOS.xcscheme +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Reusable-iOS.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - - - - - + + - - ✍️ A few of the protocols' (i.e. `StoryboardBased`, `NibLoadable` and `NibOwnerLoadable` described below) default implementations attempt to load resources from the bundle containing the resource. It does this through the `Bundled` protocol. Each time you declare conformance to `StoryboardBased`, `NibLoadable` or `NibOwnerLoadable`, you will have to provide access to the appropriate bundle. This can be achieved through one of the following methods... + +## 1. For Cocoapod frameworks or main app bundles. + +Declare your `Reusable` based classes to conform to `BundledSelf`. This provides a default implementation that uses the bundle associated with the class (`Bundle(for: self)`). In previous versions of the framework this was the default. + +```swift +final class CustomCell: UITableViewCell, Reusable, BundledSelf { /* And that's it! */ } +``` + +## 2. For Swift Package Manager bundles. + +Declare your `Reusable` based classes to conform to `BundledModule`. This provides a default implementation that uses the bundle associated with a Swift Package Manager Bundle (`Bundle.module`). + +```swift +final class CustomCell: UITableViewCell, Reusable, BundledModule { /* And that's it! */ } +``` + +So that the resource is loaded from the bundle of your package, you will also need to add the following extension somewhere in your package framework... + +```swift +public extension BundledModule { + static var bundle: Bundle { + Bundle.module + } +} +``` + +## 3. For other uses. + +Provide you own implementation of the `static var bundle: Bundle` property directly in your `Reusable` based class. + +```swift +final class CustomCell: UITableViewCell, Reusable { + static var bundle: Bundle { + return Bundle.myCustomBundle() + } +} +``` + + +--- + + # Type-safe `UITableViewCell` / `UICollectionViewCell` > ✍️ Examples and explanations below use `UITableView` and `UITableViewCell`, but the exact same examples and explanations apply for `UICollectionView` and `UICollectionViewCell`. diff --git a/Reusable.podspec b/Reusable.podspec index c8f78fc..b1fd904 100644 --- a/Reusable.podspec +++ b/Reusable.podspec @@ -34,10 +34,17 @@ Pod::Spec.new do |s| s.source = { :git => "https://github.com/AliSoftware/Reusable.git", :tag => s.version.to_s } s.swift_version = '5.0' + s.subspec 'Bundled' do |ss| + ss.source_files = "Sources/Bundle/Bundled.swift", "Sources/Bundle/BundledSelf.swift" + end + s.subspec 'View' do |ss| + ss.dependency 'Reusable/Bundled' ss.source_files = "Sources/View/*.swift" end + s.subspec 'Storyboard' do |ss| + ss.dependency 'Reusable/Bundled' ss.source_files = "Sources/Storyboard/*.swift" end diff --git a/Sources/Bundle/Bundled.swift b/Sources/Bundle/Bundled.swift new file mode 100644 index 0000000..de234d0 --- /dev/null +++ b/Sources/Bundle/Bundled.swift @@ -0,0 +1,23 @@ +/********************************************* + * + * This code is under the MIT License (MIT) + * + * Copyright (c) 2021 AliSoftware + * + *********************************************/ + +import Foundation + +/// A few of the protocols' (i.e. `StoryboardBased`, `NibLoadable` and `NibOwnerLoadable` described below) default +/// implementations attempt to load resources from the bundle containing the resource. It does this through the `Bundled` +/// protocol. Each time you declare conformance to `StoryboardBased`, `NibLoadable` or `NibOwnerLoadable`, you will have +/// to provide access to the appropriate bundle. +/// +/// This can be achieved through one of the following methods... +/// 1) Declare your `Reusable` based classes to conform to `BundledSelf` +/// 2) Declare your `Reusable` based classes to conform to `BundledModule` +/// 3) Provide you own implementation of the `static var bundle: Bundle` property directly + +public protocol Bundled { + static var bundle: Bundle { get } +} diff --git a/Sources/Bundle/BundledModule.swift b/Sources/Bundle/BundledModule.swift new file mode 100644 index 0000000..0a92ff2 --- /dev/null +++ b/Sources/Bundle/BundledModule.swift @@ -0,0 +1,31 @@ +/********************************************* + * + * This code is under the MIT License (MIT) + * + * Copyright (c) 2021 AliSoftware + * + *********************************************/ + +import Foundation + +/// Declaring your `Reusable` based classes to conform to `BundledModule`. +/// This provides a default implementation that uses the bundle associated with a Swift Package Manager Bundle (`Bundle.module`). +/// +///Exanple: +///``` +///final class CustomCell: UITableViewCell, Reusable, BundledModule { ... And that's it! ... } +///``` +/// +/// For the the resource to be loaded from the bundle of your package, you will also need to add the following extension somewhere in your package framework... +/// +///``` +/// public extension BundledModule { +/// static var bundle: Bundle { +/// Bundle.module +/// } +/// } +///``` + +public protocol BundledModule: AnyObject, Bundled { +} + diff --git a/Sources/Bundle/BundledSelf.swift b/Sources/Bundle/BundledSelf.swift new file mode 100644 index 0000000..0f0617d --- /dev/null +++ b/Sources/Bundle/BundledSelf.swift @@ -0,0 +1,28 @@ +/********************************************* + * + * This code is under the MIT License (MIT) + * + * Copyright (c) 2021 AliSoftware + * + *********************************************/ + +import Foundation + +/// Declare your `Reusable` based classes to conform to `BundledSelf`. +/// This provides a default implementation that uses the bundle associated with the class (`Bundle(for: self)`). +/// In previous versions of the framework this was the default for Cocoapod frameworks or main app bundles. +/// +///Exanple: +///``` +///final class CustomCell: UITableViewCell, Reusable, BundledSelf { ... And that's it!.. } +///``` + +public protocol BundledSelf: AnyObject, Bundled { + static var bundle: Bundle { get } +} + +public extension BundledSelf { + static var bundle: Bundle { + Bundle(for: self) + } +} diff --git a/Sources/Storyboard/StoryboardBased.swift b/Sources/Storyboard/StoryboardBased.swift index 7e26f9a..2e773e8 100644 --- a/Sources/Storyboard/StoryboardBased.swift +++ b/Sources/Storyboard/StoryboardBased.swift @@ -16,7 +16,7 @@ import UIKit /// * this ViewController is the initialViewController of your Storyboard /// /// to be able to instantiate them from the Storyboard in a type-safe manner -public protocol StoryboardBased: class { +public protocol StoryboardBased: AnyObject, Bundled { /// The UIStoryboard to use when we want to instantiate this ViewController static var sceneStoryboard: UIStoryboard { get } } @@ -26,7 +26,7 @@ public protocol StoryboardBased: class { public extension StoryboardBased { /// By default, use the storybaord with the same name as the class static var sceneStoryboard: UIStoryboard { - return UIStoryboard(name: String(describing: self), bundle: Bundle(for: self)) + return UIStoryboard(name: String(describing: self), bundle: self.bundle) } } diff --git a/Sources/Storyboard/StoryboardSceneBased.swift b/Sources/Storyboard/StoryboardSceneBased.swift index 8f96e32..7ea5880 100644 --- a/Sources/Storyboard/StoryboardSceneBased.swift +++ b/Sources/Storyboard/StoryboardSceneBased.swift @@ -18,7 +18,7 @@ import UIKit /// to be able to instantiate them from the Storyboard in a type-safe manner. /// /// You need to implement `sceneStoryboard` yourself to indicate the UIStoryboard this scene is from. -public protocol StoryboardSceneBased: class { +public protocol StoryboardSceneBased: AnyObject { /// The UIStoryboard to use when we want to instantiate this ViewController static var sceneStoryboard: UIStoryboard { get } /// The scene identifier to use when we want to instantiate this ViewController from its associated Storyboard diff --git a/Sources/View/NibLoadable.swift b/Sources/View/NibLoadable.swift index b43c6c9..214c15a 100755 --- a/Sources/View/NibLoadable.swift +++ b/Sources/View/NibLoadable.swift @@ -16,7 +16,7 @@ import UIKit /// * this class is used as the XIB's root view /// /// to be able to instantiate them from the NIB in a type-safe manner -public protocol NibLoadable: class { +public protocol NibLoadable: AnyObject, Bundled { /// The nib file to use to load a new instance of the View designed in a XIB static var nib: UINib { get } } @@ -27,7 +27,7 @@ public extension NibLoadable { /// By default, use the nib which have the same name as the name of the class, /// and located in the bundle of that class static var nib: UINib { - return UINib(nibName: String(describing: self), bundle: Bundle(for: self)) + return UINib(nibName: String(describing: self), bundle: self.bundle) } } diff --git a/Sources/View/NibOwnerLoadable.swift b/Sources/View/NibOwnerLoadable.swift index 7798a07..1eb7651 100644 --- a/Sources/View/NibOwnerLoadable.swift +++ b/Sources/View/NibOwnerLoadable.swift @@ -16,7 +16,7 @@ import UIKit /// * this class is used as the XIB's File's Owner /// /// to be able to instantiate them from the NIB in a type-safe manner -public protocol NibOwnerLoadable: class { +public protocol NibOwnerLoadable: AnyObject, Bundled { /// The nib file to use to load a new instance of the View designed in a XIB static var nib: UINib { get } } @@ -27,7 +27,7 @@ public extension NibOwnerLoadable { /// By default, use the nib which have the same name as the name of the class, /// and located in the bundle of that class static var nib: UINib { - return UINib(nibName: String(describing: self), bundle: Bundle(for: self)) + return UINib(nibName: String(describing: self), bundle: self.bundle) } } diff --git a/Sources/View/Reusable.swift b/Sources/View/Reusable.swift index 2267ad4..d568886 100644 --- a/Sources/View/Reusable.swift +++ b/Sources/View/Reusable.swift @@ -14,7 +14,7 @@ import UIKit /// Make your `UITableViewCell` and `UICollectionViewCell` subclasses /// conform to this protocol when they are *not* NIB-based but only code-based /// to be able to dequeue them in a type-safe manner -public protocol Reusable: class { +public protocol Reusable: AnyObject { /// The reuse identifier to use when registering and later dequeuing a reusable cell static var reuseIdentifier: String { get } } From 5dc1890e57d2255856c9a1f2ce6f31dde66bc53d Mon Sep 17 00:00:00 2001 From: Jim Boyd Date: Tue, 6 Apr 2021 13:51:30 -0600 Subject: [PATCH 2/3] Linter warnings cleanup --- Sources/Bundle/Bundled.swift | 5 +++-- Sources/Bundle/BundledModule.swift | 20 +++++++++++--------- Sources/Bundle/BundledSelf.swift | 8 ++++---- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/Sources/Bundle/Bundled.swift b/Sources/Bundle/Bundled.swift index de234d0..e92a18b 100644 --- a/Sources/Bundle/Bundled.swift +++ b/Sources/Bundle/Bundled.swift @@ -9,8 +9,9 @@ import Foundation /// A few of the protocols' (i.e. `StoryboardBased`, `NibLoadable` and `NibOwnerLoadable` described below) default -/// implementations attempt to load resources from the bundle containing the resource. It does this through the `Bundled` -/// protocol. Each time you declare conformance to `StoryboardBased`, `NibLoadable` or `NibOwnerLoadable`, you will have +/// implementations attempt to load resources from the bundle containing the resource. +/// It does this through the `Bundled` protocol. Each time you declare conformance to +/// `StoryboardBased`, `NibLoadable` or `NibOwnerLoadable`, you will have /// to provide access to the appropriate bundle. /// /// This can be achieved through one of the following methods... diff --git a/Sources/Bundle/BundledModule.swift b/Sources/Bundle/BundledModule.swift index 0a92ff2..dae9914 100644 --- a/Sources/Bundle/BundledModule.swift +++ b/Sources/Bundle/BundledModule.swift @@ -9,23 +9,25 @@ import Foundation /// Declaring your `Reusable` based classes to conform to `BundledModule`. -/// This provides a default implementation that uses the bundle associated with a Swift Package Manager Bundle (`Bundle.module`). +/// This provides a default implementation that uses the bundle associated +/// with a Swift Package Manager Bundle (`Bundle.module`). /// -///Exanple: -///``` -///final class CustomCell: UITableViewCell, Reusable, BundledModule { ... And that's it! ... } -///``` +/// Exanple: +/// ``` +/// final class CustomCell: UITableViewCell, Reusable, BundledModule { ... And that's it! ... } +/// ``` /// -/// For the the resource to be loaded from the bundle of your package, you will also need to add the following extension somewhere in your package framework... +/// For the the resource to be loaded from the bundle of your package, you +/// will also need to add the following extension somewhere in your package +/// framework... /// -///``` +/// ``` /// public extension BundledModule { /// static var bundle: Bundle { /// Bundle.module /// } /// } -///``` +/// ``` public protocol BundledModule: AnyObject, Bundled { } - diff --git a/Sources/Bundle/BundledSelf.swift b/Sources/Bundle/BundledSelf.swift index 0f0617d..0067d9e 100644 --- a/Sources/Bundle/BundledSelf.swift +++ b/Sources/Bundle/BundledSelf.swift @@ -12,10 +12,10 @@ import Foundation /// This provides a default implementation that uses the bundle associated with the class (`Bundle(for: self)`). /// In previous versions of the framework this was the default for Cocoapod frameworks or main app bundles. /// -///Exanple: -///``` -///final class CustomCell: UITableViewCell, Reusable, BundledSelf { ... And that's it!.. } -///``` +/// Exanple: +/// ``` +/// final class CustomCell: UITableViewCell, Reusable, BundledSelf { ... And that's it!.. } +/// ``` public protocol BundledSelf: AnyObject, Bundled { static var bundle: Bundle { get } From 4c1244049c4fdc6169574895712414b61a0c66ac Mon Sep 17 00:00:00 2001 From: Jim Boyd Date: Tue, 6 Apr 2021 13:52:01 -0600 Subject: [PATCH 3/3] Spelliong --- Sources/Bundle/BundledModule.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Bundle/BundledModule.swift b/Sources/Bundle/BundledModule.swift index dae9914..121936c 100644 --- a/Sources/Bundle/BundledModule.swift +++ b/Sources/Bundle/BundledModule.swift @@ -12,7 +12,7 @@ import Foundation /// This provides a default implementation that uses the bundle associated /// with a Swift Package Manager Bundle (`Bundle.module`). /// -/// Exanple: +/// Example: /// ``` /// final class CustomCell: UITableViewCell, Reusable, BundledModule { ... And that's it! ... } /// ```