Tag: iOS应用程序开发

Swift 4的可编码协议

在WWDC 2017上,Apple引入了一种特殊的新方法来处理应用程序开发中的重复任务:JSON处理。 到目前为止,依靠第三方库(即SwiftyJSON,JSONShootout)来完成工作是非常普遍的,但是,随着Apple新的Codable协议的引入,许多情况本来可以很好地处理。 新的Codable协议实际上是另外两个协议的Encodable Decodable : Encodable & Decodable 。 这意味着,如果您认为合理的话,您也可以决定将两者分开实施。 让我们从一个示例开始: 假设您正在从咖啡店下载菜单。 您的Coffee模型看起来像这样。 通过简单地实现上述协议,您已经免费获得了一些好东西。 通过实例化JSONEncoder您可以轻松地将咖啡对象转换为Data. 由此,如果您从中初始化一个String ,您已经可以看到模型的JSON表示形式。 你有它。 现在,对于解码器,我们将使用编码器上的outputFormatting属性,以演示Swift 4的另一个不错的小功能,称为多行字符串文字。 通过将编码器的outputFormatting定义为.prettyPrinted我们可以在控制台上很好地呈现JSON,这对于处理更复杂的对象特别有用。 现在,要从JSON数据实例化Coffee,我们将复制打印对象并粘贴到新的字符串变量中,如下所示: 请注意,通过使用此新的“多行字符串”功能,我们能够以这样的方式表示字符串,并带有换行符,而不必转义双引号。 您只需要小心正确地排列顶部和底部的三重引号,一切就可以正常工作。 从那里开始反向过程,将字符串转换为输入数据,然后使用JSONDecoder解析代码并从中构建新的Coffee实例。 太酷了吧?

第一天-倒数计时器应用程式

我的眼睛从我的头上掉下来,所以明天我要把这只小狗写出来,但是我们从第一天开始,我们有点像应用程序了! 自动版面 直到现在,我还没有想到您在Sketch中看到的自动版式并不是他们的主意。 而是基于Xcode本身内置的工具。 它超级直观,非常适合确保您的视图适合多种设备。 每日反思播客 锚点-开始播客的最简单方法 启动播客的最简单方法。 100%免费创建,分发和托管您的播客。 锚 时间跟踪 为了弄清楚获得半水平的应用程序开发所需的时间,我将跟踪自己的时间并记录所涉及的小时数。 请记住,我有3个5岁以下的孩子,所以这是一个充满激情的项目,发生在晚上的沙发上,而不是Netflix。 为了使它更有趣,我将在成本和代理费率两方面都加一个时间值。 费用:60澳元 中介费:$ 150 AUD

在iOS应用中使用Coordinator模式的真实示例

