Tag: Swift编程

使用本机iOS应用程序开发使竞争对手脱颖而出

随着在所有年龄段中的普及以及不同的归属类别,在企业应用程序方面,与其他操作系统相比,许多投资者,营销人员和专业人士更喜欢iOS,也许它正在购买大屏幕尺寸的iPhone 7或惊人的iPhone X新设计。iOS是在其设备(如iPod touch,iPhone和iPad)上运行的Apple移动操作系统。 iOS的总市场份额为12.5%,使其成为仅次于Android的第二受欢迎的操作系统。 最新版本是9月份发布的iOS 11。 尽管iOS在全球市场份额上排名第二,但其功能使其更受欢迎,尤其是在企业应用程序开发中。 实用的功能和一流的性能使使用iOS本机应用程序成为成功的垫脚石。 IOS设备的应用开发 iOS应用开发生态系统 iOS应用程序开发生态系统是一元论的。 与作为开源系统运行的Android不同,在涉及iOS应用程序时,您仅需要使用一个平台iOS。 此外,您只能使用一个IDE,Xcode和Cocoa Touch SDK为iOS构建。 这意味着您必须坚持使用苹果推荐的平台,才能享受使用本机iOS应用程序带来的众多好处。 要开发iOS应用程序,设计人员只能使用主程序包管理器CocoaPods和称为自动布局的单个布局系统。 另外,开发人员必须应对相同的设计模式,包括MVC,OOP和MVVM。 目前只有例外是响应式编程中的开发人员。 如果您是进入iOS应用程序开发的新开发人员,则所需的Xcode包含一切,包括源代码编辑器,调试工具,最新的iOS SDK等。 MVC:iOS应用程序核心原理范例 iOS应用是使用对象(代码的构建块)设计的,这些对象是使用MVC(模型-视图-控制器)模式精心组织的。 MVC范例有助于将代码分为3个主要功能; 用户界面(视图) 数据(模型) 功能定义(控制器) iOS本机应用是使用带有MVC的对象构建的,该对象分配了概述的三个功能中的任何一个。 因此,应用程序的每个屏幕都包含数据模型,视图和管理模型与视图之间的流的控制器 。 Swift和Objective C如何在iOS应用开发中使用 Swift和Objective-C是开发iOS本机应用程序的最杰出技术。 Swift是为iOS开发的一种多范例通用编程语言。 创建它是为了与Cocoa Touch Framework,Cocoa和产品的多个现存Objective-C代码一起使用。 Object-C是用于编写iOS软件的编程语言。 它提供了面向对象的功能以及动态运行时间。 它继承了C的原始类型,语法以及流控制语句。此外,对象C添加了有助于定义类的语法以及对多图管理的语言级别支持。 制作iOS应用程序时,需要花费大量时间来处理不同的对象。 这些对象是Objective-C应用程序的一些实例。 不是设计一个全新的类来迎合次要的附加功能,Objective-C允许开发人员定义一个类别并添加预期的自定义行为。 该类别可用于向类添加新方法。 Swift和Objective-C的主要优点 苹果在2014年推出Swift之前,主要的编程语言是Objective-C。 这是两者的比较。 可读性:大多数人选择Swift的主要原因是它提供了非常简洁的语法。 这使得读取和写入更加容易。 此外,与Object-C相比,代码更少。 维护:值得注意的是,如果没有转换C,Objective-C就无法发展。与不具有这些依赖关系的Swift相比,这使得维护变得更加困难。 例如,Objective-C要求用户在文件之间手动同步注释和方法名称。 另一方面,敏捷的开发人员可以腾出更多时间来处理注释,代码质量和功能。 安全性:由于应用程序市场竞争力快速增长,因此安全性非常重要。 […]

SFSafariViewController

什么是SFSafariViewController? SFSafariViewController是一个对象,提供了用于浏览Web的可见标准界面。 视图控制器包括Safari功能,例如阅读器,自动填充,欺诈性网站检测和内容阻止。 需要注意的是,您的应用程序看SFSafariViewController用户的活动以及与SFSafariViewController交互,因此无法访问自动填充数据,浏览历史记录或网站数据。 重要 根据《 App Store审查指南》 ,必须使用此视图控制器将信息可视地呈现给用户。 控制器可能不会被其他视图或图层隐藏或遮盖。 此外,在 未经用户知情和同意的情况下 ,应用程序可能不会使用 SFSafariViewController 来跟踪用户。 如何使用它? SFSafariViewController是SafariServices框架的一部分,因此首先您需要导入此框架,然后创建SFSafariViewController实例,然后将其呈现。 您的视图控制器应如下所示: 资源 苹果文档:SFSafariViewController

