Scipio
is a tool that takes existing Swift packages, binary frameworks, or CocoaPods, compiles them into XCFrameworks and delivers them as a single Swift package.
🔨 Scipio is currrently in alpha. Some things may not work right. If you run into problems, please open an issue.
The Problem: Each dependency manager has its own drawbacks and advantages. CocoaPods
is incredibly easy to setup, but requires you to compile each dependency from source. This can add a significant amount of time to your builds if you have a lot of dependencies. Carthage
solves this problem, but not every library supports it and it adds several steps to your build pipeline.
Scipio
aims to solve these problems by leveraging the Swift package manager support built into Xcode 11+ along with SPM's ability to distribute binary frameworks.
Scipio
takes existing Swift packages, CocoaPods, and pre-built frameworks and generates a Swift package that uses pre-built frameworks stored locally or on a remote server (like S3).
.xcframework
via URL packaged as a .zip
or .tar.gz
homebrew
installed. Visit brew.sh for more info.brew install evandcoleman/tap/scipio
$ git clone https://github.com/evandcoleman/Scipio.git
$ cd Scipio
make install
You have a few options for how to integrate Scipio into your project.
If you want to share dependencies between multiple users of your project(s) across many machines:
git
repository somewhere on your machine.scipio.yml
file (see Configuration section below). Be sure to use a non-local cache engine (such as http
).scipio
.Package.swift
file. Push this file to the new repository and create a new release tag.git
URL for the new repository and specifying your release tag as the version.If you want to share dependencies between multiple projects:
scipio.yml
file (see Configuration section below). Be sure to use the local
cache engine.scipio
.Package.swift
file.If your use case doesn't fall into one of the buckets above, use the basic setup:
scipio.yml
file (see Configuration section below). Be sure to use the local
cache engine.scipio
.Package.swift
file.Configuration is managed via a YAML file, scipio.yml
. By default, Scipio looks for this file in the current directory, but you can override this behavior by specifying the --config
flag followed by a path to a directory containing a scipio.yml
file.
It is recommended to create a separate repository to store your Scipio configuration. This is where the generated Package.swift
will live.
name
: The name you want to use for the Swift package that Scipio generates. If you're using a local cache engine, this should be the name of the enclosing folder.
deploymentTarget
: The deployment targets that you'd like to build dependencies for.
cache
: The cache engine to use. Currently http
(with a url
) and local
(with a path
) are supported.
binaries
: An array of binary frameworks to download and include. These must be zip
or tar.gz
archives that contain either xcframeworks or Universal frameworks.
packages
: An array of Swift packages to build and include. See here for supported options.
pods
: An array of CocoaPods to build and include. See here for supported options.
name: MyAppCore
deploymentTarget:
iOS: "12.0"
cache:
http:
url: https://<your-bucket-name>.s3.amazonaws.com/
binaries:
- name: Facebook
url: https://github.com/facebook/facebook-ios-sdk/releases/download/v9.1.0/FacebookSDK.xcframework.zip
version: 9.1.0
- name: Firebase
url: https://github.com/firebase/firebase-ios-sdk/releases/download/8.6.0/Firebase.zip
version: 8.6.0
packages:
- name: SDWebImage
url: https://github.com/SDWebImage/SDWebImage
branch: 5.9.2
- name: SnapKit
url: https://github.com/SnapKit/SnapKit
branch: 5.0.0
pods:
- name: GoogleTagManager
from: 7.4.0
# We must exclude these dependencies of GoogleTagManager because they
# are included in the `Firebase` binary package above.
# Scipio will error if you omit this.
excludes:
- FBLPromises
- FirebaseAnalytics
- FirebaseCore
- FirebaseCoreDiagnostics
- FirebaseInstallations
- GoogleAppMeasurement
- GoogleDataTransport
- GoogleUtilities
- nanopb
- name: IGListKit
version: 4.0.0
Clone the project and open Package.swift
in Xcode
$ git clone https://github.com/evandcoleman/Scipio.git
$ cd Scipio && open Package.swift
Scipio is released under the MIT License.
link |
Stars: 52 |
Last commit: 6 weeks ago |
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics