Repository navigation
Remove CocoaPods and run CI on Xcode 27 - #288
Conversation
ee9b5e2 to
e81bd2a
Compare
There was a problem hiding this comment.
🟢 Approval recommended
No active review issues are recorded for the SPM-only migration.
No open issues 🎉
3 files not reviewed
Example/cocoapods/FlexLayoutSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: Generated fileFlexLayout.xcodeproj/project.xcworkspace/contents.xcworkspacedata: Generated fileFlexLayout.xcworkspace/contents.xcworkspacedata: Generated file
What changed in this PR
This PR makes Swift Package Manager the sole build, test, and distribution path for FlexLayout, removing CocoaPods-dependent projects and Carthage support while updating CI for Xcode 27.
Changes:
- Remove CocoaPods configuration, legacy Xcode projects, and workspace metadata.
- Migrate fastlane to package schemes and explicit release versions; update CI and the SPM example’s SwiftLint setup.
- Update installation, example, and contribution documentation for SPM-only workflows.
| File | Description |
|---|---|
README.md |
Update badges and installation guidance for SPM-only distribution. |
Podfile.lock |
Remove the CocoaPods dependency lockfile. |
Podfile |
Remove CocoaPods dependency configuration. |
FlexLayout.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist |
Remove obsolete workspace checks. |
FlexLayout.xcworkspace/contents.xcworkspacedata |
Remove the CocoaPods-based workspace. |
FlexLayout.xcodeproj/xcuserdata/dionlu.xcuserdatad/xcschemes/xcschememanagement.plist |
Remove legacy user scheme settings. |
FlexLayout.xcodeproj/xcshareddata/xcschemes/FlexLayoutInner.xcscheme |
Remove the legacy library and test scheme. |
FlexLayout.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist |
Remove legacy project workspace checks. |
FlexLayout.xcodeproj/project.xcworkspace/xcshareddata/FlexLayout.xcscmblueprint |
Remove legacy source-control metadata. |
FlexLayout.xcodeproj/project.xcworkspace/contents.xcworkspacedata |
Remove the legacy project’s internal workspace. |
FlexLayout.xcodeproj/project.pbxproj |
Remove CocoaPods-dependent library and test targets. |
FlexLayout.podspec |
Remove the CocoaPods publishing specification. |
fastlane/Fastfile |
Use package builds and tests; remove CocoaPods setup and publishing. |
Example/SPM/FlexLayoutSample-SPM.xcodeproj/project.pbxproj |
Use SwiftLint from PATH and raise the example’s minimum iOS version to 15. |
Example/cocoapods/FlexLayoutSample.xcodeproj/xcshareddata/xcschemes/FlexLayoutSample.xcscheme |
Remove the CocoaPods example scheme. |
Example/cocoapods/FlexLayoutSample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist |
Remove CocoaPods example workspace checks. |
Example/cocoapods/FlexLayoutSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata |
Remove the CocoaPods example’s internal workspace. |
Example/cocoapods/FlexLayoutSample.xcodeproj/project.pbxproj |
Remove the CocoaPods example project. |
docs_markdown/examples.md |
Retain only SPM example instructions. |
docs_markdown/contributing.md |
Document package-based testing in Xcode and the command line. |
.gitignore |
Remove an obsolete project-specific ignore entry. |
.github/workflows/github-actions-ci.yml |
Select Xcode 27.2, upgrade checkout, and install SwiftLint with Homebrew. |
Review effort: Balanced
|
Hi @lucdion, could you review this PR and merge it if everything looks good? I have maintainer access, but I currently can't merge PRs myself. Once we move to Swift Package Manager only, releases can be managed within GitHub through version tags and GitHub Releases, without a separate CocoaPods publishing step. Would you be open to expanding maintainer permissions to include merging PRs and managing releases? I'd be happy to help with both so we can share more of the ongoing maintenance work. Thanks! |
dce6f72 to
886c4df
Compare
|
Hi @OhKanghoon, I have merged the PR, but the next time you'll be able to merge them, you have now new permissions. Thanks |
Summary
CocoaPods trunk is becoming read-only (CocoaPods Trunk Read-only Plan: a test run on November 2-6, 2026, then permanently read-only on December 2, 2026).
This PR removes the CocoaPods setup and makes Swift Package Manager the only way to build, test, and distribute FlexLayout. It also moves CI to Xcode 27.
Changes
Remove CocoaPods
Podfile,Podfile.lock, andFlexLayout.podspec.FlexLayout.xcodeproj,FlexLayout.xcworkspace, andExample/cocoapods. They could only get Yoga through CocoaPods. The library is now built and tested fromPackage.swift, whose test target uses the same 6 test files.pod installin the checkout.tests: runscanon theFlexLayout-Packagescheme.result_bundle: trueis required forscanto find the test results of a Swift package.build: build theFlexLayoutpackage scheme and the SPM example app in Release.installlane.deploy: no longer bumps the podspec or runspod_push. The version is now passed explicitly:fastlane deploy version:x.y.z.Pods/SwiftLint. fastlane and the SPM example's "Run Swiftlint" build phase now useswiftlintfromPATH. The build phase only prints a warning when SwiftLint is not installed.Run CI on Xcode 27
xcode-27runner image (GA since 2026-10-15), not onmacos-26ormacos-latest. CI now runs onxcode-27.DEVELOPER_DIR(/Applications/Xcode_27.2.app/Contents/Developer) instead ofsudo xcode-select, as many major Swift libraries do (e.g. Alamofire, Nimble, SwiftLint). It needs nosudoor third-party action.Package.swift) is unchanged.actions/checkoutfrom v2 to v7.pushnow only triggers onmaster, so a PR runs CI once throughpull_requestinstead of twice (push+pull_request). Aconcurrencygroup per PR cancels the in-progress run when new commits are pushed. Runs onmasterare not cancelled.Docs
from: "1.3.18"only resolves 1.x versions, so it now usesfrom: "2.2.3".docs_markdown/examples.mdanddocs_markdown/contributing.mdfor SPM.Test
Ran
fastlane travislocally with Xcode 27.2 (27B52):FlexLayout-Packagescheme (iPhone 17 simulator).FlexLayoutRelease build, and theFlexLayoutSample-SPMRelease build succeeded.CI on this PR passes on the
xcode-27runner. Since this branch only triggerspull_requestruns now, each push runs CI once.Notes
/Applications/Xcode_27.2.appcurrently points to the Xcode 27.2 RC build (27B48) on thexcode-27image. An image update to the 27.2 release build is pending. The path is a symlink, so it keeps working after the update.Pods/and Carthage entries in.gitignoreand.swiftlint.ymlare kept on purpose, so that leftover localPods/orCarthage/directories are not committed or linted.