Tag: 服务器端Swift

海鸥和服务器端Swift — 2

第一部分: Seagull和服务器端Swift 。 我已经更新了海鸥版本,现在是0.1.5。 没有大的变化,只有错误修复和改进。 无论如何,Seagull已经距离理想的REST框架又近了一步) 在进行开发时,我获得了一些有关服务器端Swift的新课程。 我想分享我的经验。 Swift和Docker 在Docker容器中运行Swift项目并不像我以前想象的那么容易。 Swift还没有官方形象(真可悲)。 因此,某些项目使用自己的图像。 作为迅速尼奥。 Seagull基于swift-nio,因此我也必须使用它(进行少量修改) 在不同的linux版本上测试项目是一个非常好的主意。 幸运的是,使用docker-compose很容易。 对于Seagull,我为Ubuntu 16.04添加了默认的docker-compose文件,为14.04添加了其他文件。 它是基于Ubuntu 16.04的swift-nio docker映像的docker-compose文件。 现在,我可以使用一个命令在纯Ubuntu 16.04上运行单元测试和测试REST服务器: docker-compose -f docker / docker-compose.yaml进行单元测试 或适用于Ubuntu 14.04的版本: 只需在参数中设置Linux和Swift版本,然后构建并使用其他映像即可。 docker-compose -f docker / docker-compose.yaml -f docker / docker-compose.1404.41.yaml up res 我花了一些时间来了解它在swift-nio中的工作方式以及如何在我的项目中使用它,但是现在我有了简单而强大的工具,可以在Linux环境中测试我的Swift项目。 这非常有帮助。 测试框架 这让我感到惊讶,但是Mac上的“嵌入式” XCTest和开源Swift的XCTest有所不同。 这是XCTest中的“新型”异步测试。 简单,我真的很喜欢。 但是,当您尝试为Linux编译项目时,它不起作用。 感谢Docker,我找到了它。 老款式。 不太优雅和灵活,但可以在所有平台上使用。 可编码 我太懒了,在测试中我使用了Swift如何序列化Encodable对象的假设。 […]

使用Vapor 2和Swift创建网页

这是“蒸气入门”系列文章的第2部分 在本教程中,我们将利用在第1部分中学到的知识,并使用Vapor的模板系统Leaf创建一些网页。 首先,让我们讨论什么是Leaf。 Leaf是一个模板引擎,旨在使我们能够动态显示信息。 想象一下,您想创建一个HTML页面来显示特定于当前用户的信息,而您不必为每个用户创建新页面。 使用模板,我们可以在多种情况下重用我们的代码。 我们可以使用其他模板系统,例如Mustache和Stencil,但是由于Leaf是使用Swift构建的,因此在本教程中将使用它。 首先,让我们开始生成一个新的蒸气项目。 步骤1 —生成一个新的Vapor项目 打开您的终端并输入vapor new hellopages 。 第2步-生成 .xcodeproj 项目文件 在终端中输入cd hellopages && vapor xcode 。 这将把我们带入hellopage文件夹,并运行vapor命令生成项目文件。 我们一直想生成Xcode项目文件,因为这使我们能够访问Xcode的错误检查和代码完成,这使得使用Swift进行编码变得非常容易。 第3步-为我们的新网页创建一条新路线 首先,打开main.swift文件,并在第一条路线下方创建一条路线。 在第一条路线的正下方输入以下代码。 // 1 drop.get(“ hello”){要求 // 2 返回“ Hello World” } 这将创建对路由hello的GET请求。 如果运行此程序并使用浏览器导航到localhost:8080/hello我们将看到“ Hello World”。 要创建蒸气网页,我们需要更改对路线的响应。 将闭包的返回值更改为以下内容 返回尝试drop.view.make(“ hello”) 此行告诉Vapor查找名为hello.leaf的叶模板并将hello.leaf呈现给用户。 如果您想知道hello.leaf文件在哪里,我们还没有创建它。 您的main.swift文件现在应该看起来像这样。 第4步-创建问候页面。 要创建问候页面,我们将创建一个hello.leaf文件。 .leaf扩展名从上面的第12行中排除,因为Leaf是与Vapor一起使用的默认模板引擎。 模板文件必须放在“ Resources/Views文件夹中。 现在让我们创建文件。 […]

