Tag: iOS应用开发

配置Charles para iOS和MacOS。

布宜诺斯艾利斯! 西班牙语的内部翻译是由内部的查尔斯·帕拉·德普拉尔·德·马纳拉·阿瓦扎达·拉斯·皮蒂科内斯撰写的,是由操作系统,模拟iOS或分布式软件,iOS或简单的应用程序查询的。米内特拉-埃斯塔莫斯实用车队 MacOS High Sierra 10.13.4,XCode 9.3和Charles 4.2.1 vergo de Pago的附加说明。 本地HHTP,HTTPS,HTTP / 2和活动TCP的Charles es的应用程序。 可以在JSON上使用通用的调试工具,在JSON上使用类似的JSON,在JSON上可以使用类似的JSON格式,在使用JSON时可以使用SAR。 您可以通过一些有趣的事情来使用自己的音乐。 可以在Mac OS上以一种典型的通用配置来激活Charles capcapar。 整个程序在查尔斯Para descargar的网页上都可以看到。 笛卡尔·查尔斯 Una vez descargado lo instalaremosyacontinaciónlo abriremos。 查尔斯·埃斯塔截获的红十字会的通知书。 SSL证书和证书的证明书,请在电子邮件中注明。 无法确定SSL证书的情况:Las siglas SSL响应一个安全套接字层(Secure Socket Layer)的问题,请使用安全协议进行加密,以确保安全。 ,您使用服务网站的传输,复制和更新代码。 不适用证书的SSL证书,需对证书进行必要的修改。 获取信息的证书不存在,请通过以下方式获取信息:证书,证书和密码。 设置和配置中的信任的信任关系将由abaáa irir una nuevapestañaen la que deberemos selecciona信任。 可以同时在iOS和EAS上运行的证书安装程序,也可以在DES上激活。 在SSL模拟器中安装SSL证书,在pulse sobre帮助中使用SSL代理,在iOS模拟器中安装Charles Root证书。 在Mac OS和iOS上非常活跃的用户可以轻松地在Charles的单人活动中进行激活,并在Mac OS上的活动被激活,而在Mac OS上运行的所有工具都无法使用macOS代理服务器。 […]

离子框架

node.jsdosyasıkurulumuylabaşlıyoruzve CLI’da: npm install -g ionic 离子开始列表,请参见侧面菜单eklemek istersek: 离子启动精英计划应用程序侧面菜单 选择Ionic Pro SDK(是) sonrada 离子服务 页面dosyasıiçindeCLIortamındayeni组件eklemekiçin; ionic生成页面锦标赛 veaynışeyimoduledosyasıolmadan yaratmakiçinionic 生成页面锦标赛—否—模块 阿帕奇页面程序app.moduledosyası> @ngModule冰块和输入组件alanlarınaekliyoruz。 app.htmldosyasınagiriştesol kanatta olan Togglealanıylailgili bilgileri giriyoruz。 Htmldosyasıiçindeokuttuğumuzbuttonları.tsdosyasınatanıtıyoruz。 this.now.push(isim); istenilen sayfaya yollamakiçinkullanılır。 Firebase库拉纳拉克数据库(firebase kullanarak)数据库从JSON档案到Firebase’e导入文件。 İlgilidosyaiçinegirip(-)’etıklayarakURL’yikopyalayıpPostman’e ekleyip sonuna .json yazarak veriningeldiğineemin olabiliriz。 离子生成提供程序EliteApi => CLIiçindeyazarak提供程序oluşturur。 正在加载控制器=>Yüklenirkenyazılanyazıyı弹出şeklindegöstermekiçin。 Spinner:`dots`kullanarak gelenuyarıalanınınbaşına3 nokta ileyükleniyoranlamıkatılır。 npm install lodash —保存 npm install […]

使用Swift 4 KeyPath构建过滤器

