From a4e5ad862ea554c0f0f8eba0db8ca5f4fe7bc2b5 Mon Sep 17 00:00:00 2001 From: Andrew Monshizadeh Date: Mon, 1 May 2017 07:10:52 -0700 Subject: [PATCH] Move section index to property Summary: This pull request removes the `sectionForSectionController:` method from the `IGListCollectionContext` protocol so that the protocol is exclusively for presentation methods. This should not add new functionality, but rather makes the index directly accessible on the section controllers themselves. This change makes sense because at no time will there be an update to the list that the list adapter is unaware of and so it will always be able to set and update any indexes for a section controller that has changed. Issue fixed: #609 - [X] All tests pass. Demo project builds and runs. - [X] I added tests, an experiment, or detailed why my change isn't tested. - [X] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes. - [X] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md) Closes https://github.com/Instagram/IGListKit/pull/671 Reviewed By: jessesquires Differential Revision: D4942159 Pulled By: amonshiz fbshipit-source-id: d648cfdd381cbf1d9ee7ff549ae27d2972a84622 --- CHANGELOG.md | 2 + .../DisplaySectionController.swift | 15 +- .../ListeningSectionController.swift | 3 +- .../WorkingRangeSectionController.swift | 3 +- .../Pods/Pods.xcodeproj/project.pbxproj | 316 +++++++++--------- .../Pods/Pods.xcodeproj/project.pbxproj | 104 +++--- .../Pods/Pods.xcodeproj/project.pbxproj | 222 ++++++------ Source/IGListAdapter.m | 5 - Source/IGListCollectionContext.h | 9 - Source/IGListSectionController.h | 5 + Source/IGListSectionController.m | 1 + Source/IGListStackedSectionController.m | 5 +- .../IGListSectionControllerInternal.h | 2 + Source/Internal/IGListSectionMap.h | 2 +- Source/Internal/IGListSectionMap.m | 17 +- Tests/IGListAdapterE2ETests.m | 2 +- Tests/IGListAdapterTests.m | 125 +++++++ Tests/IGListSectionMapTests.m | 28 +- Tests/IGListStackSectionControllerTests.m | 12 +- 19 files changed, 527 insertions(+), 351 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b9ff897d..0ac68ab08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -60,6 +60,8 @@ This release closes the [3.0.0 milestone](https://github.com/Instagram/IGListKit - `IGListUpdatingDelegate` now requires method `-reloadItemInCollectionView:fromIndexPath:toIndexPath:` to handle reloading cells between index paths. [Ryan Nystrom](https://github.com/rnystrom) [(#657)](https://github.com/Instagram/IGListKit/pull/657) +- `-[IGListCollectionContext sectionForSectionController:]` has been removed and replaced with the `NSInteger sectionIndex` property on `IGListSectionController`. [Andrew Monshizadeh](https://github.com/amonshiz) [#671](http://github.com/Instagram/IGListKit/pull/671) + ### Enhancements - Added an initializer on `IGListAdapter` that does not take a `workingRangeSize` and defaults it to 0. [BasThomas](https://github.com/BasThomas) [(#414)](https://github.com/Instagram/IGListKit/issues/414) diff --git a/Examples/Examples-iOS/IGListKitExamples/SectionControllers/DisplaySectionController.swift b/Examples/Examples-iOS/IGListKitExamples/SectionControllers/DisplaySectionController.swift index e641cabdb..705f60e71 100644 --- a/Examples/Examples-iOS/IGListKitExamples/SectionControllers/DisplaySectionController.swift +++ b/Examples/Examples-iOS/IGListKitExamples/SectionControllers/DisplaySectionController.swift @@ -33,31 +33,26 @@ final class DisplaySectionController: IGListSectionController, IGListDisplayDele override func cellForItem(at index: Int) -> UICollectionViewCell { let cell = collectionContext!.dequeueReusableCell(of: LabelCell.self, for: self, at: index) as! LabelCell - let section = collectionContext!.section(for: self) - cell.text = "Section \(section), cell \(index)" + cell.text = "Section \(self.sectionIndex), cell \(index)" return cell } // MARK: IGListDisplayDelegate func listAdapter(_ listAdapter: IGListAdapter, willDisplay sectionController: IGListSectionController) { - let section = collectionContext!.section(for: self) - print("Will display section \(section)") + print("Will display section \(self.sectionIndex)") } func listAdapter(_ listAdapter: IGListAdapter, willDisplay sectionController: IGListSectionController, cell: UICollectionViewCell, at index: Int) { - let section = collectionContext!.section(for: self) - print("Did will display cell \(index) in section \(section)") + print("Did will display cell \(index) in section \(self.sectionIndex)") } func listAdapter(_ listAdapter: IGListAdapter, didEndDisplaying sectionController: IGListSectionController) { - let section = collectionContext!.section(for: self) - print("Did end displaying section \(section)") + print("Did end displaying section \(self.sectionIndex)") } func listAdapter(_ listAdapter: IGListAdapter, didEndDisplaying sectionController: IGListSectionController, cell: UICollectionViewCell, at index: Int) { - let section = collectionContext!.section(for: self) - print("Did end displaying cell \(index) in section \(section)") + print("Did end displaying cell \(index) in section \(self.sectionIndex)") } } diff --git a/Examples/Examples-iOS/IGListKitExamples/SectionControllers/ListeningSectionController.swift b/Examples/Examples-iOS/IGListKitExamples/SectionControllers/ListeningSectionController.swift index 15ab0f03d..72180205f 100644 --- a/Examples/Examples-iOS/IGListKitExamples/SectionControllers/ListeningSectionController.swift +++ b/Examples/Examples-iOS/IGListKitExamples/SectionControllers/ListeningSectionController.swift @@ -24,8 +24,7 @@ final class ListeningSectionController: IGListSectionController, IncrementListen } func configureCell(cell: LabelCell) { - let section = collectionContext!.section(for: self) - cell.text = "Section: \(section), value: \(value)" + cell.text = "Section: \(self.sectionIndex), value: \(value)" } // MARK: IGListSectionController Overrides diff --git a/Examples/Examples-iOS/IGListKitExamples/SectionControllers/WorkingRangeSectionController.swift b/Examples/Examples-iOS/IGListKitExamples/SectionControllers/WorkingRangeSectionController.swift index 084fe56dd..2ba36f746 100644 --- a/Examples/Examples-iOS/IGListKitExamples/SectionControllers/WorkingRangeSectionController.swift +++ b/Examples/Examples-iOS/IGListKitExamples/SectionControllers/WorkingRangeSectionController.swift @@ -71,8 +71,7 @@ final class WorkingRangeSectionController: IGListSectionController, IGListWorkin let url = URL(string: urlString) else { return } - let section = collectionContext?.section(for: self) ?? 0 - print("Downloading image \(urlString) for section \(section)") + print("Downloading image \(urlString) for section \(self.sectionIndex)") task = URLSession.shared.dataTask(with: url) { data, response, err in guard let data = data, let image = UIImage(data: data) else { diff --git a/Examples/Examples-iOS/Pods/Pods.xcodeproj/project.pbxproj b/Examples/Examples-iOS/Pods/Pods.xcodeproj/project.pbxproj index 90f9eab36..a5d380354 100644 --- a/Examples/Examples-iOS/Pods/Pods.xcodeproj/project.pbxproj +++ b/Examples/Examples-iOS/Pods/Pods.xcodeproj/project.pbxproj @@ -32,20 +32,19 @@ 318723A1CE9C256A9392C68C8D4B3F06 /* IGListDebuggingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 98C5FC709CA9250BFAD6F578AF0C3EFC /* IGListDebuggingUtilities.m */; }; 32DE48220AF0356827C453AA8A454196 /* IGListMoveIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = AE91F6559F8EE9D1772901F58CF3D61A /* IGListMoveIndex.m */; }; 3798530EFCFD916BB70E30ABFF5994A1 /* IGListWorkingRangeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 447DCC35723C17FABAE77D871C215FFA /* IGListWorkingRangeDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 37BF83777D02B65CD12B579762890691 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 397DB61E0DA68F000D0F0DEDD158537A /* IGListSupplementaryViewSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 56097AA1420BBDF96144FF3D7CF84DB5 /* IGListSupplementaryViewSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3CFC32AADC95A405C541FC7FFB3EE359 /* UICollectionView+IGListBatchUpdateData.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C86F9CA49A1D53750F9B453230BCDC5 /* UICollectionView+IGListBatchUpdateData.h */; settings = {ATTRIBUTES = (Private, ); }; }; 3F3C4CFDFD6E6463788DAEDC0D0ABBF6 /* NSString+IGListDiffable.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C6C5074714D6D1995B5F52BF79244C3 /* NSString+IGListDiffable.h */; settings = {ATTRIBUTES = (Public, ); }; }; 40718A9AFF44FC952959A1DF5E049671 /* IGListDisplayHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 350ACFBC824F985961D41C8EF9284170 /* IGListDisplayHandler.h */; settings = {ATTRIBUTES = (Private, ); }; }; 429737A987F7DD709D6B21BCF92471A6 /* IGListCollectionViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FFE8F5E15D085BD27ABADB04AD5EB3D /* IGListCollectionViewLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; 42A9FF9F46951CA47A523BEC7B5B1DD4 /* IGListDiff.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EC335DAACC5FBF06978069CD1241484 /* IGListDiff.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4441ECCCE547C6118B7AD035DF7B28D6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */; }; 45047F0582CBDA01CD6B2754D695257F /* NSString+IGListDiffable.m in Sources */ = {isa = PBXBuildFile; fileRef = 83FD5474C1404D76B00BA0F63586CD12 /* NSString+IGListDiffable.m */; }; 49C55411F8B3EB0335F2EB2715E1E23C /* IGListExperiments.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DA35D588905BD4BB78E74583E7D9B8C /* IGListExperiments.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4B20F1F0FFBF9FECBF8E87342C2C51E1 /* IGListIndexSetResultInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 86192B2220302ABE43E6B0987E9537EA /* IGListIndexSetResultInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4CE277DA085E90A2F6F0217329320DF4 /* IGListAdapterDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2199D5F895EE8C344F8D679FCC57FDED /* IGListAdapterDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4DC076C43C4AA5A3C88EEC49F5097581 /* Pods-IGListKitMessageExample-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B2806858B5ED353CF2D8B37BFAE4171C /* Pods-IGListKitMessageExample-dummy.m */; }; 4F6392BFED8FD6E1D05D26F5D9ED5537 /* IGListSectionMap+DebugDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B7F0E4295927A7627491DDEB034DA76 /* IGListSectionMap+DebugDescription.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 521D101EE7EF9C5A5B7D92BCCEF1A5BB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */; }; 56DED21A5241C1EEA5062BBB75A2015B /* IGListBatchUpdateData+DebugDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = C558EE7E13696E9652E64941A6467331 /* IGListBatchUpdateData+DebugDescription.h */; settings = {ATTRIBUTES = (Private, ); }; }; 57D90A0C633B91C41FCACCEA25A8656A /* IGListAdapterInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B4E9914D1FB7986D37AC97F0F9E01310 /* IGListAdapterInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; 58BF11E6F611796F6BE5CFC3AA2AD0E2 /* IGListReloadDataUpdater.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DB23155D9891E152365B5B5132946A9 /* IGListReloadDataUpdater.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -53,11 +52,11 @@ 5D504957D2C9B396024D194FCD9FA513 /* IGListMoveIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = 465D2AF2B4A6CE0A9C639D60E69D0572 /* IGListMoveIndex.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6035F7222C9C08F7C6469F02CC80E849 /* IGListBatchUpdateState.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AEC059774939263FFC4616069358E7F /* IGListBatchUpdateState.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6117D1541B9BA37A0B019DCE5275B0A5 /* IGListAdapterDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AD9A8D492476D8D09865A15BABB5C1B /* IGListAdapterDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 63905A103B23D9564336D756A7095BEB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */; }; 656B2487C3F23BEBE3286A5DCAF6C67D /* IGListBindingSectionController.m in Sources */ = {isa = PBXBuildFile; fileRef = E7F7C26EF4B744562063339867391B5D /* IGListBindingSectionController.m */; }; 66787AAB27296319FFD2C4049D11DCF2 /* IGListAdapterUpdater.m in Sources */ = {isa = PBXBuildFile; fileRef = D7BF3B864AC5D526891ABE52B3ABCAD5 /* IGListAdapterUpdater.m */; }; 6724E16F50D84018ACEB7F0B3686E8EB /* IGListIndexPathResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 71D98FB3D712B5105C219F14EE121217 /* IGListIndexPathResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; 69491D144E36B2F0F362CF1470A430DE /* IGListDiff.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9F096CCFECB7266F7FD630946AF7E771 /* IGListDiff.mm */; }; + 6C93B8CCEC78907F9D201935E3A08788 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */; }; 6EECDDD9CE12DE15CFE4D0492A1B6F38 /* IGListBatchUpdateData+DebugDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BC994ECFEAAC0076B82F7324E8E176B /* IGListBatchUpdateData+DebugDescription.m */; }; 6EF73C6E147077918BC60008519216FB /* IGListMoveIndexPathInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = F947E8AB2B517C4ED952350A221E3960 /* IGListMoveIndexPathInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6FBD4DBAED1ADAD9B21DF2760677D61F /* IGListAdapter+UICollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = BEED1BE4BF6ED6B646FB3AA3B1BC303E /* IGListAdapter+UICollectionView.m */; }; @@ -69,8 +68,11 @@ 816F7A5723AE9A69333D53B61714D278 /* NSNumber+IGListDiffable.m in Sources */ = {isa = PBXBuildFile; fileRef = 31DB16750A51E07AE1DECB9AA688EC69 /* NSNumber+IGListDiffable.m */; }; 8236F70C520A5FE105F4605AEFD574B7 /* IGListBatchUpdates.h in Headers */ = {isa = PBXBuildFile; fileRef = F1DFF38ED91B90A67E4DB4D8578A182B /* IGListBatchUpdates.h */; settings = {ATTRIBUTES = (Private, ); }; }; 875C54E18B39CAD593020484AE2DCCC6 /* IGListAdapter+DebugDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 58A83A94D9F69C7379AD1CEC4CF4F0EE /* IGListAdapter+DebugDescription.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 8E4859877F1E75B63C9FC11D270B4F70 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 8EA9B4844600169D46FAD6FEFF52242C /* IGListMoveIndexPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 45CAD2281AB27A644B5402A42A76D58C /* IGListMoveIndexPath.m */; }; 8FB357AF618661960BD30E47D7AF615F /* IGListAdapterProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 960099D9FFA1E850B54EA6513986C99F /* IGListAdapterProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 926C32B907129CB26E05EC9BDA1235DA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; + 9369D111E6E3BADE67E13EAC8974E9D0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 94FAEE64A9E56D81B7626CDAF0011D4B /* UICollectionView+IGListBatchUpdateData.m in Sources */ = {isa = PBXBuildFile; fileRef = B6031F1FB58717509CB997A0ACD8237A /* UICollectionView+IGListBatchUpdateData.m */; }; 9855F027A0D9DA3432A3F700F71C8C9F /* IGListGenericSectionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 36377A524652BC8019EFD4A4C9890070 /* IGListGenericSectionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; A0C0F2183B6D920DE4A47A55E4FBFB55 /* IGListAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F5A2D2F14D03169E3E70073BC25FCA3 /* IGListAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -98,7 +100,6 @@ C6D288602A0053C42F133C708209544E /* IGListUpdatingDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = AA01EBD4545B46D2687C02C837710B91 /* IGListUpdatingDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; CC1037F876AE2B5AD1509F4284921E8F /* IGListDebuggingUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD13141E66CECD083D21A83F00631C6 /* IGListDebuggingUtilities.h */; settings = {ATTRIBUTES = (Private, ); }; }; CD1D31DD6F0FE207B99D38021B5470C0 /* IGListDisplayDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = F92451B83EF7D1510EAC7822EEEBD86B /* IGListDisplayDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D21C7CE8688679FB2B5159BE89958B22 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */; }; D362DC97F9BCDBA6864CEC37CC2E95FC /* IGListSectionMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 87AD0763D84A7E6E57DE5F764C0BECE1 /* IGListSectionMap.m */; }; D6C397B39555837D645DE835785620AD /* IGListCollectionContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 393BE0EF64555981DBFCF85E51D1ECD2 /* IGListCollectionContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; DC7E93B01C667A0C29A6F1C6D15669AE /* IGListKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B2D0233D5EFB5C872CE626C51CAC55D /* IGListKit-dummy.m */; }; @@ -112,7 +113,6 @@ F9092756D302EB4D9FFB56E9D51C7A3A /* IGListCollectionViewLayout.mm in Sources */ = {isa = PBXBuildFile; fileRef = D154EF21A21A7094045CEEFD847C8D6A /* IGListCollectionViewLayout.mm */; }; F927F554EE327022CB55B283858308D7 /* IGListAdapter+DebugDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 742279AD572FB9EC43B70A6E8CDF6EDC /* IGListAdapter+DebugDescription.m */; }; F97B8CBDDACD3D160AE56710EA981358 /* IGListKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D88E7AA030FE036BB0901E10EEC6D4C /* IGListKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FCFF0A9A163C847073B6D424B66B64EF /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EC994CDC2D681BA26389F78A7E4B325 /* UIKit.framework */; }; FEBC1693FDFEFB0495C8B087E2A925A4 /* IGListAdapterUpdaterDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7383961B7EA6F4F47545433E5180E1D4 /* IGListAdapterUpdaterDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ @@ -195,7 +195,6 @@ 5EC335DAACC5FBF06978069CD1241484 /* IGListDiff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListDiff.h; sourceTree = ""; }; 60C3700A55A1751BE6C71BAEBADD7E7A /* Pods-IGListKitTodayExample-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-IGListKitTodayExample-dummy.m"; sourceTree = ""; }; 610D5FF06C24CA312F98425FD0106D32 /* IGListGenericSectionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = IGListGenericSectionController.m; sourceTree = ""; }; - 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 65A1389E308E5581D73D099A74A15628 /* Pods-IGListKitMessageExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-IGListKitMessageExample.release.xcconfig"; sourceTree = ""; }; 66BCE978937FA23EB0DDD5A64BBA1980 /* IGListKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IGListKit-prefix.pch"; sourceTree = ""; }; 67755E50E9E2A01F605D3E02636F35D1 /* IGListStackedSectionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListStackedSectionController.h; sourceTree = ""; }; @@ -211,7 +210,6 @@ 7ACA5B41E2D11D0ECE0F0A2D8B3370D5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7AEC059774939263FFC4616069358E7F /* IGListBatchUpdateState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListBatchUpdateState.h; sourceTree = ""; }; 7D88E7AA030FE036BB0901E10EEC6D4C /* IGListKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListKit.h; sourceTree = ""; }; - 7EC994CDC2D681BA26389F78A7E4B325 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 83FD5474C1404D76B00BA0F63586CD12 /* NSString+IGListDiffable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSString+IGListDiffable.m"; sourceTree = ""; }; 8562754C745AA42394FAA528B8A7E7D3 /* NSNumber+IGListDiffable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSNumber+IGListDiffable.h"; sourceTree = ""; }; 86192B2220302ABE43E6B0987E9537EA /* IGListIndexSetResultInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListIndexSetResultInternal.h; sourceTree = ""; }; @@ -241,6 +239,7 @@ B4E9914D1FB7986D37AC97F0F9E01310 /* IGListAdapterInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListAdapterInternal.h; sourceTree = ""; }; B54FFEAEDCF385AFDBB3A702E555BCED /* IGListDisplayHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = IGListDisplayHandler.m; sourceTree = ""; }; B6031F1FB58717509CB997A0ACD8237A /* UICollectionView+IGListBatchUpdateData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UICollectionView+IGListBatchUpdateData.m"; sourceTree = ""; }; + B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; B66E6B5AEB9406EAEFA9710E6E9962F2 /* Pods-IGListKitMessageExample-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-IGListKitMessageExample-resources.sh"; sourceTree = ""; }; BA9EA047C26D8D4475C21ABECAE610E8 /* IGListAdapterUpdater+DebugDescription.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IGListAdapterUpdater+DebugDescription.h"; sourceTree = ""; }; BC1C46146C230C9011237AAC07BFBD9C /* Pods-IGListKitExamples.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-IGListKitExamples.modulemap"; sourceTree = ""; }; @@ -258,6 +257,7 @@ D320216D7FC404BD292FFDC9415E01CA /* IGListStackedSectionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = IGListStackedSectionController.m; sourceTree = ""; }; D3BD6A725D7759E9C4EE0C8E17C37860 /* IGListCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListCompatibility.h; sourceTree = ""; }; D7BF3B864AC5D526891ABE52B3ABCAD5 /* IGListAdapterUpdater.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = IGListAdapterUpdater.m; sourceTree = ""; }; + D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; DE5CE5A84B8F2E7646B7E32B1F54007D /* Pods-IGListKitExamples-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-IGListKitExamples-dummy.m"; sourceTree = ""; }; DF2A493B79D241B8AAF67E14FD5EE4B6 /* IGListBatchUpdateData.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = IGListBatchUpdateData.mm; sourceTree = ""; }; E0759418F0B7950541A53AF6FB1411F0 /* IGListIndexSetResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListIndexSetResult.h; sourceTree = ""; }; @@ -283,8 +283,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 63905A103B23D9564336D756A7095BEB /* Foundation.framework in Frameworks */, - FCFF0A9A163C847073B6D424B66B64EF /* UIKit.framework in Frameworks */, + 9369D111E6E3BADE67E13EAC8974E9D0 /* Foundation.framework in Frameworks */, + 6C93B8CCEC78907F9D201935E3A08788 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -292,7 +292,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4441ECCCE547C6118B7AD035DF7B28D6 /* Foundation.framework in Frameworks */, + 37BF83777D02B65CD12B579762890691 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -300,7 +300,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D21C7CE8688679FB2B5159BE89958B22 /* Foundation.framework in Frameworks */, + 926C32B907129CB26E05EC9BDA1235DA /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -308,7 +308,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 521D101EE7EF9C5A5B7D92BCCEF1A5BB /* Foundation.framework in Frameworks */, + 8E4859877F1E75B63C9FC11D270B4F70 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -391,11 +391,20 @@ 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { isa = PBXGroup; children = ( - E6EE98446B568159EE277B68FD442AF0 /* iOS */, + 438B396F6B4147076630CAEFE34282C1 /* iOS */, ); name = Frameworks; sourceTree = ""; }; + 438B396F6B4147076630CAEFE34282C1 /* iOS */ = { + isa = PBXGroup; + children = ( + D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */, + B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; 4938518413AB5FF53AC9FD7D3B4EAA03 /* Support Files */ = { isa = PBXGroup; children = ( @@ -571,15 +580,6 @@ path = ../../..; sourceTree = ""; }; - E6EE98446B568159EE277B68FD442AF0 /* iOS */ = { - isa = PBXGroup; - children = ( - 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */, - 7EC994CDC2D681BA26389F78A7E4B325 /* UIKit.framework */, - ); - name = iOS; - sourceTree = ""; - }; EB740994145C21817D42440BB52D6257 /* Source */ = { isa = PBXGroup; children = ( @@ -797,7 +797,7 @@ D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0730; + LastSwiftUpdateCheck = 0830; LastUpgradeCheck = 0700; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; @@ -909,11 +909,49 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 015A368F878AC3E2CEAE21DDE8026304 /* Debug */ = { + 2F5C4AF020B079E18DBCA3AD0DED78B8 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 922574DF06D0AD5E3964986609327D1F /* Pods-IGListKitTodayExample.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*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-IGListKitTodayExample/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-IGListKitTodayExample/Pods-IGListKitTodayExample.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_IGListKitTodayExample; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 34FE9531DA9AF2820790339988D5FF41 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -921,24 +959,23 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - ENABLE_TESTABILITY = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", + "POD_CONFIGURATION_RELEASE=1", "$(inherited)", ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; @@ -946,23 +983,24 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - ONLY_ACTIVE_ARCH = YES; PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; }; - name = Debug; + name = Release; }; - 04A68A6FF05C0FDAB190D816949B4462 /* Release */ = { + 43645608F6A26C6A99108C3B2CD77C1A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = CA234CE99FD05714C2A7AF7708B24C51 /* IGListKit.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; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -975,7 +1013,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/IGListKit/IGListKit.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_NAME = IGListKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -984,13 +1022,14 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 197EBCEB0EC5F7CAA6982D73F96C09CB /* Debug */ = { + 52EC95DA29FC44BDD7F96E825C21660F /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 4F9A8086AF09CCA586431BFEE5DE2CA3 /* Pods-IGListKitMessageExample.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*]" = ""; @@ -1022,50 +1061,11 @@ }; name = Debug; }; - 44CDBB6D11DE06DB64D6268622BDC47E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 626865CE4C99FBA9E1F5FFE378E50648 /* Debug */ = { + 9D0D1C605F30D307DCCA15CE92589601 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = E1915F3ED5785508E2E252B0D5CD0AB9 /* Pods-IGListKitExamples.debug.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1097,80 +1097,48 @@ }; name = Debug; }; - 81BCC164B7BACED6563C7DD60BB5FFF3 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CA234CE99FD05714C2A7AF7708B24C51 /* IGListKit.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; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/IGListKit/IGListKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IGListKit/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/IGListKit/IGListKit.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = IGListKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - ACA8A168549269FFC475C4357D635084 /* Debug */ = { + 9E2B4EB30D71326CF064F0765D1CB544 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5EC090A99FE4CA3786E651AF9C907913 /* Pods-IGListKitTodayExample.debug.xcconfig */; + baseConfigurationReference = 568FA20FCC9D77DF4FF3A77159CB66AA /* Pods-IGListKitExamples.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*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-IGListKitTodayExample/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-IGListKitExamples/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-IGListKitTodayExample/Pods-IGListKitTodayExample.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; + MODULEMAP_FILE = "Target Support Files/Pods-IGListKitExamples/Pods-IGListKitExamples.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_IGListKitTodayExample; + PRODUCT_NAME = Pods_IGListKitExamples; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - B0E086482AB747F3C6AE0BC7D1AD0034 /* Release */ = { + 9F699D21AED1019C508AA2967B576C34 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 65A1389E308E5581D73D099A74A15628 /* Pods-IGListKitMessageExample.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*]" = ""; @@ -1202,46 +1170,97 @@ }; name = Release; }; - B43A2433B75DE95CE8C94635DAF98E9C /* Release */ = { + A233130C40BCF6FB85F998A9AFFB687B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 568FA20FCC9D77DF4FF3A77159CB66AA /* Pods-IGListKitExamples.release.xcconfig */; + baseConfigurationReference = 5EC090A99FE4CA3786E651AF9C907913 /* Pods-IGListKitTodayExample.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*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-IGListKitExamples/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-IGListKitTodayExample/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-IGListKitExamples/Pods-IGListKitExamples.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; + MODULEMAP_FILE = "Target Support Files/Pods-IGListKitTodayExample/Pods-IGListKitTodayExample.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_IGListKitExamples; + PRODUCT_NAME = Pods_IGListKitTodayExample; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - BB299855973C01172BF9A53C852AC211 /* Release */ = { + C104F7F091290C3D1E248192F07FE689 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 922574DF06D0AD5E3964986609327D1F /* Pods-IGListKitTodayExample.release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + EF34252FD7210C9A42C24A6D5C18FEC9 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CA234CE99FD05714C2A7AF7708B24C51 /* IGListKit.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*]" = ""; @@ -1253,20 +1272,17 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-IGListKitTodayExample/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/IGListKit/IGListKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IGListKit/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-IGListKitTodayExample/Pods-IGListKitTodayExample.modulemap"; + MODULEMAP_FILE = "Target Support Files/IGListKit/IGListKit.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_IGListKitTodayExample; + PRODUCT_NAME = IGListKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -1279,8 +1295,8 @@ 0FE3BD27B2D26DDCF7A53630AB4BE0DB /* Build configuration list for PBXNativeTarget "Pods-IGListKitTodayExample" */ = { isa = XCConfigurationList; buildConfigurations = ( - ACA8A168549269FFC475C4357D635084 /* Debug */, - BB299855973C01172BF9A53C852AC211 /* Release */, + A233130C40BCF6FB85F998A9AFFB687B /* Debug */, + 2F5C4AF020B079E18DBCA3AD0DED78B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1288,8 +1304,8 @@ 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 015A368F878AC3E2CEAE21DDE8026304 /* Debug */, - 44CDBB6D11DE06DB64D6268622BDC47E /* Release */, + C104F7F091290C3D1E248192F07FE689 /* Debug */, + 34FE9531DA9AF2820790339988D5FF41 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1297,8 +1313,8 @@ 447A9F6E709F690B1574347D9E329E3D /* Build configuration list for PBXNativeTarget "Pods-IGListKitExamples" */ = { isa = XCConfigurationList; buildConfigurations = ( - 626865CE4C99FBA9E1F5FFE378E50648 /* Debug */, - B43A2433B75DE95CE8C94635DAF98E9C /* Release */, + 9D0D1C605F30D307DCCA15CE92589601 /* Debug */, + 9E2B4EB30D71326CF064F0765D1CB544 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1306,8 +1322,8 @@ 5BEDC3F9CC9CBFD79A2E99175D69AD52 /* Build configuration list for PBXNativeTarget "IGListKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - 81BCC164B7BACED6563C7DD60BB5FFF3 /* Debug */, - 04A68A6FF05C0FDAB190D816949B4462 /* Release */, + 43645608F6A26C6A99108C3B2CD77C1A /* Debug */, + EF34252FD7210C9A42C24A6D5C18FEC9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1315,8 +1331,8 @@ 7DD0F06330B7CFF95DBE709F180B8869 /* Build configuration list for PBXNativeTarget "Pods-IGListKitMessageExample" */ = { isa = XCConfigurationList; buildConfigurations = ( - 197EBCEB0EC5F7CAA6982D73F96C09CB /* Debug */, - B0E086482AB747F3C6AE0BC7D1AD0034 /* Release */, + 52EC95DA29FC44BDD7F96E825C21660F /* Debug */, + 9F699D21AED1019C508AA2967B576C34 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Examples/Examples-macOS/Pods/Pods.xcodeproj/project.pbxproj b/Examples/Examples-macOS/Pods/Pods.xcodeproj/project.pbxproj index 31d54d725..6e6f1c92a 100644 --- a/Examples/Examples-macOS/Pods/Pods.xcodeproj/project.pbxproj +++ b/Examples/Examples-macOS/Pods/Pods.xcodeproj/project.pbxproj @@ -355,7 +355,7 @@ D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0730; + LastSwiftUpdateCheck = 0830; LastUpgradeCheck = 0700; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; @@ -413,6 +413,54 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ + 4540B30AD9C0E6CB51B2DD9785470495 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + ONLY_ACTIVE_ARCH = YES; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; 5E8548F845176AE6A880A525CB40EBDC /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = A198E265B2C6E673C7C9C5050F92D9F0 /* Pods-IGListKitExamples.release.xcconfig */; @@ -450,11 +498,12 @@ }; name = Release; }; - 9420A7205B8F85520AF134F4EE25F7CC /* Release */ = { + 945EB9E2C47E9C30E16985278CFFC5AE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -462,10 +511,13 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; @@ -561,50 +613,6 @@ }; name = Release; }; - F653E316AB5F825D3AD0CAE700E37071 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; - ONLY_ACTIVE_ARCH = YES; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; F95BD364CB89C5ED4B8FEF17898E1A98 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = F701ADB9374256EAB8FDDFF00B4E5B06 /* IGListKit.xcconfig */; @@ -654,8 +662,8 @@ 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - F653E316AB5F825D3AD0CAE700E37071 /* Debug */, - 9420A7205B8F85520AF134F4EE25F7CC /* Release */, + 4540B30AD9C0E6CB51B2DD9785470495 /* Debug */, + 945EB9E2C47E9C30E16985278CFFC5AE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Examples/Examples-tvOS/Pods/Pods.xcodeproj/project.pbxproj b/Examples/Examples-tvOS/Pods/Pods.xcodeproj/project.pbxproj index fac0de1d4..f4f041623 100644 --- a/Examples/Examples-tvOS/Pods/Pods.xcodeproj/project.pbxproj +++ b/Examples/Examples-tvOS/Pods/Pods.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 01F9C5C555476A6C6B7C6093163F9EBF /* UICollectionView+DebugDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FD1C144082FF1AB2E14A559E79264DC /* UICollectionView+DebugDescription.m */; }; + 02BD5A40B81DE2C5192A90B06EB9B7FA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9007AF4BA9E200F9154E7B1DB0BEA9CB /* UIKit.framework */; }; 0935318C25B21AAEEC0351D02AAEB607 /* IGListIndexPathResult.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFBAF098C5C0AC4D34F0729E84BB377 /* IGListIndexPathResult.m */; }; 129A631678AF907B4CB4BA77D8F0BE54 /* IGListMoveIndexPath.h in Headers */ = {isa = PBXBuildFile; fileRef = E5F5B95E9E517B3F1F5325719433BB4B /* IGListMoveIndexPath.h */; settings = {ATTRIBUTES = (Public, ); }; }; 140E924FCD5639B3ACF763C7BDF6B56D /* IGListIndexPathResultInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 75ACD495B4CAF124DF919D69621F8179 /* IGListIndexPathResultInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -51,7 +52,6 @@ 6035F7222C9C08F7C6469F02CC80E849 /* IGListBatchUpdateState.h in Headers */ = {isa = PBXBuildFile; fileRef = A0F9A70500F56A539D7A5AA19C759E85 /* IGListBatchUpdateState.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6117D1541B9BA37A0B019DCE5275B0A5 /* IGListAdapterDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = E8434F38108701B1E8735A4EAC18CEC9 /* IGListAdapterDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; 656B2487C3F23BEBE3286A5DCAF6C67D /* IGListBindingSectionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DA46FD8AD14A148E972018EEF5ADC78 /* IGListBindingSectionController.m */; }; - 6585F8BC4AE0EA2DC16B62B159CAE397 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71D44B887663E8A7D2752C9ED2356648 /* Foundation.framework */; }; 66787AAB27296319FFD2C4049D11DCF2 /* IGListAdapterUpdater.m in Sources */ = {isa = PBXBuildFile; fileRef = 9204632BE1C2942C4EAC9FDB27BFB614 /* IGListAdapterUpdater.m */; }; 6724E16F50D84018ACEB7F0B3686E8EB /* IGListIndexPathResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 24876742D6303802B72D598183E42EE7 /* IGListIndexPathResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; 69491D144E36B2F0F362CF1470A430DE /* IGListDiff.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC4AE61B2EE1953C47EE0F72A7E4BD71 /* IGListDiff.mm */; }; @@ -73,10 +73,11 @@ A0C0F2183B6D920DE4A47A55E4FBFB55 /* IGListAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D9A342912592E630A2EEFF85B290A1E /* IGListAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; A177CA001C8347B1A623DE5AFA9E6FFC /* IGListBatchUpdateData.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1B74862E7A5A6A51B20A01F29CED3264 /* IGListBatchUpdateData.mm */; }; A1C1958B215F62F9825E96269B8DA945 /* NSNumber+IGListDiffable.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EEC2B98E116223BB30572AF71DB8928 /* NSNumber+IGListDiffable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A671A10865A02E90165E4B960EF98B0C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB4C132D7BA00C1384E27FAFD43A44B6 /* UIKit.framework */; }; + A837FB9A29543C9E70432ABCEEC769E2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CAD302BA31CA52C22598677C29AEC7BD /* Foundation.framework */; }; A9EA73B5F42C78212B47765335491828 /* IGListAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 36D3B482CCDF86F4B8FAAB7D897553EA /* IGListAdapter.m */; }; AECD4F0BAF4A96A23F4D359F7BB07607 /* IGListIndexSetResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 57EA60C96AD874F6254DC5B2C5852880 /* IGListIndexSetResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; B04E521A39C3426461CED928D33AD9D7 /* IGListWorkingRangeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 85299B16AF7B9D19FE775BAC754EC800 /* IGListWorkingRangeHandler.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B1BBDF57A8F8803F287001BA5C15D3CB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CAD302BA31CA52C22598677C29AEC7BD /* Foundation.framework */; }; B4A647C8B10AB02CC47544725F0A136B /* IGListGenericSectionController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB09627DA0978881AD418B9A80A62E7 /* IGListGenericSectionController.m */; }; B71581E9BB9ABC298A9D04EA4345B64C /* IGListSectionControllerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B56C57B374E8581A96AD2AB119F8E059 /* IGListSectionControllerInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; B72D3885D936E5DA6EEB5548934888D4 /* IGListBatchUpdateData.h in Headers */ = {isa = PBXBuildFile; fileRef = 585E2A72CF6C2AFB948FD5A28EA37C0E /* IGListBatchUpdateData.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -99,7 +100,6 @@ DC7E93B01C667A0C29A6F1C6D15669AE /* IGListKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C21A7CA00A0F4B5304CF04AF01BD52EF /* IGListKit-dummy.m */; }; E3C39B5CD1BD5AE339012FF39FB22440 /* IGListAdapterProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 594B16ED121E43487B948CE7634B18B9 /* IGListAdapterProxy.m */; }; E5E988B71EDFEB59CEF2A959ACB189C7 /* IGListSectionMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 78E8F43C2F6B4F97E4A62491170FF7C4 /* IGListSectionMap.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E6152EC266A0A66DB8F5B3A413F33694 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71D44B887663E8A7D2752C9ED2356648 /* Foundation.framework */; }; E9D04D2CB71E91804154672C06E2195C /* IGListBindingSectionControllerDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 48DC2C62FB2BADC5EDA54145B3ADD962 /* IGListBindingSectionControllerDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; EBF3F9405DFB61D975FBEA49B89A3CFA /* IGListCollectionViewLayoutInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = C67C6B9C276B34D9502E6C3C0FDE476D /* IGListCollectionViewLayoutInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; F232036837FDB4624508E8905EA65841 /* IGListDebugger.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A0776D1B08F52D22143737EF17C92C7 /* IGListDebugger.m */; }; @@ -169,7 +169,6 @@ 6881758100D4EAEBC81F2954EE2CE61F /* IGListReloadDataUpdater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListReloadDataUpdater.h; sourceTree = ""; }; 6EEC2B98E116223BB30572AF71DB8928 /* NSNumber+IGListDiffable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSNumber+IGListDiffable.h"; sourceTree = ""; }; 70A647FCE1FACCF271F41F3DC78A4B90 /* IGListDebuggingUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = IGListDebuggingUtilities.m; sourceTree = ""; }; - 71D44B887663E8A7D2752C9ED2356648 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 75ACD495B4CAF124DF919D69621F8179 /* IGListIndexPathResultInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListIndexPathResultInternal.h; sourceTree = ""; }; 768AA8C395194BD831827213543666B1 /* IGListSectionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = IGListSectionController.m; sourceTree = ""; }; 78E8F43C2F6B4F97E4A62491170FF7C4 /* IGListSectionMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListSectionMap.h; sourceTree = ""; }; @@ -180,6 +179,7 @@ 8B301A3B43A600036082AF999D3594BF /* IGListDisplayHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListDisplayHandler.h; sourceTree = ""; }; 8D9A342912592E630A2EEFF85B290A1E /* IGListAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListAdapter.h; sourceTree = ""; }; 8F8EE4A195AD17ED3B7539B6965DD5E4 /* IGListCollectionContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListCollectionContext.h; sourceTree = ""; }; + 9007AF4BA9E200F9154E7B1DB0BEA9CB /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 9204632BE1C2942C4EAC9FDB27BFB614 /* IGListAdapterUpdater.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = IGListAdapterUpdater.m; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 95CAE1B8589EBED617CE82CEB66A02B8 /* IGListBatchUpdateData+DebugDescription.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IGListBatchUpdateData+DebugDescription.m"; sourceTree = ""; }; @@ -193,7 +193,6 @@ A7BBE69D34859663403DA26F14CC4DDB /* Pods-IGListKitExamples-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-IGListKitExamples-acknowledgements.markdown"; sourceTree = ""; }; A7C3313E2DAE8011DCE5495FC7989C5D /* IGListAdapter+DebugDescription.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IGListAdapter+DebugDescription.h"; sourceTree = ""; }; A851A4ACB8C0DE98BFFBC6FD4D1BACEE /* Pods-IGListKitExamples-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-IGListKitExamples-frameworks.sh"; sourceTree = ""; }; - AB4C132D7BA00C1384E27FAFD43A44B6 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; ABF549428FEA18696E5358F599E11A24 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; AD67596DDE8E0406C4E26E1946BF4F84 /* IGListBindingSectionControllerSelectionDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListBindingSectionControllerSelectionDelegate.h; sourceTree = ""; }; AE366726DED8B15CABCF9E54494BD387 /* IGListCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListCompatibility.h; sourceTree = ""; }; @@ -209,6 +208,7 @@ C5E984D5D1F9CBAE911AECEE9547199C /* IGListStackedSectionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListStackedSectionController.h; sourceTree = ""; }; C67C6B9C276B34D9502E6C3C0FDE476D /* IGListCollectionViewLayoutInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListCollectionViewLayoutInternal.h; sourceTree = ""; }; C7F454644FEBF5DB647AE1728D1FD067 /* Pods_IGListKitExamples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_IGListKitExamples.framework; path = "Pods-IGListKitExamples.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + CAD302BA31CA52C22598677C29AEC7BD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; CC90A8D7867CBD08E113C111079DF358 /* IGListSingleSectionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListSingleSectionController.h; sourceTree = ""; }; CD699C5B52E357B8E5E174AF510D6F47 /* IGListBatchUpdates.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = IGListBatchUpdates.h; sourceTree = ""; }; CEFBAF098C5C0AC4D34F0729E84BB377 /* IGListIndexPathResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = IGListIndexPathResult.m; sourceTree = ""; }; @@ -243,8 +243,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E6152EC266A0A66DB8F5B3A413F33694 /* Foundation.framework in Frameworks */, - A671A10865A02E90165E4B960EF98B0C /* UIKit.framework in Frameworks */, + A837FB9A29543C9E70432ABCEEC769E2 /* Foundation.framework in Frameworks */, + 02BD5A40B81DE2C5192A90B06EB9B7FA /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -252,7 +252,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6585F8BC4AE0EA2DC16B62B159CAE397 /* Foundation.framework in Frameworks */, + B1BBDF57A8F8803F287001BA5C15D3CB /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -398,7 +398,7 @@ 6EC461C1435A31577346ED4ADA0BD5A9 /* Frameworks */ = { isa = PBXGroup; children = ( - FE77A9456A47034F965F75B0B0B6CF30 /* tvOS */, + A7ADA58BCAD9C51AFF857C5B1E229A1E /* tvOS */, ); name = Frameworks; sourceTree = ""; @@ -426,6 +426,15 @@ path = Internal; sourceTree = ""; }; + A7ADA58BCAD9C51AFF857C5B1E229A1E /* tvOS */ = { + isa = PBXGroup; + children = ( + CAD302BA31CA52C22598677C29AEC7BD /* Foundation.framework */, + 9007AF4BA9E200F9154E7B1DB0BEA9CB /* UIKit.framework */, + ); + name = tvOS; + sourceTree = ""; + }; BEBFF9E5DE688C85D9EA208AFED4879F /* Source */ = { isa = PBXGroup; children = ( @@ -517,15 +526,6 @@ path = ../../..; sourceTree = ""; }; - FE77A9456A47034F965F75B0B0B6CF30 /* tvOS */ = { - isa = PBXGroup; - children = ( - 71D44B887663E8A7D2752C9ED2356648 /* Foundation.framework */, - AB4C132D7BA00C1384E27FAFD43A44B6 /* UIKit.framework */, - ); - name = tvOS; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -651,7 +651,7 @@ D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0730; + LastSwiftUpdateCheck = 0830; LastUpgradeCheck = 0700; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; @@ -733,11 +733,78 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 1DD1CFF0DC5554065098F7DC1848365A /* Release */ = { + 1541C65DFF85A1428675C5880530EE36 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1DC4F8DCC1835BACB957FEAD24EF8700 /* IGListKit.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/IGListKit/IGListKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IGListKit/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/IGListKit/IGListKit.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = IGListKit; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 3082D8C1881D5F5E95177871DD85F99C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1DC4F8DCC1835BACB957FEAD24EF8700 /* IGListKit.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/IGListKit/IGListKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IGListKit/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/IGListKit/IGListKit.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = IGListKit; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 661729F083A6FC1B885AF6F7CDE099EC /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -745,10 +812,13 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; @@ -773,46 +843,12 @@ }; name = Release; }; - 650FB46C8F30EE06870353DFC5EA54B6 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1B2B14BA3AB402D9CC387EEB27A2F746 /* Pods-IGListKitExamples.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-IGListKitExamples/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-IGListKitExamples/Pods-IGListKitExamples.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_IGListKitExamples; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 7DEE56CBFFC5EF063F24F486B02300EA /* Debug */ = { + 989DC2E7A0303F48249CF17665F91260 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -820,10 +856,13 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; @@ -852,42 +891,11 @@ }; name = Debug; }; - BB9880B0A31058EBBF3615B82C7DC03F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1DC4F8DCC1835BACB957FEAD24EF8700 /* IGListKit.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/IGListKit/IGListKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IGListKit/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/IGListKit/IGListKit.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = IGListKit; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - D04E368E88FCE29BD15438FCE317E815 /* Release */ = { + 9EFF5B9E0BBAC2AACF6196542A6EABF2 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = A198E265B2C6E673C7C9C5050F92D9F0 /* Pods-IGListKitExamples.release.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -919,37 +927,41 @@ }; name = Release; }; - D29D19D6D09080E0CFE293EFBCA02D43 /* Release */ = { + ADAD9B471CBDDB130A05EDBBA3711DC1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1DC4F8DCC1835BACB957FEAD24EF8700 /* IGListKit.xcconfig */; + baseConfigurationReference = 1B2B14BA3AB402D9CC387EEB27A2F746 /* Pods-IGListKitExamples.debug.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/IGListKit/IGListKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IGListKit/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-IGListKitExamples/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/IGListKit/IGListKit.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = IGListKit; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-IGListKitExamples/Pods-IGListKitExamples.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_IGListKitExamples; SDKROOT = appletvos; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; /* End XCBuildConfiguration section */ @@ -957,8 +969,8 @@ 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7DEE56CBFFC5EF063F24F486B02300EA /* Debug */, - 1DD1CFF0DC5554065098F7DC1848365A /* Release */, + 989DC2E7A0303F48249CF17665F91260 /* Debug */, + 661729F083A6FC1B885AF6F7CDE099EC /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -966,8 +978,8 @@ 447A9F6E709F690B1574347D9E329E3D /* Build configuration list for PBXNativeTarget "Pods-IGListKitExamples" */ = { isa = XCConfigurationList; buildConfigurations = ( - 650FB46C8F30EE06870353DFC5EA54B6 /* Debug */, - D04E368E88FCE29BD15438FCE317E815 /* Release */, + ADAD9B471CBDDB130A05EDBBA3711DC1 /* Debug */, + 9EFF5B9E0BBAC2AACF6196542A6EABF2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -975,8 +987,8 @@ 5BEDC3F9CC9CBFD79A2E99175D69AD52 /* Build configuration list for PBXNativeTarget "IGListKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - BB9880B0A31058EBBF3615B82C7DC03F /* Debug */, - D29D19D6D09080E0CFE293EFBCA02D43 /* Release */, + 3082D8C1881D5F5E95177871DD85F99C /* Debug */, + 1541C65DFF85A1428675C5880530EE36 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Source/IGListAdapter.m b/Source/IGListAdapter.m index 791f1459e..ec4bee2b1 100644 --- a/Source/IGListAdapter.m +++ b/Source/IGListAdapter.m @@ -506,9 +506,6 @@ - (void)updateObjects:(NSArray *)objects dataSource:(id // for IGListSectionController subclasses after calling [super init] IGListSectionControllerPushThread(self.viewController, self); - id firstObject = objects.firstObject; - id lastObject = objects.lastObject; - for (id object in objects) { // infra checks to see if a controller exists IGListSectionController *sectionController = [map sectionControllerForObject:object]; @@ -527,8 +524,6 @@ - (void)updateObjects:(NSArray *)objects dataSource:(id // in case the section controller was created outside of -listAdapter:sectionControllerForObject: sectionController.collectionContext = self; sectionController.viewController = self.viewController; - sectionController.isFirstSection = (object == firstObject); - sectionController.isLastSection = (object == lastObject); // check if the item has changed instances or is new const NSInteger oldSection = [map sectionForObject:object]; diff --git a/Source/IGListCollectionContext.h b/Source/IGListCollectionContext.h index 10e8bc05e..600bf745a 100644 --- a/Source/IGListCollectionContext.h +++ b/Source/IGListCollectionContext.h @@ -100,15 +100,6 @@ NS_ASSUME_NONNULL_BEGIN sectionController:(IGListSectionController *)sectionController animated:(BOOL)animated; -/** - Returns the section index of an section controller. - - @param sectionController A section controller object. - - @return The section index of the controller if found, otherwise `NSNotFound`. - */ -- (NSInteger)sectionForSectionController:(IGListSectionController *)sectionController; - /** Dequeues a cell from the collection view reuse pool. diff --git a/Source/IGListSectionController.h b/Source/IGListSectionController.h index 84fe9fa94..9b9e837db 100644 --- a/Source/IGListSectionController.h +++ b/Source/IGListSectionController.h @@ -97,6 +97,11 @@ NS_ASSUME_NONNULL_BEGIN */ @property (nonatomic, weak, nullable, readonly) id collectionContext; +/** + Returns the index within the list for this section controller. + */ +@property (nonatomic, assign, readonly) NSInteger sectionIndex; + /** Returns `YES` if the section controller is the first section in the list, `NO` otherwise. */ diff --git a/Source/IGListSectionController.m b/Source/IGListSectionController.m index 6f9a11953..440a23fff 100644 --- a/Source/IGListSectionController.m +++ b/Source/IGListSectionController.m @@ -62,6 +62,7 @@ - (instancetype)init { _minimumInteritemSpacing = 0.0; _minimumLineSpacing = 0.0; _inset = UIEdgeInsetsZero; + _sectionIndex = NSNotFound; } return self; } diff --git a/Source/IGListStackedSectionController.m b/Source/IGListStackedSectionController.m index ab7a164f2..54307bbf0 100644 --- a/Source/IGListStackedSectionController.m +++ b/Source/IGListStackedSectionController.m @@ -148,6 +148,7 @@ - (UICollectionViewCell *)cellForItemAtIndex:(NSInteger)index { - (void)didUpdateToObject:(id)object { for (IGListSectionController *sectionController in self.sectionControllers) { + sectionController.sectionIndex = self.sectionIndex; [sectionController didUpdateToObject:object]; } [self reloadData]; @@ -218,10 +219,6 @@ - (void)deselectItemAtIndex:(NSInteger)index sectionController:(IGListSectionCon [self.collectionContext deselectItemAtIndex:offsetIndex sectionController:self animated:animated]; } -- (NSInteger)sectionForSectionController:(IGListSectionController *)sectionController { - return [self.collectionContext sectionForSectionController:self]; -} - - (UICollectionViewCell *)dequeueReusableCellOfClass:(Class)cellClass forSectionController:(IGListSectionController *)sectionController atIndex:(NSInteger)index { diff --git a/Source/Internal/IGListSectionControllerInternal.h b/Source/Internal/IGListSectionControllerInternal.h index 73c9cb66c..40758b564 100644 --- a/Source/Internal/IGListSectionControllerInternal.h +++ b/Source/Internal/IGListSectionControllerInternal.h @@ -19,6 +19,8 @@ FOUNDATION_EXTERN void IGListSectionControllerPopThread(void); @property (nonatomic, weak, readwrite) UIViewController *viewController; +@property (nonatomic, assign, readwrite) NSInteger sectionIndex; + @property (nonatomic, assign, readwrite) BOOL isFirstSection; @property (nonatomic, assign, readwrite) BOOL isLastSection; diff --git a/Source/Internal/IGListSectionMap.h b/Source/Internal/IGListSectionMap.h index e39b4f50b..54ecba532 100644 --- a/Source/Internal/IGListSectionMap.h +++ b/Source/Internal/IGListSectionMap.h @@ -38,7 +38,7 @@ IGLK_SUBCLASSING_RESTRICTED @param objects The objects in the collection. @param sectionControllers The section controllers that map to each object. */ -- (void)updateWithObjects:(NSArray > *)objects sectionControllers:(NSArray > *)sectionControllers; +- (void)updateWithObjects:(NSArray > *)objects sectionControllers:(NSArray *)sectionControllers; /** Fetch a section controller given a section. diff --git a/Source/Internal/IGListSectionMap.m b/Source/Internal/IGListSectionMap.m index c1abc9cf3..59cfee1de 100644 --- a/Source/Internal/IGListSectionMap.m +++ b/Source/Internal/IGListSectionMap.m @@ -11,6 +11,8 @@ #import +#import "IGListSectionControllerInternal.h" + @interface IGListSectionMap () // both of these maps allow fast lookups of objects, list objects, and indexes @@ -59,9 +61,12 @@ - (IGListSectionController *)sectionControllerForSection:(NSInteger)section { - (void)updateWithObjects:(NSArray *)objects sectionControllers:(NSArray *)sectionControllers { IGParameterAssert(objects.count == sectionControllers.count); + [self reset]; + self.mObjects = [objects mutableCopy]; - [self reset]; + id firstObject = objects.firstObject; + id lastObject = objects.lastObject; [objects enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop) { IGListSectionController *sectionController = sectionControllers[idx]; @@ -69,6 +74,10 @@ - (void)updateWithObjects:(NSArray *)objects sectionControllers:(NSArray *)secti // set the index of the list for easy reverse lookup [self.sectionControllerToSectionMap setObject:@(idx) forKey:sectionController]; [self.objectToSectionControllerMap setObject:sectionController forKey:object]; + + sectionController.isFirstSection = (object == firstObject); + sectionController.isLastSection = (object == lastObject); + sectionController.sectionIndex = (NSInteger)idx; }]; } @@ -99,6 +108,12 @@ - (NSInteger)sectionForObject:(id)object { } - (void)reset { + [self enumerateUsingBlock:^(id _Nonnull object, IGListSectionController * _Nonnull sectionController, NSInteger section, BOOL * _Nonnull stop) { + sectionController.sectionIndex = NSNotFound; + sectionController.isFirstSection = NO; + sectionController.isLastSection = NO; + }]; + [self.sectionControllerToSectionMap removeAllObjects]; [self.objectToSectionControllerMap removeAllObjects]; } diff --git a/Tests/IGListAdapterE2ETests.m b/Tests/IGListAdapterE2ETests.m index 3183bc841..24f3dec32 100644 --- a/Tests/IGListAdapterE2ETests.m +++ b/Tests/IGListAdapterE2ETests.m @@ -521,7 +521,7 @@ - (void)test_whenQueryingCollectionContext_withNewItemInstances_thatSectionMatch __weak __typeof__(sectionController) weakSectionController = sectionController; sectionController.itemUpdateBlock = ^{ executedUpdateBlock = YES; - XCTAssertEqual([weakSectionController.collectionContext sectionForSectionController:weakSectionController], 1); + XCTAssertEqual(weakSectionController.sectionIndex, 1); }; [self.adapter performUpdatesAnimated:YES completion:^(BOOL finished3) { diff --git a/Tests/IGListAdapterTests.m b/Tests/IGListAdapterTests.m index e023ee87a..2d2c8b53b 100644 --- a/Tests/IGListAdapterTests.m +++ b/Tests/IGListAdapterTests.m @@ -1089,4 +1089,129 @@ - (void)test_whenQueryingInsetContainerSize_thatResultIsBoundsInsetByContent { XCTAssertEqual(size.height, 96); } +- (void)test_whenInsertingAtBeginning_thatAllSectionControllerIndexesUpdateCorrectly_forInsertAtHead { + NSNumber *zero = @0; + NSNumber *one = @1; + NSNumber *two = @2; + NSNumber *three = @3; + self.dataSource.objects = @[one, two, three]; + [self.adapter performUpdatesAnimated:NO completion:nil]; + + IGListSectionController *controller1a = [self.adapter sectionControllerForObject:one]; + XCTAssertEqual(controller1a.sectionIndex, 0); + XCTAssertTrue(controller1a.isFirstSection); + + XCTAssertEqual([self.adapter sectionControllerForObject:two].sectionIndex, 1); + XCTAssertEqual([self.adapter sectionControllerForObject:three].sectionIndex, 2); + XCTAssertTrue([self.adapter sectionControllerForObject:three].isLastSection); + + self.dataSource.objects = @[zero, one, two, three]; + [self.adapter performUpdatesAnimated:NO completion:nil]; + + IGListSectionController *controller0 = [self.adapter sectionControllerForObject:zero]; + XCTAssertEqual(controller0.sectionIndex, 0); + XCTAssertTrue(controller0.isFirstSection); + + IGListSectionController *controller1b = [self.adapter sectionControllerForObject:one]; + XCTAssertEqual(controller1b.sectionIndex, 1); + XCTAssertFalse(controller1b.isFirstSection); + + XCTAssertEqual([self.adapter sectionControllerForObject:two].sectionIndex, 2); + XCTAssertEqual([self.adapter sectionControllerForObject:three].sectionIndex, 3); + XCTAssertTrue([self.adapter sectionControllerForObject:three].isLastSection); +} + +- (void)test_whenRemovingFromHead_thatAllSectionControllerIndexesUpdateCorrectly_RemovedSectionControllerIsNotFound { + NSNumber *zero = @0; + NSNumber *one = @1; + NSNumber *two = @2; + NSNumber *three = @3; + self.dataSource.objects = @[zero, one, two, three]; + [self.adapter performUpdatesAnimated:NO completion:nil]; + + IGListSectionController *zeroController = [self.adapter sectionControllerForSection:0]; + XCTAssertEqual(zeroController.sectionIndex, 0); + XCTAssertTrue(zeroController.isFirstSection); + + IGListSectionController *oneController = [self.adapter sectionControllerForSection:1]; + XCTAssertEqual(oneController.sectionIndex, 1); + XCTAssertFalse(oneController.isFirstSection); + + IGListSectionController *threeController = [self.adapter sectionControllerForSection:3]; + XCTAssertEqual(threeController.sectionIndex, 3); + XCTAssertTrue(threeController.isLastSection); + + self.dataSource.objects = @[one, two, three]; + [self.adapter performUpdatesAnimated:NO completion:nil]; + + XCTAssertEqual(zeroController.sectionIndex, NSNotFound); + XCTAssertFalse(zeroController.isFirstSection); + + XCTAssertEqual(oneController.sectionIndex, 0); + XCTAssertTrue(oneController.isFirstSection); + + XCTAssertEqual(threeController.sectionIndex, 2); + XCTAssertTrue(threeController.isLastSection); +} + +- (void)test_whenRemovingFromMiddle_thatAllSectionControllerIndexesUpdateCorrectly_removedSectionControllerIsNotFound { + NSNumber *zero = @0; + NSNumber *one = @1; + NSNumber *two = @2; + NSNumber *three = @3; + self.dataSource.objects = @[zero, one, two, three]; + [self.adapter performUpdatesAnimated:NO completion:nil]; + + IGListSectionController *zeroController = [self.adapter sectionControllerForSection:0]; + XCTAssertEqual(zeroController.sectionIndex, 0); + XCTAssertTrue(zeroController.isFirstSection); + + IGListSectionController *oneController = [self.adapter sectionControllerForSection:1]; + XCTAssertEqual(oneController.sectionIndex, 1); + XCTAssertFalse(oneController.isFirstSection); + + IGListSectionController *threeController = [self.adapter sectionControllerForSection:3]; + XCTAssertEqual(threeController.sectionIndex, 3); + XCTAssertTrue(threeController.isLastSection); + + self.dataSource.objects = @[zero, two, three]; + [self.adapter performUpdatesAnimated:NO completion:nil]; + + XCTAssertEqual(zeroController.sectionIndex, 0); + XCTAssertTrue(zeroController.isFirstSection); + + XCTAssertEqual(oneController.sectionIndex, NSNotFound); + XCTAssertFalse(oneController.isFirstSection); + + XCTAssertEqual(threeController.sectionIndex, 2); + XCTAssertTrue(threeController.isLastSection); +} + +- (void)test_withStrongRefToSectionController_thatAdapterSectionIndexIsZero_thatSectionControllerIndexDoesNotChange { + IGListSectionController *sc = nil; + + // hold a weak reference to simulate what would happen to the collectionContext object on a section controller + // if the section controller were held strongly by an async block and the rest of the infra was deallocated + __weak IGListAdapter *wAdapter = nil; + + @autoreleasepool { + IGListTestAdapterDataSource *dataSource = [IGListTestAdapterDataSource new]; + IGListReloadDataUpdater *updater = [IGListReloadDataUpdater new]; + IGListAdapter *adapter = [[IGListAdapter alloc] initWithUpdater:updater + viewController:nil]; + adapter.dataSource = dataSource; + adapter.collectionView = self.collectionView; + wAdapter = adapter; + + dataSource.objects = @[@0, @1, @2]; + [adapter performUpdatesAnimated:NO completion:nil]; + + sc = [adapter sectionControllerForSection:1]; + XCTAssertEqual(sc.sectionIndex, 1); + } + + XCTAssertEqual(sc.sectionIndex, 1); + XCTAssertEqual([wAdapter sectionForSectionController:sc], 0); +} + @end diff --git a/Tests/IGListSectionMapTests.m b/Tests/IGListSectionMapTests.m index e6524935c..7cc4a873b 100644 --- a/Tests/IGListSectionMapTests.m +++ b/Tests/IGListSectionMapTests.m @@ -21,7 +21,7 @@ @implementation IGListSectionMapTests - (void)test_whenUpdatingItems_thatArraysAreEqual { NSArray *objects = @[@0, @1, @2]; - NSArray *sectionControllers = @[@"a", @"b", @"c"]; + NSArray *sectionControllers = @[[IGListTestSection new], [IGListTestSection new], [IGListTestSection new]]; IGListSectionMap *map = [[IGListSectionMap alloc] initWithMapTable:[NSMapTable strongToStrongObjectsMapTable]]; [map updateWithObjects:objects sectionControllers:sectionControllers]; XCTAssertEqualObjects(objects, map.objects); @@ -29,7 +29,7 @@ - (void)test_whenUpdatingItems_thatArraysAreEqual { - (void)test_whenUpdatingItems_thatSectionControllersAreMappedForSection { NSArray *objects = @[@0, @1, @2]; - NSArray *sectionControllers = @[@"a", @"b", @"c"]; + NSArray *sectionControllers = @[[IGListTestSection new], [IGListTestSection new], [IGListTestSection new]]; IGListSectionMap *map = [[IGListSectionMap alloc] initWithMapTable:[NSMapTable strongToStrongObjectsMapTable]]; [map updateWithObjects:objects sectionControllers:sectionControllers]; XCTAssertEqualObjects([map sectionControllerForSection:1], sectionControllers[1]); @@ -37,7 +37,7 @@ - (void)test_whenUpdatingItems_thatSectionControllersAreMappedForSection { - (void)test_whenUpdatingItems_thatSectionControllersAreMappedForItem { NSArray *objects = @[@0, @1, @2]; - NSArray *sectionControllers = @[@"a", @"b", @"c"]; + NSArray *sectionControllers = @[[IGListTestSection new], [IGListTestSection new], [IGListTestSection new]]; IGListSectionMap *map = [[IGListSectionMap alloc] initWithMapTable:[NSMapTable strongToStrongObjectsMapTable]]; [map updateWithObjects:objects sectionControllers:sectionControllers]; XCTAssertEqual([map sectionControllerForObject:objects[1]], sectionControllers[1]); @@ -45,7 +45,7 @@ - (void)test_whenUpdatingItems_thatSectionControllersAreMappedForItem { - (void)test_whenUpdatingItems_thatSectionsAreMappedForSectionController { NSArray *objects = @[@0, @1, @2]; - NSArray *sectionControllers = @[@"a", @"b", @"c"]; + NSArray *sectionControllers = @[[IGListTestSection new], [IGListTestSection new], [IGListTestSection new]]; IGListSectionMap *map = [[IGListSectionMap alloc] initWithMapTable:[NSMapTable strongToStrongObjectsMapTable]]; [map updateWithObjects:objects sectionControllers:sectionControllers]; XCTAssertEqual([map sectionForSectionController:sectionControllers[1]], 1); @@ -53,7 +53,7 @@ - (void)test_whenUpdatingItems_thatSectionsAreMappedForSectionController { - (void)test_whenUpdatingItems_withUnknownItem_thatSectionControllerIsNil { NSArray *objects = @[@0, @1, @2]; - NSArray *sectionControllers = @[@"a", @"b", @"c"]; + NSArray *sectionControllers = @[[IGListTestSection new], [IGListTestSection new], [IGListTestSection new]]; IGListSectionMap *map = [[IGListSectionMap alloc] initWithMapTable:[NSMapTable strongToStrongObjectsMapTable]]; [map updateWithObjects:objects sectionControllers:sectionControllers]; XCTAssertNil([map sectionControllerForObject:@4]); @@ -69,7 +69,7 @@ - (void)test_whenUpdatingItems_withSectionController_thatSectionIsNotFound { - (void)test_whenEnumeratingMap_withStopFlagSet_thatEnumerationEndsEarly { NSArray *objects = @[@0, @1, @2]; - NSArray *sectionControllers = @[@"a", @"b", @"c"]; + NSArray *sectionControllers = @[[IGListTestSection new], [IGListTestSection new], [IGListTestSection new]]; IGListSectionMap *map = [[IGListSectionMap alloc] initWithMapTable:[NSMapTable strongToStrongObjectsMapTable]]; [map updateWithObjects:objects sectionControllers:sectionControllers]; __block NSInteger counter = 0; @@ -82,10 +82,24 @@ - (void)test_whenEnumeratingMap_withStopFlagSet_thatEnumerationEndsEarly { - (void)test_whenAccessingOOBSection_thatNilIsReturned { NSArray *objects = @[@0, @1, @2]; - NSArray *sectionControllers = @[@"a", @"b", @"c"]; + NSArray *sectionControllers = @[[IGListTestSection new], [IGListTestSection new], [IGListTestSection new]]; IGListSectionMap *map = [[IGListSectionMap alloc] initWithMapTable:[NSMapTable strongToStrongObjectsMapTable]]; [map updateWithObjects:objects sectionControllers:sectionControllers]; XCTAssertNil([map objectForSection:4]); } +- (void)test_whenUpdatingItems_thatSectionControllerIndexesAreUpdated { + NSArray *objects = @[@0, @1, @2]; + + IGListTestSection *one = [IGListTestSection new]; + XCTAssertEqual(one.sectionIndex, NSNotFound); + + NSArray *sectionControllers = @[[IGListTestSection new], one, [IGListTestSection new]]; + IGListSectionMap *map = [[IGListSectionMap alloc] initWithMapTable:[NSMapTable strongToStrongObjectsMapTable]]; + [map updateWithObjects:objects sectionControllers:sectionControllers]; + + XCTAssertEqual(one.sectionIndex, 1); + XCTAssertFalse(one.isFirstSection); +} + @end diff --git a/Tests/IGListStackSectionControllerTests.m b/Tests/IGListStackSectionControllerTests.m index 38409fe74..a817ec7d1 100644 --- a/Tests/IGListStackSectionControllerTests.m +++ b/Tests/IGListStackSectionControllerTests.m @@ -241,12 +241,12 @@ - (void)test_whenQueryingSectionControllerSection_thatSectionMatchesStackSection IGListTestSection *section21 = stack2.sectionControllers[0]; IGListTestSection *section22 = stack2.sectionControllers[1]; - XCTAssertEqual([stack1.collectionContext sectionForSectionController:stack1], 0); - XCTAssertEqual([stack2.collectionContext sectionForSectionController:stack2], 1); - XCTAssertEqual([section11.collectionContext sectionForSectionController:section11], 0); - XCTAssertEqual([section12.collectionContext sectionForSectionController:section12], 0); - XCTAssertEqual([section21.collectionContext sectionForSectionController:section21], 1); - XCTAssertEqual([section22.collectionContext sectionForSectionController:section22], 1); + XCTAssertEqual(stack1.sectionIndex, 0); + XCTAssertEqual(stack2.sectionIndex, 1); + XCTAssertEqual(section11.sectionIndex, 0); + XCTAssertEqual(section12.sectionIndex, 0); + XCTAssertEqual(section21.sectionIndex, 1); + XCTAssertEqual(section22.sectionIndex, 1); } - (void)test_whenReloadingItems_thatCollectionViewReloadsRelativeIndexPaths {