如何在Xcode中构建命令行应用

我最近在Xcode中为命令行创建了一个代码练习,但是遇到了很多配置问题。 最后,我能够构建两个目录,一个目录用于可执行文件,另一个目录用于测试并容纳所有代码。 在本快速教程中,我将引导您通过Terminal设置命令行项目。 这将使用Swift Package Manager,因此我将使用它生成的默认代码。 跳到底部,可以查看有关如何允许用户输入.txt文件名并允许Terminal打印其内容的非常快速的教程。

 本文使用: 
Xcode版本9.2
Apple Swift版本4.0.3

首先,打开两个终端窗口并输入以下内容:

  mkdir CommandLineAppDirectory 
cd CommandLineAppDirectory /
mkdir CommandLineApp
mkdir CommandLineAppExe

到目前为止,非常简单,设置一个目录文件夹,导航到其中,并创建两个文件夹,其中一个附加了Exe,这样我们就知道哪个是可执行文件。 接下来,让我们设置我们的CommandLineApp。 我们将最后保存可执行文件。

  cd CommandLineApp / 
swift package init --type库
快速测试
迅捷包generate-xcodeproj
打开CommandLineApp.xcodeproj /

Swift Package Manager的库包设置了使球运转所需的一切。 它将为您提供Package.swift文件,Sources目录和Tests目录。 swift test将构建并测试您的项目,因此您可以通过命令行从根目录进行测试。 生成Xcode项目并打开它后,便可以使用⌘+ U进行构建和测试。 它会自动具有一个示例测试和主文件,供您查看它的工作原理。 打开CommandLineApp.swift文件并添加一些公共级别的代码,以便Exe可以访问它。

 公共结构CommandLineApp { 
public var text =“您好,世界! 我已经成功创建了一个可测试的项目!” public init(){}}

现在我们有了要使用的文件,我们将初始化一个git repo,以便我们可以分配一个在可执行文件中引用的标签。

  git状态 
git添加
git commit -m“初始提交”
git标签1.0.0

现在已经提交了,让我们设置可执行文件。 我为Exe有一个单独的终端窗口。

  cd CommandLineAppDirectory / 
cd CommandLineAppExe /
swift package init --type可执行文件
swift run // 不需要,只是为了表明它马上就可以运行了。
迅捷包generate-xcodeproj
打开CommandLineAppExe.xcodeproj /

现在我们已经构建了一个可执行文件,可以说它是从Terminal快速构建的。 进入Xcode项目后,打开Package.swift。 您应该看到类似下面的内容。

 导入PackageDescriptionlet包=包( 
名称:“ CommandLineAppExe”,
依赖项:[
.package(网址:“ ../ CommandLineApp”,来自“ 1.0.0”)
目标:[
。目标(
名称:“ CommandLineAppExe”,
依赖项:[“ CommandLineApp”]),
]

要连接到该应用程序,您将在上面添加粗体和斜体的代码行。 由于CommandLineApp和CommandLineAppExe都在同一目录中,因此该URL将返回一个目录,然后进入我们的应用程序项目。 1.0.0是我们之前建立的git标签。 重要的重要说明,您对应用程序项目所做的任何更改都必须添加,提交和分配新的git标签,然后在您的Exe包中对其进行更新。 不要忘记将您的应用程序添加为目标依赖项。

接下来,进入exe的main.swift文件,并添加以下代码。 可执行项目将不会在Xcode中构建,但将在Terminal中运行。

 导入CommandLineApplet应用程序= CommandLineApp() 
打印(app.text)

现在,返回到CommandLineAppExe的“终端”窗口。

  文件夹:CommandLineAppExe快速运行预期的反馈: 
你好,世界! 我已经成功创建了一个可测试的项目!

此时,您的项目应成功运行。 剩下的就是测试我们的工作。 让我们切换到CommandLineApp目录并运行以下命令:

  文件夹:CommandLineApp快速测试 

凉! 一切正常! 但是,如果您像我一样,您的测试可能已经运行,但测试可能失败了。 原因很简单,我们将之前的文本“ Hello,World!”更改为“ Hello,World!”。 我已经成功创建了一个可测试的项目!”。 如果您查看测试,它仍在检查XCTAssertEqual(“ Hello,World!”)。 只需更新文本!


oo! 您刚刚创建了一个可测试且可执行的项目! 现在,您已经配置了所有内容,可以随时使用所有代码更新App项目。 准备好提交更改后,请确保添加,提交和创建新的git标签,然后更新Exe软件包中的git标签。


奖励内容以打印文件:

  // CommandLineApp CommandLineApp.swiftimport Foundationpublic struct CommandLineApp { 
公共静态函数运行(文件名:字符串){
做{
让文件=尝试字符串(contentsOfFile:fileName)
打印(文件)
} {
打印(“读取文件时出错。”)
}
}
}

本质上,您在主源代码项目中使用了一个函数,该函数接收一个字符串参数,并使用try String(contentsOfFile :)进行打印。

  // CommandLineAppExe main.swiftimport CommandLineAppCommandLineApp.run(fileName:CommandLine.arguments [1]) 

打开您的Exe项目的main.swift文件。 由于CommandLineApp使用静态函数,因此您只需要在Exe文件中说CommandLineApp.run。 CommandLine.arguments [1]允许用户在Terminal中键入要输入到函数中的参数。


现在,您要做的就是在CommandLineAppExe目录的根目录中的Terminal中键入以下内容:

  // CommandLineAppExe根目录触摸data.txt 
vim data.txt //输入一些内容快速运行CommandLineAppExe data.txt

在那里,您有了data.txt文件的内容!