Skip to content

Remove CocoaPods and run CI on Xcode 27 - #288

Merged
lucdion merged 9 commits into
masterfrom
chore/remove-cocoapods
Nov 4, 2026
Merged

lucdion merged 9 commits into
masterfrom
chore/remove-cocoapods

Conversation

@OhKanghoon

@OhKanghoon OhKanghoon commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

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

  • Remove Podfile, Podfile.lock, and FlexLayout.podspec.
  • Remove FlexLayout.xcodeproj, FlexLayout.xcworkspace, and Example/cocoapods. They could only get Yoga through CocoaPods. The library is now built and tested from Package.swift, whose test target uses the same 6 test files.
  • Drop Carthage support as well, since its setup required running pod install in the checkout.
  • fastlane
    • tests: run scan on the FlexLayout-Package scheme. result_bundle: true is required for scan to find the test results of a Swift package.
    • build: build the FlexLayout package scheme and the SPM example app in Release.
    • Remove the install lane.
    • deploy: no longer bumps the podspec or runs pod_push. The version is now passed explicitly: fastlane deploy version:x.y.z.
  • SwiftLint used to run from Pods/SwiftLint. fastlane and the SPM example's "Run Swiftlint" build phase now use swiftlint from PATH. The build phase only prints a warning when SwiftLint is not installed.

Run CI on Xcode 27

  • Xcode 27 is only available on the xcode-27 runner image (GA since 2026-10-15), not on macos-26 or macos-latest. CI now runs on xcode-27.
  • Select Xcode 27.2 with a job-level DEVELOPER_DIR (/Applications/Xcode_27.2.app/Contents/Developer) instead of sudo xcode-select, as many major Swift libraries do (e.g. Alamofire, Nimble, SwiftLint). It needs no sudo or third-party action.
  • Arm64 runner images don't ship SwiftLint, so CI installs it with Homebrew.
  • Xcode 27 rejects iOS deployment targets below 15.0, so the SPM example app's deployment target is raised to iOS 15. The library's minimum deployment target (iOS 13 in Package.swift) is unchanged.
  • Update actions/checkout from v2 to v7.
  • Avoid duplicate CI runs. push now only triggers on master, so a PR runs CI once through pull_request instead of twice (push + pull_request). A concurrency group per PR cancels the in-progress run when new commits are pushed. Runs on master are not cancelled.

Docs

  • README: replace the CocoaPods and Carthage badges with release and SPM badges, remove the CocoaPods and Carthage installation sections, and note that versions up to 2.2.3 remain available on CocoaPods trunk.
  • Fix the SPM installation snippet. from: "1.3.18" only resolves 1.x versions, so it now uses from: "2.2.3".
  • Update docs_markdown/examples.md and docs_markdown/contributing.md for SPM.

Test

Ran fastlane travis locally with Xcode 27.2 (27B52):

  • 71 tests passed on the FlexLayout-Package scheme (iPhone 17 simulator).
  • SwiftLint, the FlexLayout Release build, and the FlexLayoutSample-SPM Release build succeeded.

CI on this PR passes on the xcode-27 runner. Since this branch only triggers pull_request runs now, each push runs CI once.

Notes

  • /Applications/Xcode_27.2.app currently points to the Xcode 27.2 RC build (27B48) on the xcode-27 image. An image update to the 27.2 release build is pending. The path is a symlink, so it keeps working after the update.
  • Pushes to branches without a PR no longer run CI.
  • The Pods/ and Carthage entries in .gitignore and .swiftlint.yml are kept on purpose, so that leftover local Pods/ or Carthage/ directories are not committed or linted.

@OhKanghoon
OhKanghoon requested review from heoblitz and lucdion and removed request for heoblitz November 4, 2026 03:12
@OhKanghoon
OhKanghoon force-pushed the chore/remove-cocoapods branch from ee9b5e2 to e81bd2a Compare November 4, 2026 03:15
@OhKanghoon
OhKanghoon requested review from heoblitz and a balanced review from Copilot November 4, 2026 03:18

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 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 file
  • FlexLayout.xcodeproj/project.xcworkspace/contents.xcworkspacedata: Generated file
  • FlexLayout.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

@OhKanghoon

Copy link
Copy Markdown
Collaborator Author

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!

@OhKanghoon OhKanghoon assigned Copilot and OhKanghoon and unassigned Copilot Nov 4, 2026
@OhKanghoon
OhKanghoon force-pushed the chore/remove-cocoapods branch from dce6f72 to 886c4df Compare November 4, 2026 15:21

@lucdion lucdion left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@lucdion
lucdion merged commit b04a0b5 into master Nov 4, 2026
1 of 2 checks passed
@lucdion

lucdion commented Nov 4, 2026

Copy link
Copy Markdown
Member

Hi @OhKanghoon, I have merged the PR, but the next time you'll be able to merge them, you have now new permissions. Thanks

@OhKanghoon
OhKanghoon deleted the chore/remove-cocoapods branch November 5, 2026 08:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants