Tag: 跨平台

使用Xamarin.Forms在iOS上过渡动画

Xamarin.Forms允许开发人员立即编写漂亮的移动和桌面应用程序。 可以一次创建组件,一次布局组件,仅一次动画组件! 它的性能和稳定性得到了改善,因此几乎是完美的! 只有很少的棘手的事情真的很难使用此框架来实现。 最需要的一种是页面之间的过渡动​​画。 甚至可以用Xamarin.Forms编写这样的东西吗? 当然! 如果您真的不耐烦,只需从此仓库中获取源代码即可: OlexaLe / BeatleApp 通过在GitHub上创建一个帐户为BeatleApp开发做出贡献。 github.com 在iOS上,默认演示文稿动画看起来像是从当前页面到新页面的从右到左的简单幻灯片 。 不幸的是,我们不能做很多事情。 您可以尝试模仿具有Views的Pages并为它们之间的动画设置过渡,但是您实际上并不需要这样 (相信我,我在那里)。 尽管您可以使用Page的OnAppearing / OnDisappearing 生命周期方法来模拟过渡动画,然后再进行一次-为Pages中的View设置动画。 Xamarin论坛上介绍了此解决方案的实现,但是还有另一种方法- 本机动画 ! 让我们来编写一个应用 让我们从Wikipedia中获取图像和文本,并为披头士乐队的粉丝创建一个简单的应用程序。 它将只有2页。 第一个将包含一个带有音乐家照片和姓名的网格。 第二页将显示所选披头士的简短简介。 您可以从https://github.com/OlexaLe/BeatleApp/tree/master/BeatlesApp-start获取入门项目。 在设备上运行它时,您将看到以下内容: 简单动画 那么如何降低它的标准性呢? 模态和常规导航的行为不同,因此其自定义也不同。 现在让我们专注于常规导航 。 在本机iOS中,您可以通过2个步骤实现自定义过渡动画: 实现采用UIViewControllerAnimatedTransitioning协议的动画对象 采用UINavigationControllerDelegate协议返回动画对象 我们的第一个自定义过渡动画将非常简单。 让我们从导航中删除此从右到左的过渡,并以透明效果在当前上方显示新页面。 为了做到这一点,让我们遵循最初的计划并实现animator对象: Niiii​​ce,但您可以发挥自己的想象力,创建更精彩的动画师类。 例如,让我们添加一个缩放效果! 高级动画 首先,我们需要知道用户点击了哪个图像,因此让我们为图像分配唯一的标识符。 我们可以通过多种方式做到这一点。 正确的方法可能是使用TransitionId字段( 继承或救援的附加属性 )扩展UI组件,但只是为了向您说明模式,我将使用Effect分配UIKit的UIKit的Tag字段。 该应用程序的核心部分几乎没有更改,主要的复杂性仍在动画对象中,但是您可以编写一次,将其包装在库中,然后在其他项目中重用。 结论 在Xamarin.iOS项目中创建复杂的动画很容易,但是正如您在Xamarin中所看到的那样, 窗体的开销确实很大。 […]

适用于本机的CodePush教程

