Tag: swift

tvOS:开始第一个项目之前需要了解的内容

我刚刚完成了我的第一个tvOS项目(视频流应用程序,例如Netflix)。 我过去两个月从事此项目,在那两个月中,我学到了很多有关tvOS平台的知识。 在本文中,我将尝试总结tvOS的主要局限性和优点,因此您将比以前更加为第一个项目做准备。 这可能是iOS和tvOS之间最重要的区别。 没有手势识别器,您无法触摸UI组件。 这很明显,因为大多数电视都没有触摸屏。 考虑到这一点,设计您的应用程序非常重要。 代替tvOS中的手势,有一种叫做焦点的东西。 我花了一些时间来熟悉它。 您可以在Apple的《人机界面指南》中阅读有关它的更多信息。 iOS和tvOS组件相似,但不相同。 tvOS上的某些iOS组件略有不同,有些根本不可用。 例如,图像02显示了UITabBar的示例,它与iOS完全不同。 (仅UI,它以相同的方式工作)另一个是UITextField,它在tvOS中具有详细视图。 (图像03)。 在图像03中,您可以看到UITextField的详细信息屏幕。 在此键盘上键入电子邮件和密码的体验绝对可怕。 尝试尽可能少地使用它们。 例如,您可以在屏幕上显示一些代码,而不是通过要求用户键入电子邮件和密码来登录,然后用户将转到他/她的计算机或智能手机并输入代码。 这就是Facebook的LoginKit SDK的工作方式,在我看来,它比那些电子邮件和密码文本字段要好得多。 在那里,它的工作方式与iOS中相同,请放心。 🙂 Apple TV没有Safari,因此UIWebView不可用。 我知道我已经谈论过tvOS上缺少一些iOS UI组件的问题,但是我认为谈论这一点尤为重要,因为无法作弊。 您不能以某种方式破解,UIWebView只是不可用。 苹果可能决定不将Safari和UIWebView包含在tvOS上,因为事实是,它很难控制和导航。 在tvOS上,AppIcon更为复杂。 第一件事是AppIcon必须具有多个层。 (两个或三个)每个图层都必须作为矛状PNG文件导出。 第二件事是顶部货架图像,如果它位于主屏幕的第一行并且具有焦点,则它是显示在应用程序上方的宽图像。 (图像05)应用程序上方的该区域也可以是动态的,所有这些(AppIcon,顶部架子图像-静态还是动态)在Apple的《人机界面指南》中进行了描述。 今天是我的事情,希望您今天能学到一些东西,有一天能对您有所帮助。 如果您现在有一两分钟的时间,并且您有此需要,我想请您给我写这篇文章的反馈,以便将来为您撰写更好的文章。 谢谢您阅读,托马斯。

在Swift中使用Clean Architecture的外部依赖关系

与你们中的许多人一样,我们一直在为GDPR做最后的冲刺。 而且我们意识到我们的应用程序与外部SDK有很多依赖关系 。 市场营销需要新的跟踪, 导入SDK-A 。 我们需要深度链接, 导入SDK-B ,我们还需要跟踪广告, 导入SDK-C ,有关应用程序通知的信息… SDK-D … 🐞问题 所有这些花哨的SDK给我们带来了很多问题 您见过这样的AppDelegate吗? func appDidFinishLaunching … { Firebase.setup(“ 32FD-324AFF-12FD4D”) Firebase.logLevel = .verbose AnotherSDK.start() AnotherSDK.startSomething() AnotherSDK.disableSomething() AndAnotherSDK.doAnotherConfiguration() 返回真 } 如果我们有一个新的Swift版本,我们需要等到所有这些SDK更新之后。 使用Cocoapods时,干净的编译可能会花费很长的时间,因为我们需要重新编译所有这些漂亮的依赖项。 我们决定使用SDK-A,在没有真正注意到的情况下,我们50%的类都在使用SDK-A的API。 如果SDK-A的所有者决定关闭此漂亮的工具怎么办? 它还将关闭我们的应用程序! 我们都是这些SDK的奴隶! 更有趣的是:使用GDPR,用户必须控制所有这些SDK。 等一下,不要和市场营销人员打架! 🏆清洁建筑 是时候为这些混乱带来一些秩序了。 外部依赖项需要成为我们应用程序的插件! 应用程序使用Crashlytics,Appsee,控制台报告崩溃,将其存储在文件中或将其打印在纸上并不重要 。 这些只是细节。 💉依赖注入 因此,让我们开始构建一个我们可以注入的协议(因此可以在单元测试中对其进行模拟。) ⚙️模块 请务必注意, 唯一的公共API必须是ExtenalDependenciesInjection。 因此,我们可以将整个实现带到另一个模块中。 之后,我们可以将该模块导入到我们的应用中。 甚至在许多应用程序中重复使用此模块。 因此,我们不必经常重新编译所有这些外部依赖项。 您的编译时间将更快,CI服务器也会更快。 […]

