Tag: iOS App开发

解决React Native项目中的CocoaPods问题

如果您有以下问题, “我将React-Native更新到最新版本,而CocoaPods无法解决依赖关系…” “ CocoaPods找不到Pod’Folly’的兼容版本……” “`Pod install`不会安装所有依赖项,无法安装GLog …” 那么你来对地方了。 在此博客中,我将介绍一些步骤/答案/方法/方法来解决与React Native项目中的CocoaPods有关的问题。 开始吧… 1.配置CocoaPods依赖关系 确保已阅读有关配置CocoaPods依赖项的官方文档。 与现有应用程序集成·React Native 从头开始新的移动应用程序时,React Native很棒。 但是,它对于添加… facebook.github.io 也很好。 从官方文档开始总是很好。 特别是与与第三方依赖项(例如GLog和Folly)有关的错误,重要的是您的podspec正确。 因此,请确保将您的Podfile与官方文档中指定的Podfile进行比较。 2.更新pod存储库 您的本地Pod存储库可能已过时。 什么?!! 因此,CocoaPod维护spec-repo的本地克隆。 此仓库基本上是所有可用豆荚和版本的列表。 它位于〜/ .cocoapods / repos中。 因此,请确保在尝试任何其他操作之前先更新此存储库。 您可以通过运行以下命令来更新它, $ pod repo更新 官方文档在这里 。 3.验证Xcode的活动dev目录路径 开发人员通常会使用多个版本的Xcode,因此他们不得不在不同版本之间不断跳来跳去,在此过程中,他们忘记了更改Xcode的活动开发人员目录。 建造大型物件时,可以忘记小型物件。 对? ……不! 那么如何解决呢? 首先通过运行检查Xcode的活动开发人员目录, xcode选择-p 这应该打印活动的dev目录路径/Applications/Xcode.app/Contents/Developer 。 如果您以不同的方式命名您的Xcode应用程序,则可能会有所不同,但理想情况下应该是这个。 xcode-select控制xcrun,xcodebuild,cc和其他Xcode和BSD开发工具使用的开发人员目录的位置。 无论如何,如果您选择的xcode版本与此命令显示的版本不同,则应通过运行来切换活动的dev目录, sudo xcode-select -s […]

在React Native中处理来自OneSignal的远程推送通知

两周前,我发表了一篇文章,介绍了通过OneSignal为React Native(iOS和Android)设置推送通知所必须采取的每个步骤。 但是帖子在交付时就停止了-如果您想在用户通过推送通知打开应用程序时为他们做些什么呢? 如果他们在应用程序中打开了推送通知怎么办? 这就是我今天打算讲的内容。 在继续本文之前,请确保已为您的平台设置了OneSignal。 访问通知 在我们实际上无法对通知执行任何操作之前,我们需要访问该通知的内容。 使用react-native-onesignal时 我们将利用已打开的事件,我们可以使用OneSignal.addEventListener进行监听 。 确保您也删除了监听器! 现在,我们对数据的外观有了一个了解。 让我们写一些代码。 我们将使用react-native-root-toast 在应用中显示通知。 这是计划: 不活跃的经历 那么,如果用户在我们的应用程序处于后台时单击通知,该怎么办? 我将继续进行,好像我们使用的是react-native-router-flux (我有一个有关如何使用它的教程) 。 因此,回顾我们的规范,我们知道在这种情况下,我们不会向用户显示消息(他们已经从通知中看到了该消息),但是我们确实希望将它们带到适当的房间。 您会看到,访问我们从推送通知传递的自定义数据非常简单,从而为用户提供自定义体验并节省时间。

我们时代的问题

