Tag: swift

Swift Playgrounds的生活游戏-第3部分

这本《人生游戏》系列是我题为“ Swimulations in Swift”的书中的改编章节。 因为我已经在书中介绍了基础知识,所以本文假定您已经对Swift Playgrounds有所了解。 如果您想了解更多有关使用Swift编程语言编写模拟或与Playgrounds纠缠的知识,则可以从平价或电子书格式的最受欢迎的在线零售商处购买我的书。 我也可以租用! 游戏规则 现在,我们的细胞遍布整个世界,但目前它们已被及时冻结。 他们出生了,但是什么也没发生。 我们需要一种方法来推动世界前进并应用游戏规则。 返回World.swift并创建一个名为updateCells()的新函数。 在此函数内部,我们将创建一个新的临时数组,该数组将保存更新的单元格以及活动单元格数组。 每次单击视图时,游戏都会向前迈进另一代。 随着时间的流逝,模拟最终会稳定下来。您会发现许多游戏都会出现一些常见的模式。 如果您有兴趣了解更多信息,请在Wikipedia上找到大量的信息。 奖金 持续单击以查看结果会在一段时间后变得无聊。 因此,让我们自己运行游戏。 导航到WorldView.swift文件,并将此函数添加到类的底部: .now()是当前时间,但是如果我们希望代码暂停一会儿,我们可以添加一些额外的时间。 在这种情况下,为0.2秒。 然后,返回您的主swift文件,并在view上调用autoRun() 。 现在,游乐场将永远运行,或者直到您手动结束。

Xcode | 添加构建阶段的shell脚本,而不会弄乱您的项目文件

如何添加Shell脚本构建阶段: 在左窗格中选择“项目文件”,在右窗格中选择“构建阶段”选项卡。 2.点击+,然后点击“新运行脚本阶段” 3.在“运行脚本”阶段,添加以下脚本 回声“ — — — — — — — — — — — —开始运行测试脚本— — — — — — — — — — — — 回声“ — — — — — — — — — — — —测试运行脚本已停止— — — — — — — — — — — — 4.现在在源代码管理中比较您的项目文件。 现在,所有脚本都已合并到项目文件中,因此难以维护/查看。 让我们以不同的方式来解决审核/维护问题。 […]

xcodebuild:从命令行部署iOS应用

将iOS应用程序部署到iTunes Connect涉及各种事情,这既耗时又脆弱。 对于iOS开发人员来说,使用Xcode来构建,测试,存档和上传应用程序到iTunes Connect是非常普遍的做法。 幸运的是,Apple具有执行所有这些操作的命令行工具,并且最受欢迎的实用程序之一是xcodebuild。 Apple Developer工具上有一个名为Fastlane的精美包装器,可用于脚本编写iOS应用程序的部署。 您可能想知道为什么我们需要使用命令行来部署iOS应用程序。 您能想象没有Xcode的日子吗? 还是可以考虑从没有GUI访问权限的服务器上部署应用程序? 或者,如果您没有Ruby的脚本编写技能来使用Fastlane,该怎么办? 在构建,测试,存档和上传应用程序时,我们必须知道幕后发生的事情。 我们应该知道用于所有这些活动的本地Apple开发人员工具。 通过学习命令行交互,我们可以获得以下好处 深入了解在构建,部署iOS应用程序时使用的基本Apple技术。 易于自动化iOS开发任务以实现持续集成或基于云的服务器 更好地了解Fastlane等工具在后台执行的操作。 在本文中,我们将了解如何构建,测试,存档示例iOS应用程序并将其部署到iTunes Connect。 前提条件 为了了解命令行部署过程,我们应该预先设置以下内容。 带有Xcode工作区的示例应用程序。 例如CLI.xcworkspace 具有发布配置的Xcode方案: CLI发行 在iTunes Connect中生产的证书,AppID,置备配置文件设置。 使用Apple的文档来设置所有内容。 在本教程中,我们将假定配置配置文件CLI分发配置文件。 钥匙串中具有分发证书的macOS 我们将介绍从分析应用程序到使用xcodebuild部署到iTunes Connect的iOS应用程序的周期。 分析 在构建和测试iOS应用之前,要做的明智的事情之一是对源代码执行静态分析。 xcodebuild具有清除和分析源代码中任何常见语法错误的功能。 我们可以传递Xcode项目,例如CLI.xcodeproj $ xcodebuild -project CLI.xcodeproj -scheme CLI -sdk iphonesimulator10.3干净的分析 建造 我们可以使用xcodebuild’build’操作构建一个iOS应用程序,该操作会为我们的iOS应用程序生成派生数据。 构建应用后,它可以在模拟器中运行,也可以由测试包使用。 运行运行 我们可以使用简单的命令简单地构建应用程序以在模拟器中运行 $ xcodebuild -scheme CLI -workspace CLI.xcworkspace […]

