Tag: 移动应用开发

加快Xcode构建

随着项目的发展,构建时间可能会成为问题。 但是,您可以对Xcode进行一些调整,这些调整可以减少无需任何额外工作即可完成构建的时间。 增加线程数 : 默认情况下,Xcode通常使用与计算机CPU中相同数量的线程。 但是,通过将线程数增加到默认值以上,可以显着减少构建时间-在某些情况下可以减少30%。 这利用了某些处理器对多线程或仿真其他内核的能力。 请记住,您可能需要尝试确定代码库中并行生成的收益是否递减,然后相应地调整线程数。 启用新的构建系统: Apple的“新构建系统”完全用Swift编写,旨在提高整体性能和依赖性管理。 请注意,虽然新版本系统在Xcode 9+中可用,但是必须在Xcode的Project / Workplace Settings下启用它,因为“ Standard Build”将是默认选项。 或者,可以通过命令行启用“新构建系统”(详细信息在下面链接)。 您可以在此处找到更多详细信息和启用新构建系统的说明: Xcode用于快速Swift构建的新构建系统 调整iOS模拟器: ãApple iOS测试模拟器可让您跨不同的软件和硬件组合进行测试(但仅限于Mac)。 通过使用“物理尺寸”或“像素精确”窗口尺寸,您既可以减少测试的大小,又可以减少完成测试所需的时间。 最终,这些配置更改将使用更少的资源,并有助于在模拟任何人都看不到的像素完美的iPhone阅读器时防止测试变慢。 您可以在此处找到配置说明:调整Xcode iPhone模拟器的比例和大小 使用并行化的构建: 并行构建可以通过构建不同时依赖于彼此的应用程序组件来减少Xcode的构建总时间。 对于可以轻松并行运行的,具有许多较小依赖项的项目,可以节省大量时间。 收益显然取决于代码的编写方式,但是值得测试,因为默认情况下未启用并行化构建。 您可以通过编辑Xcode方案并在方案的构建操作中选中“并行构建”来启用并行构建。 您可以在此处找到有关利用并行化构建的更多详细信息:什么时候应该检查Xcode方案的“并行化构建”? 打开构建时间摘要: 构建时间摘要使您能够报告每个Xcode构建的构建时间。 换句话说,构建时间摘要可以帮助您识别影响构建时间的构建部分,并进一步优化构建顺序以获取整体收益。 构建时间摘要所提供的见解虽然本身并不能解决,但在尝试优化构建时间时,可以在确定工作的优先顺序时很有用。 更大的构建机器: ‍从技术上讲,这不是Xcode的调整,但是较大的构建计算机在尝试加快构建速度时确实产生了巨大的影响。 更高的计算能力仅意味着可以更快地完成流程和构建。 我们的测试表明,从双核Mac mini迁移到12核Mac Pro可以使速度提高3倍,而无需付出任何额外的努力。 当您准备升级或扩展Mac基础架构时,请随时通过MacStadium与我们联系。 ‍其他资源: 当然,这些只是可以用来加快Xcode构建时间的一些建议。 以下资源可以提供有关改善Xcode构建时间的其他信息和建议。 优化Swift代码的编译时间 从iOS Edit-Build-Test周期减少了50%的等待时间 加快Xcode中Swift编译和编译时间的8条技巧 如何使用Xcode 9和iOS 11构建更好的应用程序 ‍ […]

Swift 4.2的新增功能

Swift 4.2是4.1和4.0的主要更新。 该更新主要与改进,代码优化和运行时性能增强有关。 现在,您可以使用Xcode 10.0构建用Swift 4或Swift 3编写的目标。在本文中,我将讨论Swift 4.2中引入的新功能。 让我们一一解决。 取消ImplicitlyUnwrappedOptional (IUO)类型ImplicitlyUnwrappedOptional (IUO) -0054 该建议引入了从Swift中移除ImplicitlyUnwrappedOptional类型,并在声明IUO attribute其替换为IUO attribute 。 您仍将继续使用语法T! 。 但是,使用! 在属性或变量声明的类型末尾,不再表明该声明具有IUO类型。 相反,它表示两件事: 声明具有可选类型。 该声明具有指示其值可能被隐式强制的属性。 (没有人会写或观察该属性,但我们将其称为@_autounwrapped 。)此后,此声明称为IUO声明。 以下是一些示例: // f:()-> Int ?,具有IUO属性 func f()->整数! { 返回 3 } //成功; x1:整数? = 3 令 x1 = f() //成功; x2:整数? = .some(3) 让 x2:诠释? = f() //成功; x3:整数? […]