“ 我想启动一个网站及其移动伴侣应用程序。 该应用程序将在iOS和Android上均可用。 我听说React Native非常适合我。 真的吗? ”🙍 有两种类型的用户。 那些使用计算机访问自己喜欢的网站的人,以及越来越多的喜欢使用这些网站的移动应用程序对应对象的人。 Facebook报告称,其中74%的用户浏览了全球最大的移动社交网络 在2017年。 考虑到这一点,作为产品的创建者/经理,您确实希望将其交付给最大的受众的机会很高:对于这两种类型的用户。 但是更糟糕的是 ,移动端本身可以分为两个更具竞争性的子类型。 即苹果和安卓 。 问题:用于实现网站 , iOS应用程序的编程语言 或Android应用程序 本质上彼此不同。 那么,这具体意味着什么? 好吧,如果您在一个平台上实施产品,该代码将不会“移植”到其他两个平台中的任何一个:大多数代码都将不得不重新编写。 换句话说,这意味着您的产品成本(几乎)必须乘以您希望支持的平台数量… 在大多数西方国家中,中型移动应用的平均价格在20万至50万美元之间,而网站的平均价格在5万至25万美元之间,您可能会怀疑: “好吧,但是,我是否可以不统一那些语言,并且对所有平台仅实施一次我的应用程序? ”💁 反应 是Facebook开发的开源框架。 它于2013年推出,允许开发人员基于可重用的可视组件(例如,包含聊天中文本内容和时间戳的自定义蓝色Message气泡),使用JavaScript创建高级的Web用户界面。 它可以处理随时间变化的数据,而无需重新加载页面。 React Native也由Facebook开发。 两年后宣布,它扩展并把其哥哥React的力量带入了移动世界。 您将能够使用JavaScript编写您的移动应用程序。 您操作的元素将iOS和Android本机可关联元素包装到一个单独的React Native对象中,从而暴露出一个统一的API(例如,React Native scrollView元素桥接到iOS的UIScrollView和Android的ListView中)。 因为React Native建立在React之上,并且因为它们都依赖于相同的语言,所以这使他们有可能在诸如业务逻辑和后端集成等各种领域中进行大量协作。 这意味着,除了上述React Native提供的iOS和Android之间的统一之外,现在还可以在Web和Mobile之间建立桥梁。 框架的标题“ 学习一次,随处写 ”是一个 在Java的“一次编写,随处运行”上玩,现在变得更有意义:一旦您了解JavaScript和React工具集,就可以在任何类型的平台上实现所需的任何东西! “ 好的,React Native为我提供了一种统一的语言,但是您仍然告诉我,我需要编写3种不同的代码库吗? 有什么意义? ” ‍🤷‍ 好吧,React Native […]

在没有任何SDK的情况下在您的应用中使用Google Analytics(分析)

如果您像我一样,每当您“被迫”向您的应用添加第三方灾难二进制代码时,它都会给您带来沉重的负担。 当客户想要添加“分析”时,我通常会遇到这类库。 我遇到最多的是Google Analytics(分析)。 这是一个相对简单易用的好工具。 它已经存在了几乎永远,因此被广泛传播并广为人知。 不幸的是,就像大多数其他针对iOS的分析解决方案一样,闭源二进制代码😱。 这有几个原因使我误解了。 我无法查看代码。 我真的不喜欢没有选择了解我构建的应用程序中包含的代码的选项。 当代码旨在跟踪,衡量和报告用户行为时,甚至更是如此。 这些事情通常以我认为“令人毛骨悚然”的方式完成。 我们都记得Twitter是如何使用canOpenURL找出用户在iPhone😒上安装了哪些应用程序的。 我非常相信销售广告的每个人(包括Google)都采取类似或“爬行”的策略。 las,这是您使用广告销售公司的分析解决方案时必须面对的问题。 现在大部分 Google Analytics(分析)在后台使用了称为Google Measurement Protocol的工具。 这是一个完全开放且有文档证明的API,任何人都可以向其发送请求。 它使我们能够建立自己的报告机制,以将数据提供给Google Analytics(分析)👍。 我已经围绕该API构建了一个不错的小包装,使将基本的Google Analytics(分析)轻松运送到我为客户构建的所有应用中。 您可以根据需要使用它,也可以简单地构建自己的🤓。 只花了约150行Swift代码。 使用我的GoogleReporter实现,可以轻松跟踪事件,屏幕浏览和异常。 跟踪屏幕视图的方法如下: 类BeerViewController:UIViewController { 覆盖func viewDidAppear(_动画:布尔){ super.viewDidAppear(动画) GoogleReporter.shared.screenView(“啤酒”) } } 或一个简单的事件 func didCompleteSignUp(){ GoogleReporter.shared .event(“ Authentication”,操作:“ Signed Up”) } 在开始之前,您需要做的就是为跟踪器配置添加新应用程序时Google Analytics(分析)吐出的属性ID。 GoogleReporter.shared.configure(withTrackerId:“ UA-XXXXX-XX”) 如果您正在考虑向应用程序添加Google Analytics(分析)支持,则应在GitHub上查看GoogleReporter。