最近,我与一个同事一起工作,该同事试图将过滤器应用于可观察的数据库对象流。 虽然建议的代码有效,但仅限于仅针对Bool和String值进行过滤,并且它是Stringly类型的API,依靠String键映射到属性。 可行,但可能会更好 不幸的是,这不是很可扩展,也不能防止我们怪异的运行时崩溃 。 例如,假设我们运行一个更改属性名称或类型的数据库迁移,并且具有以下代码: 过滤器{中的(filterKey,filterValue) 守卫让值= object.getValue(for:filterKey)为? 整数 否则{fatalError(“无效的类型转换/无效的密钥”)} } 字符串键入的密钥现在可能已过期并且将导致错误的值查找, 或者呼叫站点将使用错误的类型🤕。 在这种情况下,您可能会出现fatalError或return nil的情况,但是无论哪种方式,这种行为都是不希望的。 因此,我们着手通过两个目标(底部的最终代码)来改善这一点: 使它通用 获得编译时安全 对于那些熟悉KVO或键值观察的人,应该立即浮现一个Stringly typed API的Stringly ,哈哈。 如果您不熟悉,则只需知道需要KVO(过去时,请参阅此处的新iOS 11版本)即可使用NSString/String键路径,这会在属性名称更改且您未更新所有的属性时导致运行时崩溃使用它的地方。 由于我们想要访问属性,因此我想看看Swift 4的新KeyPath API,它是通用的并且很棒。 KeyPaths是一种类型安全的方法,用于将引用类型的属性与评估属性分开。 这是一个例子: 在上面的代码中,我们创建对MyStruct.name的引用,并在第13行对其求值 如上所示,要引用属性,您只需要特殊字符\后跟属性引用即可。 您可以将KeyPath中的泛型视为KeyPath ,尽管它在形式上被称为KeyPath ,但是您可以理解。 然后,使用下标方法[keyPath: ]可以评估您的密钥路径所对应的属性。 有了这种类型的安全性,我们现在可以构建一个过滤器,该过滤器的初始值设定项将导致我们正在寻找的编译时安全性。 在进入代码之前,让我们考虑一下过滤器应该做什么。 与以前非常相似,过滤器应提供一种确定对象是否具有与某个期望值匹配的值的方法。 我们可能要求该值具有Equatable一致性,但这将导致限制性非常严格的API,因此我们只需要一个Matcher闭包即可。 让我们看一下脚手架代码: 过滤脚手架代码 初始化程序有两个通用参数类型: Object ,它是指将应用过滤器的对象, Type是我们将要评估的属性的类型。 使用Swift语言的类型推断,当我们为初始化程序提供KeyPath ,将能够推断出初始化程序的Type约束为PropertyType 。 为什么这么好❓ 它将强制我们的matcher闭包接受一个匹配PropertyType的参数,这意味着如果该属性的类型由于任何原因(例如数据库迁移)而沿线向下移动,则编译器将捕获匹配matcher与PropertyType的不matcher ,从而导致编译时间安全! 🙌🏾 我们现在进展顺利,但这仅仅是脚手架。 […]

NSO操作

服务的优先级和质量 优先级(NSOperation.queuePriority)与枚举一样,具有以下选项: 。非常低 。低 。正常 。高 。很高 服务质量(NSOperation.qualityOfService)具有以下选项: 。效用 .UserInteractive 。用户启动 。默认。 。背景 优先级和服务质量越低,与其他任务相比,任务将在队列中移得越远。 依存关系 let operationOne:NSOperation =… let operationTwo:NSOperation =… operationTwo.addDependency(operationOne) 让operationQueue = NSOperationQueue.mainQueue() operationQueue.addOperation([operationOne,operationTwo],waitUntilFinished:false) 在这种情况下,operationTwo依赖于operationOne,因此operationTwo必须在operationOne完成之前才能运行。 确保不要使operationOne依赖于operationTwo和operationTwo依赖于operationOne,否则将产生死锁。 完成区块 NSOperation完成后,它将运行一次其完成块。 let操作= NSOperation() operation.completionBlock = { 打印(“完成!”) } NSOperationQueue.mainQueue()。addOperation(操作) NSBlockOperation 块操作类似于操作,但是可以将任务放在块中,而不是将操作子类化。 这会将operation2添加到队列中,然后将operation1添加到队列中。 它将首先执行operation2的块,然后执行operation1的块。 GCD与NSO 使用GCD的好时机: 一次计算 加快现有方法 需要轻巧的东西 使用NSOperation的好时机: 需要取消并了解其运行状态 需要安排一组依赖项 同时使用GCD和NSOperation可以使您的应用程序非常时尚。 在Twitter @anthonyprograms上关注我,并查看iOS纪事以获取更多文章。

