2019-12-19 17:32:49 +00:00
|
|
|
/*
|
2023-04-06 09:44:16 +00:00
|
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
2019-12-19 17:32:49 +00:00
|
|
|
*
|
|
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
2016-10-25 22:17:45 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
import IGListKit
|
2018-01-22 20:01:53 +00:00
|
|
|
import UIKit
|
2016-10-25 22:17:45 +00:00
|
|
|
|
Improve SwiftPM support (#1546)
Summary:
This diff imports and refines the PR made by cntrump on GitHub.
The PR introduces the following:
* Sample apps now use SPM instead of CocoaPods to import IGListKit.
* Adds Mac Catalyst as an example target.
* Adds C++ flags to the CocoaPods specs.
* Fixes a script issue that was discovered when regenerating the symlinks.
The PR originally aimed to remove the need for symlinked references to the IGListKit and IGListDiffKit source files, but in testing, I couldn't get it working. It's possible SPM being too strict [on where the headers can be placed to be discovered](https://forums.swift.org/t/how-do-i-specify-the-headers-directory-for-a-objc-target-in-swift-package-managers-package-swift/58531/3).
Additionally, another issue was that the original PR changed all of the `#import` statements to the the modular `import` statements, which is fine for the sample apps, but ended up breaking compatibility for any apps that had modules disabled.
## Changes in this pull request
Improve SwiftPM support:
Build module `IGListDiffKit` and `IGListKit` as Objective-C++.
module `IGListDiffKit`:
- Source/IGListDiffKit
- module defined in `Source/IGListDiffKit/modulemap/module.modulemap`
- requires `-fmodules` and `-fcxx-modules`
module `IGListKit`:
- depend on `IGListDiffKit`, use `import IGListDiffKit;`
- Source/IGListKit
- module defined in `Source/IGListKit/modulemap/module.modulemap`
- requires `-fmodules` and `-fcxx-modules`
module `IGListSwiftKit`:
- depend on `IGListKit`, use `import IGListKit`
- Source/IGListSwiftKit
Deleted `spm/` and `scripts/generate_spm_sources_layout.sh`, it is unnecessary.
Updated `.podspec`, add `'OTHER_CFLAGS' => '-fmodules'` and `'OTHER_CPLUSPLUSFLAGS' => '-fcxx-modules'`.
Add missing swift files for `IGListSwiftKit` in `IGListKit.xcodeproj`
### How to use
Replace `#import <IGListDiffKit/IGListDiffKit.h>` with `import IGListDiffKit;`, because `IGListDiffKit.h` isn't exist in `modulemap/`, Or create a symbol link by `ln -sf ../IGListDiffKit.h` for support it ?
### Examples
Use SwiftPM for building examples.
### Checklist
- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [ ] 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)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1546
Test Plan: Test PR showing running tests: https://github.com/TimOliver/IGListKit/actions/runs/4339956050/jobs/7578047058
Reviewed By: lorixx
Differential Revision: D33592395
Pulled By: TimOliver
fbshipit-source-id: 8f7b1873f2b1c6a80908bb55b123e31bea13bb0c
2023-03-07 07:29:41 +00:00
|
|
|
protocol StoryboardLabelSectionControllerDelegate: AnyObject {
|
2016-11-21 21:25:52 +00:00
|
|
|
func removeSectionControllerWantsRemoved(_ sectionController: StoryboardLabelSectionController)
|
|
|
|
|
}
|
|
|
|
|
|
Swift name annotations
Summary:
This adds `NS_SWIFT_NAME` annotations to all public API's to provide cleaner integration into Swift:
- Removes the need to prefix classes in Swift code, instead rely on Swift module name spacing
- Adds more argument labels to C function API's like `IGListDiff([], [], .equality)` => `ListDiff(oldArray: [], newArray: [], option: .equality)`
While this is a large API change it should be as easy as:
- Find and replace `(IGList)([^K])` to `List$2` in Xcode with a scope set to Swift
- Build and follow compiler's auto fix corrections for C API's or any missed renames
I have not updated the documentation to reflect this yet, I am totally willing to do so but before I sink that amount of time into it I wanted to see if the Instagram team is even open to this change!
- [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)
- [ ] I have updated the documentation
Closes https://github.com/Instagram/IGListKit/pull/593
Reviewed By: jessesquires
Differential Revision: D5028039
Pulled By: rnystrom
fbshipit-source-id: b473d874a1f9574e56b2ebaabd5b73d1b57d4bab
2017-05-09 21:29:52 +00:00
|
|
|
final class StoryboardLabelSectionController: ListSectionController {
|
2017-05-16 14:30:08 +00:00
|
|
|
|
2017-04-11 20:20:56 +00:00
|
|
|
private var object: Person?
|
2016-11-21 21:25:52 +00:00
|
|
|
weak var delegate: StoryboardLabelSectionControllerDelegate?
|
2017-05-16 14:30:08 +00:00
|
|
|
|
2017-04-19 15:17:56 +00:00
|
|
|
override func sizeForItem(at index: Int) -> CGSize {
|
2017-12-19 17:23:37 +00:00
|
|
|
return CGSize(width: (self.object?.name.count)! * 7, height: (self.object?.name.count)! * 7)
|
2016-10-25 22:17:45 +00:00
|
|
|
}
|
2017-05-16 14:30:08 +00:00
|
|
|
|
2017-04-19 15:17:56 +00:00
|
|
|
override func cellForItem(at index: Int) -> UICollectionViewCell {
|
2021-02-05 17:34:26 +00:00
|
|
|
let cell: StoryboardCell = collectionContext.dequeueReusableCellFromStoryboard(
|
|
|
|
|
withIdentifier: "cell",
|
|
|
|
|
for: self,
|
|
|
|
|
at: index)
|
2017-04-11 20:20:56 +00:00
|
|
|
cell.text = object?.name
|
2016-10-25 22:17:45 +00:00
|
|
|
return cell
|
|
|
|
|
}
|
2017-05-16 14:30:08 +00:00
|
|
|
|
2017-04-19 15:17:56 +00:00
|
|
|
override func didUpdate(to object: Any) {
|
2016-11-21 21:25:52 +00:00
|
|
|
self.object = object as? Person
|
2016-10-25 22:17:45 +00:00
|
|
|
}
|
2017-05-16 14:30:08 +00:00
|
|
|
|
2017-04-19 15:17:56 +00:00
|
|
|
override func didSelectItem(at index: Int) {
|
2016-11-21 21:25:52 +00:00
|
|
|
delegate?.removeSectionControllerWantsRemoved(self)
|
|
|
|
|
}
|
2017-05-16 14:30:08 +00:00
|
|
|
|
2016-10-25 22:17:45 +00:00
|
|
|
}
|