[核心动画]您对CAEmitterLayer有什么了解?

CAEmitterLayer是一种高性能的粒子引擎,旨在创建诸如火,雨,烟,雪等的粒子动画。 CAEmitterLayer是用于定义粒子效果的CAEmitterCell实例集合的容器。 您可以创建一个或多个CAEmitterCell对象作为模板 对于不同的粒子类型。 CAEmitterLayer负责根据这些模板实例化粒子流。 发射极层和电池特性如何? CAEmitterLayer属性 CAEmitterLayer的属性控制粒子系统的位置和形状。 在birthRate上指定的属性诸如birthRate , lifetime和velocity重复值。 它们作为乘数工作。 您可以使用单个值来加快或增加整个粒子系统。 其他重要特性: renderMode :定义如何将粒子单元渲染到图层中。 preservesDepth :定义3D粒子系统是扁平化为单层(默认情况下)还是可以与其容器层的3D空间中的其他层融合。 您可以在此处检查CAEmitterLayer的许多其他可配置属性。 CAEmitterCell属性 CAEmitterCell的属性分为三类: 粒子特定属性的起始值 。 例如, color属性定义将与contents图像中的颜色组合的混合颜色。 特定属性的值在粒子之间变化的范围。 例如,如果将emissionRange属性设置为2π,则可以在360度半径内的任何方向上发射粒子。 如果指定较小的值,则可以为粒子创建圆锥形漏斗。 特定值随时间的变化 。 例如,如果将alphaSpeed设置为-0.1,则粒子的alpha值将每秒减少0.1。 当粒子从发射器离开时,它还会为粒子创建淡入淡出效果。 最重要的属性是: CGImage :分配一个CGImage用作图像。 color :设置要应用于每个粒子的颜色。 alphaSpeed :设置在单元的整个生命周期内,粒子淡出或淡入(以秒为单位)的速度。 birthRate :设置birthRate要创建多少个粒子。 lifetime :设置每个粒子应生存的时间(以秒为单位)。 velocity :设置每个粒子的基本移动速度。 velocityRange :设置可改变像元速度的量。 scale :设置应有多大的粒子(全尺寸为1.0)。 scaleRange :设置可改变单元格规模的数量。 spin :设置应用于单元的旋转速度。 spinRange :设置单元格旋转的数量。 […]

对建立我们的初创企业MVP的早期见解

