Tag: 移动

Pixelmatters iOS开发工具包📱

服务 使用Fabric 进行实时分析, Beta分发和崩溃报告。 Testflight作为Beta测试分发框架。 Firebase是Google的移动平台。 包含数据库,数据同步,云功能,分析等功能,可帮助移动开发人员加快应用程序的开发过程。 我们使用Github作为版本控制的托管服务。 我们遵循Gitflow工作流程分支模型。 CircleCI是我们持续集成和交付(CI / CD)的首选。 Amazon AWS通过按需计费系统提供可靠且可扩展的云计算服务。 OneSignal推送通知交付系统几乎支持所有开发环境,并且超级易于设置和配置。 工具类 像大多数iOS开发人员一样,我们使用Xcode作为主要的IDE。 对于自动化的构建,签名和部署过程,我们使用Fastlane 。 Sourcetree是我们管理和与git仓库交互的首选工具。 使用CocoaPods进行 iOS依赖管理。 使用Postman测试API请求。 当编辑其他文件(如CocoaPods中的Podfile或Fastlane中的fastfile)时,我们倾向于使用Visual Studio Code (功能强大且轻巧的代码编辑器)。 最近,我们发现了Sherlock ,这是一个了不起的工具,可让我们在iOS Simulator上实时编辑约束和属性! 对于以编程方式构建UI,这是一个非常简洁的工具,其中包含许多功能。 如果您需要检查API使用的数据库,我们建议使用DBeaver,因为它非常易于使用和清理。 使用通知时, Pusher在测试它们时非常方便。 为了分析性能和内存泄漏, Instruments在这方面做得很好。 尽管很难熟悉它,但回报是值得的。 框架和库 Moya是用Swift编写的网络抽象层。 它封装了Alamofire ,使您可以以更抽象的方式构建网络层。 RxSwift是ReactiveX的Swift版本,ReactiveX是最强大的现有功能反应式编程API之一。 RxSwift社区每天都在增长,在考虑进入FRP世界时,它是ReactiveSwift的绝佳选择,而且我们认为这是更轻松的选择。 在iOS中导航? RxFlow将简化我们的生活。 这是一个基于反应流协调器模式的导航框架。 对于文本处理和模式匹配,我们使用Bumblebee 。 将文本转换为NSAttributedStrings 。 此外,它还提供降价支持。 如果您不想直接进入RxSwift或ReactiveSwift, Bond是功能式反应式编程世界的一个很好的起点。 在处理图像下载和缓存时, 翠鸟是我们的选择。 […]

SwiftSpringBoard:实现iOS主屏幕布局

