Tag: Swift软件包管理器

免费持续集成开源Swift软件包

苹果已经发布了自己的软件包管理器,称为“ Swift Package Manager”,以共享和分发Swift软件包。 最好在我们的开源Swift软件包中添加免费的持续集成,以确保代码更改不会破坏任何内容。 幸运的是,TravisCI为您在Github上的所有开源项目提供免费服务。 在这篇简短的文章中,我们将了解如何为Github上的演示包Greeter添加TravisCI支持。 启用TravisCI 如果您已经拥有GitHub帐户和Swift Package,这将很方便,然后我们可以使用Github凭据注册TravisCI服务。 TravisCI将指导您有关为项目启用CI服务的过程。 这是三步过程,如下图所示 基本上,这很简单,我们需要同步github帐户,该帐户将显示我们的所有存储库。 那么您需要在项目的根目录中添加.travis.yml文件。 并使用git push推送构建 添加TravisCI配置 让我们将.travis.yml添加到上面的Greeter示例包中,内容如下。 操作系统: -osx 语言:通用 sudo:必填 dist:可信赖 osx_image:xcode8 脚本: -快速构建 -快速测试 通知: 电子邮件: on_success:从不 on_failure:更改 Travis具有不同的构建环境,我们必须选择安装了所有必要软件组件的最新xcode 8.3映像。 这意味着我们已经在Travis服务器上快速安装了,然后我们需要运行脚本来构建我们的程序包并测试我们的程序包。 我们已经在上面的.travis.yml文件中完成了此操作。 现在,我们增加了对TravisCI的支持,我们需要在T​​ravis上启用项目,并且它将在每次提交或新的Pull请求之后“构建”和“测试”我们的项目。 我们的Greeter示例的Travis项目示例可以在这里找到 有太多选项可用于自定义.travis.yml文件。 您可以在此处阅读有关配置选项的更多信息 如此简单,希望您也将TravisCI服务添加到您的Swift软件包中。 像XCBlog的 XCTEQ 发布的帖子一样 ? 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 在 Github 上 搜索我们的 服务 ,开源项目, 或者在 […]

使用Swift Package Manager ArgumentParser处理命令

