|
| 1 | +V2 will add an option to generate a zip distribution of binary frameworks from an arbitrary list |
| 2 | +of source and binary CocoaPods. |
| 3 | + |
| 4 | +## Introduction |
| 5 | + |
| 6 | +The current [Zip Builder](https://github.com/firebase/firebase-ios-sdk/tree/master/ZipBuilder) |
| 7 | +is Firebase specific. This is a proposal and initial plan to evolve the Zip Builder into a |
| 8 | +multi-purpose Apple binary framework creation tool. |
| 9 | + |
| 10 | +It would be useful to have a generic |
| 11 | +Zip Builder for other Google SDKs and other open source projects. In addition, |
| 12 | +providing a generic Zip Builder would enable Firebase users to generate binary |
| 13 | +frameworks for configurations outside the standard zip and Carthage distributions |
| 14 | +released in the standard Firebase release process. |
| 15 | + |
| 16 | +With the extra flexibility, the Zip Builder will be useful for both SDK distributors |
| 17 | +to package binary distributions and app developers who want a customized binary |
| 18 | +distribution that maps exactly to their app's requirements and provides a clean |
| 19 | +build time speed up. |
| 20 | + |
| 21 | + |
| 22 | +## Background |
| 23 | + |
| 24 | +A more flexible Zip Builder would enable the following scenarios: |
| 25 | + |
| 26 | + * Creating a zip distribution from an arbitrary set of pods |
| 27 | + * Support different building different sets of platform slices |
| 28 | + * Support building with different Xcode versions |
| 29 | + * Build only the subspecs needed for use case |
| 30 | + * [Existing solutions](https://github.com/firebase/firebase-ios-sdk/issues/4284#issuecomment-552677044) |
| 31 | + are intermittently maintained and written in Ruby. A Swift implementation is |
| 32 | + more accessible and maintainable by the Apple community. |
| 33 | + * The Swift implementation will be easier to add Swift Package Manager support for which |
| 34 | + there will likely be a need since Swift Package Manager is even more source-centric than |
| 35 | + CocoaPods. |
| 36 | + |
| 37 | +## Plan |
| 38 | + |
| 39 | + 1. Add `--zipPods {JSON file}` option. The JSON file contains a list of CocoaPods |
| 40 | + along with an optional version specifier. If the version is not specified, a CocoaPods |
| 41 | + install will determine the version - typically the latest, unless another pod requires |
| 42 | + something lower. |
| 43 | + |
| 44 | + 1. Add `--minimumIOSVersion {version}` option. Specify the minimum iOS version to support. |
| 45 | + Default is 8.0. |
| 46 | + |
| 47 | + 1. Add `--archs {archs list}` option. Default is "arm64, arm64e, armv7, i386, x86_64" |
| 48 | + |
| 49 | +Unlike the Firebase zip build which builds a two-level zip file with a configurable set of |
| 50 | +installation, when `--zipPods` is specified a single zip file of frameworks will be created. |
| 51 | + |
| 52 | +## Future Directions |
| 53 | + |
| 54 | + * Binary support for Catalyst |
| 55 | + * Migrate to building `.xcframeworks` instead of `.frameworks` |
| 56 | + * Other Apple platforms besides iOS |
| 57 | + * Swift Package Manager |
| 58 | + * Dynamic Framework support |
| 59 | + * More option customization |
0 commit comments