移动应用程序的密钥管理方法

你们中的一些人知道,而有些人却不知道,但是我们所有人都无法构建安全的移动应用程序。 今天我们将讨论密钥管理。 我们一步一步地开始我们的旅程:发现基础结构布局,挖掘威胁,信任和密钥的想法。 讨论密钥管理系统:什么是密钥生成,如何访问和撤销密钥以及许多其他令人兴奋的理论知识! 但是,当然,我们会将这些知识应用于移动应用程序。 看视频 通常,我们在服务器,移动设备,通过公共渠道传输的数据等方面建立信任。 我的意思是真实的东西。 像电缆之类的东西。 是的,我们的基础架构充满了密钥和数据,所有这些都通过电缆实现。 这些电缆很重要-它们不受您的控制,无论您到达办公室外的任何地方-您都依赖这些生物。 为什么我们需要信任? –为了保护这些电缆中的数据,邪恶的CIA和坏蛋饼干正在那里寻找您的秘密。 通过使用特殊的超级数学技术,我们为与受信任的密钥或机密绑定的受保护数据提供了机密性,真实性和完整性保证。 如果您正确地管理密钥,这是可证明的且不可破解的。 由于“密钥是我们信任的东西”,并且它们控制着系统中的信任,因此管理密钥就是管理信任。 因此,让我们谈谈密钥管理。 按键 –什么是钥匙? –这是一个字节数组。 根据正在进行的过程,我们需要具有不同属性的不同字节数组: 1.我们对对称密码使用秘密密钥。 2.非对称密码的公钥/私钥对 3.密码是您可以记住的字符串。 顺便说一句,这是一个糟糕的钥匙。 我们应该使用KDF代替用户密码本身。 4.一次性PIN很小,并且易于转移具有风险属性的密钥。 这是一个额外的信任令牌,就像您在登录银行系统时通过短信从银行获得的东西。 –我们在闪亮的iOS世界中知道哪些键? 应用令牌,服务器令牌,用户密码,证书,以及类似的东西,不是吗? 它们都是钥匙。 –我们需要它们做什么? 按键保护数据! 它们使您可以访问数据,验证数据的真实性和完整性。 当然,大多数情况下,我们会处理用户将其放入应用程序中的用户生成的数据。 但是,我们还关心访问外部资源(例如第三方服务或Web服务器)以及我们应用中其他用户的可识别数据(例如,来自喜欢您的推文的用户的信息,如果有的话)。 –我们如何保护数据? 哦,您知道,我们能够也无法应对所有这些威胁。 就像数据篡改和泄漏一样,中间人,主动和被动,当然还有橡胶软管密码分析之类的常见问题。 密钥是存储在某处的字节数组,它们解锁受保护的数据并促进信任。 当然,攻击者想要它们。 基本上,密钥是一小部分数据,它们也容易受到威胁。 密钥是一小部分数据,也应该受到保护! 按键会发生什么? 1.攻击者可以窃取密钥,这很糟糕(原因显而易见,不是吗?)。 2.更糟糕的是,被盗的密钥可以重播 -可以用来访问受保护的内容。 3.而且,如果攻击者足够幸运,而您却不是,那么甚至可以替换密钥:攻击者可以抛出自己的邪恶密钥来访问资源。 因此,我们需要构建一个保护和管理密钥的系统。 关键管理系统:目标和行动 在密钥管理中,有一个实际目标:保留信任和安全性,但系统仍然可用。 如果不这样做,您将得到另一个没人愿意使用的超安全超偏执端到端系统system 任何密钥管理系统都包含多个过程,这些过程按顺序链接:从生成到交换,从交换到存储和访问,通过吊销来控制受害和过时的密钥,以及旋转以确保密钥的寿命。 有时,该系统也应包含服务流程:例如备份和对加密数据的管理员访问。 产生与交流 […]

