# cocoapods-pack A CocoaPods plugin that converts a given podspec into its binary version. For a given podspec, a zip file will be produced containing the binary representation of the original podspec sources. Each platform is packed as an `xcframework` within the zip file. Other attributes such as `resource_bundles` specified in the source podspec will also be packed. A binary podspec is also generated that can be published to a CocoaPods specs repo. You may choose to use `cocoapods-pack` as a packaging tool and write your own Swift Package Manager `Package.swift` file for the generated package instead. Finally, you may choose to write your own CocoaPods plugin that leverages `cocoapods-pack` to prebuild CocoaPods dependencies before integrating them into a project. ## Installation ``` gem install cocoapods-pack ``` ## Usage ``` $ pod pack SOURCE ARTIFACT_REPO_URL Converts the provided `SOURCE` into a binary version with each platform packed as an `xcframework`. The process includes installing a CocoaPods sandbox, building it for device and simulator using the 'Release' configuration, zipping the output and generating a new podspec that uses the `ARTIFACT_REPO_URL` provided as the source. The generated podspec is also validated. Options: --use-static-frameworks Produce a framework that wraps a static library from the source files. By default dynamic frameworks are used. --generate-module-map If specified, instead of using the default generated umbrella module map one will be generated based on the frameworks header dirs. --allow-warnings Lint validates even if warnings are present. --repo-update Force running `pod repo update` before install. --out-dir Optional directory to use to output results into. Defaults to current working directory. --skip-validation Skips linting the generated binary podspec. --skip-platforms Comma-delimited platforms to skip when creating a binary. --xcodebuild-opts Options to be passed through to xcodebuild. --use-json Use JSON for the generated binary podspec. --sources=https://github.com/artsy/Specs,master The sources from which to pull dependant pods (defaults to all available repos). Multiple sources must be comma-delimited. --allow-root Allows CocoaPods to run as root --silent Show nothing --verbose Show more debugging information --no-ansi Show output without ANSI codes --help Show help banner of specified command ``` ## Examples To run some of the examples in this repo make sure you run `bundle install` first. ``` bundle exec pod pack samples/MySample/MySample.podspec https://url/to/MySample.zip --out-dir=out ``` If you wish to skip a specific platform the source podspec provides: ``` bundle exec pod pack samples/MySample/MySample.podspec https://url/to/MySample.zip --skip-platforms=watchos --out-dir=out ``` Using static linking: ``` bundle exec pod pack samples/MySample/MySample.podspec https://url/to/MySample.zip --use-static-frameworks --out-dir=out ``` Additional `xcodebuild` options can be passed using `--xcodebuild-opts `, example: ``` bundle exec pod pack samples/MySample/MySample.podspec https://url/to/MySample.zip --use-static-frameworks --xcodebuild-opts=ENABLE_BITCODE=NO --out-dir=out ``` You may also specify a remote podspec without the need to clone its sources locally, for example: ``` bundle exec pod pack https://raw.githubusercontent.com/Alamofire/Alamofire/master/Alamofire.podspec https://url/to/Alamofire.zip --out-dir=out --allow-warnings ``` ## Developing Install Ruby >= 2.5.0 and set up with: ``` $ bundle ``` To run the unit tests use `rake`: ``` $ bundle exec rake spec ``` Or, for a more thorough output which include test names: ``` $ bundle exec rspec --format d ```