Tag: 开发

使用Swift-NIO开发基本的Swift Echo Server

我不是Java或JVM类型的开发人员。 这可能是我从未感到需要尝试Netty框架的原因之一。 我一直在用Erlang,Elixir或Go开发所有高性能服务器代码,并对工具感到满意。 但是,Apple最近发布了Swift-NIO,这是一个用于开发跨平台服务器和客户端应用程序的新库和框架。 我不是前端开发人员,而是更具可伸缩性的后端开发人员。 就是说,我喜欢Swift编程语言,并且自从Apple在2014年发布它以来就一直关注着它的进步。这就是为什么这个新框架引起了我的注意。 编写服务器端软件有多好? 由于Swift-NIO是Netty的一个端口,它是由Netty杰出贡献者Norman Maurer领导的团队开发的,因此我首先研究了Netty设计,以更好地了解Swift-NIO的工作方式。 我喜欢我所读到的东西。 Netty的概念提供了很好的通用抽象,这是好的网络应用程序所共有的。 它是一个参考框架,在Java世界中用于构建许多非常高级的服务器和客户端工具。 这些概念与Swift编程语言非常吻合。 很好的契合度让我认为这确实可以加速Swift服务器端开发和跨平台推广。 我敢打赌它可能会产生很大的影响,并帮助Swift继续迅速崛起为顶级编程语言之一。 Swift-NIO依赖于非阻塞IO。 这意味着您可以通过使中间层分派准备好处理到工作线程的网络操作的方式,来管理相对数量的线程,从而管理大量的网络连接。 因此,从处理线程的角度来看,网络操作是无阻塞的。 他们可以完全使用CPU,因为它们可以共享大量套接字的网络操作,而无需等待。 在Swift-NIO措辞中,阻塞操作被委派给通道。 通道将网络操作上的事件触发到负责管理通道的事件循环。 开发人员将服务器或客户端的逻辑作为处理程序提供给事件循环。 处理程序是实现触发网络事件时执行的操作的代码段。 可以将它们组合在处理程序管道中以提供额外的灵活性。 这为去耦增加了一层,并使处理程序更可重用。 在客户端服务器环境中,“ Hello World”应用程序通常是“ Echo”服务器。 服务器接收客户端发送的内容,并将其发送回客户端。 使用Swift-NIO非常容易实现。 让我们看看如何做到。 请注意,以下步骤已在MacOS上进行了测试,但是如果您已安装Swift,则它们也应该在Linux上也可以使用。 您可以使用Swift命令行引导项目: $ mkdir EchoServer $ cd EchoServer / $ swift package init —键入可执行文件 创建可执行程序包:EchoServer 创建Package.swift 创建README.md 创建.gitignore 创建源/ 创建Sources / EchoServer / […]

Xamarin iOS验证文本字段教程

我最近开始涉足移动开发。 特别是使用Xamarin iOS。 这是一次很棒的经历,我正在一个副项目上取得重大进展,我希望它将在未来几个月内达到足够的体面并向公众发布。 如果您像我一样,那么您不是UI / UX或设计方面的专家-也不想花很多时间假装自己-但当您的应用在原型制作过程中看起来像是一团糟时,您一定会感激不尽并获得功能布局。 为此,重要的是要拥有随时可用的工具,以便在保持整洁外观的同时快速进行原型制作。 在这篇文章中,我将提供有关如何实现这样一种工具的教程。 我想这是向您介绍我的平面和最小验证文本字段的地方: 如果这看起来有用,请继续阅读。 我要直接跳进去! 我想指出的是,在本教程中,我假设您对Visual Studio和Xamarin iOS有一定的了解。 但是,如果您是一个全新的人,而我却很快地浏览了所有内容,我很乐意回答问题! 您可以在 此处 参考完整的源代码 。 让我们从创建一个新的单视图应用程序开始。 项目加载后,打开情节提要并添加新的UITextField并执行以下操作: 给它一个标识名(我使用了NameTextField) 将其尺寸调整为275px x 30px 删除边框样式 删除初始文字 添加占位符文本 可选:添加约束 您应该最终得到类似于以下内容: 您显然不需要使用任何自定义字体,但是在本教程中,我使用了EB Garamond和Oswald。 对初始视图控制器满意后,保存情节提要并退出。 现在获取一些实际代码。 我们要做的第一件事是添加用于着色UIView边框的功能。 我们将通过扩展方法来实现。 将一个新的类文件添加到您的项目,名为UIViewExtensions.cs。 初始代码如下: 在进入验证文本字段之前,让我们进一步进行边框着色功能,并创建一个名为BorderedTextField的新类。 创建一个名为BorderedTextField.cs的新类文件,并按如下方式填充它: 我真的希望你们中的一些人觉得这有用。 如果您有任何疑问或反馈,我希望听到,所以请联系。 否则,谢谢您的阅读! 再一次,您可以在 此处 引用完整的源代码 。

