首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

未解析的引用:添加依赖项后iosMain目录中的正方形

这个问题看起来是在使用Kotlin Multiplatform进行跨平台开发时遇到的,特别是在iOSMain源集中遇到了“未解析的引用”错误,且涉及到“正方形”这个可能是自定义的类或函数。

基础概念

Kotlin Multiplatform 是一种允许开发者使用Kotlin语言编写共享的业务逻辑代码,并在多个平台上运行的技术。iOSMain目录通常用于存放针对iOS平台的特定代码。

未解析的引用 是一个编译错误,意味着编译器在当前作用域内找不到某个标识符(如类、函数、变量等)的定义。

可能的原因及解决方案

1. 依赖项未正确添加

确保你在项目的build.gradle.kts文件中正确添加了所有必要的依赖项。

代码语言:txt
复制
kotlin {
    ios()
    sourceSets {
        val iosMain by getting {
            dependencies {
                // 添加你的依赖项
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
                // ... 其他依赖项
            }
        }
    }
}

2. 导入语句缺失

检查你的Kotlin文件顶部是否正确导入了所需的类或包。

代码语言:txt
复制
import com.example.myapp.Square // 假设Square类在com.example.myapp包中

3. 目标平台不匹配

确保你添加的依赖项支持iOS平台。有些库可能只支持JVM或Android,而不支持iOS。

4. 同步Gradle项目

在添加或修改依赖项后,确保同步Gradle项目以使更改生效。

5. 清理并重建项目

有时,旧的编译缓存可能导致问题。尝试清理项目并重新构建。

代码语言:txt
复制
./gradlew clean build

6. 检查模块间的可见性

如果你在不同的模块中定义了Square类,确保该模块对iOSMain源集是可见的,并且正确配置了模块间的依赖关系。

示例代码

假设你有一个跨平台的Kotlin Multiplatform项目,并且你想在iOSMain中使用一个名为Square的类。

commonMain/Square.kt

代码语言:txt
复制
package com.example.myapp

class Square(val sideLength: Double) {
    val area: Double get() = sideLength * sideLength
}

iosMain/Main.kt

代码语言:txt
复制
package com.example.myapp

import platform.UIKit.UIDevice

fun main() {
    val square = Square(5.0)
    println("Square area: ${square.area}")
    println("Running on ${UIDevice.currentDevice.systemName} ${UIDevice.currentDevice.systemVersion}")
}

build.gradle.kts

代码语言:txt
复制
plugins {
    kotlin("multiplatform") version "1.5.31"
}

repositories {
    mavenCentral()
}

kotlin {
    ios()
    sourceSets {
        val commonMain by getting
        val iosMain by getting {
            dependencies {
                implementation(kotlin("stdlib-common"))
            }
        }
    }
}

确保以上配置正确无误,并且所有文件都已保存。然后尝试重新构建项目。

应用场景

Kotlin Multiplatform适用于需要共享逻辑代码的跨平台应用,如移动应用(iOS和Android)、桌面应用、Web应用等。通过这种方式,开发者可以减少重复代码,提高开发效率,并保持各个平台间的一致性。

希望这些信息能帮助你解决问题!如果还有其他疑问,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《深度解析 C++中的弱引用(weak reference):打破循环依赖的利器》

例如,在复杂的对象关系网络中,可能会出现循环引用的情况。想象有两个类 A 和 B,A 类中有一个 B 类对象的指针或引用,同时 B 类中也有一个 A 类对象的指针或引用。...如果对象已经被销毁了,那么弱引用就会告诉我们这个事实,而不会像强引用那样导致程序错误。 三、弱引用的实际意义 (一)在数据结构中的应用 在一些复杂的数据结构中,比如图结构。...但是,如果缓存中的对象被其他部分的代码通过强引用持有,那么即使这些对象在缓存中已经不再需要,它们也不会被释放。...普通指针在指向的对象被销毁后就会变成悬空指针,如果继续使用会导致未定义行为。而弱引用可以通过一些方式(在 C++中通过相关的库机制)来安全地判断对象是否还可用。...另外,弱引用的实现通常依赖于特定的库或者语言特性,不同的 C++实现环境可能会有一些细微的差别,所以在使用时要充分了解所在环境对弱引用的支持情况。

