Tag: Ios开发

Swift 4中的iOS UIKit:将附件应用于UIView

预习 资源 项目 https://github.com/calmone/iOS-UIKit-component 参考 UIView https://developer.apple.com/reference/uikit/uiview UIGravity行为 https://developer.apple.com/reference/uikit/uigravitybehavior UIAttachment行为 https://developer.apple.com/reference/uikit/uiattachment行为 UIDynamicAnimator https://developer.apple.com/documentation/uikit/uidynamicanimator 快乐编码😄

xccov:人类的Xcode代码覆盖率报告

最初在 这里 发布在XCBlog上 苹果已经发布了带有Xcode 9.3的新命令行工具xccov,用于检查Xcode代码覆盖率报告的内容。 不幸的是,还没有任何Web文档,因此我们必须在终端中键入man xccov以获得有关此命令行工具的更多信息。 此实用程序需要Xcode 9.3和Xcode 9.3附带的命令行工具。 使用xccov,我们可以使用人类可读格式以及机器可表示格式(例如JSON)生成Xcode代码覆盖率报告,而无需使用第三方工具。 在本文中,我们将探讨如何使用带有演示iOS应用的新命令行实用工具生成和查看Xcode代码覆盖率报告。 注意名字 命令行工具xccov是Xcode 9.3附带的本地Apple开发人员工具。 但是,很少有名称相似的开源工具可能会使您感到困惑。 不是xcov 有一个名为xcov的Ruby库可生成美观的代码覆盖率报告,可与Fastlane和Danger等工具一起使用。 不是hiroakit / xccov 还有另一个纯粹的Swift库可以生成Xcode代码覆盖率报告,也称为xccov,但由Hiroaki ENDOH编写 这些库的名称与Apple发行的新实用程序相似或几乎相似,巧合的是,它们正在执行相同的工作,即为Xcode生成不错的代码覆盖率报告。 随着苹果公司xccov的发布,可能不需要这些库。 生成代码覆盖率报告 为了探索xccov,让我们使用带有单元和UI测试目标的“ Tabbed App”模板创建一个新的iOS应用,并将其命名为“ XCCov-Demo”。 这将创建Xcode项目方案“ XCCov-Demo”。 我们可以通过编辑方案并在“测试”操作中选中“代码覆盖率”框来明确启用该方案的代码覆盖率。 如果我们不想包括UITest的覆盖范围,我们也可以过滤目标,如下所示 现在,我们为方案启用了代码覆盖率。 一旦我们使用Xcode中的CMD + U按钮构建并测试了该方案,这将生成代码覆盖率报告到默认的派生数据目录中,该目录位于〜/ Library / Developer / Xcode / DerivedData中,您将看到在Logs / Test中生成的代码覆盖率报告目录。 但是,对于此演示,我们将在项目内部生成派生数据,以便我们可以轻松查看报告。 让我们使用xcodebuild从项目根目录使用以下命令来构建和测试我们的应用程序 $ xcodebuild -project XCCov-Demo.xcodeproj / -scheme […]

Swift 4中的iOS UIKit:使用UIBezierPath绘制形状

预习 资源 项目 https://github.com/calmone/iOS-UIKit-component 参考 UIBezierPath https://developer.apple.com/reference/uikit/uibezierpath 快乐编码😄

协议扩展-iOS

在开始阅读本文之前,我强烈建议您继续阅读以下文章。 了解协议-iOS 通过委托和协议在ViewController之间传递数据 与往常一样,让我们​​如下设置基本协议和类。 如果您已经阅读了我以前关于Protocol的文章,我希望下面的代码可以自我解释。 否则,出于上述相同原因,也会抛出如下错误 您已经猜到了,扩展中的方法仅适用于已确认该扩展之母的类。 在这种情况下,它具有战争能力。 如果我把所有事情都放在一个文件中。 它看起来应该像下面这样。 希望您从本教程中学到了更多有关协议的知识。 祝好运!

Swift 4中的iOS UIKit:将UIAlertController设置为密码格式

预习 资源 项目 https://github.com/calmone/iOS-UIKit-component 参考 UIAlertController https://developer.apple.com/reference/uikit/uialertcontroller UIAlertAction https://developer.apple.com/reference/uikit/uialertaction UITextInputTraits协议 https://developer.apple.com/reference/uikit/uitextinputtraits 快乐编码😄

