Tag: iOS应用开发

dotSwift 2018:亮点和印象

我刚从2018年1月29日在巴黎举行的dotSwift会议回来,之后直接与Daniel Steinberg进行了为期2天的Swift编程语言强化培训,我想分享一些关于此次活动的想法。 演讲视频将通过多镜头拍摄很快以高清质量提供。 来自活动的图片已经可用。 在技​​术社区中,有一种关于会议格式被破坏的话题。 的确,在活动后可以免费观看高清晰度的演讲视频以及在GitHub中免费共享代码的时代,参加此类活动的价值是什么? DotSwift确实尝试并在这方面有所不同:场地是巴黎市中心美丽的剧院,而且演出类似于深夜演出。 灯光舒适诱人,不像医院那样开满灯。 我们是移动开发人员,我们知道细节很重要。 最重要的是,整个晚上由杰出的主持人Daniel Steinberg主持,他向演讲者进行介绍,然后跟进有针对性的问题。 这没有观众的参与,但是我们知道问题是切题的。 无论讲座和会议的形式如何,大多数参与者似乎都认为,正是网络和在休息时分享的经验真正弥补了它的不足,尽管尽管是短暂的活动,但dotSwift确实创造了交流多个休息的机会。 这是人们可以了解场景中实际发生的事情的时间,因为Twitter和其他平台中的脉动往往是捏造的。 与真实的人喝酒聊天往往会揭示出该领域状况的另一幅更真实的肖像。 很高兴地发现,Swift 4本身似乎已经使Swift变得成熟了,Apple的Swift核心团队成员Ben Cohen的演讲为Swift的近期开发计划提供了一些启示(可以是随后是Swift进化网站),也介绍了迄今为止取得的成就。 正如Peter Steinberger所暗示的那样,尽管ABI的稳定性将不得不等待,但这似乎使得在Swift中开发库仍然没有吸引力。 尽管社区中知名演讲者的定期演讲水平很高,但我发现闪电演讲是当晚最令人鼓舞的。 他们各不相同,也很丰富,觉得这次会议不仅仅针对该领域的著名明星。 此外,我发现Ellen Shapiro关于协议扩展功能的演讲非常出色。 自从在有关传说中的面向协议的编程的传奇式演讲中将Crusty引入开发人员社区以来,关于协议的讨论已经很多了,Ellen总结了免费实现的强大功能以及需要注意的陷阱。 萨利·谢泼德(Sally Shepard)谈到了可及性,以及她在信号处理方面的背景如何在为视力障碍创建解决方案时有用。 当丹尼尔·斯坦伯格(Daniel Steinberg)提出疑问时,“是否应该跟踪用户对可访问性功能的使用?”,她的回答很温和但坚定。 最好让用户尽早参与设计过程,而不是不诚实地秘密跟踪他们。 最终结果是一种更好的产品,通过尊重用户的隐私获得用户的信任。 接下来几天,丹尼尔·斯坦伯格(Daniel Steinberg)进行的培训使学生对Swift在MVVM架构模式中的通信使用方法,用于编译时安全的类型的强大功能以及filter,map,reduce和flatMap的内部等方面的课程感到失望。深入Swift中的函数式编程方面。 保罗·哈德森(Paul Hudson)在会议上和丹尼尔·斯坦伯格(Daniel Steinberg)在培训中都强调了这一点,即使您可以在Swift中进行函数式编程,该语言也不是要完全起作用。 相反,正是结合了过程,面向对象和功能范例的能力,Swift才能发挥巨大的作用来表达对复杂问题的简洁,可读的解决方案。

功能视图构建