当代的编程世界充满着潮流,谈论iOS应用程序是很重要的。 希望我没有误会说协调器是近年来最时髦的建筑模式之一。 因此,我们的团队在不久前意识到了尝试这种方法的不可抗拒的愿望。 特别是因为它获得了幸运的机会-逻辑上的重大变化和应用程序导航的全面重新开发。 该文章的第一版是用俄语编写的,并在此处发布。 问题 通常,视图控制器承担太多责任:它们直接“ UINavigationController命令”以拥有UINavigationController ,与同级视图控制器“通信”,甚至实例化它们并传递给导航堆栈,总的来说,它要做很多事情不在他们的责任范围内。 避免此类问题的一种方法是协调器。 事实证明,这还算是非常方便且非常灵活的:模式代码能够管理小模块(可能是唯一的屏幕)和整个应用程序(相对而言,直接从其开始)的导航事件。 UIApplicationDelegate )。 历史 Martin Fowler在他的《企业应用程序体系结构模式》一书中将这种模式称为应用程序控制器。 Soroush Khanlou被认为是iOS环境中的第一个推广者:它始于2015年他在NSSpain会议上的演讲。然后,他的网站上出现了一个思想片段,该思想片段具有多个扩展名(例如,这个扩展名)。 然后是许多概述(“ ios协调器”查询提供了许多质量和细节各异的结果),包括有关Ray Wenderlich的教程和Paul Hudson的“用Swift入侵”的文章(在有关“大规模”视图问题的系列出版物中)控制器)。 向前运行,最引人注意的讨论主题是UINavigationController “后退”按钮的问题。 因为点击它不会被我们的代码处理,所以我们只能有一个回调。 为什么有问题? 像任何其他对象一样,存在于内存中的协调器必须由另一个对象拥有。 通常,当通过协调器构建导航系统时,其中一些会创建其他并在其上存储强大的参考。 子项完成后,父项将控制权收回,子项协调器使用的内存必须释放。 Khanlou对问题的解决方案有自己的见解,并注意到其他一些推荐的方法。 无论如何,我们会回到原点。 第一种方法 在显示任何代码之前,我想解释一下,与真实的设计原则完全一致的代码片段和使用示例在不会妨碍良好感知的地方会得到简化和缩短。 当我们第一次开始尝试模式时,我们没有足够的时间和自由度:我们必须考虑现有的设计原则和公认的导航系统。 第一个版本基于拥有并控制UINavigationController的通用“路由器”。 它可以对UIViewController实例执行与导航有关的任何操作:“按下” /“弹出”,“显示” /“关闭”,以及使用“根视图控制器”的操作。 接口示例: 导入UIKit 协议路由器{ func present(_模块:UIViewController,动画:Bool) func dismissModule(动画:Bool,完成:(()-> Void)?) func push(_模块:UIViewController, 动画:布尔, 完成:(()-> Void)?) func popModule(动画:布尔) func setAsRoot(_模块:UIViewController) […]

App Store优化-开发人员可以做什么?

本文大致指的是我的同事Piotr Juszczak撰写的ASO简介文章-可以在这里找到该文章:如何增加应用下载量-应用商店优化。 可以通过iTunnes Connect访问评论: 选择应用->活动->评分和评论→iOS应用 可以按版本,等级,评论显示评论,并可以按用户所在国家/地区排序。 有趣的是,所有开发人员对用户的回复均由Apple处理。 当它们发布时,用户将收到一封电子邮件,鼓励他们继续对话或更改应用程序的评论和评分。 得益于此改进,App Store的审查部分已从回声室转变为沟通的媒介。 在这些交互过程中,您始终需要记住,Apple确实在乎评论的客观性,它们应该始终显示真实情况。 任何影响等级的尝试都可能导致应用程序从商店中删除,并且开发者帐户被暂停。 苹果搜索广告 ASO专家可能会感兴趣的是,每个iOS开发人员都可以轻松访问关键字工具,该工具是Apple Search Ads平台的一部分。 有许多工具会尽力为您提供有关某些关键字的受欢迎程度以及与类似应用程序竞争的难易程度的适当统计信息。 不幸的是,这些解决方案中有许多是基于假设和预测的。 如果您想查看Apple的官方数据,只有一种方法可以通过Search Ads进行。 注册后,您需要创建一个新的广告系列并选择一个基于您的搜索的应用程序。 您无需成为应用程序的发布者即可查看建议的关键字(按受欢迎程度排名)。 您甚至可以搜索与最初选择的应用程序的主题完全无关的短语: 免费使用关键字研究工具,您无需为此创建广告系列。 这是一种双重检查来自Sensor Tower或App Annie的数据的替代方法。 希望ASO与营销活动结合并不断响应用户的反馈将为您带来成功。 最初于 2017 年12月6日 发布在 www.itgenerator.com 上。

使用Swift对Info.plist文件进行强类型访问

作为Apple的开发人员,随着Swift的出现,我们开始在代码中面临类型安全约束。 从我的角度来看,我一直试图完全采用这种方法,即使这通常意味着要处理UIKit的多个部分,这些部分显然是根据不同的(更动态的)范式创建的。 有时候很容易,有些则更少,但是他们仍然是一个很好的练习,可以跳出框框思考,以使我们的代码更安全,更干净。 最近,我重新面对了一个表面上琐碎的任务。 我将读取应用程序的Info.plist文件中保存的应用程序的配置。 我的Info.plist包含一个名为configuration的附加节点,其中包含多个数据: server_url , environment_name和其他一系列键。 值是动态的,并根据您为启动应用程序而设置的当前模式分配(即$(SERVER_URL)是具有值或取决于配置环境(如TESTING/PRODUCTION )的值的url服务器)。 目的是通过保留数据类型来获取这些值。 最直接的方法是使用Codable协议背后的Codable (本文与Codable ,您可以在此处,此处或此处找到大量文章。 代码非常简单,您只需指定一个Codable结构即可处理您感兴趣的数据,然后为该Plist类分配泛型类型。 在我们的示例数据中,我们可以提供以下结构: 然后: 您可以使用该类本身来读取Info.plist以外的所有其他文件; 只需传递.plist(“otherPListFile”)作为init参数并提供您自己的Codable结构即可。

iOS- Swift 4.2 —使用键盘工具栏的箭头按钮,按顺序导航到文本字段。

iOS- Swift 4.2 —使用键盘工具栏的箭头按钮,按顺序导航到文本字段。 下面的TextFieldNavigation类将使用键盘箭头处理文本字段的移动。 2)使用带有六个文本字段的scrollView设计一个视图控制器。 3)在ViewController类中,我们将文本字段链接到TextFieldNavigation类(我们将所有文本字段按顺序存储在数组中,并将其传递给具有数组的TextFieldNavigation类) textFieldNavigator?.textFields = [firstTextfield,secondTextField,thirdTextfield,fourthTextfield,thirdTextfield,thirdTextField] GitHub链接:https://github.com/yugandh/TextFieldNavigationFromKeyboard 结论: 这是帮助您在ViewController中使用多个文本字段的项目中的一种简便方法。