iOS代码签名教程系列

我刚刚在个人博客(也称为XCBlog)上发布了有关iOS代码签名主题的一系列博客文章,以介绍iOS代码签名过程的基础。 不幸的是,它的内容太多,无法像在Medium上那样重新发布,因此我将在这里共享链接。 代码签名和配置文件配置文件一直是一个烦人的问题,并且将继续存在,直到iOS开发人员完全了解代码签名的基础。 本系列文章涵盖了iOS代码签名过程的基础。 尽管在线上有多种资源可用,并且Apple拥有有关代码签名过程的整洁文档,但这仍然是一个谜。 在本系列中,我们将尝试从头开始理解代码签名过程,包括代码签名到实际代码签名过程本身所需的内容。 只要适用,我们还将探索GUI以及命令行处理方式。 我们将从“证书签名请求”开始获取iOS开发证书,然后介绍证书及其内部部分。 了解证书后,我们将深入研究配置文件,最后,我们将了解代码签名过程。 通过对Web和Apple文档进行一些研究,可以用我自己的文字或语言写这些系列文章。 我已在最后一篇文章中介绍了所有这些参考资料。 我还附上了Apple Developer Portal和Xcode的一些屏幕截图,以便读者可以理解这些概念。 我试图隐藏所有敏感内容,但是如果有错误暴露的地方,请不要骇我。 iOS代码签名:1.入门 iOS代码签名:2.证书签名请求 iOS代码签名:3.证书 iOS代码签名:4.设置配置文件 iOS代码签名:5.签名iOS应用 ****************************************************** **** 希望您会喜欢本系列的iOS代码签名。 如果有一些误导信息,请随时与我联系。 像XCBlog的 XCTEQ 发布的帖子一样 ? 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 在 Github 上 搜索我们的 服务 ,开源项目, 或者在 Twitter , Facebook , Youtube 和 LinkedIn 上关注我们 。 下载我们的 XCBlog iOS应用程序以离线阅读博客。 X CTEQ 是一家专门从事基于Mobile DevOps,CI […]

迅捷的Grundlagen#1-Variablen und Konstante

Swift计划的初级工程师和Anderen Schreiber的工程师,Varigen und Konstante的初级工程师。 变数 修女是我的变本征吗? 劳特维基百科: 在 程式化的 可变 内因行为学中,韦尔奇因弗内夫·莱因普罗泽 塞斯· 奥夫特里特。 我的正常 下落与 变量是 Quelltext的名称, 名称是 地址,而地址是 Speicher的名称。 Nun wenn Ihr gerade in dersten Schritten der Programmierung steckt,带来了极大的痛苦,Text reht wenig,也使人们难以理解。 在Swift Macht中,一个人死了,是因为: var Geld = 10 哈本·维尔·尼姑也盖坦吗? Wier haben eine可变的ertert mit dem Wort“ var”,haben dieser einen Namen gegeben“ Geld”和dann einen Wert zugewiesen。 Wunderbar […]

DPImageView-Letters —创建带有缩写的ImageView

一个简单易用的UIImageView扩展,可生成带有用户背景色和双边框的首字母作为用户图像的占位符。 完全支持SWIFT 4和SWIFT 3。 TL; DR –现在,移动应用程序世界中任何图像视图的默认默认图片都是由带字符串首字母的imageview组成的。 您可以为其命名为Google或Facebook。 例如:如果我叫John Doe,那么结果将是其中包含JD作为字符串的imageview PS:您可以在此处查看其完整的GIST文件。 我将其命名为DPImageView + LettersExtension.swift 手动安装 将DPImageView-letters.swift文件从DPImageView-Letters-Header文件夹DPImageView-Letters-Header到您的项目中。 而已! 请享用! 用法 由于DPImageView-letters.swift是作为ImageView扩展创建的,因此您无需分别在每个类中导入它。 完成后,只需将其添加到您的项目中即可。 对项目内的任何ImageView调用此方法。 此方法将查找提供的文本的缩写,它将选择一种随机颜色作为背景色,它将为您提供一种使图像视图是否为圆形的方法,并且还可以为具有文本属性的imageview提供双边框变化 func setImage(string: String?, color: UIColor? = nil, circular: Bool = false, stroke: Bool = false, textAttributes: [NSAttributedStringKey: Any]? = nil) string是用于生成缩写的字符串。 如果可用,这应该是用户的全名。 color是一个可选参数,用于设置图像的背景色。 传入nil会自动为您生成一种颜色。 circular是一个布尔参数,如果启用,它将自动将图像裁剪为一个圆。 stroke是一个布尔参数,如果启用,它将自动在圆上绘制边框。 (它还为您提供双边框) textAttributes是文本的预定义字符属性的可选字典。 您可以在NSAttributedString中找到可用键的列表 如果要为给定名称保留相同的颜色,则可以使用UIColor扩展中的以下方法: static func […]