iOS中的资源包和静态库

如何在静态库中使用图像,Xib和情节提要之类的资源。 默认情况下,这在动态库中很容易实现,但是当涉及静态库时,可能会遇到一些挑战。 在本文中,我希望解释如何在静态库中使用故事板和图像之类的资源。 让我们跳进去。 步骤1:创建静态库 导航到“文件”->“新建”->“项目”,然后选择“ Cocoa Touch静态库”。 让我们给静态库起个名字。 那很简单! 步骤2:设定资源套件 导航到您的库项目,然后选择“添加目标”。 然后导航到macOS并选择Bundle。 命名资源束,我将其命名为Resources🙃 由于我们正在为iOS开发,因此将您的资源包基础SDK设置更改为“最新的iOS…”。 最后,将资源作为目标依赖项添加到您的静态库中。 步骤3:设定资源 在静态库中使用所有适当的配置和链接设置一个简单的ViewController和Storyboard。 为了使Storyboard成为捆绑软件的资源,您要做的就是将它们添加到目标的“复制捆绑软件资源”构建阶段。 现在您的静态库已准备就绪。 步骤4:链接静态库和资源包 通过创建一个简单的单视图应用程序并在viewDidLoad上模态显示“ MyViewController:”,来使用我们的新静态库。 为此,您必须将静态库.xcodeproj拖放到基本应用程序中。 这可能看起来像这样。 然后,您可以通过“链接的框架和库”链接静态库,就像这样。 最后,添加将资源束从静态库链接到基本应用程序。 为此,我们只需要将其从导航器窗格拖到应用程序项目的“ Copy Bundle Resources”阶段即可。 这应该看起来像这样。 第5步:使用它吧! 🎉 将以下代码添加到基本应用程序的视图控制器中,以便可以从适当的资源包中加载Storyboard。 一旦捆绑包被加载,您就可以简单地实例化并呈现它。 小菜一碟吧! 图像呢? 是的,您可以将图像引入静态库,但是必须将图像资产添加到资源包中,然后通过Xib,Storyboard或Bundle加载它。 希望您发现本教程对您有所帮助。 如果您有任何问题,请给我ping通,我很想听听您关于在静态库中使用资源包的想法。 和平✌️

iPad App开发:为什么印度是Wagon Master?

