Tag: iOS 11

在iOS 11中使用Codable拖放自定义类

介绍 我最近遇到了一个有趣的问题。 我为客户(学校)创建了一个mac应用程序,您可以在其中创建和管理学校提供的教师资料和科目(它们会定期更改)。 我创建的Mac应用程序具有一个带复选框的简单表格视图,您可以在其中为教师分配主题。 我正在使用Firebase进行所有操作,当它们从2.x迁移到3.x时,他们放弃了对macOS的支持。 尽管现在由于社区的巨大努力而再次运行,但我还是觉得做原生iOS应用程序是最好的方法。 解 我想创建一种将主题从一个表视图拖到另一个表视图的方法,从而将该主题分配给老师,如下所示: 但是我遇到了一个问题,我想不出将所需数据从一个表视图传输到另一个表的最佳方法。 我可以将主题的id发送到另一个表视图,但这意味着我将不得不重新获取主题或具有一些全局状态来查询。 我想要一个干净利落的解决方案。 输入: NSItemProviderReading,NSItemProviderWriting和Codable 使用这三种协议,我可以将Subject类编码为数据类型,将其作为ItemProvider传递,并将其用作UIDragItem ,然后在另一端重新实例化。 当用户启动拖动时,将发生以下情况: 表格视图将使用此方法向UITableViewDragDelegate询问UIDragItem func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] 此方法返回一个UIDragItems数组。 用一个NSItemProvider对象实例化一个NSItemProvider ,这是第一个挑战。 NSItemProviderWriting仅采用几种数据类型(NSString,UIImage,NSTextStorage,CNContact来命名),这是我们为了使我们的类创建项目提供者对象而需要采用的协议。 采用NSItemProviderWriting很容易,只有两个要求要处理。 第一个是writableTypeIdentifiersForItemProvider ,您必须在其中指定对象可以表示为哪种数据类型,并使用func loadData(withTypeIdentifier typeIdentifier: String, forItemProviderCompletionHandler completionHandler: @escaping (Data?, Error?) -> Void) -> Progress? 这是处理将类转换为上述属性中指定的数据类型的方法。 这就是Codable协议的来源。有了Codable,我们可以将对象编码为json数据对象,然后将其传递给项目提供者,然后使用NSItemProviderReading协议一致性在另一端对其进行解码。 如下所示,要使JSON编码和解码正常工作,您需要做的就是采用该协议。 显然,它有更高级的用法,您可能需要做更多的工作才能采用它,但是我将由其他人来解释。 //Subject.swift 最终课程主题:NSObject, NSItemProviderWriting, […]

iOS 11中拖放功能的简单示例

