Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
*.iml
.gradle
.kotlin
/local.properties
/.idea
.DS_Store
Expand Down
20 changes: 11 additions & 9 deletions androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
*/

plugins {
alias(libs.plugins.compose.compiler)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.nordic.application.compose)
alias(libs.plugins.nordic.hilt)
}
Expand All @@ -44,24 +46,24 @@ dependencies {
implementation(project(":lib"))
implementation(project(":shared"))

implementation("io.insert-koin:koin-core:3.4.3")
implementation("io.insert-koin:koin-android:3.4.3")
implementation("io.github.aakira:napier:2.6.1")
implementation(libs.koin.core)
implementation("io.insert-koin:koin-android:4.1.1")
implementation(libs.kmm.logs)

kapt(libs.hilt.compiler)
implementation(libs.hilt.android)

implementation(libs.nordic.blek.scanner)
implementation("no.nordicsemi.android.kotlin.ble:scanner:1.3.1")

implementation(libs.nordic.theme)
implementation(libs.nordic.navigation)
implementation(libs.nordic.permissions.ble)
implementation(libs.nordic.logger)
implementation("no.nordicsemi.android.common:theme:2.6.2")
implementation("no.nordicsemi.android.common:navigation:2.6.2")
implementation("no.nordicsemi.android.common:permissions-ble:2.6.2")
implementation("no.nordicsemi.android.common:logger:2.6.2")

implementation(libs.kotlinx.coroutines.core)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.hilt.navigation.compose)
implementation(libs.androidx.compose.material.iconsExtended)

}
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@