Swift 4中的iOS UIKit:使用UIAlertController建立字符数限制

预习 资源 项目 https://github.com/calmone/iOS-UIKit-component 参考 UIAlertController https://developer.apple.com/reference/uikit/uialertcontroller UIAlertAction https://developer.apple.com/reference/uikit/uialertaction 快乐编码😄

在iOS 12+上检测Internet访问

我最近写了一篇有关iOS如何在显示允许用户登录或注册的Web视图之前如何检测连接到新Wi-Fi网络的强制门户的文章。 对于大多数在酒店,酒吧或咖啡厅等处连接到公共Wi-Fi网络的人来说,这种情况很熟悉。如果您还不了解其工作原理,请 在iOS上解决强制门户问题 提供了这篇文章的有用背景。 多年来,Apple的Reachability示例代码一直被用作检测第三方iOS应用程序中网络访问的实际起点。 在Cocoapods.org上进行的快速搜索将显示一长串库,这些库重写了此代码时考虑了许多因素,例如ARC支持或Swift兼容性。 WWDC在2018年6月推出了从iOS 12起可用的Network框架,其中包括NWPathMonitor类。 此类为我们提供了一种监控网络状态变化的方法,而不必包含第三方库/ Apple示例代码。 为了利用NWPathMonitor类,只需导入Network框架,然后创建一个NWPathMonitor实例: 让监视器= NWPathMonitor() 如果仅对特定网络适配器(例如Wi-Fi)中的状态更改感兴趣,则可以使用init(requiredInterfaceType:)初始化程序并提供NWInterface.InterfaceType作为实例来指定要监视实例化NWPathMonitor对象的网络适配器。参数例如 让监视器= NWPathMonitor(requiredInterfaceType:.wifi) 您需要确保在某个地方保留对该对象的引用(例如使用强属性),否则您可能会发现,当ARC释放NWPathMonitor对象时,分配给您的回调将停止调用。 可以监视的接口类型包括: cellular loopback other (针对虚拟或不确定网络类型) wifi wiredEthernet 要通知状态更改,您需要为pathUpdateHandler属性分配一个回调,只要网络接口中发生状态更改(例如,您的电话从蜂窝网络移动到Wi-Fi网络),就会调用该回调。 然后,无论何时发生状态更改,都会返回一个NWPath实例,可以查询该实例以确定我们是否已连接,如下所示: monitor.pathUpdateHandler = { 如果path.status == .satisfied { 打印(“已连接”) } } 使用无参数初始化程序与使用指定网络适配器的初始化程序会影响是否satisfied.返回的NWPath对象的status属性satisfied. 例如,如果您选择监视蜂窝网络适配器,但是Wi-Fi适配器发生状态更改(例如,您的电话连接到Wi-Fi网络),则您的回调将不会被调用,并且路径的状态将unsatisfied (可以使用currentPath属性随时访问NWPathMonitor的路径),因为未使用指定的接口连接设备。 因此,如果您只是想知道是否存在连接,无论是Wi-Fi还是蜂窝网络,那么最好坚持使用无参数初始化器。 有趣的是-虽然NWPath对象是iOS 12中作为Network框架的一部分而新增的,但实际上,自iOS 9起, NWPath对象已作为NWPath一部分使用(有一些细微差别)。 可以查询返回的NWPath对象,以了解有关设备网络适配器状态的大量信息。 更有趣的属性之一是isExpensive ,它返回是否认为网络接口使用昂贵(例如,蜂窝数据计划)昂贵。 我们还可以找出该路径是否支持DNS,IPv4或IPv6。 如果我们需要找出哪个接口更改了状态并触发了回调,则可以调用usesInterfaceType方法: let isCellular:Bool = path.usesInterfaceType(.cellular) 使用NWPathMonitor与使用其他iOS API(例如CLLocationManager […]

完成处理程序:Swift

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

使用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 4中的iOS UIKit:使用UIWebView显示文件

预习 资源 项目 https://github.com/calmone/iOS-UIKit-component 参考 UIWebView https://developer.apple.com/reference/uikit/uiwebview NSBundle https://developer.apple.com/reference/foundation/nsbundle 快乐编码😄