椰子足与迦太基

很多时候,我们想知道如何管理对我们iOS项目的依赖。 从历史上看,这非常简单,因为选项非常有限。 从历史上看,我们使用Cocoapods是诚实的唯一有意义的选择,因为您既不想自己也不使用git子模块来管理它们。 过去的依赖管理 随着时间的流逝,我们意识到有新的选项可以管理依赖项。 当迦太基第一次出现时,我们也给了它一个机会,但它仍处于早期开发阶段,因此它具有很多令人讨厌的缺点。 不可能只为一个平台建立依赖关系,更新一个依赖关系而不更新其他依赖关系是不可能的,添加一个依赖关系而不编译其他依赖关系也是不可能的。 这样的事情只会让我们放慢脚步,因此我们决定坚持使用Cocoapods。 我们也不喜欢迦太基的哲学,因为我们喜欢运行pod install而不处理其他任何东西的想法。 迅速并发症 自从我们开始使用Swift作为主要的编程语言以来,我们面临着越来越多的麻烦-编译时间增加,语法高亮和SourceKit崩溃频繁。 我们开始想知道如何使我们的开发人员的生活更加愉快。 我们的第一个想法是看一下我们的依赖关系,因为它们是不变的代码,不需要被Xcode一次又一次地索引和编译。 这就是Carthage展示其优势的地方-依赖关系仅在框架中构建一次,仅此而已,不再需要建立索引,也无需进行编译。 迦太基反击 我们进行了一次尝试,Carthage似乎解决了所有早期开发阶段的问题,因此我们仅使用platform选项为iOS构建,而使用cache-builds选项跳过了已在本地编译的框架的编译。 结果真的很酷-语法突出显示变得更加可靠,并且构建时间减少了百分之几十。 这意味着,即使在功能不强的设备上,iOS开发也比15英寸Macbook Pro更舒适。 这也意味着我们决定以迦太基作为主要的依赖项管理器开始新项目。 我说主要的,尽管仍有一些不支持它的图书馆。 这些可能是较旧的存储库,它们不再维护或对我们无关紧要,因为我们尝试仅使用维护的库。 但是,某些专有软件使用静态库,这意味着它不能由迦太基管理。 在那些情况下,我们仍然使用Cocoapods。 持续的不便 但是,我们仍然遇到一些问题。 依赖项的初始编译时间可能会非常长,尤其是当依赖项包含多个子规范时(在Cocoapods术语中),因为Carthage会编译它们的全部(及其所有依赖项),即使项目不需要它们也是如此(为此存在拉动)迦太基github上的请求,这将减少这种不便,但目前仍未合并)。 我们也希望在项目之间进行一些本地缓存。 在我们的机器上,我们有更多的项目使用Carthage,并且经常使用相同版本的依赖项。 如果我们在每个项目中都运行迦太基引导程序 ,则即使它们的依赖关系可能是由以前的项目构建的,也可以建立依赖关系,这可以节省大量的构建时间。 也许与团队远程共享构建工件也很好。 由于我们的许多项目都使用Realm数据库,因此Carthage的空间利用率也可能更高一些-其工件占用大约1 GB的磁盘空间。 如果您有更多项目,则会很快损失很多空间。 仍然不是最好的 迦太基虽然极大地加快了我们的发展速度,但是仍然存在一些需要解决的问题。 也许现在可以通过使用正确的参数集来解决其中的一些问题,而另一些可以通过使用正确的工具(如Rome)来解决,但是那些提到的缺点可以很好地在迦太基内部集中解决。 分享是关怀 我们认为#sharing很重要,因此我们很乐意听到您如何管理依赖项。 您可以在下面给我们留下评论,或者在我们的Twitter,Github或Facebook上ping我们。

我见过天堂。 它是用JavaScript编写的。