CodePush是一项云服务,可让Cordova和React Native开发人员将移动应用程序更新直接部署到其用户的设备上。 最终用户可以更新应用程序,而无需通过应用程序商店或手动等进行更新。 这篇文章试图解释您的react native项目中codepush的简单实现,这对于大多数常见用法都以为官方文档解释了各种自定义。 首先,您需要通过以下命令在终端中安装基于NodeJs的CLI: npm install -g代码-push-cli 其次,您需要创建一个CodePush帐户。 为此,请首先在终端中键入以下命令: 代码推送寄存器 然后,将要求您提供令牌,同时,您将被引导到自动注册的网页。 如果一切顺利,您将在注册后获得令牌。 复制令牌并将其粘贴到终端中,然后按Enter。 做得好! 您已注册! 现在是时候通过以下命令制作应用了。 请记住,您应该为正在使用的每个平台制作一个单独的应用程序,如下所示: 代码推送应用程序添加MyApp_IOS ios react-native 代码推送应用程序添加MyApp_Android android react-native 每次您运行这些命令时,您都会得到两种代码。 每个平台的分期和生产。 这些代码将在以下步骤中使用。 您可以稍后通过以下命令再次获取这些代码: 代码推送部署ls MyApp_IOS -k 现在,当您位于项目根目录中时,可以通过以下命令轻松将CodePush添加到项目中。 react-native链接react-native-code-push 系统将提示您输入要用于每个平台的部署密钥。 只需提供最后一步的密钥即可。 现在,您需要包装主应用程序组件,以让CodePush管理您的更改。 最简单的形式是以下形式。 它将尝试立即自动更新该应用程序(如果有新应用程序)。 从“ react-native-code-push”导入codePush; MyApp类扩展了Component { componentDidMount(){ codePush.sync(); } //逻辑,渲染… } MyApp = codePush(MyApp); 如果您可以通过这种方式更新应用程序,则可以跳过此部分并跳到下一步。 但是由于可能不是您要寻找的用户体验,因此另一种方法是使用户知道该更新。 您还可以执行许多其他策略(例如:使更新成为可选的),但是我们要寻找的是在通知最终用户之后,使用自定义消息和按钮标题进行的强制更新。 我们通过下面的一段代码来做到这一点: […]

我喜欢React Native而非Native IOS开发的4个理由

自从我开始学习React Native以来已经快一年了。 我已经赢得了两次黑客马拉松,我怀疑如果没有框架,我是否会赢得他们。 我昨天在Fb Dev Circle举办的一次黑客马拉松中赢得了第二次黑客马拉松,这启发了我写这篇文章。 1.跨平台 这是显而易见的,但值得一提。 在尝试本机响应之前,我正在使用C ++构建IOS应用,因此可以避免在将其移植到Android时重写相同的代码。 这个应用程式是由Swift所建,因此经常在Objective-C上被推荐。 但是,如果要将C ++代码连接到swift,则必须编写Objective-C来桥接C ++到swift。 因此,如果您想以一种真正本机的方式(没有框架)制作跨平台,则必须学习充满方括号,Objective-C的恐龙语言。 2.没有编译时间 响应时间不存在编译时间。 首次运行应用程序可能需要一段时间才能构建,但是此后,您可以通过在模拟器中键入`ctrl + M`来轻松启用热重载。 启用热重载后,当您将窗口从编辑器切换到模拟器时,设备将使用新保存的代码重载。 我从未见过有人使用热重装来进行本机IOS开发,并且它是一项改变生活的功能,使编码变得更加有趣。 如果您是从未曾尝试过热重装的IOS开发人员,我建议仅针对此功能尝试本机响应。 3.学习曲线 这部分取决于您当前所熟悉的堆栈。 1,您熟悉React React Native本质上就是React。 它只是使用本机函数而不是通过浏览器呈现。 在这方面有一些细微的变化,例如替换了 和驼峰式样式而不是连字符,但是它非常微妙,以至于大多数React开发人员都可以在几个小时内适应它。 2.您熟悉JS,HTML和CSS React Native有一个很棒的文档,它是交互式的,并且文档齐全,如果您熟悉如何将其用于本机应用程序,这将是非常令人愉快的。 有一些独特的反应概念,例如状态和道具,但是一旦您了解了这两个概念,就可以做很多事情,并且使用本机反应不会有很多挫败感。 该文档比Swift更易于理解,因为它们提供了示例,您可以轻松地复制和粘贴它们。 对于本机IOS开发,通常必须处理基于GUI的界面生成器,因此如果不将其连接到故事板,则复制粘贴将无法工作。 另外,Swift文档通常只提供最少的信息,因此可能难以实现。 3.您不熟悉Web开发 不用担心,这就是我所处的情况:我使用html canvas制作了简单的应用程序,但我对es6并不熟悉。 正如我上面提到的,React Native具有热重载启用功能,这使编码变得更加有趣,因此您将有很多时间学习Web开发所需的一切。 Js拥有大量在线资源,您可以通过复制和粘贴到项目中来轻松使用这些资源。 使用Swift时,通常存在版本不兼容的差异(即Swift 3和Swift 4),因此您必须更改部分代码才能使其在项目中工作,这有时会令人沮丧。 相比之下,无论您遇到什么问题,JS社区在这一点上都是如此之大,还有很多其他问题,并且很容易从在线粘贴代码。 就获得技能的价值而言,一般的Web开发技能(HTML,JS)可能会保留一段时间,因为Javascript是Github上最受欢迎的语言,而NPM是最大的软件包管理器,但是Swift可能不会持续很长时间如果iOS平台消失,则可以考虑(考虑到有多少Android手机正在起飞)。 4. Expo (从Windows开发iOS应用!) Expo是一项构建服务,无需使用Xcode即可构建iOS应用。 并非所有人都喜欢它,因为它会限制您使用Expo SDK提供的功能。 […]

在深度第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路由。 本地路线将具有一个注销按钮,以演示注销功能。 […]

跨平台VIPER

曾几何时,我写过与得克萨斯州一样大的视图控制器,以为我已经很聪明地将表视图数据源移出了它们。 但是随着时间的流逝,我的大脑和心脏有些刺痛,说:“首席,必须有一种更好的编写软件的方法。 您需要提高您的游戏水平。” 那时是2014年的决定性日子,Mutual Mobile发表了一篇名为VIPER的文章。 我浏览了这篇文章,然后迅速而固执地向前迈进,而实际上并没有把VIPER弄得一团糟。 多年来,我开始发展自己的体系结构选择。 许多人说,虽然没有灵丹妙药,但我现在经常发现VIPER最适合我对具有清晰方向和长远眼光的应用程序的需求。 我非常喜欢模块化以及它如何消除iOS中单元测试的烦恼(大部分情况)。 在前往VIPER’ing的过程中,我并没有真正遇到过跨平台应用程序中完整而干净的实现示例。 因此,我最近决定编写Listy,这是一个适用于iOS,tvOS,watchOS和macOS的待办事项列表应用程序,也是我对开源软件whole的第一份全应用程序贡献。 我很想与您分享我的构建方式,并希望对您自己的软件开发冒险有所帮助。 如果您说的是:“看,太好了,但是我只想检查代码”,就可以开始了。 Listy的成立来自面试带回家的测试。 目的是编写一个简单的待办事项列表应用程序,该应用程序仅创建和删除列表和任务,但是花费大量的开发时间来构建一个项目基础,该基础将最适合在将来的开发中扩展该应用程序-本质上奠定了坚实的基础一棵小树的根直到一天都会长成一棵高大美丽的树枝。 不幸的是,我们最终并没有成为对手,但我还是决定继续自己开发Listy,并发表自己的发现,以创建在VIPER下运行的跨平台应用程序。 由于功能有限,我无法与Listy一起管理日常工作,但我认为它可以为其他项目的开发提供漂亮的样板房/参考指南! 与我从头开始或重构的大多数iOS应用一样,我通常要做的第一件事是创建一个基本的Cocoa Touch框架,以容纳主要的纯Swift和Foundation框架API交互-自定义数据结构,Swift数据结构的扩展,模型和数据持久性-我们应该能够在应用扩展和其他任何地方使用和访问的东西。 然后,我创建第二个Cocoa Touch框架来处理所有常见的UI(Kit)交互-常见的视图(即视图控制器),表视图数据源/代理,UI数据结构便利性扩展-我们可以在许多不同的用例中使用的东西。 VIPER在哪里适合? 通常,我的VIPER模块全部都位于iOS主应用和扩展程序中。 随着跨平台的发展,将蛇分开的意义何在何处? VIPER的演示者和交互者甚至不应该考虑触摸UIKit。 演示者应该知道何时(通过视图和路由器)呈现和更新UI,并且交互者应处理业务逻辑和CRUD’ing实体¹。 鉴于列表和任务管理的演示者和交互者行为有多么相似,我将它们全部放入基本框架ListyKit中。² 在所有Listy应用程序的基础上都有演示者和交互者,在任何应用程序中,我都可以做以下整洁的事情: 获取列表和任务数据,通过它们可以更新列表和任务视图。 告诉列表和任务视图进行自我更新,删除表视图行以及显示错误警报。 让路由器准备显示编辑列表和编辑任务视图。 我还将所有路由器输入和输出协议都放置在ListyKit中,但没有放置任何实际的路由器。 我曾考虑过包括路由器,但由于路由与平台之间的差异很大,因此可能会有些过时。 例如,当用户指示要添加任务时,在iOS上,我们会显示一个完整的单独视图,而在macOS上,我们会将带有文本字段的表视图行添​​加到任务列表中。 您可以使用预处理程序条件来加载不同的平台特定代码(并且我确实在应用程序的其他地方使用了一些代码),但是感觉到这样做可能会使路由器变得有些毛茸茸。 (而且,太多的东西使东西闻起来很臭。) 在三种不同的设备之间,iPhone,iPad和Apple TV在UI API方面有很多共同点。 因此,我让ListyUI坐在ListyKit的顶部,并提供以下内容: 设置,配置和更新所有列表和编辑视图。 在所有列表和任务视图中重用表视图数据源和单元配置。 共享视图路由输出实现(例如,呈现/推动/关闭视图)。 出现错误警报 在每个视图的updateView(…)函数中,我执行单元配置,选择和删除的基于块的设置。 这使我可以将表视图数据源和委托与视图分开,同时在用户采取操作时仍能够根据需要调用演示者。 好吧,它们特别特别,因为它们具有WKInterfaceControllers和NSViewControllers之类的奇特功能,而我们的朋友iOS和tvOS则没有。 从理论上讲,虽然我们可以在所有平台上创建一些疯狂的主视图抽象,但我认为最好只为watchOS和macOS分别处理UI交互。 毕竟,我们仍然可以从ListyKit获得VIPER中的“ IPE”,它可以解决许多其他繁重的工作。 最初,我认为我可以使ListyKit和ListyUI跨平台工作,但是没有。 我很快发现跨平台框架在公园里走不动。 幸运的是,我发现了这个非常不错的指南,该指南帮助我了解了如何通过特定于平台的框架触摸共享的Info.plist文件来共享代码(设置细节不在本文讨论范围之内,但是我建议您将该文章阅读一下以了解学到更多)。 我最终建立了以下特定于平台的框架: ListyKit […]

在Android和iOS上开发CryptoSwift应用程序

在SCADE,我们始终在思考如何提高用户的工作效率。 我们通过SCADE 0.9.8.1达到的一个重要里程碑是SPM支持 。 我们对此感到非常兴奋。 这意味着您可以轻松下载,构建任何Swift SPM库并将其链接到SCADE项目中,并利用Android上以前只能用于iOS的Swift库 。 Marcin Krzyzanowsk的https://github.com/krzyzanowskim/CryptoSwift就是CryptoSwift。 它是一个纯Swift库, 实现了加密算法 。 CryptoSwift已变得非常流行,我们很高兴将其用于SCADE项目,并将其编译为Android。 在SPM功能的质量检​​查阶段,由于不明确的SPM规范,我们发现了许多较小的问题。 我们使用一些较小的库(例如SwiftMoment)测试了SPM,但是当我们第一次尝试使用CryptoSwift时感到惊讶。 它像一种魅力一样工作: 在依存关系部分中,指定URL和CryptoSwift的标记号 2.然后,导入库,并开始编码: 在Androidlet上导入CryptoSwift // strVal =“ Awesome = CryptoSwift和SCADE” 让strValMd5 = strVal.md5() 打印(strValMd5) 3.按编译,瞧瞧,CrytoSwift在Android上运行并打印 我们很高兴CryptoSwift和Android能够如此完美地一起玩。 要自己尝试,请尝试在此处进行辅导或观看视频 教程 https://docs.scade.io/docs/cryptoapp 影片 https://www.youtube.com/watch?v=GGkqO-0yQ9Y 维瓦·斯威夫特 您的SCADE团队 www.scade.io

颤振–我的想法和印象–第一部分

我是一位具有4年专业经验的iOS开发人员,不久前,我感觉自己想尝试一些新东西……决定尝试Flutter。 我将撰写一系列故事,描述我使用Google的新SDK的经历。 尽管我可能会在此处发布一些代码示例和/或发布有用文章的链接,但我很可能不会包含任何教程(如果最终喜欢该框架,可能会写一些教程故事,并且会有足够的关注者)。 ,教程等。因此,即使您对我的故事不感兴趣,您也可能会发现一些有趣的东西。 Flutter是Google的移动应用SDK,可在创纪录的时间内在iOS和Android上制作高质量的本机界面。 Flutter可与现有代码配合使用,为世界各地的开发人员和组织所使用,并且是免费的开放源代码。 几个月前,我已经尝试过React Native,但是由于我没有足够的空闲时间(工作时间),最终放弃了,也没有关于使用该框架编写应用程序的想法。 我花了不到5个小时来试用React Native。 这次有点不同(虽然不是总是这样开始吗?哈哈😅)。 我将写一个饮水跟踪器💦。 我知道已经有很多(满是广告but),但是学习新语言和SDK的基础就足够简单了,不会花费太多时间来完成,而且我还不想(还)花费太多时间以防万一我忙于其他事情。 无论如何,不​​要专注于应用程序的主题,在大多数情况下都没有关系。 最后,我可能会共享应用程序和/或代码,但稍后会决定。 所以…让我们开始吧! 😎 很明显,我已经在MacOS上进行了设置,现在我跳过了配置Android环境的工作……一旦我编写了应用程序的某些部分(大概是下次),就可以这样做。 我希望它会比上次安装Android Studio和所有依赖项更加流畅,这与Xcode相比确实很痛苦(为什么默认不安装某些(最新的?)SDK和模拟器?)。 下载了v0.5.1-beta,并按照您在Flutter官方页面上找到的说明进行操作。 为iOS开发设置一切非常简单,因为我已经安装了大多数东西,但实际上“颤抖的医生”实际上可能会要求我自动为我安装所需的一切……我知道我很懒,但我想我只是被宠坏了(有点) Xcode的帮助,我只需安装一个工具就可以立即开始开发。 与PATH变量相同,但是谁知道,也许一旦它超出beta,Flutter的环境配置将自动进行? 这样做很无聊,特别是因为我必须在短时间内做两次-一次在工作中一次在家里(或者也许我不需要这些事情,而自己写一个简单的bash脚本?)。 我已经安装了VS Code,所以只添加了Dart和Flutter的扩展名,因此所有内容(Android Studio及其依赖项除外)的安装时间都不会超过15分钟……还不错(👍🏼)(伙计们)建议用作IDE(Android Studio或Visual Studio Code),在使用Flutter / Dart时最喜欢什么? 是时候创建一个新项目了! 我已经在GitLab上添加了一个新的存储库(在这里保存了我的私有存储库),并通过VS Code命令托盘创建了一个新项目,非常简单。 该示例应用程序也从模拟器上启动,没有任何问题,可以尝试在Xcode中打开设备打开的项目并配置证书并在那里进行配置(有没有在不运行Xcode的情况下更快的方法?)。 如果我可以将它与React Native进行比较,那就更好了。 我在那里运行示例项目时遇到了一些问题,到目前为止,Flutter都没有问题(我并不是说React Native不好,我只是对它有不好的第一印象🙁另一方面,我将来可能会再尝试一次) 。 在Flutter.io入门指南中,有一个用于编写第一个应用程序的快速教程……先阅读几段内容,然后放弃🙈(让我们更艰难!那样会很无聊,不是吗?)。 我不知道为什么大多数“第一个应用程序”指南通常都显示根本没有任何架构模式的代码示例😬作为“ 不是新手程序员 ”,我想开始学习一些更好的示例并学习良好的实践(对于Flutter )从一开始就开始…然后开始谷歌搜索。 在介质上找到有关项目结构的文章[此处,谢谢Harkirat Saluja],并决定在我的项目中使用该结构。 如果您还有Flutter / Dart良好项目结构的其他示例,请告诉我,我很乐意将它们进行比较❤ “ 到目前为止一切都很好 ” […]

Flutter Fastlane和iTunesConnect

安装Flutter 创建Flutter应用 运行Flutter应用 为iOS构建 初始化Fastlane 使用Fastlane创建图标 为iOS构建Flutter应用 部署到iTunesconnect 1.安装Flutter $> git clone -b beta https://github.com/flutter/flutter.git到fluttersdk $> cd fluttersdk / bin $> ./flutter医生 要将Flutter永久添加到您的路径,请添加到$ HOME / .bash_profile 导出PATH = $ HOME / fluttersdk / bin:$ PATH 2.创建Flutter应用 $> flutter创建fluttertraining 3.运行Flutter App $>打开-a模拟器 $>扑动 4.为iOS构建 $> Flutter构建iOS 5.初始化Fastlane 安装fastlane:https://docs.fastlane.tools/getting-started/ios/setup/ $>光盘ios $> fastlane初始化 6.使用Fastlane创建ios App图标 首先安装appicon插件 $> fastlane […]

原生跨平台的简便方法

使用Xojo,您可以轻松地为Windows,OS X,iOS,Linux,Raspberry Pi和Web构建应用程序。 您是否需要为各种设备(例如Windows,OS X,iOS,Linux,Raspberry Pi和Web)制作应用程序? 您是否想用一种工具和一种编程语言来完成所有这些工作? 如果是这样,那么您需要Xojo,这是构建应用程序的最快,最简单的方法。 起步 如果还没有,请从这里获取Xojo:http://www.xojo.com/download 它是免费使用的,并且演示没有时间限制。 而且Xojo本身可以在Windows,OS X和Linux上运行,因此您可以使用自己喜欢的OS进行开发。 启动Xojo后,您将看到Project Chooser。 从这里选择要创建的项目的类型。 您可以从以下组中选择: 桌面:创建一个可以为Windows,OS X,Linux和Raspberry Pi生成本地桌面应用程序的项目。 Web:创建一个项目,该项目可以生成可在Windows,OS X,Linux和Raspberry Pi服务器上运行的本机Web应用程序。 控制台:创建本机命令行和服务应用程序,以在Windows,OS X,Linux和Raspberry Pi上运行。 iOS:为iPhone,iPad和iPod touch创建本机iOS应用。 发展历程 一旦选择了一个项目,几乎所有东西都一样。 您可以使用布局编辑器设计布局,并编写应用程序所需的代码。 无论项目类型如何,都使用面向对象的Xojo编程语言编写代码。 您甚至可以在项目类型之间共享代码! 您可以通过单击工具栏上的“运行”按钮来运行和测试您的项目。 桌面项目将启动应用程序进行测试,Web应用程序将在默认浏览器中启动该Web应用程序,控制台应用程序将在Terminal或Command中启动该应用程序,而iOS应用程序将在iOS Simulator中启动。 当需要构建与世界共享的应用程序时,就像选中某些复选框并按下Build按钮一样容易(尽管您需要为此获得许可)。 对于iOS应用,您可以将“ Build for App Store”设置翻转为ON,以创建可以提交到App Store的生成。 Xojo使跨平台变得容易。 其他跨平台解决方案要求复杂地安装许多软件包,这迫使您使用多种编程语言,并且通常大多只是麻烦。 与Java,Visual Studio,Qt或其他使跨平台变得困难的工具抗衡是不值得的。 Xojo快速,友好且有趣。 它使跨平台变得容易。 下载Xojo:http://www.xojo.com/download

Flutter可以代替Java进行Java开发吗?

手机行业的发展以及由此带来的移动应用推动了新的移动应用框架的发展。 仅将本机开发框架用于移动应用程序开发的日子已经一去不复返了。如今,随着许多强大的跨平台应用程序开发框架的加入,应用程序开发市场发生了巨大变化。 即将推出的此类应用就是名为“ Flutter ”的Google移动用户界面框架。 Flutter是一个开源移动应用程序开发框架 ,主要用于为iOS和Android设备开发跨平台移动应用程序。 使用Flutter SDK开发的应用程序能够提供非常好的用户体验,并且由于开发人员必须编写单个代码库,因此可以非常快速地启动电子商务,食品和购物等应用程序。 凭借其更快的开发,引人入胜的视觉效果,成本效益等关键品质,此Google Powered SDK将彻底改变移动应用开发市场。 颤振的流行 关于Flutter可能会取代Java进行Android应用程序开发的讨论非常多。 与Java相比,某些原因使其变得越来越流行。 1.生产力 以我们最近的一个Android应用程序项目为例,我们花了2个月的时间与3位Java开发人员一起开发了第一个Android本机版本。 同时,我们仅用1个Flutter开发人员就花了3个月的时间来使用Flutter开发相同的应用程序。 此外,我们必须编写的代码量是为Android编写的Java代码的1/3。 2.跨平台性能 许多人开始相信Flutter在实际使用通过Flutter SDK开发的应用程序时可以提供与iOS和Android上的本机应用程序相同的性能。 3. Dart更像是Java,而不是JS 通过使用Dart(一种已编译的编程语言),Flutter采取了一种截然不同的方法,以避免由于JavaScript桥的需求而导致的性能问题。 Dart允许Flutter与特定平台进行通信,而无需使用进行上下文切换的JavaScript桥。 通过编译为本机代码,它可以缩短应用程序启动时间。 4.高性能应用 Flutter是一个框架,可以指导您适应诸如Java之类的本机应用程序开发语言无法实现的模式,例如反应式和合成开发。 当您的应用程序变得更大时,此功能被证明是有益的。 颤振的问题 尽管如上所述,Flutter具有许多优势,但它需要更多的发展才能与Swift和Java等本机应用程序开发框架竞争。 Flutter应用看起来很像本机应用,但是有点偏离。 Flutter框架的另一个问题是,它并不是本机寻找iOS设备。 它主要适用于Android用户。 它优先考虑Android平台的支持,这还不错,但是因此会影响您的跨平台体验。 没有一个适合所有解决方案的尺寸。 Flutter的开发旨在支持后端的多种语言,但根据开发人员的经验,发现它仅支持Dart的GUI部分。 GUI在精简的chrome的顶部开发。 没有JS,也没有DOM,因为在浏览器中像JS一样使用dart。 它仍然是一个不断发展的框架,社区支持有限。 将来,Flutter可能会有所改进并吸引开发人员,但是仍然必须与其他非本地流行的跨平台框架(例如React Native)竞争。 移动应用程序开发公司应开始适应诸如Flutter之类的新应用程序开发框架,以适应市场趋势和客户需求,但在企业移动电话采用此类框架成为主流之前,需要解决一些问题。应用开发。 它将需要支持对所有电话设备和操作系统的本地访问。 它需要使用Swift,而不仅仅是iOS的ObjectiveC。 性能和用户体验应与本机应用程序相提并论。 为了真正采用,它还需要缩小桌面间隙。 结论 Flutter是一个相对较新且发展中的框架,它有潜力取代本地应用程序开发框架(例如Java for Android)。 但是,它必须解决一些关键问题,例如对iOS应用程序的有限支持,诸如性能之类的本机。 请随时与我们联系,以帮助您确定最适合您的移动应用程序开发项目的框架。