使用MVVM设计模式构建新闻应用程序

在我最新的Udemy课程“ 使用Swift构建真实的iOS应用 ”中,我演示了如何实现与NewsAPI.org集成的完整News App。 这篇文章重点介绍了与使用MVVM设计模式实现iOS应用有关的一些重要概念。 设置NewsAPI帐户 在深入研究实现之前,请确保您具有NewsAPI帐户。 NewsAPI.org帐户将为您提供一个apiKey,它是对API进行成功请求所不可或缺的。 为了简单起见,我们将仅从API中获取并显示头条新闻。 顶部标题的链接如下所示: https://newsapi.org/v2/top-headlines? country =我们 &apiKey = yourapikey 这将导致以下JSON响应。 注意 :由于这是新闻,您的实际JSON响应可能有所不同。 但是结构保持不变。 Web服务和模型 设置NewsAPI帐户后,我们可以发出请求并将JSON填充到我们的模型中。 查看JSON响应,您会发现我们对articles数组内的项目感兴趣。 为了获得这些项目,我们必须对文章进行解码。 我们的Article类如下所示: 我真的希望您喜欢这篇文章! 如果您想了解有关使用MVVM设计模式创建iOS应用的更多信息,请查看以下我的课程: https://www.udemy.com/building-real-world-ios-apps-using-swift/?couponCode=MEDIUM [源代码] 谢谢,祝您编程愉快!

Swift:XCode发布错误 运行脚本警告

普通显影剂。 Hele Ben😰 Geneldebazışeylerihatırlamakiçin 评论专栏laroluşturuyoruz。 Nasılolsa ileridegörürümvedüzeltirim yaaaaaa 💆‍♂️ diyerek。 Bence buhatırlamaolayıprojedeki kodsatırıile tersorantılı。 Satırlararttıkça 评论 lerarttıkça,儿子释放 de konstol ediyor muyuz acabaeklediğimcommentlerden birisinde,bir metodu veyabaşkaherhangi birdeğişikliğiişaretettiğimizi吗? 生成 esnasındabu gibidurumlarıhatırlamakiçin 运行脚本 lerkullanıcazşimdi。 ÖncelikleXCode➡项目(目标seçiyoruz)➡构建阶段sekmesinde solüsttebulunan + ile新运行脚本Phase’iseçerekyeni bir运行脚本oluşturuyoruz。 Gördüğünüzgibi 发布了 buşekildeuyarılarıalıyoruz的构建。 Bunlarınhiçbiri 调试生成脚本 izade sadece 发布 içinbuuyarılarıverdiğimizden。 脚本 1号出口yazansatırısilerseniz 错误 verir ancak 构建 失败 olmaz,或关闭。

Continuous Integration Server上的代码签名iOS应用扩展

