Dovydas
04/16/2025, 5:17 PMFrançois
04/19/2025, 8:29 AMcd "${SRCROOT}/../shared/build/xcode-frameworks/"
(or any other path to the shared framework
• ln -Fs "${CONFIGURATION}" "Debug"
A Debug directory is mandatory for SOURCE_KIT to work!Dovydas
04/20/2025, 3:28 PMchandilsachin
04/22/2025, 12:19 PMMarc
04/22/2025, 2:33 PMMax
04/22/2025, 6:27 PMMainViewController.kt
class like below.
Afterwards I can access IOSPlatformFile
in Swift code.
fun MainViewController() = ComposeUIViewController { App() }
// so swift code can access this
val platformFile: IOSPlatformFile = IOSPlatformFile("")
Could someone clarify what I’m doing wrong in these cases? Are only classes from the main module visible to Swift by default?Hasan Nagizade
05/02/2025, 6:50 AMGNKumar
05/02/2025, 1:40 PMMikolaj
05/06/2025, 1:40 PMembedAndSign
run faster (besides buy new computer)? I'm not using cocoapods nor SPM, only kotlin (and minimum swift boilerplate) yet full ios build still takes 20-30 minutes (macbook M3 16GB ram)
*embedAndSign takes >50% of that timeFarhazul Mullick
05/07/2025, 9:24 AMkotlin native cocoapods
. I have few questions.
1. Why kotlin native cocoapods plugin automatically creates podspec file upon sync.
2. If i use some cocoapods dependency and like Alamofire. I can define in gradle inside cocoapods block. Upon gradle sync podInstall task is ran by gradle. Then kotlin files of those pods are generated from cocoapods package. This later compiled with the final fat-framework. We can use this framework in any ios app. If so why we need to create a pod file in iosApp and run pod install there as well?abraham
05/09/2025, 2:43 PMswift_name
attributes?François
05/13/2025, 10:37 AMCUR="${SRCROOT}/../shared/build/list_of_files.txt"
OLD="${SRCROOT}/../shared/build/old_list_of_files.txt"
touch $OLD
CHANGES="${SRCROOT}/../shared/build/list_of_changes.txt"
ls -lRT "${SRCROOT}/../shared/src/" > $CUR
diff $OLD $CUR > $CHANGES
if [ ! -s "${CHANGES}" ]; then
echo "No change in shared source"
exit 0
fi
if [ "YES" = "$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED" ]; then
echo "Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\""
exit 0
fi
cd "$SRCROOT/.."
./gradlew :shared:embedAndSignAppleFrameworkForXcode
# set the current change as old after the build is OK
mv $CUR $OLD
jQrgen
05/16/2025, 11:01 AMF
05/21/2025, 5:29 PMchrisjenx
05/24/2025, 6:23 PMVivek Gupta
05/27/2025, 10:33 AMRaphael TEYSSANDIER
05/29/2025, 10:19 PMpublishAndReleaseToMavenCentral
on github actions. But I get an error for iOS:
> Task :xxx:compileKotlinIosSimulatorArm64
e: file:///Users/runner/work/xxx/xxx/xxx/build/generated/ksp/metadata/commonMain/kotlin/io/dot/lorraine/db/XXXConstructor.kt:5:24 'actual object XXXConstructor : RoomDatabaseConstructor<XXXDB>' has no corresponding expected declaration
e: file:///Users/runner/work/xxx/xxx/xxx/build/generated/ksp/metadata/commonMain/kotlin/io/dot/xxx/db/XXXConstructor.kt:5:24 XXXConstructor: expect and corresponding actual are declared in the same module.
> Task :xxx:compileCommonMainKotlinMetadata FAILED
e: file:///Users/runner/work/xxx/xxx/xxx/build/generated/ksp/metadata/commonMain/kotlin/io/dot/xxx/db/XXXConstructor.kt:6:23 'actual fun initialize(): XXXDB' has no corresponding expected declaration
e: file:///Users/runner/work/xxx/xxx/xx/src/commonMain/kotlin/io/dot/xxx/db/XXXConstructor.kt:6:24 XXXConstructor: expect and corresponding actual are declared in the same module.
Any idea how to fix it ?Muaz KADAN
06/01/2025, 8:26 AMfun StringResource.localized(): String {
return runBlocking { getString(this@localized) }
}
Anant Kumar Gupta
06/07/2025, 4:21 AMCGImage
in Kotlin/Native?
Warning - Cannot access class 'cnames. structs. CGImage' in the expression type. While it may work, this case indicates a configuration mistake and can lead to avoidable compilation errors, so it may be forbidden soon. Check your module classpath for missing or conflicting dependencies.
fun generateVideoThumbnailIOS(
uri: String
): ImageBitmap? = memScoped {
val nsUrl = NSURL.Companion.fileURLWithPath(uri.removePrefix("file://"))
val asset = AVURLAsset.URLAssetWithURL(nsUrl, null)
val generator = AVAssetImageGenerator(asset)
generator.appliesPreferredTrackTransform = true
val requestedTime = CMTimeMake(1, 1).useContents { readValue() }
val actualTime: CMTime = alloc<CMTime>()
val errorPtr = alloc<ObjCObjectVar<NSError?>>()
val cgImage = generator.copyCGImageAtTime(
requestedTime = requestedTime,
actualTime = actualTime.ptr,
error = errorPtr.ptr
) ?: run {
println("Error: ${errorPtr.value?.localizedDescription}")
return@memScoped null
}
val uiImage = UIImage.imageWithCGImage(cgImage)
val nsData = uiImage.pngRepresentation() ?: return@memScoped null
val length = nsData.length.toInt()
val bytePtr = nsData.bytes?.reinterpret<ByteVar>() ?: return@memScoped null
val byteArray = bytePtr.readBytes(length)
val finalThumbnail = Image.makeFromEncoded(byteArray).toComposeImageBitmap()
return@memScoped finalThumbnail
}
Jasmin
07/04/2025, 8:47 AMcommonMain/resources/files/frontend
.
How do I need to configure Gradle to bundle these assets in the XCFramework and access them via NSBundle
?
I know it must be possible somehow, because of the composeResources, which are getting correctly included.
Here is my current access code:
val basePath = NSBundle.mainBundle.resourcePath + "/files/frontend/"
Every help is appreciated 🙂Max
07/05/2025, 11:18 AMMario
07/08/2025, 8:09 AMAVCaptureVideoDataOutputSampleBufferDelegateProtocol
because both its method definitions are the same, just with different names:
public expect interface AVCaptureVideoDataOutputSampleBufferDelegateProtocol : platform.darwin.NSObjectProtocol {
@kotlin.commonizer.ObjCCallable @kotlinx.cinterop.ObjCMethod public open expect fun captureOutput(output: platform.AVFoundation.AVCaptureOutput, didOutputSampleBuffer: kotlinx.cinterop.CPointer<cnames.structs.opaqueCMSampleBuffer>? /* from: platform.CoreMedia.CMSampleBufferRef? */, fromConnection: platform.AVFoundation.AVCaptureConnection): kotlin.Unit { /* compiled code */ }
@kotlin.commonizer.ObjCCallable @kotlinx.cinterop.ObjCMethod public open expect fun captureOutput(output: platform.AVFoundation.AVCaptureOutput, didDropSampleBuffer: kotlinx.cinterop.CPointer<cnames.structs.opaqueCMSampleBuffer>? /* from: platform.CoreMedia.CMSampleBufferRef? */, fromConnection: platform.AVFoundation.AVCaptureConnection): kotlin.Unit { /* compiled code */ }
}
When I try to implement it, I get the following error:
object : NSObject(), AVCaptureVideoDataOutputSampleBufferDelegateProtocol {
override fun captureOutput(
output: AVCaptureOutput,
didOutputSampleBuffer: CMSampleBufferRef?,
fromConnection: AVCaptureConnection
) {
super.captureOutput(output, didOutputSampleBuffer, fromConnection)
}
}
The corresponding parameter in the supertype 'AVCaptureVideoDataOutputSampleBufferDelegateProtocol' is named 'didDropSampleBuffer'. This may cause problems when calling this function with named arguments.
Anmol Verma
07/17/2025, 5:21 PMGNKumar
07/22/2025, 4:11 AMKashismails
07/29/2025, 8:52 AMxxfast
08/06/2025, 1:19 AMExecution failed for task ':connect:compileKotlinIosArm64'.
> Error while evaluating property 'kotlinNativeProvider$kotlin_gradle_plugin_common.kotlinNativeBundleVersion$kotlin_gradle_plugin_common' of task ':connect:compileKotlinIosArm64'.
Showing All Messages
> java.nio.file.FileAlreadyExistsException: /Users/User/.konan/kotlin-native-prebuilt-macos-x86_64-2.2.0/tools/konan_lldb.py
Fernando
08/11/2025, 6:18 PMiosApp
into an apps
directory. I was able to move everything else but the iOS project, for some reason, it won't work. I've tried moving it with the Terminal, but it will not allow me to run the iOS project from the IDE (trough the Kotlin Multiplatform Project)
Does anybody knows how can I move it while being able to run it from the IDE?Excellence kawej
08/13/2025, 10:48 AMExcellence kawej
08/13/2025, 10:55 AM/Users/ctrltech/StudioProjects/Tmaterials/iosApp/iosApp/FirebaseBridge.swift:37:69 Trailing closure passed to parameter of type 'String' that does not accept a closure
Here is my implementation:
import Foundation
import FirebaseCore
import Firebase
import FirebaseAuth
import GoogleSignInSwift
import GoogleSignIn
@objc class FirebaseBridge: NSObject {
@objc static func configureFirebase() {
if <http://FirebaseApp.app|FirebaseApp.app>() == nil {
FirebaseApp.configure()
}
}
@objc static func isUserSignedIn() -> Bool {
return Auth.auth().currentUser != nil
}
@objc static func signOut() {
try? Auth.auth().signOut()
}
@objc static func signInWithGoogle(presenting: UIViewController, completion: @escaping (FirebaseUserWrapper?, Error?) -> Void) {
guard let clientID = <http://FirebaseApp.app|FirebaseApp.app>()?.options.clientID else {
completion(nil, NSError(domain: "NoClientID", code: 0))
return
}
let config = GIDConfiguration(clientID: clientID)
GIDSignIn.sharedInstance.signIn(withPresenting: presenting) { result in //error happens here
switch result {
case .success(let signInResult):
let user = result.user
guard let idToken = user.idToken?.tokenString else {
completion(nil, NSError(domain: "MissingIdToken", code: 1))
return
}
let accessToken = user.accessToken.tokenString
guard let idToken = idToken else {
completion(nil, NSError(domain: "MissingIdToken", code: 1))
return
}
let credential = GoogleAuthProvider.credential(withIDToken: idToken, accessToken: accessToken)
Auth.auth().signIn(with: credential) { authResult, error in
if let error = error {
completion(nil, NSError(domain: error.localizedDescription, code: 1))
} else if let firebaseUser = authResult?.user {
completion(FirebaseUserWrapper(user: firebaseUser), nil)
} else {
completion(authResult?.user.uid, nil)
}
}
case .failure(let error):
if let error = error {
completion(nil, error)
return
}
guard let result = result else {
completion(nil, NSError(domain: "GoogleSignInError", code: 1))
return
}
}
}
}
}
@objc class FirebaseUserWrapper: NSObject {
let uid: String
let email: String?
let displayName: String?
init(user: User) {
self.uid = user.uid
self.email = user.email
self.displayName = user.displayName
}
}
Mirzamehdi
08/28/2025, 5:38 PM