SwiftSpringBoard是一个旨在重现iOS主屏幕图标配置和功能的项目。 对SwiftSwiftBoard的需求来自我们的一位客户,该客户在其iOS应用程序的主屏幕上使用集合视图。 该客户愿意提供Apple风格的主页按钮重新排序功能以及隐藏单元格的功能。 我们需要一个能够完成以下功能的组件: 以与在iOS主屏幕上显示应用程序相同的方式呈现项目 在屏幕的一个或多个页面上对元素进行重新排序(通过拖放) 从屏幕上删除元素 我们要做的第一件事当然是查找可以满足我们需求的可用框架。 如果您自己这样做,您可能会得出与我们相同的结论:首先,很少有框架与我们的目标相关,其次,截至2017年11月,大多数可用工具尚未得到更新。至少两年。 我们的库依赖于4种类型的对象: SpringBoardView:显示主屏幕样式项的视图(UICollectionView的子类) SpringBoardManager:实现视图行为核心逻辑的对象 SpringBoardDataSource:应用程序用来设置组件的协议 SpringBoardLayout:视图使用的自定义布局(UICollectionViewFlowLayout的子类) 为了最大程度地减少麻烦和不必要的重新实现(并最大程度地了解世界各地的知识),SwiftSpringBoard组件主要使用UICollectionViews中的标准行为:自iOS 9.0起,UICollectionViews本身就可以提供适合基本功能的重新排序机制需要。 此外,自iOS 2.0起,UIScrollViews即可使用分页。 这些功能结合在一起,为我们满足需求提供了坚实的起点。 我们设计了SpringBoardDataSource协议,以便经典UICollectionView机制的用户不会迷路。 首先,用户必须设置其跳板将在单个页面上使用的列数和行数。 为此,用户必须实现以下方法: 对于水平滚动,将逐列加载项目: 问题是,由于主屏幕中的分页是水平进行的,因此我们必须坚持水平滚动。 但是,正如您所看到的,垂直滚动将项目放置的方式与预期放置首页项目的方式相同。 因此,我们必须以垂直布局的方式自己计算项目位置。 计算项目位置本身意味着要处理项目的创建和删除,否则我们将保留对无用变量的引用,这些变量在使用UIKit的默认组件时肯定会导致崩溃,并且我们不会意识到将新项目添加到视图中,这意味着它们永远不会被显示。 布局还必须处理无法完全填充的页面,这是我们在主屏幕上可以看到的行为。 经过大量故障排除后,我们成功处理了布局及其几次更新。 但是组件的部分逻辑仍必须由用户处理,因为他是唯一可以完全访问加载在弹簧板上的原始数据的用户。 假设您的跳板数据由存储在一个名为dataContent的主数组中的数字数组组成 。 您对SpringBoardDataSource的实现应如下所示: 到目前为止,我们打算改进SwiftSpringBoard的几种方法包括: 动态列和行计数:这将是我们的下一个发展。 从今天起,用户必须手动设置其行数和列数以用于布局以正确计算尺寸。 我们希望仅基于布局的插图和间距属性以及项目的固定大小来自动计算行数和列数。 处理文件夹:尽管用户已经可以实现此行为,但我们正在寻找一种干净简单的方法将此功能添加到我们的库中。 一种选择是为打开的文件夹创建SpringBoardView的另一个实例。 如果您碰巧使用了我们的组件,我们真的会对您将如何使用它感到好奇。 如果您有任何问题/建议,请随时与我们联系。 Wassa是室内定位和计算机视觉领域的创新数字代理专家。 无论您是想帮助客户在建筑物中找到自己的出路,增强产品的用户体验,收集有关客户的数据还是分析某个地点的人流量和行为,我们的创新实验室都将科学的专业知识带给您最大的设计灵感根据您的目标调整解决方案。 在 – 找到我们: Facebook和Twitter 领英 的GitHub 我们的网站

Swift并行编程:基础知识

大约一年前,我的团队开始了一个新项目。 这次,我们希望利用从先前项目中获得的所有经验。 我们做出的决定之一是使整个模型API异步。 这将使我们能够更改模型的整个实现,而不会影响应用程序的其余部分。 如果我们的应用程序能够处理异步调用,则无论是与后端,缓存还是数据库进行通信都没关系。 它还使我们能够同时工作。 同时,它具有一些含义。 作为开发人员,我们必须了解并发和并行性等主题。 否则,它将使我们陷入困境。 因此,让我们一起学习如何并行编程。 同步与异步 那么,同步处理和异步处理之间的真正区别是什么? 想象一下,我们有一个项目清单。 在同步处理这些项目时,我们从第一个项目开始并先完成它,然后再开始下一个项目。 它的行为与FIFO队列(先进先出)相同。 转换为代码意味着:方法的每个语句将按顺序执行。 代码中的一个示例是简单的回调。 我们可以看到在处理回调之前最后执行的代码。 但让我们想象一下,我们可以同时使用多个工作程序。 他们每个人都将带一个盒子并一直携带。 这会大大提高我们的生产率,不是吗? 由于我们使用多个工人,因此增加的数量与我们拥有的工人数量相同。 只要至少有2名工人同时搬运箱子,他们就会并行进行搬运。 并行是关于同时执行工作。 但是,如果我们只有一名工人并且可能使用更多的工人,会发生什么? 我们应该考虑在处理状态下有多个盒子。 这就是并发性。 可以看作是将A到B的距离分为多个步骤。 工人可以将箱子从A拿到整个距离的中点,然后回到A抓住下一个箱子。 使用多名工人,我们可以使他们所有搬运箱子的距离不同。 这样,我们异步处理盒子。 如果我们有多名工人,我们将并行处理这些箱子。 因此,并行和并发之间的区别很简单。 并行是关于同时进行工作。 并发是关于同时进行工作的选择。 它不必并行,但可以并行。 我们的大多数计算机和移动设备都可以并行工作(由于内核数量的原因),但是您拥有的每个软件肯定可以同时工作。 每个操作系统都提供使用并发的不同工具。 在iOS中,我们拥有默认的工具,例如进程和线程,但是由于其在Objective-C中的悠久历史,因此也有调度队列。 处理 流程是您的应用程序的实例。 它包含执行应用程序所需的所有内容,其中包括堆栈,堆和所有其他资源。 尽管iOS是多任务操作系统,但它不支持一个应用程序执行多个进程。 因此,您只有一个过程。 查看macOS有点不同。 您可以使用Process类产生新的子进程。 它们与父进程无关,但包含父级在创建子进程时拥有的所有信息。 如果您使用的是macOS,下面是创建和执行过程的代码: 苹果公司对上述内容的实施称为“大中央派遣”(简称GCD)。 在iOS中如何处理? 优先继承 优先级反转的解决方案是优先级继承。 在这种情况下,只要线程1被阻塞,就将其优先级交给线程3。 因此,线程3和2具有较高的优先级,并且都可以执行(取决于操作系统)。 3解锁资源后,高优先级又回到线程1,它将继续其原始工作。 […]

