Tag: 开源

GitHub上的10个快速项目

基于mpv,可在macOS上提供最佳解码能力 专为现代macOS(10.10+)设计,旨在提供最佳的用户体验 视频,音频,字幕,播放列表,章节等所需的所有功能。 强制触摸,画中画和(高级)Touch Bar支持 精选的iOS框架,库,教程,Xcode扩展和插件,组件等等的精选列表。 该列表分为几类,例如框架,组件,测试和其他,开源项目,免费和付费服务。 每个类别中没有预先确定的项目顺序,该顺序是用于贡献的。 如果您是计算机科学专业的学生,​​需要学习这些东西以进行考试–或者您是一个自学成才的程序员,并且希望重新学习您的手艺背后的理论,那么您来对地方了! 该项目的目的是解释算法如何工作。 重点是代码的清晰度和可读性,而不是制作可放入您自己的项目中的可重用库。 就是说,大多数代码都应准备好用于生产,但是您可能需要对其进行调整以适合您自己的代码库。 Rx是通过Observable 接口表示的通用计算抽象。 这是Rx的Swift版本。 它尝试从原始版本中移植尽可能多的概念,但对某些概念进行了改编,以便与iOS / macOS环境进行更愉快,更高效的集成。 Vapor是Swift的Web框架。 它为您的下一个网站,API或云项目提供了精美而易用的基础。 很棒的Swift库和资源的协作列表。 随时贡献! 可链接的请求/响应方法 URL / JSON / plist参数编码 上传文件/数据/流/ MultipartFormData 使用请求或继续数据下载文件 使用URLCredential进行身份验证 HTTP响应验证vv Material的动画系统已被完全改编,以利用Motion(专用于动画和过渡的库)的优势。 一些功能: 完全可定制 运动动画和转场 自动版图和网格系统的版图工具 颜色库 牌 英雄类似于Keynote的Magic Move。 它检查所有源视图和目标视图上的heroID属性。 然后,每个匹配的视图对都会自动从其旧状态转换为新状态。 Hero还可以为无与伦比的视图构建动画。 通过heroModifiers属性很容易定义这些动画。 Hero将与Magic Move动画一起运行这些动画。 所有这些动画都可以通过用户手势进行交互控制。 Eureka允许我们指定何时应该评估验证规则。 我们可以通过设置validationOptions行的属性来实现,该属性可以具有以下值: .validatesOnChange —每当行值更改时验证。 .validatesOnBlur —(默认值)在单元格退出第一响应者后立即验证。 […]

我如何建立我的第一个开源库

