将DuckHunt与ARKit结合使用? —第1课:欢迎来到组件世界

故事作者: nomtek的 iOS开发人员 Wojciech Trzasko 在WWDC 2017上,苹果迈出了将增强现实技术带入我们生活的第一步。 通过展示他自己的称为ARKit的框架,它大规模地引发了一个小现象。 互联网迅速被许多视频和演示所淹没,这些视频和演示提出了AR中疯狂的想法,从娱乐的想法(例如现实生活中的Street Fighter游戏)开始,以更实用的结尾,例如用于测量房间的简单解决方案。 得益于对流行工具的广泛支持,AR应用程序开发如此迅速的进展成为可能。 从最初的公告开始,苹果就发布了两个非常成熟的3D游戏引擎的插件:Unity和Unreal Engine。 两者都有庞大的社区,渴望测试新技术。 因此,如果您打算在增强现实中创建游戏或沉浸式体验,那么选择其中之一可能是您的最佳起点。 但是,当您要将应用程序制作成AR是默认用户体验的唯一不错的增强时,该怎么办? 您将步入一个需要将基于UIKit的经典应用程序与ARKit框架连接的地方。 在需要插入技术的地方,处理图像数据并基于结果将实时信息提供到UIKit表示的基于事件的基础结构中。 以正确的方式连接这两个不同的世界可能有些棘手,但并非不可能。 为了找出方便的方法,让我们从定义应用程序的体系结构开始。 最受欢迎的方法之一是使用VIPER ,它是适用于iOS世界的简洁架构的概念。 简而言之,它将单个模块分为五个部分: 视图 -仅负责显示所告知的内容 交互器-负责单个用例的业务逻辑 演示者—从Interactor获取结果,并准备将其显示在View上,并对从View传递来的用户输入做出反应 实体 – 交互器使用的模型层 路由-处理两个屏幕之间的导航,其职责在Wireframe对象(创建新屏幕并将其放置在应用程序的窗口中)和Presenters (获取用户输入并选择将用户移动到哪个屏幕)之间分配 为了使所有连接更加清晰,请看下面的图: 现在假设我们要向VIPER编写的应用程序中添加简单但无缝的体验。 您可能已经发现它没有太多空间。 我们应该把负责场景管理的代码放在哪里? 如何处理互动? 我们应该在实时引擎中处理它吗? 还是返回主持人? 但是在这种情况下,如果我们的经验中没有明确的业务逻辑,我们应该在交互器中做什么? 这些只是您现在可能会想到的一些问题。 让我向您展示一个简单的示例,该示例将UIKit菜单添加到我们使用ARKit进行的演示体验中。 只看最终结果: 如您所见,我们的实体仅由组件构建: SpriteComponent-负责渲染2D精灵 AgentComponent — GameplayKit代理对象的包装,实现AI行为 AnimationsComponent —根据上一次移动更改应用正确的动画 SoundComponent —播放声音效果 StateMachineComponent —允许实体更改其状态并将行为调整为当前状态(例如,当鸭子活着时使用不同的移动策略,而当鸭子死亡时使用不同的移动策略) 我们已经定义了实体,那么现在该如何处理它们呢? […]

只需简单的步骤,即可使用WSO2 Identity Server将单点登录(SSO)添加到您的iOS应用程序

