Thread
#multiplatform
    z

    zsperske

    2 years ago
    Wondering if anyone has run into an issue like this when trying to build for a real iPhone target.
    Undefined symbols for architecture arm64:
      "_OBJC_CLASS_$_SharedCodeEventUiModel", referenced from: objc-class-ref in EventUI.o
    I assume I need to change my gradle setup but I'm unsure what exactly I need to change.
    I was able to get the app to install by changing my
    iosPreset
    value to
    iosArm64
    but I'm now running into a crash when the app actually starts:
    dyld: Library not loaded: @rpath/SharedCode.framework/SharedCode
    yousefa2

    yousefa2

    2 years ago
    In (xcode -> project settings -> Select target -> general -> frameworks, libraries and embedded content), you should see your shared KMP module. Make sure you select one of the embed options.
    z

    zsperske

    2 years ago
    I didn't have it set to embed & sign (it was set to do not embed) unfortunately I still see the same crash. Is there a way to verify I'm bringing in the right framework?
    right now its called
    Pods_MyApp.framework
    yousefa2

    yousefa2

    2 years ago
    Are you packaging your KMP module as a framework or as Cocoapod? Each have a different setup and the name
    Pods_MyApp.framework
    implies you are using Cocoapods.
    z

    zsperske

    2 years ago
    my gradle setup is based on a dated example and I'm not very familiar with how it works
    kotlin {
        targets {
            fromPreset(presets.android, 'android')
    
            final def iOSTarget = System.getenv('SDK_NAME')?.startsWith("iphoneos") \
                              ? presets.iosArm64 : presets.iosX64
    
            fromPreset(iOSTarget, 'ios') {
                binaries {
                    framework()
                }
            }
        }
    
    ...
    
    task packForXCode {
        def buildType = project.findProperty("kotlin.build.type") ?: "DEBUG"
        dependsOn "link${buildType.toLowerCase().capitalize()}FrameworkIos"
    
        doLast {
            def srcFile = kotlin.targets.ios.binaries.getFramework(buildType).outputFile
            def targetDir = getProperty("configuration.build.dir")
            copy {
                from srcFile.parent
                into targetDir
                include 'SharedCode.framework/**'
                include 'SharedCode .framework.dSYM'
            }
        }
    }
    thanks for the help so far, if you know of some docs I should be reading, I'd be happy to read those instead
    yousefa2

    yousefa2

    2 years ago
    Looks like it’s packaged as a framework called
    SharedCode
    .. have a look at this https://play.kotlinlang.org/hands-on/Targeting%20iOS%20and%20Android%20with%20Kotlin%20Multiplatform/06_SettingUpKotlinFramework . It contains all the steps needed.
    z

    zsperske

    2 years ago
    much appreciated!
    worked perfectly, thank you!
    hey @yousefa2 sorry to bug you again, but do you have any experience with building an archive to upload to test flight? performing that build leads me to a compilation error claiming "no such module: "'SharedCode' " on an
    import SharedCode
    in one of my swift files