为什么React Native是未来 我有一种怪异的软件描述方式。 而且您要么知道我的意思,要么您不知道。 有点奇怪,但是软件界面感觉很重 。 使用界面时,它可能会感到沉重,或者感觉到光线较轻。 两者都不比另一个更好。 这只是取决于。 铬很轻。 Safari感觉较重。 Firefox感觉最重。 可能是胡说八道,但这就是我的感觉。 在我的软件开发生涯中,最重的感觉之一就是在Xcode中使用Swift。 哦,好痛。 延时。 Kanye-West编译器永远不会让您完成。 过去几年,我一直生活在这个笨拙的世界中,以我所知道的唯一方式来构建应用程序:原始,手动,单平台代码。 本地化! 对? 当我了解React Native时,我感到怀疑。 一次用JavaScript编写代码,然后在iOS和Android上部署本机应用程序? -这很烂。 所以我忽略了它。 相反,最终写了两个单独的本机应用程序,一个在iOS的Swift中,另一个在Java / Kotlin的Android中。 这是用JavaScript编写的Web应用程序和基于Electron的桌面应用程序的补充。 (该应用程序是一个加密的跨平台笔记应用程序,因此每个平台上的可用性都是关键。) 这在一段时间内效果很好,但是有困难。 我可以编写Web应用程序和iOS应用程序,但是我对Android毫无经验。 实际上,我一生中从未使用过Android设备超过一个小时。 幸运的是,社区贡献者很乐于帮助构建基础知识,这使我放弃了从头开始编写应用程序的工作,而只是通过增量更改来维护它。 每当需要进行更改或添加功能时,我就需要进入三种不同的代码库,并用三种不同的语言编写相同的代码。 作为一个人,这并不总是很有效。 即使是最简单的跨平台更改,也可能需要一周的时间。 结果是应用程序永远无法拥有美好的事物。 例如,几个用户要求向应用程序添加密码和指纹锁定的功能,这是对具有安全意识的Notes应用程序的非常合理的要求。 但这的实现并非易事:首先,除了输入接口外,还需要密码设置接口。 然后,使用密码对离线用户数据进行加密。 然后,在移动设备上,指定何时应要求输入密码或指纹(立即或退出应用程序时)。 用Swift编写所有这些代码,然后是Java,然后是JavaScript的想法是一场噩梦。 我无法自己去做。 一定有更好的方法。 输入React Native 我必须描述为应用程序维护单独的代码库后的上下文和情感,以便您了解当我开始使用React Native时的愉悦感。 在用Atom (!)编写本机应用程序的第一周,我不屑一顾。 我简直不敢相信这是多么容易。 没有Xcode,没有Swift,可以立即重新加载更改,使用易于使用的JavaScript编写代码-我当时就在天堂。 在编写代码时,我会并排放置iOS模拟器和Android模拟器,并花了一半的时间完全无法相信一切正常。 我从来没有想过, […]

WinAPI IOCP编程:可扩展文件I / O

在本文中,您将简要了解I / O完成端口(IOCP),以及通过使用I / O请求复制带有文件的文件夹的简单C ++实现。 我们希望本指南对具有C ++和Windows API基本经验的人有用,并能帮助他们学习WinAPI IOCP编程的基础知识和某些特定知识。 总览 I / O完成端口是使用较早分配的线程池来处理多个I / O请求的灵活方式。 而且,它们可以避免由于切换上下文以及工作线程太多或太少而导致的性能损失。 队列内核对象位于IOCP的基础上,该对象用于存储I / O完成数据包。 尽管数据包按照FIFO顺序放入IOCP队列中,但可以按照其他顺序取出。 创建IOCP并将其与文件句柄关联是通过CreateloCompletionPort API函数完成的: HANDLE WINAPI CreateIoCompletionPort( _In_ HANDLE FileHandle, _In_opt_ HANDLE ExistingCompletionPort, _In_ ULONG_PTR CompletionKey, _In_ DWORD NumberOfConcurrentThreads ); 阅读全文:WinAPI IOCP编程:可扩展文件I / O 撰写人: 安德鲁·季莫申科 Apriorit的软件设计师

使用Decodable进行JSON解析