iOS自动版式4

4.kısımdayız! Bukısımdakod ile自动布局nasılyapılıronuinceleyeceğiz。 Eğergözatmadıysanızbundanönceki3yazıyagözatmanızıtavsiye ederim。 iOS自动版面3 Merhabalar Auto Layout的版本3和版本。 Eğeröncekiikibölümedahaöncehiçdenk gelmediyseniz bu… medium.com 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 自动版式kullanırkenbirşeyleryaparken hepdiğeralternatiflerden bahsettik。 yinebugüncode ile Auto Layout yaparken 3yöntemdenbahsedeceğim。 布局锚 布局锚bu serinin2。yazısında伪代码olarak yervermiştim。 Burada oyazıdaki伪密码子tam code哈利尼göreceğiz Yukarıdakigrafikte bir view in olabilecektümanchorlara yer verdim。 Soldansağaveyasağdansolayazılıpokunan dilleriçin领先ve尾随anchorların左ve右anchorlarlardoğruve tersorantılıolarakdeğiştiğindenyukarıdakişemadayine durumagöreilgili deyererrere。 Tümanchorlarıgördüktensonraöncekiyazılardanaşinaolduğumuz约束denklemini伪kod […]

降低

过滤,缩小和映射: 轻按一下即可转换收藏。 这些功能上的朋友, 您将清除的代码, 输入不可变,没有陷阱。 映射和过滤器引起了很多关注,但是我说减少是重要的一环。 或者,如果您对效率感兴趣,该怎么做:您可以使用reduce来构建地图和过滤器。 如果您只想学习一种,请选择减少。 功能朋友 Map具有对序列中的每个项目执行某些操作并收集结果的有用行为。 let words = [“hello”, “there”] let shoutyWords = words.map { $0.uppercased() } // [“HELLO”, “THERE”] map的输入是大小为n的序列,输出的大小也为n 。 接下来,使用过滤器可以确定序列中要保留(和丢弃)的项目。 let numbers = 0…10 let evenNumbers = numbers.filter { $0 % 2 == 0 } // [0, 2, 4, 6, 8, 10] 输出大小将介于0到n之间,具体取决于要过滤的事物数量。 减少什么? 减少减少 像其他两个操作一样, reduce接受一个序列作为输入,但是它的输出更为通用:它可以是您想要的任何东西! […]

Swift中XCTest和XCUITest的网络存根选项

