{"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:1715584274.0","currentOid":""},"activityList":{"items":[{"before":"bcd8b078cbb448ed1e712aa03ec7cd56007a9709","after":"0c257795e4a6e448fb76b5f15ebc83a1afcbd272","ref":"refs/heads/main","pushedAt":"2024-08-23T18:36:10.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 crash when reloading the same cell index multiple times\n\nSummary:\n## Context\nMerging multiple batch updates of the same section is inherently unsafe, because each block can mutate the underlaying list and lead to insert/deletes that operate on different before/after lists. The long term fix is to get rid of item level batch updates (insert/delete calls) and use diffing like for sections, but that's a much larger project.\n\nRight now, we have a crash spiking because we're reloading the same cell multiple times. Each time `IGListDiff(...)` returns a pair of insert/delete for the same index (lets say 0). Once these updates are merge together, they look like this:\n```\nItem inserts = 0, 0\nItem deletes = 0, 0\n```\nWe dedupe deletes in `IGListBatchUpdateData`, but don't do anything for inserts, so it looks liket this:\n\n```\nItem inserts = 0, 0\nItem deletes = 0\n```\n\nSo we create an insert/delete unbalance and can crash. Tbh, not sure how this hasn't been a bigger issue in the past.\n\nD21822502 tried to remove all duplicate inserts, but that caused other types of crashes, because multiple inserts are allowed.\n\n## This diff\n\n* Lets keep the net insert/delete count the same by keeping track of the number of deletes we remove and apply the same to inserts.\n* Add some tests\n* Add an experiment flag to kill this if needed to be safe. IG only: Note that I'm making the default true because the crash is happening pretty at start-up.\n\n## Follow up\n\nOver time, the batch update clean up logic was slowly added to multiple place (IGListBatchUpdateData, IGListAdapterUpdaterHelpers, IGListIndexPathResult), which is making it hard to follow. A first step would be to move it in 1 or 2 places and avoid redundant logic (like getting unique deletes). However, the real fix is getting rid of batch updates all together.\n\nDifferential Revision: D61719884\n\nfbshipit-source-id: eda7c264c8239a6a106dbe0256fe777b38fae335","shortMessageHtmlLink":"fix crash when reloading the same cell index multiple times"}},{"before":"a28d835b739af5136841622854b276d07cda7852","after":"bcd8b078cbb448ed1e712aa03ec7cd56007a9709","ref":"refs/heads/main","pushedAt":"2024-08-21T21:45:36.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":"Updates IGGiftsFeed to strict concurrency checks\n\nSummary: Had to do a preconcurrency import because `gIGRootViewController` is declared as a static var which doesn't work with concurrency checks since it's considered mutable shared state. Will update once I find a better solution.\n\nReviewed By: ale-sisto\n\nDifferential Revision: D61615924\n\nfbshipit-source-id: 2352d488ae18813aae22e341ace97edab4c1c4ef","shortMessageHtmlLink":"Updates IGGiftsFeed to strict concurrency checks"}},{"before":"0e2db06bdda0edfca29eed201dfa97b0568ffec2","after":"a28d835b739af5136841622854b276d07cda7852","ref":"refs/heads/main","pushedAt":"2024-08-07T19:48:31.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":"Mark IGListAdapter, IGListSectionController and IGListBindable as a NS_SWIFT_UI_ACTOR\n\nSummary: In order to be ready for Swift 6 and strict concurrency checking, we will mark IGListAdapter, IGListSectionController and IGListBindable as a NS_SWIFT_UI_ACTOR so that swift code that is isolated to the main actor can interact with these instances without needing to wrap in a separate Task or MainActor.run command\n\nDifferential Revision: D60775816\n\nfbshipit-source-id: 24424bc625d577a1b237207bec29ccec7ef90e82","shortMessageHtmlLink":"Mark IGListAdapter, IGListSectionController and IGListBindable as a N…"}},{"before":"c1c8f5acaedf1fd4b0a47d24c5c0a779b4ba897d","after":"0e2db06bdda0edfca29eed201dfa97b0568ffec2","ref":"refs/heads/main","pushedAt":"2024-08-06T18:41: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":"fix coalesce interval\n\nSummary: The delay should be using the `_coalescenceInterval` before it gets updated by `intervalIncrement`\n\nDifferential Revision: D60834604\n\nfbshipit-source-id: 1bf18725a302843c12b50711f0628493c4a04e61","shortMessageHtmlLink":"fix coalesce interval"}},{"before":"6c2cfcf6c71666d27b455b3d7765c562f9185be8","after":"c1c8f5acaedf1fd4b0a47d24c5c0a779b4ba897d","ref":"refs/heads/main","pushedAt":"2024-08-06T15:24:20.000Z","pushType":"push","commitsCount":12,"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 xcodeproj and example projects\n\nSummary:\n* Added files to project\n* Ran `bash scripts/generate_spm_sources_layout.sh`\n\nDifferential Revision: D60807688\n\nfbshipit-source-id: 509aeb06a294d085f2864dc89105daf5d50796ca","shortMessageHtmlLink":"update xcodeproj and example projects"}},{"before":"ce748889e6524e4b232de0849f87d99344c1b4b7","after":"6c2cfcf6c71666d27b455b3d7765c562f9185be8","ref":"refs/heads/main","pushedAt":"2024-07-24T21:17:29.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":"clean up IGListExperimentKeepPointerToCollectionViewDataSource\n\nSummary: QE launched and reduced crashes, so lets clean up\n\nDifferential Revision: D60184705\n\nfbshipit-source-id: 574b0228e3efadf7bd3bd0677a4373a3b95888d1","shortMessageHtmlLink":"clean up IGListExperimentKeepPointerToCollectionViewDataSource"}},{"before":"20529197017307d95a6bca890f422bfc17fcd37f","after":"ce748889e6524e4b232de0849f87d99344c1b4b7","ref":"refs/heads/main","pushedAt":"2024-07-03T17:20:30.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 `swift_strict_concurrency` for 4 `igd_media_ios` targets\n\nSummary:\nUpdate targets:\n```\n//fbobjc/Apps/Instagram/Features/Direct/IGDirectEphemeralKit:IGDirectEphemeralKit\n//fbobjc/Apps/Instagram/Features/Direct/IGDirectToPublic:IGDirectToPublic\n//fbobjc/Apps/Instagram/Features/Direct/IGDirectVisualMessageActivity:IGDirectVisualMessageActivity\n//fbobjc/Apps/Instagram/Features/Direct/IGDirectVisualMessageViewerKit:IGDirectVisualMessageViewerSession\n```\n\nDifferential Revision: D59322622\n\nfbshipit-source-id: 3acf5f7bdfdd313e33e3acf4137f29e823816bb9","shortMessageHtmlLink":"Update swift_strict_concurrency for 4 igd_media_ios targets"}},{"before":"baf38ea4d438ef3cc6c6deb8615e1910e03f02bb","after":"20529197017307d95a6bca890f422bfc17fcd37f","ref":"refs/heads/main","pushedAt":"2024-06-04T14:58:41.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 README with new version number\n\nSummary: Now that v5.0.0 has officially been pushed to CocoaPods, we can officially update the README with the new version numbers. 🎉\n\nDifferential Revision: D58096617\n\nfbshipit-source-id: 77c2d9363f1cd06d02fe77798d4447f148a5b049","shortMessageHtmlLink":"Update README with new version number"}},{"before":"36da20119ca70c0a8b46ef0acc93b3bcb5a9ea69","after":"baf38ea4d438ef3cc6c6deb8615e1910e03f02bb","ref":"refs/heads/stable","pushedAt":"2024-05-13T07:04:35.000Z","pushType":"push","commitsCount":259,"pusher":{"login":"TimOliver","name":"Tim Oliver","path":"/TimOliver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/429119?s=80&v=4"},"commit":{"message":"Bump library version to 5.0.0\n\nSummary: Updates the version of IGListKit in its Info.plist file to 5.0.0\n\nReviewed By: lorixx\n\nDifferential Revision: D57265035\n\nfbshipit-source-id: 5adb37d4230a8bc6e07f2f2016904258acfb08b5","shortMessageHtmlLink":"Bump library version to 5.0.0"}},{"before":"6a521eaf60f6fa327e31c74ecc6bc25f58bad932","after":"baf38ea4d438ef3cc6c6deb8615e1910e03f02bb","ref":"refs/heads/main","pushedAt":"2024-05-13T06:42:52.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":"Bump library version to 5.0.0\n\nSummary: Updates the version of IGListKit in its Info.plist file to 5.0.0\n\nReviewed By: lorixx\n\nDifferential Revision: D57265035\n\nfbshipit-source-id: 5adb37d4230a8bc6e07f2f2016904258acfb08b5","shortMessageHtmlLink":"Bump library version to 5.0.0"}},{"before":"26cc95665ec5ce0a1a5540f502201ee97e31173f","after":"6a521eaf60f6fa327e31c74ecc6bc25f58bad932","ref":"refs/heads/main","pushedAt":"2024-05-13T04:17:50.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":"Regenerate IGListKit documentation via jazzy\n\nSummary: Regenerated the IGListKit documentation via jazzy.\n\nReviewed By: fabiomassimo\n\nDifferential Revision: D57263196\n\nfbshipit-source-id: 1a649e29a4bfa0d12fa81d00f96ea9264a68f013","shortMessageHtmlLink":"Regenerate IGListKit documentation via jazzy"}},{"before":"011650b77f38ae0675e2f71b9ac5a539451198e8","after":"26cc95665ec5ce0a1a5540f502201ee97e31173f","ref":"refs/heads/main","pushedAt":"2024-05-08T14:40: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":"Update example app icon with latest IG branding\n\nSummary:\nUpdates the app icon for the IGListKit iOS example app with a more modern look to reflect Instagram's style refresh in 2022.\n\n- The shape of the bars are rounded with Apple's superellipse style and the radius is adjusted to match the curvature of the app icon itself.\n- The bars now show the official Instagram 5-color gradient pattern that was released as part of the 2022 brand refresh.\n\nDifferential Revision: D56872824\n\nfbshipit-source-id: c811754b6787d2bd15eee53b12eaa61d6cdaf367","shortMessageHtmlLink":"Update example app icon with latest IG branding"}},{"before":"f4221a665718a147d1600082f794b9b31dddfdc3","after":"011650b77f38ae0675e2f71b9ac5a539451198e8","ref":"refs/heads/main","pushedAt":"2024-05-08T14:35: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":"Add new dark/light mode compatible logo\n\nSummary:\nI'm looking at updating the IGListKit logo with a more brand-appropriate variant, that also works more nicely in both the light and dark mode themes on GitHub.\n\nThis diff only adds the logo to the codebase, which will make it easier for me to add and style it in the README in a subsequent diff once it's landed.\n\nThis logo is by no means set in stone, so if anyone else has any feedback for it, or would like to propose anything else, I'm totally open. Thanks!\n\nDifferential Revision: D56996027\n\nfbshipit-source-id: c2f7170a9aca39f5c2ccbcd897bbe1801624c4c1","shortMessageHtmlLink":"Add new dark/light mode compatible logo"}},{"before":"cff863b0b66e684d7a1666903cacf6ca105f802c","after":"f4221a665718a147d1600082f794b9b31dddfdc3","ref":"refs/heads/main","pushedAt":"2024-05-02T18:32: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":"Mark a few protocols with NS_SWIFT_UI_ACTOR to avoid concurrency errors\n\nSummary:\n## Context\nWe are building native prototype for the GenAI native intent proposal that's being currently reviewd by MZ. Current version is meant for internal dogfooding but pending proper plan for the public rollout\n\nThis stack is intentionally cutting some corners from the [original figma spec](https://www.figma.com/file/JuCEe2ppgOHCtljPdiuGZ5/Meta-AI-Imagine-%E2%80%94-FoA-alignment-%E2%80%94-MZ-Deck-%E2%80%94-V3?type=design&node-id=107-35979&mode=design&t=hvEAmIjKvjB3xvyC-0) in favour of getting this into the hands of stakeholders sooner\n\n## This diff\nMakign this into a separate diff in case I will need to update codebase to match this declaration (or revert 🙂)\n\nReviewed By: corywilhite\n\nDifferential Revision: D56825302\n\nfbshipit-source-id: 49ff96f546d2be0dc3b371a4c7bf48841ad72425","shortMessageHtmlLink":"Mark a few protocols with NS_SWIFT_UI_ACTOR to avoid concurrency errors"}},{"before":"63d41afe243a1dca731d5861c812786a06bfd58e","after":"cff863b0b66e684d7a1666903cacf6ca105f802c","ref":"refs/heads/main","pushedAt":"2024-05-02T15:28:22.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 assert when missing a reuseIdentifier\n\nSummary: A cell without a reuseIdentifier will crash, but it'll be hard to debug which section-controller did it. Lets add an assert\n\nDifferential Revision: D56883578\n\nfbshipit-source-id: 2f5a27d5f0a73f263eb58a14114edd607095cd4d","shortMessageHtmlLink":"add assert when missing a reuseIdentifier"}},{"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"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEoqG9gwA","startCursor":null,"endCursor":null}},"title":"Activity · Instagram/IGListKit"}