gpt4 book ai didi

swift - 在 generate-xcodeproj 之后,哪些步骤可以将 SPM 生成的 Xcode 项目静态链接为另一个 Xcode 项目中的子项目?

转载 作者:搜寻专家 更新时间:2023-10-31 23:07:43 24 4
gpt4 key购买 nike

动机: 能够生成一个基于 SPM 的静态库 Xcode 项目会很有用 referenced from another (not SPM-base) Xcode project . generate-xcodeproj 似乎是一种合理的尝试方法,但是,generate-xcodeproj 创建的是一个动态框架项目而不是静态库项目。

问题:在generate-xcodeproj之后,需要哪些Xcode步骤(对于Xcode 9和Swift 4)来静态链接一个type: .static Swift Package Library 变成一个简单的命令行二进制可执行文件……类似于相应的 swift build 生成的内容?

换句话说,如何最终得到一个 SPM 生成的静态库 Xcode 项目,该项目可以用作非 SPM Xcode 项目中的子项目。

目标使用 Xcode 生成一个静态链接的可执行文件,就像 swift build 从命令行 生成的一样......对于相同的模块产品。

问题是 generate-xcodeproj 生成的项目创建了一个动态链接的产品(不是预期的),而 swift build 生成了一个静态链接的产品(如预期的那样)。

示例:考虑两个 Swift Manager Packages (SPM) 包:

  1. 静态库:TinkerEvalStaticLibswift package init --type library 为起点。
  2. 命令行可执行文件:TinkerEvalStaticCliswift package init --type executable 作为起点。

TinkerEvalStaticLib 很简单,明确设置为 .static 类型。

TinkerEvalStaticLib.swift

public class TinkerEvalStaticLib {
public static func printSomething() -> String {
let s = "Library says, 'Hello.'"
print(s)
return s
}
}

Package.swift


products: [
.library(name: "TinkerEvalStaticLib",
type: .static, // expressly set to be a static library

TinkerEvalStaticCli 也很简单,并且有 TinkerEvalStaticLib 作为依赖项。

main.swift

import TinkerEvalStaticLib
let _ = TinkerEvalStaticLib.printSomething()

Package.swift


name: "TinkerEvalStaticCli",
dependencies: [
.package(
url: "git@github.com:VaporExamplesLab/TinkerEvalStaticLib.git",
.branch("master") ),
],

观察:

  1. TinkerEvalStaticCli 目录中,swift build 将创建一个独立的可重定位、静态链接的可执行文件。
prompt> ./TinkerEvalStaticCli_spm 
Library says, 'Hello.'
  1. 但是,使用 swift package generate-xcodeproj 创建的 Xcode 项目会创建一个需要单独库的动态链接可执行文件。
prompt> ./TinkerEvalStaticCli_xc 
dyld: Library not loaded: @rpath/TinkerEvalStaticLib.framework/Versions/A/TinkerEvalStaticLib
Referenced from: /Users/…/./TinkerEvalStaticCli_xc
Reason: image not found
Abort trap: 6

注意:人们会期望 swift package generate-xcodeproj 生成的 Xcode 项目会构建一个类似于静态链接的二进制文件(而不是动态链接的二进制文件)由相应的 swift build 生成的链接二进制文件。因此,这个问题是针对当前 SPM generate-xcodeproj 限制的解决方法。

最佳答案

Swift 包模型不是与 Xcode 模型的一对一映射,因此存在一些差异。 generate-xcodeproj 命令适用于喜欢在 Xcode IDE 中工作的开发人员。也就是说,我们确实需要将生成的 Xcode 项目从框架移动到静态库,以便有更多相似之处。

我建议使用 swift build 来创建实际的静态链接二进制文件。

关于swift - 在 generate-xcodeproj 之后,哪些步骤可以将 SPM 生成的 Xcode 项目静态链接为另一个 Xcode 项目中的子项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48363996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com