Tag: Linux

Raspberry Pi上的Swift状态

编辑(2019年4月):原始文章写于2017年1月,回溯到Swift 3.0时代,当时Linux支持还很年轻。 截至此编辑之时,Swift已在5.0版本上发布,并且Linux支持比以前好得多。 如果您正在寻找有关Raspberry Pi上Swift的最新信息以及可以在系统上使用的预编译Swift二进制文件,我建议访问 Umberto Raimondi 博客。 一旦有更多时间,我将用新信息更新此帖子。 最近,我对编写与外部硬件设备(例如传感器或电动机)接口的软件感兴趣。 与外部硬件交互的最简单方法之一是通过Raspberry Pi。 小型计算机具有40个GPIO引脚,可让您将其连接到外部设备。 大约一个月前,我买了Raspberry Pi,看看我能用它做什么。 每天,我是一名iOS开发人员,为初创公司开发移动应用程序。 如今,我创建的大多数应用程序都是使用Swift编程语言编写的。 我爱斯威夫特。 新的Apple语言是现代,安全和富有表现力的。 尽管开发速度可能无法与Python等脚本语言相提并论,但是静态类型系统使整个应用程序更加安全可靠。 由于我精通Swift,因此我想探索它对Pi的支持。 这是我到目前为止发现的。 在Raspberry Pi上编写Swift需要两个主要组件: 该平台的Swift编译器和软件包管理器 一个支持GPIO的Swift库 尽管Apple确实发布了支持Linux的预编译Swift二进制文件,但它仅支持具有x86处理器的平台。 对Raspberry Pi等ARM设备没有官方支持。 但是Swift是开源的,在一些专门的贡献者的惊人工作下,Swift编译器被移植到ARM系统。 Umberto Raimondi最近发布了可在Pi上运行的Swift 3.0.2预编译二进制文件。 由于软件包管理器在那里被破坏,我在Raspbian版本上遇到了问题。 但是一旦我安装了Ubuntu Mate,然后安装了Swift Ubuntu二进制文件,一切都可以正常工作。 Umberto还是用Swift编写的GPIO库的作者。 您可以使用Swift Package Manager安装该库。 使用上述基础结构,我能够运行我的第一个Swift程序,以使用Raspberry Pi上的GPIO引脚点亮LED。 结论: Raspberry Pi对Swift的支持仍处于试验阶段,并由一组专门的开源贡献者推动。 地狱,甚至Linux支持都处于早期阶段,因为像Foundation这样的核心库尚未完全移植到OS。 没有IDE支持,起初,我使用nano编辑程序,这不是一种愉快的体验。 但是,Pi上的Swift可以使用,如果您想玩转,应该可以很快设置它。 希望苹果有一天会正式支持ARM平台,以便我们可以放心地部署Swift的全部功能!

在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的火焰图

火焰图是性能概要分析数据的强大可视化形式,通常用于帮助分析复杂应用程序的CPU使用率。 它们由布伦丹·格雷格(Brendan Gregg)推广,他拥有一个不错的网站,向他们解释了所有相关信息。 这是如何生成服务器端Swift应用程序的火焰图。 就我而言,我正在对Kitura进行性能分析,但是我认为该指南适用于任何服务器端Swift应用程序。 整个过程的大部分过程都是正确地设置您的系统-希望这些信息对我来说对其他人有用! 我正在使用Ubuntu 16.04(Xenial)。 我不会尝试使用任何较旧的版本,因为perf分析器正常工作可能很棘手,但是较新的版本应该没问题。 首先,您需要在apt安装中添加一些额外的Ubuntu软件包存储库-我们需要安装的某些软件包未包含在默认存储库中。 在/etc/apt/sources.list.d/ddebs.list添加三行: deb http://ddebs.ubuntu.com xenial主要受限宇宙multiverse deb http://ddebs.ubuntu.com xenial-updates主要受限制的宇宙multiverse deb http://ddebs.ubuntu.com xenial建议的主要受限宇宙multiverse 将Ubuntu调试符号签名密钥添加到您的受信任密钥中,并重新同步程序包索引文件: sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys C8CAB6595FDFF622sudo apt-get更新 现在,您可以为特定的内核安装性能分析器: 须藤apt-get install linux-tools-$(uname -r) 您可以通过运行sudo perf record /bin/true来验证perf是否正常工作。 您应该看到类似以下内容: [性能记录:唤醒1次以写入数据] [性能记录:捕获并写入0.010 MB性能数据(4个样本)] (如果收到有关kptr_restrict的错误消息,请尝试允许访问内核地址映射: echo 0 | sudo tee /proc/sys/kernel/kptr_restrict )。 像Kitura这样的服务器端Swift应用程序通常需要一些额外的系统软件包。 您可以将它们安装在一个命令中: 须藤apt-get install clang […]

