mohammad fakhraee
mohammad fakhraee

Reputation: 322

Kotlin Multiplatform: cannot find 'MainViewControllerKt' in scope MainViewControllerKt.MainViewController()

I've updated my multi-module KMP project to use cocoapods according to kotlinlang. But after syncing, building, and running the ios app (either using Android Studio or Xcode 16.2), I encounter the following error:

enter image description here

Inside build.gradle.kts of :composeApp module, I've added the following code:

kotlin {
    cocoapods {
        summary = "Some description for the Shared Module"
        homepage = "Link to the Shared Module homepage"
        version = "1.0"
        ios.deploymentTarget = "16.2"
        podfile = project.file("../iosApp/Podfile")
        framework {
            baseName = "ComposeApp"
            isStatic = false
            transitiveExport = false // This is default.
        }
    }
}

And Podfile inside iosApp directory looks like this:

target 'iosApp' do
  use_frameworks!
  platform :ios, '16.2'
  pod 'composeApp', :path => '../ComposeApp'
end

What I have already tried:

  1. Invalidating cache & restart
  2. Cleaning the project and making it again
  3. Running pod deintegrate then pod install again
  4. The solution said here: Open file *.xcworkspace, then building using +B (which leads to build failure)

Upvotes: 0

Views: 44

Answers (1)

mohammad fakhraee
mohammad fakhraee

Reputation: 322

It seems Android Studio build's log doesn't show the specific errors. By checking the xcode I can see a build issue:

enter image description here

Which the issue is with room's config for IOS. By adding the following line in framework block inside cocoapods block, the build is successfull:

kotlin {
    cocoapods {
        summary = "Some description for the Shared Module"
        homepage = "Link to the Shared Module homepage"
        version = "1.0"
        ios.deploymentTarget = "16.2"
        podfile = project.file("../iosApp/Podfile")
        framework {
            baseName = "ComposeApp"
            isStatic = false
            transitiveExport = false // This is default.
            linkerOpts.add("-lsqlite3") // I had to add this line
        }
    }
}

Upvotes: 0

Related Questions