在情节提要中还是在代码中创建视图? 作为iOS开发人员,我们非常清楚这个问题。 他们两个都有优点和缺点,但是最近我越来越喜欢用代码创建的视图。 什么是架构? 我曾经将MVVM与RxSwift一起使用,这基本上意味着控制器是通过结合Storyboard , ViewController和ViewModel来创建的。 如果我们删除Storyboard界面,则在哪里构建视图的正确位置? 让我介绍一下ViewBuilders。 考虑一下当我们构建一个称为HomeViewController控制器时的情况。 让我们创建一个名为HomeViewBuilder的帮助程序结构,该结构最终返回HomeView ,该抽象使我们能够访问组件(等效于插座)。 因此,我们最终得到以下架构: HomeViewBuilder的结构: 也许您已经猜到我们要通过管道化一些操作(例如添加/设置适当的组件)来构建此视图。 让我们定义一个简单的ViewBuilder协议: 我们还定义实现ViewBuilder HomeViewBuilder 。 当然,最重要的部分是buildView函数。 我故意向您展示了此方法的最终版本 。 这是唯一可以从外部访问的公共方法,这是一种梦想,我们现在要实现。 首先 ,让我们介绍流行的管道和函数组合运算符,这些运算符允许我们组合函数和对象: 管道运算符用于buildView函数中,其基本外观如下: 组成从类型Builder功能到Builder 将此转换应用于创建的构建器 好的,看起来不错,但是这些 install / setup 功能 如何 工作? 如果您对镜头了解不多,则一定要观看一些视频,了解这种模式的工作原理。 我在这里使用它们来编写单独的小段代码,并使它们可重用。 让我们考虑使用vertical轴创建UIStackView并将translatesAutoresizingMaskIntoConstraints标志设置为false 。 我们将在项目中使用多少个? 当然很多 我创建了一些项目全局的Style结构,该结构定义了常用的样式,这些样式是(View) -> View类型的转换函数。 这里有些例子: 因此,让我们构建使用其中一种样式的UIStackView 。 这是典型installer功能的实现: 多亏了镜头组成,它看起来很清晰,我们在应用程序中获得了很多可重用性。 但是,等等,我们错过了重要的约束设置…… 问题 通过使用锚,我们可以很容易地通过将一个锚连接到另一个锚来生成约束。 但是在这里,我们失去了像镜头所使用的流程那样通用和通用的功能。 解决方案:让我们定义另一个构建器。 我创建了一个名为FunctionalBuilders的库,该库包装了约束构建并使其使用起来更加美观。 […]

iOS开发人员进入React Native的旅程

像许多iOS开发人员一样,我对JavaScript也有不好的看法。 我记得JavaScript是一种怪异的,狂野的西方语言,其中没有两种环境是相同的。 我对JavaScript的记忆是在Xcode的本机工具远远优于Web工具的时候形成的-我们有很酷的东西,例如情节提要,自动完成,内置在开发环境中的大量反馈以及无处不在的集成库。 工装 从那时起,多年来,Web以惊人的速度取得了进步和成就,而Xcode基本上(在Swift中添加了Playgrounds)或更低(Swift重构工具)。 JavaScript语言和开发环境已经发展。 我们喜欢的Xcode的所有功能-IDE自动完成,内联文档,语法错误的即时反馈-基本上已内置于现代环境中。 故事书-基本上等效于Xcode Playgrounds-很棒(并且通过VSCode内置的Orta的扩展)。 测试中 JavaScript测试(通过Jest🃏)是另一个联盟。 它几乎是即时的,是自动的(它监视Git的更改并运行受影响的文件的测试),具有类似RSpec的语法,并且可以在每次保存时运行。 本机单元测试始终感觉像是事后的想法,以至于有些博客文章介绍了Apple发布的虚拟现代测试框架。 XCTest很棒,但是感觉就像是一个旧式测试框架。 它与JUnit几乎没有什么不同,仅限于一种setUp方法和一种tearDown方法,并且无法在保存时自动运行测试。 诸如Quick / Nimble之类的替代方案非常现代,但是,如果没有Xcode内置的第一方支持,基本功能(如运行单个测试)将丢失。 反馈回路 JavaScript的反馈循环比本地反馈快得多。 我从未从事过没有荒谬反馈周期的大型本地项目。 在某些项目中,从git clone到副本更改可能要花费整整30分钟的时间 。 增量构建可能在20秒到3分钟之间的任何时间-刚好足以失去焦点或被Twitter分散注意力。 模拟器重新启动,并且必须手动导航回控制器是很痛苦的。 输入:热重装。 最佳的反馈循环会对开发人员的工作效率和代码质量产生巨大影响。 当反馈循环很长时,编写代码的方法是如此不同 -我发现自己试图一次创建整个功能或整个屏幕,进行编译,并希望在我喝咖啡或散步时获得最好的效果。 如果以分钟为单位来计算编译时间,则无法实现真正​​的TDD。 在JavaScript允许的较短反馈循环中,我发现自己正在练习红绿重构,真正的TDD并进行实时设计迭代。 React Native的性能和“感觉” 甚至当我开始听说非本地开发环境中的改进时,我都sc之以鼻。 我记得PhoneGap应用程序感觉如何,使用Xamarin有多困难(多年来可能有所改善?)。 我记得用这些技术制作的移动应用程序感觉不对 , 他们如何缓慢滚动或过渡。 但是,尽管React Native肯定会增加一些开销,但它的性能足够快,以至于我很难知道我使用的是本机应用程序还是本机应用程序。 当涉及到需要高性能代码的事情时,您可以在React Native应用程序中本地编写该代码,这意味着您可以在99%的情况下使用更好的开发环境,更快的周期,热重装以及更好的测试。 对于其余1%的情况,很容易退回到您可能已经习惯的本机环境。 未来 React Native的未来并不像Swift的未来那样确定。 几乎没有人担心苹果会在明天,下周或明年放弃Swift,但谁知道React Native在五年内是否仍会是一个活跃的项目? 这些担心是公平的,但实际上考虑五年后的技术是没有意义的。 拉起手机。 分页浏览您的应用程序。 这些应用程序中有多少已经存在五年以上了,而在已经存在的应用程序中,最近有多少没有经过完整的重写或重新架构?