在本教程中,我们将让用户使用WSO2 Identity Server凭据登录示例iOS应用程序。 1.安装和配置WSO2身份服务器 从官方网站下载最新版本的WSO2 Identity Server。 请参阅安装指南以在计算机中设置和运行服务器。 设置WSO2 IS时,您应该关注的关键点很少。 确保在服务器中安装了有效的SSL证书。 这一步很重要,因为默认情况下,iOS应用程序被限制与没有有效证书的源进行通信。 但是,如果您在本地运行服务器并计划在iOS模拟器上测试该应用程序,则可以使用自签名证书并将其安装在服务器和模拟器上。 为此,请按照下列步骤操作。 按照此处的说明在服务器上安装自签名证书。 使用此工具将自签名证书导入iOS模拟器。 如果在本地运行WSO2 IS,则可以将解析的本地DNS条目添加到自定义域名,并为该特定域生成自签名证书。 如果执行此操作,请确保相应地更改WSO2 IS中的主机。 要将本地DNS条目添加到您的主机文件,只需点击此链接。 登录到服务器仪表板并按照此处的指示创建“ 服务提供商” 。 按照此处的说明创建“ OAuth入站身份验证器” 。 创建OAuth入站供应应用程序时,请确保启用“ 允许不使用客户端凭据的身份验证”选项,如下图所示。 此选项将允许诸如本地移动应用程序之类的公共客户端绕过身份验证阶段。 此处说明了这样做的原因,并且本机OAuth 2.0规范也提供了详细说明。 标记“ PKCE强制性”选项为选中状态。 使PKCE为强制性完全取决于用户。 但是,作为最佳实践,我们鼓励在开发本机移动应用程序时坚持PKCE协议。 给“ wso2issample:// oauth ”作为回调URL。 这是示例应用程序的URI,将在本文档的后面部分进行说明。 单击“添加”并复制生成的客户端ID。 我们将在应用程序中使用它。 我们已经完成设置和配置WSO2 Identity Server,让我们继续下一步。 2.设置示例iOS应用程序 我们是否必须从头开始创建iOS应用程序? 绝对不! WSO2的周到开发人员开发了一个示例iOS应用程序,您可以将其用作样板代码。 您可以从此处克隆或下载WSO2 Identity Server的示例应用程序存储库。 在Xcode中打开应用程序之前,您需要在Mac上安装流行的Swift和Objective-C项目依赖管理系统CocoaPods。 完成后,转到以下目录并双击“ […]

让我们制作一个iOS Google Chrome浏览器拉动以使用Texture刷新

轻松响应的UI框架 纹理 texturegroup.org 首先,您应该使用indicatorNode创建按钮项。 IndicatorNode只是带有某种颜色的圆形视图。 接下来,您必须制作layoutSpec 使用关闭/刷新/加号按钮制作StackLayout 设置关于stackLayout的padding Inset 静态让插入:UIEdgeInsets = .init(顶部:30.0,左侧:0.0,底部:30.0,右侧:0.0) 3.将indicatorNode包装为absoluteLayout。 4.返回带有填充堆栈布局和绝对指示器布局的 WrapperLayoutSpec 接下来,您应该将refresh-node覆盖到tableNode上。 哦! layoutSpecThatFits只是使用layoutSpecBlock的自定义方法 现在,使用scrollView参数制作updatePostion方法。

如何在轻松的Segue中传递数据(Swift 3)