JSON是通过网络发送的最常用的数据格式。 在Swift 4之前,使用JSON是iOS的头疼事。 Apple提供了JSONSerialization类来处理JSON响应,但是JSONSerialization的问题在于,它只是将字符串响应转换为合适的NSArray或NSDictionary对象。 将字典转换为对象快速类别或目标C类是我们的责任。 所有这些手动工作都由一些非常流行的第三方库(如SwiftyJSON , JSONShootout等)解决。SwiftyJSON是我的最爱之一。 所有这些库在内部都使用反射,将JSONSerialization的输出转换为对象。 Swift 4通过Codable使一切变得简单,并终止了这些第三方库的使用。 可编码使我们能够解码和编码对象。 它可以与类,结构以及枚举一起使用。 在本教程中,我们将专注于解码响应并将其转换为快速对象。 以下是我们将在本教程中使用的一些关键术语。 关键术语 可腐烂 协议是可解码的。 如果要从JSON解码对象,则您的类或结构需要符合此协议。 2.可 编码 该协议是可编码的。 如果要将对象编码为Data,则您的类或结构需要符合此协议。 3.可 编码 可编码是可编码和可解码的组合协议。 如果您需要在应用程序中对对象进行解码和编码。 与其同时符合可编码性和可解码性,不如使其符合可编码性。 4. JSONDecoder 用于从JSON数据解码对象。 注意。 您的类或结构必须符合Decodable协议。 5. JSONEncoder 用于将对象编码为数据。 注意。 您的类或结构必须符合Encodable协议。 可编码有一些限制。 它仅限于某些基本数据类型,而有些则是高级数据类型。 这是我们在声明支持可编码的类时可以使用的所有数据类型的列表。 让我们从例子开始。 解析简单对象 班级人员:可腐烂{ 变量名称:字符串 变量年龄:整数 } 让jsonData =“”“ { “名称”:“ John Doe”, “年龄”:24 } […]

你的故事会是什么? 满足20天的代码:Swift Playgrounds项目,卢旺达,2016年。

我们只用一台iPad做到了。 想像一下我们可以做什么2。 “最后,我们只为没有抓住机会感到遗憾。” 令我感动的是,我永远不会忘记那一刻在旧金山机场的那一刻,我的脸上露出笑容,并为那些等待我到达卢旺达教他们快速编程语言的孩子们感到内心的喜悦。 错过我上学的第一个月是一个艰难的选择,以便我可以向这些英雄孩子们教授快速的编程语言,但是从来没有比这更好的时间了,这要感谢苹果发布了Swift Playgrounds,他们做到了每个人都可以轻松地在iPad上,尤其是发展中国家的孩子们学习如何编码。 多年来,我一直有这个主意,尽管我不知道在快速操场之前会教哪种技术,但现在我必须决定是否要帮助塑造我积极成长的世界,还是留下来。 因为我的学期已经开始,所以我花了一个周末试图确定是否是合适的时间。 我一遍又一遍地观看“疯狂的人在这里”的视频,除了走动,别无他法。 坐在硅谷公寓的沙发上,日落时正看着窗外,就在那儿,我知道如果我借此机会去分享灵感,与这些孩子们在一起并帮助他们看到他们的潜力和能做什么,他们可能是推动人类前进的未来创新者。 他们可能有一天更早地改变非洲,发明有一天我们可能会喜欢的先进技术。 我不得不去。 我不能再否认了。 激情不仅仅是留下的意志。 我宁愿回头说“我不敢相信我做到了”,而不是“我希望我做到了”。我预定了飞往卢旺达的航班,以进行为期20天的代码项目。 我在土耳其伊斯坦布尔停留,追赶2015年在印度旅行时认识的土耳其朋友。 接下来的两天,我离开了土耳其,尽我所能去做:教6-14岁的孩子如何用Swift编写代码。 他们是快速学习者,对技术充满热情。 每当想到这些小孩子眼中的欢乐时,我的心都会融化。 令我惊讶的是,一个iPad如何改变了大约40个孩子的生活,激发了他们的积极性,并睁大了他们的眼睛,梦想更大,更远大。 他们具有改变世界的潜力,一次只需要一行代码。 他们只是从来没有机会做过像编码这样的事情。 他们总是准时,从不迟到,总是为学习更多而兴奋。 我很受启发。 是他们发光的时刻; 我喜欢它的每一点。 等一下加斯顿! 您如何在一个地方找到这些孩子? 注意:这些是由act4Rwand.org首席执行官兼创始人Lynda Weir赞助的学生。 在我离开之前,我与卢旺达教育部的技术部长(ICT)联系,教孩子们如何编码。 他对我的想法非常理解,随和和欢迎。 因此,我们计划尽快启动该项目。 在我们卢旺达的教育系统中,这将是最快捷的途径。 但是,我仍然想尝试一下这个想法,看看孩子们会如何享受它。 那时我联系了act4rwanda.org的首席执行官兼创始人Lynda女士,询问她如何使用act4rwanda的设施,在那里她帮助了无法继续教育的孤儿和弱势的卢旺达儿童。 她非常不可思议,非常善良,并且爱人。 她花费时间和资源支持这些孩子,以便他们拥有更美好的未来。 如果不是她,我将找不到这些聪明的孩子。 他们是她的孩子,他们叫她妈妈Lynda :) “灵感来了……” 如果我没有从启发我去做这个项目的开始,那可能不会有太大帮助。 2015年,我在印度KiiT计算机工程学院学习海外。 该学校有25个校区,还有一个大的部落孩子校区,他们帮助他们从基础到高等教育接受免费教育。 那只是25,000个孩子,他们渴望学习任何可以教给他们的东西。 当我自愿教他们法语时,令我惊讶的是:这些孩子学得很快。 他们可以捕获并完美发音许多法语单词,这对于几乎所有母语不是法语的人来说都是非常困难的。 我想在2015年12月离开印度,想做更多的事情。 我想有一天回去再次当志愿者,但我有学校责任。 那是我想到20天代码的想法,后来成为一个有趣的项目的时候。 我在整个学习过程中都很幸运; 我知道一项重大技术会影响世界,因此我努力回馈社会。 “给谁很多,将需要很多。” 改变世界,让世界更美好需要我们所有人。 […]