plugins {
alias(libs.plugins.kotlin.compose).apply(false)
alias(libs.plugins.compose.compiler).apply(false)
alias(libs.plugins.kotlin.multiplatform).apply(false)
alias(libs.plugins.kotlin.kapt).apply(false)
alias(libs.plugins.android.application).apply(false)
Expand All @@ -40,6 +41,5 @@ plugins {
alias(libs.plugins.nordic.application).apply(false)
alias(libs.plugins.nordic.hilt).apply(false)
alias(libs.plugins.hilt).apply(false)
alias(libs.plugins.nordic.nexus).apply(false)
alias(libs.plugins.kmm.ios.publish)
}
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
10 changes: 7 additions & 3 deletions iosApp/iosApp.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 51;
objectVersion = 54;
objects = {

/* Begin PBXBuildFile section */
Expand Down Expand Up @@ -179,10 +179,14 @@
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources.sh\"\n";
Expand Down Expand Up @@ -351,7 +355,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
DEVELOPMENT_TEAM = FMUM4YN89C;
DEVELOPMENT_TEAM = "";
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = iosApp/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.1;
Expand All @@ -375,7 +379,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
DEVELOPMENT_TEAM = FMUM4YN89C;
DEVELOPMENT_TEAM = "";
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = iosApp/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.1;
Expand Down
81 changes: 10 additions & 71 deletions lib/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -34,30 +34,15 @@ import no.nordicsemi.android.buildlogic.getVersionNameFromTags
plugins {
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.nordic.library)
alias(libs.plugins.nordic.nexus)
alias(libs.plugins.kmm.ios.publish)
kotlin("native.cocoapods")
}

group = "no.nordicsemi.kmm"
version = getVersionNameFromTags()

nordicNexusPublishing {
POM_ARTIFACT_ID = "ble"
POM_NAME = "Nordic Kotlin Multiplatform Library for BLE."

POM_DESCRIPTION = "Nordic Kotlin Multiplatform Library for BLE."
POM_URL = "https://github.com/NordicSemiconductor/KMM-BLE-Library"
POM_SCM_URL = "https://github.com/NordicSemiconductor/KMM-BLE-Library"
POM_SCM_CONNECTION = "scm:[email protected]:NordicPlayground/KMM-BLE-Library.git"
POM_SCM_DEV_CONNECTION = "scm:[email protected]:NordicPlayground/KMM-BLE-Library.git"

POM_DEVELOPER_ID = "syzi"
POM_DEVELOPER_NAME = "Sylwester Zieliński"
POM_DEVELOPER_EMAIL = "[email protected]"
}

kotlin {
iosX64()
iosArm64()
Expand Down Expand Up @@ -100,12 +85,12 @@ kotlin {
api(libs.androidx.activity.compose)
api(libs.androidx.appcompat)
api(libs.androidx.core.ktx)
implementation(libs.nordic.blek.scanner)
implementation(libs.nordic.blek.client)
implementation(libs.nordic.blek.advertiser)
implementation(libs.nordic.blek.server)
implementation(libs.nordic.permissions.ble)
implementation(libs.nordic.permissions.internet)
implementation("no.nordicsemi.android.kotlin.ble:scanner:1.3.1")
implementation("no.nordicsemi.android.kotlin.ble:client:1.3.1")
implementation("no.nordicsemi.android.kotlin.ble:advertiser:1.3.1")
implementation("no.nordicsemi.android.kotlin.ble:server:1.3.1")
implementation("no.nordicsemi.android.common:permissions-ble:2.6.2")
implementation("no.nordicsemi.android.common:permissions-internet:2.6.2")
implementation(libs.androidx.startup)
}
}
Expand All @@ -129,11 +114,11 @@ android {
sourceSets["main"].resources.srcDirs("src/commonMain/resources")

compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
kotlin {
jvmToolchain(17)
jvmToolchain(21)
}
}

Expand All @@ -147,49 +132,3 @@ multiplatformSwiftPackage {
distributionMode { remote("https://github.com/NordicSemiconductor/KMM-BLE-Library") }
outputDirectory(rootDir)
}

//FIXME: For some reason nordic.nexus plugin is not working for kmm project.
signing {
sign(publishing.publications)
}

publishing {
publications.withType(MavenPublication::class) {
groupId = "no.nordicsemi.kmm"
artifactId = "ble"
version = getVersionNameFromTags()

pom {
name.set("Nordic Kotlin Multiplatform Library for BLE.")
description.set("Nordic Kotlin Multiplatform Library for BLE.")
url.set("https://github.com/NordicSemiconductor/KMM-BLE-Library")

licenses {
license {
name.set("BSD-3-Clause")
url.set("http://opensource.org/licenses/BSD-3-Clause")
}
}
developers {
developer {
id.set("mag")
name.set("Mobile Applications Group")
email.set("[email protected]")
}
}
organization {
name.set("Nordic Semiconductor ASA")
}
scm {
connection.set("https://github.com/NordicSemiconductor/KMM-BLE-Library")
developerConnection.set("scm:[email protected]:NordicSemiconductor/KMM-BLE-Library.git")
url.set("scm:[email protected]:NordicSemiconductor/KMM-BLE-Library.git")
}
}
}
}

afterEvaluate {
tasks.getByName("signMavenPublicationPublication").dependsOn(tasks.getByName("publishAndroidReleasePublicationToMavenRepository"))
tasks.getByName("signMavenPublicationPublication").dependsOn(tasks.getByName("publishAndroidReleasePublicationToMavenLocal"))
}
8 changes: 6 additions & 2 deletions lib/lib.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Pod::Spec.new do |spec|
spec.summary = 'Nordic Kotlin Multiplatform Library for BLE.'
spec.vendored_frameworks = 'build/cocoapods/framework/shared.framework'
spec.libraries = 'c++'
spec.ios.deployment_target = '14.1'
spec.ios.deployment_target = '14.1'


if !Dir.exist?('build/cocoapods/framework/shared.framework') || Dir.empty?('build/cocoapods/framework/shared.framework')
Expand All @@ -22,6 +22,10 @@ Pod::Spec.new do |spec|
Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)"
end

spec.xcconfig = {
'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO',
}

spec.pod_target_xcconfig = {
'KOTLIN_PROJECT_PATH' => ':lib',
'PRODUCT_MODULE_NAME' => 'shared',
Expand All @@ -46,5 +50,5 @@ Pod::Spec.new do |spec|
SCRIPT
}
]
spec.resources = ['build/compose/ios/shared/compose-resources']
spec.resources = ['build/compose/cocoapods/compose-resources']
end
2 changes: 1 addition & 1 deletion lib/src/androidMain/kotlin/client/ClientCharacteristic.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ import android.annotation.SuppressLint
import com.benasher44.uuid.Uuid
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import no.nordicsemi.android.common.core.DataByteArray
import no.nordicsemi.android.kotlin.ble.client.main.service.ClientBleGattCharacteristic
import no.nordicsemi.android.kotlin.ble.core.data.BleWriteType
import no.nordicsemi.android.kotlin.ble.core.data.util.DataByteArray