上周,我发布了我的第一个开源库QuickTicker。 这是一个Swift库,可让您使用一行代码创建简单的股票行情动画。 结果看起来像这样: 在这篇文章中,我想谈谈这个项目并介绍: 为什么我创建这个图书馆 我是如何构建的(编码部分) 最终详细信息(示例项目,单元测试,README.md,Cocoapods) 要点和一般建议摘要(又名TLDR) 从一个明显的问题开始,我决定构建该库的原因是因为无论如何我通常最终都会将此功能集成到大多数项目中。 因此,我想我也可以使其更通用一些,然后将其打包到一个可以轻松添加到任何项目的库中,而不是在项目之间复制和粘贴代码。 构建此库对我来说也是一个机会,使我可以练习有关API的思考并练习构建模块化代码,同时隐藏实现细节。 我还必须使用泛型,而以前的任何项目都没有使用过泛型! 当我开始这个项目时,我的目标是建立一个简单的库,使您可以为类似于上面的gif的标签制作动画。 我最终在整个项目过程中添加了一些其他功能,尽管核心概念仍然相同。 这是我最终获得的功能列表: 仅使用一行代码即可开始制作动画 任何使用过UIView动画方法的人都熟悉的语法 接受任何数值作为最终值,您无需转换或打字 即使在同一标签中混有数字的文本也可以使用。 文本保持完整而数字动画化👍 完成处理程序可让您安全地将动画后的动作排队 您可以选择指定标签的动画曲线和小数点 可同时在UILabel和UITextField上使用(我打算稍后进行扩展) 标签动画是该库的主要目的,是我从Brian Voong的youtube视频中学到的东西。 在视频中,Brian讨论了CADisplayLink,以及如何使用它在UILabel中为文本设置动画以创建计数器和其他类似效果。 CADisplayLink正常工作,需要一些样板代码(包括选择器和@objc方法),而我认为该库可能会有用。 在继续之前,我想提到Daniel Kennett在Swift&Fika 2018上发表的关于API设计的演讲。 在该演讲中,Daniel谈到了API边界 ,这是API代码和用户代码之间的界线 。 作为API设计人员,您可以选择边界的去向,而这个决定可能会产生很大的影响。 边界越接近用户代码,您作为API设计人员要做的工作就越多。 作为回报,该API对于用户而言变得更加容易实现(请以其简单的安装过程来思考Crashlytics)。 丹尼尔展示了这张图片来传达这一点: 另一方面,如果您决定将边界放置在离代码更近的地方,那么最终您将不得不编写更少的代码,但是却为用户提供了更多的工作。 作为回报,他们通常最终会对API拥有更多控制权。 Daniel提供了Spotify元数据的示例: 我认为这两种方法都不对。 这完全取决于您要使用API​​来完成的工作。 就QuickTicker而言,我的目标是使用户入门尽可能简单,理想情况下是单行函数调用。 因此,我有兴趣制作与第一张图片(Crashlytics)更相似的图片。 该库的早期版本未使用专用类型。 相反,我将其构建为UILabel类型的扩展(如果您好奇它的外观,仍然可以在github的早期提交中看到它)。 因此,您可以直接在标签上使用点语法来调用API,如下所示: 让someLabel = UILabel()someLabel.startTicker(持续时间:2,最终值:250) 对于这种方法,我有些不满意的地方。 我不是扩展整个UILabel类型的忠实拥护者,因为当他们可能只需要为一个或两个标签设置动画时,我不想为用户污染所有UILabel的名称空间。 这种方法还意味着,如果不复制所有代码,就无法将相同的功能扩展到其他类型,例如UITextField。 顺便说一句,在早期的类型扩展试验中,我了解到实际上可以在Swift中为类型扩展添加存储的参数。 为此,您必须将计算所得的属性定义为关联的对象,然后使用关联键访问该对象,关联键是指向该关联的唯一指针。 […]

公开食物事实夏季食品’18

Open Food Facts是一个免费的在线人群资源数据库,来自世界各地。 该项目的目的是通过以下方式改进以Swift语言编写的新的本机iOS应用程序,以推动大规模采用和大规模贡献: 登机屏幕介绍功能 即时更改语言 连续扫描条形码和覆盖 个性化 离线贡献 滴灌编辑 更新用户界面 在App Store中列出特定关键字 增长黑客技术以获取更多客户 应用商店优化 用户测试的评论和评分 每个功能都将由Open Food Facts提供的基础API提供支持。 主要目的是通过实施新功能和改进现有功能来增强用户体验。 通过添加内联注释和完善文档,该项目也将变得对开发人员更友好。 您可以在GitHub上找到该项目。 openfoodfacts / openfoodfacts-ios openfoodfacts-ios – Open Food Facts的iOS版本(Swift)。 我们需要帮助🙂 github.com

向Lona添加组件复制

如您所知,我决定继续为Lona做出更多贡献,本周早些时候,我有机会向该应用程序添加了新功能。 以下是我的贡献概述: 功能要求⚙️ 用户通常会基于现有组件创建新组件,而唯一的方法是转到Finder并复制并粘贴组件文件。 因此,有一个功能请求,即向File Navigator添加组件复制支持。 首先,让我们看一下File Navigator中文件的上下文菜单: 我的任务是在上下文菜单中添加一个名为“ Duplicate As…”的新选项,选择该选项后,它将显示“保存”对话框。 用户键入文件名,选择文件的位置并按“保存”后,程序应在“组件编辑器”中打开一个新创建的组件。 链接到问题: [Lona Studio]添加简单的组件复制·问题#355·airbnb / Lona 简介创建新组件时,通常以复制一个现有组件为起点。 有一个…… github.com 实施⚒ 在FileNavigator类中有一个功能menuForFile ,它创建了一个上下文菜单,这就是我需要放置新代码的地方: // 检查所选文件是否具有“ .component”扩展名 如果 NSURL(fileURLWithPath:path).pathExtension ==“ component” { menu.addItem(NSMenuItem(title:“ Duplicate As …”,onClick:{ var saveURL:字符串 // 显示保存对话框 让对话框= NSSavePanel() dialog.title =“保存.component文件” dialog.showsResizeIndicator = true dialog.showsHiddenFiles = false dialog.canCreateDirectories = true dialog.allowedFileTypes = [“ […]