如何使用Appcode和Swiftify加快应用程序到Swift的转换

Swiftify提供了多种将Objective-C代码转换为Swift的方法。 如果您使用AppCode而不是Xcode进行开发,则可以使用Swiftify的AppCode插件直接从编辑器中转换代码行或整个文件的选择。 优点 AppCode的可扩展性使其成为一个理想的IDE,可将您的Objective-C项目逐步迁移到每个文件的Swift。 它使您能够: 同时转换.h和.m文件对,与Swiftify的Xcode扩展名不同,由于Xcode Source Editor扩展名的限制,Swiftify的Xcode扩展名一次只能处理一个文件。 借助内置的AppCode项目文件解析器,自动更新Xcode项目文件。 无需离开AppCode或使用外部工具即可完成整个转换。 安装插件 要安装Swiftify AppCode插件,请转到AppCode菜单,然后选择首选项 。 从侧面板中选择插件 ,然后选择底部的浏览存储库按钮。 搜索“ Swiftify”,然后单击“安装”按钮。 最后,重新启动AppCode以开始使用插件。 入门 在开始将代码转换为Swift之前,您需要添加API Key 。 转到Swiftify扩展页面,然后复制您的API密钥。 返回AppCode,打开AppCode> Preferences ,选择Tools ,然后快速化并粘贴您的API密钥。 在AppCode中打开您的应用,然后选择一个Objective-C类开始对其进行转换。 将Objective-C类转换为Swift AppCode插件可让您将代码行或整个文件中的一部分转换为Swift。 选择一些Objective-C代码,右键单击它,然后选择Swiftify> Convert Selection to Swift 。 您也可以通过单击“ 工具”菜单,然后选择“ Swiftify”来访问相同的选项。 要转换整个类,请从项目窗口中选择.h和.m文件,右键单击它们,然后选择Swiftify> Convert [FileName] to Swift 。 Swiftify将创建一个新文件,其中包含来自Objective-C标头的所有类和方法以及您选择的实现文件。 请注意,在这种情况下,Swiftify不会生成Objective-C桥接标头,因此,如果新生成的Swift代码使用Objective-C类,则需要手动创建桥接标头。 为了能够构建项目,请选择旧的.h和.m文件,右键单击它们,然后选择从Xcode项目中排除 。 这将从项目文件中删除对这些文件的引用,但会将它们保留在项目目录中,以防您需要再次返回它们。 确认一切正常后,可以继续从项目目录中删除旧的.h和.m文件。 选择下一个要转换的Objective-C文件,然后执行相同的步骤。 如果遇到错误,表明您的项目对刚转换的类的某个体系结构具有未定义的符号,请确保选择“运行”>“清理构建文件夹” ,然后再次构建应用,以进行清理构建 […]

基准化Xcode构建