iOS中的自定义URLScheme

什么和为什么 在iOS中,应用只能以间接方式进行通信。 您可以创建自定义URL方案,以便应用程序可以使用url将信息发送到您的应用程序。 URL方案使您可以通过定义的协议与其他应用进行通信。 并且您必须正确创建一个URL并要求系统将其打开。 要支持自定义URL方案,必须声明该方案并进行处理 如何实施 注册自定义URL方案 进入您应用的info.plist 添加行“ URL类型” 展开第一个项目(“ Item0”)并添加“ URL标识符”行,然后将值与您的应用程序标识符(例如com.company.appname)一起添加 在“ URL类型”中的第一项(“ item0”)中添加一行,并将其称为“ URL方案”,并在“ URL方案”下添加新项,这将用作与其他应用(例如“ yourapp” ) 使用URL方案 一些例子 myapp:// targetPage?param = value&anotherparam = value 此自定义网址将向UIApplicationDelegate发送一条消息,因此,如果您要处理该网址,您所需要做的就是在appdelegate文件中为其提供一个实现 注意 网址只能包含ASCII字符,不允许使用空格。 对于ASCII字符集以外的字符,应使用URL编码对它们进行编码。 URL编码将不安全的ASCII字符替换为%,后跟两个十六进制数字和一个空格,并将其替换为%20

Redux for Swift(第4部分)—路由和导航

在第2部分和第3部分中,我们将ReactiveRedux集成到示例项目中,以连接ViewController1和TableCell以启用自动订阅,现在ViewController1可以完美地隔离工作。 在本章中,让我们讨论一下冗余视图控制器如何相互导航。 首先添加一个新的与redux兼容的视图控制器ViewController2 : 路由器中间件的外观如何? 事实证明,没有比引用路由器的对象更复杂的了,并且只要某个动作是屏幕,就可以执行导航: 这只是AppRouter的最基本实现-随着应用程序尺寸的增加,它肯定会具有更复杂的路线和导航方法。 但是可以肯定的是: ViewController1仍然完全不了解外部世界,这始终是我们的首要目标。 在下一章中,我们将探讨最复杂的主题:中间件的异步工作。 ReactiveRedux提供了一个称为Saga的副作用模型 (以流行的redux库redux-saga命名和建模),但这绝不是一个简单的概念。 在此期间,请查看我们到目前为止所取得的成就: protoman92 / ReduxForSwift 我在Redux for Swift上编写的Medium文章的代码。 – protoman92 / ReduxForSwift github.com