服务器端Swift-快速入门

罗伯特·巴兰 ( Robert Baran) 构建Swift Web应用程序使您可以重用已有的技能。 但是,如果您不是iPhone mac开发人员,也可以从头开始。 本文向您展示了最受欢迎的服务器端Swift框架,并让您进入使用Swift的更快,更安全的API的世界。 Swift于2014年发布。从那时起,它已成为iOS和macOS开发的流行解决方案。 由于Swift是开源的,人们开始使用它。 有很多尝试寻找Swift的其他用法。 事实证明,它们是服务器端的理想之选,同时比其他语言更快,更安全。 该过程的下一步是将Swift应用于服务器端开发。 在这里,重要的是要提到Swift可以在macOS,Linux甚至Windows上编译。 此外,一些框架允许开发人员创建云应用程序。 在Server-Side Swift发布之后,我感到有快速浏览它的冲动。 当时真的很难分辨它是否已准备好用于商业用途。 现在,当我看着它时,我会说它足够稳定。 因此,让我们尝试比较最受欢迎的框架。 就个人而言,我建议您在尝试每个框架之前,甚至选择最适合您的框架,它们之间会有细微的差异。 当前,最受欢迎的服务器端Swift框架是Vapor,Perfect和Kitura。 还有其他一些工具,例如Zewo和NozelIO,但是它们并不那么受欢迎,但这并没有失去它们的价值。 事实上,我调查了每个框架,我的结论是:Perfect and Vapor。 几年前,当Server-Side Swift对我来说还很陌生时,我并不相信这将是针对特定后端的最佳语言。 为什么? 因为它像其他所有后端解决方案一样工作,并且没有什么特别的特殊之处使其变得特别,但是对于我作为IOS开发人员而言,它仍然使我处于全栈状态。 我知道Java和JS,在我看来,掌握最新技术非常好,主要是因为它们使我们成为了更好的开发人员。 我还没有找到太多有关它的教程或文章。 当然,关于Java或JS的数量并不多。 因此,您必须自己创建很多东西。 我认为,Swift也比其他语言快。 如果您想将其与其他产品进行比较,这是基准服务器端swift框架vs nodeJS。 SPM — Swift Package Manager —管理发行版Swift代码,与构建系统集成在一起,以自动执行在Mac和Linux上运行的下载,编译和链接依赖项过程。 XCode — Apple IDE,用于编译和调试Obj-C和Swift代码。 AppCode — Jetbrains IDE,用于编译和调试Obj-C和Swift代码。 其他文本编辑器,如括号,VS代码,Sublime等。+ SPM 对于框架,还有很多非常特定的工具,在快速概述中,我将进一步介绍这些工具。 […]

服务器端Swift:制作机盖(5/6)