为什么要对Fastlane使用连续部署?

作为iOS开发人员,您担负着许多职责,例如编码,为不同环境创建证书和临时证书,创建开发和发行版本,生成用于应用商店部署的屏幕截图,在发布应用之前将必需的元数据添加到应用商店并将其上传到应用商店。 因此,除了实际的开发之外,还有很多杂项任务需要照顾。 而且您必须每次都执行它们。 您想花时间做有意义的事情,这就是Fastlane出现的地方。 Fastlane自动执行这些琐碎的任务,这些任务是使用少量命令来部署构建所必需的。 是的,这是对的。 Fastlane几乎可以处理为不同环境创建证书和临时证书,创建开发和发行版本,生成用于应用程序商店部署的屏幕截图,将必需的元数据添加到应用程序商店以及将应用程序上载到应用程序商店的所有操作。 就这么简单! 您只需要设置Fastlane即可,所需的工具和少量命令集将为您完成所有工作。 Fastlane提供了各种工具来自动执行这些任务。 您可以根据需要使用这些工具。 但是在那之前 如何为您的新/现有项目设置Fastlane? 打开终端并使用以下命令导航到您的项目路径,然后按Enter。 cd ~/your project path 输入以下命令,然后按Enter。 fastlane init 将Fastlane添加到项目后,它将具有Fastlane文件夹,其中应包含以下所示的文件。 在这里, Appfile存储应用程序标识符和您的Apple ID。 Fastfile管理您创建的调用某些操作的通道。 通过Deliverfile ,您可以在将应用程序提交到App Store时添加所需的元数据。 泳道基本上是一个动作项目,按照您的指令和所需顺序执行某些任务。 您可以创建多个通道及其关联的任务。 完成后,您可以呼叫任何特定的车道以执行其任务。 这是Fastlane的工具列表。 cert:自动创建和维护iOS代码签名证书。 这将确保您在本地计算机上安装了有效的证书及其私钥。 要使用此工具,请运行命令fastlane cert 。 仅当需要创建新证书时, 证书将 –创建一个新的私钥 –创建一个新的签名请求 –生成,下载和安装证书 –将所有生成的文件导入您的钥匙串 请注意 cert将永远不会撤销您现有的证书。 如果您无法再创建任何证书,则cert会引发异常,这意味着您必须撤消其中一个现有证书才能为新证书腾出空间。 感叹:因为您宁愿花时间在建物上,也不愿与资源调配作斗争。 是的 它可以创建,更新,下载和修复供应配置文件(使用一个命令)。 它支持App Store,Ad Hoc,Development或Enterprise配置文件,并支持一些不错的功能,例如自动添加所有测试设备。 叹息将确保您在本地安装了与已安装的证书匹配的有效配置文件。 要使用此工具,请运行以下命令 […]

尽早制作-Siri快捷方式入门| Byteout博客

让我们通过引用WWDC 2018中的Apple来开始这篇文章 Siri快捷方式是iOS 12中强大的新功能,可让您的应用向Siri公开其功能。 这使Siri可以根据各种上下文在相关时间建议您的快捷方式。 有了这项新功能,应用程序便有了新的面貌-语音。 而且,它们会在您可能想到的时候立即出现在Spotlight上,从而自动“变得更聪明”。 因此,在本教程中,我将向您展示使用NSUserActivity在应用中实现快捷方式的速度—包含2个代码块 。 我将指导您完成一些步骤,向Siri展示我们喜欢的应用程序的一些最有价值的功能。 注意:您可以 在 Byteout Software博客 上 找到带有 更好格式的代码 的原始帖子 。 简短介绍-我们示例的背景故事 早期游戏警报是一款闹钟应用,在用户赢得简单游戏之前,它不会停止响铃。 用户也可以随时随地玩游戏,即使没有警报也是如此。 为此,在没有新的快捷方式的情况下,他们必须: 启动应用 转到列出所有游戏的屏幕 滚动到他们最喜欢的一个 按“播放” 但是有了快捷方式,他们将只能使用自己的声音,或者在搜索中键入游戏名称。 因此,让我们深入研究代码! 第一步是进行用户活动并在适当的时间捐赠。 // GamesSelectionViewController.m // 1. Make activity – (void)donateActivity { NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:@”com.your_appname.game_activity”]; // A activity.title = [NSString stringWithFormat:@”Play %@”, self.selectedGame.name]; // B […]