使用Core Image Kernel Language的自定义过滤器

如果您曾经玩过Core Image的过滤器API,您可能会想知道“制作过滤器并启动我自己的Snapchat需要什么!”。 有多种方法可以构建和链接核心图像过滤器以创建自定义过滤器。 但是,与自己编写相比,这有点昂贵。 当我第一次进行此旅程时,我发现API文档的许多问题仅存在于Objective-C和台式机中。 事实证明,将其转移到iOS和Swift上确实是一项艰巨的任务。 创建我们的自定义过滤器 让我们深入探讨一下Core Image Kernel文件。 在本文中,我们将创建一个CI彩色内核,该组件在名为HazeRemove.cikernel.的文件中应用雾霾滤镜HazeRemove.cikernel. 那么这是怎么回事? 我们将在每一行中对其进行分解。 但是,请务必注意此逐像素更改。 我们一次在单个像素上运行此代码,然后返回修改后的像素。 对于语法,Core Image Kernel Language位于OpenGL Shading Language的顶部,因此它将具有与Objective-C的Swift不同的规则。 kernel vec4 HazeRemovalKernel(我们指定的第一行是内核例程,因此系统知道将其交给CIKernel类执行。我们指定vec4的返回类型,因为Core Image要求我们返回此类型以进行更改输入像素正确地适合您的输出像素。 sampler src, __color color, float distance, float slope)在我们的HazeRemovalKernel函数中,我们传入一个CISampler对象,该对象被视为源像素。 __color是一种与CIContext的色彩空间匹配的颜色,如果用户启用了“ True Tone”或“ Night Swift”,则可以帮助我们使该颜色保持预期的外观。 同样对于我们的过滤器,我们以斜率和距离作为浮点。 这些只是影响典型除雾算法的过滤器参数的方式。 接下来,我们定义一些将在例程中使用和修改的变量。 首先是我们修改后的像素; 我们将此作为vec4 。 在OpenGL中, vec4是向量类型,具有4个单精度浮点数分量。 因此,在我们的情况下,它保持RGBA值。 接下来,我们定义一个浮点数,用于保存除雾算法的计算值。 d = destCoord().y * slope + distance; […]

启用代码覆盖以迅速进行Bamboo

