l -*_*c l 5 xcode swift swift-package-manager
动机:能够生成一个基于 SPM 的静态库 Xcode 项目会很有用,该项目可以从另一个(不是基于 SPM 的)Xcode 项目中引用。generate-xcodeproj似乎是一种合理的尝试方法,但是,generate-xcodeprojcreates 是一个动态框架项目,而不是一个静态库项目。
问题:在 之后generate-xcodeproj,需要哪些 Xcode 步骤(对于 Xcode 9 和 Swift 4)将type: .staticSwift 包库静态链接到一个简单的命令行二进制可执行文件中……类似于相应的swift build?
换句话说,如何最终得到一个 SPM 生成的静态库 Xcode 项目,它可以用作非 SPM Xcode 项目中的子项目。
目标:使用 Xcode 生成静态链接的可执行文件,就像swift build从命令行生成的内容一样……为同一个模块产品。
问题是generate-xcodeproj生成的项目创建了一个动态链接的产品(非预期),同时swift build生成了一个静态链接的产品(如预期的)。
示例:考虑两个 Swift Manager Packages (SPM) 包:
TinkerEvalStaticLib? 以swift package init --type library作为起点。TinkerEvalStaticCli? 以swift package init --type executable作为起点。TinkerEvalStaticLib很简单并且明确设置为 type .static。
TinkerEvalStaticLib.swift
public class TinkerEvalStaticLib {
public static func printSomething() -> String {
let s = "Library says, 'Hello.'"
print(s)
return s
}
}
Run Code Online (Sandbox Code Playgroud)
包.swift
…
products: [
.library(name: "TinkerEvalStaticLib",
type: .static, // expressly set to be a static library
…
Run Code Online (Sandbox Code Playgroud)
TinkerEvalStaticCli也很简单,并且具有TinkerEvalStaticLib依赖项。
main.swift
import TinkerEvalStaticLib
let _ = TinkerEvalStaticLib.printSomething()
Run Code Online (Sandbox Code Playgroud)
包.swift
…
name: "TinkerEvalStaticCli",
dependencies: [
.package(
url: "git@github.com:VaporExamplesLab/TinkerEvalStaticLib.git",
.branch("master") ),
],
…
Run Code Online (Sandbox Code Playgroud)
观察:
TinkerEvalStaticCli目录中,swift build将创建一个独立的可重定位、静态链接的可执行文件。prompt> ./TinkerEvalStaticCli_spm
Library says, 'Hello.'
Run Code Online (Sandbox Code Playgroud)
swift package generate-xcodeproj会创建一个动态链接的可执行文件,该可执行文件需要单独的库。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
Run Code Online (Sandbox Code Playgroud)
注意:人们会期望swift package generate-xcodeproj生成的 Xcode 项目会构建一个静态链接的二进制文件(而不是动态链接的二进制文件),类似于由相应的swift build. 因此,这个问题是针对当前 SPMgenerate-xcodeproj限制的一种解决方法。
小智 0
Swift 包模型不是与 Xcode 模型的一对一映射,因此存在一些差异。该generate-xcodeproj命令适用于喜欢在 Xcode IDE 中工作的开发人员。也就是说,我们确实需要将生成的 Xcode 项目从框架移动到静态库,以便有更多相似之处。
我建议使用swift build创建实际的静态链接二进制文件。
| 归档时间: |
|
| 查看次数: |
686 次 |
| 最近记录: |