使Linux上的Swift测试保持同步

如果您的Swift项目在Linux上使用swift test ,则您知道需要运行swift test –generate-linuxmain才能免费获得在Apple平台上获得的东西,即。 让XCTest知道它运行哪个测试。 该命令会生成几个仅在Linux上使用的文件,如果要在CI中的Linux上测试产品,则必须将这些文件提交到存储库中。 毫无疑问,Swift的早期生活中有一个痛点,但现在仅仅是多余的样板。 差不多了,由于每次添加新测试时都必须重新运行该命令,因此很容易忘记,然后就无法在Linux上正确地进行测试。 因此,让我们添加一个CI挂钩即可。 使用Travis的构建阶段,很容易添加一个所有测试都依赖的阶段: #使用这些默认值,除非我们在各个作业中覆盖它们 操作系统:osx 语言:迅捷 osx_image:xcode10.1 工作: 包括: -阶段:预测试 名称:检查Linux测试是否已同步 安装:快速测试–generate-linuxmain 脚本:git diff-退出代码 -阶段:测试 名称:macOS / Swift 4.2.1 脚本:快速测试–parallel -信封:SWIFT_VERSION = 4.2.1 操作系统:Linux 名称:Linux / Swift 4.2.1 语言:通用 安装: 评估“ $(curl -sL https://swiftenv.fuller.li/install.sh)” 脚本:快速测试–parallel 预测试很简单,我们运行swift test –generate-linuxmain ,然后询问git是否存在差异。 如果存在任何差异,那么我们(或贡献者) swift test –generate-linuxmain在提交之前忘记运行swift test –generate-linuxmain 。 自动化运行swift […]

探索服务器端Swift

当Apple开源Swift时,许多人都为在其他平台上使用这种有趣的新语言而感到非常兴奋。 早期,Swift被移植到Linux,人们开始考虑使用Swift构建服务器。 最近,随着IBM在新的Server API项目中扮演了重要角色,与IBM的现有合作伙伴关系日益加深。 作为ustwo的iOS开发人员,我决定带出服务器端Swift在Linux上试一试。 为了探索在Linux和Swift Package Manager上编写Swift的方法,我决定创建一个名为Mockingbird的小样本。 Mockingbird是模拟服务器的开端,该服务器采用Swagger规范并存入定义的各种端点。 我之所以选择使用IBM的Kitura框架是因为他们与Apple的关系,并且因为它们本身提供了云平台即服务,但是还有许多值得考虑的替代方案(Perfect,Vapor和Zewo仅举几例)。 为什么用Swift编写服务器? 除了对Swift语言的好奇心或强烈的偏好之外,为什么还要使用Swift构建服务器? 我想到了一些原因,但是最终您需要确定它们是否在您的上下文中有意义。 除了iOS或macOS应用程序(将来可能还会有Android和Windows!)之外,用Swift编写服务器还可以使两者共享代码和框架。 在维护方面,只需要编写一次代码就可以节省短期和长期的时间。 它还减少了测试方面的开销。 所有这些对独立开发者特别有吸引力,但对大型企业也可能有利。 与任何语言一样,Swift都是自以为是的,旨在以特定方式解决某些问题。 例如,Swift支持静态类型。 Swift也更喜欢简短,表达力强的代码,而不是冗长的代码。 恰恰相反,并不是说Swift在这些方面比其他语言要好。 每种语言都是一种工具,并且有自己的位置。 但是,如果这些东西吸引您,您可能会对使用Swift感兴趣。 另外,如果您打算在iOS,tvOS或watchOS上运行,则具有第一方支持和框架的语言选择将受到限制。 最近,Apple的重点肯定是Swift,而不是Objective-C或其他语言。 使用Swift构建Linux服务器 使用Kitura和IBM开发的各种相关软件包来构建Mockingbird,使其非常容易启动并将基本逻辑绑定到HTTP服务器。 编写的大部分代码用于文件管理和解析。 只需很少的代码即可构建服务器本身。 我在开发此微型服务器时遇到的最大挑战分为两类。 首先,Apple维护其Foundation框架的两个版本,这是大多数Apple开发人员使用的关键框架之一。 Darwin上的Foundation框架(即macOS,iOS等)和Linux上的Foundation框架是不同的实现。 换句话说,当您为它们提供相同的输入而获得不同的结果时,这些实现并不总是产生相同的输出。 这些实现也不完全与API兼容。 其次,Kitura在可测试性方面还有很多需要改进的地方。 在很多情况下,我都会在macOS上完美构建该软件包,但发现我启动Docker容器时,它耗尽了运行测试或启动服务器的能力。 在整个代码中,您会看到一些片段,在这些片段中,我不得不提供条件编译块,例如: #if os(Linux) 让regexObj =尝试吗? RegularExpression(模式:Endpoint.kituraPathRegexString,选项:[]) #其他 让regexObj =尝试吗? NSRegularExpression(模式:Endpoint.kituraPathRegexString) #万一 虽然我在小型实现中并不经常遇到它,但苹果的swift-corelibs-foundation(Foundation的开源版本)仍然有很多部分尚未实现(在存储库中搜索NSUnimplemented() )。 对于在Linux上使用Swift的任何人,我强烈建议您为该存储库加注星标,因为您可能需要参考已实现的内容以及在Linux和macOS上已实现的不同内容。 对于我的Kitura实施,这也是非平凡的写作测试。 由于无法对路由器的elements属性进行内部作用域确定,并且也没有可公开访问的迭代器(甚至是只读的),因此无法遍历服务器定义的API端点。 Kitura也不提供删除所有端点测试所共有的样板的测试框架(有关如何执行此操作的良好示例,请参阅ProcedureKit)。 因此,我在EndpointTests.swift编写了自己的简化版本,以简化测试。 使用Swift包管理器 […]