Charles Proxy入门

我从事iOS开发(专业)已有6年以上。 我为他人编写的每个iOS应用程序中都有一个常量。 它们都与Web服务进行通信以从iOS应用程序/客户端读取和写入数据。 甚至我个人的个人项目应用程序也从设备上完全隔离的状态转变为与Web服务的通信。 如果您在与Web服务进行通信的任何类型的移动客户端上工作,则应学习如何使用Charles Proxy。 我使用此工具已有多年,发现它绝对不可或缺。 这篇文章将为在一个简单的iOS项目中使用Charles提供入门。 我写了一个非常简单的项目,将从Unsplash加载“策展的图像”。 您可以从GitHub获取源代码。 这篇文章中的所有设置都是针对iOS模拟器的。 但是,设置Charles与其他设备(tvOS或真实的iOS / tvOS设备)对话非常容易。 我已经编写了单独的指南来设置Apple TV设备的Charles Proxy,您可以在这里找到它:在Apple TV(tvOS)上设置Charles Proxy。 请注意:我在此处概述说明的方法并不是唯一的处理方法。 随意自行探索应用程序。 另外请注意:我已收录了简短的YouTube视频,其中显示了以下说明的步骤。 一些说明可能会很复杂,YouTube视频应该会有所帮助。 Charles代理详细信息 在开始之前,这里是有关Charles Proxy的一些详细信息。 直接从开发者的网站上: Charles是HTTP代理/ HTTP监视器/反向代理,使开发人员可以查看其计算机与Internet之间的所有HTTP和SSL / HTTPS通信。 这包括请求,响应和HTTP标头(其中包含cookie和缓存信息)。 网站:http://www.charlesproxy.com 费用:50美元 免费试用? 是的,持续30天 Charles Proxy概述 Charles Proxy是一个HTTP代理/监视应用程序。 它允许您监视来自各种来源的Web流量,包括macOS / iOS / tvOS设备和iOS / tvOS模拟器。 这意味着您不必编写这样的临时代码: print(“JSON Response: \(JSON)”) 要么 NSLog(@”JSON Response: %@”, […]

原生VS混合应用程序开发