VIPER 101

Merhaba,buyazıda的她的iOS平台mimilan olan VIPER mimarisini dilimdöndüğünceanlatmayaçalışacağım。 Yazınınhedef kitlesişuşekildedir; OrtamlardaVIPER’ıduymuşama neişeyarar tam emin olamayan,VIPER ile ufak tefek 1-2 projeyapmışamamantığınıtam olarakanlayamamışve yaanladığınıpekiştirmekisteyenkişiler。 Geliştirdiğimiz她的奶奶belirli bir mimariüzerinekurarız。 Seçeceğimizmimarinin kolay entegre edilebilir ve ek ek tigeltitieleelere uyumluolmasınıisteriz。 Aynızamanda kodumuzun okmasbilisolmasınıvearkadaşlarımızagösterdiğimizdehavalıbulmalarınıbekleriz。 Kısacabizyazılımcılarbi mimaridençokşeybekleriz。 在iOS电脑上,您可以下载mimari MVC’dir。 苹果酒,苹果酒,MVC,苹果酒,冰激凌。 ViewController’ınaşırışişmesibuna enbüyükörnektir。

Advanced iOS Developer(Swift)的最佳资源

以我的拙见,当然(更新10.12.2017) 很长一段时间以来,我的浏览器中都有一个文件夹,其中包含有关iOS开发和Swift的文章和视频,这对我阅读和重新阅读很有帮助。 我很确定大多数开发人员都有自己的具有最佳功能的库。 所以我决定分享我的信息Information 更新 12月10日:添加了调试部分 良好的iOS应用程序体系结构:MVVM与MVC与VIPER MVVM,MVC,VIPER…这么多缩写,哪种架构是最好的? 让我们来谈一谈永远重要的事情…… 学术领域 驯服极大的复杂性:MVVM,协调器和RxSwift 去年,我们的团队开始在生产应用程序中使用协调器和MVVM。 起初看起来很吓人,但是从那以后我们…… blog.uptech.team 汗楼| 协调员Redux 应用程序委托是任何应用程序的入口点。 它的主要职责是往返于……之间传递消息。 khanlou.com iOS架构模式 揭秘MVC,MVP,MVVM和VIPER medium.com MVVM简介·objc.io objc.io出版有关iOS和OS X开发的高级技术和实践的书籍 www.objc.io 汗楼| 8种模式可帮助您摧毁Massive View Controller 视图控制器之所以变得庞大,是因为它们做了太多的事情。 键盘管理,用户输入,数据… khanlou.com 依赖注入,iOS和您 脆弱的对象图之所以不好,是因为您无法轻松替换应用程序的各个部分。 如果是物体… www.bignerdranch.com 适用于Swift的SOLID原理– Marco Santa Dev 可维护的组件。 可重用。 只是个梦? 也许不吧。 SOLID原则可能就是这样。 SOLID是首字母缩写词… marcosantadev.com 依赖注入·objc.io objc.io出版有关iOS和OS X开发的高级技术和实践的书籍 www.objc.io 使用VIPER构建iOS应用程序·objc.io objc.io出版有关iOS和OS X开发的高级技术和实践的书籍 […]