在准备好后端/设计之前有效地开发Swift应用程序

UI模块和系统的其余部分之间也是如此。 用户界面需要输入FeedItem的输入(以在屏幕上呈现),因此,只要我们描述了界面边界(合同),我们就可以继续并行开发,而不会因没有后端或UI设计呢。 一旦后端和UI设计就绪,我们就可以将所有模块组合在一起。 最后,由于我们的组件暂时不支持UI(和平台),因此我们创建了一个新的macOS框架,该框架将帮助我们加快开发和测试过程,因为我们无需在运行缓慢的iOS上运行应用程序或测试模拟器。 立即订阅我们的YouTube频道, 每周获取** 免费的新剧集**,以及 在GitHub上关注项目的进度。 最初在 www.essentialdeveloper.com上 发布 。 我们一直在帮助敬业的开发人员从低薪工作转变为高级职位-有时只需几周! 为此,我们会不断进行和分享免费的市场研究,以了解如何提高同理心,正直和经济学的技巧。 如果您想从事自己的职业,请立即免费获取我们的最新研究成果。 如果您喜欢本文,请访问我们的网站https://essentialdeveloper.com,并获得更多类似的深度定制内容。 在以下位置关注我们:YouTube•Twitter•Facebook•GitHub

使用Sentry自动化错误处理的快速入门

Sentry是一个用于跟踪应用程序错误的出色工具,在本简短指南中,我将向您展示如何将其添加到iOS应用程序中。 注册新账号。 您是一名开发人员,我希望我不需要逐步介绍。 2.如果没有设置CocoaPods,请安装它并在项目目录中运行pod init,它将引导您完成创建Podfile的操作 11.将绝对路径复制到脚本中,并将其粘贴到编辑器框中 12.你做完了✅! 您现在可以自动跟踪错误。 🥳

Swift入门

您是iOS的新手。 您想将脚趾伸入iOS开发令人兴奋的世界。 但是,当您进行窥视时,会遇到作为Objective-C的大灰狼。 不用担心,Swift可以节省时间。 当我第一次进入iOS时,我是一个新手,只有三个月的Python编程经验。 我很害怕这么快做出这种转变对我意味着什么。 但是,一旦我进入了Swift,我就陷入了爱河。 我发现它仍然很容易阅读,但同时又拥有使一种语言令人兴奋使用的Pizzazz。 另一方面,由于Objective-C的总体构造方式,它被证明具有一定的学习曲线。 让我们比较一个示例Objective-C类和一个Swift类。 目标C 用Objective-C编写类可能有些艰巨。 这是因为Objective-C需要每个类的实现文件和头文件。 头文件(.h) #import @ class ThisTest; @ interface ThisTest:NSObject @ 属性 (非原子)NSString * objectiveCString;-( void )someMethod; @ end 实施(.m)文件 #import“ ThisTest.h” @ 实现 ThisTest NSString * objectiveCString = @“ some string”;-( void )someMethod { NSLog (@“这是打印方式”);} @ end 当我刚开始的时候,我觉得这很吓人。 当我最终着迷于协调变量和方法的命名,弄清楚什么去哪里以及整个导入业务时,它也被证明很忙。 迅速 使用Swift,我意识到我可以将所有内容都放在一个文件中,而将更多的精力放在逻辑上。 我所要做的就是找到一种创建将功能分组在一起的类的方法。 […]

iOS:使用Swift处理图像的句