关于本机与混合应用程序的开发,关于哪个更赚钱的争论一直持续了一段时间。 如果您现在想要自己构建移动应用程序,那么这场辩论比以往任何时候都更加重要。 一方面,我们有一个可以在所有平台上使用的应用程序,这是一个诱人的想法。 但是,速度,外观,功能甚至用户体验的最终结果可能会受到限制。 考虑到这一点,我们创建了最终指南,在该指南中我们将回答“本机应用程序或混合应用程序开发之间的区别是什么?”这个问题,什么是您更好的选择。 本机应用程序开发 本机应用程序开发的优缺点[/标题] 首先,让我们看一下本地移动应用程序开发。 顾名思义,此选项将使您的应用在每个平台上都具有本机编程语言。 例如,Objective-C或Swift适用于iOS,而Java适用于Android。 分解每种代码语言,存在一组特定的框架和技术。 最初,当公司想要开发应用程序并将其嵌入设备中时,这个想法就产生了,并且可以通过图库,闹钟,浏览器,音乐播放器,照片等看到。 本机应用程序开发的好处 用户体验-首先,那些多年使用Android的用户在iOS设备上会感到不舒服。 因此,使用本机应用程序,用户将根据直觉行事,他们应该更容易理解功能。 速度和性能-考虑到该应用程序已针对iOS或Android平台进行了优化,因此将在性能级别上显示出来。 随着本机应用程序的开发,所有因素都被考虑在内,包括智能手机的内存和电池。 不仅实现手势更容易,代码运行更快,新功能也更快集成,并且地理位置跟踪也保持简单。 数据保护-通过本机移动应用程序开发,这是真正确保数据保护的唯一方法,因为它们都与数学有关。 该任务需要充分利用硬件资源。 灵活性-寻找本机应用程序会变得更好的原因时,我们还应该考虑通过完全访问智能手机的相机,数据库,地理位置和其他功能,使应用程序获得的好处。 对于混合开发,构造接口时存在某些限制,因为它将在多个平台上使用。 没有这些限制,该技术提供的所有内容都可以实现。 个性化-市场上有许多不同的Android设备,原生移动应用程序开发是调整每个设备布局的唯一真正方法。 测试便利性–本机和混合应用程序开发之间的另一个区别在于测试阶段。 即,如果应用程序使用的内存比最初预期的要多,则立即显而易见。 来自应用商店的支持—如果您要构建本机应用,则用户可以通过自己的商店(无论是Google Play还是App Store)下载您的产品。 如果您附近有智能手机,请立即在商店里逛逛,我们保证“精选”部分没有一个应用程序经过混合开发设计。 当然,可能会有一些游戏,但是这些应用程序的界面不是系统的。 最新技术—智能手机和操作系统更新后,就会提供硬件和软件功能以用于实施目的。 如果您选择进行混合应用程序开发,则将不得不等待新操作系统的发布以实现功能。 不幸的是,不可能预测对新功能的支持。 本机应用程序开发的缺点 应用程序开发的成本-每个平台都需要大量开发,因此该过程将需要更多的人员,因此需要更多的资金。 应用程序开发的速度-同样,每个平台的所有内容都必须唯一,因此完成该应用程序还需要更长的时间。 支持—最后,为了提高应用程序开发的速度和成本,要修复两个(或什至更多)平台的错误和错误要多于一个。 *当然,所有这些缺点都与您打算为其开发应用程序的设备数量紧密相关 混合应用程序开发 混合应用程序开发的优缺点[/标题] 对于本机应用程序和混合应用程序开发之间的主要区别,它来自于应用程序的开发过程。 使用Hybrid时,我们会立即开发所有内容,而不是单独进行所有开发。 在任何时候,编程语言都是标准的,就像您在开发网站时所看到的一样。 使用CSS或HTML。 当您雇用应用程序开发人员时,他们会告诉您实现混合移动应用程序的不同方法。 例如,可以通过编写C ++代码以及各种平台的包装程序来手动完成此操作。 混合应用程序开发的好处 支持 -首先,开发周期要简单得多,并且可以立即进行修复。 而且,所有更新都发生在服务器端,而不是通过商店进行更新。 提高速度/降低 应用程序开发成本。 —对于预算有限的人,应用程序开发仅进行一次,而您不需要那么多的程序员。 […]

开发者工具箱

质量是我们使用工具的结果。 我们对它们越熟悉,结果就会越好(或更快)。 当然,使用最少的工具集可以取得很多成就,但是要提高生产力,我们应该始终努力掌握当前的工具,并找到可以改善工作流程的新工具。 我一直在寻找新工具,所以如果您有我不使用的工具,请告诉我。 事不宜迟,这是我的工具箱: GUI工具 1密码 保存您的密码并保存。 我使用了不同的密码管理器,但是10多年来我一直使用1Password。 短跑 曾经需要查找文档吗? 我在Dash中进行。 如果文档还不存在,我将导入它们。 这样,它们就可以脱机使用,并且所有集成(例如Xcode)都使用法变得更好。 小飞贼 想知道哪些应用程序尝试执行网络请求? 您要控制它们吗? 这是给您的工具。 我已经使用了多年了,它并没有让我失望。 网络链接调节器 作为移动开发人员,我们经常忘记,我们的应用程序未与稳定的互联网连接一起使用。 要在Macbook上复制它,我们可以使用Apples Network Link Conditioner。 只需按照您希望的方式更改网络,您的整个Mac都将具有此连接(因此,如果丢弃所有程序包以查看会发生什么情况,则在等待时无法读取reddit)。 爪子 有很多应用程序可以发送HTTP请求。 我用爪子。 使其比POSTman 更好的主要功能是链接请求。 这样,我不必每次都进行身份验证。 取而代之的是,我只运行一个命令,它执行了我需要的一切。 颤动 到目前为止,这是我最喜欢的笔记工具。 您不仅可以按集合(和子集合)对笔记进行排序,甚至还可以使用不同的单元格,这些单元格中包含代码,降价,文本等。 让它将整个注释呈现为pdf,就可以了。 里德 作为开发人员(尤其是移动开发人员),我们必须与时俱进。 通常,我们可以通过跟踪博客来做到这一点。 我通过使用Reeder来做到这一点。 这是一个汇总RSS feed的不错的小工具。 揭示 曾经有视觉缺陷吗? 是否曾与UX设计师合作? 显示是我的选择。 在一个新的代码库中,我可以启动它,查找带有错误的正确视图,找到类的名称,然后知道从哪里开始。 另一方面,借助UX设计器,我们可以坐下来实时更改属性(包括自动布局)。 真有用! 草图 每当我执行任何UI工作时,我都会在Sketch中进行。 它是如此易于使用,没有理由不这样做。 请注意,它仅是矢量,因此,如果要更改任何图像,则必须使用其他内容。 源树 […]

