Tag: 蒸气

单元测试蒸气(工具箱v.1.0.1)项目

作为iOS开发人员和前后端开发人员,我一直梦想着有机会自己编写后端,而无需在Objective-c / Swift与“ AnyOtherBackendLanguage”之间进行“上下文切换”,而几天前我偶然发现蒸气,瞬间变暗了! 用Swift用Xcode编写后端代码,然后通过Docker容器,数据库连接和ORM,疯狂的性能将其部署到任何地方,Vapor简直难以置信! 大概这是我第一次深深地爱上一种技术来编写有关该技术的教程。 实际上,所有事情或多或少都是“开箱即用”的,他们在不断改进文档和工具箱方面做得非常出色,但是必须在生产中部署Vapor项目以在项目中包括单元测试,并且我发现这是建立Vapor项目时记录较少的文档,同时也是最棘手的部分(到目前为止)。 我将尽力以最佳的方式弥补这一小差距,分享我在几个小时的奋斗中所学到的知识。 让我们从头开始: 蒸气新的UnitTestTutorial 不久之后,将创建一个包含一些样板代码的全新项目。 重要的是要注意Vapor将创建项目结构,而不是Xcode项目。 我不知道为什么,但是实际上(工具箱v1.0.1)运行命令来创建Xcode项目并不包含测试目标,为此,您必须遵循以下过程: 开放终端 cd进入项目目录,例如cd〜/ Documents / UnitTestTutorial 创建一个包含文件夹ProjectName Tests的文件夹Tests,因此在我们的示例中, mkdir -p Tests / UnitTestTutorialTests 在其中创建一个swift文件(即使为空也可以), 触摸./Tests/UnitTestTutorialTests/Test.swift 现在,我们在项目根目录下编辑Package.swift文件,并从exclude数组中删除 Tests这一行(在我的屏幕快照第14行) 现在让我们运行vapor命令以创建Xcode项目 蒸气Xcode 现在让我们在项目中创建一个新类,以验证单元测试以后是否可以工作。 因此,让我们在App Group下的项目上创建一个新类(只有默认声明是好的,我们只会在初始化后将其设为nil的情况下进行测试),并将其称为HelloWorld.swift。 在应用程序和测试目标中都包含我们要测试的所有类别,这非常重要,否则将无法找到此详细信息,这使我疯狂了数小时,因此请记住 也可以在创建文件后通过在文件树中选择文件并在右列中选择目标来完成此操作。 现在,让我们在Tests / UnitTestTutorialTests组中创建一个新的UnitTest测试用例类。 现在可以删除我们在一开始创建的文件(在我的情况下,我创建了一个名为test.swift的文件)。 并将其称为HelloWorldTests.swift。 现在让我们尝试测试全新的HelloWorld类初始化,包括将以下代码放入testExample函数中: func testExample(){ XCTAssert(HelloWorld()!=无) } 如果一切都正确完成,测试应该会成功(⌘+ u是运行测试的捷径,如果您看到一些错误不用担心它们会消失,则需要重新编译该项目,最终对其进行清理。警告表达式的结果,这只是一个例子,一旦一切正常运行,您将释放您的幻想),并且您具备了开始对惊人的Vapor Project进行测试的所有要素。 我希望本指南将帮助您做出正确的选择,我很确定服务器端Swift和Vapor将成为Backend开发中的下一个重要内容,对于每个问题,请加入Slack频道并参考文档。 测试愉快!!!

夏休みの思い出にVaporでAPIを作ってみた