在GreedyGame,我们尝试在不影响Gamer游戏体验的前提下帮助游戏开发者获利。 我们致力于通过将原生广告引入手机游戏并创建广告人❤️,来创建更好的广告生态系统。 在本博客中,我们想带您简短地了解使用Core Graphics和Core Image库对iOS图像进行的各种精美操作。 什么是图像处理? 它为什么如此重要? 图片无处不在。 从精美的Insta过滤器到灵巧的Snapchat或任性的Google图像搜索,图像处理无处不在。 这是一种对图像执行某些操作以获取增强图像或从中提取一些有用信息的方法。 这是一种信号处理,其中输入是图像,输出可以是图像或与该图像关联的特征/特征。 开始之前 iOS开发人员使用许多不同的编程界面在屏幕上渲染图形。 UIKit和AppKit具有各种图像,颜色和路径类。 核心动画可让您四处移动图层。 SpriteKit可让您设置动画。 AVFoundation可让您播放视频。 处理低级的图形可能会有些棘手。 但幸运的是,对于开发人员来说,Apple提供了用于与较低级别的图形处理程序进行交互的抽象/接口。 核心图像和核心图形框架只是这些抽象中的少数。 核心形象 Core Image是这些抽象之一,它是在Apple生态系统中进行编码时经常会遇到的一个库。 从编辑静态图像到在实时视频内容上使用过滤器,Core Image的用途十分广泛,可以处理各种用例。 Core Image是一种图像处理和分析技术,旨在为静止图像和视频图像提供即时处理。 它使用GPU或CPU渲染路径处理来自Core Graphics,Core Video和Image I / O框架的图像数据类型。 核心图形 Core Graphics是一个相当大的API,涵盖了基本几何数据结构(例如点,大小,矢量和矩形)的色域以及对其进行操纵的调用,这些东西将像素渲染为图像或显示在屏幕上,一直到事件处理。 您可以使用Core Graphics创建“事件点击”,使您可以监听和操纵进入应用程序的事件流(鼠标单击,屏幕点击,随机键盘混搭)。 iOS中的不同图像类型 在开始使用上述框架之前,先来看一下iOS中不同类型的图像: UIImage —一个对象,用于管理应用程序中的图像数据。此对象是在UIImageView上显示图像的高级方式。 CIImage —由Core Image过滤器处理或产生的图像的表示形式。 它仅具有与图像关联的图像数据,并且具有产生新图像的所有必要信息。 CGImage —它仅表示位图。 在核心图形中使用CIFilter进行裁剪,遮罩,滤镜之类的操作将返回CGImage /位图。 现在让这些框架付诸实践。 操作清单: 我将在图像上演示以下简单操作列表。 模糊影像 在图像上应用不透明度 […]

iOS编程入门

因此,您想为iPhone和iPad创建应用程序吗? 创建应用程序是您生活中充满乐趣和挑战性的体验。 让我们深入研究iOS编程 1.什么是iOS? iOS是Apple Inc.开发的移动操作系统。它于2007年发布,iOS设备为iPhone,iPad,iPod touch。 iOS版本 iPhone操作系统 iPhone OS 2 iPhone OS 3 iOS 4 iOS 5 iOS 6 IOS 7 iOS 8 iOS 9 iOS 10 iOS SDK是一个软件开发工具包,它使开发人员可以编写适用于iphone,ipad和ipod touch的应用程序。 它包含Xcode IDE,模拟器,框架,工具,编译器和一些示例等。 2.购买Mac 创建iOS应用的基本要求是拥有Mac。 如果预算较低,请使用Mac mini。 Mac mini的基本型号配备1.4GHz双核Intel Core i5处理器,4GB的1600MHz LPDDR3内存和500GB的硬盘驱动器。 该模型足以运行Xcode。 3.安装Xcode Xcode是Apple提供的集成开发环境(IDE)。 Xcode允许您为每个Apple设备开发应用程序。 它与最新的iOS SDK(软件开发套件),源代码编辑器,调试工具,界面生成器等捆绑在一起 要下载和安装Xcode,您必须具有Apple ID。 所以,如果您没有Apple ID? 只需单击此处。 创建Apple […]

iOS开发中的Ruby历史