实用的iOS应用架构

最近,我一直在阅读许多有关应用程序体系结构的文章。 有很多这样的文章,有很多不同的见解和解决方案。 开发人员分享他们的经验,优缺点可能会帮助我们决定在未来的项目中走哪条路,这是很好的。 我同意,有许多很好的架构,经过精心设计,并具有很好的关注点分离,可以解决其他方法的弊端。 但是,我也认为没有适合所有项目的应用程序架构。 我们如何衡量架构对项目是否有利? 好吧,我认为此评估中有几个相关参数。 评估架构 首先,应将应用程序的组件合理组织和分离。 他们不应该对其他组件的内部细节了解太多。 其次,正如鲍伯叔叔所说的那样,体系结构应该对项目的业务领域“尖叫”。 它是运输应用程序吗? 也许一个金融机构? 这是您从项目中获得的信息,只需以新手的身份快速浏览一下代码即可。 拥有不言而喻的架构对于维护和增长产品至关重要,尤其是在增加人员时。 然后,我们当然具有可伸缩性。 添加更多功能有多容易/难? 拥有一个优雅的解决方案可能会在将来为我们节省大量时间和金钱。 另一个参数是架构如何适合业务领域的要求。 它是繁重的数据驱动的应用程序吗? 它有很多需要用户输入的表格吗? 我们将要构建的应用程序的复杂性是什么? 是“ 5个屏幕”应用程序还是“ 50个屏幕”应用程序? 需要考虑的另一件事是开发团队的效率。 团队能否迅速了解新架构和可能不同的概念? 他们将能够独立处理功能而不会阻塞自己吗? 想象一下,只有一个故事板的架构,团队中的每个人都必须在用户界面上工作。 合并地狱等待发生。 测试是体系结构决策中的另一个重要元素。 我们要测试哪些关键组件? 在测试方面,我属于认为必须只测试值得测试的零件的小组。 我不喜欢做很多无用的测试,只是增加了代码覆盖率。 代码覆盖率只是一个欺骗性的统计信息。 您可能有90%的测试覆盖率,但是错过了关键部分。 在另一个极端,我看到了设计完美的项目,这些组件具有很好的隔离性,覆盖率为零。 在决定应用程序体系结构时,这使我想到了另一个关键部分-上下文。 项目的截止日期和预算是多少? 我们必须在质量(交货时间)上进行哪些权衡? 工程师需要更多时间以最优雅的方式设计和实施项目,而销售则需要更快的时间。 每个人都有自己的利益,我们必须意识到双方的平衡。 低质量的产品不会持续很长时间,但是市场上可能不再需要后期产品。 这就是为什么我认为在进行体系结构决策时,我们需要务实,中立和对全局的理解,而对我而言,这是做出此类决策的动力。 我们不需要偏向任何一种方法,也不应抛弃其他方法。 这只会限制我们的工具集,并在做出决策时缩小我们的可能性。 好老的MVC 我很困惑为什么这么多人只是放弃了Model-View-Controller模式。 他们代表Massive View Controllers。 它不适用于大型项目。 好吧,我已经看到(并从事过)非常大的项目,这些项目很好,干净且可维护,并且遵循Model-View-Controller。 我们有很多概念和模式可以帮助我们减小视图控制器的大小,例如委派,组合,依赖注入,协议,纯函数,服务/实用程序类,导航中心。 有了这些技术,测试也不是那么困难。 […]