如何为Ionic 3开发准备Linux / MacOS包装盒

本指南假定您的计算机的操作系统对于Mac用户是High Sierra 10.13.3 ,对于Linux用户是Ubuntu 16.04 。 如果使用Linux发行版,请跳过iOS部分并继续至Android部分。 安装NodeJS 从以下链接下载并安装最新的LTS NodeJS: https://nodejs.org/en/ 注意:在编写本指南时, NodeJS的最新LTS版本是8.10.0 。 安装CLI 要安装全局依赖项,请运行: $ npm install -g离子科尔多瓦 注意:此命令将安装最新版本的Ionic和Cordova。 在撰写本指南时, Ionic的最新版本为3.20.0,而Cordova的最新版本为7.1.0 。 适用于iOS和Android平台的SDK环境 要准备添加和构建iOS和Android平台,请执行以下步骤。 的iOS iOS平台只能在MacOS上添加。 如果您不使用MacOS,请跳过此步骤并继续至Android部分。 安装Xcode 访问: https://developer.apple.com/xcode/ 并安装最新的Xcode版本。 安装CocoaPods 在您的终端上,执行以下命令以安装最新版本的CocoaPods。 $ sudo gem install cocoapods 启用命令行工具 安装Xcode后,需要启用几个命令行工具以使Cordova运行。 在您的终端上,运行: $ xcode-select-安装 有关iOS要求的更多信息,请访问: https://cordova.apache.org/docs/en/7.x/guide/platforms/ios/ 安卓 安装Java SE开发套件8(JDK) 访问Oracle网站并安装Java SE Development Kit 8。 […]

使用适用于Linux的DBR 5.2构建Swift条形码阅读器

几周前,苹果发布了Swift 4.0 ,可用于macOS和Ubuntu 14/16。 在本文中,我将分享如何使用Dynamsoft Barcode Reader SDK for Linux实现一个简单的Swift条码读取器(命令行工具)。 Windows 10。 VMware 11.1.2。 Ubuntu 14.04。 斯威夫特4.0。 适用于Linux的Dynamsoft条码阅读器5.2。 使用虚拟机时,如果要使用Windows工具为Linux编写代码,则可以使用共享文件夹。 通过虚拟机设置添加共享文件夹很容易: 但是,来宾操作系统中的/ mnt /下可能没有列出共享文件夹,例如Ubuntu 14.04。 运行以下命令以检查Ubuntu版本: lsb_release -a 要解决此问题,请下载并安装补丁程序: git clone https://github.com/rasa/vmware-tools-patches.git cd vmware-tools-patches sudo ./patched-open-vm-tools.sh sudo vmware-config-tools.pl sudo reboot 现在您可以看到共享文件夹和文件。 这种方式适用于运行如下所示的快速代码: 迅捷xxx.swift 但是,如果使用swiftc编译代码,则会导致错误: swiftc test.swift /usr/bin/ld.gold: fatal error: test: Input/output error clang: error: linker command […]