该帖子最初发布在我的个人博客中 。 阅读原始帖子,这样您就不会错过任何内容。 今天,2月24日是Ruby编程语言诞生25周年,因为它由日本的Yukihiro“ Matz” Matsumoto命名。 自从1993年发布以来,它已成为最动态,易学且最时尚的编程语言。 在iOS开发领域,Ruby几乎已广泛用于包管理,自动发布或使用脚本管理Xcode项目的任何地方。 这是为什么? 即使在iOS和Ruby中没有什么共同点,Ruby在iOS开发领域中正在做什么。 在本文中,我们将尝试找出Ruby在iOS开发和部署中存在的一些历史原因。 如果您不使用Ruby,则可能会发现您的语言中的库,最佳实践,设计模式,工具或框架在很大程度上受到Ruby最佳实践的启发。 我目睹了如此多的Swift,PHP,JavaScripts库,这些库是从原始Ruby库直接实现的。 RSpec已在PHP(PHPSpec),JavaScript(Jasmine)和Swift(Quick)中实现。 可能还有许多其他示例已由Ruby用其他语言实现。 不知道为什么Ruby如此流行,但这是因为语言的简单性,社区和生态系统使Ruby成为优秀的编程和脚本语言。 现在,我们将介绍在iOS开发中使用哪种基于Ruby的工具。 由于各种原因,iOS应用程序开发中积极使用了各种基于Ruby的工具。 最近,有人在Twitter上问了一个真正的问题, iOS Developer为什么经常使用Ruby? 这是一个有效的问题,因为除了苹果公司开发的项目外,几乎没有任何内部没有Ruby的iOS项目。 现在,我们将列出一些工具,这些工具在iOS开发人员中非常流行,并成为iOS开发的核心部分。 游牧人 可可豆 快车道 危险系统 xcpretty xcov 这些只是一些基于ruby的精选工具,但在iOS应用开发中可能还会使用更多工具。 现在,我们将简要介绍这些工具的背景知识。 由于Nomad-cli已被Fastlane工具取代,因此最近没有积极使用nomad-cli,但是Fastlane工具受到使用Ruby编写的nomad-cli的启发。 这是基于红宝石的工具开始出现在iOS开发中的早期参与者之一。 该项目为可以在nomad-cli之上编写的命令行工具奠定了坚实的基础。 这是用于将iOS应用分发到App Store的纯命令行界面。 您可以在此处阅读有关nomad-cli的更多信息 在nomad-cli之前,通常用于使用本地Xcode存档的应用程序,或者需要使用xcodebuild工具进行复杂脚本编写的应用程序。 xcodebuild生成的脚本通常非常冗长且难以维护。 它接受很多参数,每个参数都需要在脚本中配置,这很繁琐。 nomad-cli的作者Matt精通Ruby,开发了此工具来使用命令行解决iOS二进制分发问题。 不确定nomad-cli的作者为什么开始使用Ruby在Apple的本机技术上构建包装器。 看着mattt的Github仓库,他对Ruby十分精通,这也许就是他选择Ruby作为nomad-cli的原因。 CocoaPods是Ruby涉足iOS应用开发的项目。 CocoaPods是Xcode项目的依赖管理系统。 它被用来创建和分发Swift和Objective-C包,并在其他项目中重复使用。 CocoaPods具有可在Xcode项目中使用的所有软件包的集中存储库。 CocoaPods不是单个项目,而是使用Ruby编写的项目的集合。 这些项目包括Xcodeproj,CLAide,Molinillo,CocoaPods Core,Master Repo等。您可以在此处找到项目的详细信息。 在使用CocoaPods之前,在Xcode项目中管理依赖项确实很痛苦。 iOS工程师必须在Xcode构建阶段中手动链接框架。 Cocoapods通过内部自动化所有这些任务解决了这个问题。 CocoaPods的主要作者Eloy […]

在Xcode中跟踪构建时间

当然,某些语言或模式意味着您可以用更少的代码来做更多的事情,但是请听我说…… 假设完成一项功能需要10行(当然包括测试)。 不花时间写那10行,就不会使您更接近完成功能。 会议,reddit,编译等都使您无法集中精力实现目标。 您无法更快地键入那10行,您已经以124 WPM的速度键入。 为了提高工作效率,您必须停止阅读reddit并优化编译时间。 WakaTime不能阻止您阅读reddit,但是我们可以跟踪您等待构建完成编译的时间。 有了这些信息,您可以确定项目中的编译缓慢,并采取措施优化构建。 从Xcode开始,我们在WakaTime仪表板上增加了您花费在编译代码上的时间。 要跟踪您花费在等待构建和编码上的时间,请为Xcode安装WakaTime插件。 最初于 2018 年4月10日 在 wakatime.com 上 发布 。

保存代码片段以加快编码速度。

Xcode中有一项功能,您可以保存一个自定义代码段,您可以自己编写该代码段,并在项目中以及以后的项目中随时使用。 有许多有用的方法可以使用此功能。 例如NSURLSession,Core Data或仅是简单的case / if / else语句,您会感到非常懒惰。 因此在Xcode上,如果您查看右下角的位置,通常会在情节提要中寻找视图控制器,但这次是在swift文件中找到以下内容: 有许多功能将非常有帮助,但是我们要重点关注的功能是称为“ C Inline Block as Variable ”的功能。 正如描述中所说:“将块保存到变量以允许重用或将其作为参数传递。” 通常,我们可以采用我们认为可能对将来的任何项目有用的任何代码片段,只需拖动或键入快捷方式即可。 因此,首先我们需要有一个要保存的代码段。 因此,在此示例中,我将使用NSURLSession的代码段。 突出显示您想要保存的代码,然后将其简单地拖到“ C inline Block as Variable”上。 因此,现在,您的代码段已保存并显示了一些预览。 默认情况下,它将被命名为“我的代码段”,您可以将其名称更改为所需的任何内容,以便于阅读,从而了解什么代码段。 还有一个名为“完成快捷方式”的文本字段,您可以在其中命名任意名称,当您调用该特定快捷方式时,它将自动完成它并为您提供代码段。 在此示例中,我将其命名为URLSessionCompletion 因此,使用此完成快捷方式,我们现在可以在项目上将其称为特定名称,它的作用就像我们正在调用此名称一样,几乎就像调用函数一样。 这是一种很棒的方法,可以使您的编码运行得更快,尤其是当有些代码中您只是忘记而只需要提醒时。 当然,在进行评估或在技术面试中使用此功能是不可接受的,但是此功能对于大型项目绝对有用,并且如果您只是忘记了一段代码,则可以很好地提醒您。