Qiita Pocketという先日リリースした自作iOSアプリで,どうしてもアプリ用のAPIが必要になり,Server-Side-Swift(以降,SSS)フレームワークのVaporを使ってみました。 SSS楽しいよ!というお话しです。 自作APIが必要になった経纬 もともとの自作iOSアプリ要件はこんな感じでした。 Qiitaの投稿のストック数ランキングが见れる 周间ランキングが见れる 月间ランキングが见れる タグでフィルタしたランキングが见れる API実装前のアプリは,アプリだけ作だけQiitaから提供されているAPIをコールしてストック数を元にランキングを生成するだけでした。 がかかりすぎてので,月间のランキングをその场で取得しようとすると时间がかかりすぎて3.の要件を断念していました。 また,旧アプリはAPIのv1を使っていたのですが,Qiitaからv1のAPIサポートが9月に终了する告があり,v2に切り替えたところ,1APIで取得できた投稿のストック数が2API(投稿取得->投稿のストック数取得)コールせねば取れず、、 层。API层作るしかねぇと思い,APIを作ることにしました。 (まだ开発中ですが,リポジトリはこちら) hirothings / qiita-pocket-API 通过在GitHub上创建一个帐户为qiita-pocket-API开发做出贡献。 github.com なぜ蒸气? uelともとSwiftは书けるけど,サーバーサイドは过去ドはFuelPHPを少し触ったのとProgateでRailsの讲座を终えた程度の初心者だったので,この际何やっても同じなら惯れた惯れた言语のSwiftでやってみようと决断。 SSSのフレームワークは,PerfectとVaporのスター数が串联抗しているのですが,VaporはToolboxというコマンドセットでHerokuへのデプロイが可能なので,Vaporにしました。(环境の构筑にお金と时间をかけたくなかった) 実装した机能 DB作成(sqlite3) 型号作成 模特の1対多のリレーション ルーティング Qiita APIにHTTPリクリスト 限价服务を超えないようにインターバルを空けてリクエスト 模特に対してクエリの発行(タグでフィルタ,期间でフィルタ) 型号をJSONエンコード herokuにデプロイ 蒸气の良いところ 可能とんどの机能がデフォルトのパッケージで実装可能 実际,上记の実装のうち,追加のパッケージが必要だったのは「6。 速率限制。 斯威夫特で书ける これは当たり前ですが,Swiftの良いところを生かしてコードが书けるようにフレームワーク自体が设计されてます。 例えばModelオブジェクトのコード 最终课程文章:模型{ var storage:存储= Storage() 静态让idType:IdentifierType = .int 让标题:字符串 让itemID:字符串 让发布时间为:日期 让profileImageURL:字符串 让网址:字符串 var stockCount:Int = […]

使用Vapor 3支持推送通知

TLDR; 在Swift中执行cURL命令 几周前,我决定学习Vapor 3框架。 我希望能够为将来的项目开发后端API,而不必依赖我的goto Parse Server。 这是一个快速的入门指南,向您展示它的可能! 所有代码都在底部链接的GitHub存储库中提供。 为了获得有关该框架的经验并查看一些用例,我从Ray Wenderlich的网站购买了“带有Vapor的Server Side Swift”电子书。 我通读了这本书,以学习基础知识。 下一步是开始尝试将以前使用Parse Server的功能移植到Vapor 3应用程序。 当实现推送通知时,我遇到了一个障碍。 Apple的APN要求使用HTTP / 2建立连接,但是SwiftNIO(Vapor 3的核心网络依存关系)尚不支持HTTP / 2协议。 我以为我可能必须使用某些第三方解决方案,但由于我不想要这种依赖关系。 我决定仔细阅读Apple的开发人员文档(APNs-Apple Developer),以了解使用cURL连接APN所需的条件。 首先,您需要一个付费的Apple Developer帐户和一个为其配置了推送通知的演示应用程序。 您将需要运行演示应用程序并获取设备令牌,该令牌将在以后发送以测试APN。 HTTP / 2 cURL请求将需要证书。 第一步是从Apple开发人员帐户生成所需的证书。 由于已经有数个教程,因此我将不介绍如何执行此操作。 .cer文件和.p12文件将需要合并。 为此,请遵循以下bash脚本: #!/ bin / bash #将.cer文件转换为.pem文件: openssl x509 -in aps_development.cer-通知der -out cert.pem #将私钥的.p12文件转换为.pem文件: openssl pkcs12 -nocerts -in aps_development.p12 […]

使用Vapor 2.0设置Postgres

这篇文章假定您在计算机上安装了Postgres,并且已经创建了一个数据库。 步骤1 创建一个新的蒸气项目并生成一个xcode项目。 蒸气新的dbsetup 蒸气Xcode 第2步 将Postgresql-provider存储库添加到Package.swift文件中的依赖项数组。 包(URL:“ https://github.com/vapor/postgresql-provider.git”,majorVersion:2,minor,0) 第三步 打开Config / fluent.json并将所有现有代码替换为下面的代码段。 { “驱动程序”:“ postgresql” } 步骤4 使用以下json在Config / secrets / postgresql.json中创建一个新文件。 不要忘记更新您的用户名和数据库名称。 { “主机名”:“ 127.0.0.1”, “ user”:“ $ PUT_USERNAME_HERE”, “ password”:“”, “数据库”:“ $ PUT_DBNAME_HERE”, “端口”:5432 } 第5步 在App / Config + Setup.swift文件中, import PostgreSQLProvider并将以下行添加到setupProviders函数中: 尝试addProvider(PostgreSQLProvider.Provider.self) 第6步 让我们验证一切是否正常。 运行以下命令以更新xcode项目: 蒸气Xcode 选择“运行”方案并定位“我的Mac”并运行项目。 该项目应生成并运行,并且控制台将记录“数据库已准备好”。 您可以使用psql检查发布表是否已创建。 如果遇到任何问题,请尝试在此处使用示例项目: […]

蒸气服务器端-iOS

Vapor是服务器端Swift 打开终端。 :〜test $ eval“ $(curl -sL check.vapor.sh)”✅兼容Xcode with兼容Vapor 2:〜brew install vapor / tap / vapor:〜mkdir vapor:〜cd vapor /:〜vapor new HelloVapor —分支= Beta $ cd HelloVapor / $打开。$ vapor xcode 下载工具快照https://swift.org/download/#snapshots并安装 打开xcode并选择Xcode-> Toolchains-> Swift开发快照 选择目标->运行->我的Mac 现在打开浏览器,您可以看到结果 您可以看到路线文件并对此进行编码 get(“ hello”,“:name”){req入口名称= req.parameters [“ name”] ?. stringreturn“ Hello \(name!)!”}} 现在..如果您想更改端口,请转到server.json文件 继续…..

在DigitalOcean上部署Vapor Web应用程序

在Ubuntu上设置Web框架Vapor 本教程将引导您完成在Digital Ocean上设置Vapor应用程序的步骤。 本教程需要Unix / Linux命令的基本知识,并假定您使用macOS。 尽管本教程适用于Digital Ocean。 它可以应用于提供Ubuntu映像设置的任何VPS提供程序。 让我们开始吧。 DigitalOcean入门 请访问www.digitalocean.com 如果您还没有Digital Ocean帐户,请在此处注册。 拥有Digital Ocean帐户后,登录并进入Drops部分。 我们需要为我们的Vapor网站创建一个新的Droplet,为此,请单击右上角的Create Droplet按钮。 现在我们需要配置新的Droplet。 在发行版中,我们需要选择Ubuntu 14.04。 对于大小,我们可以选择最小的$ 5 / mo 。 这对于本教程或任何基本站点都应该很好。 如果需要更多服务器,则可以稍后升级Droplet。 在“ SSH密钥”部分,您可以为Droplet提供适用于您的机器的SSH密钥,这样就无需提供密码来登录Droplet。 您可以在此处找到有关如何为计算机生成SSH密钥的详细信息。 但是,对于本教程,为简单起见,我们将不提供任何内容。 最后,我们需要选择一个主机名,我将其命名为“ Vapor-Tutorial”,但是无论您喜欢哪种名称,都欢迎您使用。 连接到服务器 现在,我们已经设置了虚拟专用服务器或VPS。 我们需要连接到它,并设置Vapor。 为了连接到服务器。 如果您未提供SSH密钥,则我们需要它的IP地址和密码。 您可以从“ IP地址”列的“ Droplet”列表中获取服务器IP地址。 如果您不提供SSH密钥,那么您应该已经收到DigitalOcean的电子邮件,其中包含您的IP地址和密码详细信息。 现在我们有了需要连接的详细信息,我们现在可以SSH进入我们的服务器。 打开终端并输入 ssh root @ 将替换为服务器IP。 例如我的是ssh root@162.243.105.170。 可能会询问您是否要继续。 输入“是”。 如果提示您输入密码,请输入从DigitalOcean收到的ssh密码。 3.现在,我们已经通过SSH成功​​连接到服务器。 […]

顶级服务器端Swift框架与Node.js的基准测试

方法与注释 为什么要使用博客和JSON? 最简单的是,博客不仅仅是返回“ Hello,world!”,而且JSON是一个非常常见的用例。 好的基准测试在每个框架上都需要类似的负载,并且需要更多的负载才能在屏幕上打印两个单词。 保持相同 我试图坚持的主要主题之一是使所有博客尽可能彼此相似,同时仍按照每个框架的样式和语法进行开发。 许多结构(如内容生成)会逐字重复,因此每个框架都可以使用相同的数据模型,但是诸如URL路由之类的方面有时会完全不同,以适应每个框架的语法和样式。 细微差异 服务器端Swift框架之间有一些细微的差异需要注意。 如果Kitura和Zewo的绝对文件路径中有空格,则在构建时都会遇到问题。 在任何框架中,Xcode在使用绝对文件路径中的空格进行构建时也存在问题。 Zewo使用的是05–09-a Swift快照,这意味着它在发布模式下构建时遇到问题,必须在调试模式下运行。 因此,所有Zewo测试都是使用Zewo构建并在调试模式下运行的(没有发行优化)。 静态文件处理是服务器端Swift框架之间争论的焦点。 Vapor和Zewo都建议使用Nginx作为静态文件处理的代理,然后将该框架作为后端的处理能力。 Perfect建议使用其内置的处理程序,并且我还没有看到IBM关于他们对此主题的观点的任何评论。 由于这项研究不是关于框架如何与已建立的服务器应用程序(如Nginx)一起工作的,因此每个框架都在本地使用静态文件处理。 如果选择考虑这一点,则可能在Vapor和Zewo上都可以实现更好的性能。 这也是我包含JSON测试的第二个原因。 [9月1日添加了更新的结果] Zewo是单线程应用程序。 您可以通过在每个可用CPU上运行一个应用程序实例来获得额外的性能,因为它们遵循并发而非多线程模型。 为了本研究的目的,每个应用程序仅运行一个实例。 工具链。 每个框架都在构建与Apple不同的开发快照工具链。 在最终测试时,它们是: –完美的DEVELOPMENT-SNAPSHOT-2016-08–24-a – Vapor&Kitura的DEVELOPMENT-SNAPSHOT-2016-07–25-a – Zewo的DEVELOPMENT-SNAPSHOT-2016-05–09-a Vapor具有用于运行发行版的特殊语法。 如果仅执行二进制文件,则将获得一些额外的控制台日志记录,这些日志记录将有助于开发和调试过程。 那有一点点开销。 要以发布模式运行Vapor,您需要添加 –env =生产 到可执行文件。 即 .build / release / App –env =生产 [9月1日添加了更新的结果]使用Zewo时,即使不能在05-09-a工具链上以发布模式快速构建,也可以通过传递以下参数来添加一些发布模式优化: 迅速建立-Xswiftc -O Node.js / Express不生成,也不区分调试/发布 静态文件处理包含在Vapor的默认中间件中。 […]

Firebase服务器端Swift入门

Firebase工具套件很棒。 在一个屋顶下捆绑了这么多有用的开发服务真是太好了,而且免费上手的能力也很棒! Firebase为多个平台提供SDK,以与其服务(包括iOS)进行通信。 但是,iOS SDK与iOS应用程序生命周期紧密相关,因此无法在服务器端Swift环境中使用。 幸运的是,Firebase提供了REST API,这为我们提供了在Swift中开发服务器时使用其服务的途径。 最近,这篇文章概述了在服务器端Swift环境中开始使用Firebase REST API所需的步骤。 我将把Swift Vapor应用程序连接到Firebase的新Cloud Firestore技术,但是一般过程应适用于任何其他服务器端Swift框架和Firebase服务。 Cloud Firestore Cloud Firestore是Firebase的“新的和改进的” NoSQL云数据库。 与以前的产品Firebase Realtime Database一样,Cloud Firestore在客户端之间实时同步数据,并为脱机模式提供一流的支持。 Cloud Firestore与实时数据库 如果您过去使用过Firebase的实时数据库产品,您可能想知道Cloud Firestore有何不同。 Firebase文档进行了更详细的介绍,但从根本上讲,它可以归结为Firebase,它可以在原始Realtime Database产品成功的基础上进行改进。 较早的实时数据库需要使用非规范化和数据展平技术来防止随着数据库的增长和发展而出现瓶颈。 Cloud Firestore通过提供更丰富,更快的查询和更好的可伸缩性来对此进行改进。 因此,如果Cloud Firestore是Realtime Database的改进版本,那么Realtime Database甚至不再相关吗? 答案是肯定的。 实时数据库的真正优势仍然在于其速度。 如果您需要优化产品以实现高效,低延迟的同步,则可能需要使用实时数据库而不是Cloud Firestore。 这并不是说Cloud Firestore无法完成这项工作。 它仍然可以超级快速地同步事物(以毫秒为单位)。 蒸气2.x 蒸气是市场上许多服务器端Swift库之一。 我觉得他们在使事情变得简单易懂并且使服务器端Swift开发的入门变得非常出色。 他们甚至最近推出了Vapor Cloud,这使将服务器部署到现实世界中非常容易。 小型项目甚至免费! 在此项目中,我使用了Vapor 2.x,因为当我开始时Vapor 3仍处于beta中。 我将使用这些技术来实现简单的概念验证,以便利用服务器端Swift来实现自定义后端逻辑,同时依靠Firebase实时更新客户端应用程序。 对于此演示,服务器将仅每60秒生成一个随机数,然后将该数字及其生成下一个随机数的日期发布到Cloud Firestore数据库。 当一切正常运行后,客户端应用程序将如下所示: […]

带蒸气和Laravel混合的Tailwind CSS

因此,您使用的是Vapor及其模板引擎Leaf,因为您是Swift专业人士,现在您想使用Tailwind CSS在您的Vapor应用上添加一些前端魔术吗? 好吧,我已经覆盖了您,走起来相对容易。 为了实现这一目标,我们将使用一个名为Laravel Mix的工具,该工具是由Laravel社区Jeffery Way中的知名家伙创建的。 Laravel Mix是包装Webpack的工具,它为您提供了一个非常好的和简单的API,可以与Webpack进行内联。 安装Laravel Mix 首先,我们需要安装Laravel Mix,我假设您知道这些知识,所以我将跳过Node / NPM的安装。 成功编译Tailwind CSS文件后,您可以告诉Vapor通过Public目录提供我们的静态文件。 幸运的是,蒸气使这个超级容易。 打开您的configure.swift文件,并取消注释以下行: middlewares.use(FileMiddleware.self) 现在剩下要做的就是将CSS文件导入到Leaf模板中: 就是这样,您完成了! 感谢您的阅读,希望对您有所帮助。 如有任何疑问,请发表评论。

蒸气3 Udemy课程!!

我真的很高兴宣布发布我的新课程“ 使用蒸气3掌握服务器端Swift ”。 Swift是在WWDC 2014上宣布的,它席卷了整个世界。 除了编写iOS,Mac,Apple Watch和Apple TV应用程序外,您还可以使用Swift语言编写完整的后端。 在本课程中,您将学习如何使用Vapor 3框架将现有的Swift技能带到云中。 您只需9.99美元即可获得完整的课程。 让我们检查一下课程内容: 了解路线 在本节中,您将学习有关路线的所有信息。 这包括将参数传递到路由以及查询字符串。 我还将解释如何使用分组和嵌套路由来清晰地构建路由。 JSON格式 Vapor 3使获取和发布JSON值变得非常容易。 在本节中,您将学习如何使用Vapor框架中定义的帮助程序协议将自定义类转换为JSON表示形式。 期货 蒸气3与蒸气1和蒸气2框架完全不同。 在本节中,您将学习期货。 期货允许执行异步响应,从而使您的服务器可以立即返回响应。 SQL Fluent提供程序 在本部分中,您将学习如何将Vapor 3应用程序与SQLite3数据库集成。 我正在演示如何使用SQL Fluent Provider从数据库中获取数据。 从数据库返回的数据/记录将作为JSON响应发送给用户。 控制器 在本节中,您将学习如何通过实现Controller更好地组织代码。 控制器充当视图和模型之间的中间人。 开发大型应用程序时,控制器变得至关重要。 将Vapor Web API与iPhone应用程序集成 在本部分中,您将把Web API与iPhone应用程序集成。 这将包括通过iPhone应用程序创建新记录,获取记录,过滤和删除记录。 我真的希望您喜欢这门课程! 我已经开始研究本课程的未来更新。 非常感谢您的评分和评价。 谢谢,喜欢这个课程, Azam