Skip to content

Commit 00cd912

Browse files
authored
Merge pull request #17 from PureSwift/feature/swift-6.1
Update to Swift 6.1
2 parents 6b5013f + 8fd357e commit 00cd912

File tree

11 files changed

+55
-105
lines changed

11 files changed

+55
-105
lines changed

.github/FUNDING.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# These are supported funding model platforms
2+
ko_fi: colemancda

.github/pull_request_template.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
**Issue**
2+
3+
Fixes #1.
4+
5+
**What does this PR Do?**
6+
7+
Description of the changes in this pull request.
8+
9+
**Where should the reviewer start?**
10+
11+
`main.swift`
12+
13+
**Sweet giphy showing how you feel about this PR**
14+
15+
![Giphy](https://media.giphy.com/media/rkDXJA9GoWR2/giphy.gif)

.github/workflows/swift.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
name: Swift
2+
on: [push]
3+
jobs:
4+
5+
android:
6+
name: Android
7+
strategy:
8+
fail-fast: false
9+
matrix:
10+
swift: ['6.1']
11+
arch: ['aarch64', 'x86_64']
12+
sdk: ['24', '28', '29']
13+
runs-on: macos-15
14+
timeout-minutes: 30
15+
steps:
16+
- uses: actions/checkout@v4
17+
- name: "Build Swift Package for Android"
18+
run: |
19+
brew install skiptools/skip/skip || (brew update && brew install skiptools/skip/skip)
20+
skip android sdk install --version ${{ matrix.swift }}
21+
ANDROID_NDK_ROOT="" ANDROID_SDK_VERSION=${{ matrix.sdk }} skip android build --arch ${{ matrix.arch }} --android-api-level ${{ matrix.sdk }}

Demo/app/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ android {
1010

1111
defaultConfig {
1212
applicationId = "com.pureswift.swiftandroid"
13-
minSdk = 24
13+
minSdk = 29
1414
targetSdk = 35
1515
versionCode = 1
1616
versionName = "1.0"

Demo/build-swift-preview.sh

Lines changed: 0 additions & 12 deletions
This file was deleted.

Demo/build-swift.sh

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@ set -e
33
source swift-define
44

55
# Build with SwiftPM
6-
export JAVA_HOME=$SWIFT_ANDROID_SYSROOT/usr
7-
xcrun --toolchain swift swift build -c $SWIFT_COMPILATION_MODE \
8-
--swift-sdk $SWIFT_TARGET_NAME \
9-
--toolchain $XCTOOLCHAIN \
10-
--package-path $SWIFT_PACKAGE_SRC
6+
ANDROID_NDK_ROOT="" ANDROID_SDK_VERSION=$ANDROID_SDK_VERSION skip android build --arch $SWIFT_TARGET_ARCH --android-api-level $ANDROID_SDK_VERSION
117

128
# Copy compiled Swift package
139
mkdir -p $SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH/

Demo/setup.sh

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,17 @@ source swift-define
55
# Install macOS dependencies
66
if [[ $OSTYPE == 'darwin'* ]]; then
77
echo "Install macOS build dependencies"
8+
brew install skiptools/skip/skip
9+
brew update
810
HOMEBREW_NO_AUTO_UPDATE=1 brew install wget cmake ninja android-ndk
9-
10-
# Verify toolchain installed
11-
if [ ! -d ${XCTOOLCHAIN} ]
12-
then
13-
echo "Please install the swift-6.0.3-RELEASE toolchain (or set XCTOOLCHAIN)"
14-
echo "On Mac: https://download.swift.org/swift-6.0.3-release/xcode/swift-6.0.3-RELEASE/swift-6.0.3-RELEASE-osx.pkg"
15-
exit 1
16-
fi
17-
fi
18-
19-
# Check swift-autolink-extract exists
20-
if [[ ! -f "${XCTOOLCHAIN}/usr/bin/swift-autolink-extract" ]];
21-
then
22-
echo "Missing symlink '${XCTOOLCHAIN}/usr/bin/swift-autolink-extract'."
23-
echo "We need 'sudo' permission to create it (just this once)."
24-
sudo ln -s swift ${XCTOOLCHAIN}/usr/bin/swift-autolink-extract || exit 1
2511
fi
2612

2713
# Copy Swift libraries
14+
rm -rf $SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH/
2815
mkdir -p $SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH/
29-
cp -rf $SWIFT_ANDROID_SYSROOT/usr/lib/$ANDROID_LIB/*.so \
16+
cp -rf $SWIFT_ANDROID_LIBS/*.so \
3017
$SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH/
3118
# Copy C stdlib
3219
cp -rf $SWIFT_ANDROID_SYSROOT/usr/lib/$ANDROID_LIB/libc++_shared.so \
3320
$SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH/
34-
# Copy Swift dependencies
35-
cp -rf $SWIFT_ANDROID_SYSROOT/usr/lib/$ANDROID_LIB/libandroid-spawn.so \
36-
$SRC_ROOT/app/src/main/jniLibs/$ANDROID_ARCH/
21+
echo "Copied Swift libraries"

Demo/swift-define

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@ ANDROID_LIB="${ANDROID_LIB:=aarch64-linux-android}"
66
SWIFT_COMPILATION_MODE="${SWIFT_COMPILATION_MODE:=debug}"
77

88
# Version
9-
ANDROID_NDK_VERSION=24
10-
SWIFT_VERSION_SHORT=6.0.3
9+
ANDROID_SDK_VERSION=29
10+
SWIFT_VERSION_SHORT=6.1.1
1111
SWIFT_VERSION=swift-$SWIFT_VERSION_SHORT-RELEASE
12-
SWIFT_TARGET_NAME=$SWIFT_TARGET_ARCH-unknown-linux-android$ANDROID_NDK_VERSION
12+
SWIFT_TARGET_NAME=$SWIFT_TARGET_ARCH-unknown-linux-android$ANDROID_SDK_VERSION
1313
XCTOOLCHAIN=/Library/Developer/Toolchains/$SWIFT_VERSION.xctoolchain
14+
SWIFT_ARTIFACT_BUNDLE=swift-$SWIFT_VERSION_SHORT-RELEASE-android-0.1.artifactbundle
1415

1516
# Paths
16-
SWIFT_SDK=swift-$SWIFT_VERSION_SHORT-release-android-$ANDROID_NDK_VERSION-sdk
17-
SWIFT_ANDROID_SYSROOT=~/.swiftpm/swift-sdks/swift-$SWIFT_VERSION_SHORT-RELEASE-android-24-0.1.artifactbundle/$SWIFT_SDK/android-27c-sysroot
17+
SWIFT_SDK=swift-$SWIFT_VERSION_SHORT-release-android-$ANDROID_SDK_VERSION-sdk
18+
SWIFT_ANDROID_SYSROOT=~/.swiftpm/swift-sdks/$SWIFT_ARTIFACT_BUNDLE/swift-android/ndk-sysroot
19+
SWIFT_ANDROID_LIBS=~/.swiftpm/swift-sdks/$SWIFT_ARTIFACT_BUNDLE/swift-android/swift-resources/usr/lib/swift-$SWIFT_TARGET_ARCH/android/
1820
SWIFT_PACKAGE_SRC=$SRC_ROOT
21+
JAVA_HOME=$SWIFT_ANDROID_SYSROOT/usr
1922

2023
# Configurable
2124
SWIFT_NATIVE_PATH="${SWIFT_NATIVE_PATH:=$XCTOOLCHAIN/usr/bin}"

Package.swift

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,10 @@
1-
// swift-tools-version: 6.0
2-
// The swift-tools-version declares the minimum version of Swift required to build this package.
3-
1+
// swift-tools-version: 6.1
42
import CompilerPluginSupport
53
import PackageDescription
64

75
import class Foundation.FileManager
86
import class Foundation.ProcessInfo
97

10-
// Note: the JAVA_HOME environment variable must be set to point to where
11-
// Java is installed, e.g.,
12-
// Library/Java/JavaVirtualMachines/openjdk-21.jdk/Contents/Home.
13-
func findJavaHome() -> String {
14-
if let home = ProcessInfo.processInfo.environment["JAVA_HOME"] {
15-
return home
16-
}
17-
18-
// This is a workaround for envs (some IDEs) which have trouble with
19-
// picking up env variables during the build process
20-
let path = "\(FileManager.default.homeDirectoryForCurrentUser.path()).java_home"
21-
if let home = try? String(contentsOfFile: path, encoding: .utf8) {
22-
if let lastChar = home.last, lastChar.isNewline {
23-
return String(home.dropLast())
24-
}
25-
26-
return home
27-
}
28-
29-
fatalError("Please set the JAVA_HOME environment variable to point to where Java is installed.")
30-
}
31-
let javaHome = findJavaHome()
32-
33-
let javaIncludePath = "\(javaHome)/include"
34-
#if os(Linux)
35-
let javaPlatformIncludePath = "\(javaIncludePath)/linux"
36-
#elseif os(macOS)
37-
let javaPlatformIncludePath = "\(javaIncludePath)/darwin"
38-
#elseif os(Windows)
39-
let javaPlatformIncludePath = "\(javaIncludePath)/win32"
40-
#endif
41-
428
// Get NDK version from command line
439
let ndkVersion = ProcessInfo.processInfo.environment["ANDROID_NDK_VERSION"].flatMap { UInt($0) } ?? 27
4410
let ndkVersionDefine = SwiftSetting.define("ANDROID_NDK_VERSION_" + ndkVersion.description)
@@ -118,10 +84,6 @@ var package = Package(
11884
name: "JavaKitReflection",
11985
package: "swift-java"
12086
),
121-
.product(
122-
name: "Binder",
123-
package: "Binder"
124-
),
12587
"AndroidNDK",
12688
"AndroidJava",
12789
"AndroidManifest",
@@ -140,7 +102,6 @@ var package = Package(
140102
],
141103
swiftSettings: [
142104
.swiftLanguageMode(.v5),
143-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]),
144105
ndkVersionDefine,
145106
sdkVersionDefine
146107
]

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Swift bindings to Android SDK (via Java Native Interface)
44

55
## Compile
66

7-
Tested against [@finagolfin Swift Android SDK](https://github.com/finagolfin/swift-android-sdk) v6.0.3
7+
Tested against [Skip Tools](https://skip.tools/docs/gettingstarted/#installation)
88

99
There is an included example Android application under `/Demo`.
1010

0 commit comments

Comments
 (0)