{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":67588512,"defaultBranch":"main","name":"IGListKit","ownerLogin":"Instagram","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2016-09-07T08:39:27.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/549085?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1683526276.0","currentOid":""},"activityList":{"items":[{"before":"194446af3474c00eba12bd3def8514c24bd49b1e","after":"63d41afe243a1dca731d5861c812786a06bfd58e","ref":"refs/heads/main","pushedAt":"2024-04-28T09:52:50.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Update the CHANGELOG\n\nSummary: Goes through and updates the CHANGELOG with the latest changes made to IGListKit this year.\n\nReviewed By: fabiomassimo\n\nDifferential Revision: D56620737\n\nfbshipit-source-id: 598866cb938ed731d8f60364e11d1b7d5793806d","shortMessageHtmlLink":"Update the CHANGELOG"}},{"before":"86d31b12e6bd705ea61be4fe9f57009eaa719cbd","after":"194446af3474c00eba12bd3def8514c24bd49b1e","ref":"refs/heads/main","pushedAt":"2024-04-26T07:49:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Remove privacy manifest file and related build tooling\n\nSummary:\nAfter consulting with the privacy team, we've agreed that it is best to remove the privacy manifest file until we can actually confirm if it is actually required.\n\nIn particular, Apple seems to currently only send warnings to apps that it detects are using required reason APIs without declaring these in their own privacy manifest. As IGListKit does not implement any of these APIs, the manifest shouldn't be required.\n\nFollowing this change, if anyone does receive a rejection noticed from Apple and it is like to IGListKit, please open a new issue in this GitHub repo so we can re-review this decision at that point.\n\nDifferential Revision: D56618598\n\nfbshipit-source-id: df895708c318156525a62a007ebeae7934a870ed","shortMessageHtmlLink":"Remove privacy manifest file and related build tooling"}},{"before":"bfbf779a60115177d5bf0917306342758e69a851","after":"86d31b12e6bd705ea61be4fe9f57009eaa719cbd","ref":"refs/heads/main","pushedAt":"2024-04-19T04:09:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Add missing default dictionary field in privacy manifest\n\nSummary:\nI was getting some feedback from one of my libraries that the privacy manifest was reporting validation errors, and when I checked the privacy manifest here, it was similarly incorrectly structured.\n\nThis diff fixes the base default values of the privacy manifest, and then verified against Apple's validator to make sure the required fields are correct.\n\nReviewed By: fabiomassimo\n\nDifferential Revision: D56294818\n\nfbshipit-source-id: 656917ec4c3452ca5ebaa60dd44efe303f7e0396","shortMessageHtmlLink":"Add missing default dictionary field in privacy manifest"}},{"before":"8380bb41616c6fac6a3860545163e17161c7bb6d","after":"bfbf779a60115177d5bf0917306342758e69a851","ref":"refs/heads/main","pushedAt":"2024-03-19T11:45:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Update podspecs to properly separate privacy manifest files\n\nSummary:\nAs pointed out in the GitHub issues, if `resources` is used in the podspec instead of explicitly named `resource_bundles`, the associated files will be placed in the root bundle of the app. In this case, this means the `PrivacyInfo.xcprivacy` files for each framework of IGListKit would end up overwriting each other, and ultimately overwriting the manifest of the app itself.\n\nThis diff configures the podspecs correctly to ensure there are no file conflicts.\n\nReviewed By: benhgreen\n\nDifferential Revision: D55056568\n\nfbshipit-source-id: 85951afbc93c847a40caca64d7b930df74ff705d","shortMessageHtmlLink":"Update podspecs to properly separate privacy manifest files"}},{"before":"b6b346676a246cc7f7ca68863d045ba9c8bd272c","after":"8380bb41616c6fac6a3860545163e17161c7bb6d","ref":"refs/heads/main","pushedAt":"2024-03-18T14:43:01.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Fix incorrect publicHeaderPath in swift package (#1600)\n\nSummary:\n## Changes in this pull request\n\n- The swift package works static type by default, so i removes static type in product library.\n- If target's path is changed, it must manually specify the `publicHeaderPath`. I specifies the `publicHeaderPath` property.\n\n### Checklist\n\n- [x] All tests pass. Demo project builds and runs.\n- [x] I added tests, an experiment, or detailed why my change isn't tested.\n- [ ] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.\n- [ ] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/main/.github/CONTRIBUTING.md)\n\nPull Request resolved: https://github.com/Instagram/IGListKit/pull/1600\n\nTest Plan:\nTested and confirmed this works with the iOS sample apps.\n\n {F1470046962}\n\nReviewed By: fabiomassimo\n\nDifferential Revision: D55006212\n\nPulled By: TimOliver\n\nfbshipit-source-id: 2dae9e3bc68ad9a70fdb3f1892811d5725baf519","shortMessageHtmlLink":"Fix incorrect publicHeaderPath in swift package (#1600)"}},{"before":"8213ddbc879238d783032a31aac7be77fc543dbb","after":"b6b346676a246cc7f7ca68863d045ba9c8bd272c","ref":"refs/heads/main","pushedAt":"2024-03-18T07:33:26.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Remove legacy build pipeline from GitHub Actions\n\nSummary:\nAfter landing the diff to add a privacy manifest to IGListKit's SPM package, the `Carthage-Legacy-Lipo-Binaries` build pipeline started failing.\n\nLooking into it, this is because in order to support bundled resources in a Swift Package (Which is necessary to staple the manifest to the framework), the build tools version must be set at Swift 5.3. Meanwhile, the legacy build pipeline requires Xcode 11 in order to support the `lipo` command, and that one only goes up to Swift build tools 5.2.\n\nThe reason why XCFramework superseded fat binaries is because fat binaries may only have 1 slice of any given architecture in it (eg arm64). And with Apple Silicon, 2 arm64 slices (One for the iOS Simulator, and one for iOS hardware) are basically the norm now.\n\nWith that in mind, now that the Apple Silicon transition is complete, and in order to properly support privacy manifests, I think it's time we retire the `lipo` build pipeline in favour of supporting just the XCFramework route.\n\nReviewed By: benhgreen\n\nDifferential Revision: D55005596\n\nfbshipit-source-id: ad9bc9512160065dfc699cd05d2bb1e92883e957","shortMessageHtmlLink":"Remove legacy build pipeline from GitHub Actions"}},{"before":"7f20f5cad69db9fb035bb5f4f0a331e9f8e88973","after":"8213ddbc879238d783032a31aac7be77fc543dbb","ref":"refs/heads/main","pushedAt":"2024-03-18T05:24:22.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Add privacy manifest file to IGListKit\n\nSummary:\nBy popular demand, adds a `PrivacyInfo.xcprivacy` defining the privacy policies of IGListKit. As a purely UI based library, there are no privacy implications of IGListKit, but it is still necessary to add an empty manifest file to indicate this.\n\nThe privacy manifest has been added to CocoaPods, SPM and to generated dynamic frameworks for Carthage.\n\nI had to change the behaviour of `IGListSwiftKit` to rely on the same symlink mechanism as the Obj-C libraries in order to combine the Swift files and the privacy manifest into the same directory that can then be pointed at by SPM.\n\nReviewed By: benhgreen\n\nDifferential Revision: D54935762\n\nfbshipit-source-id: 5b0ab5dd4b807097c2c9589bc250424550bf1d83","shortMessageHtmlLink":"Add privacy manifest file to IGListKit"}},{"before":"eeb5208911fe340b39d2cc3231d1cd59df16e215","after":"7f20f5cad69db9fb035bb5f4f0a331e9f8e88973","ref":"refs/heads/main","pushedAt":"2024-03-12T06:39:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Add a mechanism to separate internal and external default experiments\n\nSummary:\nThis diff provides a temporary mechanism to allow different experiments to be enabled by default between internal and external builds of IGListKit. It works similarly to `IGListAssert` where a different copy of `IGListDefaultExperiments.h` is provided by BUCK when performing internal builds.\n\nFor the open source copies of IGListKit, the standard system behaviour of triggering an `NSInconsistencyException` when an invalid batch transaction occurs is set. For internal builds, the `IGListExperimentThrowOnInconsistencyException` experiment is disabled, where invalid transactions are forwarded to `IGListAssert` instead.\n\nDifferential Revision: D54571550\n\nfbshipit-source-id: c6c339de20c24eb487846b6567d6c8bc08bc20f2","shortMessageHtmlLink":"Add a mechanism to separate internal and external default experiments"}},{"before":"5c9d3a80c692712972ea3749f4e0b02921639c73","after":"eeb5208911fe340b39d2cc3231d1cd59df16e215","ref":"refs/heads/main","pushedAt":"2024-03-08T03:40:11.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Add IGListTestCollectionViewLayout class to XCTest suite\n\nSummary:\nFixes an issue where the external test suite was failing to build as `IGListTestCollectionViewLayout` hadn't been added to the Xcode project.\n\nAlso modifies the test suite to continue after any assertions that would normally halt the unit test are encountered.\n\nReviewed By: fabiomassimo\n\nDifferential Revision: D54571670\n\nfbshipit-source-id: 52cc2bdff0318ee6b213fd3b858cfae2440e1d2c","shortMessageHtmlLink":"Add IGListTestCollectionViewLayout class to XCTest suite"}},{"before":"6a834f8f23ce33b437ab5a84d7e8091cee8626d4","after":"5c9d3a80c692712972ea3749f4e0b02921639c73","ref":"refs/heads/main","pushedAt":"2024-03-02T08:58:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Boundary test of removing all IGListAdapter animation\n\nSummary:\n# Context\n\nWe've seen several experiments in which disabling standard-update animation yielded significant app-value wins. Overall there is a trend of moving towards snappier\n\n- Reels grid disabled animation, led to vpvd wins\n- Home feed disabled update animations -- led to Session and revenue wins\n\n# This diff\n\nFrom IGListAdapter+Common, create a kill switch to disable all animation. Potentially use this flag to dogfood and see where we have unnecessary animation.\n\nDifferential Revision: D54388375\n\nfbshipit-source-id: a46c60944317db5deeceaac6d0baed71104d0c34","shortMessageHtmlLink":"Boundary test of removing all IGListAdapter animation"}},{"before":"e3c5cfb59eb5efb49feb9ed89d1aec29fed70e4a","after":"6a834f8f23ce33b437ab5a84d7e8091cee8626d4","ref":"refs/heads/main","pushedAt":"2024-01-25T18:25:47.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"`XCTAssertTrue(NO,` -> `XCTFail(`\n\nSummary: Cleanup\n\nReviewed By: ChrisXu\n\nDifferential Revision: D53070259\n\nfbshipit-source-id: 0fcdd20038095daf6c4af22f736cc08ab73c8c4c","shortMessageHtmlLink":"XCTAssertTrue(NO, -> XCTFail("}},{"before":"731e8948906b6dd2729c8db428868efe5d78b1ad","after":"e3c5cfb59eb5efb49feb9ed89d1aec29fed70e4a","ref":"refs/heads/main","pushedAt":"2024-01-17T22:11:12.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"keep pointer to self.collectionView.dataSource in IGListBatchUpdateTransaction\n\nSummary:\n## Issue\nWe're seeing crashes like this one:\n\n```\nInvalid batch updates detected: the number of sections and/or items returned by the data source before and after performing the batch updates are inconsistent with the updates.\nData source before updates = { 6 sections with item counts: [1, 0, 6, 8, 5, 7] }\nData source after updates = { 1 section with item counts: [0] }\nUpdates = [\n]\n```\n\nI'm thinking the `IGListAdapter` gets deallocated during an update.\n1. `1 section with item counts: [0]` is the default when the `self.collectionView.dataSource` is `nil`. I don't really see a way we'd return a single section with zero cells.\n2. We're not seeing any of the additional crash information set by the `IGListAdapterUpdaterDelegate`, which would happen if `IGListAdapter` gets deallocated (it holds the strong pointer to the delegate).\n\n## Fix\n\nLets keep a strong pointer within the scope of the function to make sure it sticks around. Theoretically, there could be a situation where the section-controller holds a strong pointer to the list-adapter in an update block, which gets released after it runs. This seems pretty unlikely, so lets test this fix to see if that's it.\n\nReviewed By: candance\n\nDifferential Revision: D52747014\n\nfbshipit-source-id: 545aaa3deb90af85a011e716ac870659da42106f","shortMessageHtmlLink":"keep pointer to self.collectionView.dataSource in IGListBatchUpdateTr…"}},{"before":"d01784bd66c9d6d9b196ae085f2ddf46e34bb158","after":"731e8948906b6dd2729c8db428868efe5d78b1ad","ref":"refs/heads/main","pushedAt":"2024-01-05T18:48:34.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"add more details to the error message when catching NSInternalInconsistencyException\n\nSummary: We want to remove this exception handling, but we're seeing quite a lot of `IGFailure` happening recently. Lets improve the error message to make it easier to debug. Once we get down to a reasonable number, we can remove it.\n\nReviewed By: fabiomassimo\n\nDifferential Revision: D52564499\n\nfbshipit-source-id: f70ca2f0f0f8124377eeb2a219878dfa019af87c","shortMessageHtmlLink":"add more details to the error message when catching NSInternalInconsi…"}},{"before":"6ea2b91150040911bcbe4f98201e36035e26e47f","after":"d01784bd66c9d6d9b196ae085f2ddf46e34bb158","ref":"refs/heads/main","pushedAt":"2023-12-19T15:21:52.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"add swipe action to UICollectionViewCompositionalLayout example\n\nSummary: Lets add swipe to delete.\n\nDifferential Revision: D52262785\n\nfbshipit-source-id: b95cdee116374c561967dd585d02110a4d877e16","shortMessageHtmlLink":"add swipe action to UICollectionViewCompositionalLayout example"}},{"before":"f99d8614b806e8e0d85b058346d66651090b31f6","after":"6ea2b91150040911bcbe4f98201e36035e26e47f","ref":"refs/heads/main","pushedAt":"2023-12-14T22:35:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"avoid crashing when not subclassing IGListSectionController\n\nSummary:\nCurrently, if you use `IGListSectionController` without a subclass, `UICollectionView` will crash when requesting the cell. That's because `[IGListSectionController numberOfItems]` defaults to 1, but returns no cell. There's a few issues with that:\n1. It can be tough to debug, because the crash in within `UICollectionView`. We don't know the dataSource or object type responsible.\n2. The crash only happens if the user scrolls by the missing cell, which can make it hard to repro.\n3. If we don't know how to render a single section, we might not want to crash the entire app. Passing a plain `IGListSectionController` kind of feels like the dataSource is ok with just rendering nothing. It's not clear at all that it will crash.\n\nOptions:\n1. Crash immediately when a plain `IGListSectionController` is passed to `IGListAdapter`, so we get a clear callstack and API feedback. If the dataSource doesn't want to crash, it must return `IGEmptySectionController` that has 0 `numberOfItems`.\n2. Don't crash, but log a `IGFailAssert()`. If the dataSource wants to throw on a missing object-controller match, they can can, but it's not the IGListKit default.\n\nI'm leaning on #2 for a few reasons. It's really not obvious that passing a plain `IGListSectionController` would crash and no one will know that `IGEmptySectionController` exists. We could have a linter, but that only works within Meta.\n\nReviewed By: DimaVartanian\n\nDifferential Revision: D52087286\n\nfbshipit-source-id: 8b8754d56e66c0c2b00f8df3b9671a6fc2287aea","shortMessageHtmlLink":"avoid crashing when not subclassing IGListSectionController"}},{"before":"a4bae434717594e570cf115c7f06b9456471abfc","after":"f99d8614b806e8e0d85b058346d66651090b31f6","ref":"refs/heads/main","pushedAt":"2023-11-20T02:03:25.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Fix UI test timeout when running on GitHub Actions\n\nSummary:\nThe previous CI changes landed this morning, however there was still some test flakiness. From the logs, it looked like an Accessibility dialog was being shown during the UI tests, and this was causing them to time out.\n\nOn closer inspection of the logs , I discovered the 'pre-heat' step in the UI tests pipeline was incorrectly choosing the wrong iPhone 14 Pro simulator, since GitHub Actions on macOS 13 offers both iOS 16.4 and iOS 17.0 devices (Even if Xcode 14 was explicitly declared).\n\nIn order to ensure the same iOS Simulator is used throughout the UI tests, this diff explicitly declares the iOS version it expects to be working with.\n\nDifferential Revision: D51293930\n\nfbshipit-source-id: ddeee7a6aa8f826541bc1aeb56ed6a8445534694","shortMessageHtmlLink":"Fix UI test timeout when running on GitHub Actions"}},{"before":"b3d431335588b2da550414dab411953d9ed4cbcf","after":"a4bae434717594e570cf115c7f06b9456471abfc","ref":"refs/heads/main","pushedAt":"2023-11-13T17:55:25.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Refine and add code coverage for trait collection in collection context\n\nSummary:\nNow that the inconsistency exception is being wrapped up, I'm going to move forward with a public release some more. I'm going to go through and make sure everything is up-to-date in the GitHub repo.\n\nThis diff adds code coverage to the new trait collection exposure API in `IGListCollectionContext`. It also adds document-generating compatible commenting and positions it at a more appropriate ordering in the header.\n\nReviewed By: zats\n\nDifferential Revision: D51146049\n\nfbshipit-source-id: 2d7ecc8fa042006ef4fd70451b9ab7ba6d0a66bb","shortMessageHtmlLink":"Refine and add code coverage for trait collection in collection context"}},{"before":"53a96a9896732ffeb2683953aa6bd23642743ec8","after":"b3d431335588b2da550414dab411953d9ed4cbcf","ref":"refs/heads/main","pushedAt":"2023-10-31T20:26:01.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"fix IGListExperimentFixCrashOnReloadObjects\n\nSummary:\nThere's a couple issues with `IGListExperimentFixCrashOnReloadObjects` (D47281472):\n1. We're calling `_updateBackgroundView` in the completion block, which might be called many times for a single transaction.\n2. On animated updates, the background view will appear after the animation, which doesn't look great. Btw, this happens if you update the count via an item-block update, but maybe we can fix this separatly to keep things simple.\n\nInstead of calling `_updateBackgroundView` in the completion block, lets go back to calling it within `_updateWithData`, but not check `isInDataUpdateBlock` to keep the current behavior.\n\nReviewed By: fabiomassimo\n\nDifferential Revision: D50752236\n\nfbshipit-source-id: c742d9d64a93f1f2e1a48d85f832720d9350c545","shortMessageHtmlLink":"fix IGListExperimentFixCrashOnReloadObjects"}},{"before":"5e79f8a3198349c0b5bc658e398f165fcaf79716","after":"53a96a9896732ffeb2683953aa6bd23642743ec8","ref":"refs/heads/main","pushedAt":"2023-10-23T17:47:08.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"expose trait collection\n\nSummary: this can be helpful when section controllers calculate size depending on the size class\n\nDifferential Revision: D50425042\n\nfbshipit-source-id: 5fbafe1b0662ffb428c42bf99593868915dfc6c7","shortMessageHtmlLink":"expose trait collection"}},{"before":"5217e7402d17bc5051d558ab39e8c6be7e186e94","after":"5e79f8a3198349c0b5bc658e398f165fcaf79716","ref":"refs/heads/main","pushedAt":"2023-10-19T17:01:58.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"add IGListExperimentThrowOnInconsistencyException\n\nSummary:\nCurrently, we don't throw on `NSInternalInconsistencyException` as a temporary workaround, but there's a few issues with that:\n1) `IGFailure` doesn't collect nearly as much information as exceptions, so it's difficult to debug. We could add more context to it, but feels like we should just fix the underlying issue instead, and remove the workaround.\n2) If we throw in an animated update, all app animations break because `[UIView performWithoutAnimation:...]` doesn’t close properly.\n3) Continuing to use the `UICollectionView` after it throws feels a bit risky IMO. There's no guarantee that it should work properly after that.\n\nLets reintroduce the exception slowly, fix each problem, and eventually remove the workaround.\n\nIn the future, we could do 2 other things:\n1) Make `IGListExceptionDoctor` that can look at an exception's details and diagnose the issue, or at least provide more context.\n2) Check if the updates make sense before telling the `UICollectionView`, so we can fallback to a `-reloadData`. This would shift the problem from a crash to a performance regression, so not ideal, but maybe less worse for production.\n\nI'll add the experiment set-up in the next diffs.\n\nDifferential Revision: D50426255\n\nfbshipit-source-id: 26e21d3dfcf4670ed07f397cf0d4decdda08eec5","shortMessageHtmlLink":"add IGListExperimentThrowOnInconsistencyException"}},{"before":"d220f8a73fa91fb8444398992b2667f24a38b7a7","after":"5217e7402d17bc5051d558ab39e8c6be7e186e94","ref":"refs/heads/main","pushedAt":"2023-10-14T05:56:45.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Fix SwiftLint script to execute in correct location via the sample apps\n\nSummary:\nPeriodically the sample apps build jobs would fail. I discovered this was because SwiftLint wasn't executing out of the current location, and so it was throwing an error when it couldn't find the SwiftLint yml file in the correct relative location.\n\nThis diff improves the linting script by making sure all of the relative paths are based off the scripts on-disk location.\n\nReviewed By: fethica\n\nDifferential Revision: D50294909\n\nfbshipit-source-id: 3f5f65e629fe311d1b50d3f86bb458839482f5a1","shortMessageHtmlLink":"Fix SwiftLint script to execute in correct location via the sample apps"}},{"before":"3d1cad32fed1f90cf9e0e012f24cadcb77b4c5ff","after":"d220f8a73fa91fb8444398992b2667f24a38b7a7","ref":"refs/heads/main","pushedAt":"2023-10-12T14:58:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Fix re-entrance + caching when using IGListCollectionViewLayout\n\nSummary:\nThe issue I've been seeing is that list kit would not recalculate layout for when collection view bounds would change\n\nIGListCollectionViewLayout has code to invalidate layout when collection view size chances however it would not happen without explicitly calling `….collectionViewLayout invalidateLayout];`\n\nIt appears that in the loop of calculating the layout we would accidentally call the code that would start caching existing layout data (not calculated at the point of call) and cache the value\n\nThis does not seem to happen all the time, however moving the cache purge to the end of layout calculation loop seems reasonable since at this point we have the new values that can't be known to the cache\n\nAs long as the consumer uses `IGListCollectionViewLayout` explicitly or implicitly through convenience initialize of `IGListCollectionView` this fix should work as is\n\nReviewed By: fabiomassimo\n\nDifferential Revision: D50197736\n\nfbshipit-source-id: cb6d818f8be965f2e6ba494ffea083a6ab35682d","shortMessageHtmlLink":"Fix re-entrance + caching when using IGListCollectionViewLayout"}},{"before":"a511891376b75e195942a08241e2a2c0c046cbe0","after":"3d1cad32fed1f90cf9e0e012f24cadcb77b4c5ff","ref":"refs/heads/main","pushedAt":"2023-10-12T06:35:06.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Replace use of method_exchangeImplementations (#1583)\n\nSummary:\n## Changes in this pull request\nclass_replaceMethod is significantly faster as it doesn't need to clear the entire method cache, which can be quite expensive for large apps.\n\nNFC, but it should be faster. No new test failures.\n\nIssue fixed: #\n\n### Checklist\n\n- [ ] All tests pass. Demo project builds and runs.\n- [X] I added tests, an experiment, or detailed why my change isn't tested.\n- [ ] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.\n- [X] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/main/.github/CONTRIBUTING.md)\n\nPull Request resolved: https://github.com/Instagram/IGListKit/pull/1583\n\nReviewed By: fabiomassimo\n\nDifferential Revision: D50013222\n\nPulled By: TimOliver\n\nfbshipit-source-id: 157fea52f3768b16acd09b149bd16bea4e5fdc27","shortMessageHtmlLink":"Replace use of method_exchangeImplementations (#1583)"}},{"before":"2bdbc1201a1f68052b78520f2b93b6d3e54cf3a9","after":"a511891376b75e195942a08241e2a2c0c046cbe0","ref":"refs/heads/main","pushedAt":"2023-10-12T05:34:38.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Refactored check in IGListCollectionViewLayout for more reliable coverage\n\nSummary:\nThe `[context invalidateDataSourceCounts] && _minimumInvalidatedSection == NSNotFound` condition was never getting triggered in any of our tests.\n\nI tried to simulate this condition in my testing, but it doesn't seem possible to have `_minimumInvalidatedSection` set to `NSNotFound` when execution reaches this point. This is because the only public pathway I could see to `[context invalidateLayoutWithContext:]` was via the regular `invalidateLayout` method which always sets `_minimumInvalidatedSection` to 0 before continuing.\n\nTo solve this, since the resulting logic ends up being the same in the check above, I simply collapsed this check into the one above it.\n\nReviewed By: fabiomassimo\n\nDifferential Revision: D50000788\n\nfbshipit-source-id: da0bf0cb16c98de95f802dfd35bbdf0e935e615f","shortMessageHtmlLink":"Refactored check in IGListCollectionViewLayout for more reliable cove…"}},{"before":"2644442595ba937693ad383ad76acd8ede9ec6be","after":"2bdbc1201a1f68052b78520f2b93b6d3e54cf3a9","ref":"refs/heads/main","pushedAt":"2023-10-12T04:39:25.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Add explicit `activesupport` version as CocoaPods dependency (#1590)\n\nSummary:\n## Changes in this pull request\n\nAll of the tests started failing today with a cryptic Ruby error. It turns out that a new version of `activesupport`, a dependency of CocoaPods was released and it introduced a bug. CocoaPods wasn't referencing a direct version of `activesupport` required, and so it was automatically trying to pull in this new invalid version.\n\nThis PR fixes the issue by explicitly specifying the last known good version of the dependency in the `Gemfile`.\n\n### Checklist\n\n- [x] All tests pass. Demo project builds and runs.\n- [x] I added tests, an experiment, or detailed why my change isn't tested.\n- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.\n- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/main/.github/CONTRIBUTING.md)\n\nPull Request resolved: https://github.com/Instagram/IGListKit/pull/1590\n\nTest Plan: Tested and confirmed on my own fork of IGListKit this resolves the CocoaPods issue\n\nReviewed By: fabiomassimo\n\nDifferential Revision: D50013182\n\nPulled By: TimOliver\n\nfbshipit-source-id: 623eab49dea5ff0b589b6f06ce589e99873dece4","shortMessageHtmlLink":"Add explicit activesupport version as CocoaPods dependency (#1590)"}},{"before":"ebbc90961b8162079039eaf869ed447033375a29","after":"2644442595ba937693ad383ad76acd8ede9ec6be","ref":"refs/heads/main","pushedAt":"2023-10-12T04:32:57.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Add symlink for new `IGListArrayUtilsInternal.m` (#1591)\n\nSummary:\n## Changes in this pull request\n\nI moved the functions from ` IGListArrayUtilsInternal.h` to `IGListArrayUtilsInternal.m` to ensure the code was properly captured for code coverage, but I forgot to re-run the SPM script to generate a new symlink for it. This should fix the failing sample app build tests.\n\n### Checklist\n\n- [x] All tests pass. Demo project builds and runs.\n- [x] I added tests, an experiment, or detailed why my change isn't tested.\n- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.\n- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/main/.github/CONTRIBUTING.md)\n\nPull Request resolved: https://github.com/Instagram/IGListKit/pull/1591\n\nTest Plan: Confirmed this lets the sample apps run again.\n\nReviewed By: fabiomassimo\n\nDifferential Revision: D50013194\n\nPulled By: TimOliver\n\nfbshipit-source-id: ff4bebae781ebb460915458848cb340a89401a83","shortMessageHtmlLink":"Add symlink for new IGListArrayUtilsInternal.m (#1591)"}},{"before":"97570b41d7874d73a6c5d81df430591a1fe91f61","after":"ebbc90961b8162079039eaf869ed447033375a29","ref":"refs/heads/main","pushedAt":"2023-10-06T10:15:53.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Add coverage to updater class\n\nSummary: This diff adds a small, essentially no-op test to add coverage to the `isInDataUpdateBlock` method of `IGListReloadDataUpdater`.\n\nDifferential Revision: D49906263\n\nfbshipit-source-id: e59a04721d6af58cc2b6148cd688be8225bf3fb8","shortMessageHtmlLink":"Add coverage to updater class"}},{"before":"20190830ecf0cd495fc5c746071a2c0fd1177264","after":"97570b41d7874d73a6c5d81df430591a1fe91f61","ref":"refs/heads/main","pushedAt":"2023-10-05T05:33:20.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Remove unneeded interactive reordering test\n\nSummary:\nThis was another test I originally added to test moving items belonging to sections containing only 1 item as this triggers the codepath to move the whole section.\n\nIt turns out this test isn't needed since the codepath is being properly tested in other tests.\n\nDifferential Revision: D49900555\n\nfbshipit-source-id: f2586a22ef0f529fcfa10c4ef7d6d065a9a89f7d","shortMessageHtmlLink":"Remove unneeded interactive reordering test"}},{"before":"25d1887a41f2c849f96c2a198064fe4418791843","after":"20190830ecf0cd495fc5c746071a2c0fd1177264","ref":"refs/heads/main","pushedAt":"2023-09-26T15:26:55.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Fix IGWarnAssert macro to remove unneeded condition parameter\n\nSummary:\nI'm looking at updating IGKitKit's test suite for Xcode 15, but when I went to do a build, it failed at the `IGWarnAssert` macro. Turns out that because we set the condition in the macro to always return `(NO)`, there's no need to expose `frmt` to test for the condition.\n\nThis diff removes `frmt` from the define, allowing the tests to build again.\n\nReviewed By: fabiomassimo\n\nDifferential Revision:\nD49628618\n\nPrivacy Context Container: L1203725\n\nfbshipit-source-id: b0456a149bf5be96c8401a21866880ccd72ebbcb","shortMessageHtmlLink":"Fix IGWarnAssert macro to remove unneeded condition parameter"}},{"before":"050cd8e670f307f7c9b798e9f7c9e8637676e55f","after":"25d1887a41f2c849f96c2a198064fe4418791843","ref":"refs/heads/main","pushedAt":"2023-09-15T21:17:20.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"facebook-github-bot","name":"Facebook Community Bot","path":"/facebook-github-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6422482?s=80&v=4"},"commit":{"message":"Demote IGAssert for collection view delegate to warning\n\nSummary: This are not critical enough to trigger an assertion instead of a warning.\n\nReviewed By: DimaVartanian\n\nDifferential Revision: D49326036\n\nfbshipit-source-id: 50bbb6f57208ddea8cc1ead2db3b347f9e0c2f87","shortMessageHtmlLink":"Demote IGAssert for collection view delegate to warning"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEPDMy3wA","startCursor":null,"endCursor":null}},"title":"Activity · Instagram/IGListKit"}