上次我谈到了部署和维护Linux服务器。 这次我们正在谈论如何与APNs通信门户进行通信。 什么是天篷? Canopy具有适用于macOS和iOS的应用程序,可在此处使用。 APN 苹果推送通知服务。 为什么“ s”是小写的? 没人知道。 该服务是Internet上的黑匣子。 您的服务器安全地连接到该服务器,并发送小型JSON负载,每个负载均用于特定设备。 苹果然后将其发送到设备。 如果设备没有通电,它们将“保持”一会儿,如果有电,它将立即到达。 该连接是一个持久的HTTP2连接,HTTP2仍然是一个很新的东西,并且没有多少Internet使用它。 URLSession严格支持它,但它不会保持连接打开。 尽管有些人确实将URLSession用于APN,但您应注意:Apple承诺他们(连续打开和关闭许多连接)将其视为文字攻击,并会禁止您这样做。 实施APN 首先,请转到Apple供应门户,并获取一个APNs密钥。 它作为文件提供,将其传输到您的服务器。 确保它不以某种方式暴露在网络上,如果有人收到了,他们可以将用户通知作为您的应用发送给您,这可能会让您感到尴尬。 其次,您需要向服务器发送Apple为其客户端应用程序用户提供的设备令牌。 您之前已经看过此代码,现在您可以更好地了解其用途。 但是,除非计划将相同的通知发送给每个人,否则还需要某种方式将该令牌与您在服务器上使用的用户ID系统相关联。 因此也发送此信息。 不要忘记,您可以在两端使用相同的Codable结构! (请参阅第1部分) 完美的通知 Perfect提供了Perfect-Notifications,因此首先我使用了它。 易于设置和使用: 导入PerfectNotifications 让configurationName =“ configurationName” 让apnsKeyIdentifier =“ AB90CD56XY” //来自供应门户 让apnsTeamIdentifier =“ YX65DC09BA” //来自供应门户 让apnsPrivateKeyFilePath =“ ./APNsAuthKey_AB90CD56XY.p8” NotificationPusher.addConfigurationAPNS( 名称:configurationName, production:false,//上线时设置为“ true”! keyId:apnsKeyIdentifier, teamId:apnsTeamIdentifier, privateKeyPath:apnsPrivateKeyFilePath) 然后,您可以发送通知: NotificationPusher(apnsTopic:“ your.bundle.id”)。pushAPNS( configurationName:配置名称, […]

蒸气3与Mongo DB