NSScanner

Tengo侦察员que大豆和乌斯别克拉斯正规军。 信息安全法治之父的儿子之死 可以从苹果或苹果公司的NSScanner或Scanner上获取更多的信息。 是否需要定期扫描扫描仪? 墨西哥联邦储蓄银行在西班牙联邦储蓄银行/西班牙联邦储蓄银行/墨西哥联邦储蓄银行,西班牙联邦储蓄银行和墨西哥联邦储蓄银行,墨西哥联邦储蓄银行,西班牙联邦储蓄银行,西班牙联邦储蓄银行,墨西哥联邦储蓄银行埃斯塔格式。 虚幻的奇幻怪兽在礼仪上的使用和娱乐,无论是玩耍还是玩耍。 没有任何形式的行为 , 没有任何权利的 诉讼 ,也没有因诉讼而被罚款 。 Es en estos casos en los que Scanner seconvertiráen nuestra nuevo是主要的框架。 竞争性竞争者0..n礼节性交易 Ahora爆炸了我们扫描仪。 NSScanner对象将NSString对象的字符解释并转换为数字和字符串值。 您可以在创建扫描器的字符串时为其指定一个字符串,然后当您请求项目时,扫描器会从头到尾逐步浏览该字符串的字符。 查找干草或军刀或扫描仪的字符串和字符集 。 报名参加在埃尔卡纳德科多纳举行的体育比赛。 El segundo esunpresentaciónde los conjuntos de caracteres Unicode,或由unsotros定义。 您在扫描仪上看到的军刀… 公交车上的caden de texto en la que mos — 字符串 Como empieza lo que queremos公交车— CharacterSet 科莫终点站que […]

深度学习iOS 12和Swift 4的前五门课程