展开序列(也称为“退出序列”)是一种序列,它允许用户从其当前视图控制器导航回先前的视图控制器。 想象一下:我有两个视图控制器和viewController1分别连接到viewController2。 用户在viewController2中创建或编辑数据,我想将此数据发送回viewController1。 放松的学习可以帮助解决这个问题。 为了说明我是如何使用放松搜索在两个viewController之间传递数据的,我制作了一个列出最喜欢的《狂人》角色的应用。 Segue:MadMenTableViewController-> AddCharacterViewController 第一个视图控制器MadMenTableViewController显示字符的tableView。 MadMenTableViewController导航栏中的“ +”按钮会将用户引导至AddCharacterViewController ,用户可以在其中将喜欢的字符的名称输入到textField中,然后在其导航栏中按下“保存”按钮。 展开Segue:AddCharacterViewController-> MadMenTableViewController 当我从AddCharacterViewController “展开” 序列以将新字符的名称(来自textField的字符串)返回给MadMenTableViewController时 ,我希望能够将此字符名称与展开序列一起传递,以便可以将其添加到数组中并显示在表格中。 故事板设置 在Storyboard中,从MadMenTableViewController中 ,我将导航“ +”(添加)按钮控制拖到AddCharacterViewController视图中,并选择“ Show”(例如Push)作为其segue类型。 AddCharacterViewController设置 在我的AddCharacterViewController中,我有一个称为character的存储属性,它将保存用户(从textField)输入的新字符的名称。 我重写了prepare(for segue 🙂方法,并从textField中解开了文本,并将其值分配给character属性。 正是在这个函数中,当取消缝合时,字符值将被传递回MadMenTableViewController 。 MadMenTableViewController设置 在我的MadMenTableViewController类中,我编写了一个@IBAction函数unwindFromAddVC(_ sender 🙂 ,该函数将在AddCharacterViewController取消 segue(单击“保存”按钮并退出AddCharacterViewController)时调用 。 上面,在#21行上,我有unwindFromAddVC函数。 该功能将接收字符名称字符串并将其添加到现有的“狂人”收藏夹数组中。 在#23行上,我检查看是否释放了segue的源是否是我想要的AddCharacterViewController 。 在第24行上,如果确实是我的AddCharacterViewController ,我将解包此senderVC并访问其character(String)属性(请记住,此字符串保留了我们角色的名称)。 在第25行上,此字符属性附加到我们的madMenCharacters数组。 在第27行,我确保刷新tableView,因为我们数组中现在需要显示一个新项。 将“保存”连接到“退出AddCharacterViewController” 回到Storyboard中 ,还有最后一件事要做。 控件将AddCharacterViewController中的“保存”按钮拖动到其退出图标 (最右边的橙色图标)。 放开时,应显示MadMenTableViewController中的@IBAction方法。 选择它,构建并运行您的应用程序。 现在,来自第二个视图控制器的数据将传递到第一个视图控制器! 很简单! 一探究竟: 我在这个项目的仓库可以在这里找到。 […]

我如何知道生产应用程序的APNS设备令牌?

注意:此解决方案适用于Xcode 8和iOS10。将来,获取按应用程序设备令牌的方法可能会有所不同。 我需要知道生产应用程序的设备令牌的原因是:“我想仅通过将通知推送到我的测试设备来测试更新的生产APNS证书。” 我通过谷歌搜索获得的大多数解决方案都是通过委托方法打印每个应用程序的设备令牌: 应用程序(_:didRegisterForRemoteNotificationsWithDeviceToken 🙂 但是,此解决方案根本不适用于生产应用程序。 您既不能附加到生产应用程序并在现场添加断点,也不能在此时添加代码(除非您已将这样的语句添加到生产应用程序中)。 有一种更简单的方法来获取设备令牌。 步骤如下 通过USB电缆将设备连接到计算机 打开Xcode,然后选择“ 窗口” >“ 设备” (或使用快捷键Shift + Command + 2) 选择您的设备。 您将在窗口的右下角看到控制台输出区域 运行您的应用程序,请稍等片刻,以免收到每个应用程序的设备令牌 从输出中搜索关键字之一:“ APSProtocolAppTokenGenerateResponseToken” ,“ Adding token ”或“ handleReceivedPerAppToken”。 您可以这样获得设备令牌: 获得设备令牌后(没有箭头括号和空格),即使在生产环境中,也可以利用nomad-cli的Houston等工具将通知推送到测试设备。

苹果公司和出色的应用程序筛选

今年的全球开发者大会刚刚结束,虽然很容易陷入兴奋之中,但是有些事情使苹果的iOS平台的开发人员和用户可能不那么兴奋。 该应用程序的启示! 如果您是iOS开发人员,这并不奇怪。 苹果多年来一直在暗示这一点,并在最近几个月明确指出了这一点。 具体来说,他们表示,所有不支持64位的应用程序都将在将来的iOS版本中停止运行。 开发人员,很遗憾,iOS 11是该将来的版本,因此现在该准备了。 有点烦人……确切地说是64位! 在iPhone 5s发布后不久,Apple首次添加了创建64位应用程序的功能,并引入了首个称为A7芯片的64位移动处理器。 从2015年2月开始,苹果宣布不再接受不兼容64位的应用商店中的新应用,从2015年6月开始,对现有应用的所有更新也必须兼容64位。 从那时起,从显示用户警告到直接通知开发人员将来可能删除其应用程序的步骤,它已采取了一些逐步的步骤来完全删除32位应用程序。 总而言之,苹果公司已经发出警告,说这一天即将到来,现在正是我们准备产生影响的时候了。 识别32位应用 这可能对您有用,以了解iPhone,iPod touch或iPad上的哪些应用程序会被此将来的应用程序删除所打击。 幸运的是,您可以轻松地找到答案。 打开“设置”应用程序,然后转到“常规”->“关于”,然后查找标有“应用程序”的项目。 如果安装的应用程序仅为32位,则应该能够选择“应用程序”项,并导航到新屏幕,其中列出了已安装的所有需要​​更新的应用程序。 如果您没有安装任何过时的应用程序,则“应用程序”项将无法选择。 更新现有应用 如果您是开发人员,并且有一个或两个需要更新的应用程序,那么您可能会对所需要的内容感到好奇。 幸运的是,该过程非常简单,并且为您提供了一个改进代码,更新代码并向用户表明您关心他们的体验的绝佳机会。 第一个问题是您的应用程序是用Objective-C还是Swift编写的。 对于大多数人来说,答案可能是Objective-C,因为Swift是iOS开发中相对较新的语言选项。 您需要执行的基本过程是重新编译项目,并将其作为更新提交给App Store进行审查。 但是,在正确使用它之前,需要执行一些重要的步骤和检查。 1.下载Xcode:计算机上的Xcode版本可能已经过时。 要查找具有64位编译功能的较新版本,请转到此链接。 在这里,您将能够找到Apple提供的所有Xcode版本。 2.更新项目设置:要启用64位,您的项目设置必须将“ arm64”设置为“ Architectures”字段中的值之一。 该值可能类似于“标准体系结构:(armv7,arm64)”。 如果您没有选择arm64,则可能需要使用更新版本的Xcode。 完成这些步骤后,就应该将应用程序更新提交到App Store了! 如果您的项目是使用swift的早期版本编写的,则您可能还希望将其更新为更现代的迭代,并且还可能修复您一直想要获得的任何讨厌的错误。 当您对应用程序的状态感到满意之后,请按照正常的上传和提交过程进行操作,并放心,您的软件现在可以安全地销毁。

如何像Instagram第2部分一样裁剪图像

应用最后一篇文章后,有些人可能会感到困惑,为什么图像仍然返回错误。 这是因为我们没有注意图像的方向。 本部分将说明如何处理此问题。 每个图像都有自己的方向。 方向取决于拍摄时设备的方向。 定向有4种类型: 上 下 剩下 对 图像的坐标将针对每个方向改变。 上: 下: 剩下: 对: 因此,在第1部分中,我们获得了裁剪区域的实际偏移量。 现在我们需要根据每个方向进行转换。 您只需要将该偏移量转换为新方向即可。 这是一个简单的任务,我不会在这里写。 要记住的另一件事:由于方向改变,因此裁切的大小将彼此交换。 这意味着对于左右方向,新的裁切尺寸将是size(height,width)而不是(width,height)。 裁剪图像教程到此结束。 希望你一切都好!

可爱裙裤

Dit Zijn Onze 4最喜爱的榜样 De culotte是volledig terug。 Niemandminer Dan和Victoria Beckham voorspelde在2013年的de terugkomst van deze broekrok tot halverwege de kuit中。 Ondertussen wordt de culotte前排gespot op de modeweken。 Ontdek开出4个热门范例。 牛仔裤op牛仔裤 2. Marinestijl 3.遇见短上衣 4. Safari Chique Meer weten是否超过了deze nieuwe趋势?

Shadow准备开放它的iOS Beta

Shadow在上周的“加州发射”中大放异彩。 他们一直致力于成为Cloud Gamers的首要目标的目标。 尽管他们对能够超越欧洲而感到非常兴奋,但Shadow并没有停滞不前。 他们最近透露了他们计划超越计算机的计划的细节。 下一步:iOS 苹果的iOS平台对于大多数云游戏公司而言都是至关重要的。 无论出于何种原因,流媒体产品似乎都给它提供了很大的空间。 到目前为止,iOS上唯一可用的真正流媒体产品是Remotr和Moonlight(都不是云产品)。 影子计划改变这种状况。 Shadow最近通过Discord宣布,他们计划在3月6日这一周向所有客户扩展其iOS Beta。 Shadow在一段时间内已逐渐将用户添加到其iOS Beta中。 但是,这是他们第一次宣布将向所有Shadow用户开放。 其他改进 除了开放其iOS Beta,Shadow还准备在3月19日进行重大更新。 此更新将解决无法识别的图形卡,卸载的驱动程序,蓝牙设备识别,稳定性,音频Audio啪声和键盘检测。 他们还专注于改善存储。 这包括在预期即将推出的iOS Beta时测试新的存储阵列。 商机 尽管这些进步令人兴奋,但Shadow仍有一些重要的细节需要解决。 他们独特的Shadow Box仍无法在美国订购。 这是非常重要的,因为它是他们最好和最有趣的功能之一。 Shadow Box是一个Streaming Client,经过优化可充分利用Shadow的服务。 Shadow仍然仅限于美国加利福尼亚州。 考虑到在新区域中启动数据中心需要花费多少,这是可以理解的。 但是,这给他们带来了一些问题。 人们一直在欺骗自己的位置,以便在加利福尼亚州以外注册Shadow。 Shadow这样一个重大问题,直接在Discord上解决了。 他们要求激动的粉丝们等到阴影在他们所在的地区可用。 我们已经谈到了邻近性对云游戏的重要性。 如果您距离要使用的数据中心很远,那么您的游戏体验可能会受到影响。 Shadow担心在加利福尼亚州以外使用Shadow可能会给用户带来对该服务的错误印象。 我们会同意的。 如果您住在加利福尼亚以外的地方,请尝试稍等一会,以便在Shadow在您所在的地区启动时可以享受愉快的游戏体验。 所以你怎么看? 您有机会测试Shadow吗? 您很高兴看到它在iOS上启动吗? 让我们在评论中知道! 最初在 Flickstiq 发表 。

我参加了编码训练营—现在怎么办?

上周我打了个电话,被问到:“从编码训练营毕业以来,您学到了什么?”我开始对此进行反思,并考虑将时间和学习重点放在优先位置的方式。 如果您正在考虑参加编码训练营,或者刚从编码训练营毕业,或者准备从编码训练营毕业,那么我希望本博客对您有所帮助。 我将讨论帮助我制定“后训练营”计划的关键事项,并弄清楚什么有效,哪些无效。 确定优先事项 在12月完成训练营后,我知道我必须开始找工作,但不知道如何确定几项工作的优先次序,并且有几个问题: 我应该建立自己的应用程式吗? 我自己的应用应该多久才能在App Store中出现? 我应该开始联网吗? 每周/每月我应该参加几次聚会? 我应该练习/复习哪些iOS技能? 我应该在白板练习/算法上花费多少时间? 我应该支付任何资源(Ray Wenderlich,Udemy,Udacity,GitHub,Big Nerd Ranch)吗? 我应该多久向前任老师寻求帮助? 如您所知,毕业后一周内我有很多思考。 实话实说,我花了一个月的时间来思考这些问题的答案。 以上所有问题的最重要答案是: 您需要更好地编写代码 。 归根结底,我的首要任务是要更好地开发iOS。 一旦确定了专注于改进代码的第一要务,我便为自己制定了一些迷你目标。 弄清楚(最重要的)什么是自己优先的。 继续使自己适应这一优先事项! 设定CCR(清晰,具有挑战性,合理)的目标 一旦了解了自己的优先级,便为自己设定了一些CCR目标。 我从作为Kunskapsskolan老师的那一天起就想到了“ CCR”的想法。 CCR代表“清晰,具有挑战性和合理性”,我每天都会用这些词来设定最终目标,中等目标和日常目标。 即使在今天,我仍在评估今天早上为自己设定的目标,即将我的最新应用程序推送到App Store(今天不会发生,但可能要到下周吗?)。 清楚了吗? 是的 有挑战性吗? 绝对,我至少还需要完成三个功能。 合理吗? 哎呀! 我无法在阵亡将士纪念日周末建立三个新功能。 因此,让我们讨论一下我的目标: 最终目标:获得iOS Developer的职位。 长期目标:在App Store中投放众多优质应用。 中目标:每周学习有关iOS开发的新知识。 每日目标:提交代码! 显然,从新兵训练营毕业后,我的目标是找到一份工作,但是我如何为自己做到这一点设置道路? 我为自己设定了一个目标,即每个月在App Store中放置一些内容。 它给了我30天的时间来提出一个想法,并将其贯彻到底。 我花了30天的时间来考虑我想学习和使用的框架。 它给了我30天的时间来使用UI,并弄清楚什么有效,哪些无效。 应该注意的是,这个每月应用目标与否定因素有关。 首先,我太专注于在App […]