维护一个不断发展的开源项目

最好的部分是旅程 在2015年,我开源了一个名为SwiftyStoreKit的小型Swift框架。 目标: 在iOS上简化应用内购买 。 我以前曾写过关于它的经验的文章: 我如何在GitHub Project上获得1000⭐️ 这是关于我的旅程如何继续进行以及该项目如何推动我成为更好的开发人员的后续报告。 首先,我想分享一些很棒的资源,这些资源给了我启发,并提供了许多有关如何发展项目的实用技巧。 GitHub开源指南 开源指南 了解如何启动和发展您的项目。 开源指南 本指南包含一些很棒的材料。 我特别建议本节: 维护者最佳实践 从文档编制流程到利用社区,您都可以轻松地成为开源维护者。 开源指南 扩展开源社区 Felix Krause在他非常详细的“扩展开源社区”文章中谈到了开源项目的四个阶段。 摘要: 阶段1:在GitHub上放置源代码 阶段2:开发人员开始使用您的软件 阶段3:项目很受欢迎,并且是该领域的首选解决方案 阶段4:超大规模开源项目 我不能推荐这个。 去读吧 而这个: Artsy的开源 。 进入下一个层次 当SwiftyStoreKit去年变得流行时,开发人员开始提出问题并提出要求。 压力很大 作为唯一的维护者,由于许多问题,我感到有些压力: 问题列表正在增长。 其中一些强调了项目特定领域的缺陷。 StoreKit不是一个琐碎的框架,我对某些方面不太了解。 我担心在进行更改时会引入回归。 对于IAP多久失败一次以及在什么情况下失败,我没有任何度量标准。 我的用户销量下降了吗? 1%,5%,10%? 更多? 我无法在所有可能的端到端配置(iOS,macOS,tvOS,沙箱,生产,iTunes停机,帐户/ IAP配置问题等)中有效地测试我的媒体库。 保持理智 我意识到我必须做一些事情: 阅读有关StoreKit的更多信息,并确保我的实施符合Apple的准则。 井井有条,对问题和PR做出更及时的响应。 避免蠕变,并学会何时拒绝。 添加单元测试。 标准化和简化贡献,包括我的和其他用户的贡献。 我做了什么 完全以完整的单元测试覆盖范围重写了采购流程。 […]

Swift编写的5个惊人的开源项目

1号 airbnb /洛娜 用于定义设计系统并使用它们生成跨平台UI代码,Sketch文件,图像和其他工件的工具。 airbnb /洛娜 Lona –用于定义设计系统并使用它们生成跨平台UI代码,Sketch文件,图像等的工具。github.com 2号 Juanpe / SkeletonView 向用户显示正在发生的事情并为他们准备等待的内容的一种优雅方式 Juanpe / SkeletonView SkeletonView –一种向用户展示正在发生的事情并为他们准备他所要包含的内容的优雅方法 。github.com 3号 互动工作室/ TransitionableTab 当在选项卡之间切换时,TransitionableTab使其易于制作动画。 互动工作室/ TransitionableTab 当在选项卡之间切换时,TransitionableTab使其易于制作动画。 github.com 4号 fastred / Optimize-Swift-Build-Times [f:id:junp0819:20171125170942p:plain] 收集有关优化Swift项目的编译时间的建议。 fastred / Optimize-Swift-Build-Times Optimizing-Swift-Build-Times –关于优化Swift项目的编译时间的建议集。 github.com 5号 瑞文德利希/迅捷算法俱乐部 Swift中的算法和数据结构,并附有解释! 瑞文德利希/迅捷算法俱乐部 swift-algorithm-club – Swift中的算法和数据结构,并附有说明! github.com

RxSwift中重试运算符的指数补偿

