Tag: JavaScript

未来就在眼前– iOS和异步开发

在编程中,我们经常使用异步操作。 这可能包括诸如网络,文件系统,数据库,UI,长时间运行的任务或任何其他I / O事件之类的东西。 在iOS中,我们有许多机制可以处理此问题,包括GCD,NSOperation,NSNotifications,委托和回调。 期货是一种在iOS上不那么常见的结构,但已经很成熟,在其他语言(例如JavaScript和Scala)中更常见。 也称为诺言,延期,任务或异步; 该技术允许您以同步方式处理异步值,将连续传递样式的调用切换为直接样式。 通过使用期货,您的程序将更容易推理,因为不会有太多的嵌套调用。 但是未来到底是什么? 未来是对尚不可用的值的表示。 当您与未来合作时,您将不知道该值当前是否可用。 但是,您可以使用该值,就好像它可用一样。 价值一经获得,将来便会处理您的指示。 期货框架 如果您想在iOS应用中开始使用期货,则可以选择以下两种不同的第三方库: – BrightFutures – PromiseKit – FutureKit – 递延 – 螺栓 根据您选择的库,您将有不同的设计选择可以使用。 例如,Big Nerd Ranch的Deferred库的灵感来自OCaml的Deferreds。 这意味着将来/延迟值不会说明异步操作是否失败。 要表示失败,您需要通过返回Result类型或类似的关联枚举来将其表示为值的一部分。 BrightFutures遵循Scala的承诺和未来,因此有一个隐含的理解,即每个未来都可能失败。 FutureKit和Bolts还包含“已取消”状态,该状态表示用户何时取消了将来/任务并且不再关心结果。 这些库可能具有不同的方法和设计目标。 但是,它们都解决了提供一个接口来表示异步结果并使用异步结果的相同问题。 它们还处理共同的任务,例如一起对期货进行排序,并行运行期货以及在特定线程上处理结果。 因此,让我们深入。 只是基础 使用期货的最基本方法是设置完成处理程序。 只要值可用,就可以简单地执行操作。 要设置处理程序,您可以在将来通过调用onSuccess (BrightFutures / FutureKit), 在 (Deferred), 然后 (PromiseKit)或continueOnSuccessWith (Bolts)来设置延续功能。 这些框架中的大多数还允许您通过调用onFailure (BrightFutures), onError (FutureKit)或catch (PromiseKit)来附加错误处理程序。 […]

我用NativeScript构建了东西-第3部分