通过Daffodil Software 一项研究表明,到2018年,美国的iPad用户数量预计将达到809亿 。 如此高的数字生动地证明了最近对iPad应用程序开发的呼声越来越高。 苹果应用商店拥有超过一百万个用于平板设备的本地应用。 这肯定是由于企业通过移动设备(以及智能手机和可穿戴设备)接触潜在客户和用户的事实不遗余力。 这些细节使我们很接近iPad应用程序开发外包为何成为当前趋势主题的原因。 在这种情况下,越来越受到关注的是印度成为开发iPad应用程序的首选。 在后面的部分中,我们将找出在苹果iPad应用程序开发方面使企业对印度保持兴趣的理由。 1.印度是技术熟练的海洋 “ 如果我们停止从印度雇用工程师,那么印度将再有一个微软 。”微软联合创始人比尔·盖茨认为。 作为美国科技偶像,IBM雇用的印第安人多于美国人 。 一项研究表明, 美国宇航局的科学家中有 3 6%是印第安人 。 这些事实支持印度人在IT和工程领域的信誉。 凭借绝对的编程技能和逻辑思维,将iPad应用程序开发外包到印度绝对是任何企业的最佳选择。 2.印度的开发者社区庞大 仅次于美国,印度拥有最大的开发商社区。 据信,到2018年,这一数字将达到400万,这将使印度超过美国。 考虑到这一点,苹果公司已经分享了在印度班加罗尔开设新的iOS应用程序设计和开发加速器的计划。 目的是为本地iOS开发人员提供专业支持。 该开发人员社区包括公司雇用的人员和自由职业者。 因此,在印度寻找iPad应用开发公司不再是一项艰巨的任务。 3.印度比美国便宜10倍 这是印度成为外包IT服务的首选的最明显原因之一。 平均而言,如果一个应用需要花7到8周的时间进行开发,则其成本大约为48,000美元,比印度的价格高10倍。 定价模式的巨大差异驱使世界各地的企业和个人雇用印度开发商。 就iPad应用程序的开发成本而言,印度提供了最有效的开发模型,因此,印度被认为是雇用相同程序员的最主要选择。 4.印度的政府政策是灵活的 外包一直是印度政府的主要收入来源,因此它允许100%的外国直接投资(FDI)。 根据2000年IT法案,印度IT入伍,这是该国最大的投资领域。 考虑到这一点,印度可以算是外包IT服务(包括iPad应用程序开发)的最佳场所。 5.改变时区是一个优势 印度时区与其他国家的时区差异很大。 因此,就有机会在预期时间或之前完成并交付项目。 例如:在白天,在美国一天结束前发送给印度的项目需求已完成。 因此,这可以提高生产率,定期报告项目状态,并有时间专注于更相关的任务。 另请阅读: 外包IT服务:一家公司与Freelancer 由于可用选项太多,因此很难在印度列出iPad应用程序开发合作伙伴的难度。 您可以选择知名的应用程序开发公司(例如Daffodil),也可以访问汇总网站(例如Clutch,Good Firms等)做出明智的决定。 最初发布在 appdevelopment.daffodilsw.com上 。

挥舞着2019年:值得关注的iOS应用开发趋势!

iOS永远领先一切。 推出来年的功能或发布一些新闻。 当然,与技术相关的人员和公司绝不应落后于趋势。 来到2019年的iOS趋势中,它有很多事情要做。 问候现代iOS开发人员和软件工程师之后,苹果公司已经在iPhone和iPad中带来了市场上的最新趋势。 虽然软件开发公司已经在尽最大努力从其应用程序开发过程中获益,但我们还是需要一些服务。 如果您是有才华的iOS开发人员之一,并且希望跟上即将到来的移动应用程序趋势,请在此处注意以下几点: 智能家居,智能世界 我们都听说过物联网和机器学习方面的知识,我们非常喜欢将这些应用程序引入标签和手机中。 但是,如果iOS今年本身就将事情摆在桌面上呢? 印度著名的iOS应用开发人员已开始设计用于多用途家庭用途的特定iOS应用。 此外,苹果用户对家用套件非常熟悉,他们不会阻止他们充分利用它。 Siri的语音命令-有关AI的全部内容 苹果在人工智能和机器学习领域几乎占据了主导地位。 出于同样的考虑,Siri已经开始以出色的抓地力和集成的惊人Siri快捷方式来处理不同的语音命令。 这也引起了iOT设备的关注。 苹果已经为iOS开发人员推出了Sirikit,它可以与人声命令无缝协作。 因此,现在Apple用户可以自由使用他们的手机,而无需解锁手机。 借助启用了Sirikit的人工智能的这些巨大好处,Apple用户都很好地欢迎2019年iOS趋势。 此外,快速编程语言的使用增加了 多笔交易 Apple知道随时随地进行快速交易的必要性。 在技​​术时代,世界太小了,而且相互联系,在这种时代中,更好地考虑轻松交易是可以接受的方法。 随着我们越来越接近电子钱包将成为主流的世界,越来越多的企业正在寻找最好的应用程序来协助 仅苹果一家公司就见证了上一年的10亿笔交易,苹果公司的薪酬已经证明了其重要性。 在用户可行性方面,Apple一直处在前一个阶段,而在2019年,Apple具有更高的水平。 ML2工具包 机器学习和人工智能是这个时代蓬勃发展的技术术语。 ML 2工具箱在开发移动应用程序中起着至关重要的作用。 2019年将见证Core ML 2的超强发布,并将增强顶级移动应用程序开发公司的实力。 更快,更安全,更强大。 全新的核心ML 2是通过一流的改进来美化iOS功能及其完整性的工具。 增强安全性 对于iOS应用程序开发,苹果已将应用程序传输安全性强制性化。 Apple的应用程序传输安全性定义了iOS移动应用程序中新的安全级别。 作为iOS应用程序的传统,兼容性和安全性每年都得到前所未有的更新和扩展。