iOS开发教程| 具有自动布局的自适应接口设计

在开发适用于iOS的APP时,很少有同一屏幕在纵向和横向方向上组成不同的情况。 今天,我们为您提供此IOS开发教程。 然后,您将能够为您的应用程序开发自适应界面。 多年来,使用Xcode面对这种问题的方式有所不同。 从通过代码重新定位组件,到为每个版本创建不同的布局。 自动版式提供了一种管理此工厂的新方法。 “尺寸类别特定的布局”由每个xib中的一个选项组成,该选项允许根据屏幕的不同尺寸定义特定的行为。 不仅对方向更改有用,而且对不同的屏幕尺寸或布局容器中的更改(例如iPad上的SplitView的主视图控制器)有用。 该工具允许针对不同的屏幕尺寸和配置建立不同的行为,而无需诉诸于代码更改或拥有更多xib文件。 在Xcode 8中被选项Vary for traits取代,该选项具有非常相似的行为,尽管在初次使用时可能会引起混淆。 让我们通过此功能提供的选项进行一些导航,并使用AutoLayout中的约束制作一个示例屏幕,这使我们仅使用界面元素组成的更改即可重复使用相同的设计。 该示例将非常简单,并且我们将在纵向和横向(垂直和水平)中使用具有不同可视化效果的AutoLayout。 iOS开发:创建ViewController 首先,我们创建了一个新的Xcode项目。 在向导中,我们选择“单一视图应用程序”。 创建的项目由其AppDelegate和ViewController以及Main.storyboard组成。 在此示例中,我们将替换Main。 带有xib文件的情节提要,其中仅包含我们要设计的屏幕。 为此,我们创建一个名为ViewController.xib的xib文件,并在ViewController.m类中添加以下代码: -(id)init {ViewController * controller = [super initWithNibName:NSStringFromClass([self class])bundle:nil]; 返回控制器; } 在xib中,在Identity Inspector的Custom Class字段中建立我们的类的名称很重要: 并将“连接检查器”中的“视图”字段拖到控制器的主视图中。 到目前为止,我们已经创建了视图的控制器,并与其文件生成器接口链接。 仅需要从AppDelegate.m中打开它 –(BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //应用程序启动后进行自定义的替代点。 ViewController * viewController = [[ViewController alloc] init]; UINavigationController * navigationController = [[UINavigationController […]

成为AR开发人员的荒谬

增强现实(AR)是一种相对较新的媒体,在软件和硬件行业中正获得极大的关注。 许多公司都在努力开发耳机,苹果,英特尔,谷歌,Magic Leap..etc。 许多公司还在为能够为AR建立项目的软件做一场争夺战。 作为过去一年一直深入研究AR的人,让我告诉你,这很尴尬。 也许在将来,当现实世界中对AR头戴式耳机以及更经济高效的AR头戴式耳机进行更广泛的社会适应时,这种情况可能会发生变化-但就目前而言,无处不在的AR通道当然是移动的。 通常,当我为移动设备开发时,我就像咖啡店中的所有其他人都在移动设备上悬停轻敲一样“低下头”。 但是,没有AR。 使用AR,您通常会抬起手机来体验现实世界中的数字投影。 我正在为移动商店Spillwave开发应用程序。 只是为了好玩,我将告诉您该应用程序在天王星上名为Smashed。 这是一款有趣的饮酒游戏,仅需一点点AR即可使体验引人入胜。 棘手的部分是,此应用程序使用了所谓的“水平平面检测”,以弄清楚应该将天王星“放下”的位置……呵呵……然后旋转它,并给出饮酒说明。 无论如何,荒谬的部分是,随着开发和测试的进行,人们将定期将应用程序部署到移动设备上并进行测试。 这带来了在咖啡馆走来走去,举起我的手机,扫描房间,扫描房间的体验。 我将模型放在飞机上。 然后,我在屏幕上滑动手指,仍然将它指向整个房间。 它看起来就像我在录制视频,或者至少是其他顾客的快照。 这不是我会喜欢的“关注中心”! 我从顾客和员工那里随意地脏了一下。 我希望有一天我会被护送出建筑物,甚至可能遭到口头攻击! 我等不及了 永远的AR! 重新发布于:https://solipsar.com/the-ridiculousness-of-being-an-ar-developer/