diff --git a/ZipBuilder/ZipBuilderV2Plan.md b/ZipBuilder/ZipBuilderV2Plan.md new file mode 100644 index 00000000000..13bdfe926dd --- /dev/null +++ b/ZipBuilder/ZipBuilderV2Plan.md @@ -0,0 +1,59 @@ +V2 will add an option to generate a zip distribution of binary frameworks from an arbitrary list +of source and binary CocoaPods. + +## Introduction + +The current [Zip Builder](https://github.com/firebase/firebase-ios-sdk/tree/master/ZipBuilder) +is Firebase specific. This is a proposal and initial plan to evolve the Zip Builder into a +multi-purpose Apple binary framework creation tool. + +It would be useful to have a generic +Zip Builder for other Google SDKs and other open source projects. In addition, +providing a generic Zip Builder would enable Firebase users to generate binary +frameworks for configurations outside the standard zip and Carthage distributions +released in the standard Firebase release process. + +With the extra flexibility, the Zip Builder will be useful for both SDK distributors +to package binary distributions and app developers who want a customized binary +distribution that maps exactly to their app's requirements and provides a clean +build time speed up. + + +## Background + +A more flexible Zip Builder would enable the following scenarios: + + * Creating a zip distribution from an arbitrary set of pods + * Support different building different sets of platform slices + * Support building with different Xcode versions + * Build only the subspecs needed for use case + * [Existing solutions](https://github.com/firebase/firebase-ios-sdk/issues/4284#issuecomment-552677044) + are intermittently maintained and written in Ruby. A Swift implementation is + more accessible and maintainable by the Apple community. + * The Swift implementation will be easier to add Swift Package Manager support for which + there will likely be a need since Swift Package Manager is even more source-centric than + CocoaPods. + +## Plan + + 1. Add `--zipPods {JSON file}` option. The JSON file contains a list of CocoaPods + along with an optional version specifier. If the version is not specified, a CocoaPods + install will determine the version - typically the latest, unless another pod requires + something lower. + + 1. Add `--minimumIOSVersion {version}` option. Specify the minimum iOS version to support. + Default is 8.0. + + 1. Add `--archs {archs list}` option. Default is "arm64, arm64e, armv7, i386, x86_64" + +Unlike the Firebase zip build which builds a two-level zip file with a configurable set of +installation, when `--zipPods` is specified a single zip file of frameworks will be created. + +## Future Directions + + * Binary support for Catalyst + * Migrate to building `.xcframeworks` instead of `.frameworks` + * Other Apple platforms besides iOS + * Swift Package Manager + * Dynamic Framework support + * More option customization