Tag: iOS应用程序开发

Swift:没有人会打扰的常见错误-属性和函数调用的明确性

您好,我亲爱的开发人员, 我想提到的一件事是,Swift在函数和属性调用中引入了隐式性(可以避免调用self): 我们在ObjC遇到了这样的事情,但是到目前为止,这种疾病已经扩散到了各处。 使用该语言功能有几点要点: 没有语法高亮显示的代码不可读; 即使语法高亮显示,如果您不完全了解代码库,如果有全局函数和变量以及与全局变量同名的局部函数和变量,也很难得出所谓的东西。 当与属性一起使用时,开发人员往往会忘记,对属性的多次调用应缓存在局部变量中,因为在没有显式调用的情况下,他们只是不会将对属性的调用视为重复。 因此,我对所有人的建议是:不要使用快捷方式。 显式和重复数据删除代码,而不是在视觉上隐藏重复代码,而不在逻辑上隐藏它。 是的,像鸵鸟一样把头埋在沙子里,对您没有任何好处,因为属性不是万能的,无论您怎么想,它们可能或可能变得计算昂贵。 因此,为了排练,请明确: 就是这样,伙计们。 祝您有美好的一天,无论您身在何处,都要保持干燥。

iOS的自动续订

什么是沙盒? 沙盒是一种无需创建金融交易即可测试我们的应用和应用内购买的环境。 使用App Store基础结构但不处理实际付款的测试环境。 而是返回交易,就好像付款已成功处理一样。 使用iTunes Connect创建沙箱测试器 在iTunes Connect中创建沙箱测试程序帐户,您可以使用该帐户在测试环境中运行应用程序,然后再将其提供给用户使用。 在iTunes仪表板上,单击“用户和角色”,然后单击“沙箱测试器”。 单击测试器旁边的添加按钮(+)。 输入测试人员信息,然后单击保存。 对于每个沙箱测试器,您需要收集以下信息: 名字 姓 从未用作购买iTunes或App Store内容的Apple ID或与任何现有Apple ID相关联的电子邮件地址。 考虑为每个沙盒测试器创建一个专用的电子邮件地址。 密码 秘密问答 出生日期 App Store地区 测试订阅 在沙盒环境中测试应用程序时,可自动更新的订阅持续时间会缩短。 此外,测试订阅仅在每个8小时窗口内自动续订每个帐户最多六次,然后订阅将在每个订阅期结束时自动过期。 无论应用程序是否处于活动状态,续订都会自动进行,就像App Store中的续订一样。 这种测试机制的唯一问题是无法选择测试*取消订阅*。 同样,在使用沙箱和TestFlight环境时也无法测试订阅管理。 每次续订都会向应用程序发送交易数据,交易取决于续签发生了多少次。 下一次在应用程序打开进行验证时将进行处理,这些交易会触发另一个密码提示。 此多个密码提示仅在测试中出现。 测试续订和到期 由于时间限制,请使用每月订阅进行测试 订阅每月订阅 关闭应用程式 5分钟后启动应用程序 应用程序将显示密码提示,输入密码 重复步骤2至4 6次。35分钟后,该应用现在应恢复为取消订阅状态,并允许用户再次付款。 测试还原购买 订阅每月订阅 在5分钟内删除该应用 安装应用程序并打开 点击恢复按钮 在这种情况下,应用程序应找到活动订阅以向用户解锁专业内容。 测试跨设备的还原购买 订阅每月订阅 在其他设备上安装该应用 开启应用程式 点击恢复按钮 在这种情况下,应用程序应找到活动订阅以解锁专业内容。 […]

作为iOS开发人员实习生的12周-第四周