我们简要地看到了苹果几个月前在其WWDC中引入的拖放功能。 今天,我们将通过示例代码对功能进行更深入的了解。 我们将看到如何在视图和表视图中实现拖放功能。 创建一个新项目并添加2个选项View和TableView。 当用户选择“自定义视图”选项时,导航至CustomViewController并设计如下所示的UI。 在此屏幕中,我们将执行从一个imageView到另一个imageView的拖动,以及从一个textView文本到另一个textView的拖动。 首先,为imageView启用用户交互。 然后,我们需要使用DragInteraction委托为ImageView设置一个Drag交互。 仅在委托中,我们将指定要拖动的DragItem。 dragImageView.isUserInteractionEnabled = true dropImageView.isUserInteractionEnabled = true dragImageView.addInteraction(UIDragInteraction(delegate:self)) dragTextView.addInteraction(UIDragInteraction(delegate:self)) 准备好拖动对象后,将调用以下委托方法。 func dragInteraction(_交互:UIDragInteraction,itemsForBeginning会话:UIDragSession)-> [UIDragItem] 我们将拖动要拖动的imageview和textview,因此代码实现如下。 func dragInteraction(_交互:UIDragInteraction,itemsForBeginning会话:UIDragSession)-> [UIDragItem] {如果让textValue = interact.view为? UITextView {让provider = NSItemProvider(object:textValue.text!as NSString)let item = UIDragItem(itemProvider:provider)返回[item]}如果让imageView = interact.view为? UIImageView {保护let image = imageView.image else {return []} let provider = NSItemProvider(object:image)let item = UIDragItem(itemProvider:provider)return [item]} return […]

为iOS 11更新您的应用

除了功能开发和错误修复外,iOS开发人员还必须密切注意WWDC每年宣布的内容。 在发布的著名新SDK中,iOS开发人员将需要进行一些更改以保持其应用程序与平台兼容。 随着Swift升级到版本4,以及iOS SDK本身的改进和更改,开发人员需要仔细检查更改并制定策略来更新其代码库。 所有这些都不会破坏其现有的任何特征和功能! 一切都取决于项目的优先级:要使您的应用与iOS 11兼容,您需要做的最低工作是什么? 您可以向项目涉众或项目经理提出最简单的情况是什么? 重要功能是第一位的,其次是iOS 11带来的不错但不是必需的改进,从优化应用程序到视觉美感,这些将进一步丰富应用程序的交互和功能。 考虑到这一点,本教程将指导您逐步完成升级应用程序的步骤,并以务实的方式进行必要和可选的改进。 本教程的目标 本文将为您提供概述,以进行iOS 11应用更新,从架构更改到外观更改,以及App Store发布更改,这些更改都将进行。 此外,本教程将组织各节,从所需的必要更改以及所需的范围和工作开始,到不错但不是必需的功能,这些功能将通过iOS 11增强您的应用程序。 在本教程中,我们将介绍以下内容: 为iOS 11准备您的应用(和您自己) 建筑变化 App Store发布变更 使用者介面变更 在envatoTuts +上独家阅读本教程的其余部分

什么是iOS 11越狱?

苹果公司于一周多前发布了iOS 11。 用户现在可以尝试与iDevices兼容的第一个beta版本。 新更新包括一系列功能,其中包括一些技巧,这些技巧将使您的iDevice看起来比以前的任何更新都更类似于计算机。 但是,其中一些功能以前曾在越狱的iOS设备上可用,或者在Apple提出之前在Android方式上可用。 尽管iOS 11 Beta版本已在不久前推出,但已经被越狱者破解。 安全研究人员最近在2017年中国移动安全大会(MOSEC)上公开了iOS 11 beta 2越狱事件。 越狱显然是梁靓(腾讯热衷安全实验室)工作的结果。 腾讯基恩安全实验室是一个以安全为导向的小组,致力于与应用程序,云计算技术,台式机或移动OS等相关的前沿安全研究。 立即下载:iOS 11越狱 只要Keen Security Lab在安全领域开展业务,他们不太可能很快就将iOS 11的越狱事件发布给公众。 但是,他们有可能与苹果公司共享它。 与苹果公司共享iOS 11的越狱行为,意味着可以在发布iOS 11之前了解到有关iOS 11潜在安全漏洞的意识。 苹果公司一直在与越狱社区玩猫捉老鼠的游戏。 即使在几次情况下,苹果公司也公开谈论过越狱者,他们修复了可用的iOS版本中的漏洞。 但是,腾讯基恩安全实验室能够入侵iOS 11无疑证明了可以毫无疑问地越狱iOS 11。 腾讯分公司Keen Security Lab使用的实用程序不仅允许用户越狱iOS 11,而且还允许苹果公司在不同移动类型上使用iOS 10.3.2。 但是,黑客没有提及出于机密原因而利用的漏洞。 iOS 11越狱视频指南

在Xcode 10.2和iOS 12中编写自定义通用框架

作为开发人员,我们希望尽可能多地编写可重用的代码集,以便以后可以将这些组件与多个应用程序一起使用,并使生活变得轻松。 注意 :有关iOS面试问题,请查看此链接—您必须在2018年准备的iOS面试主要问题 框架是模块化的和可重用的代码集,用作高级软件的组成部分。 框架具有三个主要目的: 代码封装 代码模块化 代码重用 使用框架的最好理由是它们可以被构建一次,并且可以无限制地重复使用! 入门 让我们从创建自定义框架开始,使其通用,以便可以在模拟器以及设备上使用它。 让我们打开Xcode并创建一个新项目。 选择iOS选项卡,向下滚动到Framework & Library然后选择Cocoa Touch Framework 。 为您的框架项目选择一个模板 2.输入产品名称并填写其他详细信息 填写完所有详细信息并按下一步后,您的项目就可以按以下所示进行构建了– 如果您构建项目,则它将生成TestFramework.framework作为产品,该产品将根据开发人员选择的选项支持模拟器或设备。 您当前的状态是一个没有代码的框架,这和没有糖的纯巧克力一样吸引人。 在框架中添加逻辑或功能,然后尝试构建它。 我们专注于创建通用框架,因此编写代码和资源部分留给开发人员去探索更多或等待另一部分。 现在是时候学习了,如何使自定义框架成为可在模拟器和设备上使用的通用框架。 3.创建新方案,选择项目目标→新建模式 请输入新的架构名称-ProjectName – Universal 。 现在是时候使用这种模式来创建通用框架了。 我写了一个“运行脚本”来生成通用框架。 选择项目目标 → 编辑模式 → 存档 → 后操作 → 按“ +” →“ 新建运行脚本操作” 。 然后复制粘贴下面的脚本代码。 UNIVERSAL_OUTPUTFOLDER = $ {BUILD_DIR} / $ {CONFIGURATION} -Universal […]

iOS 11来了

开始准备iOS 11的最佳时间是在6月的WWDC,当时苹果宣布了它,第二好的时间是现在。 根据最近几年的iPhone和iOS版本,我们预计将在9月的第一周或第二周举行活动,届时将发布新的iPhone型号,以及最终版本的iOS 11供开发人员使用。 预计新手机将在活动后的下一个星期五开始发货,并且绝大多数iOS用户将在此之后开始更新到iOS 11。 开发人员已经发布了多个beta版本,我们现在确信最新版本与下个月将向客户的iPhone和iPad设备发布的版本非常相似。 发布后的短短几天内,您可能会发现与其他任何iOS版本相比,iOS 11上的客户数量更多。 在撰写本文时,将近90%的活动iOS设备都在运行iOS 10,而几乎所有其余设备都在运行iOS9。这通常很容易吸引任何用户,并致力于开发以使您的应用程序在旧版本上运行,但我们的经验表明,与仅支持最新版本相比,这通常需要付出更多的努力,并且显然为更少的客户提供服务。 通过确保您的应用已为iOS 11做好准备,您的客户可以放心升级,因为您知道您的应用仍然可以为他们服务,因此您和您的客户可以享受iOS 11提供的所有安全增强功能和新功能。 如何为iOS 11做准备 为iOS 11做好准备的最好方法是为iOS 10做准备。如果您一直在维护应用程序并定期在新的OS版本上进行测试,那么继续使用iOS 11所需的工作可能很少。 Xcode 9中的11 SDK,您可以期望它可以正常工作。 但是,如果您没有及时了解最新信息,则需要注意一些事项。 不再支持32位 iOS 11是不支持32位架构的iOS的第一个版本。 这意味着旧版32位设备(iPhone 5 / iPad 4th Gen及更早版本)上没有iOS 11,也意味着iOS 11上没有32位应用程序。自2015年以来,Apple要求64位支持才能提交到App Store,并且应用程序能够在单个构建中同时支持两种体系结构,但是如果您一直坚持进行更新,那么您的时间就用光了。 在许多情况下,为64位体系结构构建应用程序可能就像更改构建配置一样简单,但是如果您的应用程序是使用第三方框架和库构建的,那么您也需要这些版本的64位版本。 对于大多数流行的库来说,这应该不是问题,但是如果您依赖于特定的版本,或者如果库的开发人员不在了,那么您将可以做。 视觉变化 iOS 11带来了一些视觉上的变化,使iOS变得更清晰,更受欢迎。 更大,更重的字体功能贯穿始终,最明显的是屏幕标题。 尖锐的边缘和轮廓为圆角和填充提供了空间,并且在许多地方甚至还提供了“ buttony”按钮的替换,取代了iOS 7的浮动文本链接。 卡界面出现在更多默认应用程序中,它们的圆角边缘,略带弹性的动画和足够的阴影都可以让您清楚地知道它们在空间上的位置以及何时可以滑动和拖动它们。 尽管自iOS 7以来,iOS的视觉语言并未发生太大变化,但自那时以来的逐步改进使iOS 11感觉像一个截然不同的操作系统。 如果您尚未保持应用程序界面的最新状态,那么在您的客户经常使用的系统应用程序旁边可能会感觉不合适。 用户可以快速学习最新的OS约定,并期望他们在所有应用程序中提供的功能–如果您不了解最新信息,则应用程序很快就会显得陈旧破旧。 为新设备做准备 通常的供应链泄漏,猜测和HomePod固件意外发布的“今年新动向”,意味着我们对iOS 11发行后出现的一些硬件变化有了很好的了解。 新的屏幕尺寸肯定会出现,但是如果您一直在使用自动布局,并且已经支持多种屏幕尺寸和方向,那么您的应用在新尺寸上看起来会很好。 […]

打开iPhone的本机屏幕记录

对于那些还没有听说过的人,Apple在iOS 11中包含了一个很棒的小功能,让您可以原生录制屏幕。 此功能非常适合展示您最新的iPhone应用程序功能或记录难以截图的可怕错误。 默认情况下它是关闭的,但是只需单击几下您就可以从控制中心访问它。 如何打开屏幕记录 →转到设置 →控制中心 →自定义控件 →单击绿色加号,从更多控件列表中添加“屏幕录像” →打开控制面板,将出现屏幕录制按钮。 对于我们当中的专业人士 →打开本机搜索 →输入“自定义控件” →单击绿色加号,从更多控件列表中添加“屏幕录像” →打开控制面板,将出现屏幕录制按钮。 Apple Insider提供了一个很棒的视频,解释了如何将屏幕嵌入视频https://youtu.be/tBA_HyL18JA

InputAccessoryView和iPhone X

2.现在单击contentView,然后在大小检查器中检查“安全区域布局指南”。 3.将元件固定到安全区域底部。 4.编译并运行。 您已解决此问题。 注意:如果仍然遇到问题,请确保 在 viewDidAppear(_ animated: Bool ) becomeFirstResponder() viewDidAppear(_ animated: Bool ) 或之后 调用 becomeFirstResponder() viewDidAppear(_ animated: Bool ) 。

如何在Xcode 9和iOS 11上进行无线调试

设置设备进行网络调试 调试通过WiFi或其他网络连接在iOS或tvOS设备上运行的应用。 注意:网络调试需要在MacOS 10.12.4或更高 版本上运行的Xcode 9.0或更高 版本 ,并且在设备上需要iOS 11.0或更高版本或tvOS 11.0或更高版本 。 设置iPhone,iPad或iPod touch的步骤 1.选择“窗口”>“设备和模拟器”,然后在出现的窗口中,单击“设备”。 2.使用避雷线将设备连接到Mac。 3.在左列中,选择设备,然后在详细信息区域中,选择“通过网络连接”。 Xcode与您的设备配对。 如果Xcode可以使用网络与设备连接,则在左列中设备旁边会出现一个网络图标。 4.断开设备连接。 现在您可以通过网络进行调试了。 注意:MAC系统和iPhone / iPad应该共享同一网络才能使用无线调试。 资源:https://stackoverflow.com/a/44383502/4935811

安全使用“安全区域布局指南”

从iOS 11开始,不推荐使用顶部和底部布局指南属性,并且Apple引入了安全区域布局指南。 顶部和底部布局指南是在iOS 7中引入的,其主要目的是引导我们将视图与根视图的顶部或底部对齐,以使我们的视图不会被顶部或底部的条遮挡。 顶部和底部布局指南由在UIView上定义的单个属性“ safeAreaLayoutGuide”代替(与UIViewController的顶部和底部布局指南相比)。 它是UILayoutGuide类的实例,这使得它非常易于使用,尤其是与布局锚点一起使用时。 如果您不熟悉UILayoutGuide,可以在我的文章“ UILayoutGuide终极指南”中找到有关它的详细讨论。 或者,如果您从未使用过NSLayoutAnchors,我也会写一篇有关它的文章。 安全区域布局指南 安全区域布局指南提供了一个不会被遮挡的视图区域,您可以将视图与其对齐以实现最大的可视性。 该区域根据顶部和底部条的可用性进行调整。 它是UILayoutGuide的实例,提供了一些属性来绑定视图。 这是有关UILayoutGuide的详尽指南。 与仅在视图控制器中可用的顶部和底部布局指南不同,安全区域布局指南在独立视图中也可用。 使用安全区域布局指南添加约束 在Xcode中: 您可以将视图与安全区域布局指南绑定,就像之前将其与顶部或底部布局指南绑定一样。 以编程方式: 添加安全区域布局指南非常容易。 启用/禁用安全区域布局指南 默认情况下,主故事板的安全区域布局指南已启用。 如果要在Xcode 9中创建新的xib或情节提要,则已经启用了安全区域布局指南选项。 通过进入Interface Builder的文件检查器菜单,然后取消选中“使用安全区域布局指南”选项,可以显式禁用此选项。 在文件检查器菜单中禁用“使用安全区域布局指南”,会将安全区域布局指南附带的约束替换为顶部和底部布局指南,或者如果是视图,则将约束替换为视图的顶部和底部约束。 更改安全区域 您可以重写UIViewController的AdditionalSafeAreaInsets属性来指定自己的安全区域。 更改安全区域也会为子视图也产生新的安全区域。 在上图中,灰色子视图的安全区域发生了变化,并使自身与超级视图的安全区域对齐。 绿色和红色矩形分别显示了我们根视图的安全区域和布局边距指南。 蓝色和黄色矩形代表子视图的安全区域和布局边距。 结论 安全区域布局指南利用了UILayoutGuide API的优势。 它易于在IB或以编程方式实现。 因此,该与我们的老朋友顶部和底部布局指南说再见了。