14310
  • KMM跨平台开发入门,看这一篇就够了~

    共享模块由三个源集组成:androidMain、commonMain 和 iosMain。 源集是一个 Gradle 概念,用于逻辑上组合在一起的多个文件,其中每个组都有自己的依赖项。...android和iOSMain, 这些是来自相关生态系统的常规库。 可以使用 CocoaPods 或其他依赖项管理器的原生 iOS 项目和使用 Gradle 的 Android 项目中使用。...是不是有点似曾相识~  这一部分是公共逻辑,在shared目录中的build.gradle.kts文件中添加配置如下 val commonMain by getting{     dependencies...在iOS手机中运行的效果也是一致的。 好吧,这个例子太简单了,稍微来个实用点的例子~ 实现网络请求功能 添加依赖 不管什么业务肯定要用到网络请求的功能,我们来看这部分的公共逻辑该怎么处理。...目录下添加对应Ktor库,代码如下所示。

    4.7K20

    KotlinNative KMM项目架构

    6.1 sdkframework模块的iosMain需要有一个kotlin文件 如果iosMain没有kotlin文件,将无法生成 iOS framework,为其添加一个文件即可,如SDKTest.kt...fun test() { } } 6.2 生成头文件sdkframework.h时,把注释也带上 生成头文件sdkframework.h时,如果需要把注释也带上,那需要在gradle中添加...export来导出到sdkframework.h头文件中 sdkframework依赖了utils、alog、PlatformMMKV、business,需要添加export,把这几个模块的类和方法导出到...sdkframework.h头文件中,这样iosApp才可以使用这几个模块的类和方法。...上面说到的第1点本地构建,在iosApp本地依赖构建sdkframework时,要将依赖项正确导入 Kotlin/Native 模块,Podfile必须包含use_modular_headers!

    3.3K00

    Compose也能开发iOS了,快来体验~

    创建好KMM项目后我们需要添加Compose跨平台的相关配置。...gradle.properties中的,代码如下所示: compose.version=1.3.0 然后我们在shared模块中的build文件中引用插件 plugins { kotlin("multiplatform...开始iOS之旅 我们替换掉iOSApp.swift中的原有代码,替换后的代码如下所示: import UIKit import shared @UIApplicationMain class AppDelegate...= Main_iosKt.MainViewController() Main_iosKt.MainViewController是通过新建在shared模块iOSMain目录下的main.ios.kt文件获取的...添加网络请求配置 首先在shared模块下的build文件中添加网络请求相关的配置,这里网络请求我们使用Ktor,具体的可参照之前的文章:KMM的初次尝试~ 配置代码如下所示: val commonMain

    1.4K30

    Hello World —— 使用 Kotlin 开发跨平台应用

    文件下载,读写数据库,从远程服务器获取数据,解析远程数据等等。所以我们为什么不只写一次业务逻辑代码,在不同的平台上共享呢?...设置工程名称,最低 SDK,文件目录,包名等。 现在,你需要等待工程的第一次构建,需要花费一些时间去下载和设置必要的组件。...实现 iosMain 下存储 iOS 的特定代码,包括 actual 实现 每一个源集都有自己的依赖,Kotlin 标准库依赖会自动添加到所有源集,你不需要在编译脚本中声明。...首先,在 common 模块中使用 expect 关键字声明一个空的类或函数,就像创建接口或者抽象类一样。然后,在所有的其他模块中编写平台特定代码来实现对应的类或函数,并用 actual 修饰。...Android 复习笔记目录 唠唠任务栈,返回栈和启动模式 唠唠 Activity 的生命周期 扒一扒 Context 为什么不能使用 Application Context 显示 Dialog?

    2.1K20

    谷歌社区说|聊聊Compose跨平台与KMM

    安装好插件后,打开Android Studio我们可以直接创建支持KMM的项目。 创建的时候会让我们填写模块的信息 创建好项目后,生成的项目目录结构是这个样子的。...首先我们要在commonMain中使用expect定义这个接口 然后我们在shares模块下的androidMain、iOSMain目录下各自实现打开蓝牙的方法。...所以我们我们现在如果想使用Kotlin全平台有两种方式: 使用IDEA创建项目,添加KMM依赖配置 使用Andrioid Studio创建项目,添加Compose Multiplatform的配置 使用官方提供的模板项目...Main_iosKt.MainViewController是通过新建在shared模块iOSMain目录下的main.ios.kt文件获取的,代码如下所示: 所以,我们可以在shared模块中的commain...目录下编写解析网络数据并现实的Compose方法,然后在Application下调用就行了。

    1.4K10

    以对象为中心和MDL原则处理ARC挑战 2023

    因此,我们在网格模型中添加了两个成分(通常是输出模型):对网格描述(通常是输入描述)的组件的引用,以及函数应用,以允许一些输出组件成为计算结果。...在这两种操作中,首先使用描述作为评估上下文(称为环境,记为ε)来解析模型M中的引用。具体来说,每个引用都是ε中的一个路径,并被替换为此路径末尾的子描述。然后对这些引用应用的函数进行评估。...排名ρ的原因是解析和生成是多值的。 预测模式在模型学习后,在测试案例的评估阶段使用,通过预测给定输入网格的输出网格。...项L(π | M, ε)测量了必须添加到模型和环境以编码描述的信息量,通常是未知数的值。项L(g | π)测量了原始网格和描述产生的网格之间的差异。...我们给未知数的概率低于构造器,给引用/函数的概率更高,以鼓励更具体的模型,并使输出依赖于输入。 定义L(π | M, ε)相当于编码模型中未知的描述组件。

    12810

    Rust 1.51.0 已正式发布,及其新特性详述

    Cargo 新特性 resolver 依赖项管理,是一个困难的问题。其中最困难的部分之一,是当依赖项被两个不同的包所依赖时,选择使用哪个版本的依赖项。...这不仅包括它的版本号,还包括被包所启用,或未启用的特性。Cargo 的默认行为是:在依赖关系图中,当单个包被多次引用时,合并该包的特性。...Rust 1.51.0 版本中,Cargo.toml 中将有一个新的可选域 resolver。您可以通过设置 resolver="2",来告诉 cargo 尝试一种新的方式来解析特性。...我们要感谢 cargo 团队和所有参与者,在设计和实现新的解析器过程中的辛勤工作!...“unpacked” 选项指示 rustc 将 .o 对象文件保留在编译时的输出目录中,而不是删除它们,并跳过运行 dsymutil 的步骤。

    1.3K10

    Go Modules 介绍与基本操作

    03 添加依赖项 Go modules 的主要目的是改进使用其他开发人员编写的代码(即添加依赖项)的体验。...text v0.0.0-20170915032832-14c0d48ead0c PASS ok example.com/hello 0.023s $ go test 命令使用 go.mod 文件中列出的特定依赖项模块版本解析导入...当它遇到 go.mod 文件中任何模块未提供的包的导入时,go 命令会自动通过「最新版本」来备份包含该包的模块并将其添加到 go.mod。...因为构建单个包(如 go build 或 go test)可以轻松地判断何时缺少依赖项并需要添加,但何时可以安全地删除依赖项,只有在检查了模块中的所有包以及这些包的所有可能的生成标记组合后,才能删除依赖项...go get 更新依赖项所需的版本(或添加新的依赖项)。 go mod tidy 删除未使用的依赖项。

    4.4K11

    Go 模块--开始使用Go Modules

    本文介绍了使用模块开发Go代码时出现的一系列常见操作: 创建一个新模块。 添加模块的依赖项。 升级模块的依赖项。 增加依赖项的主版本。 将依赖项升级到新的主版本。 删除未使用的依赖项。...,当遇到未由 go.mod中的任何模块提供的包的导入时, go命令将自动查找包含该软件包的模块,使用其最新的稳定版本,并将其添加到go.mod中。...正如我们在上面看到的,添加一个直接依赖项通常也会带来其他间接依赖项。...-14c0d48ead0c rsc.io/quote v1.5.2 rsc.io/sampler v1.3.0 $ 在 go list的输出中,当前模块也被称为主模块,总是会出现在第一行,后面跟随的是根据模块路径排序后展示的依赖项...go get更改所需依赖的版本(或添加新的依赖)。 go mod tidy删除未使用的依赖项。

    2.6K50

    dotnet restore

    有关详细信息,请参阅常见的 NuGet 配置。 --disable-parallel 禁用并行还原多个项目。 --force 强制解析所有依赖项,即使上次还原已成功,也不例外。...--no-dependencies 当使用项目到项目 (P2P) 引用还原项目时,还原根项目,不还原引用。 --packages 指定还原包的目录。...这用于还原 .csproj 文件中的 标记中未显式列出的运行时的程序包。 有关运行时标识符 (RID) 的列表,请参阅 RID 目录。...示例 还原当前目录中项目的依赖项和工具: dotnet restore 还原在给定路径中找到的 app1 项目的依赖项和工具: dotnet restore ....还原当前目录中项目的依赖项和工具,并显示详细的输出: dotnet restore --verbosity detailed

    1.2K30

    IntelliJ IDEA 2022正式发布!这次打死我也不更了。。

    关键更新 依赖分析器 (Dependency Analyzer) 为了促进依赖管理和冲突解决,IntelliJ IDEA 实现了依赖分析器,它提供项目和子项目中使用的所有依赖项(包括传递性依赖项)的广泛信息...这个新功能允许轻松检测冲突的依赖关系并解决问题,比如可以过滤掉相同的依赖项,并查看它们在不同库中的存在,还可以快速浏览依赖项,以正确构建配置。...Maven 和 Gradle 依赖项中的漏洞。...框架和技术 Go 微服务支持 添加了对 Go 微服务的支持,提供 URL 路径引用、端点、Search Everywhere 和装订线图标等功能。...更好地支持 .proto 文件 为 .proto 文件引入了一个新的意图操作:为未解析的消息引用添加了缺失的导入语句,添加缺少的导入语句后, IDE 将提供消息引用的补全建议。

    3.6K40

    连接器工具错误lnk2019_2019年十大语文错误

    :::no-loc(static):::未定义类的成员 9.生成依赖项仅在解决方案中定义为项目依赖项 10.未定义入口点 11.使用 Windows 应用程序的设置生成控制台应用程序 12.尝试将64位库链接到...查看中间生成输出目录中是否有匹配的 .obj 文件。 如果未编译源文件,请在解决方案资源管理器中右键单击该文件,然后选择 “属性” 以检查该文件的属性。...9.生成依赖项仅在解决方案中定义为项目依赖项 在 Visual Studio 的早期版本中,此级别的依赖项已经足够。...添加项目到项目引用以修复此错误。...它将成功生成所需的所有配置属性和依赖项设置为项目的一部分。 诊断工具 有时很难判断链接器无法找到特定的符号定义的原因。 通常,问题是您在生成中未包含包含定义的代码。

    4.1K20

    使用 Go Modules

    这篇文章介绍了在开发带有模块的 Go 代码时出现的一系列常见操作: 创建新模块 添加依赖项 升级依赖项 在新的主版本上添加一个依赖项 将依赖项升级到新的主版本 删除未使用的依赖项 创建新模块 让我们创建一个新模块...在 GOPATH/src 之外,创建一个新的空目录,cd 到新创建的目录后,创建一个新的源文件 hello.go: package hello func Hello() string { return...添加依赖项 Go 模块的主要目的是改进使用其他开发人员编写的代码的体验。...在新的主版本上添加依赖项 让我们向包中添加一个新的函数:func Proverb 通过调用 quote.Concurrency 返回一个 Go 并发的说明,这个函数由 rsc.io/print/v3 模块提供...go list -m all 打印当前模块的所有依赖项 go get 更改依赖项的版本(或添加新依赖项) go mod tidy 移除未使用的依赖项 我们鼓励您在本地开发中开始使用模块,并在项目中添加

    71330

    GOPATH 模式怎么迁移至 Modules 模式?

    某些项目将其整个 GOPATH 目录存储在单个 Git 存储库中。其他人只是依靠 go get 获取,并期望在 GOPATH 中安装相当新版本的依赖项。...没有任何依赖项管理工具的已建立的 Go 项目。 第一种状态已在「Go Modules 介绍与基本操作」中介绍;我们将在这篇文章中讨论后两种。...它为任何已知模块未提供的包添加新的模块依赖,并删除不提供任何导入包的模块依赖。如果模块提供的包仅由尚未迁移到模块的项目导入,则模块要求将用 // indirect 注释进行标记。....] $ go get rsc.io/binaryregexp@v0.2.0 $ 04 未使用依赖管理工具的项目 对于未使用依赖项管理工具的 Go 项目,首先创建 go.mod 文件: $ git clone...05 在模块模式下测试 迁移到 Go 模块后,某些测试可能需要进行调整。如果测试需要在程序包目录中写入文件,则当程序包目录位于 module cache 时(只读),它可能会失败。

    2.2K20

    sparksql源码系列 | 生成resolved logical plan的解析规则整理

    其中Analyzer定义了从【未解析的逻辑执行计划】生成【解析后的逻辑执行计划】的一系列规则,这篇笔记整理了一下这些规则都哪些。...这意味着,根据CTE定义对任何有效CTE查询的依赖性,可以保证CTE定义按拓扑顺序排列(即,给定CTE定义A和B,B引用A,A保证出现在B之前)。...Resolution fixedPoint 用v2目录中的具体关系解析表关系。...除非此规则将元数据添加到关系的输出中,否则analyzer将检测到没有任何内容生成列。此规则仅在节点已解析但缺少来自其子节点的输入时添加元数据列。这可以确保元数据列不会添加到计划中,除非使用它们。...此规则检测此类查询,并将所需属性添加到原始投影中,以便在排序过程中可用。添加另一个投影以在排序后删除这些属性。HAVING子句还可以使用SELECT中未显示的分组列。

    3.7K40

    Go命令官方指南【原译】

    如果源是原始的本地分支,这可能很有用。 -fix标志指示get在解析依赖项或构建代码之前在下载的包上运行修复工具。...它添加了构建当前模块的包和依赖项所需的任何缺少的模块,并删除了未提供任何相关包的未使用模块。它还将任何缺少的条目添加到go.sum并删除任何不必要的条目。...如果使用-mod = vendor调用,则go命令假定供应商目录包含正确的依赖项副本,并忽略go.mod中的依赖项描述。...用法:go get [-d] [-m] [-u] [-v] [-insecure] [build flags] [packages] 获取解析并将依赖项添加到当前开发模块,然后构建并安装它们。...通常,添加新的依赖项可能需要升级现有的依赖项以保持工作的构建,并且“go get”会自动执行此操作。同样,降级一个依赖项可能需要降级其他依赖项,“go get”也会自动执行此操作。

    8.1K30

    了不起的 tsconfig.json 指南

    当入口文件依赖其他文件时,不需要将被依赖文件也指定到 files 中,因为编译器会自动将所有的依赖文件归纳为编译对象,即 index.ts 依赖 user.ts 时,不需要在 files 中指定 user.ts...umd模块 "moduleResolution": "node", // 模块解析策略,ts默认用node的解析策略,即相对的方式导入 "baseUrl": "./", // 解析非相对模块的基地址...只会编译scr二级目录下的文件 ] } 7. references references 属性作用是指定工程引用依赖。...在项目开发中,有时候我们为了方便将前端项目和后端node项目放在同一个目录下开发,两个项目依赖同一个配置文件和通用文件,但我们希望前后端项目进行灵活的分别打包,那么我们可以进行如下配置: { // ....在后续文章中,我们将这么多的配置项进行分类学习。最后通过几个常见配置示例,解决我们开发中遇到的几个常见问题。

    4K10

    【TS】612- 了不起的 tsconfig.json 指南

    当入口文件依赖其他文件时,不需要将被依赖文件也指定到 files 中,因为编译器会自动将所有的依赖文件归纳为编译对象,即 index.ts 依赖 user.ts 时,不需要在 files 中指定 user.ts...umd模块 "moduleResolution": "node", // 模块解析策略,ts默认用node的解析策略,即相对的方式导入 "baseUrl": "./", // 解析非相对模块的基地址...只会编译scr二级目录下的文件 ] } 7. references references 属性作用是指定工程引用依赖。...在项目开发中,有时候我们为了方便将前端项目和后端node项目放在同一个目录下开发,两个项目依赖同一个配置文件和通用文件,但我们希望前后端项目进行灵活的分别打包,那么我们可以进行如下配置: { // ....在后续文章中,我们将这么多的配置项进行分类学习。最后通过几个常见配置示例,解决我们开发中遇到的几个常见问题。

    2.1K30
    领券