第四周过去了,这是我本周所做的事情〜 我第一次自己解决了合并冲突和合并分支的问题,这真是令人兴奋! 我还了解了如何合并UIView,动态标签创建以及有关相互依赖的约束的更多信息。 整合UIViews 当构建一个包含多个UIView的复杂屏幕时,请考虑是否可以重用这些UIView中的任何一个,而不是创建两个具有几乎相同代码的独立UIView文件。 例如,“添加付款方式”和“添加促销代码”是ScrollView中ContentView内部的两个UIView。 它们最初几乎完全相同,但是在用户交互后会更改。 这两个UIView可以合并为一个可重用的UIView,而不是拥有两个UIView文件。 在ReusableView中,枚举用于控制两个视图中的差异标签/差异行为。 动态标签创建 我认为基于传入的数据动态创建的文本标签是有史以来最酷的事情! 这是从一个自定义UITableViewCell创建的UITableView中的两行。 成分选项标签是stackView中的标签。 请注意,第二行没有选择自定义成分选项,因此不会生成标签。 这些自定义成分标签是在更新单元格功能内部生成的。 约束条件 如果您的元素将始终在同一位置对齐,则最好将这些元素彼此约束而不是独立约束。 即:productLabel的顶部约束和priceLabel的顶部约束应等于quantityLabel的顶部约束。 这样,如果顶部约束需要稍微偏移一点,则只需要更改quantityLabel的顶部约束,因为另一个标签的约束已经依赖于该约束。 我在本周使用的一些超级有用的git命令: 1.恢复为先前提交 查看以前提交的哈希 git日志 获得正确的提交哈希后,您想还原为: git reset –hard hashOfCommitYouWantToRevertTo 2.合并分支 首先确保您在要合并INTO的分支上 git checkout branchYouWantToMergeInto 然后确保您在正确的分支上 git merge branchYouWantToMergeIn 这应导致: 3.合并冲突 合并冲突文件路径将在终端中显示 我喜欢使用Sublime修复pbx proj文件上的合并冲突 subl pathOfPbxProj 修复Sublime文本编辑器中的pbx proj冲突 退出Xcode 使用以下终端命令打开工作区: 打开* xcw * 修复工作区中的其他合并冲突 第四周就这样了! 😊

Swift4中使用MVVM的流程协调器[第1部分]

将所有逻辑嵌入ViewController会导致iOS应用程序开发中一个著名的问题,称为Massive View Controllers。 建筑师和开发人员开始采用新的体系结构来解决此问题。 所采用的一种这样的体系结构是MVVM(Model-View-ViewModel),它已在iOS应用程序开发中非常普遍(与RxSwift结合使用)。 MVVM使您可以取消应用业务逻辑的耦合,并可以测试用例和用户界面。 这导致可重用性和更好地维护代码库。 使用Segue在iOS中可以轻松实现视图控制器之间的导航。 它的易用性和可视化布局可见性将吸引您将所有导航逻辑都包含在视图控制器和情节提要中。 但是从长远来看,这将导致巨大的耦合和可重用性问题。 为了解决此问题,MVVM体系结构中采用的一种更清洁的方法是流程协调器。 协调器是基本的Swift对象,可以封装导航逻辑并使组件可重用。 本教程演示了将现有基于情节提要的代码重构为协调器导航流程的开始步骤。 在本集中,我们将从重构使用基本MVVM构建的现有代码库开始。 我们介绍了Flow协调器,用于将导航逻辑与Segue和ViewController分离开,并将其移至Coordinators。 我们定义了所有协调员都需要遵守的协议,并且协议定义引入了childCoordinators,这让父级协调员拥有一个引用,直到弹出或关闭它们为止。 如果您喜欢这些教程的质量,请喜欢,订阅和分享。 请观看以下链接提供的所有剧集: 第1集-https://youtu.be/fH9paWpCvQs 第2集-https://youtu.be/qLbUzwZrQjc 第3集-https://youtu.be/qLbUzwZrQjc 第4集-https://youtu.be/b1GadsUtB9s 第5集-https://youtu.be/EZtCOQyRK7w 第6集-https://youtu.be/T0yT6J_Mp9U 第7集-https://youtu.be/ur-U9nzazbc 第8集-https://youtu.be/6KC1GdLnez0 第9集-https://youtu.be/fT_VI1SiapQ 第10集-https://youtu.be/KvDd1JTCWC8 第11集-https://youtu.be/PnEOgW7Ccig 观看其他TOP编程教程,网址为: youtube.com/c/letscodeeasy 请关注我们: http://letscodeeasy.com www.facebook.com/letscodeeasy https://twitter.com/letscodeeasy

Swift:常见错误无人问津-扩展