iOS Huddle#4

2016年12月29日星期四 iOS Huddle是我们每月在Black Pixel iOS团队的Slack频道中共享的最佳链接的摘要。 反应式编程 如今,反应性编程似乎风行一时。 如果您对反应式编程感到好奇,我们认为Cocoa with Love的这篇文章很好地介绍了其背后的一些概念。 Matt Gallagher通过以下原则定义了反应式编程: 可变状态的任何“获取器”都会引起问题。 代替使用getter,任何计算,生成,加载或接收的状态值都应立即发送到通道中,并且想要访问这些值的程序的任何部分都必须订阅该通道。 本文就一些简单用例的KVO有多高提出了一些很好的观点,并概述了我们在使用它时遇到的一些典型问题。 与往常一样,反应式编程可能不是万灵药,但它提供了一种不同的方式来了解如何设计应用程序。 的GitHub GitHub现在允许您直接从PR中解决合并冲突。 对于最简单的问题,这是一个实时保护程序。 对于更复杂的问题,万花筒仍然是我们的最爱。 元编程 DRY是一个好概念,通常不那么容易实现。 有些人认为过早地进行DRYing类似于过早的优化。 其他人发誓。 无论您对DRY感觉如何,我们可能都同意的一件事是,样板代码的实现可能是乏味,重复且容易出错的。 我在看您,JSON序列化和NSCoding! 因此,为什么不使用一些不错的元编程和自动代码生成来替换其中的部分或全部。 这就是Sourcery可以为您做的。 您可以查看该崩溃报告吗? 我们中有多少人被问到这个问题并交出了未标记的堆栈跟踪信息? 没什么好玩的。 幸运的是,Apple写了一篇非常不错的技术说明,标题为“了解和分析应用程序崩溃报告”。 快速游乐场 Swift Playgrounds确实可以帮助您快速制作原型并测试想法。 操场也可以用来隔离一些特定的问题。 PlayAlways可让您直接从菜单栏中快速创建Xcode游乐场。 幕后花絮 当Instagram展示其如何重新设计其Feed时,深入介绍实现细节时,您知道您可能会学到一些东西。 Instagram软件工程师Ryan Nystrom的这次演讲并不令人失望。 对于任何好奇或渴望完善自己的工艺的人来说,这都是必看的。 尝试? 与As? 这是Erica Sadun撰写的简短文章,概述了如何混合尝试? 与作为? 和条件绑定可能会带来意想不到的后果。 我的记忆在哪里? 如果像我们一样,您是Mike Ash深入技术博客的狂热读者,您将对他的GOTO 2016会议演讲感到高兴:对Swift内存布局的探索。 请放大此文本 iOS 7为iOS应用程序引入了全新的视觉设计范例。 […]

iOS应用开发服务