本文将专门介绍我们称为RxSwiftAutoRetry的新开源库。 它是RxSwift的一个小扩展,可以重试以指数延迟的流。 它不是很复杂,我相信该操作员可以节省时间,并有助于发送网络请求。 在进一步详细介绍该库的确切功能以及如何正确使用它之前,我想向您简要说明为什么我们决定创建它。 前一段时间,当我创建一个用于测试的小项目时,我想尽可能多地利用RxSwift。 该项目将服务用于请求,这些服务也由RxSwift维护。 一切都按预期进行。 但是我在负责请求的部分上工作的时间越长,我就越想知道它在每种情况下是否都能正常工作。 然后我意识到,这会在接收瞬​​态故障时引起潜在的问题。 短期内,短暂故障是由于服务不可用(网络错误或服务器过载)而无法与外部服务进行通信时发生的一种故障。 但是,几秒钟后再次调用服务可能会成功。 为了防止瞬态故障,我们可以使用指数退避算法,该算法在每次重试时都会以指数方式增加延迟时间。 为什么采用指数算法? 想象一下当您由于服务过载而收到瞬态故障时的情况。 当新请求接近该服务时,它们将自动被拒绝。 如果我们不断尝试以固定的时间重试,则可能会成功。 但是,我们也会增加服务的负担。 在这种情况下,服务将保持不可用状态的时间更长,恢复时间也将更长。 但是,如果不是在固定的时间延迟后重试,而是在每次重试时增加它,该怎么办? 例如,第一次失败后,我们将等待1秒,第二次失败后,将等待2秒,第三次失败后,将等待4秒,依此类推。 这可以使我们的服务有足够的休息时间来解决过载问题。 重试运算符已经在RxSwift中实现,但是我认为它与网络请求不兼容,因为: 收到错误事件后立即重新发出所有事件(无延迟) 如果用户提供参数,则重新发射将处于无限循环中,或者将持续指定的重试次数 如果某些实例同时发出,则可能发生数据包冲突。 为了避免数据包冲突,我们的重试操作符版本使用了抖动。 它是一个乘以指数值的随机值。 因此,即使两个用户同时发送网络请求,也不会有任何数据包冲突。 我们提供了三种非常简单的方法将库导入项目。 您可以通过CocoaPods,Carthage和Swift Package Manager来完成。 所有说明均在本文开头提到的GitHub站点上提供。 那么您如何使用它呢? 这很简单。 最简单的方法: Observable.retryExponentially() 实际上,这就是您需要做的所有事情。 当然,如果您想为此方法提供值,则可以编写如下代码: 不用担心,我将解释这些参数负责什么: maxAttemptCount —重复序列的最大次数。 (默认值: 3 ) 抖动 —乘法器,它使延迟时间随机化。 从给定范围内选择随机值。 (默认值: 0.9…1.1 ) 调度程序 —将在其上执行延迟的调度程序。 (默认值: ConcurrentDispatchQueueScheduler(队列:DispatchQueue.global()) […]

Flutter可以代替Java进行Java开发吗?

手机行业的发展以及由此带来的移动应用推动了新的移动应用框架的发展。 仅将本机开发框架用于移动应用程序开发的日子已经一去不复返了。如今,随着许多强大的跨平台应用程序开发框架的加入,应用程序开发市场发生了巨大变化。 即将推出的此类应用就是名为“ Flutter ”的Google移动用户界面框架。 Flutter是一个开源移动应用程序开发框架 ,主要用于为iOS和Android设备开发跨平台移动应用程序。 使用Flutter SDK开发的应用程序能够提供非常好的用户体验,并且由于开发人员必须编写单个代码库,因此可以非常快速地启动电子商务,食品和购物等应用程序。 凭借其更快的开发,引人入胜的视觉效果,成本效益等关键品质,此Google Powered SDK将彻底改变移动应用开发市场。 颤振的流行 关于Flutter可能会取代Java进行Android应用程序开发的讨论非常多。 与Java相比,某些原因使其变得越来越流行。 1.生产力 以我们最近的一个Android应用程序项目为例,我们花了2个月的时间与3位Java开发人员一起开发了第一个Android本机版本。 同时,我们仅用1个Flutter开发人员就花了3个月的时间来使用Flutter开发相同的应用程序。 此外,我们必须编写的代码量是为Android编写的Java代码的1/3。 2.跨平台性能 许多人开始相信Flutter在实际使用通过Flutter SDK开发的应用程序时可以提供与iOS和Android上的本机应用程序相同的性能。 3. Dart更像是Java,而不是JS 通过使用Dart(一种已编译的编程语言),Flutter采取了一种截然不同的方法,以避免由于JavaScript桥的需求而导致的性能问题。 Dart允许Flutter与特定平台进行通信,而无需使用进行上下文切换的JavaScript桥。 通过编译为本机代码,它可以缩短应用程序启动时间。 4.高性能应用 Flutter是一个框架,可以指导您适应诸如Java之类的本机应用程序开发语言无法实现的模式,例如反应式和合成开发。 当您的应用程序变得更大时,此功能被证明是有益的。 颤振的问题 尽管如上所述,Flutter具有许多优势,但它需要更多的发展才能与Swift和Java等本机应用程序开发框架竞争。 Flutter应用看起来很像本机应用,但是有点偏离。 Flutter框架的另一个问题是,它并不是本机寻找iOS设备。 它主要适用于Android用户。 它优先考虑Android平台的支持,这还不错,但是因此会影响您的跨平台体验。 没有一个适合所有解决方案的尺寸。 Flutter的开发旨在支持后端的多种语言,但根据开发人员的经验,发现它仅支持Dart的GUI部分。 GUI在精简的chrome的顶部开发。 没有JS,也没有DOM,因为在浏览器中像JS一样使用dart。 它仍然是一个不断发展的框架,社区支持有限。 将来,Flutter可能会有所改进并吸引开发人员,但是仍然必须与其他非本地流行的跨平台框架(例如React Native)竞争。 移动应用程序开发公司应开始适应诸如Flutter之类的新应用程序开发框架,以适应市场趋势和客户需求,但在企业移动电话采用此类框架成为主流之前,需要解决一些问题。应用开发。 它将需要支持对所有电话设备和操作系统的本地访问。 它需要使用Swift,而不仅仅是iOS的ObjectiveC。 性能和用户体验应与本机应用程序相提并论。 为了真正采用,它还需要缩小桌面间隙。 结论 Flutter是一个相对较新且发展中的框架,它有潜力取代本地应用程序开发框架(例如Java for Android)。 但是,它必须解决一些关键问题,例如对iOS应用程序的有限支持,诸如性能之类的本机。 请随时与我们联系,以帮助您确定最适合您的移动应用程序开发项目的框架。

我的第一个开源项目

两个月前,我加入了Neura,担任开发人员计划负责人,以围绕Neura的产品创建一个强大的开发人员社区。 从一开始就很明显,我们需要: 1.让我们的用户(开发人员)拥有流畅的体验,将我们的SDK集成到他们的移动应用中 2.阐明使用我们产品的最佳实践。 Neura的SDK可以通过多种方式使用。 我想确保我们提供的最基本的用例(在最佳时机吸引最终用户)可以作为代码示例下载和修改。 我爱开源 作为开发人员,我无法想象没有它。 我过去曾为开源项目做出过贡献,有时是通过贡献代码,有时是通过积极开放新问题并帮助其他开发人员使用它来做出贡献。 我一直想发布自己的项目,但是我要么还不够好(我今天不知道这个原因),要么我只是从事代码工作,却看不到如何完全或部分开源(再次,今天我知道答案是“只问一个人”)。 当我开始新的职位时,我知道我必须实现这个目标。 幸运的是,在潜入更大的任务后不久,其中一个提出了挑战,迫使我创建了一个补充项目。 该辅助项目是一个简单的Node.js应用程序,可以将最终用户的数据持久保存到(MongoDB)数据库中,并根据Neura的机器学习算法将推送通知发送给这些用户iOS设备。 这个辅助项目(一个示例iOS应用)实现了基本的医学依从性概念。 一旦服务器启动并运行,很明显该应用程序也是一个很好的开源候选人。 它具有简单的UI,实现了简单的网络解决方案,并且整个项目都基于MVC。 这就是我们这里,而不是Github上的一个开源仓库,我从一开始就有两个! 这个项目囊括了Neura的特定开发实践以及客户-服务器开发的一些一般原则,这一事实使我为自己的工作感到更加自豪:)。 Node.js Webhook示例:https://github.com/NeuraLabs/neura-webhook-sa​​mple。 iOS应用示例:https://github.com/NeuraLabs/neura-meds-reminder-ios。 如有任何疑问,请在此处评论或通过Twitter和LinkedIn与我联系。 另外,我们正在招聘!

