Skip to content

ybiletskyi/swift-android-gradle

 
 

Repository files navigation

Swift Android Gradle plugin Maven Central

This plugin integrates Swift Android Toolchain to Gradle

Pre-requirements

This plugin require Android NDK r21e and Swift Android Toolchain

Plugin lookup NDK and toolchain by environment variables ANDROID_NDK_HOME and SWIFT_ANDROID_HOME or local.properties in project root

ndk.dir=/path/to/ndk
swift-android.dir=/path/to/toolchain

Setup

Plugin build swift code using SwiftPM so you should define you code inside SwiftPM modules. Root module should be located inside app/src/main/swift. See sample.

Adding plugin to gradle scripts

  1. Add the following to your root build.gradle
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.readdle.android.swift:gradle:1.4.0'
    }
}
  1. Add the following to your project build.gradle
apply plugin: 'com.readdle.android.swift'
  1. Configure build types and arhitecture
buildTypes {
    release {
        debuggable false
        // Build Swift in release mode
        jniDebuggable false
        // all 4 arhitectures
    }
    debug {
        debuggable true
        // Build Swift in debug mode
        jniDebuggable true
        // only 2 arhitectures
        ndk {
            abiFilters = ["arm64-v8a", "x86_64"]
        }
    }
}
  1. Optionally you can add some extra configuration to your project build.gradle. For example:
swift {
    // helpers to forward flags from Swift Package Manager to Swift Compiler Frontend
    def passToFrontend = ["-Xswiftc", "-Xfrontend", "-Xswiftc"]
    def disableObjcAttr = passToFrontend + "-experimental-disable-objc-attr"
    
    // Enables swift clean when ./gradlew clean invoked. Default true
    cleanEnabled false 
    
    // Custom swift flags for debug build
    debug {
        // Set custom preprocessor flags
        extraBuildFlags "-Xswiftc", "-DDEBUG"
        // Disable @objc and dynamic
        extraBuildFlags disableObjcAttr
    }
    
    // Custom swift flags for release build
    release {
        // enable symbols in relase mode
        extraBuildFlags "-Xswiftc", "-g"
        // Disable @objc and dynamic
        extraBuildFlags disableObjcAttr
    }
}

Usage

In simple cases you can just run ./gradlew assembleDebug and everything will work. If your use swift package manager dependencies with external build process you should firstly invoke ./gradlew swiftInstallDebug

Other SwiftPM to gradle mapping:

Gradle SwiftPM
./gradlew swiftClean swift package clean
./gradlew swiftBuildDebug swift build
./gradlew swiftBuildRelease swift build --configuration release
./gradlew swiftPackageUpdate swift package update

Sample

See sample android app.

About

Gradle plugin for building Swift code for Android

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Groovy 100.0%