最近,我开始使用相当大的iOS / Swift代码库,该库需要几分钟才能从一个干净的文件夹完成完整的构建。 由于我手头上有多个macOS工作站,因此我自然地好奇如何将它们与我最常见的用例(开发Swift iOS应用程序)进行比较。 有没有能让我在整整一整整的时间内少拿一杯咖啡的时间? 代码库 我用于这些测试的代码库具有以下配置文件: Swift文件: 223 Objective-C文件: 6 故事板: 35 Xcode版本: 8.3.2 安排:一个主要目标,有两个嵌入式项目。 测试方法 我使用的方法非常简单,围绕Xcode开发的计算机“实际使用”进行设计: 清理项目,手动删除整个DerivedData文件夹。 关闭电脑 重新开启电脑 打开项目 选择“通用ios设备”目标OS,然后构建项目(措施1) 清理项目,关闭Xcode,手动删除DerivedData(再次) 启动Xcode,再次构建项目(测量2) 我计划进行两次试验,以记录构建当前不在磁盘缓存中的项目的经验,然后在 macOS有机会将文件保留在磁盘缓存中之后再次构建它。 如下数字所示,这对两台基于SSD的计算机几乎没有影响,但对于具有Fusion磁盘的iMac却产生了巨大影响 。 对于所有试验,我确保计算机都使用交流电源,没有其他应用程序在运行-实际上,自启动每台计算机以来,除了运行XCode计时测试之外,我什么都没做。 我使用以下所述的三台不同的计算机进行了测试。 2015 15英寸(Retina)MacBook Pro Core i7 测试对象1是2015年的MacBook Pro,配备Core i7 CPU,SSD和16GB RAM。 这是许多认真的开发人员都会选择的非常标准的“开发人员工作站”。 实际上,我的测试确实支持这可能是开发人员(三个测试对象中)在功能和便携性之间的最佳平衡。 2015 27英寸(5K)iMac Core i5 测试对象2是2015年的iMac,配备Core i5 CPU,Spinning Fusion驱动器和32GB RAM。 这是我的“每日驱动程序”开发工作站。 虽然对于开发人员来说,带有旋转磁盘的Core […]

Swift 3:Salvando objetos em UserDefaults

Em muitos casos,nossasaplicaçõessãopequenas e salvam 1,2 talvez 3 dados。 Estes dados podem ser pequenos e简单类,自定义类和自定义类,在没有用户默认值的情况下,使用编码器。 徽标Google的相关信息,以及框架数据的框架,以及框架数据和核心数据。 Tudo is so para salvar um objeto com 2 ou 3 campos。 用户可使用简单的格式或用户默认值。 Primeiro vamos criar uma classe que pode ser“persistível”。 顺便提一下,对象是NSObject和NSCoding: Esta nossa classe Pessoasópossui um atributo / propriedade chamada nome。 Mas elenãoéobrigatório,克里,作为procedades quevocêquiser。 解码器在解码器中起作用。 示例,条件,条件: 重要说明:解码或解码正确的代码(解码或整数)。 Agora […]

数字排毒—尼克·库(Nick Kuh)访谈

在Mailbutler,我们很幸运能够帮助各行各业的创意人士和专业人士利用他们的日常工作流程。 我们想更深入地了解他们如何计划自己的一天,并寻求有关平衡数字时代工作与生活的建议。 在本采访系列的第一版中,我们采访 了住在布莱顿的iOS自由开发人员,屏幕跟踪应用程序 Mute 的创建者 Nick Kuh 。 Nick与我们分享了Mute背后的故事,他对数字排毒的看法,作为独立开发人员的工作与生活的平衡,以及他的Mailbutler选择使收件箱为零。 嗨! 我是一名独立应用程序开发人员,与妻子妮可(Nicole)和15岁的儿子芬(Finn)一起住在英国的布莱顿。 我以自由职业的iOS开发人员为生,为客户构建应用程序,但从侧面看,我奉行自己的使命- 使用我的免费屏幕跟踪应用程序Mute帮助人们打破他们的电话检查习惯。 您如何以及为什么开始开发iOS应用程序? 自2008年App Store推出以来,我一直在开发iPhone应用程序,当时Apple向第三方开发人员开放了该平台。 我一直都很有创业精神-14岁那年,我筹集了一些洗车钱,并开始在汽车后备箱销售中买卖Sega Mega Drives之类的游戏机,然后以盈利方式出售它们。 我在1999年自学了编码-最初是为了玩Flash游戏。 我很幸运,与其他一些自由职业者保持联系,并很快获得了为Channel 4 TV网站制作Flash游戏的报酬。 静音会激发您抬头,减少使用手机,集中注意力并保持身临其境的感觉。 当您达到数字排毒目标时,它会让您感觉良好,并有助于您养成习惯。 静音适用于需要一点帮助以减少手机使用的任何人:学生可以使用它来帮助他们保持专注和离开手机,家庭,夫妇和个人可以使用它来帮助他们在现实世界中保持联系。 是什么促使您设计静音? 作为一个15岁儿子的父母,我和我的妻子试图为Finn设置放映时间限制。 在又一次屏幕播放之后没收了Finn的iPad的第二天,我们一家人坐下来共进晚餐。 *哔哔哔哔*- 我的手机 -通知我一些毫无意义的推文或社交媒体更新。 我犯了要检查它的错误。 芬恩对我说:“你真是个伪君子。 我敢打赌,您花在手机上的时间比我在iPad上花的时间还多 ! 这就是激发我创造力的原因,他创建了一个游戏,将您的手机摘下来,以帮助家庭减少使用设备的时间。 从那时起,我的应用程序演变为静音-一种适用于数字排毒机的Fitbit 。 静音不会让您的统计数据感到羞耻,而是着手让您在从手机中抽出时间来时感觉很好。 恭喜您休息一下。 您如何定义“数字排毒”,为什么要这么做? 数码排毒可以是30分钟,几个小时,也可以是整天或整个周末。 我的时间对我来说是宝贵的,而且我经常感觉到平均一天中没有足够的时间。 当您不断保持联系时,生活是如此繁忙。 花点时间保持理智很重要。 我们的智能手机一直是分散注意力的来源。 想一想在工作期间收到邮件或电子邮件时,您需要花多长时间重新关注当前的任务。 我发现,关闭所有干扰因素会使我更加专注并完成工作。 研究表明,在智能手机和社交媒体上花费过多时间会导致抑郁和孤独。 与手机断开连接并与朋友和亲人面对面交流会带来真正的幸福-不是因为多巴胺引起的持久性动荡,而是因为您对最新自拍照的喜欢或发表评论所致。 引导我们完成您一生中的典型工作日。 您的工作流程中有哪些必不可少的应用程序或工具? 我通常的工作时间是从早上7点开始,在那里我花了几个小时专门研究Mute,然后才骑车进入办公室切换到客户工作。 […]

