导入Swift Package Manager依赖项时出现“无此模块”错误

时间:2019-07-23 13:54:22

标签: cocoapods swift-package-manager xcode11

我正在运行Xcode 11 Beta 4。 我正在使用CocoaPods,并希望将Swift Package Manager的依赖项之一用作静态库而不是框架。 在使用Xcode 11创建的新项目中,可以成功导入依赖项,但是在我现有的CocoaPods工作区中则不能。

我认为这可能是相关的,但我也在Xcode中收到此链接警告:

directory not found for option '-L/Users/username/Library/Developer/Xcode/DerivedData/App-axanznliwntexmdfdskitsxlfypz/Build/Products/Release-iphoneos

我去查看发出警告后目录是否存在,并且确实存在。 除了CocoaPods的存在,我发现新创建的项目与旧项目之间没有任何有意义的区别。

不胜感激任何指针。

10 个答案:

答案 0 :(得分:22)

基于@AlexandreMorgado的答案,似乎最好在编译源代码之前的构建阶段中运行此脚本。然后在存档时起作用。

enter image description here

if [ -d "${SYMROOT}/Release${EFFECTIVE_PLATFORM_NAME}/" ] && [ "${SYMROOT}/Release${EFFECTIVE_PLATFORM_NAME}/" != "${SYMROOT}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/" ] 
then
  cp -f -R "${SYMROOT}/Release${EFFECTIVE_PLATFORM_NAME}/" "${SYMROOT}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/"
fi

答案 1 :(得分:15)

通过Swift Package Manager添加库(在我的情况下为FASwiftUI)之后,我不得不将其添加到

项目设置->常规->我的目标-> Frameworks, Libraries, and Embedded Content

在import语句中可见。

我没有添加任何脚本来使其正常工作。

答案 2 :(得分:14)

事实证明,Swift软件包管理器隐式依赖于项目的配置名称。我在实时/质量检查中使用了它们,而不是在“发布/调试”中使用了,然后将它们改回来解决了该问题。很奇怪,但是我希望它可以为您节省一些麻烦,亲爱的读者。

答案 3 :(得分:8)

在解决这个问题的整整一周之后,我使用方案和预行动开发了一种解决方法。

我有一个名为“ Beta”的配置,因此Xcode无法编译SPM依赖项。我意识到Xcode可以作为Swift模块来编译SPM依赖关系,并将文件添加到DeriverData的Build / Products / Release-iphoneos文件夹中。

所以我用Xcode创建了一个方案,并在构建前操作中添加了这个运行脚本:

enter image description here

cp -f -R "${SYMROOT}/Release${EFFECTIVE_PLATFORM_NAME}/" "${SYMROOT}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/"

此脚本在构建过程之前运行,在我的情况下,将Xcode生成的文件和模块在默认的 Release-iphoneos 文件夹中保存到配置文件夹 Beta-iphoneos 中。

在将Release-iphoneos的内容处理到$ configuration $ -iphoneos文件夹后,Xcode应该正确地编译,构建和运行您的项目。

答案 4 :(得分:2)

我刚遇到一个类似的问题,发现我的方案引用了旧的配置,而这些配置已不存在。将它们更新为正确的配置后,构建成功。

(我要在原始帖子发表一年多之后才发表此评论。我遇到的内容可能与最初报告的内容完全不同。但是,我花了相当长的时间才能找到问题所在,所以我想留下一张便条,以节省其他人的时间。)

答案 5 :(得分:2)

我正在开发一个 Swift 包,它必须向导入它的任何人提供 FontAwesome 图标。

我在 SwiftUI 预览画布中收到“没有这样的模块‘FASwiftUI’”。

我通过将“FASwiftUI”添加到包文件中的依赖项数组来解决它,如下所示:

// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "PackageName",
    platforms: [
        .macOS(.v11),
        .iOS(.v14)
    ],
    products: [
        // Products define the executables and libraries a package produces, and make them visible to other packages.
        .library(
            name: "PackageName",
            targets: ["PackageName"])
    ],
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        .package(url: "https://github.com/nalexn/ViewInspector", from: "0.8.1"),
        .package(url: "https://github.com/mattmaddux/FASwiftUI", from: "1.0.4")
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages this package depends on.
        .target(
            name: "PackageName",
            dependencies: ["FASwiftUI"], // <<<--------- Added this here
            resources: [
                .process("Assets")
            ]
        ),
        .testTarget(
            name: "PackageNameTests",
            dependencies: ["PackageName", "ViewInspector"])
    ]
)

答案 6 :(得分:1)

什么对我有用:我删除了 import WebMIDIKit 行并重新添加了它。

答案 7 :(得分:0)

清除派生数据解决了我的问题。我有Microsoft Azure Devops CI Pipeline,要清除派生数据,我必须编辑Xcode生成任务,并在“操作”字段中添加以下命令:function initialName(firstLetterFirstName, firstLetterLastName) { 'use strict' let x = firstLetterFirstName.charAt(0).toUpperCase(); let y = firstLetterLastName.charAt(0).toUpperCase(); return x + '.' + y; } console.log(initialName('momin', 'riyadh')); // M.R

答案 8 :(得分:0)

我刚从命令行运行 xcodebuild 时遇到了类似的问题。我正在通过 CONFIGURATION_BUILD_DIR=build 但发现它需要是一个绝对路径CONFIGURATION_BUILD_DIR=$(pwd)/build 解决了问题。

答案 9 :(得分:-1)

为了使增量构建正常工作,我必须指定“ Fix SPM”构建阶段的输出文件,如下所示:enter image description here