计划新的移动应用程序需要大量的时间和金钱投资。 每个企业都梦想着创建一个可以被成千上万的用户下载的应用程序,并在最短的时间内开始实现业务目标。 设计并维护应用程序并不是开玩笑,并不是每个人都可以胜任。 因此,选择正确的iOS应用程序开发服务确实可以给您带来很大的不同。 是的,我们知道以下事实:拥有经过认证的专家级iOS应用开发 公司可以为您提供不仅用户友好的服务,而且还为您提供一种体验。 当然也可以满足您的需求,因为这始终是当务之急。 选择一家设计公司并为您提供对短期和长期都有好处的应用程序开发服务的公司至关重要。 您需要确保的事实是,公司应该履行其职责,从设计应用程序到分发应用程序,并为其客户提供端到端服务。 您是否觉得有必要提高社交媒体的覆盖率? 您是否想在客户中树立品牌知名度? 或者,您只想获取有关对您的收入产生重大影响的主要客户的更多信息。 这就是iOS应用程序开发服务平台的所在。它们为您提供专业的员工和专家,他们会严格工作以设计具有卓越功能的高级应用程序,从而使您能够毫无困难地满足您的需求。 他们确保高质量的应用程序能够带来“爆炸式”的结果,并为企业带来高于平均水平的回报以及更好的ROI。 那些不熟悉的人代表投资回报。 众所周知,i-phone位于技术中心的中心。 我们见过的最创新的技术之一,以其卓越的应用程序而闻名,这一卓越的应用程序使我们所有人都对这一惊人的发明的运作方式着迷。 因此,iOS应用程序开发服务平台为企业提供了无与伦比的功能。 为了使任何应用程序开发服务成功,他们需要完全了解系统。 他们配备了完全了解i-phone技术的人员。 这使他们能够提供强大,可扩展和定制的应用程序。 此外,它们为广泛的企业和企业提供应用程序。 它们为寻求发展和扩大客户群的企业提供了推动力。 IOS应用程序开发服务平台为他们的客户提供可靠,专用的服务。 一些iOS应用程序开发服务还为企业提供了有价值的咨询服务。 您可能会想这样的服务有什么用? 好! 通过此咨询服务,您可以与许多专家交谈,讨论您的业务需求以及适合您需求的应用程序。 最初发布于:www.origamistudios.us

2019年构建出色iPhone应用程序的分步过程

在本文中,您将学习MindSea团队逐步实现iPhone应用程序的过程。 没错-我们正在拉开窗帘! 这是我们今天将指导您的三步过程: 步骤1:开始制定行动应用程式策略 第2步:规划应用的UX(在编写代码之前) 步骤3:建立产品路线图 但是在我们开始深入研究之前,我们必须回答一个问题: 你为什么要听我们怎么说? 在过去的十年中,我们一直在为B2B和B2C品牌(SaaS公司,新闻媒体等)构建移动应用程序。 我们构建的应用已被数百万用户下载。 我们已经与Proposify等SaaS公司合作: 像Adam这样的B2C品牌可以帮助: 和国家邮政等新闻媒体: 我们所有移动应用程序项目中的一个常数是什么? 我们的三步过程。 我们使用称为移动应用程序蓝图的分步过程来构建这些应用程序以及许多其他成功的iPhone应用程序。 因此,让我们开始吧! 步骤1:开始制定行动应用程式策略 如果要构建成功的移动应用程序,则必须从战略入手。 在实际编写一行代码或构建第一个线框之前,您需要知道您要构建的内容以及原因。 在此步骤中,需要重点注意三点: 为您的移动应用建立主要目标 在进入开发过程之前,请先退后一步,确定您实际上在尝试通过移动应用程序实现的目标。 如果您一开始没有设定目标,那么剩下的过程将毫无目标-您将不知道自己是否朝着正确的方向前进。 确定您的目标受众-并且要具体! 产品市场契合度很高。 您以前听过这句话: “如果您想成为所有人的一切,那么您将一无所有。” 在计划移动应用程序时,请确保您不打算针对大众。 定义您的受众群体,不要太宽泛。 但是也不要在另一个方向上走得太远。 如果您定位的受众群体太小,从长远来看,您不会看到正的投资回报率。 只创造值得创造的东西 有想法是件好事—毕竟,这就是引导您构建应用程序的原因。 但… 太多的想法(和太多的功能)可能会使您拥有一个移动应用程序,该应用程序执行很多操作,而它们却做得很差。 如何避免这种情况? 专注于需求。 观众需要从您的移动应用程序中获得什么? 它应该提供什么功能? 它应该解决什么问题? 必须包括哪些功能? 立即执行工作,以避免以后必须重建整个应用程序时进行两倍的工作。 请记住:第一次迭代不一定是唯一的迭代,因此不要尝试将所有内容都放入您的第一次构建中。 第2步:规划应用的UX(在编写代码之前) 现在您知道了您的目标是什么,需要包括哪些功能,下一步就是编写代码,对吗? 没那么快。 在 编写一行代码之前…… …您需要确定应用程序的工作方式以及用户的旅程。 然后,您必须进行全部测试。 这是我们的方法: 逐个屏幕概述用户旅程 构建移动应用程序最重要的步骤之一是: 规划人们实际使用该应用程序的方式。 […]

