Tag: swift

创造力是关键

我的学区刚刚结束学年,现在我有几天的时间来回顾和反思我的学生和我学习Swift的美好一年,我想到了一个主要思想:创造力是激励我的学生去学习的关键。继续想了解更多Swift,并保持编码。 就在学习密码2操场上拼图变得有点常规的时候,学生们以不同的方式参与其中。 然后,他们能够开始创建游乐场拼图的各个部分。 这是Apple教育和工程团队在创建Swift Playgrounds应用程序时正确掌握的课程的重要组成部分。 从学年开始,并不是我所有的学生都完全从事Swift游乐场。 随着我们逐步解开谜题,我的一些学生对在Swift Playgrounds应用程序中进行编码变得更加感兴趣,每堂课都变得更具挑战性。 我有几位学生直到我们学习“学习代码2”的一半时才投入全部精力并投入到Swift语言的学习中。从“学习代码2”中的“世界建筑”部分开始,这两名学生花了很多时间花时间研究难题,复制操场,然后重新做难题,因为它们发现它们有趣而有趣。 学习代码2中的这些较后的难题使我的学生有更多的自主权,可以在操场上创造自己的世界并发挥创造力。 然后,由于这些学生包括音频文件,表情符号和图形文件,因此偏爱“学习代码3”中的每节课。 包含Apple提供的以及用户生成的音频和图形文件,使我的学生能够从头开始创建自己的项目! 这对我的学生们来说真是太棒了。 它为他们提供了应用程序创建过程的基本思想,而不必因学习Xcode而感到不知所措。 LJ是我的学生之一,一旦他能够使用音频文件并在编码和创作中都表达了他的创造力,他就全神贯注于编码和Swift Playgrounds。 在学习代码3中,LJ使用GarageBand在操场上创建了自己的音频文件和内容。 此外,LJ为操场上的背景图像创建了自己的自定义图形。 有些很棒,有些真的很有趣(事实证明,下学年我仍然需要介绍UI和UX设计)。 据他自己估计,LJ花费了至少30个小时,在“学习编码3”的结局部分中创建并编码了“我自己的项目”游乐场。 LJ-来自Vimeo的Brian Foutty的“我自己的项目”。 注意:由于某些原因,与每个按钮关联的音频未通过录音。 LJ为他的按钮创建了图形文件,并将其覆盖在非常丰富多彩(但有点忙)的背景上。 按钮的目的是播放LJ在GarageBand中为其操场创建的声音/音调。 LJ的代码透彻,富有表现力,并且有效地使用了他可以使用的工具。 我非常喜欢他如何花时间以编程方式创建和布置按钮,以便他的操场可以提供许多不同的声音和键。 我认为LJ和他的操场上最好的证明是,当学生能够在编码项目中发挥创造力时,他们将工作和学习很多小时。 学生将这样做,以便他们可以创建引以为傲的项目并反映出他们的兴趣和个性,就像应用程序通常可以反映出其创作者的个性一样。 查看LJ的代码:我自己的项目

好Swift,坏Swift-第1部分

自2014年WWDC首次发布开发者预览版以来,Swift将在短短的一周内庆祝其成立2周年。在我的工作场所,Swift首次发布时我们首先进入了Swift,此后我们再也没有回头。 但是两年来,我仍然在努力定义什么才是好的Swift代码。 使用Objective-C,我们已经有大约3十年的时间来找出最佳实践以及什么是好与坏的Objective-C代码。 在本系列文章中,我将尝试提炼出我认为可以构成良好的Swift代码的内容,以及不能造就好的代码。 我绝不是这个问题的专家。 我希望表达我对此主题的想法,并激励其他Swift开发人员(是的,我正在看您you)分享他们的观点和想法。 如果您对什么是好的代码有任何想法,批评或想法,请在下面留言或在Twitter上与我联系。 让我们开始吧

在Swift中以编程方式创建视图

为什么要以编程方式创建视图? 如果您发现故事板太笨拙或令人困惑; 希望在实现动画等功能时进行更多自定义和控制您的视图; 或者只是想增加技能,您可能想学习和使用程序化视图。 让我们以编程方式创建一个自定义视图! 这篇文章假定您具有以下基本知识:Xcode,Storyboard,Swift编程语言 通过声明变量或在viewController类中键入UIView来创建一个代表新视图的对象。 我将我的名字命名为“ blackSquare”。 实验:尝试更改自定义视图的x,y值,以查看其在视图控制器上的位置如何变化,或创建第二个自定义视图,并将其添加为第一个自定义视图的子视图! 翅❤

让我们编写Swift代码来拦截SSL固定HTTPS请求