这篇文章的最初重点是详细介绍我们在构建Availo iOS App初始版本时采用的过程。 这是一个相当普遍的话题,因此我想将其重点放在我们在较浅的文章中采用的实践。 经验告诉我们,在任何类型的开发项目中进行少量规划都会大有帮助,在开发初始产品版本或MVP时更是如此。 如果一切都按计划进行,那么您的第一个版本将随着功能的增长而发展。 考虑到这一点,重要的是要事先计划-没有人可以安全地押注其产品将在几英里之外的地方,因此,从一开始就考虑这些演变是很重要的。 在Availo,我们的开发团队来自在各种规模的组织中从事多种类型项目的多年经验,以下只是我们用于创建初始版本的过程的一小部分见解。 大辩论 从Availo的角度来看,我们始终会使用IOS进行初始版本发布-我们的创建团队由IOS开发人员组成,众所周知,IOS开发可以在Android和Android中更快地进行开发,这将大大减少我们针对发行版的测试过程。 在最终发布的前3到6个月内,Android才是我们的发展路线,所以请不要担心! 管理期望 就像任何好的项目计划一样,团队的想法也可能是巨大的,路线图很长,并且对潜在用户的期望不断提高,因此,保持一切正常并专注于关键命题功能是根本。 在早期的团队会议中,我们讨论并强调了我们可以看到的关键领域,涉及到各个业务领域,而对于开发方面,向我们展示潜在合作伙伴和投资者的进展非常重要。 这些人对顶级功能和您的路线图感兴趣-他们对早期的细节不感兴趣-可以在MVP之后建立类似的领域。 当您在项目中设置发布的关键日期时,找到功能丰富和无错误之间的平衡非常重要。 设定焦点 对于Availo,我们能够将应用程序划分为两个关键区域,即用户个人资料和消息传递。 即将出现一些重大更新,但这始终是Availo早期的重点-向自由职业者展示并允许用户尽可能轻松,轻松地开始交流。 现在,对于未经训练的人来说,这似乎是一个很小的功能集,在只有2个权利之后? 但是请稍等…一旦我们中断了用户旅程,我们需要满足许多情况。 这就是发挥敏捷开发方法之美的地方-在sprint中工作并确定关键的用户故事/旅程。 目前,我们还没有一个功能全面的消息传递平台可与WhatsApp和Facebook Messenger等竞争,我们可以在其中发送gif,视频和群聊等,这些都是我们可以轻松传递给将来版本的详细信息。 设置项目 作为项目的唯一开发者有时可能会很棒,尤其是在像我们这样的地方开始的时候,通常它会由一个在每个领域都有专家的小团队组成(例如,设计,管理,开发),但是有时候我们每个人都需要一点在我们的生活中进行互动,并使之尽可能地无痛,这对于灵魂来说是非常重要的。 编码标准,文件夹结构,创作证书和服务器选择都是您进行决策所需要的所有方面。 任何一支优秀的团队,无论大小,都会有一套清晰的编码风格指南(我们都看过“ Spaces or Tabs”辩论情节)。 编码标准使团队知道如何以一种结构来编写其代码,该结构可确保以一致的方式对大型项目进行编码,这种方式更易于理解,还使新开发人员可以看到如何编写代码库。 如果一切按计划进行,那么您的团队将需要发展,没有人喜欢脾气暴躁的开发人员。 依赖管理 在Availo,我们非常喜欢Cocoapods的依赖性管理。 对于尚未签出的任何iOS开发人员,请务必查看。 CocoaPods由EloyDurán在2011年创建,旨在解决依赖关系并下载所需的源代码。 从最高级别的角度来看,这是管理您可能在应用程序中使用的任何第三方库的一种非常快捷简便的方法-从内部管理的角度来看,根据需要轻松添加,删除和更新库它们在提交中没有git子模块的痕迹。 什么……没有情节提要? 经过数年的应用开发,我们的团队对有无故事板的应用构建方式有了很好的了解。 故事板非常适合通过自动布局可视化应用程序的结构和视图的布局。 使用Availo,我们选择使用完全基于代码的界面-没有Storyboard或Xib,都采用手工编码,尽管我们确实使用了第三方软件(例如PaintCode和QuartzCode)来实现复杂的动画和视觉效果。 随着应用程序变得越来越复杂,以及视觉效果和交互的要求变得越来越复杂,情节提要很容易变成一团糟的视图和话题,仅提供概述布局的指示。 每个人在职业生涯的某个时候都必须处理情节提要合并冲突,将节或视图拆分为情节提要是与多个开发人员合作时解决此问题的最佳方法,但如果不迅速向开发人员表示赞同,这不是防弹方案。他们正在处理应用程序的哪个区域。 随着iOS 8中的Adaptive Layout和Size类的引入,许多开发人员开始采用Storyboard概念,但感觉就像我们现在返回了完整周期一样。最终,开发人员在编码时可以更有效地工作。 检查深度并在“界面”构建器中查找隐藏的视图,因为有人在可见框上打了勾,这只是其中之一,我们都希望花更少的时间挠头。 这里还有一些其他值得考虑的问题,对不起您的大脑…… •如果您使用它进行编码,则与切换和退出Interface Builder相比,您将更快地学习Swift / Obj-C。 •您无法像在代码中那样“查找并替换” •如果您只需要学习代码,则将项目移植到Android会容易得多 […]

线框和足球比赛