解决iOS上的强制门户问题

在iOS开发中,检测Internet连接的实际方法是利用Apple的Reachability示例代码。 但是,“可达性”实际上无法检测是否存在连通性, 只是可以使用可能允许连接的接口 。 考虑一个应用程序用户使用公共Wi-Fi热点的情况,这要求用户在建立Internet连接(例如在您当地的星巴克分行)之前通过强制门户注册或同意服务条款。 该设备似乎已连接到Wi-Fi网络,但对数据的任何请求都将失败,直到用户同意Wi-Fi热点的服务条款或注册为新用户为止(取决于热点的要求)。 在这种情况下,可到达性将返回一个响应,指示即使实际上没有真正的Internet连接也可以使用Wi-Fi。 这可能会引起混乱,因为您的应用程序在连接到该热点时会表现为在线状态,因为可访问性检查将表明存在Wi-Fi连接。 同时,您的应用尝试从Internet检索数据的尝试将失败。 反过来,这可能会导致在App Store上的评论不佳。 那么,如何确保我们的应用程序具有真正的Internet连接? 事实证明,iOS已经可以解决此问题。 iOS采用了由无线宽带联盟发布的称为无线互联网服务提供商漫游(WISPr 2.0)的协议。 该协议定义了“智能客户端访问网关”接口,该接口描述了如何使用通用访问方法对访问公共IEEE 802.11(Wi-Fi)网络的用户进行身份验证,其中强制门户向用户显示登录页面。 然后,用户必须通过Web浏览器注册或提供登录凭据,才能使用RADIUS或其他提供集中式身份验证,授权和计费(AAA)的协议来授予对网络的访问权限。 为了检测到它已通过强制门户连接到Wi-Fi网络,iOS与Apple托管的许多端点进行了联系-例如https://www.apple.com/library/test/success.html。 。 每个端点都托管一个表单的小HTML页面: 成功 成功 如果在下载此HTML小页面时,iOS发现它包含如上所述的Success一词,则它知道Internet连接可用。 但是,如果强制性门户网站显示登录页面,则不会显示Success字样,iOS将意识到网络连接已被强制性门户网站劫持,并将显示一个浏览器窗口,允许用户登录或注册。 Apple托管了许多这样的页面,因此如果其中一个页面出现故障,可以检查许多后备以确定是否存在连接或是否存在强制门户网站阻止了我们的连接。 不幸的是,iOS没有向开发人员公开任何框架,这使我们无法利用操作系统对强制门户的了解。 连接是MIT许可下可用的开放源代码框架,该框架包装了Reachability,并努力复制iOS检测强制门户的方法。 当“可达性”检测到Wi-Fi或WWAN连接时,“连接性”会与许多终结点联系,以确定是否存在真正的Internet连接,或者俘虏门户是否正在拦截连接。 此方法还可用于确定iOS设备是否连接到无法访问Internet的Wi-Fi路由器。 连接性提供了一个尽可能接近可到达性的接口,以便习惯使用可到达性的开发人员熟悉它。 这包括提供方法startNotifier()和stopNotifier()来开始检查Internet连接的更改。 通知程序启动后,您可以使用status属性(类似于Reachability的currentReachabilityStatus )同步查询当前的连接状态,也可以通过向默认NotificationCenter注册观察者kNetworkConnectivityChangedNotification通知来异步查询当前的连接状态(在Swift中,可以通过Notification.Name.ConnectivityDidChange访问Notification.Name.ConnectivityDidChange )-与可达性通知kNetworkReachabilityChangedNotification相似。 默认情况下,Connectivity与iOS已使用的许多端点进行联系,但建议通过附加到connectivityURLs属性,由开发人员托管的端点来补充这些端点。 通过设置successThreshold属性,可以进一步进行自定义,该属性确定已联系端点的百分比,必须得出成功检查才能得出存在连接的结论。 缺省值指定所联系的URL的75%必须成功完成连接检查。 要开始使用Connectivity,只需实例化一个实例,并指定一个在Connectivity检测到您已连接到Internet,断开连接时或在以下两种情况下调用的闭包即可: 让连通性:Connectivity = Connectivity()let ConnectivityChanged:(Connectivity)-> Void = { self?.updateConnectionStatus(connectivity.status) } connectivity.whenConnected = ConnectivityChanged Connectivity.whenDisconnected = ConnectivityChangedfunc updateConnectionStatus(_ […]