在iOS应用中检查HTTPS请求的一种流行方法是中间人 ( MITM )攻击。 此技术要求将一台机器用作客户端的代理服务器。 为此,客户端必须将代理服务器的证书安装到设备全局信任存储中。 通过这样做,客户端将证书列入白名单,因此允许与代理服务器进行HTTPS通信。 这是一个用于检查CNN iOS应用程序的mitmproxy的示例。 在此之前,我已经在设备上安装了代理服务器的证书。 可以在mitmproxy网站上找到说明 SSL证书固定 保护您的应用免受MITM侵害的一种方法是使用SSL证书固定。 这涉及将可信任服务器证书的副本打包到您的iOS应用程序中,以及一些其他代码,以确保该应用程序仅与使用该特定证书的服务器通信。 当SSL证书固定功能处于活动状态时,该应用程序将不允许任何请求发送到任何不受信任的服务器。 因此,由于请求不是通过安全网络通道发送的,因此MITM代理服务器将无法接收请求。 Twitter iOS应用将SSL证书固定作为安全功能,用于发送到https://api.twitter.com的请求。 像mitmproxy和Charles Proxy这样的MITM工具将无法检查任何Twitter api请求。 解决SSL证书固定问题的一种解决方案是尝试在通过安全HTTPS通道发送请求之前拦截请求。 此技术要求我们将代码植入应用程序中,以便我们可以直接访问要检查的URLRequest对象。 因此,让我们首先访问Apple的URL加载系统。 URLProtocol —苹果的URL加载系统 在Apple的URL加载系统中,定义了不同的URLProtocol来处理不同类型的URL。 这是创建我们自己的自定义URLProtocol子类的步骤。 1.每个URLProtocol子类别都应至少定义以下内容 嗯,我想我不喜欢某人的Tinder个人资料。 api请求“通过”某人。 您还将注意到,Tinder也向Facebook Api发送了请求。 这是因为Tinder在应用程序中嵌入了FacebookSDK并使用了登录功能。 遗憾的是,未在Tinder应用程序上启用SSL证书固定。 任何人都可以轻松使用MITM工具来检查所有请求。 因此,让我们找到另一个应用程序。 Twitter的API请求 如前所述,由于SSL证书固定,MITM工具将无法在控制台上看到任何api.twitter.com请求。 由于该应用引发验证错误并且不允许通过网络发送请求,因此尝试登录Twitter将会失败。 注入我们的框架并禁用我们的代理后,我们可以看到登录api请求“ /auth/1/xauth_password.json”,其中包括我们的ID和密码值(请参阅Slack频道消息中显示的第二行) )。 请注意,成功登录Twitter后,该应用程序崩溃,原因是该应用程序检测到我正在使用自己的开发配置文件对应用程序进行签名,并且该应用程序的签名与KeyChain安全性发生冲突。 这是一个微不足道的问题,但是对于这篇中等职位,我不希望在我们的主要主题之外进一步分享特定于应用程序的漏洞。 技术讲座2018 这是我于2018年5月30日在新加坡发表的iOS Dev Scout Meetup演讲。 最后,我展示了即使SSL固定处于活动状态时如何检查Twitter应用程序的HTTPS请求。 拦截网络请求– iOS Dev Scout […]

迅捷周:09.01〜09.07

MVC iOS中的模型视图控制器(MVC):现代方法 iOS开发中的模型视图控制器(MVC)模式很容易理解,但在实践中很难掌握。 这个… www.raywenderlich.com 面向对象 [APP开发-使用Swift]理念介绍: 面向对象的程序设计与协议的程序设计 面向对象编程medium.com Swift中的面向对象编程 通过将事物分解为可以继承的对象,来了解Swift中面向对象编程的工作原理。 Swift基础—类和结构OOP和POP 在2014年苹果开发者年会,苹果很兴奋地推出了自家了程式语言,苹果在自家的电子书上(使用Swift开发应用程式)说到他们当初他们当初设计Swift是以这三项特色为目标。 medium.com 协议 快速了解所有协议 像功能编程一样,面向协议的编程是快速重要的概念。 我正在学习协议… medium.com 【iOS –代理主体(代理)和协议(协议)】 在iOS的世界里,物件与物件沟通的方式并通过委托(代理)和协议(协议)来实作,当然也不是只有这个方法可以达到,但是既然我们写的是iOS,我们可以还是比照该语言的架构来实作比较妥当,因不管Apple … medium.com 吉特 成功的Git分支模型 在这篇文章中,我介绍了我为某些项目(在工作中和在私人项目中)引入的开发模型 。nvie.com 工具类 自动合并XCode项目文件中的更改的更好方法 合并XCode项目文件是任何iOS或OS X开发人员时代的祸根。 在本周的iOS Dev Weekly中,有一个提示…… medium.com TrustWallet / trust-wallet-ios iPhone:Trust –以太坊钱包和适用于iOS的Web3 DApp浏览器– TrustWallet / trust-wallet-ios github.com 日期 使用Swift将日期字符串转换为日期类型 为什么我写这个💩? medium.com 其他 如何成为高级工程师,当你不是相关科系,不会任何程序语言 目录 medium.com 如何成为一位杰出的工程师(1)@ […]

