• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Instagram / IGListKit
99%
master: 100%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Repo Added 21 Oct 2016 02:35PM UTC
Files 54
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH main
branch: main
CHANGE BRANCH
x
Reset
  • main
  • 2.0.0
  • 2.1.0
  • 3.0.0
  • 3.1.0
  • 3.1.1
  • API-to-get-visible-indexes
  • add-checklist
  • animated-update
  • auto-diff
  • auto-diff1
  • automation-travis
  • aviral/1220
  • background-diff
  • bad-update
  • base-test
  • bdotdub-file-header-template-whitespace
  • binding-guide
  • build-on-device
  • category-linking
  • center
  • changelog
  • changelog-fixes
  • changelog-fixup
  • changelog-tbd
  • chore/dangerfile_noise
  • cleanup-layout
  • collection-view-layout-precision
  • collectionview-reuse
  • compiler
  • config
  • coverall
  • danger
  • danger-init
  • debug-dump
  • defer-invalidate
  • dep-demo
  • deprecate-IGListStackedSectionController
  • deprecate-pods
  • deselect
  • disable-9_3-tests
  • display-delegate
  • display-suppl
  • docs
  • docs-patch
  • docs-update
  • documentation-updates
  • double-inserts
  • double-reload
  • embed-crash
  • equal-guide
  • equality-guide-update
  • export-D15590354
  • export-D18064465
  • export-D18114249
  • export-D18249291
  • export-D18449843
  • export-D18594370
  • export-D18638528
  • faq
  • feature/support-for-context-menu
  • feb26-release
  • fix-BindSectionController-updates-not-invalidating-layouts
  • fix-build
  • fix-cocoapods
  • fix-danger
  • fix-diff
  • fix-docs-broken-image-links
  • fix-duplicate-public-headers
  • fix-examples
  • fix-github-ci
  • fix-headers
  • fix-ig-assertion
  • fix-iglistbindingsectioncontroller-generics
  • fix-links
  • fix-logic-error-of-layout-invalidation
  • fix-readme-links
  • fix-scrollToObject
  • fix-swift-package
  • fix-tv
  • fix-user-github
  • fix_layout_invalidation_659
  • gen-docs
  • guide-cleanup
  • guides-setup
  • iOS11Patch
  • improve-coverage
  • index-for-cell-nil
  • initial-faq-guide
  • instagram-clone-demo-app
  • ios11-examples
  • ios11-pod-warnings
  • ipad-ci-update
  • issue-1219
  • issue-1223
  • jessesquires-patch-1
  • jessesquires-patch-2
  • layout
  • layout-2
  • layout-fit
  • less-layout
  • lolwut-dafuck
  • master
  • migration-3
  • migration-format
  • miss-delegate
  • move-items
  • move-section-index-to-property
  • move-uicv-out-of-list-adapter
  • moves-deleted
  • multiple-delete
  • negative-sizes
  • new-generate-code
  • new-world
  • newline
  • nit-tests
  • objc-fixup
  • optional-crash
  • organize
  • patch-1
  • patch-2
  • path-description
  • pr-1284-cleanup
  • project-fixups
  • protocol-gone-readme
  • protocolize-list-view
  • rawlinxx-master
  • readme-refine
  • readme-tweaks
  • readme_starter_tasks
  • refine-changelog
  • refine-demo-apps
  • regen-docs
  • relax_swiftlint
  • release-2.1.0
  • release-2.x
  • release-4.0-tableview-support
  • reload-bug
  • reload-tests
  • remove-lint
  • remove___IPHONE_11_0
  • remove_intercepted_duplicate_seletor
  • remove_ios8_system_version
  • remove_unused_headers
  • remove_useless_system_version
  • retain-cycle
  • scroll-bottom-inset
  • section-index-reset-on-adapter-dealloc
  • simpler-travis
  • slather-exclude
  • small-refactoring
  • stable
  • stack-demo
  • stack-offset
  • stacked-working
  • supplementary-example
  • support_catalyst
  • suppress-travis-warning
  • swift-refinements
  • swift4
  • test-coverage
  • test-cycle
  • tests
  • tracking
  • travis
  • travis-omfg
  • travis-patch
  • travis-update
  • tvOS-support
  • tvOS-tests
  • tvos-tests
  • ui-tests
  • uicv-dump
  • unbreak
  • unused
  • update-background-diffing-queue-priority
  • update-changelog
  • update-crash
  • update-docs
  • update-issue-template
  • update-travis
  • update-versions
  • updater-tests
  • upgrade-cocoapods
  • use-cocoapods-cdn
  • vision
  • weak-uicv

29 May 2026 12:18AM UTC coverage: 98.752% (-0.06%) from 98.816%
26610259200

push

github

meta-codesync[bot]
Add IGListExperimentSkipNilIndexPathFiltering to opt into nil-index-path-aware visible cell filtering