至少可以说,过去一周对我们许多人来说都很忙。 天气起伏不定,发生了超级碗-给了我们很多有趣但又戏剧性的广告-流感一直在敲响每个人的前门。 尽管大多数人本周都忙于躲避流感,但我们在应用程序Best Best上却取得了进展。 上周一我们进行了一次演讲,向全班展示了我们的研究结果和未来计划。 演示进行得很顺利,但是在进行任何繁重的工作之前,我们需要弄清楚应用程序的外观。 在本周的头脑风暴会议中,我们深入探讨了线框,功能,徽标和配色方案。 有些人可能不认为应用程序的配色方案会成为其开发的重点,但人们却认为应该将其置于应用程序的颜色中。 人们希望他们的应用能够正常工作,是的,但是他们需要在运行时保持美观。 配色方案也会影响应用程序的可用性。 当应用中充满了相互矛盾的鲜艳色彩时,重要的按钮就很难从其余布局中脱颖而出。 我们考虑了一些颜色,但还没有完全落在理想的调色板上。 对于我们来说,徽标非常重要。 这是我们议程中的优先事项。 没有拱门,麦当劳会怎样? 苹果没有苹果? 我们希望徽标贴在人们的记忆中。 徽标必须简单但可以识别。 我们考虑了以前卫的方式展示我们的品牌的不同方法,并且我们提出了一个想法,该想法将很好地为应用程序的整体设计服务。 我们对应用程序图标的外观也有一个大致的了解,我们期待对其进行调整。 我们讨论了很多有关线框以及如何使其易于使用的内容。 用户无休止的标签和列表很容易使他们分心和沮丧。 我们在手机上下载了一些杂货店应用程序,以了解某些功能的工作原理,并查看其中哪些功能令人讨厌。 设计这种线框的方法有无数种,因此我们的大脑每分钟工作一百万英里。 我们计划实现的功能将直接影响线框的工作方式。 我们知道我们想要的大多数功能,但是我们仍然要解决几个功能的问题。 我们的目标是使Best By简单易行,但要提供足够的功能,以使它们不会淹没基本功能-跟踪食物的有效期。 我们希望这些功能为该基本功能提供支持; 这些功能对于该基本功能应该是自然的。 有点像树枝从树的身体伸出来。

iOS移动应用程序安全性-第一部分:iOS移动开发人员的最佳实践。