[iOS]评论耦合器文件委托和关闭?

NATIF的toujours上的dans notrelancéesur le mobile上的aujourd’hui的Salut les Astronautes。 Cet article s’inscrit dans lalignéedes 2précédents,et il estimpératifde les avoir lu pour comprendre ce dont il s’agit ici: http://blog.eleven-labs.com/fr/delegates-closures/ http://blog.eleven-labs.com/fr/android-listeners/ 共有2条个人评论文章,请参见cel pari-ci va parler的著作。 -Mais oui在Sait上发表评论,alezdépêche-toilà在veut savoir上发表评论,评论员在iOS cette fois-ci上听了。 -好的,请重新申请小技巧。 注释ça va se passer: Bon总理文章,Pour que tout le monde soit heureux,Jum vais vous produire du DUMMY代码,Swift。 iOS开发者Dans le monde […]

TDD迅速UygulamaGeliştirmeninfaydalarıve Xcode da Swift迅速XCTestkullanımı

测试驱动开发(TDD)可以帮助您完成测试驱动开发(TDD) 。 Genellikleyanlışbirkanıolarak单元测试yazmanınuygulamageliştirmesüresiniuzatacağıdüşünülüyor。 Halbukiuygulamamızdaöncedenunit testleriyazılmasıdaha kolay birşekildeyapılacakişlevintasarlanabilmesinisağlar。 布达下摆tasarım下摆işlevintestinde bize zamankazandırdığıgibi kodu daha iyiyapılandırabilmemizede olanaksağlar。 Bu nedenle unit testler ile uygulamageliştirmemizdaha sonraoluşacakmuhtemelbuglarıdaöncesindetespitedebileceğimiziçinuygulamageliştirmesüresiniazaltacaktır。 Uygulamamızınkod kalitesiniartırarakdaha az bir bug ilegeliştirebiliriz。 单元测试器下摆pozitif下摆negatif caseler ile beraberyazdığımızdaolabilecekbirçokfarkli案例测试etmeolanağınakavuşmuzoluruz。 Buda iyi testedilmişve daha az bugiçerenkodyazmamızısağlayacaktır。 Yazdığımız单元测试仪daha sonra uygulamadakioluşabilecekdiğerbuglarıtespit etmemizde bizeoldukçakolaylıksağlayacaktır。 Budauygulamamızdakigelecek olanbuglarıçözmesüremiziönemliölçüdeazaltacaktır。 Teamcity gibi CI( Continus Integration)单元测试人员, Jenkins单元, 测试系统(SUT)(测试中) prensibine uygunsürekliolarak测试,edilen biruygulamamızolur。 Projedeyapılan她的承诺sonrasındaunit […]

玩AVSpeechSynthesizer!

所以我以前真的找不到我感兴趣的主题,我想找到一个非常酷但简单的编码方面,我们在项目中可能需要也可能不需要。 讲师之一:向Haaris求助! 建议使用AVSpeechSynthesizer。 AVSpeechSynthesizer是一种类方法,基本上可以接收文本并将其转换为语音。 现在,我相信,如果我们确实愿意的话,我们可以有自己的讲话/声音,但这仅是因为我们只有几行文字要说。 如果我们想让我的演讲充满活力并且必须多次发言,AVSpeechSynthesizer将为我们提供帮助,并增加了机器人语音= 3。 根据手机上的语音设置,我们可以提供所需的重音,从英语到日语。 AVSpeechSynthesizer属于AVFoundation框架,该框架处理应用程序中的音频,您必须首先导入该框架,然后再导入视图控制器类所在的委托。 ViewController类:UIViewController,AVSpeechSynthesizerDelegate 现在有了设置中的默认语音,可以通过多种方式将语音与Utterance一起使用,例如语音说话速度的速率,语音音高以及语音声音的响度。是。 这是如何使用发声方法的示例 let speechUtterance = AVSpeechUtterance(字符串:“你们哪个更喜欢?目标C还是Swift?”) //设置声音 speechUtterance.voice = self.speechVoice //速率为0.0到1.0(默认由AVSpeechUtteranceDefaultSpeechRate定义) //速率是声音发出的速度 speechUtterance.rate = 0.25 //乘数在> 0.0到2.0之间(默认为1.0) // pitchMultiplier:声音将达到多高 speechUtterance.pitchMultiplier = 1.0 //音量从0.0到1.0(默认为1.0) speechUtterance.volume = 1.0 //延迟说出该短语前后,有点像语音为每个单词呼吸 speechUtterance.preUtteranceDelay = 0.0 speechUtterance.postUtteranceDelay = 0.0 //说出来 speechSynthesizer.speakUtterance(speechUtterance)