添加应用扩展程序是在用户需要的地方放置应用程序功能的绝佳方法。 自Apple推出应用程序扩展名以来,将其扩展到iOS应用程序中已变得非常普遍,例如iMessages扩展名非常常见。 在开发iOS应用程序时,扩展程序必须是iOS应用程序中的单独目标,并且在将应用程序分发到应用商店时,我们必须与主应用程序一起对其进行代码签名。 Xcode具有自动对应用程序进行代码签名的新功能。 Xcode会处理所有事情,包括为所有目标下载正确的配置文件并在归档iOS应用时对它们进行代码签名,但是这种方法不适用于持续集成环境(即CI服务器)。 在CI服务器上,我们必须编写所有这些代码签名任务的脚本。 在为带有扩展名的应用程序设置连续交付时,用脚本手动编码所有扩展名的应用程序具有挑战性,但是Fastlane工具非常容易对应用程序扩展名进行代码签名。 在本文中,我们将看到如何使用Fastlane工具在CI服务器上编写符号应用扩展的代码。 应用程式额外资讯 在对带有扩展名的应用进行代码签名时,我们应该考虑以下几点。 应用程序扩展是iOS应用程序中的单独目标 应用扩展程序具有单独的捆绑包标识符和配置文件 应用扩展程序与主应用程序一起构建。 这意味着,我们必须为每个捆绑包标识符下载预配置文件,并使用脚本将下载的预配置文件应用于每个目标。 在这种情况下,让我们考虑具有包标识符com.xyz.main的主应用程序具有带有包标识符com.xyz.main.iMessage的 iMessages扩展名,以与应用程序一起进行代码签名。 叹气下载配置文件 我们必须为每个应用程序标识符下载配置文件,在我们的情况下将是两个捆绑包标识符。 Fastlane具有叹气工具,可以从Apple开发人员门户下载配置文件。 我们还可以保存配置文件,其含义是文件名,但这是可选的。 示例代码如下所示。 叹( app_identifier:“ com.xyz.main”, 文件名:“ com_xyz_main.mobileprovision”, skip_certificate_verification:正确 ) 叹( app_identifier:“ com.xyz.main.iMessage”, 文件名:“ com_xyz_main_iMessage.mobileprovision”, skip_certificate_verification:是 ) 请注意,Sigh会将配置文件下载到当前工作目录中。 成功下载预配置文件后,我们应该在项目的根目录下载两个文件com_xyz_main.mobileprovision和com_xyz_main_iMessage.mobileprovision 。 更新每个目标的配置 现在,我们已经为iOS应用程序和扩展下载了相关的配置文件。 现在是将它们应用于特定目标的时候了。 在此阶段,我们可以采取两种方法。 通过将供应配置文件设置为与我们将在CI服务器上下载的名称相同的名称,在.xcodeproj文件中应用手动代码签名 。 我们可以在源代码管理中检入该文件,以便CI服务器将查找这些文件。 这将是非常简单的方法,因为我们不需要在CI服务器上修改Xcode项目文件。 在.xcodeproj中应用自动代码签名 ,并通过使用脚本更新Xcode项目文件将其更改为手动代码 。 最好在开发人员的本地计算机上保持自动签名并在构建时更改CI上的文件,但是这需要对构建设置有深刻的了解,并需要使用脚本以编程方式更新Xcode项目 您的团队将根据技能集决定哪种方法适合他们。 两者都有其优点和缺点。 开发人员更喜欢在本地计算机上进行自动代码签名 ,因为过去在Xcode 8之前,他们可能曾经历过整理证书和置备配置文件的痛苦。为了CI失去它。 […]

如何使用NSAttributedString转换HTML