适用于iOS和macOS的Building Moments 2

三年前,我开始了这个构建移动应用程序的项目,作为对我的长子奥尔顿的礼物。 是的,他的确是网站上显示的可爱宝贝。 该应用程序做一件简单的事情,每次录制1秒的视频,并将所有这些连接在一起,成为一部成长电影。 在过去的两年半中,我大部分时间都在录制短片。 合并的电影现在总共约15分钟。 每次回顾放映他年轻时代的电影时,我都会微笑。 自己使用该应用程序并吃了自己的狗食后,我发现了许多我想改善的问题。 它们包括但不限于: 提醒我每天录音 回顾最近的时刻 人像模式 与我的妻子合作记录瞬间 从照片导入 允许静态照片 跨设备同步 备份到iCloud并使其可还原 分享给家人 支持新的iOS和设备 清单继续。 但是,只有一项功能使升级应用程序具有很高的优先级。 这是: 我的第二个儿子即将到期-奥尔顿的父亲 一方面,我想对每个孩子公平。 因此,小弟弟也应该得到一份礼物。 我曾经有一个单独的应用程序的想法。 但是,随着时间的流逝,迫切需要为两个儿子度过难关。 我无法在一部手机上安装两个Moments应用,并且我每天都不会随身携带两部手机。 因此,基本上,我需要两个时间表。 由于该应用程序现在已经过时,因此iOS基础架构发生了很大变化。 仅仅更新代码库是行不通的。 (是的,我已经尝试过了)因此,我决定重写该应用程序。 我已经决定升级Moments几个月了。 但是,我仍然没有开始。 除了全职研究Sorted 3,我还想知道保持Moments的价值。 在2016年,我设定了一个目标,将Moments提升到一个新的水平,希望这可以创造收入来源以支持我们的家庭。 您可能会猜到,它不是那样工作的。 到目前为止,我可能已经卖出了100本,赚了70美元。 这还远远不够。 由于市场上存在类似产品,因此这可能无法为用户创造足够的价值。 但是,如果有人感兴趣,我想分享我在制作应用程序方面的经验(包括市场营销和技术方面)。 我想分享的知识清单: 开源Moments的代码库 制作应用程序中的教程视频 制作应用程序之路的博客文章 我将把这些内容包装到一个包中,并使它们免费提供 。 实际上,我想知道这些值有多大。 拥有支持我的工作的支持者将非常高兴,这样我就可以将更多的时间用于工作。 我正在为此设置一个Patreon页面。 谢谢阅读! 😎 如果喜欢,请测试 5秒钟内 可以击打 […]

垃圾收集与自动引用计数