@SuppressLint("MissingPermission")
actual class ClientCharacteristic(private val characteristic: ClientBleGattCharacteristic) {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/androidMain/kotlin/client/ClientDescriptor.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
package client

import android.annotation.SuppressLint
import no.nordicsemi.android.common.core.DataByteArray
import no.nordicsemi.android.kotlin.ble.core.data.util.DataByteArray
import no.nordicsemi.android.kotlin.ble.client.main.service.ClientBleGattDescriptor

@SuppressLint("MissingPermission")
Expand Down
2 changes: 1 addition & 1 deletion lib/src/androidMain/kotlin/server/ServerCharacteristic.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ package server
import com.benasher44.uuid.Uuid
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import no.nordicsemi.android.common.core.DataByteArray
import no.nordicsemi.android.kotlin.ble.core.data.util.DataByteArray
import no.nordicsemi.android.kotlin.ble.server.main.service.ServerBleGattCharacteristic

actual class ServerCharacteristic(
Expand Down
2 changes: 1 addition & 1 deletion lib/src/androidMain/kotlin/server/ServerDescriptor.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ package server
import com.benasher44.uuid.Uuid
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import no.nordicsemi.android.common.core.DataByteArray
import no.nordicsemi.android.kotlin.ble.core.data.util.DataByteArray
import no.nordicsemi.android.kotlin.ble.server.main.service.ServerBleGattDescriptor

actual data class ServerDescriptor(
Expand Down
3 changes: 3 additions & 0 deletions lib/src/iosMain/kotlin/advertisement/IOSServer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ package advertisement
import client.toCBUUID
import client.toUuid
import io.github.aakira.napier.Napier
import kotlinx.cinterop.ObjCSignatureOverride
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
Expand Down Expand Up @@ -138,6 +139,7 @@ class IOSServer(

}

@ObjCSignatureOverride
override fun peripheralManager(
peripheral: CBPeripheralManager,
central: CBCentral,
Expand All @@ -147,6 +149,7 @@ class IOSServer(
notificationsRecords.addCentral(didSubscribeToCharacteristic.UUID.toUuid(), central)
}

@ObjCSignatureOverride
override fun peripheralManager(
peripheral: CBPeripheralManager,
central: CBCentral,
Expand Down
8 changes: 8 additions & 0 deletions lib/src/iosMain/kotlin/client/IOSClient.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ package client

import com.benasher44.uuid.uuidFrom
import io.github.aakira.napier.Napier
import kotlinx.cinterop.ObjCSignatureOverride
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
Expand Down Expand Up @@ -172,6 +173,7 @@ class IOSClient : NSObject(), CBCentralManagerDelegateProtocol, CBPeripheralDele
Napier.i("Discover characteristic: $", tag = TAG)
}

@ObjCSignatureOverride
override fun peripheral(
peripheral: CBPeripheral,
didDiscoverDescriptorsForCharacteristic: CBCharacteristic,
Expand All @@ -187,6 +189,7 @@ class IOSClient : NSObject(), CBCentralManagerDelegateProtocol, CBPeripheralDele
_bleState.value = central.state
}

@ObjCSignatureOverride
override fun centralManager(
central: CBCentralManager,
didFailToConnectPeripheral: CBPeripheral,
Expand All @@ -201,6 +204,7 @@ class IOSClient : NSObject(), CBCentralManagerDelegateProtocol, CBPeripheralDele
onDeviceConnected?.invoke(DeviceConnected)
}

@ObjCSignatureOverride
override fun centralManager(
central: CBCentralManager,
didDisconnectPeripheral: CBPeripheral,
Expand All @@ -210,6 +214,7 @@ class IOSClient : NSObject(), CBCentralManagerDelegateProtocol, CBPeripheralDele
onDeviceDisconnected?.invoke()
}

@ObjCSignatureOverride
override fun peripheral(
peripheral: CBPeripheral,
didUpdateValueForCharacteristic: CBCharacteristic,
Expand All @@ -224,6 +229,7 @@ class IOSClient : NSObject(), CBCentralManagerDelegateProtocol, CBPeripheralDele
)
}

@ObjCSignatureOverride
override fun peripheral(
peripheral: CBPeripheral,
didWriteValueForCharacteristic: CBCharacteristic,
Expand All @@ -238,6 +244,7 @@ class IOSClient : NSObject(), CBCentralManagerDelegateProtocol, CBPeripheralDele
)
}

@ObjCSignatureOverride
override fun peripheral(
peripheral: CBPeripheral,
didWriteValueForDescriptor: CBDescriptor,
Expand All @@ -252,6 +259,7 @@ class IOSClient : NSObject(), CBCentralManagerDelegateProtocol, CBPeripheralDele
)
}

@ObjCSignatureOverride
override fun peripheral(
peripheral: CBPeripheral,
didUpdateValueForDescriptor: CBDescriptor,
Expand Down
2 changes: 1 addition & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ dependencyResolutionManagement {
}
versionCatalogs {
create("libs") {
from("no.nordicsemi.android.gradle:version-catalog:1.11.3")
from("no.nordicsemi.android.gradle:version-catalog:2.11")
}
}
}
Expand Down
Loading