Summary:
There's a subtle bug in `-[IGListAdapter visibleCellsForSectionController:]` and `-[IGListAdapter fullyVisibleCellsForSectionController:]`... both methods filter `[collectionView visibleCells]` by `[collectionView indexPathForCell:cell].section == section`, but `indexPathForCell:` is allowed to return `nil` for cells in transitional states — mid-`prepareForReuse`, mid-detach during a `performBatchUpdates`, or in flight between dequeue and final attachment. When that happens, sending `-section` to a `nil` `NSIndexPath` returns `0` in Objective-C, so any visible cell with a cleared index path is silently treated as belonging to **section 0**.

For most consumers this is harmless or invisible. But callers that walk these results and then read layout / window-relative geometry from each returned cell can end up touching cells whose model has been swapped out. We've seen this surface as crashes when a consumer triggers a layout pass on a cell whose backing data is mid-replacement (for example, text typesetting on an `NSAttributedString` that's being swapped out as the cell prepares for reuse). It's also a logical correctness issue: section 0 is the only section that can ever observe transitional cells from other sections leaking in.

The fix itself is essentially one line: skip cells where `indexPathForCell:` returned `nil` before doing the section comparison. The interesting question is how to roll it out.

Given how far-reaching this could be for code depending on IGListKit, I've introduced this as an opt-in experiment so we can effectively test this in Instagram and Threads before iterating or making an informed decision.

The fix is strictly subtractive — it can only narrow the result set, never expand it. Most consumers will just get more correct results. But these methods are called from a wide variety of places across multiple apps that de... (continued)

10 of 10 new or added lines in 1 file covered. (100.0%)

11 existing lines in 1 file now uncovered.

4512 of 4569 relevant lines covered (98.75%)

703.73 hits per line

Relevant lines Covered
Build:
Build:
4569 RELEVANT LINES 4512 COVERED LINES
703.73 HITS PER LINE
Source Files on main
  • Tree
  • List 54
  • Changed 4
  • Source Changed 0
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
26610259200 main Add IGListExperimentSkipNilIndexPathFiltering to opt into nil-index-path-aware visible cell filtering Summary: There's a subtle bug in `-[IGListAdapter visibleCellsForSectionController:]` and `-[IGListAdapter fullyVisibleCellsForSectionController... push 29 May 2026 12:26AM UTC meta-codesync[bot] github
98.75
25713764463 main De-genericize IGListBindingSectionController for Swift migration Summary: ## Plan This module doesn't need A/B testing and will be migrated directly. ## This Diff Removes the `__covariant ObjectType : id<IGListDiffable>` lightweight generic type... push 12 May 2026 04:44AM UTC meta-codesync[bot] github
98.82
25202427585 main Fix heap corruption crash from concurrent array mutation during diff (#1578) Summary: Fixes https://github.com/Instagram/IGListKit/issues/1578 Callers of `IGListDiff`/`IGListDiffPaths` may pass `NSMutableArray` instances backed by collections th... push 01 May 2026 04:41AM UTC meta-codesync[bot] github
98.82
24539907142 main Replace IGFailAssert with NSLog for delegate recursion checks Summary: The delegate recursion protection code (for GitHub issue #1658) uses IGFailAssert to warn about invalid delegate configurations. However, IGFailAssert is defined as NSCAssert ... push 16 Apr 2026 11:51PM UTC meta-codesync[bot] github
98.82
22090533742 main Refine Demo Apps for iOS 26 (#1655) Summary: ## Changes in this pull request I went through and improved some of the demo apps UI to look a bit cleaner on iOS 26. ### Checklist - [x] All tests pass. Demo project builds and runs. - [x] I added ... push 17 Feb 2026 08:08AM UTC meta-codesync[bot] github
98.81
22090353914 main Updated the IGListKit docs to v5.2.0 (#1656) Summary: ## Changes in this pull request Updates the IGListKit docs to the latest API spec in v5.2.0 ### Checklist - [x] All tests pass. Demo project builds and runs. - [x] I added tests, an experim... push 17 Feb 2026 08:02AM UTC meta-codesync[bot] github
98.81
21429050053 main Bring Test Coverage back to > 99% (#1654) Summary: ## Changes in this pull request It's been a few years since I did an audit of our test suite. The majority of changes to IGListKit since then were adding additional error checking and hardening,... push 28 Jan 2026 07:30AM UTC meta-codesync[bot] github
98.77
21417204291 main Replaced FBReportMustFix with IGFailAssert (#1653) Summary: ## Changes in this pull request `FBReportMustFix` isn't recognized by the public version of IGListKit. It is wrapped by `IGFailAssert` to abstract error tracking between the public and ... push 27 Jan 2026 10:52PM UTC meta-codesync[bot] github
95.73
21085207139 main Run 'facebook-bad-const-placement-check fbtidy' linter on fbobjc via arc cast Reviewed By: Daij-Djan Differential Revision: D90872770 fbshipit-source-id: 7a13ea11c push 17 Jan 2026 12:38AM UTC meta-codesync[bot] github
95.79
20972428095 main improve assert details in IGListAdapter+UICollectionView Summary: These asserts could be very helpful to debug tricky crashes, but they don't tell us enough about which object/section-controller are returning invalid data. The backtrace itself do... push 13 Jan 2026 09:05PM UTC meta-codesync[bot] github
95.79
See All Builds (1622)
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc