Tag: iOS应用程序开发

xccov:Diff and Merge Swift(iOS)代码覆盖率

原始链接: xccov:Diff and Merge Swift(iOS)代码覆盖率 苹果去年发布了新的命令行工具,用于检查Xcode代码覆盖率报告的内容。 与… shashikantjagtap.net xccov:Diff and Merge Swift(iOS)代码覆盖率– XCTEQ 苹果去年发布了新的命令行工具,用于检查Xcode代码覆盖率报告的内容。 与… www.xcteq.co.uk 将原始链接作为代码格式和语法参考,未在媒体上检查 — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — 苹果去年发布了新的命令行工具xccov,用于检查Xcode代码覆盖率报告的内容。 使用xccov,我们可以使用人类可读格式以及机器可表示格式(例如JSON)生成Xcode代码覆盖率报告,而无需使用第三方工具。 在上一篇文章中,我们研究了如何使用xccov工具生成代码覆盖率报告。 在本文中,我们将探讨Xcode 10.2发行的新功能。 代码覆盖范围路径已更改(Xcode10) […]

扩展那些本机类!

正如我在上一篇关于全局可用函数的文章中提到的那样,有时我们不需要编写一个函数。 我们可以扩展本机类以从中获取更多信息。 如果您不了解iOS Swift扩展,请在此处了解它们。 扩展的主要优势也许,至少对我而言是…… iOS扩展也可以扩展本机类 因此,如果您需要现有组件/元素的额外功能或扩展本机类的功能,则只需为其编写一个扩展。 它可以驻留在应用程序中存在的任何文件中。 声明扩展名后,您可以将它们用作所有扩展类的函数。 让我们从一些示例开始,以阐明我的观点。 假设我们需要带下划线的标签。 将此粘贴到您的代码中的任何位置。 现在,我们的UILabel类具有一个名为下划线的新功能,可在整个应用程序中使用。 假设我们有一个类似下面的标签, 我们可以通过添加以下行来使用下划线类, label.underline() 扩展了UIKit的基本UILabel类后,我们的下划线功能可用于UILabel类或UILabel扩展的每个组件! 所以我们的实现看起来像这样, 这是一个非常基本的例子。 但是它也可能非常非常强大! 让我们看另一个例子,一个更原始的格式化方式,但仍然是必需的。 每当需要大量显示时,都需要用逗号格式化整数。 如果我们要在项目中以逗号格式格式化任何整数,则可以添加一个扩展本机Int类的附加函数,如下所示: 现在,我们可以像下面在代码中所需要的任何地方那样利用它。 让量= 1000000000 打印(“逗号格式:\(amount.withCommas())”) //返回“逗号格式:1,000,000,000” 那不方便吗? 现在,如果是货币金额怎么办? iOS专用于此用例的格式化程序。 我们可以将NumberFormatter类和扩展名一起使用,以在全局范围内使用此格式化程序,就像我们编写扩展Int类的逗号分隔符功能一样。 让我们定义另一个扩展,但是为此,我们将扩展Double类,因为无论如何货币最有可能是double类型! 现在,就像下面和中提琴一样使用它! print(amountDbl.currencyString()??“”) //返回“ $ 1,000,000,000.00” 当然,您可以覆盖语言环境以获得其他格式的货币。 为此,我们将不得不稍微重写一下我们的函数。 首先,我们需要将语言环境字符串作为函数参数。 我们将改变这一点, formatter.locale = Locale.current 进入这个 formatter.locale =语言环境(标识符:someString) 在这里,占位符someString将替换为我之前告诉您的区域设置字符串参数。 因此,我们更改后的功能现在应该看起来像这样, 现在,如果我们使用它,它将以您指定的语言环境返回格式化的数量字符串。 print(amountDbl.currencyString(locale:“ en_IN”)??“”) //返回“₹1,00,00,00,000.00” print(amountDbl.currencyString(locale:“ […]

UITableView中有多个UITableViewCells