原始文章:原始文章已发布在我的个人博客XCBlog上,继续阅读 此处 以获得更好的图形。 要阅读有关iOS DevOps和iOS CI / CD的更多有趣文章,请 在此处 访问我的博客 。 不要害怕没有广告! 每个iOS应用程序都要求数据显示在应用程序中。 不幸的是,我们无法将所有数据放入我们的iOS应用程序中。 iOS开发人员必须提出网络请求,才能从互联网获取此数据并在应用程序中使用它。 苹果提供了各种库和框架(例如URLSession,NSURLProtocol)来处理网络层,并且有一些第三方框架(如Alamofire)可用于处理网络请求。 但是,由于在测试网络层时使用了不同的方法,因此以网络请求形式测试异步代码变得非常复杂。 在这篇详细的文章中,我们将探索在Swift中测试网络层的所有可用选项,并涵盖可与XCTest框架一起使用的网络存根库的详细信息。 Swift中的网络测试 使用Swift编写的iOS应用的网络测试可以根据项目需求在单元,集成或UI级别执行。 单元和集成测试通常是快速而稳定的,而UI测试则是缓慢而脆弱的。 根据我在互联网上阅读的内容,人们正在使用各种方法在iOS中进行网络测试,其中一些常见方法如下 在单元测试或集成测试中使用协议模拟类 模拟是脆弱而艰苦的,到Swift时模拟变得更加困难。 Swift中没有可用的成熟模拟库来生成类似Java,Ruby,Python或其他语言的模拟。 开发人员必须手动编写所有模拟,并将测试代码与生产代码紧密耦合。 这里有一篇很棒的关于iOS网络测试的文章,以了解有关如何使用协议进行模拟的更多信息。 这种方法无疑使该应用程序更具可测试性,但是它涉及编写很多协议和模拟类。 在Swift中,我们需要模拟我们需要测试的大多数类和方法。 对于iOS开发人员而言,这将是繁重的工作,很快便陷入混乱。 记录和播放网络请求 Swift具有一些库,这些库使我们能够记录网络请求并进行回放,从而避免单元测试通过网络层。 它们将记录的数据存储在文件中,并且该数据被重用而不是进行网络调用。 最受欢迎的库是DVR,可对iOS应用发出虚假的NSURLSession请求。 还有另一个库Szimpla可以执行类似的操作。 您可以在这里在Szimpla上观看会议,在Realm学院中在DVR上观看会议。 使用库存根网络请求 网络层还有另一种方法,它是进行网络调用而不是模拟URLSession并返回存根或静态响应而不是真实响应。 使用存根,我们仍然可以实现网络测试的目标,并且不必将测试代码与生产代码紧密耦合。 我们将看到可用于通过Swift存根网络请求的库的详细信息。 一些最受欢迎的库是用于XCTest(unit)测试的OHHTTPStubs,Mockingjay,Hippolyte。 使用XCUITest框架与UI进行交互 用户界面测试贯穿网络层,涵盖了网络测试的所有方面。 苹果有XCUITest框架来涵盖Xcode UI测试。 我们可以使用一些库来为UITest存根网络。 一些流行的库是Swifter,SBTUITestTunel和XCUITest(UITest)的Embassy。 上面提到的所有方法都各有利弊,因此选择适合项目需求的方法至关重要。 在这篇文章中,我们将看到如何为单元和用户界面测试配置网络层。 Git定位应用 我们将在整个演示中使用GitHub API。 我们将向URL https://api.github.com/users/shashikant86发出网络请求,并从API获取位置并显示在应用程序中。 您可以通过在浏览器中访问JSON响应来查看它。 […]

自定义ViewControllers演示

您可以在我的博客上阅读此文章 我们的应用程序中发生的大多数屏幕转换都属于以下类别: 模态演示 在导航堆栈上推送/弹出 尽管这足以完成我们需要做的大多数工作,但在某些极端情况下,我们可能希望采用一种“原生”方式少而定制化的解决方案。 对我们来说幸运的是,UIKit为这项工作提供了正确的工具。 与往常一样,我们不必离官方文档(View Controller编程指南)太远,更详细地说,我们正在寻找创建自定义演示文稿。 本指南在文档档案库中,并带有Objective-C示例,但它们仍然是您可以在其中找到的最佳内容。 阅读指南将揭示一些有趣的观点。 当将要显示视图控制器时,UIKit将执行以下操作: 调用过渡委托的presentationControllerForPresentedViewController:presentingViewController:sourceViewController:方法以检索您的自定义表示控制器。 向过渡委托者询问动画师和交互式动画师对象(如果有)。 调用演示文稿控制器的presentationTransitionWillBegin方法。 执行过渡动画。 在动画过程中,UIKit调用演示文稿控制器的containerViewWillLayoutSubviews和containerViewDidLayoutSubviews方法,以便您可以根据需要调整自定义视图的布局。 过渡动画结束时,调用presentationTransitionDidEnd :方法。 因此,我们有几点可以操作和更改动画和演示样式。 展示横幅 假设我们要将文件上传到我们的服务器,并且我们希望在操作完成后通知用户: func upload(file: File, using uploader: FileUploader) { uploader.send(file, then: { let banner = Banner(message: “File successfully uploaded ✅”) self.present(banner, animated: true) }) } 现在这将以模态形式全屏显示我们的横幅,但是我们可能希望使其看起来像屏幕底部的横幅,以减少入侵。 我们将专注于自定义演示,同时使用底部的默认过渡。 首先,让我们创建我们的自定义表示控制器: class BannerPresentationController: UIPresentationController { override var frameOfPresentedViewInContainerView: CGRect […]