Skip to content

Commit

Permalink
Zip Builder V2 Plan (#4341)
Browse files Browse the repository at this point in the history
  • Loading branch information
paulb777 authored Nov 26, 2019
1 parent c097f99 commit 737e3b9
Showing 1 changed file with 59 additions and 0 deletions.
59 changes: 59 additions & 0 deletions ZipBuilder/ZipBuilderV2Plan.md
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 737e3b9

Please sign in to comment.