在上一篇博客文章中,我们了解了iOS如何使用自动引用计数(ARC)作为其对象生存期管理系统。 在这篇文章中,我尝试指出ARC与垃圾回收或更具体地跟踪垃圾回收相比的一些显着差异(更精确的引用计数和跟踪是垃圾回收的两种不同实现。换句话说,ARC是由于跟踪垃圾收集是最常见的垃圾收集类型,因此通常术语“垃圾收集”是指跟踪垃圾收集。 ARC是使用对象所有权的编译器功能。 如果对象的引用计数为零(即不再拥有所有者),则ARC会从内存中释放对象,而不是在运行时在后台查找未使用的对象。 ARC在编译时会自动注入与Objective-C运行时等效的对象,以进行保留,释放(编译器在所有应有的位置插入保留和释放)。 我有整篇文章解释ARC的工作原理。 自动参考计数的优点 对象的销毁是实时且可预测的。 它具有对对象的确定性回收(当对对象的最后一个强引用消失时),而GC在“某个时候以后”释放对象。 如果没有长时间的收集周期就不能再引用它们,则将释放对象。 这样可以更快地释放对象。 这对于内存有限的系统(例如移动设备)很重要。 这定义了GC应用程序中可能存在的一类细微的错误,这些错误由于收集器不会在“错误的窗口中”触发而不会公开。 没有后台处理,这使得它在低功耗系统中再次变得更加高效。 如果活动对象集填满了大部分可用内存,那么跟踪垃圾回收周期就会触发得太多,这需要额外的空间来提高效率。 随着可用空间总量的减少,引用计数性能不会降低。 引用计数的渐近复杂度不取决于堆的总大小。 自动参考计数的缺点 无法收集保留周期。 保留周期即使无法访问,仍将参考计数保持在零以上 需要考虑多线程引用计数。 垃圾回收(GC)是一种自动内存管理尝试,用于回收垃圾或由程序不再使用的对象占用的内存。 在存在任何垃圾回收之前,您必须手动添加要保留和释放的调用(其他语言为“免费”或“销毁”)。 有几种实现垃圾回收的策略,最常见的两种是跟踪和引用计数。 .NET和Java平台使用跟踪垃圾收集。 垃圾收集在运行时起作用。 它检测未使用的对象,并在代码的任何部分不再使用它们时将其释放。 这发生的时间间隔不确定 (在经过一定时间后,或者在运行时看到可用内存变少时),因此不必在不再使用对象的确切时间释放对象。 垃圾收集的优势 GC可以清理整个对象图,包括保留周期。 这是垃圾回收相对于ARC的主要优势,您无需担心保留周期。 GC在后台发生,因此作为常规应用程序流程的一部分,内存管理工作量减少了。 垃圾回收的缺点 由于GC发生在后台,因此无法确定对象释放的确切时间范围。 当发生GC时,应用程序中的其他线程可能会暂时搁置。 ARC与GC 苹果的Objective-C邮件列表上的一个线程 垃圾收集简史 这个故事发表在中等规模最大的企业家精神出版物The Startup中,紧随其后的是295,232人。 订阅以在此处接收我们的热门新闻。

这是在新加坡搜索应用开发人员时要寻找的东西

这是在新加坡搜索应用开发人员时要寻找的东西 因此,您决定构建一个代表您品牌的应用。 恭喜,这是您改善数字营销策略的一大步! 但是,除非您有能力自己动手做DIY,否则您将需要一个可以将您的应用组合在一起的人。 雇用开发人员时,您需要做一些研究,并确保您选择最适合这份工作的人。 以下是在新加坡搜索应用程序开发人员时要考虑的七个主要特征。 速度 可以理解的是,您希望尽快将新应用发布给您的受众,因此,找到愿意在您设定的时间范围内工作的开发人员非常重要。 大多数项目大约需要2-4个月才能完成。 您需要做的就是找到一个可以为您提供建议的开发人员,这是您需要在市场上推出的最重要的功能。 这样可以节省时间。 另外,您应该对所需内容有非常清晰的说明,以便双方可以抱有相同的期望并准备尽快上线。 沟通是关键。 确保找到可以与之良好沟通的供应商。 讨论中的视觉元素很有帮助。 在开发开始之前充分利用它。 选择潜在的应用程序开发人员时,不要害怕问时间框架。 他们很乐意与您合作。 经验 除了开发人员的技能外,经验是关键。 通过选择经验丰富的开发人员,您将可以放心,他们知道他们已经习惯了与企业合作(及其截止日期),并且知道交易的所有技巧。 注意细节 由于创建应用程序的性质,对细节的关注至关重要。 他们需要良好的设计眼光,而不是编码技巧,还需要能够监督流程的每个步骤,包括计划,支持,文档等。 信任 如果开发人员受到其他业务以及您所在行业内其他公司的信任,那么这显然是您可以信任他们的认可之印。 查看哪些公司使用了开发人员的服务。 您认识任何大牌吗? 如有什么评论? 安全 在向他人提供您的数据以供使用时,您需要确保采取适当的安全措施。 询问您的开发人员他们使用哪些程序或系统来保护其数据(以及随后的您的数据)。 许多人甚至会使用军事级技术来保护他们的信息,这使他们成为明智的选择。 野心 不要选择一个乐于解决的开发商。 选择一个有创造力的人,激励愿意付出更多努力的人。 当您意识到开发人员超越并超越了您的期望时,结果将是不值得的。 连接数 您的开发人员与谁连接? 他们是独自工作还是通过增加其他人来提高他们的服务水平? 例如,一些开发人员与安全的电子支付系统合作,然后他们可以在其开发中使用这些系统以确保最终用户成功使用移动支付系统。 我在哪里可以找到具有所有这些特征的人? 在Omnitoons,我们以这些特性而自豪,甚至更多,以确保我们的整个团队了解每个项目背后的价值。 因此,如果您正在新加坡寻找应用开发人员,请立即与我们联系!

Swift还是Objective-C? 适用于iOS开发人员的工具提示。

在创作过程中,总会有一些选择和矛盾之处。 在UX设计师就Photoshop vs Sketch主题进行辩论并就有效的原型工具发表意见时,iOS开发人员也有自己的争论。 今天,我们将介入并在一些关于哪种编程语言是Objective-C或Swift的全球讨论中添加一些想法。 我们要求Tubik CTO和经验丰富的iOS开发人员Maria Nazarenko与Tubik Blog读者分享她的观点。 简要背景 让我们从一点点历史开始。 在讨论的一对编程语言中,第一个也是最老的是Objective-C。 它最初是由Brad Cox于1980年代初发明的。 因此,可以肯定地应用于这种编程语言的要点之一是,它确实经过了几代开发人员的反复试验和测试。 目前,Objective-C通常被描述为通用的,面向对象的编程语言,它将Smalltalk样式的消息传递添加到C编程语言中。 在Swift出现之前,Objective-C一直是开发人员用于OS X和iOS操作系统及其API的主要编程语言。 在2014年苹果WWDC上推出的Swift带来了自己的革命。 概括而言,Swift是一种通用的多范式编译程序语言,它是为iOS,OS X,watchOS,tvOS和Linux开发的,拓宽了以前的操作系统范围。 Swift旨在与Apple的Cocoa和Cocoa Touch框架以及已经为Apple产品编写的大量Objective-C代码一起使用。 最初,Swift的目标是比Objective-C更具弹性和安全性,并且更加简洁和友好。 它是使用LLVM编译器框架(包括Xcode 6)以及使用Objective-C运行时库构建的,该库使C,Objective-C,C ++和Swift代码可以在一个程序中运行。 因此,它为开发人员扩大了专业视野,使他们的工作更有效率。 这是开发人员开始讨论更好,传统或创新的里程碑。 哪个更好:Objective-C还是Swift? 前段时间,我们在关于Photoshop和Sketch之间选择的热烈的全球讨论中表达了我们的看法:“ 我们要给出的答案确实很简单。 可以互相补充的选项之间不应有任何战争。 显然,现在没有任何完美而理想的设计软件:如果存在,那么每个人都只会使用这一理想选择,而无需战斗。 » 似乎在iOS开发中,今天的情况确实相似。 即使阅读完Swift与Object-C的所有扩展功能之后,选择似乎也不是那么明显。 实际上,在Swift尚不成熟的时候,Objective-C便经过了多年的检查和测试。 在Objective-C中已经开发了大量产品,因此过渡到其他视图肯定需要花费一些时间和精力。 根据她在iOS开发中的丰富实践经验简要地描述了编程语言,Tubik CTO Maria提到,尽管Objective-C年龄较大且很常见,但是Swift可以被描述为语法更简单,工作过程更稳定。 哪种编程语言更有用? 由于Xcode是带有一组软件开发工具的集成开发环境(IDE),iOS开发人员实际上可以使用同一开发人员工具来应用Objective-C或Swift。 只要Objective-C存在更长的时间,使用这种语言自然就可以完成许多简单和复杂的应用程序。 不了解Objective-C并直接从Swift开始会限制开发人员的专业灵活性。 在开发人员必须更新现有产品的情况下,这一点尤其明显。 有时会发生这样的情况,开发人员只知道Swift,建议将现有的(也许是大的甚至是巨大的)代码从Objective-C重写为Swift,客户在逻辑上不认为这是可以接受的,当然也不接受为此付出代价的必要工作。 考虑到这一点,最好的选择是同时了解两种语言。 这为开发人员提供了自然的专业灵活性,使其可以处理当前项目中必须处理的任何任务和环境。 有两种策略主要取决于可用时间。 如果在学习基础知识和将其应用到实际实践之间花费了大量的时间,我们的建议是从Objective-C开始。 尽管它通常被描述为更复杂,但是它为创建和使用iOS系统的应用程序的基本原理和例程奠定了坚实的基础。 在此基础上,学习语法上更简单的另一种iOS语言(例如Swift)似乎并不难。 但是,还有另一种策略,它比以前的策略更具动态性,适用于那些没有足够时间处理需要尽快开始实际工作的人。 […]

Xamarin.iOS构建选项

Xamarin IDE为iOS和Android提供了非常有用的构建选项。在这里,我们讨论可用于iOS的构建选项。 可以使用各种配置和平台进行配置。 在这里,我仅考虑将其用于两种配置和平台,但是您可以根据自己的选择进行配置。 我在这里考虑的配置是Debug and Release,而Platform是模拟器和Device。 注意:有些构建选项对于调试配置是不可选择的。 什么是构建选项,它的用途是什么? 构建选项是在构建应用程序时可以使用的预定义规则或配置,换句话说,我们可以称其为构建应用程序时可以应用的一组规则。 它用于减少构建时间,应用程序大小,提高应用程序性能等。 如何打开Xamarin.iOS应用程序的构建选项? 您可以通过双击iOS项目来打开构建选项,或者右键单击它,在Mac的Visual Studio中选择“选项”,在Windows的Visual Studio中选择“属性”,然后从左侧面板中选择iOS生成选项。 您可以更改每个可用配置和平台的构建选项。 有关如何更改和添加构建配置和平台的更多详细信息,请检查:https://blog.xamarin.com/demystifying-build-configurations/ 有关配置和平台选项,请参见附图(Visual Studio for Mac的屏幕截图)。 了解构建选项 如上图所示,有许多可用的构建选项,每个都有不同的用法和优点,其中一些可能在某些配置和平台上不可用。 SDK选项:这使您可以选择系统上安装的iOS SDK版本,以用于构建应用。 链接器行为:在构建应用程序时,Visual Studio for Mac或Visual Studio会调用一个名为mtouch的工具,该工具包括托管代码的链接器。 链接器可以删除未使用的代码,以减少应用程序的整体大小。 链接器使用静态分析来确定您的应用程序易于遵循的不同代码路径。 这是一个繁重的过程,因此在编译时会花费一些时间,因为它必须遍历每个程序集的每个细节,以确保不会删除任何可发现的东西。 可以通过从可用选项中选择选项来定制链接器行为。 Xamarin提供的主要三个选项如下所述。 不链接:选择此选项意味着链接步骤将被跳过,并且不会删除任何代码。 这样可以加快构建过程,但会产生较大的IPA。 在构建应用程序时使用它是有意义的,因为作为开发人员,您关心的是减少构建应用程序的时间 仅限于Link Framework SDK:此选项将使您当前的应用程序程序集保持不变,并通过删除应用程序未使用的所有内容来减小Xamarin.iOS(Xamarin.iOS SDK)附带的程序集的大小。 当您将平台定位到iOS设备时,此选项最适合。 此选项与“全部链接”选项的区别在于它无法执行少量优化。 全部链接:设置此模式时,链接程序可以使用其优化的整个集合来尽可能减少应用程序。 它将同时对用户代码执行链接操作,从而修改用户代码,因此,当您的代码使用某种功能(链接程序的静态分析无法检测到)(对于Web服务,反射或序列化)时,它有时可能会中断。 可能需要对代码进行一些更改才能使应用程序链接所有内容。 您可以从此处找到有关链接和链接器安全代码的更多详细信息:https://developer.xamarin.com/guides/ios/advanced_topics/linker/ 支持的体系结构:此选项指定可以在哪些设备上运行应用程序。 根据处理器体系结构,它具有许多选项。 下面列出了每个设备名称。 ARMv7 – iPhone 3GS,4、4s。 […]