本教程将向您展示如何使用NSAttributedString转换HTML。 通过使用NSAttributedString转换HTML,我的意思是转换HTML标记并从中创建属性字符串。 然后将其加载到UILabel或UITextView之类的文本组件中。 有时,您可能会从API得到响应,在该响应中,您将拥有一个字符串以及其中的所有HTML标记,并且需要以属性字符串的形式将其呈现给UI。 HTML示例 This is heading 1 This is heading 2 This is heading 3 This is heading 4 This is heading 5 This is heading 6 创建扩展 我经常使用扩展,并会建议您同样的扩展 ,因为它们是组织Swift代码和使函数可重用的关键。 现在,我们将创建字符串扩展名,在其中保留我们的convertHtml()函数,该函数将为我们完成所有工作。 此函数会将所有HTML标记转换为NSAttributedString 。 让我们将扩展名命名为String + Extensions.swift。 extension String{ func convertHtml() -> NSAttributedString{ guard let data = data(using: .utf8) else { return NSAttributedString() } […]

使用默认参数解密Swift协议扩展

所以我们可以说 如果变量推断类型为Protocol ,则将始终调用该方法的动态实现。 否则 ,将调用该方法的协议实现, 除非该方法不覆盖默认参数。 我与您分享了所有这些情况的操场片段: protocol TheProtocol { func method1(text: String) } extension TheProtocol { func method1(text: String = “default1”) { print(“Called method1 from TheProtocol: \(text)”) } func method2(text: String = “default2”) { print(“Called method2 from TheProtocol: \(text)”) } } struct Struct1: TheProtocol { func method1(text: String = “default1”) { print(“Called method1 from […]

编程语言的力量将在2018年引起关注

2018年即将来临,如果您是开发人员,您可能会想知道,明年编程语言将如何吸引您!根据GitHub编程语言使用统计,今年排名前列的编程语言与去年相同- C和Javafighting居首位。 事实没有什么令人惊讶的,不是吗? 在此博客中,我们打破了人们的期望并竭尽所能,以理解将在2018年发展壮大的最强大,引人入胜和有希望的编码语言。检查所有方面是否看起来我们的期望将是有趣的一倍,才有效。 我们概述了对编程语言的预测,这些语言将在2018年主导游戏的发展– 的JavaScript JavaScript在这个季节风靡一时。 最近在前端编程世界中发生了如此多的惊人产品。 总而言之,您不能忽略React成为开源JavaScript库的方式。 到现在为止,众所周知的和有效的方言有了更多的区别。 响应几乎可以解决您所付诸的一切。 前端流畅吗? 它就是为此而设计的。 虚拟现实和增强现实? 检查React VR。 多阶段的东西? React Native涵盖了这一点。 另外,现在您甚至可以使用它来克隆Facebook。 TypeScript也上升了。 TypeScript是一种免费的开源编程语言,它是JavaScript的严格语法超集,并向该语言添加了可选的静态类型,可在任何地方运行,适合于构建大型应用程序,此外,它还用于Unity Engine中 。 爪哇 Java技术使您可以在安全的计算环境中工作和娱乐。 Java根据TIOBE索引在编程语言排名中排名第一,它用于创建我们非常喜欢的Android应用程序-Uber, Slack , Tinder , Amazon等。 Java开发功能可用于从基本移动应用程序到游戏和VR应用程序的所有内容。 只要记住要给它足够的内存即可。 ROR(Ruby on Rail) 关于ROR的淡出和Node.js的取代一直存在着积极的争论。 我们说:不! TIOBE指数表明ROR也是相关的。 Ruby在2月份排名第11位,与2016年的排名完全相同。TIOBE会根据全球熟练技术工程师,课程和利用谁使用编程语言的外部商人的数量来选择评估。 ROR很难学习,这是事实,并且Rails开发中的红宝石需要非常精确的方法。 Ruby on Rails是一个基于服务器的Web应用程序框架,在Rails 5发布后,它具有新的Web开发潜力。 Turbolinks 5和ActionCable等功能非常出色。 开发人员现在可以摆脱客户端JS框架,并使用Turbolinks 5从Rails堆栈直接生成单页应用程序。他们还可以通过ActionCable将WebSockets与其他Rails应用程序集成。 这使开发人员能够以与其他Rails应用程序类似的形式和样式在Ruby上实时编写功能,同时保持良好的可伸缩性和流畅的性能。 C# C#是创建平台或VR(虚拟现实)应用程序的不错决定。 它让人联想到Java,使用和编写代码的需求也比JavaScript少。 C#非常适合各种企业应用程序。 […]

Swift中的专业模式匹配

创建人: Nick Teissler switch语句是Swift语言不可否认的优势。 switch语句的后面是Swift的模式匹配,它使代码更易读,更安全。 可以获取开关的模式匹配的可读性和功能,并将其应用于代码中的其他位置。 Swift语言参考指定了八种不同的模式。 很难知道在模式匹配表达式中使用的正确语法。 在典型的用例中,您可能需要了解类型信息,解开变量或仅确认可选项为非零。 使用正确的模式,可以避免尴尬的拆包和未使用的变量。 模式匹配中有两个参与者:模式和值。 该值是switch关键字之后的表达式,如果在switch语句之外测试该值,则为=运算符。 模式是case标签后面的表达式。 模式和值使用Swift语言的规则相互评估。 截至2018年7月15日,该参考文献包含一些关于在散文中如何使用模式以及在何处使用模式的错误,但是可以通过一些实验来发现这些错误。[1] 我们将研究在if , guard和while语句中应用模式,但在进行操作之前,让我们热切关注switch语句的一些非常规用法。 如果尝试匹配的值可能为nil,我们可以使用Optional Pattern来仅在该值不为nil时匹配该值,并作为奖励将其拆开。 在处理遗留的(和一些不太传统的)Objective-C方法和函数时,这特别有用。 从Swift 4.2开始,随着IUO的重新实现! 将成为的代名词? 。 对于没有可空注释的Objective-C函数,您可能必须处理此行为。 这里的示例特别琐碎,因为这种新行为可能来自Swift <4.2。 使用此Objective-C函数: Swift签名将为: func aLegacyObjcFunction() -> String! ,在Swift 4.1中,此函数将编译: 在Swift 4.2中,您会收到错误消息:“可选类型’String’的值? 没有包装; 你是说用’!’ 要么 ‘?’?”。 不直观的部分是, return aLegacyObjcFunction()仍将编译,因为它会跳过变量分配以及类型推断。 我们应该更优雅地处理此问题, 尤其是如果所讨论的Objective-C函数实际上可以返回nil 。 这次,我们有意地处理可选项。 请注意,我们不会像往常一样打开包装OptionalString。 就像我们说过if let output = optionalString […]

Swift中的局部推理

Swift是一种令人难以置信的表达和强大的编程语言。 我们将探索Swift的一些语言功能,这些功能可使您的代码更易于阅读。 更好的按钮 让我们看一下一种常见的iOS模式,该模式在按下按钮时会打印一条消息。 如果您已完成任何iOS教程,则很有可能您之前已经看过。 选择器模式用于整个UIKit ,并不一定是不好的做法。 但是,我们可以做得更好。 当选择器声明和按钮的动作之间有很多代码时,就会出现此问题。 如果开发人员是第一次阅读本文,那么对他们而言,从根本上失去对您的功能的了解是很普遍的。 这两行代码是松散耦合的。 它们要求读者在它们之间跳转以完全理解该按钮。 让我们尝试一种新方法,使用闭包为按钮分配一个动作。 不用担心-开箱即用UIKit是不可能的,但是让UIButton像这样工作很容易。 除了在一个函数中包含第一个代码段之外,我们还使用了闭包来更清楚地传达单击按钮时发生的情况。 这样可以更容易理解此按钮的功能。 为您的按键操作实现闭包非常简单。 创建一个带有action属性的自定义UIButton子类,该属性是一个闭包。 我们在内部连接按钮的选择器,并在目标函数中执行关闭。 该解决方案可以扩展为包括UIButton的其他动作的关闭,例如touchDown , touchDragExit等。 局部推理 将相关信息保持在一起可以改善本地推理。 本地推理是一种想法,使读者可以直接在代码前面理解代码,而不必去探索代码的工作原理。 在WWDC 2016上,Apple工程师作了题为“ UIKit Apps中的协议和价值导向的编程”的精彩演讲,讨论了本地推理的概念。 他们的演讲涵盖了协议以及如何利用其优势超越传统的基于继承的解决方案。 很难将代码组织策略称为无效策略,因为它们通常会根据个人喜好而有所不同。 但是,我建议,最好的代码组织形式是允许读者准确地推理代码,同时最小化遍历代码库的距离。 延迟关闭 让我们看一下另一种常见的Swift设计模式,该模式专注于改进局部推理。 一种常见的做法是在UIViewController子类的viewDidLoad函数中执行设置工作。 就像前面的按钮示例一样,这很好用。 注意,我们在存储的属性声明和覆盖的函数之间划分。 这是我们要重点关注的问题-查找与视图相关的所有代码通常需要搜索。 相反,我们可以使用闭包来初始化视图。 闭包被标记为lazy因此可以在闭包内访问self 。 这允许属性引用在self声明的任何常量,并为任何控件设置目标操作。 此策略也适用于情节提要板。 代替使用闭包,可以使用didSet属性观察器,当故事板设置出口时会调用该属性观察器。 这对于无法在情节提要中设置的视图属性(例如拐角半径,渐变等)特别有用。它会将我们的更改本地化为视图本身。 无需将代码散布到整个文件中,我们可以将其放在一个位置。 协议一致性扩展 协议在整个Swift标准库和Cocoa Touch API中都使用。 它们提供了编译时的保证,即对象具有某些属性或功能。 这是另一个常见的模式,在视图控制器中实现集合视图的委托和数据源。 再一次,这有效。 但是,委托函数通常很长,并且往往会使实现它们的控制对象的大小膨胀。 很难说出某个属性或函数何时满足协议要求,以及它属于哪个协议。 […]