作为高级3D渲染框架,SceneKit允许我们通过简单地从3D建模软件导入3D对象来渲染它们。 它具有一些内置的原始形状( SCNPlane , SCNBox , SCNSphere等),使我们能够以非常简单的方式在屏幕上绘制3D几何形状。 然后,我想知道是否有可能以编程方式生成自定义几何,因为我觉得在可视化复杂数据方面可能很有用。 在SceneKit的文档中,答案是肯定的,可以通过SCNGeometrySource和SCNGeometryElement 。 这让我很兴奋,所以我继续上网,发现了一个简单的几何图形,而八面体的SceneKit并没有提供这种几何图形(就像两个金字塔粘合在一起)。 在3D计算机图形学中,3D对象通常由多个三角形表面组成。 我们将需要两组数据来绘制这些曲面,它们是3D对象角(也称为顶点)的位置以及将这些顶点连接以创建三角形曲面的序列。 在编写代码之前,让我们取一个八面体,并为其每个顶点赋予一个从零开始的数字。 当我们稍后在代码中定义顶点时,顶点0将是第一个顶点,顶点1将是第二个顶点,依此类推。 接下来,确定3D空间中所有顶点的坐标。 我估计了如下图所示的坐标,您可以将它们调整为任意的值。 接下来,我们需要定义八面体的表面,这也是这些顶点之间的连接顺序。 由于八面体的所有表面均为三角形,因此我们不必将表面分解为多个三角形。 但是,定义序列可能会有些棘手,因为大部分时间只绘制表面的一侧(正面)。 因此,如果您看着表面的背面,它将是透明的。 您可能会问SceneKit如何知道哪一侧是正面。 好吧,我们通过定义序列的方式告诉它。 如果曲面的顶点是正面,则以逆时针顺序定义。 因此,您将获得如下序列: 如果顺序不同,也可以,只要按逆时针顺序定义曲面即可。
在开发REST API时,关键是选择正确的框架。 Swift有一些很棒的框架:Kitura,Perfect和Vapor。 所有这些框架都有很多功能,支持缓存,数据库以及其他不同的功能。 但是它们太大而又复杂。 我最喜欢的Golang框架是gin-gonic。 小巧,快速,优雅。 除了路由外没有什么-这是主要思想。 我一直在尝试为Swift创建类似的东西。 小巧,简单,并且具有与gin-gonic接近的API意识形态。 所以,这是海鸥 让我们看一些示例。 这是在Seagull上编写的简单REST API服务器。 Seagull的两个主要部分是Router和Engine 。 路由器是您的API的说明。 如何绘制和处理不同的路线。 Engine是Seagull的心脏,您可以使用Engine启动服务器。 我想,从示例中可以明显看出如何添加新路线。 只需调用Router方法add并传递httpMethod ,相对路径和处理程序即可。 路由器支持组(这是我在gin-gonic API中最喜欢的部分)。 组是一种将具有相似路径前缀和中间件的API分组的方法。 关于处理程序和中间件。 一些样本。 样本从模型定义开始。 所有模型对象都是可编码的 。 Handler是一个具有两个参数SgRequest和SgRequestContext并返回SgResult的函数 。 Seagull支持中间件链。 中间件处理程序按顺序调用,以将其添加。 中间件可用于日志记录,安全检查或其他目的。 中间件处理程序能够返回将在下一个中间件处理程序或请求处理程序中使用的修改后的请求上下文。 这是一个很好的中间件示例。 我们正在从请求中检索令牌并将其添加到上下文中以供将来使用。 如果找不到令牌,则返回错误。 在这种情况下,链会受到干扰,服务器将返回错误。 您可以在Github上找到完整的Seagull资源。 该项目正在积极开发中,但已准备好进行实验。
您可能知道UIKit的UIBlurEffect 。 但是问题在于,有时候设计🎨需要具有强度,不透明度或颜色的模糊效果,而这种模糊效果与Apple提供的仅有的3种不可自定义的模糊效果不同。 其动机是利用UIKit的模糊效果的优势来实现不同颜色和alpha值的相当“自定义”的模糊效果,如下图所示。 那么,如何进一步实现设计所需的自定义模糊效果呢? 我们可以简单地在模糊效果下添加视图并为其提供alpha值,这最终将使模糊效果自定义为所需的方式。 通过使用3 UIBlurEffect和背面视图的RGBa对其进行自定义。 注意☝️:几乎没有办法找到对应的Sketch / Zeplin模糊Alpha值的确切Alpha值。 但是我们至少可以努力使其达到最佳匹配。 提示✌️:不要忘记在Mac上使用Digital Color Meter应用程序。 自定义模糊效果的代码: 就是这样! 如果您想使用模糊效果值和颜色,请从Github复制源代码。 如果您对其他解决方案有任何想法,请发表评论。 我会很感激您的掌声-如果有帮助或有用的话。 在我的Twitter上找到有关iOS的更多信息。 更新:显然,还有另一种使用CIFilter(name: “CIGaussianBlur”)来实现Blur的不错的方法(甚至更好CIFilter(name: “CIGaussianBlur”) 。 它使make的“不透明度”和模糊的强度远低于UIBlurEffect 。
我们已经在许多开源项目中使用CircleCI。 自2017年末以来,2.0版本开始问世,我们认为现在是与Swift 4.1和Xcode 9.3一起尝试的好时机 2.0版的问题在于它是如此强大,并且具有许多很酷的新功能,例如作业和工作流,但是这需要查阅有关如何迁移配置文件的文档,尤其是“搜索和替换不推荐使用的2.0键” 首先是在config.yml文件夹中创建一个新的.circleci 将现有的circle.yml文件复制到项目存储库根目录中名为.circleci的新目录中。 接下来是声明版本和作业 将版本:2添加到.circleci / config.yml文件的顶部。 对于简单的情况,我们仅使用xcodebuild来构建和测试项目,因此最好在本地进行尝试,以避免进行大量尝试提交来触发CircleCI。 你可以看一下这个PR hyperoslo / Cheers#20 在我们的1.0版配置文件看起来像这样之前 -设置-o pipefail && xcodebuild -project Cheers.xcodeproj -scheme“ Cheers-iOS” -sdk iphonesimulator -destination’platform = iOS Simulator,name = iPhone 8,OS = 11.0′-enableCodeCoverage是测试 现在我们应该将pipefail放入shell ,按照CircleCI-Public / circleci-demo-ios:.circleci / config.yml @ master shell:/ bin / bash —登录-o pipefail 现在是实际尝试的xcodebuild ,由于destination参数而导致许多失败 xcodebuild:错误:找不到与提供的目标说明符匹配的目标: {platform:iOS Simulator,OS:11.3}缺少必需的设备说明符选项。 […]
SynapseIndia是一家备受追捧的Swift应用程序开发公司,其在美国,英国和其他国家/地区设有办事处,可构建功能强大的iOS Swift应用程序,以帮助客户随时随地与目标受众建立联系。 我们的iOS Swift应用程序可以通过可带来业务价值的创新,用户友好的移动应用程序来帮助您迅速进入市场。 我们的Swift开发人员团队可以快速理解和解释您的独特需求。 无论您是希望我们从头开始设计应用程序还是为您定制预构建的应用程序,我们都可以做到。 我们专注于为智能手机开发独特的应用程序。 我们遍及美国,澳大利亚和全球的客户都依赖SynapseIndia(一家著名的Swift应用程序开发公司)满足其所有智能手机应用程序开发需求。 在Facebook上关注我们:SynapseIndia-Swift应用程序开发公司 了解更多:Swift应用开发公司PPT或Swift应用开发公司视频
MVVM和Clean Archivent faciliter和cadrer la mise场所的简单示例说明BDD(行为驱动的开发)。 Github上的所有消息来源: 本杰西/计算器 计算器– BDD和带有Cucumberish和RxSwift的Clean Archi github.com 倒入开胃菜,不添加任何示例性的调味品即可。 例举者,蒙特维尔评论MVVM / Clean Archi / RxSwift peuvent faire plus ques’intégrerparfaitement dans unedémarcheBDD: il sontmêmedidactiques。 结构化教学方法,实体入门方法,转换等方法,基本原理以及可识别的标记。 Il n’y a donc plus 吹捧审讯: oùdois-je places mes测试,quelles sont les长沙发que je dois traverser… 请享用 ! 😉 原则上对地方和地方的保护的原则: AXA Banque Dans L’App Store 咨询与比较,实用工具的注释,视觉捕捉德克兰与德古弗雷斯的AXA Banque… itunes.apple.com
构造URL是每个Swift开发人员在构建iOS应用程序时都会执行的一项日常任务。 确保我们构建的网址安全且使用百分比编码格式正确编码非常重要。 构造URL的最简单且最容易崩溃的方法是使用传递原始字符串的URL Struct String initalizer。 让 searchTerm =“ obi wan kenobi” let format =“ wookiee” 让 url = URL(字符串:“ https://swapi.co/api/people/?search= \(searchTerm)&format = \(format)“)! //异常(致命错误)! 虽然它适用于没有查询参数的简单URL,但是当我们手动将查询参数添加到未使用百分比编码正确编码的字符串时,就会出现不安全行为。 手动为每个查询参数附加字符串的过程也很容易出错。 输入URLComponents和URLQueryItem 为了解决此问题,Apple的Foundation框架实际上提供了两种类型的Struct,我们可以将其用作构建带有安全查询参数的URL的构件,它们是URLComponents和URLQueryItem 。 URL由许多部分组成,例如方案,主机,路径和查询。 使用URLComponents结构,我们可以通过手动指定方案,主机和路径来安全地构建URL。 为了安全处理查询参数的百分比编码, URLComponents还公开了queryItems作为属性。 QueryItems是URLQueryItem的数组,我们可以使用URLQueryItem初始化程序传递查询参数的名称和值。 通过分配queryItems数组, URLComponents将在内部添加查询参数的百分比编码。 将键值字符串的字典映射到URLQueryItem数组 我们可以使用的另一种有用模式是将查询参数封装在具有String作为键和值的Dictionary内。 我们使用一个接受Dictionary的变异函数向URLComponents添加扩展,然后使用每个项目键和值将Dictionary映射到URLQueryItem数组,然后将其分配给URLComponents queryItems属性。 使用URLComponents和URLQueryItems构建SWAPI API存储库(示例) 这是一个示例,说明如何使用URLComponents和URLQuery项目作为每个端点的构建块来构建Remote DataRepository类。 我们还将为每个Planets, Spaceships, Vehcicles, People, Films, Species, Wookiee format, JSON format […]
在Swift中进行Redux吗? 是否可以在Eine iOS App中恢复JavaScript库并消除JS Zeug残酷的问题? 在设计模式和建筑设计中的修女,以及其他的书目。 标准MVC模式和ViewController之间的问题,由Gerl mal ins Endlose reichen负责。 Testbarkeit istfürnArsch,死于Übersichtüberdas ganze Projekt。 Dann haben wir noch den viel zu oft kopierten Code um wieder and wieder die gleichen Dingeauszuführenetc pp。 Natürlichgibt es daunzähligeMöglichkeiten(Wie immer)死于问题zulösen。 iOS Swift Blase lebe的应用程序之类的应用程序,以及React Native的其他应用程序。React.js在Webprojekte网站上的发布,请立即订阅。 Eine kleineErläuterung,我们的人eigentlich sich dieMühemachte,sich das Redux Prinzip zuüberlegen: 在React ist中,Komponenten aufgebaut ist中的dass eine […]
Apple上周在圣何塞举行的WWDC 2017主题演讲和国情咨文中宣布了Xcode 9以及Swift4。使它成为Swift 4标准库的最重要的变化之一就是一系列编码,解码和解码协议。类型实例的序列化,允许用户与JSON以及与本地磁盘进行相互转换。 这些协议(最著名的是Codable , Encodable和Decodable旨在作为Swift的本机答案,以解决开发人员在Swift 3或更早版本中序列化对象时遇到的一些限制。 这些协议仅在一个星期前就已经流行了,但是Apple可以在线获取一些出色的文档。 我花了一些时间对这些API进行试验,以进一步了解它们的工作原理,可能的功能以及在生产代码库中使用它们可能遇到的一些优点和缺点。 到目前为止,Swift社区中最大的开放问题之一是“您使用哪个第三方框架对JSON反序列化? 还是你自己滚?”。 自从我第一次开始编写Swift以来,我已经尝试了几种第三方框架并开发了自己的框架。 我经常对此感到沮丧的是,每个框架都带来了自己独特的方法,但是它们似乎都误选了可选内容,缺乏强大的错误处理能力,并且使用了不直观的自定义运算符。 Swift 4的Codable协议现在为解决该问题提供了一种通用且推荐的方法,因此我根据一些我经常会遇到的关键用例进行了实验。 反序列化 假设您有一个结构Product并且想从网络请求中收到的JSON响应中反序列化实例。 确保Product和任何自定义属性类型均符合协议Codable (如果不序列化回JSON,则仅Decodable )。 在要将Data对象反序列化为Product模型的那一点上,初始化JSONDecoder对象,然后调用decoder.decode(_: from:) 。 如果解码操作失败,则此函数将引发错误,因此您可能需要将其包装在do,try catch语句中。 就是这样。 假设Product模型上的所有属性名称与您要反序列化的JSON结构中的字段名称完全对应,Swift将处理初始化模型实例所需的所有工作。 序列化 将Product序列化回JSON仅需要模型及其所有自定义属性类型符合协议Codable (如果您不从JSON反序列化,则仅Encodable )。 在您想要将Product实例序列化为要在网络请求或其他任何地方发送的Data ,请初始化JSONEncoder对象,然后调用encode(_:) 。 如果编码操作失败,此函数也会引发错误,请随意将其包装起来,然后尝试再次捕获。 嵌套类型 在Swift 4中,对具有同样也是Codable类型的属性的Product模型进行反序列化变得非常容易。非常简单,只需确保每个嵌套类型都符合Codable (或者在需要时仅Encodable / Decodable )。 就像您期望的那样, JSONDecoder将以与解码顶级对象相同的方式来处理嵌套属性的解码。 自定义属性名称 当然,使用JSON从未如此简单。 作为移动工程师,我们经常无法控制我们正在使用的Network API,并且想要为要从JSON有效负载解码的属性定义自定义字段名称。 重要的是要了解,默认情况下,Swift会自动使用您定义为字段名称的属性名称来从JSON进行解码。 在Codable类型上为属性定义自定义字段名称就像在对象CodingKeys上定义一个枚举一样简单,该对象的rawValue类型为String并符合CodingKey协议。 您需要为模型上的每个属性定义一个案例。 然后,将每种情况的RawValue用作要从JSON解码的JSON字段名称。 自定义键路径 在我尝试使用更复杂的键路径和JSON结构进行的简短介绍中,似乎Swift的处理这些方法需要一些习惯,并且涉及很多样板。 […]
大多数应用程序都使用HTTPS请求来访问数据,并且由于SSL加密,很难从App Store中已存在的iOS应用程序中对其进行调试。 Charles是帮助您检查HTTPS请求的完美工具。 Charles Proxy是一款旨在通过代理调试Web应用程序的软件。 它不是免费的,但您可以使用其30天的试用版。 作为iOS移动开发人员,您可以将其作为与iOS设备一起使用的HTTP代理, 以中间人的方式来检查手机发出的请求。 以下是在手机上启用该功能的步骤。 在进行任何操作之前,请确保您的设备和计算机位于同一网络上。 然后,您需要在设备上安装“查尔斯根证书”。 为此,请按照帮助> SSL代理>在移动设备或设备上安装Charles Root证书进行操作 。 它将为您提供IP地址和要使用的端口。 在iPhone的Wifi设置下,您需要使用Charles给出的计算机IP地址启用HTTP代理。 保存后,将在笔记本电脑上提示对话框,要求允许此新访问权限。 您的设备连接现在将抛出Charles。 您可以立即看到HTTP请求。 但是,要检查HTTPS请求,还需要执行几个步骤才能启用SSL代理。 使用Safari,您必须导航到chls.pro/ssl才能在手机上安装Charles证书并进行验证。 以后您仍然可以在“设置”>“常规”>“配置文件”下找到它。 在您的手机上安装证书后,我们需要确定证书已启用。 为此,请遵循设置>常规>关于>证书,然后启用您刚刚下载的证书 。 在Google网站上进行测试,我仍然看不到发送的内容。 我还可以看到未为此主机启用SSL代理 。 我们需要完成在Charles端启用SSL代理的功能。 返回您的笔记本电脑,在代理> SSL代理设置下 ,我们将添加一行以覆盖Google域。 我还指定了HTTPS端口443使其保持干净。 您可以为通配符使用* 。 终于,我请求中的所有内容现在都清楚了。 在后台发生的事情,从您的笔记本电脑到Google的请求仍在HTTPS下。 但是,在使用从笔记本电脑到手机的本地受信任证书时,在实际发出请求之前,可以清晰地访问发送的那些数据。 您本地网络上的其他任何人都无法访问那些未加密的数据。 此示例涵盖了来自Safari之类的Web内容的调试请求。 但是,如果要使用它调试特定的移动应用程序,则可能需要在plist文件中添加安全性标记才能启用该功能。 NSAppTransportSecurity NSAllowsArbitraryLoads 总之 ,Charles Proxy使用起来非常直观,但是设置起来却很棘手,我希望本教程也可以使其他人更容易。 如果您对该文章有任何疑问或建议,我们将很乐意在评论部分提供帮助 最初发布在 http://benoitpasquier.com/charles-ssl-proxy-ios/ 。