私人iOS Beta 0发行说明(2016年4月24日)

这些是NE SDK的第一个私有beta版本的发行说明。 这是我们使用NE SDK的旅程的开始。 它肯定还远未投入生产,它缺少一些功能,其发布的唯一目的是让您对我们的方法发表意见,并尽可能地将您(包括开发人员)包括在开发循环中。 第一个私人Beta版邀请已经发出,但我们邀请更多开发人员在每个发行版中尝试Beta。 前往这里注册您的兴趣并请求邀请。 项目状态 NEContextSDK还处于早期阶段,这是面向小型公众的第一个发行版。 对您来说,这意味着: API肯定会发生变化。 事情有时会崩溃。 请在邮件列表中报告这些内容,以便我们进行修复。 上下文的准确性不是很高,但是可以总体上了解我们的发展方向,并且可以很好地适应某些应用。 它尚未投入生产。 您的反馈意见可以帮助我们使SDK朝着对您有用的方向发展。 我们支持iOS 9.3。 您的应用程序必须至少定位iOS 9.3,否则将无法使用SDK。 已知的问题 一般 SDK代表您的应用请求位置和其他内容的许可。 我们发布的二进制文件是调试版本,这意味着它具有调试指令,因此比正常大小大。 记录和Info.plist 我们记录有关如何使用SDK以及产生什么输出的信息。 这些日志是匿名的,无法追溯到最终用户。 我们使用它们来提高上下文推断的准确性,了解开发人员如何使用SDK并查找错误和其他问题。 日志会定期上传到Amazon S3,因此您需要做一些额外的配置。 在Info.plist文件中,确保在某处具有以下设置: NSAppTransportSecurity NSAllowsArbitraryLoads NSExceptionDomains akamaihd.net NSIncludesSubdomains NSThirdPartyExceptionRequiresForwardSecrecy amazonaws.com.cn NSIncludesSubdomains NSThirdPartyExceptionMinimumTLSVersion TLSv1.0 NSThirdPartyExceptionRequiresForwardSecrecy amazonaws.com NSIncludesSubdomains NSThirdPartyExceptionMinimumTLSVersion TLSv1.0 NSThirdPartyExceptionRequiresForwardSecrecy XCode的屏幕截图: 基于位置的服务 SDK当前需要后台位置许可。 将来会有所变化,并且可以配置为您不希望SDK甚至不寻求许可的级别。 如果您未收到NEPlace,NEWeather或NEActivity的任何上下文更新,请确保以下内容: 在应用程序的Info.plist文件中,提供以下键: “ NSLocationWhenInUseUsageDescription”或“ […]