在我工作的地方,我们将Bamboo作为我们的iOS开发CI工具。 Bamboo的一个不错的功能之一是它与Clover集成在一起,并且将显示详细的覆盖率和单元测试数据。 缺点是这些功能最容易与Java集成。 好处是,只需做一些工作,我们就可以为iOS和Swift做类似的事情。 必备工具 您需要在构建服务器上使用以下工具 Python /点 cobertura-clover-transform(https://github.com/cwacek/cobertura-clover-transform) xcov(https://github.com/nakiostudio/xcov)[ 可选 ] slather(https://github.com/SlatherOrg/slather) 扫描(https://github.com/fastlane/fastlane) 步骤1:设定Python 在您的Bamboo构建服务器(或专用的Mac构建节点)上,创建python虚拟环境并安装cobertura-clover-transform pip安装virtualenv cd〜/开发 虚拟环境 来源venv / bin / activate pip安装cobertura-clover-transform 这将创建一个安装了cobertura-clover-transform工具的虚拟环境-该工具将覆盖率报告转换为Bamboo可以读取的三叶草格式 步骤2:在Bamboo上安装其他工具 下一步是安装所需的红宝石宝石: sudo gem install xcov fastlane slather 步骤3:配置本地项目以进行代码覆盖 您的XCode项目需要配置为收集coverage数据。 您只需要执行一次此步骤,然后提交更改。 slather设置 步骤4:配置Bamboo 在Bamboo中,您将需要添加一个新的脚本任务,该任务将运行生成覆盖率和单元测试结果所需的命令。 示例脚本代码: 扫瞄 第一步是运行单元测试以生成coverage数据。 这是通过扫描完成的 扫描-配置调试\ –scheme \ –output_types junit,html \ –output_directory xml_report / mv xml_report […]

iOS:减少漏洞和攻击的安全措施

简介 :iOS平台在硬件和软件上均提供了高级安全功能。 它是由Apple设计的,以安全为核心。 但是,iOS用户担心为iOS应用程序提供的安全级别。 Micro Focus静态代码分析器可以跟踪这些应用程序的主要威胁,从而确定安全漏洞。 开发人员可以通过确定这些漏洞的根本原因,关联它们并确定结果的优先级来安全地进行编码。 这是一份快速指南,它分析了一些常见漏洞(称为问题陈述)并提供了克服威胁的快速解决方案。 1. 问题陈述 :该应用程序有遭受中间人(MITM)攻击和其他基于网络的攻击的风险。 说明 :在iOS 9中,Apple引入了应用程序传输安全性(ATS),此安全性功能默认情况下要求使用SSL / TLS对应用程序的所有连接进行加密。 它阻止任何应用程序发起的“未保护”连接,其中包括不使用具有最强TLS版本和密码套件的HTTPS的连接。 部分或全部禁用ATS可能会使应用程序遭受网络攻击或MitM攻击。 统计数据显示,目前应用商店中约有63%的应用使用NSAllowsArbitraryLoads键选择退出ATS,如下所示: NSAllowsArbitraryLoads =真 解决方案 :如果应用程序的ATS策略将NSAllowsArbitraryLoads设置为YES ,则通过添加所需的豁免和域来修改策略,以便能够将NSAllowsArbitraryLoads设置为NO 。 如果没有,您的应用程序迟早会被阻止。 使用NSURLSession和NSURLConnection时,默认情况下启用ATS。 诸如NSAllowsArbitraryLoads — NSAllowsArbitraryLoadsForMedia — NSAllowsArbitraryLoadsInWebContent — NSExceptionMinimumTLSVersion之类的某些键会触发附加的App Store审查并要求理由。 ATS实施用于安全网络连接的最佳做法,例如TLS 1.2和转发保密性。 将来会进行更新以反映Apple的网络最佳做法。 2. 问题陈述: TLS / SSL的弱版本可能具有以下一个或多个属性: –无法抵御MITM攻击 –用于认证和加密的密钥相同 –弱消息身份验证控制 –无法防止TCP连接关闭 这些可能使攻击者可以拦截,修改或篡改敏感数据。 说明 :传输层安全性(TLS)和安全套接字层(SSL)协议提供了一种保护机制,以确保在客户端和Web服务器之间传输的数据的真实性,机密性和完整性。 TLS和SSL都经过了修订,导致定期的版本更新。 每个新修订版都旨在解决以前版本中发现的安全漏洞。 使用不安全版本的TLS / SSL会削弱数据保护的强度,并且可能使攻击者能够泄露,窃取或修改敏感信息。 […]

如何通过出行节省成本

技术永无止境发展,我们大多数人每天都有触手可及的移动设备。 那么,为什么不考虑通过使用移动技术来节省成本和改善品牌的方式来充分利用它呢? 移动不只是一时的风尚,它还在这里,因此该是时候加入并了解如何利用移动性节省成本的时候了。 自动化任务 简单的任务可能只需要一两分钟,但是当它们堆积如山时,可能会花费很多时间。 但是,利用当今的技术,使用“如果是那么那么”技术的应用程序可以自动执行重复任务以节省您的时间。 当您自动化这些任务时,您将能够减少花费的时间并减少为一项特定任务指定的人数。 轻松访问 发送文件可能很麻烦-尤其是如果它们是大型文件(例如演示文稿),则可能需要很长时间才能上载和发送文件。 通过使用技术和移动应用程序,您可以在单个应用程序内工作 ,这不仅对您方便-而且对您的整个团队也很方便! 当每个人都可以立即轻松访问时,可以节省时间,并且每个人都可以提高工作效率,从而使您的员工有更多时间专注于重要任务。 更少的物理副本需求 想想您在印刷业务上花费了多少。 无论是信函,市场营销或促销材料,小册子还是讲义,这些东西很快就会在您定期打印时加起来。 通过充分利用移动性,您可以安全地存储这些文件,并随时可以与任何人共享–使该过程变得更加简单(便宜)! 降低广告费用 无论您怎么看,在线广告总是比在实体店或印刷店便宜。 您可以在社交媒体上设置负担得起的广告,创建自己的帖子,甚至是发布博客,在自己的网站上提供客户所需的所有信息,甚至更多! 您甚至可以使用邮件列表直接向对您的网站感兴趣的人推销产品。 无论您选择哪种数字营销方式,它总是比广告牌,闪烁的标志或电视广告便宜得多! 因此,如果您想改善预算策略,请考虑移动设备可以提供的帮助! 了解技术,提高您的数字战略并开始吸引这些新客户! 如果您还没有掌握最新的数字营销,那为什么不看看Omnitoons可以为您节省移动出行成本的事情呢? 我们的服务包括应用程序和网站开发,以确保您吸引当今的数字受众,以及可以帮助您发展的定制数字作品,请随时与我们联系以获取报价!

适用于iOS开发人员的SOLID原则

接受原则,而不是架构 这些原则一起使用时,旨在使程序员更有可能创建易于维护和随时间扩展的系统。 SOLID Principles是用于以适当方式开发软件以避免错误设计的编码标准。 它是由Robert C Martin推广的,并在面向对象的设计范围内使用。 如果正确应用,它将使您的代码更具可扩展性,可维护性,逻辑性和可读性。 SOLID原理中的原理是什么? SOLID原则不是规则,不是法律,也不是完美的真理。 这是对良好的软件设计的建议,该软件设计既不严格也不脆弱。 对原理和模式的了解使您有理由决定何时何地应用它们。 如果您不了解它们,那么您的决定就会更加武断。 SOLID是五项设计原则的首字母缩写,旨在使软件设计更加易懂,灵活和可维护。 SOLID原理是Martin在2000年提出的。 在阅读有关原理时,您将遇到两个术语“刚性”和“脆弱性”。 让我们讨论一下它们是什么: 刚性:当更改导致相关模块中其他无关的更改时,软件变得难以更改。 简单的更改变得昂贵。 硬代码是具有依赖性的代码,这些依赖性会在很多方向上产生作用,以至于您无法进行孤立的更改而不更改其周围的所有其他内容。 —罗伯特·马丁 例如,您尝试更改数据层中的一些底层细节,突然之间,在为您的View进行格式化的类中遇到了编译错误。 如果您经常发现自己几乎触及了项目的所有文件,那么只要您在单个类中进行更改,就会出现僵化代码的症状。 易碎性:易碎代码比敏捷代码更糟糕,因为它不会产生编译时错误。 修复程序引入了会导致回归问题的新错误。 易碎的代码以您无法预测的奇怪方式中断。 —罗伯特·马丁 这里解释原理的内容太多了。 我将为这些原则提供专门的职位。 S —单一责任原则 O —打开/关闭原理 L-Liskov替代原理 I —接口隔离原理 D —依赖反转原理 感谢您阅读文章。 您可以在以下位置找到我: Linkedin: Aaina Jain 推特: __aainajain