您好,我亲爱的开发人员, 查看代码时,我有3种状态,每分钟对应的WTF数量从最坏到最好: 30…无限->我想杀死一个向世界介绍THAT的人,他是最坏的人,即使是最血腥的独裁者,例如斯大林,波尔布特或希特勒,也比他更幼稚。 10 .. 我喜欢那个家伙/女孩,(他)他很聪明,我们可以一起工作并仍然生存,但是,是的,每个人都有他/她自己的缺点。 0 .. 那位开发人员很棒,我想向他/她学习并承受他/她的孩子。 第一类代码的完美示例是我在过去的iOS 3中见过的“小”类,该类从API下载了一些内容,对其进行了解析并返回了结果。 很简单,不是吗? 没有人不能破坏这样一个简单的代码,对吗? 错误。 实施是可怕的。 您是否认为该人使用了ASIHTTPRequest(据我所记得,当时还没有AFNetworking或AlamoFire)? 不? 您是否认为此人在NSURLConnection周围使用了包装器? 不。 但是他当时使用了什么? 好吧,他使用UIWebView从API下载JSON。 我可以承认,手上沾满了鲜血,所以我在等待警察被监禁。 但是前段时间还有另一种情况,当时这个家伙刚刚达到31 WTF / m。 一切都差不多,除了一件事,他热衷于编写类似于以下代码的代码: 那太可怕了。 试想一下,忘记放置beginUpdates或endUpdates,或者只是在重构期间将其删除。 这将导致一些麻烦,特别是如果我们将多个更新嵌套在一起。 此外,在整个项目中,有几个这样的代码部分,出于自身的利益,我们可以将其视为重复。 但是请不要害怕,好老的Oleksa对您有建议,它是从基督世世代代以来传给我的家人的,现在我很慷慨地与您分享(tssssh,别告诉其他人):“使用类别/扩展名和闭包”: 此扩展名是完全可重用的,可以从一个项目拖到另一个项目,也可以直接装上荚(抱歉,这里没有迦太基,Artsy和Cocoapods是最好的,我是他们的忠实拥护者)。 这些神圣的知识也可以应用于协议: 我们在Swift中使用了协议扩展,在ObjC中使用了一些很棒的宏(尽管这值得商de,有些开发人员可以很容易地带着我坐在里面把我的车烧掉,只是要提一下它们,如果有兴趣的话,请看一下: IDPLocking),可以解决NSLock的问题: 再次提供与UITableView相同的便利。 而且没有忘记解锁的风险。 而且,由于有了协议扩展,我们可以在所有符合NSLocking的对象中免费获得该行为。 而且我们甚至更进一步,现在我们实际上可以在不使用外部变量的情况下获得函数的结果。 为什么行得通? 因为Swift中的Void是一个值,所以它等于空tuple () 。 尽管可以在扩展中以多种方式应用相同的想法。 由于此方法只是使用函数注入行为,因此您可以尝试将其用于扩展之外的其他方面。 就是这样,伙计们。 祝您有美好的一天,无论您身在何处,都要保持干燥。

iOS开发设置:崇高的文字

这篇文章是有关设置iOS开发环境的系列文章的一部分。 安装 直接从网站下载并安装SublimeText。 Sublime可免费下载和评估,但应购买以继续使用。 我说应该,因为尽管您可以无限期地进行评估,但是Sublime进行了大量工作,支持出色的工作对所有人来说意味着更多的好处。 如果下载时无法购买,则会偶尔出现一个弹出窗口,要求用户购买Sublime。 首选项→设置可对您的Sublime安装进行细粒度的控制。 阅读每种设置的注释,并进行调整以适应您的需求。 命令行整合 炎症声明:我选择SublimeText作为我的编辑器。 是的,我知道“真正的”开发人员会使用vim或emacs(而我选择不打的是另一种方法),但是我在命令行上做的编辑不够多,因此不值得花时间在了解所有键绑定。 我宁愿进行重构或深入研究新的iOS SDK。 因此,要设置命令行终端以使用Sublime作为编辑器,请将此行粘贴到.bash_profile或.zshsrc文件中,然后重新启动终端。 要使用:在命令行中,您可以使用subl . 在Sublime或subl 打开一个新文件。 扩展名 在Sublime中安装程序包控件: 工具→安装程序包控制 从这一点上,您可以浏览一下可用的通用软件包列表( 例如 ,花括号完成或自动缩进),Objective-C和Swift。 此外,您可以直接从Github存储库添加软件包-在命令面板中搜索“添加存储库”。 安装与您的需求相关的软件包: 工具→命令面板→安装软件包 对于严格的iOS使用,我很少需要语法突出显示或Objective-C或Swift的自动完成功能,但是当您确实需要它们时,它非常有用。 Packagecontrol.io是一个有用的网站,可让您在安装之前查看可用的软件包。 由于可用软件包的列表会定期更改,因此我不会特别强调任何内容。 帮手 如果您想在离开Sublime时自动保存文件,则可以在“首选项”→“设置” —“用户”中添加以下行: (如果要添加到现有设置,则不需要大括号) 主题 在过去的几年中,主题变得更容易找到和安装,因此,我将简单地链接到一些最佳教程,以查找和安装自定义主题。 专家提示 :将Sublime主题与iTerm / Terminal和Xcode主题进行匹配。 在工具之间转换时,它更易于解析,并减少了精神上的阻力。 Colorsublime是安装新主题的最简单方法之一。 如果要直接使用Package Control,请在packagecontrol.io上搜索“ theme”以进行预览,然后按照Extensions中的指示进行安装。 例如,可以从Package Control直接获得SodaTheme。 如果您想要更多选择,Dayle Rees提供了有关为各种应用程序安装主题的简短教程,以及流行主题的预览。

