Puma - A set of build utilities to automate mobile application development and deployment

Related tags

Miscellaneous puma
Overview

Puma

https://github.com/onmyway133/Swiftlane

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 {
        $0.configure(
            projectType: .project("TestApp"),
            appScheme: "TestApp",
            uiTestScheme: "TestAppUITests",
            saveDirectory: Directory.downloads.appendingPathComponent("PumaScreenshots").path
        )
        
        $0.add(scenarios: [
            .init(
                destination: .init(
                    name: Destination.Name.iPhone11,
                    platform: Destination.Platform.iOSSimulator,
                    os: Destination.OS.iOS13_2_2
                ),
                language: Language.en_US,
                locale: Locale.en_US
            ),
            .init(
                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
        $0.configure(
            projectType: .project("TestApp"),
            archivePath: Directory.downloads.appendingPathComponent("TestApp.xcarchive").path,
            optionsPlist: .options(
                .init(
                    method: ExportArchive.ExportMethod.development,
                    signing: .automatic(
                        .init(teamId: ProcessInfo().environment["teamId"]!)
                    )
                )
            ),
            exportDirectory: Directory.downloads.path
        )
    }
    
    Slack {
        $0.post(
            message: .init(
                token: ProcessInfo().environment["slackBotToken"]!,
                channel: "random",
                text: "Hello from Puma",
                username: "onmyway133"
            )
        )
    }
}

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

Documentation

Contributing

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

License

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

You might also like...
A novel way to set attributes to the Font in SwiftUI.

A novel way to set attributes to the Font in SwiftUI.

MicrofrontendGenerator - Script for creating micro frontends for Mobile in a simple and easy way

Introdução Template para a criação de SDK iOS. Existem duas opções de template:

Runtime Mobile Security (RMS) 📱🔥  - is a powerful web interface that helps you to manipulate Android and iOS Apps at Runtime
Runtime Mobile Security (RMS) 📱🔥 - is a powerful web interface that helps you to manipulate Android and iOS Apps at Runtime

Runtime Mobile Security (RMS) 📱 🔥 by @mobilesecurity_ Runtime Mobile Security (RMS), powered by FRIDA, is a powerful web interface that helps you to

Google-Blogger-iOS-App - Using Google Blogger API to build an iOS app like Medium

Google Blogger iOS App Using Google Blogger API to build an iOS app like Medium!

The source code to How to build a news app with react native 📰
The source code to How to build a news app with react native 📰

Royal News · The source code to How to build a news app with react native article on NimreyCode, medium, and dev.to. Requirements: Android Studio or X

I am learning to build an iOS app with SwiftUI.
I am learning to build an iOS app with SwiftUI.

ios-quiz-app I am learning to build an iOS app with SwiftUI. This is a quiz app with SwiftUI although tutorial was on UIKit Challenges Faced navigatio

Save development time! Respresso automatically transforms and delivers your digital assets into your projects
Save development time! Respresso automatically transforms and delivers your digital assets into your projects

Introduction Respresso is a centralized resource manager for shared Android, iOS and Web frontend projects. It allows you to simply import the latest

Save development time! Respresso automatically transforms and delivers your digital assets into your projects
Save development time! Respresso automatically transforms and delivers your digital assets into your projects

Respresso Android client Respresso is a centralized resource manager for shared Android, iOS and Web frontend projects. It allows you to simply import

Save development time! Respresso automatically transforms and delivers your digital assets into your projects
Save development time! Respresso automatically transforms and delivers your digital assets into your projects

Respresso iOS client Respresso is a centralized resource manager for shared Android, iOS and Web frontend projects. It allows you to simply import the

Owner
Puma Swift
Build tool utilities in pure Swift
Puma Swift
A collection of common SwiftUI and UIKit utilities.

KippleUI A collection of common SwiftUI and UIKit utilities. ⚠️ The code in this library has been made public as-is for the purposes of education, dis

Kipple 10 Sep 2, 2022
A collection of common diagnostics and debugging utilities.

KippleDiagnostics A collection of common diagnostics and debugging utilities. ⚠️ The code in this library has been made public as-is for the purposes

Kipple 10 Sep 2, 2022
Codepath-intro-prework - Hello World iOS App | Prework Project for CodePath Intro to Mobile App Development

Hello World iOS App App Description Prework Project for CodePath Intro to Mobile

null 0 Jan 25, 2022
CodePath-iOS-Prework - Prework project for Intro to Mobile App Development course on CodePath

CodePath iOS Prework App Description This app has an input field, text, and seve

Russell Elliott 0 Feb 2, 2022
The Bitwarden mobile application is written in C# with Xamarin Android, Xamarin iOS, and Xamarin Forms.

Bitwarden Mobile Application The Bitwarden mobile application is written in C# with Xamarin Android, Xamarin iOS, and Xamarin Forms. Build/Run Require

Bitwarden 4.2k Dec 29, 2022
🛠 A flexible and easy template created to speed up the development of your iOS application based on the MVP pattern.

Model-View-Presenter template A flexible and easy template created to speed up the development of your iOS application based on the MVP pattern. This

Tamerlan Satualdypov 22 Nov 9, 2022
A simple self-development challenge application that aimed to learn

Movie List Challenge A simple self-development challenge application that aimed to learn "The Composable Architecture" basics and build a reactive str

Nicat Muzaffarli 1 Oct 30, 2021
Find the union of a set of axis-aligned rectangles

RectangleContour My main product is a library named RectangleContour which contains one Swift module also named RectangleContour. The library implemen

Rob Mayoff 18 Dec 21, 2022
SafeDecoder - a swift package that set defaults when Codable fails to decode a field

SafeDecoder is a swift package that set defaults when Codable fails to decode a field. SafeDecoder supports configurable default values, See SafeDecoder.Configuration.

GodL 4 Mar 21, 2022
Set `Open using Rosetta` option on Xcode easily

xcode-arch A utility to switch running architecture of Xcode on M1 mac. Motivation Currently, there is no way to toggle Open using Rosetta option othe

Takuhiro Muta 7 Aug 8, 2022