Skip to content

Commit 12207b9

Browse files
authored
Merge pull request #4 from PureSwift/feature/android
Add Android build support
2 parents 0ff2be3 + c8c3b89 commit 12207b9

3 files changed

Lines changed: 97 additions & 5 deletions

File tree

‎.github/workflows/swift.yml‎

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,81 @@ jobs:
3737
run: swift build -c ${{ matrix.config }}
3838
- name: Test
3939
run: swift test -c ${{ matrix.config }}
40+
41+
android:
42+
name: Android
43+
runs-on: macos-15
44+
strategy:
45+
fail-fast: false
46+
matrix:
47+
config: ["debug", "release"]
48+
env:
49+
SWIFT_VERSION: "6.3.2"
50+
ANDROID_NDK_VERSION: "27.2.12479018"
51+
steps:
52+
- name: Checkout
53+
uses: actions/checkout@v4
54+
- name: Install Swift
55+
run: |
56+
curl -O https://download.swift.org/swiftly/darwin/swiftly.pkg
57+
installer -pkg swiftly.pkg -target CurrentUserHomeDirectory
58+
~/.swiftly/bin/swiftly init --assume-yes --skip-install
59+
echo "$HOME/.swiftly/bin" >> "$GITHUB_PATH"
60+
source ~/.swiftly/env.sh
61+
swiftly install ${{ env.SWIFT_VERSION }}
62+
swiftly use ${{ env.SWIFT_VERSION }}
63+
echo "$(swiftly use --print-location)/usr/bin" >> "$GITHUB_PATH"
64+
- name: Install Android NDK
65+
run: $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "ndk;${{ env.ANDROID_NDK_VERSION }}"
66+
- name: Install Swift SDK for Android
67+
run: |
68+
curl -L -o android-sdk.artifactbundle.tar.gz "https://download.swift.org/swift-${{ env.SWIFT_VERSION }}-release/android-sdk/swift-${{ env.SWIFT_VERSION }}-RELEASE/swift-${{ env.SWIFT_VERSION }}-RELEASE_android.artifactbundle.tar.gz"
69+
CHECKSUM=$(swift package compute-checksum android-sdk.artifactbundle.tar.gz)
70+
swift sdk install android-sdk.artifactbundle.tar.gz --checksum "$CHECKSUM"
71+
ANDROID_NDK_HOME="$ANDROID_HOME/ndk/${{ env.ANDROID_NDK_VERSION }}" \
72+
bash "$HOME/Library/org.swift.swiftpm/swift-sdks/swift-${{ env.SWIFT_VERSION }}-RELEASE_android.artifactbundle/swift-android/scripts/setup-android-sdk.sh"
73+
- name: Build
74+
run: TARGET_OS_ANDROID=1 swift build --swift-sdk aarch64-unknown-linux-android28 -c ${{ matrix.config }}
75+
76+
ios:
77+
name: iOS
78+
runs-on: macos-26
79+
strategy:
80+
fail-fast: false
81+
matrix:
82+
config: ["debug", "release"]
83+
steps:
84+
- name: Checkout
85+
uses: actions/checkout@v4
86+
- name: Select Simulator
87+
run: |
88+
DEVICE_ID=$(xcrun simctl list devices available -j | python3 -c "import json,sys; d=json.load(sys.stdin)['devices']; devices=[v for vs in d.values() for v in vs if 'iPhone' in v['name']]; print(devices[0]['udid'])")
89+
echo "DEVICE_ID=${DEVICE_ID}" >> "$GITHUB_ENV"
90+
- name: Build
91+
run: >
92+
xcodebuild build -scheme CoreModel-SQLite
93+
-destination "generic/platform=iOS"
94+
-configuration ${{ matrix.config == 'release' && 'Release' || 'Debug' }}
95+
-skipMacroValidation -skipPackagePluginValidation
96+
- name: Test
97+
run: >
98+
xcodebuild test -scheme CoreModel-SQLite
99+
-destination "id=${{ env.DEVICE_ID }}"
100+
-configuration ${{ matrix.config == 'release' && 'Release' || 'Debug' }}
101+
-skipMacroValidation -skipPackagePluginValidation
102+
ENABLE_TESTABILITY=YES
103+
104+
android-test:
105+
name: Android Test
106+
runs-on: ubuntu-latest
107+
steps:
108+
- name: Checkout
109+
uses: actions/checkout@v4
110+
- name: Test on Android emulator
111+
uses: skiptools/swift-android-action@v2
112+
with:
113+
swift-version: "6.3.2"
114+
android-api-level: 28
115+
swift-configuration: debug
116+
free-disk-space: true
117+
run-tests: true

‎.swift-version‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
6.3.2

‎Package.swift‎

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
1-
// swift-tools-version: 6.0
1+
// swift-tools-version: 6.1
22
import PackageDescription
3+
import Foundation
4+
5+
// Android has no system libsqlite3, so it needs SQLite.swift's embedded
6+
// copy. macOS and Linux keep SQLite.swift's own default for the platform.
7+
let isAndroid = ProcessInfo.processInfo.environment["TARGET_OS_ANDROID"] == "1"
8+
9+
let sqliteDependency: Package.Dependency = isAndroid
10+
? .package(
11+
url: "https://github.com/stephencelis/SQLite.swift.git",
12+
from: "0.16.0",
13+
traits: ["SQLiteSwiftCSQLite"]
14+
)
15+
: .package(
16+
url: "https://github.com/stephencelis/SQLite.swift.git",
17+
from: "0.16.0"
18+
)
319

420
let package = Package(
521
name: "CoreModel-SQLite",
@@ -20,10 +36,7 @@ let package = Package(
2036
url: "https://github.com/PureSwift/CoreModel",
2137
from: "2.6.3"
2238
),
23-
.package(
24-
url: "https://github.com/stephencelis/SQLite.swift.git",
25-
from: "0.16.0"
26-
)
39+
sqliteDependency
2740
],
2841
targets: [
2942
.target(

0 commit comments

Comments
 (0)