OAuth + NativeScript 这是第三部分系列的最后一部分。 在第1部分中,我将基于NativeScript的POV作为解决方案。 在第2部分中,我讨论了使用Angular + NativeScript进行更改检测。 在最后一部分中,我将介绍如何将OAuth工作流程集成到NativeScript应用程序中。 以下内容假设您对OAuth 2.0有所了解。 OAuth 在NativeScript中使用OAuth提供了一些障碍。 特别是如果您使用Google作为提供商。 过去(2-3年前),您可以在本机应用程序中执行OAuth,只需将Web视图嵌入到您的应用程序中,允许用户浏览工作流程并查看弹出的code或token的URL。另一端。 如今,Google已消除了该集成渠道(有关安全性,可用性…… yada yada yada😜),您需要使用真正的OS浏览器来引导用户完成工作流程。 这使其更加复杂。 现在,您不仅要查看嵌入式浏览器的URL,还必须了解操作系统将自定义协议的链接路由到您的应用程序的能力。 所以现在看起来像这样 使用callbackURL(例如customprotocol://google/oauth浏览器打开到OAuth工作流程 用户通过工作流程 在auth工作流程结束时,浏览器将重定向到customprotocol://google/oauth?code=blahblah 发生这种情况时,操作系统将拦截该链接并将事件路由到您的应用程序。 因此,您需要侦听它们,拉出code参数,然后从OAuth提供程序请求令牌。 对于iOS,这表示为: 提供一个SFSafariViewController (上面的步骤1)。 通过实现侦听UIApplicationDelegate (上面的步骤4)中的链接: -(布尔)应用程序:(UIApplication *)app openURL:(NSURL *)url 选项:(NSDictionary *)选项 最后,对于NativeScript,您需要: SFSafariViewController : … 让safariVC = new SFSafariViewController({URL:url}); page.ios.presentViewControllerAnimatedCompletion(safariVC,true,null); 实施自定义应用程序委托: 导出类AppDelegate扩展了UIResponder实现 UIApplicationDelegate { 公共静态ObjCProtocols = [UIApplicationDelegate]; applicationOpenURLOptions?(app:UIApplication,url:NSURL, […]

第2天。选择正确的学习资源

在本系列的第一部分-第1天-要学习的编程语言-我们讨论了着重于*在*之前*构建有用的东西,甚至考虑学习任何编程语言。 如果您在一天结束之前完成了动作练习,则应该列出可以构建所需产品的技术列表,并按可及性进行排序。 您今天要处理的清单中的第一件事就是获取清单中的第一项,并找到可从中学习该技术的资源:书籍,文章,教程,在线课程。 我将为您提供以下示例资源列表。 为了让您想出自己的OWN清单,您需要重点关注。 记住您昨天学到的第一个原则- 学习与构建 。 当您查看资源时,请遵循以下一条简单的规则对其进行评估: 阅读完本书,观看本教程并完成本课程后,我是否会制作一些东西? 现在,它一定不是您昨天决定构建的产品/服务/应用程序。 它只需要是一个成品。 这本书,教程和课程-必须在结尾处特别提及-您将能够构建:应用程序,网站,服务等。 如何选择正确的学习资源? 您要寻找的东西: 构建现有产品的克隆:Instagram克隆,Facebook克隆,Twitter样服务 该资源必须有明确的时间表-完成它需要多长时间。 非常非常重要! 您必须预先了解-您将花费多少时间来构建它。 没有截止日期的目标-根本不是目标。 课程/书籍/教程的评分,评论和评论 很重要!!! 有没有办法直接与作者联系? 在Facebook上找到? 推特? 良好学习资源示例清单 您将构建的内容:人工模拟生活,编程语言,平台游戏,绘画程序和动态网站。 时间表:页数有限,您可以在开始阅读本书时确定自己的进度。 我花了15天才完成这本书。 评分: 4.5星,亚马逊,基于77条评论 联系人:作者活跃在GitHub,Twitter上,您甚至可以通过他的网站向他发送电子邮件。 您将构建的内容:社交网络(Facebook克隆),聊天应用程序(WhatsApp克隆),教程应用程序(youtube克隆)。 时间表: 71.5小时的视频。 因此,如果您努力学习,则可以在2周内成为拥有现有工作应用程序的真正的iOS开发人员。 评分: 4.5星级基于9,190评分 联系人:课程的创建者在Twitter上很活跃,但在Udemy本身上,更是积极地回答学生的问题。 我确定如果您在北斗的个人学习平台上挖北斗,就会发现更多与他联系的方式。 您将构建的内容:视频目录网站,该网站将抓取youtube视频并将其显示在页面上,并提供用户身份验证,管理,两种不同的前端构建方式-使用模板和使用javascript框架。 完成完整的堆栈开发。 时间表:页数有限,您可以在开始阅读本书时确定自己的进度。 我花了10天的时间才能完成该项目。 评分:这是来自 Sails.js的创建者本人-Mike McNeil! 相信我,这很棒。 联系人: Mike McNeil的GitHub,他的Twitter帐户和他的Blog是一个很好的起点。 完成今天的动作练习 选择一个将用于构建一个产品的资源。 设定明确的目标-将来-一星期,两周,三周-当产品准备就绪时。 计划您的时间-这样您就可以每天学习。 […]

React Native调试简介-iOS

优秀的软件开发人员还必须是出色的调试器 作为软件开发人员,我们产生代码并引入错误。 不是故意的,但是我们做到了! 当涉及调试本机应用程序时,特别是作为初学者,这是真的! 由于Xcode不支持调试javascript代码,因此即使您是经验丰富的iOS开发人员,您也将难以调试React代码。 因此,在本文中,我将逐步介绍如何使用不同的工具在react-native应用程序中调试javascript代码。 使用Chrome控制台进行调试 这是调试本地应用程序的最简单,最常用的方法。 Chrome Dev Tools具有标准的调试功能。 它将显示所有控制台输出,使用断点,调试器暂停等。 在iOS模拟器或设备中运行您的应用程序 在iOS模拟器上按Command + D或摇动物理设备,这将打开以下应用程序内开发人员菜单, 3.点击“远程调试JS”。 然后,Chrome调试器将自动在http:// localhost:8081 / debugger-ui打开 4.启用“暂停捕获的异常”以获得更好的调试体验。 5.按Command + Option + I打开Chrome开发者工具,或通过Chrome菜单View > Developer > Developer Tools打开它。 并确保您在Console选项卡上 6.现在,您应该能够看到调试控制台。 7.现在,无论何时执行console.log语句,它都将出现在“ Console选项卡中。 使用Visual Studio代码进行调试 安装React Native Tools扩展。 单击视图栏中的调试图标,然后单击齿轮图标以选择添加配置。 从配置下拉列表中选择React Native调试环境,以便创建新的launch.json文件。 要启动调试会话,请从配置下拉菜单中选择“ Debug iOS ,然后单击“开始”按钮(或按F5键) 5,现在您可以在代码中放置断点并在模拟器上运行,请确保Debug JS Remotely启用Debug JS Remotely 如果您在任何浏览器标签上都运行了chrome调试器,则需要关闭该调试器。 其他VS调试器将无法正常工作。 […]

NativeScript-Vue 1.0入门

最近,NativeScript-Vue团队宣布了1.0版本的NativeScript-Vue🎉 顾名思义,NativeScript-Vue是一个将Vue.js集成到NativeScript中的项目,允许您使用Vue.js构建完全本机的iOS和Android应用程序。 在本文中,我们将探讨如何使用NativeScript-Vue开始构建第一个应用程序,并在此过程中回答一些常见问题。 让我们开始吧。 注意:本文最初发布于2018年3月5日在Vue.js开发人员博客上 选择环境 首先,使用NativeScript-Vue开发有两种方法。 选项1:在NativeScript Playground中工作:NativeScript Playground是基于浏览器的NativeScript开发环境,可让您开始编码而无需在开发计算机上设置本机iOS和Android SDK。 选项2:使用NativeScript CLI:NativeScript CLI是用于创建,构建和运行NativeScript应用程序的命令行界面。 由于NativeScript CLI会生成实际的iOS和Android二进制文件,因此必须安装必要的本机依赖项才能使用CLI进行开发。 在本文中,我们将开始使用NativeScript Playground进行开发,因为它是学习NativeScript-Vue如何工作的好工具,而无需经历设置本地环境的麻烦。 之后,我们将介绍设置本地NativeScript-Vue开发工作流所需采取的下一步。 现在,让我们深入研究并开始构建。 使用NativeScript游乐场 首先访问https://play.nativescript.org/?template=play-vue,它将打开预加载了Vue模板的Playground。 您会看到的第一件事是如下所示的提示。 要使用NativeScript Playground,您需要在iOS或Android设备上下载并安装两个应用程序。 第一个应用程序“ NativeScript Playground”可以扫描您在浏览器中看到的QR码,第二个应用程序“ NativeScript Preview”是可以运行您在浏览器中编写的代码的应用程序。 这是您需要做的。 在iOS或Android设备上下载并安装NativeScript Playground和NativeScript Preview应用程序。 如果您有多个设备,则可以在所有设备上安装这些应用程序。 Playground允许您同时在多个设备上进行开发,这非常酷。 打开设备上的NativeScript Playground应用程序,然后点击“扫描QR码”选项。 继续并在您的Playground中扫描QR码(不是本文中的QR码); 您应该在设备上看到以下应用。 这个应用程序看似简单,但实际上却是一件很特别的事情:您在屏幕上看到的用户界面组件不是DOM元素-它们完全是本机Android和iOS控件。 具体来说,您在应用程序中看到的文本控件是iOS上的UILabel和Android上的android.widget.TextView 。 NativeScript的强大功能是您可以使用JavaScript和Vue等框架来使用这些本机控件。 酷吧? 现在您已经启动并开始运行,让我们开始进行一些更改。 例如,继续并更改应用程序的控件之一的text属性,然后使用Cmd + S (或Windows上的Ctrl + S )保存更新。 您应该会在设备上自动看到更改。 注意:我根本没有加快gif的速度-Playground的速度确实如此之快。 […]

我的第一个iOS开源项目

这是我第一次以代码风格接触社区,与此同时,我感到有些紧张和兴奋。 我知道我的代码不是完美的,但我也知道为了增长,无论如何,有时您有时需要处于不舒服的情况下。 而且,老实说,只要存在iOS / Swift,我也不知道要进入哪里,我觉得自己的方向是正确的。 当我发现自己从事iOS项目时,有时会遇到从服务器获取一些数据的情况,只有立即获得这些数据后,我才需要点击另一个端点来获取其他东西。 因此,这意味着我必须调用异步函数并在其完成闭包内部,然后才必须嵌套另一个异步调用,是的,我知道那里不存在某些东西。 在我之前的工作中,我曾经作为Node.JS后端开发人员工作,所以我知道嵌套异步调用是一种不好的做法,即使JavaScript世界上的人也将其称为回调地狱。 而且有一个很棒的库叫做async,可以使用它来防止Node.JS / JavaScript中的这种不良做法(当然,这不是唯一的选择,它们有Promise,Generators等)。 但是我不在JavaScript世界中,而是在令人惊叹的iOS世界中! 因此,我几乎没有考虑过如何在Swift中处理这种情况,我发现有一些很棒的框架(如RxSwift或FutureKit)可以帮助我解决问题,但是感觉它们对于我的简单问题来说太高级了。 这就是为什么我创建此博客文章,试图为我的简单问题提供简单的解决方案。 而且我不得不说我的解决方案有偏见,并且与异步是如此相同,只要我的问题得以解决,就可以了吗? 我当时处在不断将我的解决方案复制到其他项目的情况,这就是为什么我决定将其作为图书馆(如Github)提供。 这就是我最终创建这个名为Ax的库的初衷,其最初目的是使我的解决方案可用于其他项目,但我怀疑我不是唯一可以解决Swift中嵌套异步调用问题的人。 如果您对Ax库中的协作感兴趣,请随时与我联系,我计划实现更多功能。 因此,我想谈一谈我如何在Github中创建/上载我的库并使它在cocoapods中可用的过程,但这可能是另一篇文章,如果您有兴趣,请告诉我,我想分享一下。 感谢您的阅读。

为什么在线编程课程就像体育馆订阅。

以及如何通过应用4 Hour Body和Freeletics方法真正成为收入最高的程序员。 广告策略-更好的您 学习编程需要改变行为。 做某事的长期承诺可能是您不习惯的。 健身房的类比很直白。 获得健身卡不会使您变得更健康,而持续进行锻炼则会使您变得更健康。 不幸的是,在线编程课程的经济学侧重于按下与健身房相同的按钮。 毕竟,这是每月订阅的相同业务模型。 为了使您更好地了解自己的形象,需要进行很多预售。 您想成为的人,一个更好的自己: 让我们看一些领先于在线课程的广告技巧,这些技巧与这种策略非常相似: [COURSE NAME]不仅消除了对移动应用程序进行编码的恐惧,而且使它变得有趣。 [课程名称]向我展示了我想要做的事,直到今天,在家学习Web开发已被证明是我一生中最好的决定之一。 售后—内lt 购买健身卡并订阅在线课程会怎样? 该程序将告诉您该怎么做。 这样做很长时间。 不要跳过培训。 走。 从您成为客户的那一刻起,您基本上就是一个人。 此外,当您无法跟上时,可以去健身房或定期观看教程。 怎么了? 正确-内the卡被使用。 我们不能为您在5:00醒来,现在可以了吗? 我以为您说过想用Swift学习iOS开发–是不是说要改变生活? 好吧-这就是需要的。 每天学习3个小时。 每天。 6个月。 然后您会到达那里。 没有? 好吧-谁该怪? 会坚持吗? 蒂姆·费里斯(Tim Ferris)在他的《四小时的身体》(4 Hour Body)一书中建立了一个我在教学生必须使用的学习策略时经常使用的测试。 该测试称为“导带测试”。 还有一个简单的问题:“会坚持吗?”: 每天砍蔬菜和清洗Cuisinart三次,将导致一个地方:放弃该方法。 这是否意味着某些人无法使用? 不。这只是意味着它将对大多数人失败。 认真对待坚持:在达到目标之前,您是否会坚持这一改变? 如果不是,请寻找另一种方法,即使该方法效率较低且效率较低。 您遵循的体面方法比您退出的理想方法更好。 经过测试 我已经对自己进行了测试。 我有多年的健身卡,很少去那里。 然后我找到了Freeletics。 我可以看到前两周的最初结果。 动机不再是问题。 我减掉了8公斤。 […]

在深度第2部分中反应本地身份验证-真实世界的身份验证流程

这篇文章将涵盖: 经生产测试的认证流程概述。 使用第1部分中的现有应用程序实现Auth流。 连接Redux以处理应用程序UI和某些身份验证状态。 使用AWS Amplify处理Cognito用户会话。 我们将使用的导航库是React Navigation,但是这些模式基本上可以转换为任何导航库。 验证流程 如果正确实施身份验证流程,那么在您的应用程序开发之初就获得正确的身份验证流程可以节省大量时间。 这篇文章的目的是向您展示如何建立端到端的一些基本而又真实的身份验证,以及如何以一种在现实世界中有意义的方式将其连接到应用程序的UI中。 让我们快速浏览一个非常常见且有用的导航/身份验证流程。 在示例1中,LoggedInNavContainer和LoggedOutNavContainer包装在单个条目组件中。 这两个组件可以是任何类型的导航(抽屉,堆栈,标签),但是在我们的示例中,我们将要构建, LoggedInNavContainer将是Stack,而LoggedOutNavContainer将是标签。 在示例1中,我们基本上是检查一个loggedIn布尔值(来自您选择的状态管理),并根据其登录状态呈现一个完全不同的组件。 这两个主要组件通常本身就是导航组件。 当然,还有其他一些情况需要考虑,例如“帐户锁定” , “重置密码”或“忘记密码” ,尽管我们可以在带有组件/ UI的if语句中添加更多逻辑来处理此问题,或者处理这些来自LoggedOutNavContainer导航器中。 另一个选择是使Main条目本身成为一个Navigator,以处理整个auth状态并进行相应的导航。 让我们更详细地看一下另一种方法: 在此示例中,有一个主要的导航组件(React Navigation的Think Stack Navigator),具有一个Login / Auth堆栈(或同一堆栈中的Login / Auth路由),以及一个“ Application”堆栈,该堆栈仅可访问/推送到如果用户已登录。 我们将重点关注第一个示例,因为它实现了选项卡,并且在实践中不像仅使用StackNavigators的第二组路由那样容易推论。 入门 首先,您应该跟着第一部分进行准备,或者准备好该项目,或者克隆该项目并配置src/aws-exports.js所有字段,以匹配来自AWS控制台的信息。 您还可以通过以下屏幕录像来创建第1部分: 在此文件中,我们有一个基本的登录表单,带有一个按钮,该按钮将向redux分配一个身份验证操作,然后该按钮将调用Auth.signIn ,并将用户名和密码输入到表单中。 我们还有一个模式,仅当用户成功使用用户名和密码登录但尚未通过两因素身份验证进行身份验证时,才会显示该模式。 用户成功登录后,我们将显示模式并允许用户输入其验证码。 auth / SignUp.js 此组件与“登录”组件相似,只是我们还有几个额外的字段可用于捕获用户的电话号码和电子邮件地址。 我们还具有模式功能,因此,当用户创建帐户时,我们通过两步验证进行验证,向用户发送短信并确认其短信,并在确认用户注册后隐藏模式。 auth / Tabs.js 在这里,我们进入SignIn和SignUp屏幕,并将其实现到TabNavigator中。 登录状态 用户登录后, Nav组件将呈现在我们的App.js文件中。 Nav是一个StackNavigator,目前只有一个Home路由。 本地路线将具有一个注销按钮,以演示注销功能。 […]

响应本机Swift和Promises

快速参考指南 对于任何给定的React Native项目,我更喜欢在本机端使用Swift并在Javascript端使用promises。 这是如何实现这一目标的瘦身方法。 1.桥接头文件 您需要一个.h文件来将Objective-C库公开给您的Swift文件。 该文件称为“ ProjectName-Bridging-Header.h”,通常包含您要访问的几个react native库。 ProjectName-Bridging-Header.h 2. React Native Obj-C Swift 您将需要另一个文件(.m),以Objective-C的方式描述您的Swift类,以便React Native可以理解它。 此处编写的函数映射到您将在下一节中看到的Swift类公开的函数。 例如,我将使用为自闭症音乐项目应用程序编写的AudioManager类的一部分。 音频管理器 3.您的Swift班 ! 最后,我们开始编写一些Swift。 这就是AudioManager类的大部分逻辑所在。 AudioManager.swift 4.在Javascript中使用它 现在我们回到了Javascript(又名仙境😉)中,我们可以在通过本机网桥进行交谈时使用所有JS技巧,例如async和await。 AudioComponent.js 我希望您发现快速演练对您有所帮助,如果您有任何疑问或需要澄清,请询问! 另外,请务必检查“自闭症音乐计划”,这是一项为患有自闭症谱系障碍的儿童创作特别设计的音乐的合作项目。 谢谢! 米克斯罗维克

从UIWebView过渡到WKWebView(iOS)

根据Apple文档的重要说明: 从iOS 8.0和OS X 10.10开始,使用WKWebView将Web内容添加到您的应用程序。 不要使用UIWebView或WebView。 WKWebView优于UIWebView的优点: 在应用程序的主要流程之外运行 使用Nitro,更快的JavaScript引擎 异步处理JavaScript 消除某些触摸延迟 支持服务器端身份验证挑战 支持认证自签名安全证书和有错误的证书