任何新项目都始于一个伟大的想法。 然后,您必须查看架构。 对于好主意,您应该期望获得更大的规模和大量的数据。 因此,您应该使用NoSQL数据库。 对于我的最新项目,我认为最简单的方法是使用MongoDB。 因此,我开始设置我的项目,并在蒸气3的文档中寻找如何连接到mongo数据库的起点。 令人惊讶的是,蒸气3的文档为空empty。 但这并没有阻止我。 在不同的领域进行了一些研究,我发现有2个解决方案,其中一个是Mongokitten,这似乎是蒸气2最常用的解决方案,另一个是MongoDB本身的mongo db swift驱动程序。 因此,我感谢MongoDB为构建友好的本机Swift驱动程序所做的努力,该驱动程序支持Swift Package Manager的使用。 我认为这可能非常适合我的服务器端swift项目。 我决定使用MongoDB的驱动程序。 那么如何开始呢? 首先,我必须将依赖项添加到我现有的蒸气3项目中。 为此,我必须将mongo驱动程序的url和版本添加到Package.swift文件中并获取新的源代码。 让包=包( 依赖项:[ … // Mongo Db .package(网址:“ https://github.com/mongodb/mongo-swift-driver.git”,来自“ 0.0.7”) ], 目标:[ .target(name:“ App”,依赖项:[“ MongoSwift”,“ Vapor”]), … ]) 这很容易,但是现在我需要知道如何在蒸气框架内使用它。 我在mongo swift驱动程序项目的示例区域中找到了起点。 通过此代码示例,我可以设置数据库连接并将客户端实例注册为蒸气框架运行时中的服务。 为此,必须扩展Mongo Client,以便将服务协议应用于该协议。 //configure.swift //准备好mongo收集服务 public func configure( _ config: inout Config, _ env: inout Environment, […]

使用Vapor 2和PostgreSQL持久化数据

这是正在进行的“蒸气入门”系列的第3部分。 在本教程中,我们将结合到目前为止所学的知识,使用我们保存到数据库中的数据来创建一些网页。 在本教程中,我们将使用开源关系数据库PostgreSQL。 如果您对使用数据库或编写SQL代码不完全熟悉,请不要担心。 Vapor附带了Fluent,Fluent是一种Swift ORM(对象关系映射工具),它使数据库的使用变得异常简单。 虽然学习SQL和关系数据库很有帮助,但您会在本教程中注意到并不需要完成。 对于今天的教程,我们将制作一个简单的博客应用程序。 对于本教程,我们将使其保持简单,因此我们将不包括任何身份验证。 好吧,让我们潜入。 首先,让我们开始创建一个新的Vapor项目 步骤1 —生成一个新的Vapor项目 打开您的终端并输入vapor new blogger 第2步-生成 .xcodeproj 项目文件 在终端中,输入cd blogger && vapor xcode这将带我们进入blogger文件夹并生成一个xcode项目文件 步骤3 —安装自制软件 Homebrew是一个软件包管理器,可以帮助开发人员在其MacOS设备上安装工具。 复制并粘贴以下代码以安装Homebrew /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 第4步-安装Postgresql 在终端类型brew install postgresql 我已经安装了Postgresql,所以您的终端看起来与我的略有不同。 第5步–运行PostgreSQL 要启动Postgresql,请在新终端中运行以下命令。 postgres -D / usr / local / var / postgres 输入此命令后,您应该看到以下内容: 现在您已经启动并运行了Postgresql,现在需要为全新的Blogger应用创建数据库。 如果您对SQL不太满意,请不要担心,我们不会大量使用它。 第6步-创建一个新数据库 在终端中,在新的终端窗口中键入psql以打开PostgreSQL控制台。 […]

蒸气3入门

Vapor是iOS社区中领先的服务器端Swift框架,它使Swift开发人员可以将其现有的Swift技能带到云中。 在蒸气1和蒸气2成功之后,蒸气团队通过创建蒸气3框架使它变得更好。 在撰写本文时,Vapor 3尚未发布,但足够稳定,可以在应用程序中使用。 在这篇文章中,我将介绍如何开始使用Vapor 3。 安装蒸气3 Vapor文档提供了有关如何安装Vapor 3框架的详细说明。 我不再重复安装过程,而是直接链接到此处的过程。 你好蒸气 安装Vapor后,下一步是初始化Vapor项目。 可以在终端中通过运行以下命令来完成此操作。 蒸气新的你好蒸气 这将创建一个新的“ hello-vapor”项目文件夹,其中包含使用Vapor入门的所有默认文件。 跳到hello-vapor文件夹并运行以下命令。 蒸气Xcode 该命令将为您的Vapor项目创建一个Xcode项目。 该过程完成后,您将为hello-vapor项目获得一个xcodeproj文件。 现在,您只需双击Xcode项目文件即可在Xcode中打开Vapor项目。 在构建应用程序之前,请确保将目标设置为“运行”,并选择“ 我的Mac”作为设备,如以下屏幕截图所示: 构建完成后,运行您的应用程序。 这将在端口8080上启动服务器。在浏览器中访问http:// localhost:8080 / hello,查看正在渲染的hello路由。 恭喜你! 您现在正在使用Vapor框架在服务器上运行Swift。 路由 默认情况下,Vapor在routes.swift文件中添加一些锅炉级别的代码,该代码为您的Vapor项目创建默认路由。 您可以在routes.swift文件中创建自己的路线。 让我们为电影添加一条路线,如下所示: 您甚至可以将不同的路线嵌套在一起,如下所示: 您可以使用“路由参数”的功能,而不是为每种可能的流派创建路由,如下所示: 借助蒸气参数,我们不必为每种类型创建单独的路线。 Vapor还提供了一种简单的方法来访问查询字符串,分组路由等等。我在我的课程“ 使用Vapor 3掌握服务器端Swift ”中对此进行了详细讨论。 您可以使用下面的优惠券代码获得该课程的折扣。 希望您喜欢这篇文章! 编码愉快! 使用Vapor 3掌握服务器端Swift 乌迪米 您是否有兴趣学习如何使用Swift编写完整的后端API? 服务器上的Swift是…的未来。 www.udemy.com

介绍Dyno🦕

更新:本系列的第二篇文章 现已发布 ! Dyno是一个正在构建的新Swift库,用于: 为Amazon AWS DynamoDB数据库提供功能性,反应性,安全且易于使用的界面。 不必担心这是否有意义-或者说有意义但对您没有帮助-因为除了实用的步骤之外,我还将讨论一些想法和技术,希望它们可以在其他地方使用。 在此过程中,它将: 将官方的AWS Python boto3库与Swift集成 添加强大的异步处理 通过反应性可观察流输出数据 提供macOS和iOS的RxSwift扩展,以简单,声明性的方式将结果集成到您的应用中。 我还将介绍添加一些其他功能: 离线数据存储和同步 DynamoDB某些高级功能的扩展。 附带的目的是说明我在以前的文章中一直看过的功能强大的工具如何能够带来巨大的实际收益。 我还计划在编写这些文章时开发此库。 Dyno源代码可在github上获得 (我将继续对其进行调整,将代码分支以匹配这些文章:本文位于Introduction分支下)因此,即使您仅对其中一些主题感兴趣,继续—并发表评论,并根据需要评论PR和明星😀! Linux /非Apple /服务器端人员,我没有忘记您:即使其中的一些细节有所变化,此处的许多内容还是很有希望的。 本文 在本文中,我们将对这些概念进行一些基本介绍。 然后使用AWS DynamoDB进行设置。 这将是很多初始配置,但是我们完成了:我们将看到如何使用PythonKit从Swift中访问我们的新数据库。 我等不及要开始了! 🦕 认识人物 DynamoDB DynamoDB是来自Amazon Web Services的高可用性和弹性云托管的NoSQL数据库。 它可以极大地扩展,但是对于小用例也是免费的,因此非常适合上手。 Boto3 Boto3是用于与DynamoDB通信的官方Amazon SDK。 它使用Python:其他语言(如Java和Go)可用,但没有Swift。 在Dyno中我们将利用Google Tensorflow团队开发的半官方 Python互操作性(它本身依赖于Swift 5的功能,因此这些文章仅是Swift5。我们将在短期内讨论如何处理该问题)。 )。 我还应该指出, AppSync平台具有对AWS和DynamoDB的AWS支持,该平台是一个复杂的交互库,对于某些应用程序将是一个不错的选择。 但是:它仅适用于iOS; 它非常重且复杂; 而且它不使用反应式编程技术-因此,我正在寻找更具兼容性,重量更轻且功能更多的产品。 观测和反应式编程 响应式编程以一种功能性的方式描述了数据流(“可观察对象”:可能是UI中的按钮单击,网络上的数据包或从云数据存储中检索到的结果),从而使我们能够使用运算符进行操作 。 […]

完美助手2.0在这里

我们在今年3月发布了Perfect Assistant 1.0,有超过7,500个1.0的用户,我们得到了社区的好评。 反馈意见来自完美助手2.0的发布。 我们还有更多功能,但是“真正的艺术品”! 很难选择我个人最喜欢的PA 2.0的新功能,所以这里是重点,没有特别的顺序。 项目与部署视图 现在,项目和部署列表可以重新排序。 拖放,就这么简单。 除此之外,解决项目可能是我最持久的困扰的是对项目进行分组的能力! 我不了解您,但该列表中有100多个Perfect项目,现在将它们全部归类和分类。 没有更多的交际过载。 除了分组和排序,您现在还可以过滤项目。 对于像我这样的人有很多的天堂。 更多选择 好的,所以这个应用程序被称为“ Perfect Assistant”,但是我们坚信“开源”中的“开放”蕴含着强大的力量和爱心,因此2.0带给您的能力不仅是启动和使用Perfect项目,而且现在包括启动和管理Kitura,Vapor或Zewo项目的选项。 因此,如果您是蒸气用户,则现在可以使用PA 2来处理Perfect用户几个月来能够完成的所有工作,然后轻松地将其部署到AWS,Google App Engine等! 重新设计的项目窗口 接下来,我们将斧头移至项目窗口。 实际上,我们几乎又重新开始了。 我的一些个人亮点: 重新设计的项目窗口带有高度可定制的工具栏,只需单击一下即可放置所有可用命令,因此您可以按自己的方式组织它。 新的“可用项目依赖项”搜索过滤器使您轻松找到所需的依赖项; 新的“项目部署”列表使添加或删除部署选项变得容易。 项目“ Dev Ports”使在Mac上启动用于Linux测试的Docker容器变得容易。 新的Linux工具链选择器使您可以轻松地更改目标Swift版本。 “构建部署映像”为您的项目提供了一个随时可用的Docker映像,包括所有apt依赖项。 部署配置 在编写项目之后,要整理的最困难的事情之一就是将其部署到某个地方,以便团队和测试人员可以使用它。 毕竟,如果您不共享您的作品,那是没有实际用途的,对吗? 在“重新设计以消除障碍模式”的过程中,我们决定更改部署配置编辑器窗口,以提供更合理的配置部署方法。 现在,新的“关联项目”列表使您可以轻松查看正在部署的项目并直接跳转到它们。 您也可以更有效地执行诸如重命名实例之类的事情! 触控栏支持所有项目命令 凯尔很幸运,并获得了新的“ Touchbar” MacBook Pro之一。 他在2.0分支中添加的几乎第一件事就是对触摸栏的支持-因此,您很幸运能够拥有一种新的闪亮MBP,PA 2.0开箱即用地支持触摸栏。 未来… 即使具有所有这些新功能,Perfect Assistant 2.0的主要重点还是为一些尚待推出的出色新功能设置了平台。 我们已经在测试beta版本中了2.1。 请继续关注一些美味的新部署选项! 一位一直在使用1.0和2.0版本的高级开发人员表示,Perfect […]

漂亮的印刷HTML

这是最初发布在我的博客上的文章的转载,但几经成熟……。 仅进行了微小的格式更改。 它也是系列文章的一部分,该系列旨在从基本原理出发,涵盖服务器端Swift的基础。 请考虑查看该系列中的其余内容: Swift中的类型安全HTML 在Swift中渲染HTML DSL Swift中的可组合HTML视图 在上一篇文章中,我们通过递归遍历节点树并渲染每个原子单元来实现朴素的HTML渲染器。 该实现非常简单,并且由于没有换行符或空格来使结果更具可读性,因此它生成了HTML的“精简版”。 有时我们想要产生一个易于理解的字符串表示形式,例如,在服务器的开发模式下,具有格式良好的HTML可能会有所帮助,并且对文档的“快照测试”很有用。 “漂亮打印”是获取一条数据并将其打印到某种意义上在美学上令人愉悦的字符串的行为。 例如,HTML是组成文档的节点树,并且可以通过多种方式将其打印为字符串: Hello world Hello world Hello world Hello world Hello world 这些打印中的每一个都代表相同的HTML文档,但最后一个最容易采用。但是,有时仅在节点上添加换行符和选项卡是不够的。 一行可能很长,您可能希望在流过特定页面宽度后换行。 例如,以下文档已经打印精美,以确保没有一行超过40个字符: Articles about math, functional programming and the Swift programming language. 注意,它会跟踪缩进,以使每行的第一个字符匹配。 它甚至可能变得更加复杂! 例如,标记的属性可能会变得很长,并且当您包装它们的值时,您要确保它们对齐在一起: <body id="home" style=”background: #fff;”> Articles about math, functional programming and the Swift programming language. 注意style如何与上面的id对齐,而不是简单地从<body缩进两个空格。 如果所有属性不能全部放在一行上,我们甚至可以通过要求所有属性都在换行符上来增加另一层复杂性: […]