xcodebuild和xcrun帮助在无头上下文中构建Xcode项目,例如在CI设置中。swift是Swift REPL,主要用于Swift on Server应用程序。因此,我们可以在不了解或不经常使用移动的应用开发工具的情况下构建应用。我没有意识到这一点,因为它们被捆绑在Xcode's Command Line tools中(文档存档,但仍然相关)。 fastlane是一个示例CI工具,它使用这些工具自动化构建过程、证书签名以及与App Store Connect的接口。
swift主要用于Swift on Server。Swift on Server对于服务器应用程序具有很好的性能,具有较低的内存占用、快速的启动时间和确定性的性能。尽管它在某些任务上不如.NET核心那么快,但这是因为Swift具有严格的类型系统、使用ARC的垃圾收集、对于特定于服务器的应用程序的优化较少。许多早期的采用者都称赞Swift改进了语言类型系统、内存效率和算法性能。事实上,Swift vapor在JSON序列化任务的效率上可以与Python和Ruby相媲美。Swift在很少的任务上可以与Java相媲美,但随着语言和生态系统的发展,这种情况可能会改变。
swift --help
# SUBCOMMANDS (swift <subcommand> [arguments]):
# build: SwiftPM - Build sources into binary products
# package: SwiftPM - Perform operations on Swift packages
# run: SwiftPM - Build and run an executable product
# test: SwiftPM - Build and run tests
命令行示例 *
> swift
Welcome to Swift version 5.5.2-dev.
Type :help for assistance.
1> 8 + 9
$R0: Int = 17
2> :quit
#!/usr/bin/swift
// File: example_script.swift
// reminder: chmod to executable before invoking the script
import Foundation
func printHelp() {
print("Please add an argument to the command line. Thanks.")
}
// --- main ---
if CommandLine.argc < 2 {
printHelp()
} else {
for i: Int in 1 ..< Int(CommandLine.argc) {
print( CommandLine.arguments[i] )
}
}
解释和编译脚本执行:
ls -l example_script.swift
# -rwxr--r--@ 1 user staff 321 Dec 30 16:56 example_script.swift
./example_script.swift
# Please add an argument to the command line. Thanks.
./example_script.swift a bcd
# a
# bcd
## Let's compile the script...
swiftc example_script.swift
ls -l ex*
# -rwxr-xr-x 1 user staff 55136 Dec 30 16:57 example_script
# -rwxr--r-- 1 user staff 321 Dec 30 16:56 example_script.swift
./example_script
# Please add an argument to the command line. Thanks.
./example_script xyx
# xyz
2条答案
按热度按时间icnyk63a1#
Tl;灾难恢复
xcodebuild
和xcrun
帮助在无头上下文中构建Xcode项目,例如在CI设置中。swift
是Swift REPL,主要用于Swift on Server应用程序。因此,我们可以在不了解或不经常使用移动的应用开发工具的情况下构建应用。我没有意识到这一点,因为它们被捆绑在Xcode's Command Line tools中(文档存档,但仍然相关)。fastlane
是一个示例CI工具,它使用这些工具自动化构建过程、证书签名以及与App Store Connect的接口。xcode编译
xcodebuild
是Xcode捆绑的命令行工具包的一部分。从manpages:构建Xcode项目和工作区
xcodebuild构建Xcode项目中包含的一个或多个目标,或者构建Xcode工作区或Xcode项目中包含的方案。
xcodebuild
有很多选项和用例。这些选项相当于Xcode IDE中的某些用户操作。用法示例:在Xcode工作区MyWorkspace. xcworkspace中构建方案MyScheme。
在上面的命令中,我们构建了一个没有Xcode的工作区,使用Xcode内部运行的代码进行编译。Xcode只能安装在macOS上,使用它的命令行工具也有同样的限制,包括
xcodebuild
和xcrun
。xcrun函数
xcrun
是Xcode CLI工具中的另一个Xcode命令行工具。从manpages:运行或定位开发工具
xcrun
提供了一种从命令行查找或调用共存和平台感知开发者工具的方法,而无需用户修改makefile或采取其他不便的措施来支持多个Xcode工具链。xcrun
也常与Xcode-select
一起使用,以管理同一台机器上的多个Xcode版本。每个版本的Xcode都捆绑有自己的开发工具,我们可以使用xcrun
来获取它们的当前路径:快速
swift
是Swift REPL。swift
是一个命令行工具,包括Swift工具链,但也可以安装在Xcode捆绑工具之外。swift
不同于xcodebuild
和xcrun
,因为它是Swift而不是C编译的。swift
在MacOS manpages文档中没有详细说明,但是,Apple在其blog上记录了这些工具:Xcode 6.1引入了另一种方式来实验Swift,即交互式读取评估打印循环(REPL)。
REPL本质上是一个交互式编译环境或shell。首先,REPL读取代码,然后对其求值,打印,并重复该过程。正如你所想象的,与IDE相比,我们可以使用REPL开发的东西要少得多。然而,除了iOS、watchOS和macOS开发之外,Swift还有其他用例。
swift
包括standard library,但不包括Foundation
和UIKit
等库。这些Swift库几乎肯定是iOS或macOS开发所需的,因此我们无法单独使用swift
REPL开发应用。然而,Swift on Server项目经常使用swift
在Linux甚至Windows机器上运行Swift代码。为了获得更广泛的应用,苹果已经在Xcode还没有的不同操作系统上提供了
swift
。Swift现在也有Docker support和Windows。Docker使我们能够在任何机器上运行swift
,而不管底层操作系统是什么。swift
在这些应用程序中充当了一种 * 脚本 * 语言。针对SoS的附加注解
swift
主要用于Swift on Server。Swift on Server对于服务器应用程序具有很好的性能,具有较低的内存占用、快速的启动时间和确定性的性能。尽管它在某些任务上不如.NET核心那么快,但这是因为Swift具有严格的类型系统、使用ARC的垃圾收集、对于特定于服务器的应用程序的优化较少。许多早期的采用者都称赞Swift改进了语言类型系统、内存效率和算法性能。事实上,Swift vapor在JSON序列化任务的效率上可以与Python和Ruby相媲美。Swift在很少的任务上可以与Java相媲美,但随着语言和生态系统的发展,这种情况可能会改变。tzdcorbm2#
执行
将
xcrun
视为一个 * 方便的前缀 *,用于调用 * 当前活动 * Xcode工具链中的各种命令行工具。同一台机器上可以安装多个Xcode工具链(例如最新版本、测试版和/或旧版)。使用
xcode-select
设置要使用的Xcode工具链路径。或者,可以通过设置环境变量SDKROOT
和DEVELOPER_DIR
来指定活动的开发者工具链可以使用
xcrun
调用的工具包括:xcrun simctl <subcommand>
~ iOS模拟器控件xcrun xcodebuild …
~构建/测试Xcode项目和工作空间xcrun xctrack <commands> [options]
~记录、导入和导出仪器.trace文件xcode编译
将
xcodebuild
视为一个命令行工具,专门用于 * 利用多个其他工具来管理整个项目构建流程 *。调用xcodebuild
将执行多个任务,就像创建和/或测试项目时Xcode GUI菜单中的Build
或Test
一样。注意:
xcodebuild
可以在没有后续xcrun
的情况下调用。快速
将
swift
(单独)视为swiftc
编译器的解释型、交互式、可脚本化的“REPL”版本。然后,扩展范围,将
swift
视为扩展生态系统的基础,该生态系统不需要Xcode(除非需要AppleOS SDK来针对Apple硬件)。注:Swift REPL与LLDB调试器结合使用,因此在REPL会话期间,
:
位于help
和quit
等命令之前。脚本
example_script.swift
文件:解释和编译脚本执行:
REPL:读取评估打印循环