最简单易用的客户端应用程序的Swift Generics和元编程

使用元编程和泛型来构建最易于使用的客户端API 该项目的目标是避免通常在客户端应用程序上需要的样板代码。 您将能够避免将本地对象转换为所需的服务器端对象,反之亦然。 您还将免费获得所有服务器通信方法。 只需创建一个新类型并与服务器进行通信即可。 例如,最后,您将能够创建一个符合我们的帮助协议FirebaseFetchable的新类,如下所示: 最终课程宠物:FirebaseFetchable { //来源:忽略 var firebaseId:字符串=“” //来源:忽略 var isCompleted:Bool = false 变量名称:字符串=“” 在里面() {} } 您将能够使用自动生成的PetManager类中的自动生成的方法与服务器进行通信,如下所示: 让fido = Pet() fido.name =“ Fido” PetManager.shared.save(fido) 这会将Pet对象保存到您的远程数据库中。 您还可以自动生成用于从数据库中获取,更新和删除的方法。 因此,实际上这仅是创建新类型matter的问题。 在此项目中,我使用了Firebase,因为它是快速项目的非常简单的设置。 对于元编程,我使用了Sourcery,这是一个出色的代码生成工具。 设定 首先,请在Xcode中创建一个单视图应用程序。 然后,您需要设置Firebase。 转到firebase网站,获取您的plist文件以及仪表板设置。 非常容易和快速。 之后,下载plist文件并将其附加到项目。 如果需要帮助,请查看他们的教程。 然后,创建一个Pod文件,包括Firebase和Sourcery并安装它们。 如果您需要Pod的帮助,请查看此链接。 您的pod文件将如下所示: 目标“您的项目名称” use_frameworks! #Your_Project_Name的广告连播 pod’Sourcery’ pod’Firebase / Database’ 结束 在UIApplicationDelegate中,确保导入Firebase模块: 导入Firebase 并在同一文件中配置Firebase共享实例: func […]

ID3TagEditor和Mp3ID3Tagger的诞生以及我进入ID3标签标准的旅程

最近我买了一辆新车。 经过大量搜索,我最终决定购买雷诺Clio 2017 1.5 dci。 我爱这辆车。 这是我上一辆车向前迈出的一大步。 它最有趣的功能之一是其媒体娱乐系统:Media Nav Evolution系统。 该系统具有7英寸触摸屏和地图集成功能,并且具有Siri语音识别和电话支持功能的基本智能手机集成功能。 引起我注意的一件事是在开车时可以开始听我的mp3专辑的可能性(在以前的汽车上,我有一个标准的CD播放器)。 因此,我准备了一些mp3的usb密钥,然后开始收听它们。 我突然发现了一个很棒的发现:我的一些歌曲在触摸屏上显示了有关专辑的信息,并且正在显示专辑的封面! though我虽然说:“哇,这太酷了!! 我需要开始用所有这些信息填充我的mp3。 我想查看我所拥有的每个mp3专辑的封面! 这正是我进入ID3TagEditor和Mp3ID3Tagger开发之旅的那一刻,但是我还没有意识到。 所以我坐在MacBook前面,打开iTunes,然后开始标记mp3文件。 我将它们保存在usb密钥上,然后我去了汽车上对其进行测试。 结果如下: 这到底是怎么回事??!!?! displayed显示的标题和专辑,但没有在屏幕上显示封面。 所以我回到办公桌上,开始下载一些本地macOS应用程序,该应用程序让用户编辑我发现的称为ID3标签的内容 。 他们都没有按预期工作。 然后我找到了一个名为Mp3Tag的应用程序。 这是Windows应用程序,也可以使用Wine在macOS上运行。 所以我下载了它,并尝试标记一些mp3。 我将它们放在USB闪存盘上,然后… Mp3Tag工作正常expected。 但是后来我开始自问:“其他本地macOS应用程序没有在做Mp3Tag吗?”。 发现这个奥秘的原因的唯一方法是将标记为Mp3Tag的mp3与标记为其他应用程序之一的mp3进行比较。 因此,我以我最喜欢的十六进制编辑器HexFiend打开了一个带有iTunes标签的mp3和另一个带有Mp3Tag标签的mp3,然后将它们进行了比较…