React Native和OneSignal第1部分(iOS)

对于React Native,使用One Signal api进行远程通知非常轻松且舒适。 有非常简单的安装和配置步骤。 让我们开始; 创建一个React Native项目 $ react-native init项目 安装一个信号包并链接到项目 $ npm install-保存react-native-onesignal $ react-native链接react-native-onesignal 如果您没有,请注册一个信号帐户。 在XCode中打开您的项目,然后转到“ 功能”标签,然后将“ 推送通知 ”设置为“开” 再次在“ 功能”选项卡中,找到“ 后台模式”并将其设置为“开”,然后选中“ 远程通知” iOS推送证书 访问此页面并使用“自动配置工具”轻松创建证书。 下载.p12文件。 从OneSignal的“所有应用程序”页面中选择您的应用程序,然后转到“应用程序设置”,然后按Apple iOS设置右侧的配置。 上载之前导出的.p12文件 从’react’导入React,{组件}; 从’react-native-onesignal’导入OneSignal; //从节点模块导入包导出默认类App扩展了组件{constructor(properties){ 超级(属性); OneSignal.init(“ YOUR_ONESIGNAL_APPID”); OneSignal.addEventListener(’received’,this.onReceived); OneSignal.addEventListener(’opened’,this.onOpened); OneSignal.addEventListener(’ids’,this.onIds); } componentWillUnmount(){ OneSignal.removeEventListener(’received’,this.onReceived); OneSignal.removeEventListener(’opened’,this.onOpened); OneSignal.removeEventListener(’ids’,this.onIds); } onReceived(通知){ console.log(“收到通知:”,通知); } onOpened(openResult){ console.log(’Message:’,openResult.notification.payload.body); console.log(’Data:’,openResult.notification.payload.additionalData); console.log(’isActive:’,openResult.notification.isAppInFocus); console.log(’openResult:’,openResult); […]

编译速度提高60%:强制Xcode在Bitrise上使用缓存!

让我们迈出新一步,使Xcode的构建速度提高60%! 🏎 Xcode在派生数据文件夹(〜/ Library / Developer / Xcode / DerivedData)中存储和使用所有与构建相关的缓存文件和杂项数据,除非您运行导出命令。 但是缓存此路径并不是我们唯一要做的事情,因为Xcode缓存取决于项目结构及其所有属性,例如文件修改时间,内容等。 当您在Bitrise上克隆存储库以进行构建时,所有文件的修改时间都将设置为当前时间(git clone的时间),因此,即使大多数文件都已被修改 ,所有新构建的所有文件都将被视为已更改 。内容在构建之间完全没有变化。 为了避免更改文件修改时间,我们创建了一个名为“ 递归缓存缓存” 的新步骤 。 它有2个输入: 目录的路径(默认情况下:“ $ BITRISE_SOURCE_DIR”) 时间(默认为:“ 2017–09–01T15:00:00 + 00:00”)输入字段 此步骤将在给定目录下设置所有文件修改时间,因此在您随后开始的构建中,文件的修改时间将相同。 如果要使用适当的Xcode缓存,则必须设置两个步骤: 递归缓存缓存步骤-保留两次构建之间的项目文件修改时间。 这应该在您的Xcode单元测试步骤之前进行 Cache:Pull,Cache:Push —缓存派生的数据路径(将以下路径同时放入Cache:Push步骤的缓存路径,并忽略路径输入:〜/ Library / Developer / Xcode / DerivedData)。 您如何确认缓存是否按预期工作? 缓存之前,日志如下所示: 如果缓存正在工作,它将是这样的: === BUILD TARGET ios-simple-objc OF PROJECT ios-simple-objc WITH CONFIGURATION Debug === Check […]