9 August 2021
Follow @dnkoutsoCocoaPods 1.11 raises the minimum Ruby version to 2.6 while adding support for Ruby 3.0. It also adds support for 'On Demand Resources' and contains numerous bug fixes and improvements!
Ruby 2.6 and Ruby 3.0
With the release of 1.11, the minimum version of Ruby required to run CocoaPods is now 2.6. By doing so, we were also able to bump a few other dependencies (such as ActiveSupport and Addressable) that were often colliding with other setups. We hope this unblocks developers and makes CocoaPods a bit more flexible.
Ruby 3.0 is also now supported and is part of CocoaPods CI going forward! This will ensure new changes and fixes are always tested and verified against Ruby 3.0 before they are merged.
On Demand Resources
In a nutshell, On Demand Resources allow developers to ship smaller app bundles by downloading assets on-demand instead of pre-shipping them.
With CocoaPods 1.11, pod authors may now specify a set of resources to be integrated as on demand resources for a given application.
Here's an example podspec
that uses the new on_demand_resources
DSL:
Pod::Spec.new do |spec|
spec.name = 'MyGameAssets'
spec.version = '1.0'
# ... rest of root spec entries go here
spec.on_demand_resources = {
'level1_assets' => ['level1/**/*.png'],
'level2_assets' => ['level2/**/*.png']
}
end
Each key specifies a tag and each value is a glob for the paths to include.
Note: On demand resource paths specified within
on_demand_resources
are not required to be also specified withinresources
DSL orresource_bundle
DSL.
All on demand resources specified will be automatically integrated to the user's targets project and CocoaPods 1.11 will take care of updating all known asset tags of the user's project.
For example, give the following Podfile
:
target 'MyGameApp' do
pod 'MyGameAssets'
end
The on_demand_resources
specified within the MyGameAssets.podspec
will be integrated and added to the MyGameApp
target!
Other Notable Enhancements
The following DSL options have been added or expanded to serve different use-cases:
project_header_files
DSL: Pod authors may now specific a set ofproject_header_files
that are part of their pod. This helps designate specific headers that are meant to be used only by the pod itself. When the library is built, these headers will not appear in the build directory.New
script_phase
execution positions: Thescript_phase
DSL has been extended to acceptbefore_headers
andafter_headers
option for theexecution_position
. This is useful when a script phase must be executed before or after the "Copy Headers" phase.pre_integrate_hook
DSL: Similar to thepost_integrate_hook
DSL added in version 1.10, this new hook will be executed before the user's project is integrated with the generated Pods project.
Xcode 13 Support
A new version of the Xcodeproj
gem has shipped that adds initial support for Xcode 13 projects. To update, run gem update xcodeproj
or if you are using Bundler then run bundle update xcodeproj
instead.
CocoaPods 1.11 by default includes the latest version of the Xcodeproj
gem allowing it to work with Xcode 13 right out of the box.
That's it!
What's Next
Like any other open source project, CocoaPods is maintained and improved by a handful of folks on their spare time. There is no official roadmap and new features will depend upon the community's appetite to build them! We welcome new contributors and assistance from anyone who wants to improve CocoaPods!
We believe that CocoaPods continues to play a significant role for iOS development. It has particularly found strong footing in alternative mobile frameworks such as React Native, Flutter and Kotlin Multiplatform and we hope this release provides pod authors and iOS developers with more powerful tools and features.
As always, we would like to thank all of our contributors who helped make this release happen!
Checkout the changelog to see the full list of changes.