在命令行应用程序中解析参数不是一件容易的事。 随着时间的推移,应用程序可以演变为支持许多功能,这使得支持的参数数量大大增加。 例如,令人印象深刻的curl命令行工具具有207个不同的参数选项,包括参数和标志。 大量的选择使curl非常灵活和有力。 但是,它也很难使用。 很难学习和掌握。 较新的命令行工具(例如git , gem , carthage或travis通过将其分组在子命令中来更好地组织其功能。 例子: git clone , git fetch , git branch , git commit , git push … gem install , gem update , gem build … carthage update , carthage build , carthage archive … travis login , travis monitor , travis status … 让我们看看如何使用Swift […]

如何在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 […]

Swift,安全又简单的另一个CoreData堆栈

微调NSPersistentContainer 我时不时地看到苹果公司的代码示例和模板提出了非最佳解决方案。 我发现苹果的代码有问题,CoreData在我列表的顶部。 您可以自己尝试。 创建包含CoreData的任何Xcode项目。 苹果公司的CoreData代码建议使用主线程(视图上下文)来保留数据。 最重要的是,它在AppDelegate中完成。 但是,Apple确实使用这种方法解决了写入冲突,因为我们仅使用一个上下文来保存数据,但是解决写入冲突还不够。 持久数据,无论保存多少数据,都比读取慢得多。 保存数据会执行SQLite COMMIT,即使您只写一个BYTE,也要花费几毫秒的时间。 在主线程上编写将使您的用户界面变得迟钝。 这就是为什么我将CoreData堆栈组织成这样的原因: 我假设您了解有关Apple的NSPersistentContainer全部知识,如果不了解,则需要进行检查。 您需要先设置它并加载存储,然后再创建CoreData堆栈。 在上面的代码中,我在其他文章中使用了一个简单的“变异运算符”。 在我们的基本CoreData堆栈中,我们有3个专用上下文: mainContext只读主上下文,出于所有与UI相关的目的,它会自动观察更改。 writingContext读+写背景上下文,我们只在这里和这里保存数据,其他人只是观察。 readingContext只读的背景上下文,用于非UI用途,当我们必须对后台的更改做出反应时(并非每个人都需要此内容)。 我们从不对后台上下文使用performAndWait ,因为我们的块是在这些上下文的内部队列中异步执行的。 当我们想“关闭”核心数据栈时,我们需要等待内部队列完成后台任务。 这就是为什么我们将背景上下文包装到BackgroundManagedObjectContext并在deinit使用performAndWait取消所有未完成的任务的原因。 除此之外,应使用performTask扩展方法(这是对perform方法的包装)添加所有任务。 苹果提供了在此设置中应避免的方法 func performBackgroundTask(_块:@转义(NSManagedObjectContext)->无效) 问题是,如果使用此方法进行写操作,则会发生写冲突,因为每次都会使用其自己的内部串行队列创建一个新的上下文。

Apple Swift套件管理员:深入研究

苹果已经发布了自己的软件包管理器,称为“ Swift Package Manager”,以共享和分发Swift软件包。 很高兴知道Apple正在努力替代iOS开发世界中当前最受欢迎和最讨厌的软件包管理器,即CocoaPodsand Carthage。 在本文中,我们将介绍软件包管理的基础知识,并深入研究iOS中的软件包管理,尤其是Swift Package Manager。 当前的iOS软件包管理器 大多数现代语言都带有用于代码分发的官方解决方案,例如Ruby的RubyGems,PHP的Composer,NodeJS的NPM。 在iOS开发环境中,开发人员必须依赖第三方依赖项管理工具,例如CocoaPods和Carthage。 iOS中的程序包管理器还有另外一项工作,即在下载之上构建代码。 在动态框架的情况下,程序包管理器应该能够下载并构建框架。 您可以在此处阅读有关iOS静态和动态库的更多信息。 让我们简要地看看它们是如何工作的。 我们将使用’SwiftyJSON’这是非常流行的Swift库来解析JSON作为示例。 可可豆 CocoaPods作为Ruby库提供,需要作为RubyGem安装。 CocoaPods是使用Ruby构建的,并且可以使用OS X上可用的默认Ruby安装。 $ sudo gem install cocoapods 可以使用“ pod init”命令初始化CocoaPods,该命令将创建模板Podfile,但我们可以创建自己的简单“ Podfile”。 典型的“ Podfile”将如下所示 平台:ios,“ 8.0” use_frameworks! 以“ MyApp”为目标 pod’SwiftyJSON’,’〜> 2.3′ 结束 现在,我们可以使用魔术命令下载依赖项 $ pod安装 CocoPods和Xcode 上面的命令(pod安装)非常神奇,它可以对我们的Xcode项目进行很多更改。 在大多数情况下,很难理解发生了什么变化。 这可能是大多数开发人员讨厌CocoaPods的原因。 CocoaPods对Xcode进行了以下更改。 .xcworkspace文件(.xcodeproj顶部的另一个文件,用于打开项目) Podfile.lock(CocoaPods的锁定版本) “ Pods”目录(目录包含Pod依赖项的源代码) Xcode设置中有很多东西! 现在,我们必须使用.xcworkspace打开项目以导入您的依赖项,否则CocoaPods无法正常工作。 CocoaPods的优缺点 […]

Xcode Bots:使用Swift Package Manager构建项目

Xcode Bots当前不支持Swift Package Manager项目。 但是可以将它们构建为macOS应用程序,甚至可以获取IDE中显示的代码覆盖率报告。 如果还没有为Swift Package Manager创建一个新的Xcode项目(请注意:不要检查版本控制中的项目文件,因为这对SPM项目来说是不好的做法): 迅捷包generate-xcodeproj 将以下设置应用于您的Bot配置。 (您甚至可以检查“分析”操作) 选择匹配的测试设备。 添加预集成脚本以快速创建项目文件,这是使用所有Xcode Bot功能和下载所有依赖项所必需的。 #/ bin / bashcd mia-cli 快速构建 迅捷包generate-xcodeproj cp -r xcschemes mia-cli.xcodeproj / xcshareddata / 交易 快速生成Xcode项目文件意味着所有Scheme和用户首选项都将丢失。 但是您可以将* .xcscheme目录从项目文件中复制(以* .xcproject结尾)到存储库中的另一个位置,并将其检入版本控制中(如果对方案进行更改,则必须再次执行此操作) )。 生成Xcode项目时,您可以将目录再次复制回您的项目文件中。 瞧!

Xcode Bots:为Linux构建命令行应用程序

苹果通过Xcode 9引入了XCS Bots,它使iOS开发人员能够以最小的努力在内置CI系统中维护其构建。 目前,XCS仅在Mac系统上运行,这意味着-应用只能针对Apple生态系统iOS,macOS,watchOS和tvOS的平台进行编译。 但是由于Swift是开源的,并且可以在Ubuntu等Linux发行版上运行,因此XCS缺乏为此类平台编译库和命令行应用程序的可能性。 Docker进行了救援。 Docker提供了强大的界面,可根据您的特定需求虚拟化您的构建基础架构。 Docker有点像虚拟机,但是它没有创建整个虚拟机,而是使用主机操作系统的内核,从而显着提高了性能并减小了映像的大小。 为了使用Xcode Bots构建应用程序,要在Linux发行版上运行,您首先必须创建一个具有Swift Toolchain功能的Linux映像。 如果您的目标系统上没有安装docker(= XCS的运行位置),请下载并安装Docker Desktop App。 下载适用于macOS的Docker Docker使用Dockerfile构建具有所有必需依赖项的映像。 幸运的是,Docker Hub已经提供了一个。 前往Docker Hub获取官方的Swift Dockerfile。 确保选择使用最低必需Swift版本的Dockerfile。 将其保存到您的SPM项目目录。 假设您已经配置了用于构建项目的Bot,请使用以下代码行添加一个新的post脚本。 如果您未创建一个,则可以按照本教程进行操作。 / usr / local / bin / docker build \ –no-cache \ -t swift:ubuntu \ -f路径/到/ Dockerfile“ $ {XCS_SOURCE_DIR} / your-git-folder-name” 生成映像后,现在就可以运行它,并提供您在上一个命令中创建的标签。 此外,在虚拟Docker容器中挂载主机系统的两个目录。 一个目录包含您的SPM项目,另一个目录包含您的项目的linux编译版本。 (注意:您必须使用绝对路径来挂载目录)。 将以下代码添加到Bot的发布脚本中。 / usr / […]