Swiftpack.co - pumaswift/Puma as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
🐯 Build utilities in pure Swift
.package(url: "https://github.com/pumaswift/Puma.git", from: "0.0.4")


Puma is a set of build utilities to automate mobile application development and deployment.

Unlike other command line tool that you need to understand lots of command line arguments, Puma is intended to be used as a Swift library. Just import in your Swift script file and run. There's no additional configuration file, your Swift script file is the source of truth. With auto completion and type safety, you are ensured to do the right things in Puma.

  • Puma and its dependencies are written in pure Swift, making it easy to read and contribute.
  • Use latest Swift 5.1 features like function builder to enable declarative syntax
  • Type-safe. All required and optional arguments are clear.
  • No configuration file. Your Swift script is your definition.
  • Simple wrapper around existing tools like xcodebuild, instruments and agvtool
  • Reuse awesome Swift scripting dependencies from Swift community

To see Puma in action, see this gif

Below is an example script where it performs the following tasks and finally it posts to slack, for more detailed information check the documentation

import Foundation
import Puma
import PumaCore
import PumaiOS

let workflow = Workflow {
    RunScript {
        $0.script = "echo 'Hello Puma'"
    Screenshot {
            projectType: .project("TestApp"),
            appScheme: "TestApp",
            uiTestScheme: "TestAppUITests",
            saveDirectory: Directory.downloads.appendingPathComponent("PumaScreenshots").path
        $0.add(scenarios: [
                destination: .init(
                    name: Destination.Name.iPhone11,
                    platform: Destination.Platform.iOSSimulator,
                    os: Destination.OS.iOS13_2_2
                language: Language.en_US,
                locale: Locale.en_US
                destination: .init(
                    name: Destination.Name.iPhone11Pro,
                    platform: Destination.Platform.iOSSimulator,
                    os: Destination.OS.iOS13_2_2
                language: Language.ja,
                locale: Locale.ja
    ExportArchive {
        $0.isEnabled = false
            projectType: .project("TestApp"),
            archivePath: Directory.downloads.appendingPathComponent("TestApp.xcarchive").path,
            optionsPlist: .options(
                    method: ExportArchive.ExportMethod.development,
                    signing: .automatic(
                        .init(teamId: ProcessInfo().environment["teamId"]!)
            exportDirectory: Directory.downloads.path
    Slack {
            message: .init(
                token: ProcessInfo().environment["slackBotToken"]!,
                channel: "random",
                text: "Hello from Puma",
                username: "onmyway133"

workflow.workingDirectory = Directory.home.appendingPathComponent("XcodeProject/TestApp").path



Puma is in its early development, we need your help.


Puma is released under the MIT license. See LICENSE for details.


Stars: 489
Last commit: 23 weeks ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Submit a free job ad (while I'm testing this). The analytics numbers for this website are here.

Release Notes

That new logo
1 year ago
  • Show ASCII logo

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics