Tag: swift

Swift Beginner:如何仅在开发模式下运行代码

有时,当我们在编程时,我们希望只在开发模式下运行一些代码,例如,将API的URL从“开发”更改为“生产”,或者用测试用户和密码填充登录视图。 为此,我们可以使用#if #elseif #else #endif语句来定义条件编译块,如swift文档中所述 #if调试 usernameTextField.text =“快速” passwordTextField.text =“ swiftIsAwesome” #万一 默认情况下,此代码已从Release版中删除,您还可以使用在Target 构建设置/ Swift编译器自定义标志中定义的Xcode活动编译条件来定义自己的标志 直到下一次…

快速状态栏图标菜单

我之所以写本教程,是因为我的应用程序Blinkk(http://ralcr.com/blinkk/)需要一个,并且在网上搜索了一个教程,这很自然,但是一切看起来都很复杂,无法进行任何工作。 所以复制/粘贴解决方案是不可能的,我决定了解它是如何以编程方式工作的,最终变得非常简单。 我对插座和Xib没问题,但是为简单菜单而需要连接它们的方式使我感到紧张,我没有耐心去学习比UI元素或动作更重要的东西。 因此,这就是您所需要的,可以将其放置在applicationDidFinishLaunching中 我遇到的问题: 应该强烈引用item var,否则您将看到图标从状态栏中消失 启用项目将目标添加到每个NSMenuItem

使用PromiseKit在Swift中承诺

Promise在Java Script中非常强大,可帮助我们处理异步编程过程。 现在我们可以通过PromiseKit在Swift中使用Promise mxcl / PromiseKit PromiseKit – Swift和ObjC的承诺 github.com 例如,我们有一个任务要做,即从后端获取图片网址,然后从该网址下载图片,最后在图片视图上显示图片 所以对于正常的工作,我们会这样做 它只是一个简单的获取URL和下载图像,但我们仅出于一个目的就需要完成三个任务:(1)获取Image Url,等待获取完成,然后下载图像(2)最后在下载时在ImageView中显示该图像过程已经完成。 因此,让我们通过Promise使这项工作更加容易,让我们在此文章顶部的Git Hub链接中安装Promise。 首先,我们创建“获取网址的承诺”并下载图片 现在将这些Promises连接在一起,我们可以将其称为Promise Chain,下一个.then()将以先前的返回值作为参数 好的! 现在更容易。 在过程中,让我们进入显示/隐藏指示器的下一个级别 因此,有一段时间我们遇到了一个问题,我们需要处理多个异步任务,然后等待那些结果继续并且这些结果不是相同的格式。 好吧,这可能会使您的应用程序变慢。 幸运的是,我们在PromiseKit中有“ when()”。 在when()中,添加要同时执行的所有promise,它将等待所有promise解析后再继续。 让我们来看看 PromiseKit可以做很多事情,在我的文章中只关注并发。 Promise提高了可读性,并使控制并发变得更加容易。 有关PromiseKit的更多信息,让我们尝试一下PromiseKit文档:https://github.com/mxcl/PromiseKit/blob/master/Documentation/CommonPatterns.md

完成处理程序:Swift

完成其他任务时执行。 介绍: 当我开始学习Swift时,我非常困惑一些概念完成处理程序就是其中之一。 在本文中,我将解释什么是完成处理程序及其工作方式以及为什么需要它。 在学习完成处理程序之前需要了解什么: 为了清楚地了解完成处理程序,我们需要了解闭包的基础,练习闭包,关于同步和异步功能的一点点知识。 您可以在这里聊天我发表的有关闭包的文章。 为什么我们需要完成处理程序: 在函数中,如果我们需要完成另一个任务之后再执行任何任务,而不是如何实现它。就像我们在完成下载后将更新UI那样,如何实现它? 换句话说,我们如何进行有序执行? 所有这些类型的问题解决了完成处理的概念。 制作完成处理程序: 创建一个完成处理程序闭包,然后将其传递给函数。 在这里,我们创建一个完成处理程序闭包,其类型为()→Void。现在,我们将创建一个可以使用此闭包的函数.. 在这里,我们创建一个函数,该函数带有()→Void类型的参数。现在通过调用像这样的函数来实现此功能。 因此,必须先执行takeCompletehandler主体语句,而不是执行编译处理程序。 控制台将像。 从函数主体 从完成处理程序开始! 让我们举另一个例子: 让我们做一个从服务器下载数据,并在完成下载后给用户通知的功能。 首先创建下载功能。 下载完成后,此函数可以使用一个闭包和一个bool参数。完成处理程序参数取真值并发出通知。现在,让create和完成处理程序闭包将采用bool值,但不返回任何内容…… 让我们实现功能 因此,它应该打印从服务器下载的数据..比打印“完全下载数据”要大100倍 //打印此 从sarver 下载数据…从sarver 下载数据…从sarver 下载数据…从sarver 下载数据 …从sarver 下载数据… …… 完整的下载数据 直接将Closure作为完成处理程序传递: 我们知道我们可以直接在函数参数上写闭包,所以让我们实现这个.. 这也打印相同,完成处理程序将在下载完成后执行..并给出通知… 短手 我们也可以这样写得很短: 在这里,我们不使用参数,而是使用swift默认参数。 现在,如果我们使用Trilling闭包,我们也可以像这样使用 因此,最后我们很清楚,抱怨处理程序无非就是在函数中传递闭包,并在其他操作完成后使其执行。 通过完成处理程序传递数据: 我们可以通过完成处理程序传递数据。 首先创建一个可以接受类型([String])→无效的函数 让我们实现这个 现在,控制台应该比完成打印处理程序数组打印“做一些工作”十倍。 做一些工作 做一些工作 做一些工作 做一些工作 …… …… // […]

IBM Cloud Private添加了对开源Java,Node.js和Swift运行时的支持,并选择了Frameworks

无论是对现有应用程序进行现代化改造还是构建新的云原生微服务,基于云的应用程序都越来越多地由使用多种编程语言和框架构建的组件组成。 这就是为什么IBM Cloud Private现在包括对开源Java,Node.js和Swift运行时以及精选的Web和微服务框架的服务和支持,从而使您能够构建最佳实践的架构模式: 通过扩大企业可以支持的应用程序和工作负载的范围,这进一步提高了IBM Cloud Private提供的价值。 此新支持包含在IBM Cloud Private Cloud Native Edition的2.1.0.3版本中。 除了对使用IBM WebSphere Liberty构建的应用程序和微服务的现有支持之外,IBM Cloud Private现在还为使用以下构建的应用程序提供支持: Java具有1200万开发人员和超过5000万面向Internet的实例,其中包括一些世界上流量最高的网站,是企业应用程序的基石。 这涵盖了当今正在现代化的应用程序和新型微服务。 通过OpenJ9对OpenJDK的额外支持,使您可以运行WebSphere Liberty以外的框架,并有信心获得对Java运行时的支持。 服务器端JavaScript运行时Node.js在过去几年中取得了飞速发展,现在有400万开发人员和900万已部署实例。 这种增长正在持续,去年的使用率几乎翻了一番,并巩固了在一些大型公司中进行生产部署的企业的采用率。 增加了对Node.js本身以及Express.js和Loopback框架的支持,这意味着IBM Cloud Private现在包括对超过95%的基于Node.js的Web和微服务框架使用的支持。 Swift是Apple为iOS设备创建的编程语言,现已在服务器上提供,它是进入RedMonk编程语言排名前十名的最快语言。 尽管仅开源两年,但它已经拥有240万开发人员,并且在为移动应用程序构建后端服务方面的使用量正在迅速增长,去年服务器使用量增长了400%以上。 对Swift本身以及Kitura(企业用户中最流行的服务器端Swift框架)的支持,意味着IBM Cloud Private现在可以为iOS设备构建和部署全栈移动后端。 支持哪些版本? 在请求时,将为各个社区提供的最新版本提供支持,这些版本被相应的社区支持。 例如,这意味着Node.js的所有长期支持(LTS)版本。 可以在IBM Cloud Private 2.1.0.3(5737-E67)许可证文件中找到每个开源运行时的支持条款和条件。 立即开始 要开始使用开源运行时和框架来构建和部署应用程序,请立即下载IBM Cloud Private Community Edition。 通过提供自己的Docker映像,可以带来使用AdoptOpenJDK.net,nodejs.org或swift.org中的开源运行时的现有应用程序。 或使用我们的微气候工具或Express,Loopback或Kitura的特定于框架的工具来构建应用程序。 当准备好支持的环境时,请确保您的应用程序已部署在IBM Cloud Private Cloud Native Edition上。 上面的开源运行时和选择框架未随IBM Cloud […]

使用Face ID保护iOS应用程序

脸部ID和触摸ID等生物识别安全性有助于使iOS移动设备对用户更加安全和便捷。 这些技术也可以由第三方应用程序使用。 接触ID根 2013年,Apple推出了一种新的生物识别方法,即使用主页按钮(Touch ID)中内置的指纹传感器来解锁其移动设备。 在使用Touch ID之前,想要保护iOS设备免遭未经授权的访问的用户可以通过输入4位数的PIN码(后来扩展为更长的6位数的密码)来实现。 虽然iOS设备上的数据继续通过使用底层PIN码进行加密来保护,但Touch ID为用户提供了一种便捷的方式来解锁设备并仅需触摸一下即可确认其身份。 输入面孔ID 随着iPhone X的推出,Apple引入了新的生物识别安全机制-人脸ID。 商标名称“ Face ID”描述其自身。 Face ID不会使用扫描的指纹来识别用户,而是使用对用户面部的扫描来匹配设备上存储的配置文件。 我将针对人脸ID进行讨论,但值得注意的是,人脸ID和触摸ID都是生物识别安全性的不同变体。 从体系结构和开发的角度来看,两者都以相同的方式运行,并提供等效的应用程序体系结构收益。 触摸ID和面部ID以相同的方式操作,并提供等效的应用程序架构 Touch ID使用指纹脊图作为识别其用户的方式,而Face ID使用轮廓和面部特征的3维图。 Face ID使用其签名的True Depth红外摄像机将30,000个点投影到用户的脸上,然后读取图案以创建其面部轮廓图。 Touch ID指纹签名和Face ID面部轮廓图存储在iOS设备的Secure Enclave中。 最终用户只能访问该数据(使用只有该用户知道的PIN加密),并且永远不会离开设备本身。 在第三方应用程序中利用Face ID 尽管大多数用户仅在解锁主屏幕上的iOS设备时才想到Face ID,但我们也可以使用Face ID为我们的第三方应用程序创建更安全,便捷的体验。 尽管用户习惯于在解锁设备时提示输入使用Face ID(或Touch ID)进行身份验证,但我们可以要求iOS随时提示他们使用生物识别安全性重新进行身份验证。 通常,在启动自己的iOS应用程序时,我们会在从iOS读取安全令牌或用户凭据之前提示进行生物识别身份验证 与第三方应用程序可访问的其他硬件功能一样,用户必须授权自定义应用程序使用Face ID。 我们必须在假设用户未授权我们使用Face ID(或正在使用不支持生物特征认证的设备)的前提下设计应用程序。 应用程序必须正常运行,并在无法提供生物识别安全性或无法识别用户时提供其他方式来标识/认证用户。 面部识别码的好处 将Face ID集成到我们的iOS安全体系结构中具有一些关键优势: 我们可以确定解锁设备的用户就是访问我们应用程序的同一个人。 我们可以提供额外的安全性,在从用户的钥匙串读取高度敏感的数据(例如,JWT令牌或密码)之前确保用户的身份 当提示用户输入Face ID(或Touch ID)时,可以放心,他们会确保我们认真对待其敏感信息的安全性。 安全架构 将从启动时使用Face […]

在蒸气上具有Swift的REST API

今天是个好日子! 最近,我需要一个服务器端存储,其中包含针对JSON数据文件的某种发现服务。 所以我把自己拆开了: 作为服务器端工程师,我的一部分正在努力将文件与另外一个JSON文件存储在Amazon S3上,以作为可用数据的发现信息。 作为iOS上的客户端工程师,我的另一部分是渴望在Swift中找到一些Web服务器框架并使用它。 经过一番与自己的斗争,由于以下事实,我决定提出这个职位: 最近,我主要忙于在Swift中开发iOS应用。 实际上,我非常渴望看到与更传统的服务器技术(例如Java,JavaScript等)相比,服务器上的Swift有何不同。 在本文中,我将实现一个简单的REST API Web服务器,该服务器能够提供由唯一ID标识的JSON数据,在本例中,一部分数据将表示为从Adobe After Effects(AAE)导出为JSON的动画。 (读为“某些JSON对象”)。 所以,让我们开始吧! 制备 在快速阅读了这篇有关大多数流行的基于Swift的Web框架(如Kitura,Perfect和Vapor)的有趣文章之后,由于它的快速开发特性(即Ruby on Rails和周围的活跃社区),我决定选择后者。 不过请注意-我并不是说这是最佳选择。 因此,让我们创建一个空的Vapor项目。 首先,我们需要遵循此准则安装Vapor框架及其命令行工具。 安装完Vapor之后,创建新项目非常简单,只需在Terminal中运行以下命令即可: $ vapor new AnimationsProviderServer 生成Xcode项目以简化我们服务器的开发也很有用: $ vapor xcode 至此,我们应该准备好打开甚至运行Xcode项目! 该服务器将在默认的8080端口上可用,因此您可以在浏览器中打开“ http:// localhost:8080” URL并检查其是否有效。 简短说明 :在撰写本文时,Vapor不支持开箱即用的“热重装”功能,但是可以通过NPMJS上可用的gulp-vapor软件包进行设置。 瞧,现在让我们编码一下! 资料模型 现在是时候向服务器添加一些逻辑了。 让我们创建一个模型实体来保存有关动画的信息,现在,表示动画所需的一切就是从Adobe After Effects(AAE)导出其标识符和JSON数据。 因此,动画模型可能如下所示: 注意:确保将导入的JSON文件添加到“ App”目标中。 数据存储 我们需要某种方式访问​​导入的动画资源,以实现可能想要实现某种存储实体的方式,我们将其称为AnimationsStorage: 为了使AnimationsStorage服务在Vapor控制器中可用,我们应该在configure.swift文件中注册它: 基本上,将configure.swift文件视为有关所有可用全局服务,实用程序等的信息源。 REST API 接下来,让我们创建一个简单的控制器,该控制器通过HTTP […]

高效迦太基

迦太基 由于iOS 8迦太基一直在帮助创建具有零配置的框架(通过单击复选框共享默认方案除外),因此无需在Xcode中创建工作区即可管理二进制级别的依赖项(由于ABI具有更大的价值即将到来,希望也可以共享动态的第三方库),并通过不指向GitHub而是指向本地文件系统上的目录来测试您的框架。 效率等级1 在项目中拥有第三方依赖性是一件好事,但如果您有大量使用或多或少使用同一组第三方框架的项目,该怎么办? 好吧,默认情况下,您将拥有每个项目中每个依赖项的源代码和二进制文件的副本。 那不是很有效,是吗? 因此,为您的所有项目创建一个共享的Carthage目录,并从使用该目录的每个项目中创建指向该目录的符号链接是有意义的。 让我们在主目录中创建一个共享的Carthage目录,方法是键入ln -s ~/Carthage ./Carthage ,然后输入mkdir Carthage ,然后在项目目录中,通过键入ln -s ~/Carthage ./Carthage创建一个符号链接。 效率等级2 默认情况下,许多框架可针对多个平台(iOS,macOS,watchOS,tvOS)进行编译。 如果我们仅使用iOS,该怎么办? 我们可以通过使用–platform iOS标志来–platform iOS构建时间,即仅针对所需的平台进行构建。 此外,当我们不想不必要地重建时,可以使用–cache-builds标志。 有时,当我们只需要检查较新的版本或更新源代码时,我们甚至可以使用–no-build标志。 效率等级3 它变得太冗长了,不是吗? 别名可以为您提供帮助! 让我们在主目录中创建文件.aliases ,方法是输入nano .aliases ,然后输入nano .aliases并向其中添加以下内容– 别名cartlink =“ ln -s〜/迦太基./迦太基” 别名cartboot =“ carthage bootstrap –no-build” 别名cartupdate =“迦太基更新–no-build” 别名cartbuild =“ carthage build –platform iOS –cache-builds” 现在,我们可以通过键入source ~/.aliases来启用别名,然后通过键入其名称使用任何别名,例如cartlink 。 […]

快速中级语言

Надняхна可可头-Санкт-ПетербургерассказалпроустройствокомпилятораLLVM和Swift中级语言。 Подкатомтекстовыйвариантдоклада。 Историческийликбез ПроектLLVM是2003年12月。 ДоэтогоонвтечениитрёхлетразрабатывалсявстенахИллинойскогоуниверситетакакнаучныйпрое。 苹果公司,2005年LLVM推出的Позднее,какмызнаем。 级别低的虚拟机。ИзначальнопроектLLVM。 Итаккакданноеназваниесбивалостолку,намекаянато,чтоврукахнаходитсявиртуальнаямашина,вбудущемLLVMпересталсчитатьсяакронимом – сейчасэтополноеназваниекомпилятора。 Унасестьобобщеннаясистемакоманд,прослойкаабстракцииотконечнойархитектуры,норевер Этонеболее,чемсистемакоманд,котораяможетиспользоватьсядлядостижениясвоихцелей。 АрхитектураLLVM LLVM中的应用程序—图库视频影像#132848108 LLVM。LLVM —Проскомпиляторсмодульнойархитектурой。 Онсостоитизтрехмодулей,您在каждогоизкоторыхестьсвоячеткаязонаответственности: 前端; 中端(优化程序); 后端。 中间代表(IR)。 задачей 前端’ аявляетсяпреобразованиеязыкавысокогоуровня(Swift’а),是IR; 中端 ответственензаоптимизациюэтогопромежуточногопредставления; 后端 преобразуетэтопредставлениевмашинныйкодподконкретнуюархитектуру。 Дляпреобразованиякодавнекотороепромежуточноепредставление,такжевыполняетсяцепочканекоторыхпреобразований,входекоторыхкодпредставляетсявтрехразныхпредставлениях。 Навходкомпиляторупоступаеткод,написанныйнаязыкевысокогоуровня。 迅速添加Swift。 Первыйэтапназывается 解析 。 Парсерответственензагенерациюабстрактногосинтаксическогодерева— AST( 抽象语法树 )безкакой-либосем Затемнаступаеточередьсемантическогоанализа( 语义分析 )。 Врезультатечегоформируетсяужесемантическикорректноетипизированноесинтаксическоедерево。 Наэтомэтапеопределяетсяналичиесемантическихошибок。 Наследующемшагепроисходитимпорткода,Objective-CиC,例如Swift’овоепредставление。 备注ClangImporter 。 Swift中级语言Swift中级语言вегопервойформепредставления。 ПерваяформаSILпоступаетнавходоптимизатору。 Которыйвыполняетанализ,оптимизациюитрансформациюэтойформывканоническую。 Сначаланашагетрансформациивыполняетсядиагностикапотокаданныхигарантированныепреобразования,повышающиепроизводительностьпрограммы(определяетсяиспользованиенеинициализированныхпеременных,проверяетсядостижимостьвсехузловграфапотокаданных)。 ДальшеSILOptimizerвыполняетвысокоуровневыедоменно-специфичныеоптимизациидлябазовыхтиповконтейнеров。 Такжеонответственензадевиртуализациюфункций,ARC ARCиспецификациюдженериков。 ПослеэтогоужегенерируетсяпромежуточноепредставлениеLLVM,котороепоступаетнавход后端。 Почему-томногие,когдаговорято后端LLVM,имеютввидусамLLVM。 […]

iOS应用程序的用户名,密码和OTP自动填充功能,可加快登录速度🤨🤪

这就是我们要告诉iOS该应用程序已与网站相关联的所有操作。 现在,我们需要网站同意并指向该应用,以便iOS可以建立双向连接。 看看我关于iOS通用链接的另一篇文章,它解释了如何设置AASA文件。 我在这里没有解释。 请注意,通用链接使用applinks:前缀而不是webcredentials:前缀来使用共享的Web凭据。 AASA文件内容将如下所示: 如您所见,这是一个带有应用程序标识符字符串数组的json文件,其中包含密钥“ apps”。 应用程序ID基本上是teamID,后跟句点字符(。),然后是应用程序捆绑包ID。 此json文件应放在网站的.well-known文件夹或root文件夹中。 .well-known文件夹是首选。 注意 :当你 要对此进行测试,请确保您使用的是真实设备。 关联域是仅设备功能。 编译并运行该应用程序。 如果一切正常,并且共享的Web凭据包含特定于您域的数据,则将在键盘上方的快速类型栏中显示该数据,如上所示。 如果未显示,则可能是因为iOS无法访问您的AASA文件。 请观看WWDC视频以了解更多信息。 如何添加/删除/修改密码? 嗯,在iOS 11中,此功能已添加到设备设置中。 如何自动填充一次性安全代码或OTP(iOS 12+)? 这与用户名和密码的工作方式相同。 您需要将OTP .oneTimeCode textContentType更改为.oneTimeCode 。 myOTPTextField.textContentType = .oneTimeCode iOS在UITextField ,UITextView以及采用UITextInput协议的任何自定义视图上均支持密码自动填充。 注意:如果您对安全代码输入文本字段使用自定义输入视图,则iOS无法显示必要的AutoFill UI。 而已。 ! 请享用!! 如果您喜欢阅读这篇文章,请分享并给予鼓掌,以便其他人可以找到它! 您可以在Medium上关注我以获取新文章。 另外,在LinkedIn上与我联系。 如果您有任何评论,问题或建议,请随时在下面的评论部分中发布它们!