- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
动机: 能够生成一个基于 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) 包:
TinkerEvalStaticLib
⇗以 swift package init --type library
为起点。TinkerEvalStaticCli
⇗以 swift 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") ),
],
…
观察:
TinkerEvalStaticCli
目录中,swift build
将创建一个独立的可重定位、静态链接的可执行文件。prompt> ./TinkerEvalStaticCli_spm
Library says, 'Hello.'
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/
我按照 Vapor Website Docs 创建了 hello 项目。 VaporDocs 在hello项目路径下,在终端输入swift build。但是当打开 Package.swift 时,Xc
我正在使用 xcodeproj 将静态库添加到我的 xcodeproject,我在 new_file 方法中遇到错误错误是:normalize_source_tree': [Xcodeproj] Un
在版本控制下包含 Xcode 项目时的最佳实践是什么。 最佳答案 这就是我的 Global .gitignore文件,您可以将其视为 gist在 GitHub 上,但 Xcode 列表可以应用于其他系
以下文件与项目设置无关,对吗?它只是 Xcode IDE 的属性。 *.mode1v3 *.pbx用户 最佳答案 所有*.mode*、*.pbxuser和*.perspective*文件都可以安全地丢
所有 .h 和 .m 文件都位于我正在开发的特定应用程序的文件夹中,但 xcodeproj 文件失踪了,尽管我在不到一周前就完成了它。在 Finder 中查找不会显示它(尽管它显示了许多其他 xcod
我知道这听起来有点奇怪,但我需要自动生成一个 xcodeproj。 基本上扫描文件系统并将某些文件添加到项目和特定目标。 这背后的主要原因是我在零 IDE 环境中工作。因此,我们有自己的构建系统,源文
我尝试在命令行中构建和编译我的xcodeproj,它现在正在工作。 那么也可以从终端而不是 Xcode 启动 xcodeproject 吗? 最佳答案 如果您想从命令行运行应用程序,请使用 open
我正在使用 xcodeproj Ruby Gem 向我的 Xcode 项目添加自定义框架: top_group = project.groups[0] framework_ref = top_grou
我查遍了互联网并尝试了我能想到的一切来更改 .xcodeproj 名称 - 例如:http://prntscr.com/6xrms6 但这一切只会使 Xcode 崩溃,然后当我重新打开它时,我的应用程
所以我正在尝试运行示例 xcode 项目 here .但是,我似乎无法运行它。当我按下运行时它只是说构建成功并且没有启动应用程序?知道为什么吗? 最佳答案 GMGridView 项目构建了一个库,而不
我有名为 A.xcodeproj、B.xcodeproj、C.xcodeproj 的项目 现在有什么问题,在项目A的AppDelegate中,有条件地打开项目B和C。 int run; run = 0
我需要通过命令行从我的 Xcode 项目中删除对某些文件的引用。我正在尝试使用 ruby 库 Xcodeproj,但我不明白该怎么做: proj = Xcodeproj::Project.open
我已经从github下载了该项目,但是无法运行该项目。我已经在系统上安装了cocoapods,但不知道如何与这样的现有项目集成。 最佳答案 我遇到此问题是因为我的cocoapods的安装方式不正确。我
有人向我发送了一个项目文件夹,因为我签订了帮助处理它的契约(Contract)。该项目运行和编译没有任何问题,但是当我尝试运行它时出现问题。当我打开工作区时,xcodeproj 文件是红色的,并且没有
有没有办法通过脚本/命令行从 xcodeproj 中删除构建配置和方案,而无需在文本编辑器中编辑 (project.pbxproj) 希望它不会交叉验证和影响构建。 我试过xcodeproj它允许您读
在我的 iOs 应用程序中,我使用的是来自谷歌的静态库。我从他们的 git 存储库中提取了源代码,并将该项目链接为我的应用程序的子项目。 我需要更改有关跳过安装的库项目设置中的一些构建标志和设置。但是
当我尝试使用 Xcodeproj 时,我发现了一个错误,可能是因为滥用了 API。你能指出我做错了什么吗? require 'xcodeproj' project = Xcodeproj::Proje
我的 Xcode 6.1.1 有一些有趣的问题,比如 xcodeproj 文件上的蓝色图标消失了,我已经安装了数千次新版本,但这不是解决方案。我也试图找到一些关于它的话题,但真的什么都没有! 最佳答案
我正在尝试在我的项目中运行一个 Playground 。问题是该项目包含数千个紧密耦合的文件。我创建了一个 cocoa touch 框架,我可以导入它以利用 playground 中的应用程序源。唯一
设置 : Xcode 4.3.1(或 5.x) OS X 10.7.3 我使用此设置在两台独立的新型 Mac 上重现了此问题。 步骤 : 创建一个新的 Mac“Cocoa 应用程序”Xcode 项目。
我是一名优秀的程序员,十分优秀!