大家好, 你好吗? 一年中的那个时候(永远不会太晚),当我们所有人都开始为改善健康,改善自我和学习新事物制定目标时。 去年,我主要专注于Web开发方面,并花了一些时间学习React,Angular和Node JS,但是今年我的目标之一是探索移动世界,尤其是iOS和Android。 至少现在这是一个想法,我不确定在有限的时间内可以升级多长时间,但是我会尽力而为。 顺便说一句,如果您也有相同的目标并想成为一名iOS开发人员,那么您应该开始学习iOS 12,这是可以在iPhone和iPad上运行的Apple操作系统的最新版本以及Swift 4的Apple编程语言。创建iOS应用。 实现目标的重要一件事是制定计划并拥有实现目标的正确资源。 因此,我开始研究学习iOS 12的最佳方法,发现没有比参加优质在线课程更好的方法了。 我最初想到的是面对面的新兵训练营,但付出的成本和时间都很高,我不知道自己能做些什么。 在线课程解决了这两个问题,首先,它们比课堂培训或面对面的Bootcamp课堂价格实惠 (比较1000美元到10美元,是的,它们是如此便宜),其次, 没有时间投入。 您无需在任何特定时间去参加任何课程。 您可以随时学习。 如果您拥有智能手机和良好的互联网连接,您甚至可以在通勤时观看这些课程,这正是我的工作,对我来说真的很有效。 您还可以在舒适的办公室和家里学习,这就是为什么我认为在线课程是学习iOS 12或Swift 4以及任何新技术的最佳方式的原因。 但是,在线课程面临的最大挑战是选择正确的课程 。 互联网上充斥着免费和付费的在线课程,但并非所有课程的质量都很高。 如果您最终选择了中等水平的课程,那么您将浪费大量时间,有时甚至会感到无聊和沮丧。 因此,在本文中,我将分享一些最佳的在线课程,以学习iOS 12和Swift4。您可以选择其中的任何课程,我个人最喜欢的是iOS Bootcamp,以开始您的旅程。 前5名iOS 12和Swift 4在线课程 在分享在线课程以学习iOS 12和Swift 4之前,让我们先讨论一下iOS 12本身。 iOS 12是Apple开发的iOS移动操作系统的第十二个主要发行版,可在其iPad和iPhone上运行。 它是iOS 11的继任者,于2018年6月4日在该公司的全球开发者大会上宣布。 最棒的是,它附带了一些真正的前沿技术和API,可让您创建一些令人印象深刻且很棒的应用程序,例如Pokemon Go。 我正在谈论的技术包括Core ML 2和ARKit 2,Apple的机器学习和增强现实API。 选择详细解释这两个关键API的课程非常重要,特别是如果您想创建一个很棒的现代应用程序。 1. iOS 12和Swift-完整的iOS应用程序开发训练营 简而言之,这可能是世界上最好的iOS开发人员课程。 太好了,甚至激发了我去创建一门课程,这是另一个故事,但这是一门该死的好课程。 教练安琪拉(Angela Yu)非常有经验和热情。 她在Bootcamp上教授iOS开发,该课程是Botocamps的在线版本,价格在8000美元到12000美元之间。 […]

模块化iOS应用程序时的常见问题

您可能想模块化您的iOS应用程序,但是在某些情况下,事情可能会变得复杂起来 。 在这篇文章中,我将介绍在对现有的大型iOS应用进行模块化时遇到的最常见的问题,以及为解决或避免这些问题而采取的措施。 本文将主要介绍封装 , 循环依赖项, 图像 (捆绑), pbxproj以及将现有应用程序部分提取到框架中。 “好吧,我要在哪里创建这个?” 当您的应用程序中有框架时,您可能会想到的第一个问题是“您将在哪里为下一个功能编写代码?”。 正如我在上一篇有关框架的文章中所说的那样,您应该对框架进行分类。 您可以拥有一个Core框架,一些特定于功能的框架以及其他一些技术框架。 如果您的新功能或要开发的功能没有输入任何现有框架,则可能需要创建一个新框架。 请谨慎选择,因为如果您想更改此新功能或与该新功能交互 ,它肯定会在以后产生影响 。 “公共的,内部的,私人的?” 您将在您的鼻子前看到这个弹出窗口! 这是因为您需要声明您的类/结构或您在模块中定义的任何内容,并希望以public的形式从外部 访问它。 在开发不带框架的应用程序时,您通常不会过多地关注可见性或访问控制,因为默认情况下,Swift中的所有内容都是internal 。 内部意味着您可以在当前模块中访问它。 在开发模块时,需要从外部将要使用的类显式定义为public 。 这也迫使您拥有更好的代码封装并更好地定义应用程序结构 。 您只应将希望从框架外部 访问的类型标记为公共 。 其他所有内容至少应该是内部的 ,或者甚至是私有的(如果用于本地)。 因此,如果您想消除Xcode错误,只需将您的类标记为public即可 。 “让我们在需要的任何地方导入此框架!” 对,但是 ! 使用框架时,您必须要小心,否则您将面临循环依赖和许多麻烦 。 在您的框架内,您不能导入已经 直接或间接 导入第一个框架的第二个框架。 另外,您可能会遇到这样的情况,即功能框架(假设为Account )想了解有关另一个框架( Booking )的一些知识,以创建链接。 例如,您想根据您在“ 帐户”部分中的 偏好启动预订搜索 。 您想从帐户框架中启动搜索,因此您可能要导入Booking框架,但这是错误的,因为这将质疑这两个框架的分离。 那么,如何处理不应相互导入的两个框架之间的链接 ? 这种情况是一个有趣的问题,一种解决方案是使用称为POP […]