斯威夫特预期为零,不是

我的单元测试失败。 它想要nil但得到了 。 我最初的反应是指责我的计算机愚蠢。 您是否期望我提供其他类型的nil ? 只有一个nil ,名字叫nil 。 但是请稍等。 电脑还不足以欺骗我们。 我做错了什么? 字典问题 这一切都很好,而且是预期的。 我遇到了问题,因为我将值类型设置为“ Any? 而不是Any 。 Swift让我的价值翻倍! 将键设置为nil 在“字典”中将键设置为nil ,它将为您删除该键/值对。 这就是上面第8行的行为符合预期的原因。 如果要在具有可选值类型的Dictionary中将值显式设置为nil ,则必须先将其包装。 当我第一次使用var dict: [String: Any?] = [“first”, nil]创建字典时,Swift会自动执行此额外步骤var dict: [String: Any?] = [“first”, nil] —它在后台为我包装了nil。 不要这样! 最后,我重构了Dictionary,使其值不使用可选参数。 必须记住的规则越少越好。 如果我对自己的代码感到困惑,那么另一个开发人员加入该怎么办? 如果您想进一步思考这个想法,请查看Tyler Johnson关于代码设计的文章。 代码应该像政治卡通一样呈现自己-充满了直率的隐喻,带有有用的标签,没有任何微妙之处。 肖恩判断 Livefront的 代码是什么样的 。

斯威夫特:没人犯的常见错误-布尔斯

您好,我亲爱的开发人员, 有时您可以编写一个代码,该代码在语法级别上不是重复的,但是在逻辑上是重复的。 让我们看一个简单的例子: 最终,这段代码说:“如果是,则返回是,否则,则返回否”。 我可以说一个奇怪的口音。 让我们以更好的方式重写它: 您可以说,没有人会在现实生活中犯这样的错误,上帝,您错了。 让我们稍微扩展一下代码: 是的,我敢肯定,您已经看到了这样的代码。 我已经在不同的版本中看过很多次了,我无法一一列举。 更好的解决方案: 但是最好的解决方案实际上是以一种不同的方式分解任务,似乎函数可以完成更多工作。 但是我无法粘贴真实的生活代码(NDA处于最糟糕的状态),由于其明显的简单性,尝试重新分解didProcessEqual毫无意义。 但是我会尽力的。 分解的一种明显方法是将处理移出函数,但让我们假设,对于两种相等情况,处理的一部分是相似的: 是的,你猜对了。 该解决方案为我们带来了重复。 并且我们尝试避免它。 此外,在学校中我们了解到2 * a + 2 * b = 2 *(a + b) 。 但是,当我们开始编码时,我们似乎忘记了这个简单的原理。 让我们尝试将其应用于faultyProcess : 这些只是简单的基础知识,但是我已经看到了这样的代码,这些代码是由经验不足1年的年轻开发人员以及具有8年经验的开发人员制作的。 作为后记,请干燥并检查您的代码是否存在此类错误。 如果您没有这样做,或者至少将来会避免这样做,那么请打招呼。 就是这样,伙计们。 祝您有美好的一天,无论您身在何处,都要保持干燥。

如何轻松为iOS项目设置GitLab持续集成