本教程的重点是如何以尽可能少的代码正确地在UITableView中添加多个UITableViewCells。 在本教程中,我选择了一个场景,其中您的应用程序包含诸如联系我们,注册,登录等屏幕。简单地说,您需要在具有多种单元格类型的多个屏幕上显示表单。 当然,您可以将其应用于在UITableView中需要多个UITableViewCells的任何其他方案。 在开始之前,您需要了解几件事: 扩展名 枚举 关闭 自动版式 为了更好地理解,我创建了一个示例GitHub项目,您可以在此处下载。 创建UITableViewCells 首先,我们将从UITableViewCells创建开始。 如果打开项目,将在文件夹Cells下看到创建的各种单元格 ,这些单元格包含输入字段,下拉列表,操作按钮,多行输入字段。 出于演示目的,我将使用BaseCell和InputCell 。 我们将首先创建一个主单元(名为BaseCell),该单元将处理所有子级任务。 BaseCell用于存储所有子元素中相互共有的功能。 然后,我们将这些功能用作子单元格中的替代。 此单元格没有UI,但将从其子级中获取合适的UI。 基本单元 import UIKit class BaseCell: UITableViewCell { //MARK: Internal Properties var type: CellType! var pickerOptions: [String]!{ didSet{ pickerOptionsSet() } } var textChangedBlock: ((String) -> Void)? override func awakeFromNib() { super.awakeFromNib() // Initialization code } func setForm(title: […]

Pixelmatters iOS开发工具包📱

服务 使用Fabric 进行实时分析, Beta分发和崩溃报告。 Testflight作为Beta测试分发框架。 Firebase是Google的移动平台。 包含数据库,数据同步,云功能,分析等功能,可帮助移动开发人员加快应用程序的开发过程。 我们使用Github作为版本控制的托管服务。 我们遵循Gitflow工作流程分支模型。 CircleCI是我们持续集成和交付(CI / CD)的首选。 Amazon AWS通过按需计费系统提供可靠且可扩展的云计算服务。 OneSignal推送通知交付系统几乎支持所有开发环境,并且超级易于设置和配置。 工具类 像大多数iOS开发人员一样,我们使用Xcode作为主要的IDE。 对于自动化的构建,签名和部署过程,我们使用Fastlane 。 Sourcetree是我们管理和与git仓库交互的首选工具。 使用CocoaPods进行 iOS依赖管理。 使用Postman测试API请求。 当编辑其他文件(如CocoaPods中的Podfile或Fastlane中的fastfile)时,我们倾向于使用Visual Studio Code (功能强大且轻巧的代码编辑器)。 最近,我们发现了Sherlock ,这是一个了不起的工具,可让我们在iOS Simulator上实时编辑约束和属性! 对于以编程方式构建UI,这是一个非常简洁的工具,其中包含许多功能。 如果您需要检查API使用的数据库,我们建议使用DBeaver,因为它非常易于使用和清理。 使用通知时, Pusher在测试它们时非常方便。 为了分析性能和内存泄漏, Instruments在这方面做得很好。 尽管很难熟悉它,但回报是值得的。 框架和库 Moya是用Swift编写的网络抽象层。 它封装了Alamofire ,使您可以以更抽象的方式构建网络层。 RxSwift是ReactiveX的Swift版本,ReactiveX是最强大的现有功能反应式编程API之一。 RxSwift社区每天都在增长,在考虑进入FRP世界时,它是ReactiveSwift的绝佳选择,而且我们认为这是更轻松的选择。 在iOS中导航? RxFlow将简化我们的生活。 这是一个基于反应流协调器模式的导航框架。 对于文本处理和模式匹配,我们使用Bumblebee 。 将文本转换为NSAttributedStrings 。 此外,它还提供降价支持。 如果您不想直接进入RxSwift或ReactiveSwift, Bond是功能式反应式编程世界的一个很好的起点。 在处理图像下载和缓存时, 翠鸟是我们的选择。 […]

101:Alamofire和PromiseKit

使用Alamofire执行异步请求时。 您的代码看起来像这样吗? 好吧,那很好,但是可以更好。 怎么样? 承诺! 承诺 Promise简化了异步编程,您可以在其中基于事件编写代码。 这样可以使您的代码更简洁,可读性更好。 它还将帮助您减少特别是在处理异步请求时以很多委托或复杂的完成处理程序结尾的可能性。 在本文中,我将使用PromiseKit这个建议中使用的流行Swift库。 许诺是代表异步任务的对象。 传递该对象,并编写整洁,有序的代码; 从一个异步任务到另一个异步任务的逻辑,简单,模块化的流。 资料来源:http://promisekit.org/docs/ 一个Promise有一个then块,就像一个onSuccess完成处理程序。 它还有一个catch块,将错误处理与您的主代码路径分开,就像onFailure完成处理程序一样。 我们将在开始时使用相同的示例将请求与承诺包装在一起,它看起来像这样: 使用基于PromiseKit版本的代码示例 现在您可以像这样使用它: 如您所见,不需要定义委托或完成处理程序,我们利用PromiseKit的then块和catch块分别处理有效响应和错误。 注意:在最新的PromiseKit版本中, then被分为then , done和map 。 有关更多信息,请查看PromiseKit 6发行说明。 我知道Promise真是太棒了!但是,在您开始采用PromiseKit之前,我强烈建议您慢慢使用它,并在其“入门指南”或他们的网页中阅读有关此库的更多信息。 然后,当您感到舒适时,才开始用promise打包所有异步请求。 愿原力与你同在… (我最近看过《星球大战:最后的绝地武士》,我被炒作了……让我成为吧) 我希望您喜欢这篇文章,并且总体上觉得它很有用。 并且不要犹豫,留下反馈或任何问题。 谢谢!

iOS自动版面3

Merhabalar Auto Layout的版本3和版本。 Eğeröncekiikibölümedahaöncehiçdenk gelmediyseniz buyazıdanönceo ikiyazıyagözatmanızıtavsiye ederim。 iOS自动版面2 iPhone 10(NamıdiğerEKS)重装了。 medium.com iOS自动版式1 Tümbu cihazlarda tekilgörünümüyaratmak bu kadar zor mu吗? medium.com 界面自动生成器界面布局,“界面” IB(olakanılacaktır)(bkz:Dilekçebaşlangıcı) ŞimdiIB ile Auto Layouta由medönceöncekiyazılarımızdatasarımlarımızıhep kodüzerindenyaptık。 IB乌泽林德·比尔瑟勒·亚普丹·奥恩故事板vs密码亚帕林。 Hangisinin daha iyiolduğukonusunda birşeysöylemeyegerek dahi yok。 Projeden,tasarımdanvekişidenkişiyedeğişiklikgösterenbirşey。 Deneyimleyip onagörebiriniseçmekdahamantıklı。 Gelelim IB ile自动版式 kullanımına: 如果您的自动版式约束为tanımlayabiliriz。 Bir viewüzerindeiken control ebasıpdiğerbir view’asürükleyerek 大型视图控制tuşuylaberaber basarakdiğerview’asürüklüyoruzve 2视图arasındaolabilecektüm约束器aşağıdakigibikarbiışımızaçıkıyor。 界面生成器’ınotomatiktanımlamayapması zh_cn解决自动布局问题请重新设置为建议的约束,然后按IB’ye约束tanımlamasıbırakılabilir。 销ve对准工具bölümünden 约束条件添加了新的约束条件约束条件增加了约束条件。 […]

Swift:使用NumberFormatter在Integer上添加分隔符

如果要将整数值分成由字符(即1.000、1 000 000)分隔的组,则需要使用NumberFormatter 。 什么是NumberFormatter? NumberFormatter是在数字值及其文本表示形式之间转换的格式化程序。 如何使用它 为了方便使用,我们将创建两个扩展文件,使我们能够在项目中全局使用它。 Formatter + Extensions.swift extension Formatter { static let withSeparator: NumberFormatter = { let formatter = NumberFormatter() formatter.groupingSeparator = ” ” formatter.numberStyle = .decimal return formatter }() } 使用groupingSeparator可以确定分隔符是什么。 在这种情况下,它是空格,但是您可以添加任何其他特殊字符(例如点或逗号)以使其为1.000或1,000。 Int + Extensions.swift extension Integer{ var formattedWithSeparator: String { return Formatter.withSeparator.string(for: self) ?? “” } } 接下来,我们将从上述扩展中调用静态变量withSeparator ,并创建一个名为formatterWithSeparator的新变量。 […]

兄弟,你甚至连SwiftLint吗?

遵循准则或样式代码约定编写代码应该是您的核心实践之一。 而且我知道有时是不自觉的,或者是因为匆忙中我们在这里到处都是小事:方法实现时间太长,代码行很长,双折行,逗号后没有空格, -> …之间没有分隔,今天,我将写有关SwiftLint的工具,该工具将在编写代码时帮助我们强制执行样式和约定。 SwiftLint是Realm的一种工具,大致基于GitHub的Swift样式指南,用于实施Swift样式和约定。 使用SwiftLint可以帮助您接受样式和代码约定,这将为您带来一些好处,例如: 您的代码将更加清晰易读 您的代码将更具可维护性和可扩展性 您的代码将易于测试和调试 您将在所有项目中保持代码一致性 SwiftLint将检查您的代码,并识别语法和样式错误。 您将能够轻松地识别出这些内容,因为在编写代码时,您会在Xcode中看到类似的内容。 您可以通过几种方式安装SwiftLint,但我个人很喜欢使用CocoaPods方式。 当您与团队合作时,它特别方便,并且是安装特定版本的SwiftLint的推荐方法,因为它支持安装固定版本而不是简单版本(Homebrew就是这种情况)。 要将SwiftLint与CocoaPods一起安装: 只需将以下行添加到您的Podfile中: 吊舱“ SwiftLint” 2.在Xcode项目中添加新的“运行脚本阶段”,内容如下: “ $ {PODS_ROOT} / SwiftLint / swiftlint” SwiftLint有超过75条规则,您可以在此处查看列表。 好处是,您可以控制启用或禁用哪个规则,并可以为给定规则设置警告和错误的阈值。 只需在项目目录中添加.swiftlint.yml文件即可。 您可以在这里看到更多信息。 仅供参考:您可以在此处看到我预定义的.swiftlint.yml文件。 启用代码中的禁用规则 如果要启用或禁用特定于行或文件的规则,则可以使用某些功能。 可以通过以下格式在源文件中添加注释来禁用规则: // swiftlint:disable [ …] 规则将一直禁用,直到文件末尾或短绒棉纸看到匹配的启用注释: // swiftlint:enable [ …] 也可以通过添加:previous , :this或:next来修改disable或enable命令,以仅将命令分别应用于上一行,本行(当前)或下一行。 // swiftlint:disable:next // swiftlint:disable:this // swiftlint:disable:previous 在这里查看更多。 资料来源和阅读建议: SwiftLint […]

开始开发iOS应用程序(1):构建基本UI

在模板中选择Single View App。 下一步的初始中输入如下内容: 产品名称:FoodTracker 组织名称:WillingSplit 组织标识符:com.willingsplit 语言:斯威夫特 包括单元测试:已选择 每一个Apple ID都对应一个个人团队,可以用它在我们自己的iphone上进行测试。但是如果想要将应用发布到App Store中,必须要在Apple Developer Program上注册一个账号。 Xcode包括什么基本功能 组织代码文件和资源文件 提供代码和UI编辑器 提供模拟器和调试器 Xcode的界面组成 导航器区域:访问项目的各个部分 编辑器区域:代码,界面和资源文件的编辑 实用程序区域:两部分组成,上半部分叫检查器窗格,使用查看,编辑编辑器区域中查找的项目。下半部分叫库窗格,访问一些界面组件和代码片段 工具栏:构建并运行项目。 在方案弹出菜单上选择iPhone X 2.点击运行按钮 3.工具栏上方的活动查看器上会显示进度 :代码文件 :项目导航器导航界面。这个界面里列出了项目的所有文件。选择位置AppDelegate.swift图标,在编辑区域处显示。 AppDelegate.swift文件 在这个文件里实现了两个功能: 定义了AppDelegate类。它会为整个app创建一个窗口,所有的UI组件都会放置到该窗口上面。另外,它还提供了app状态转换的相应方法。 使用@UIApplicationMain属性创建应用程序的执行入口和事件循环。系统会创建一个应用程序对象。这个对象会管理整个应用程序的生命周期。同时,系统将创建一个AppDelegate对象,并把它分配给应用程序对象。最后系统启动应用App ViewController.swift文件 故事板显示应用程序的UI和页面之间的替换。 Xcode提供一个UI组件。其中一部分可以显示在界面上显示,例如按钮。另一部分类似手势识别,不会显示在界面上。 所有显示在UI上的元素成为View。View是内置UI的最基础的元素,可以用来给用户显示信息。并且,View还有内置的功能,例如响应用户的输入。 添加文本字段 在对象libray中选择文本字段 2.在过滤器字段中输入文本字段 3.将文本字段对象拖入到storyboard上面 设置文本字段的占位符文本 在Placeholder中输入“输入餐名” 设置TextField的键盘 在Return Key中选择完成,然后选择自动启用Return Key选择框。 当用户输入文字之后,完成按钮就会在键盘上显示。 默认预览页面是竖屏,切换到横屏如下图 添加其他设备的屏幕预览图 按照上述方法设置的UI是固定大小的,不会根据屏幕大小自动调节组件的大小。我们需要使用自动布局技术,让UI组件自适应屏幕。 自动布局可以帮助我们很好的设计自适应布局。它采用了约束来规定一个UI组件相对其他组件的位置和它自身的大小。自动布局会自动计算每个UI组件的位置和大小。 最简单的方式是使用UIStackView。堆栈视图提供一种按照一列或一行UIUI的方式。 首先将所有的UI组件放到一个Stack View中,然后给Stack […]

适用于iOS应用程序开发人员的交互式游乐场

Xcode Playground是一个IDE,可为iPhone和iPad设备开发应用程序。 Playground最初是由Swift发行的,旨在成为一个进行代码实验的地方。 它提供了已开发代码和布局的交互式预览,而无需使用Interface Builder。 通过提供实时代码结果,Playground成为顶级ios开发人员的最爱,可以逐行“查看”您的代码在做什么。 如果您愿意避免创建Xcode项目的麻烦和精神开销,并且不必处理众多因素,例如设备类型和分辨率以及构建设置。 可以使用操场先决定是否继续执行核心思想来推迟此类决策。 为了使用Xcode Playground,您需要晚于Xcode 6安装最新的Xcode版本。安装该软件后,下面的屏幕将显示第一个选项,即“游乐场入门”,然后选择该选项到下一个屏幕以命名游乐场,将Platform设置为iOS ,然后保存游乐场。 好吧,这是在您开始使用Xcode之前的介绍,以下是在Xcode中构建应用程序时要参考的一些常用术语: UIKit是Apple的用户界面工具包。 它包含用于在整个应用程序中推动用户交互的项。 UI项示例包括按钮,文本框,导航控件等。 AppKit是Apple用于macOS的用户界面工具包。 像UIKit一样,它包含按钮,文本框等内容,尽管关注的是macOS而非iOS。 WatchKit是Apple用于watchOS的用户界面工具包。 尽管UIKit和AppKit有很多共同点,但WatchKit却大不相同-并且明显更简单。 Cocoa Touch是Apple广泛的iOS框架集合的常用名称。 它包括用于执行用户界面的UIKit,但是大多数人会说它还包括用于制作2D游戏的SpriteKit,用于制作3D游戏的SceneKit,用于地图的MapKit,用于绘图的Core Graphics,用于动画处理的Core Animation,等等。 Cocoa是用于macOS上的Apple框架集合的名称。 严格来说,它由用于用户界面的AppKit,用于基本功能的Foundation和用于对象图的Core Data组成,但是像Cocoa Touch一样,它通常表示“所有macOS开发”。 NeXTSTEP是由Steve Jobs创建的一家名为NeXT的公司创建的操作系统。 它被苹果公司收购,乔布斯又被公司控制,并将NeXTSTEP技术直接纳入苹果公司开发平台的核心。 iOS Simulator是Xcode附带的工具,其外观和工作原理几乎与真实的iPhone或iPad一样。 它使您无需使用真实设备即可非常快速地测试iOS应用。 游乐场的局限性 游乐场不能用于性能测试。 不支持用户交互。 不支持设备上执行。 无法使用您的应用或框架代码。 不支持自定义权利。 Xcode团队似乎致力于改善操场,因为集成了最新框架和库的新版IDE推出了。 以上只是在微型Swift测试环境中的漫步,您可以键入代码并立即查看结果。 要构建iOS应用,请与最佳应用开发者联系。