我正在运行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的存在,我发现新创建的项目与旧项目之间没有任何有意义的区别。
不胜感激任何指针。
答案 0 :(得分:22)
基于@AlexandreMorgado的答案,似乎最好在编译源代码之前的构建阶段中运行此脚本。然后在存档时起作用。
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创建了一个方案,并在构建前操作中添加了这个运行脚本:
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)