从未使用过它时,如何使Gitlab-CI / CD 和 Fastlane集成? 我们最近在Lodoss团队面对了这一挑战。 在本初学者指南中,我将分享我们的分步过程,最初的期望和最终结果。 因此,您将能够轻松地自行配置GitLab-CI / CD和Fastlane。 我们为什么要持续集成? 一切都应有目的地完成。 我们考虑了自动化的以下必要要点: 自动运行Swiftlint 提高代码质量 减少体力劳动 自动运行UI和单元测试作业 这不是我们需要的全部清单,但是,这是一个很好的起点。 在我们的工作中,我们通常使用以下GitFlow ,并且还使用它来自动化CI / CD流程。 这是描述我们想要获得的成功案例的序列图: 此外,如果有必要(例如,从功能分支进行紧急构建以向管理人员显示新功能) ,则可以通过使用标签来使用所有这些序列。 为什么选择GitLab-CI? 我们有GitLab,但找不到使用其他东西的任何理由。 因此,我们决定使用它,为什么不使用😎? 对我而言,GitLab-CI / CD比Jenkins更面向开发人员。 至少因为它是针对管道,标签和分支的,而不像詹金斯那样有工作。 而且我们必须使用这些东西来获得必要的工作,而不是不用代码进行配置。 GitLab-CI / CD似乎是一种用于在远程计算机上运行脚本的工具。 没有更多,但足够了。 一段时间后,我们意识到使用Fastlane并没有关系。 因为它能够满足我们的所有需求。 结果,我们摆脱了其他工具的束缚。 因此,我强烈建议您使用Fastlane代替手动脚本或其他方法。 为什么选择Fastlane? Fastlane是自动化iOS和Android应用程序Beta部署和发布的最简单方法。 🚀它可以处理所有繁琐的任务,例如生成屏幕截图,处理代码签名以及发布应用程序。 我们决定使用Fastlane,因为它: 让生活更美好 减少自动化时间 拥有清晰的文档 提到的原因还意味着团队中的其他开发人员将很容易学习。 当然,简单的过程比复杂的过程要好。 设置GitLab-CI和Fastlane 设置您的Xcode项目 在Xcode中创建一个新项目。 为项目命名。 转到项目方案,然后如下图所示打开共享标志: […]

科威特顶级移动应用开发公司

亚洲国家对智能手机的需求一直在增长,并且已成为在线市场上销售最快的小工具之一。 有太多公司广泛提供移动应用程序解决方案。 这是科威特顶级移动应用开发公司的列表 埃姆斯特尔 Emstell Technology Consulting是可信赖的移动应用开发公司之一,在科威特设有专职办公室和团队。 Emstell在科威特提供高质量的Web设计,IOS和android应用程序,软件开发,测试和咨询服务以及移动游戏开发。 Emstell拥有强大的设计团队,可以为移动应用程序和网站创建高质量的设计,从而提供出色的用户体验。 我们的专家团队提供与IOS(Iphone,Ipad)和Android设备兼容的自定义应用程序开发。 我们遵循独特的做法,以确保应用程序超出行业标准。 克里斯安 Chrisans是科威特领先的网页设计公司之一。 我们提供全面,无所不包的网络相关服务,包括科威特软件开发 我们经验丰富的团队拥有丰富的经验,可以提供专门定制的网站开发服务,以满足客户的确切要求 FaTbit技术 FATbit是一家网络设计公司,可以帮助科威特的企业和企业家创建顶级的企业网站和电子商务平台。 它活跃于Web服务行业已有十多年的历史,它肯定符合在阿拉伯语网站方面具有丰富经验的网站设计公司的资格。 设计大师 设计大师是经验丰富的移动应用程序开发人员,他们可以通过开发功能强大的移动应用程序将您的想法变为现实。 设计大师开发多媒体应用程序,Internet应用程序,基于GPS的应用程序和商业应用程序等。他们还集成了第三方的开源API,例如Facebook,Twitter,Google Map和Google Calender。 Nokhetha Nokhetha是最著名的移动应用程序开发公司,为企业和个人提供移动应用程序开发服务。 它位于科威特喜来登回旋处。 他们不断更新自己的技能,并沉迷于新技术,以便为客户提供最佳的应用程序。 他们的主要平台重点是iPhone应用程序和Android应用程序。 萨法顾问服务 Safa Consultancy Services是开发通用应用程序的专家。 它位于科威特的Sharq。 客户已利用其Android,iOS和iPad应用程序来增强业务。 他们致力于最新技术,并坚信为客户提供高质量的产品。 希望以上列出的知名移动应用程序开发公司对您的移动应用程序开发需求有所帮助。