根据OWASP Top 10,每个ios开发人员都必须注意代码安全性,数据存储安全性,数据通信安全性等。 由于iOS移动应用程序不像其他移动平台(如Android)和任何混合移动开发(在其清单,清单,JavaScript注入等第一阶段非常开放)那样脆弱,因此iOS仍然存在其自身的问题。 确保正确地保护代码,逻辑,数据及其通信是每个组织/开发人员的责任,以防止任何入侵者篡改和理解代码。 为谨慎起见,在开发人员端,以下是初步威胁的一些清单,每个ios开发人员都应注意这些清单。 那些是: 1.屏幕录制和屏幕捕获 风险: 1.攻击者可以记录登录名/任何敏感屏幕,并捕获输入的用户名和密码。 2.在像应用程序一样的视频流中,任何付费视频内容都可以流式传输和记录。 这些风险将导致银行应用程序中的重大泄漏,如果执行屏幕截图或屏幕记录,则安全交易细节将受到损害。 OWASP:不安全身份验证 固定: 观察userDidTakeScreenshotNotification并使用UIScreen.isCaptured()限制用户继续进行操作。 示例代码: NotificationCenter.default.addObserver(forName:.UIApplicationUserDidTakeScreenshot,object:nil,queue:OperationQueue.main){ 打印(“截屏!!)} 要检查是否在ios 11及更高版本上正在发生屏幕录像: -(BOOL)isRecording { 对于(UIScreen.screens中的UIScreen *屏幕){ 如果([屏幕responseToSelector:@selector(isCaptured)]){ // iOS 11+具有isCaptured方法。 如果([screen performSelector:@selector(isCaptured)]){ 返回是; //屏幕捕获处于活动状态 }否则,如果(screen.mirroredScreen){ 返回是; //镜像处于活动状态 } }其他{ // 11.0以下的iOS版本 如果(screen.mirroredScreen) 返回是; } } 返回否; } 2. KeyChain数据保护 风险: 使用易受攻击的访问性选项添加到KeyChain的钥匙串项可能会暴露于JailBroken设备上的其他应用程序或具有物理访问权的攻击者。 通常,开发人员可以选择以下操作: kSecAttrAccessibleWhenUnlocked, kSecAttrAccessibleAfterFirstUnlock, kSecAttrAccessibleAlways, kSecAttrAccessibleWhenUnlockedThisDeviceOnly, kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly, […]

4种在iOS上改善应用下载的绝佳方法

尽管其他平台提供了更便宜,更开放的市场,但苹果的iOS AppStore仍然保持了流行。 这背后的主要原因是其旗舰iPhone的普及。 苹果市场上有超过300万的移动应用程序,因此获得更多下载是企业主唯一担心的事情。 在本文中,我们讲述了获得更多下载并提高iOS应用排名的秘密! 免费下载-应用内购买 多年来,用户决定通过iOS设备上的“免费应用程序”下载“付费应用程序”已经发生了很大变化。 如今,为了加快应用程序的下载,提供免费下载而不是付费是更好的选择。 以折扣价提供应用程序也是一个不错的选择,尤其是在圣诞节等节日期间。 一种通过应用程序获利的方法是提供应用程序内购买功能,以提高客户的体验。 许多受欢迎的游戏以及商业应用程序都使用此策略在iOS上获得更多应用程序下载。 应用商店优化(ASO) 涉及iOS应用开发的主要步骤是确保移动应用针对市场进行了优化。 这不仅有助于使应用程序进入封闭平台AppStore中,而且对其进行优化还可以提高受欢迎程度和下载量。 新泽西州的iOS应用开发公司应优化本地业务应用,以使其在技术上能够投入使用时就可以使用。 一个经过优化的产品还具有通过广告等赚钱的更好方法。 提升应用排名 一旦开发了移动应用程序,则取决于营销团队来帮助获得所需的宣传。 这可以通过自然的方式以及付费的方式来完成,您可以从影响者那里购买应用程序评论。 通过提高排名,可以在市场的主屏幕上显示广告,从而提高下载次数。 始终检查说明和等级 描述是人们在搜索要下载的正确应用程序时首先阅读的内容。 因此,这是一个关键因素,可以成为用户选择下载特定应用程序而不是竞争对手的原因的原因。 插入相关关键字,流行短语也将有助于在市场上排名。 同样,也应考虑评级,因为它是许多用户的决定因素。 良好的评分(4或5星)将间接促进应用营销,并在行业类别中获得提升。 两分钟的时间:以上几点是改善iOS应用下载并从中获利的最佳方法。

如何在Mac上安装ZSH

本简短教程适用于初学者,他们正在学习什么是终端以及如何在应用程序开发过程中使用它。 – 向下滚动以找到ZSH安装的“分步说明” 。 让我们从术语开始。 默认情况下,终端使用Bash shell。 名为ZSH的外壳是终端的替代外壳。 Shell是您与之交互的命令行界面。 Shell的示例是BASH,CSH和ZSH。 Shell接受手动输入的命令,并告诉操作系统执行它们。 在此处了解有关终端,外壳和控制台的更多信息。 如果您是开发人员,则ZSH是一个不错的选择🙂由于它具有自动完成,更好的UX,简单的Git管理和许多其他功能,因此具有强大的功能。 有关安装ZSH的分步说明 打开terminal.app 注意:在您的发现者的聚光灯或搜索字段中找到它。 安装自制软件(简化安装的软件包管理软件)。 为此,请复制以下命令: /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 并将其粘贴到您的终端中,然后按回车键。 然后,它将要求您键入Mac用户帐户的密码。 输入密码后,按返回键。 重要说明:请不要担心如果在键入时看不到输入的密码,则出于安全原因,终端会将其隐藏。 然后等到看到有关安装的成功消息。 注意:您会发现自制软件对于安装许多开发工具非常有用。 3.通过在终端中运行(复制>粘贴>按回车键)此命令来安装ZSH: brew install zsh zsh-completions 等到看到成功消息。 4.在zsh之上安装Oh My Zsh以获得其他功能: curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh 5.通过运行以下命令将您的shell从Bash切换到ZSH: chsh -s / bin / zsh 6.退出终端并重新打开,以重新启动终端。 您应该在终端应用程序的顶部栏中看到zsh单词: 7.您完成了:)享受!