ABI稳定性:Swift 5.0中的功能

Apple Swift 5将于2019年初发布。这是Swift的下一个主要版本。 目前,Swift的首要任务之一是在未来的Swift版本之间实现兼容性。 其中一个主要组件是ABI稳定性,它使应用程序和使用不同版本的Swift编译的库之间具有二进制兼容性。 Swift 5为应用程序提供了二进制兼容性:保证以后,使用一个版本的Swift编译器构建的应用程序将能够与使用另一版本的编译器进行通信。 ABI稳定性 应用程序二进制接口(ABI)是程序调用函数并使用其他编译程序中的数据结构的一种方式。 它是应用程序编程接口(API)的编译版本 。 对于使用外部库的应用程序,ABI非常重要。 如果程序是为使用特定库而构建的,而该库后来又进行了更新,则您不必重新编译该应用程序。 如果更新的库使用相同的ABI,则无需更改程序。 具有相同ABI的两个库版本称为“二进制兼容”,因为它们具有相同的低级接口。 ABI稳定性意味着将ABI锁定到某种程度,以便将来的编译器版本可以生成符合稳定ABI的二进制文件。 Swift的当前版本不稳定,因此每个二进制文件(App)都捆绑了自己的Swift动态库版本。 例如,如果App1使用的是Swift 3.0 ,则它将内部的Swift 3.0动态库 (包含3.0 ABI )捆绑在一起。 如果App2使用的是Swift 3.2 ,它将捆绑Swift 3.2和3.2 ABI 。 在这里,Swift并不存在于iOS操作系统中,而是存在于每个App中。 Swift 5.0中的ABI将使将来的编译器版本能够生成符合稳定ABI的二进制文件。 如果Swift成为ABI Stable,则Swift将被嵌入到iOS操作系统中,并且其ABI将与每个Swift版本兼容。 例如,如果App1使用Swift 5.0 ,但是App2使用Swift 5.3 ,则两者都将使用嵌入在操作系统中的Swift ABI。 在此示例中,使用Swift 5.0构建的应用程序将在安装了Swift 5标准库的系统以及假定的Swift 5.1或Swift 6的系统上运行。 为什么ABI稳定性很重要? 捆绑包大小将减小:您不再需要在Frameworks文件夹中包括Swift标准库。 更少的移植工作:较新的编译器可以编译用较早版本的Swift编写的代码。 这旨在减轻开发人员面临的迁移痛苦。 二进制框架和运行时兼容性:由于无需嵌入Swift,开发人员可以在Swift中创建预编译框架(当前,在编译应用程序时会编译框架)。

Github的Swift.gitignore解释

Swift.gitignore里面是什么? 在创建Xcode项目时,您放置了一个.gitignore,因为您不希望不必要的干扰出现在提交中。 但是,您不知道要在.gitignore中放入什么内容,因此只需从Github中获取Swift.gitignore,而无需真正了解文件中的每一行意味着什么。 我在做同样的事情,但想了解Xcode中的git,并有信心在Xcode项目中使用git。 github / gitignore 有用的.gitignore模板的集合github.com #Xcode # #gitignore贡献者:记得更新Global / Xcode.gitignore,Objective-C.gitignore和Swift.gitignore ##构建生成 建立/ 衍生数据/ ##各种设置 * .pbxuser !default.pbxuser * .mode1v3 !default.mode1v3 * .mode2v3 !default.mode2v3 * .perspectivev3 !default.perspectivev3 xcuserdata / ##其他 *。移开 * .xcuserstate ## Obj-C / Swift特定 * .hmap * .ipa * .dSYM.zip * .dSYM ##游乐场 timeline.xc时间线 Playground.xcworkspace #Swift软件包管理器 # #如果您要​​避免从Swift Package Manager依赖项中检入源代码,请添加此行。 […]