https://github.com/muukii/cocoapods-frost
📦 A plugin for CocoaPods that creates XCFramework(for internal distribution) for speeding up build time.
https://github.com/muukii/cocoapods-frost
binary cocoapods cocoapods-binary cocoapods-plugin pod xcframework
Last synced: 9 months ago
JSON representation
📦 A plugin for CocoaPods that creates XCFramework(for internal distribution) for speeding up build time.
- Host: GitHub
- URL: https://github.com/muukii/cocoapods-frost
- Owner: muukii
- License: mit
- Archived: true
- Created: 2022-01-28T10:59:28.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-02-04T17:43:58.000Z (over 4 years ago)
- Last Synced: 2024-10-27T15:49:37.823Z (over 1 year ago)
- Topics: binary, cocoapods, cocoapods-binary, cocoapods-plugin, pod, xcframework
- Language: Ruby
- Homepage:
- Size: 77.1 KB
- Stars: 27
- Watchers: 3
- Forks: 0
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# cocoapods-frost
A plugin for [CocoaPods](https://cocoapods.org/) that creates XCFramework(for internal distribution) for speeding up build time.
> 🚜 Still working on development, but partially works
**Alternatives**
- [coocapods-binary](https://github.com/leavez/cocoapods-binary)
- [PodBuilder](https://github.com/Subito-it/PodBuilder)
- [Rugby](https://github.com/swiftyfinch/Rugby)
## Support this project
If you are interested in this project or you need
- Hit the ⭐️ button to make this project popular.
- Becoming sponsorship in subscription or one-time.
## Features
- Supports static or dynamic by `use_frameworks! :linkage => :static`
- Supports coexisting in source code and frameworks
## known Issues
Managed in [issues](https://github.com/muukii/cocoapods-frost/issues)
- Supports only iOS currently
- some pods fails build
- especially, already provided as framework
- if you found such pod, please report it from [issues](https://github.com/muukii/cocoapods-frost/issues)
- Does not create xcframework for implicit dependencies from a pod
- Make it explicit using `frost_pod`.
- For instance, `frost_pod 'Alamofire'` for `frost_pod 'Moya'`
- Multiple specifying pods with `pod` and `frost_pod`
- Do not use `pod` and `frost_pod` in different target. Please use either one.
- Not inherited current install version in pod
- Specify install version (e.g. `pod 'some', "1.2.0"`)
- [Not supported yet building pod that has resource](https://github.com/muukii/cocoapods-frost/issues/7)
## Attention
- Should build all of targets when pod updated - partially building might causes linking error (compile-time or dynamic-linking-time)
- Future updates, completely isolated pods can be build partially.
## How it works
- Defines pod by `frost_pod` that creates XCFramework.
- Builds and creates XCFramework with `-allow-internal-distribution` from build settings CocoaPods generated.
- Generates a `podspec.json` that installs XCFramework as `vendored_frameworks`
- `frost_pod` uses that generated podspec as a local pod. which installs XCFramework instead of sources.
## Making XCFrameworks
Make bundler installs `cocoapods-frost`
`Gemfile`
```
gem 'cocoapods-frost', git: "https://github.com/muukii/cocoapods-frost.git", branch: "main"
```
Annotate Podfile that uses `cocoapods-frost` as plugin
`Podfile`
```ruby
plugin "cocoapods-frost"
```
Specifies pods with `pod_frost` that needs to create XCFramework.
Still, using `pod` can be left to build from source code.
`Podfile`
```ruby
frost_pod "Moya"
frost_pod "MondrianLayout"
pod "JAYSON"
```
Build XCFrameworks
```sh
$ bundle exec pod frost
```
Then
```sh
$ bundle exec pod install
```
## Updating pods
Use `--update-pods` to update pods
```shell
$ bundle exec pod frost --update-pods=RxSwift
```
## Directory structure
- Repository
- Podfile
- Podfile.lock
- FrostPodfile.lock `cocoapods-frost` creates, should be managed in git
- Pods
- FrostPods <- `cocoapods-frost` creates
- GeneratedPods (should be managed in git, git-lfs, something else)
## About subspecs
CocoaPods integrates multiple subspecs into one module.
Generated XCFramework contains all of subspecs specified in Podfile.
For instance,
https://github.com/Moya/Moya/blob/master/Moya.podspec
```ruby
frost_pod "Moya/Core"
frost_pod "Moya/Combine"
```
that creates `Moya.xcframework` includes core implementation and combine supports.
So `frost_pod` specifies as whole pod with dropping subspec specifiers.
## Development
It supports debugging in VSCode.
## License
MIT
## Author
- [Hiroshi Kimura (Muukii)](https://github.com/muukii)