Tag: Xcode 8

如何将TextField添加到AlertView

版本 :XCode 8,Swift 3 您可以将TexFiled UI添加到IOS的AlertView中。 这篇文章将向您展示如何用几行代码来做到这一点。 这是我们要构建的: 创建警报和文本字段 添加文本字段以使用“完成处理程序”进行警报。 如果您对完成处理程序不熟悉,请在此处阅读 为Alertview创建动作 当前Alertview

解决React Native,macOS Sierra,Xcode 8和Fastlane升级问题

苹果启动了她的最新操作系统。 Xcode已更新为8.0版,第二天所有开发人员都在其开发计算机上修复其工具问题。 听起来很家庭吧? 这篇小型博客文章描述了解决此问题的方法,因为您可能陷入了React Native应用程序的困境,并在整个互联网上搜索如何解决它:)。 修复React Native的_refreshControl编译错误 首先是将_refreshControl的引用固定为RCTScrollView.m (位于node_modules中的文件)中的refreshControl : Xcode 8中的基本SDK 9.3 通过从Apple Developers下载页面下载Xcode 7(需要使用Apple ID登录),可以放回9.3版本的iOS SDK(随Xcode 7一起提供)。 现在,将Xcode应用程序解压缩到某个位置,但不要覆盖现有的Xcode(/ Applications / Xcode)安装! 将正确的平台SDK(右键单击,显示软件包的内容)复制到磁盘上的安全位置,例如:/ Users / /Developer/sdks/9.3/iPhoneOS.platform 。 最后,在当前Xcode应用程序中对此目录进行符号链接: sudo ln -s /用户/ /Developer/sdks/9.3/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9 3.sdk 选择9.3作为基本SDK 打开(如果已经打开Xcode,则需要重新启动)Xcode,转到项目的Build Settings,然后选择9.3。 使用Fastlane修复Xcode 8签名 最后,我们想修复我们的构建过程,使用Fastlane进行设置。 随着Xcode 8的发布,签名已更改,您必须手动设置“配置文件”(请勿打开“ 自动管理唱歌 ”)。 例如,您具有以下体育馆配置: 运行车道时,您可能会看到退出状态:65错误。 这是由Xcode 8设置中的无效签名引起的。 还要确保在项目文件中将所有PROVISIONING_PROFILE变量重命名为PROVISIONING_PROFILE_SPECIFIER 。 现在,在构建目标的“ 常规 ”选项卡中选择正确的“配置文件”: […]

分析iOS应用中的内存使用情况

自2007年以来,iPhone的结构或配置都发生了翻天覆地的变化。 内存(RAM)在2018年从128 MB增长到4GB,而存储从4 GB增长到256 GB。 然而,无论我们使用哪种操作系统,在为任何智能手机应用程序开发时,内存仍然是一个值得关注的领域。 在开发适用于iOS应用程序的日志记录框架时,主要基于内存管理,我想到了多个问题: 我的框架使用了多少内存? 我是否在主存储器中保留了太多数据? 是否有内存泄漏? 客户端应用程序是否会由于RAM利用率高而因压力负载而崩溃? iOS中的垃圾收集如何工作? 是否有类似于Java中的GC的GC? 让我们讨论每个问题并解决它们。 我的框架使用了多少内存? 我是否在主存储器中保留了太多数据? 方法1 当我们调试任何iOS应用程序时,XCode会在调试会话中提供CPU,内存,磁盘和网络的使用指标。 要打开,请在左侧窗格中选择Debug Navigator(option)选项。 单击每个参数后,主屏幕将显示详细报告。 这是内存报告的样子: 尽管此报告看起来非常有趣且内容丰富,但它具有误导性并且缺乏详细的内存中断信息。 我们将在后面的部分中看到。 如果您注意到此屏幕右上方有一个小按钮,上面写着“仪器中的配置文件”。 点击那个。 它将打开“乐器”应用程序,该应用程序显示有关应用程序如何使用内存的更好,更详细的视图。 我们稍后会在博客中详细介绍Instruments应用。 方法2 我们也可以选择以Profile模式构建应用程序: 仪器应用会打开,询问我们配置iOS应用所需的方式。 根据需求,有许多选项可供选择。 对于内存使用情况,我们可以选择分配(详细显示内存使用情况)或泄漏(显示内存使用情况与泄漏) 在下一个屏幕上,单击“记录”按钮以开始分析和使用情况。 仪器 如维基百科所述: Instruments(以前的Xray)是应用程序性能分析器和可视化工具,集成在Xcode 3.0和更高版本的Xcode中。 我们可以使用上述两种方法之一查看Instruments中的内存使用情况。 屏幕将如下所示: 让我们尝试了解此屏幕的主要组成部分: 该图顶部显示实时内存使用情况。 默认情况下,显示“所有堆”和匿名VM的组合内存使用情况。 您可以通过单击旁边的+号来选择显示其他图形。 下表中有多列对我们来说非常重要。 类别定义了内存的使用位置 永久字节定义了应用当前在内存中保留的字节数。 这在定义我们当前使用的内存量方面很有用。 #Persistent传达了多个持久对象。 这些对象总共消耗了上一列中显示的字节。 #Transient传达了该应用先前保存但现在已释放的对象数。 它们不再被我们的应用程序引用。 在确定内存使用情况时,这可能并不重要,但可以概述应用程序过去如何使用内存。 总字节数是一个令人误解的数字,将持久性和暂时性字节合并在一起。 仅当您想知道自应用程序运行以来使用了多少内存时,这才有用。 […]

UIWebView

所以……API和URLSession非常棒,特别是要求提供您所需的信息等,但是,如果您将应用程序的页面或部分专门用于网站的一小部分,该怎么办? UIWebView只需将您想要的网站加载到Webview和TADA中,就可以将Web内容嵌入到您的应用程序中! 在那! 使用UIWebview的最简单方法是拥有一个空的视图控制器,然后将UIWebView嵌入到视图控制器中 现在将Webview放在视图控制器上,添加必要的约束,然后将其作为UIWebview的Outlet连接到与其关联的视图控制器类。 在此示例中,我将使用youtube的嵌入视频,因为对于该特定应用,我们需要每部电影的预告片,但我们不必加载整个youtube页面,而只需加载嵌入的视频。 使用youtube视频及其观点的妙处在于youtube已经为您提供了其视频的尺寸,因此我们不必计算其确切位置和视频大小。 我们首先需要此特定youtube视频的URL,因此请创建一个包含该URL的变量。 现在,在“ /”之后,URL中的字符对于每个视频都是唯一的。 在这个特定的应用程序中,我通过api调用获得了这个唯一字符,该字符串使我可以完成一个唯一字符字符串。 由于Web视图正在处理互联网,因此我在此处放置了一个主要队列。 Webview带有一个名为loadHTMLString的函数,它就是说,它加载您请求的Web内容,以及嵌入到视图控制器中的Web视图的框架,高度和重量。 现在应该加载您的Web视图,并为您提供所需的特定内容! 我强烈建议您使用UIWebviews,因为它不仅可以使您的应用看起来更加专业和智能,而且将不同的网站嵌入到您的Web视图(任何网站)中也很有趣,因此用户仍然可以进入该视图webview并像在该网站上一样使用它。

比较NSCollectionView和UICollectionView#2

在本文中,我将讨论分别为macOS和iOS准备内容容器的区别。 对于那些来自iOS界的人来说,UICollectionView自iOS 6起就是一个很长的组件。它广泛用于显示具有不同布局的内容,例如网格,基于行或任何自定义布局。 数据源协议 DataSource协议用于提供集合视图所需的数据和视图。 在iOS中,有两种必需的方法来构建最小的UICollectionView。 collectionView(UICollectionView,numberOfItemsInSection:Int) collectionView(UICollectionView,cellForItemAt:IndexPath) 第一个与macOS中的对应项相似,但第二个有所不同。 collectionView(NSCollectionView,numberOfItemsInSection:Int) collectionView(NSCollectionView,itemForRepresentedObjectAt:IndexPath) 很明显,第一个API用于指示该部分中的单元格或项目的数量(仅默认一个会话)。 第二个API是实际收集数据信息并配置视图组件的API。 从方法签名中,您可能会注意到差异。 iOS非常直接地创建项目,但是macOS却创建了这种奇怪的东西,称为“ Represented Object”。 这是由于传统支持。 自MacOS 10.5起,NSCollectionView实际上就存在了,而iOS版本是从头开始构建的。 创建现代NSCollectionView API的过程中有很多知识。 装载笔尖 为了简化和可视化开发过程,我们通常使用Interface Builder创建容器内容,该内容将包含在Nib文件中(另存为* .xib文件)。 在iOS中,我们还设置了一个名为Reuse Identifier的“桥梁”。 集合视图具有管理多个单元的内存使用情况的机制。 数据源方法将使用Reuse Identifier查找存储在池中的单元格。 在简单的情况下,所有单元都具有相同的标识符。 每次都会拉出一个单元,并根据后备数据存储内容配置视图组件。 它可以为单元格显示设置不同的文本字段或图像。 该Reuse Identifier将被注册到选定的Nib文件中,并在其中加载默认视图组件。 但是,在macOS中,工作流程略有不同。 它使用makeItem(withIdentifier identifier: String, for indexPath: IndexPath)方法创建项目对象。 一种简单但不可思议的连接Nib文件的方法是,将标识符设置为与Nib文件相同的名称。 例如, MyItem的标识符将查找名为MyItem.xib的笔尖文件并检索其内容。 要进行快速演示,您可以在此处观看YouTube视频。

克隆中型iOS应用程序-第2部分

注意:自从我开始撰写本系列文章以来,Medium已使用名为“ Stories”的新功能更新了其应用。 本系列基于以前的版本,该版本具有非常相似的UI。 更改ViewController的背景色 在处理导航栏之前,让我们更改视图的背景。 我们可以在ViewController.swift中通过更改view.backgroundColor属性来实现。 通过在Medium应用程序上使用方便的吸管工具,我们看到背景色应对应于(249,249,249)的RGB。 Swift中内置的UIColor构造函数使我们以一种不直观的方式创建颜色,但是幸运的是LBTAComponents库使用更好的构造函数扩展了UIColor类。 因此,在将库导入文件后,我们可以添加viewDidLoad方法 view.backgroundColor = UIColor(r:249,g:249,b:249) 如果您现在运行该应用程序,我们现在将具有与真实应用程序相匹配的灰白色背景! 自定义导航栏 现在该处理导航栏了。 为了提高代码的可读性和结构性,我们将使用一个名为setupNavigationBar的新方法来封装本节中的所有代码,该方法将在viewDidLoad中调用。 我们可以先处理背景色,恰好是纯白色 navigationController?.navigationBar.backgroundColor = .white 如果运行该应用程序,您会发现颜色有些不对劲。 这实际上是因为默认情况下,该条设置为半透明。 我们可以简单地改变它 navigationController?.navigationBar.isTranslucent = false 现在背景看起来正确了。 现在,我们将“中”徽标放置在中间。 我在Github存储库中包含了徽标的切口。 让titleImageView = UIImageView(image:UIImage(named:“ medium_logo”)) titleImageView.frame = CGRect(x:0,y:0,宽度:34,高度:34) titleImageView.contentMode = .scaleAspectFit navigationItem.titleView = titleImageView 我们首先使用Medium徽标(位于资产文件夹中)创建一个UIImageView。 然后,我们通过首先将封装视图的框架设置为所需的大小,然后告诉图像缩放以适合该框架(通过.contentMode属性),来设置我们希望图像的大小。 最后,我们将titleView(已居中)设置为我们的自定义视图。 现在,让我们在右上角添加搜索按钮。 我们可以使用几乎所有的精确技术,而是创建一个自定义按钮并将其设置为导航栏的rightBarButtonItem。 让searchButton = UIButton(type:.system) searchButton.setImage(UIImage(name:“ search”)?. withRenderingMode(.alwaysOriginal),用于:.normal) searchButton.frame = […]

从Xcode 8中的Swift 2.3到Swift 3

不久前,我将Xcode转换为Xcode 8,这最终意味着我可以选择将整个项目转换为Swift3。虽然大多数转换是为您完成的(其中很多是对您而言),但是仍然有一些组件Xcode不能更改,您必须手动检查代码以自行查找和转换它们。 由于Swift 3上个月才问世,因此您在网上找不到太多的文档/语法,因为大多数人仍在使用它或尚未转换。 我发现有些东西与Swift的早期版本和Swift 3有所不同。其中之一是大多数“ NeXTSTEP”类都消失了。 “ NeXTSTEP”或NS — — —是Objective-C类,是可可框架的原始代码。 在进行API调用时,我记得在转换为Swift 3之前,我必须使用NSURL来获取URL并使用NSURLSession来创建互联网会话。 现在有了Swift 3,API调用的NS部分已经消失了,现在仅使用URL和URLSession。 我发现,尽管仍然有一些使用NS的类(例如NSDictionary,NSArray等),但Apple试图让他们的语言Swift摆脱NS。 我必须自己手动更改的另一个组件是实现核心数据时。 在Swift 3之前,我记得在获取数据时,我们必须将获取请求置于需要获取的任何对象上。 func fetchData() { var错误:NSError? =无 让userRequest = NSFetchRequest(entityName:“ Users”)做{ 让对象=尝试ManagedObjectContext.executeFetchRequest(userRequest)作为? [用户]如果对象?.count> 0 { 如果让对象=对象 { 个体=对象[0] } } }赶上{ 打印(错误) } 在Swift 3中,他们在获取请求后使用该胡萝卜符号,有点像将其包围在需要的对象上。 现在,将项目转换为任何版本的Swift或Xcode时最令人沮丧的一件事是,如果您在项目中使用了CocoaPods。 短期内,CocoaPods是来自其他程序员的第三方代码段,以多种方式帮助您的项目,例如动画,设计,颜色,方法调用,API,约束等等。 在项目中使用CocoaPods的问题在于CocoaPod必须支持您正在使用的版本。 因此,如果您在Swift 2.3中处理项目,那么CocoaPod也必须在Swift 2.3中。 由于Swift 3还是相对较新的版本,因此并没有很多CocoaPod更新到Swift 3,这使得您的项目无法运行,直到他们对其进行更新,或者您在项目中手动进入其源代码并将其转换为Swift 3。 最终,所有Swift程序员都将不得不转换为Apple提供给我们的最新版本,即使您遇到190编译错误,我们作为程序员也必须咨询这些更改。 不要害怕更改,这是非常有益的,因为您可以从Apple获得最新版本和更新,并且Apple所做的这些更改旨在帮助我们Swift程序员使您的程序运行起来更流畅,更容易编码。

比较NSCollectionView和UICollectionView#1

在将应用程序从iOS移植到macOS时,可以比较相似之处并移植代码。 自2015年使用OSX El Capitan 10.11(现称为macOS)以来,NSCollectionView已改进为现代API,看起来很像iOS的同级产品。 但是,仍有一些细微的更改,您需要进行研究才能注意到。 我将在以后的帖子中写这些。 这次,我将从内容容器的核心元素开始。 在macOS中,它称为NSCollectionViewItem。 在iOS中,您将找到它作为UICollectionViewCell。 内容容器的性质 为了指出这两个容器的基本原理,应从其祖先开始。 继承树如下所示: NSCollectionViewItem> NSViewController UICollectionViewCell> UICollectionReusableView> UIView 在macOS环境中,容器是一个控制器,它像其他View Controller一样具有一堆生命周期方法。 但是,在iOS中,它是一种视图,可以包含元素的子视图。 查看层次结构 为了继续上一点,默认情况下NSCollectionViewItem没有视图。 必须以编程方式或使用Interface Builder创建视图。 您可以在YouTube视频中了解有关如何构建此基础的更多信息。 在iOS中,它要简单得多。 假设您正在使用Interface Builder构建内容,只需将组件拖动到创建UICollectionViewCell附带的视图中即可 。 此外, UICollectionViewCell还具有一些访问视图的默认属性。 contentView-创建随附的默认视图 backgroundView —(可选)显示在单元格其他内容后面的视图 selectedBackgroundView —(可选)选择单元格时在背景视图上方显示的视图 在下一篇文章中,我将讨论准备此内容容器的区别。 参考文献 NSCollectionViewItem 项目是集合视图显示的最常见的元素类型,每个集合视图都必须位于… developer.apple.com UICollectionViewCell – UIKit | Apple开发人员文档 当一个数据项位于集合视图中时,UICollectionViewCell对象将显示该数据项的内容。developer.apple.com

Controls de Acesso-迅捷3

Swift 3 nos trouxe almumasmutançasde controle de acesso interessantes。 随着开放的不同,公共的,内部的,私人的,私人的,私人的,天真的,不可思议的礼节。 费利斯曼特(Felizmente)像新星一样简单。 佩剑(Squiber)军刀: São5níveisde acesso Excessem cinconíveisde acesso que controlam,a partir de qual arquivo de origem oumódulovocêpod pod acessar alguma coisa。 Abaixo segue uma brevedescriçãode cadanível: 开放的:准公开资格的公开资格等级,合格的成员资格 (。swift)没有法定资格或法定资格。 在“ 子类别”或“ 子类别 ”中覆盖 “公开” 类别,在 “公开” 类别中不 公开或不公开类别中的任何类别。 公众人士: Permite que mesmo acesso que是“ open”, qualquer arquivo […]

Xcode 8中Interface Builder中的大小类

自动布局非常适合根据约束条件对布局进行调整,但有时布局需要根据设备类型,屏幕尺寸或方向进行更重要的调整。 也许您可能想要: 巨大的iPad Pro屏幕上的字体大小比小巧的iPhone SE更大。 在横向或纵向模式下,iPhone上的视图布局将有所不同。 在您的iPad版本的应用程序中提供其他按钮。 当您的应用处于滑行或拆分视图模式时,可以不同地布局内容。 您如何对布局进行这些调整? 在iOS的早期版本中,您可能有多个iPad和iPhone的情节提要。 或者,也许您已使用设备方向或窗口大小来确定用于布置场景的环境。 随着越来越多的设备,分割视图控制器(在iOS 8中引入)以及滑动和分割视图多任务模式(在iOS 9中引入)使调整布局以适应其环境变得更加复杂。 为简化起见,Apple建议使用新的范例。 而不是根据许多设备类型,分辨率,多任务处理模式和设备方向来考虑布局,您应该集中精力将布局调整为两种宽度(分别称为紧凑型和常规型)和两种高度(也紧凑型和高型)。定期)。 这些区别称为尺寸等级。 然后,您可以使用这些尺寸类来定义或调整布局。 尺寸等级将所有不同的潜在水平和垂直构型减少为两种:紧凑型,适用于有限的空间; 并经常在有限的空间内使用。 例如,iPhone纵向定位被认为具有紧凑的宽度和规则的高度。 有关尺寸类别如何与设备和设备方向相对应的全面细分,请参见图1。 在定义尺寸类别时,Apple做出了一些有趣的决定,值得注意: 在横向放置时,iPhone(6+和6S +除外)的宽度仍被认为是紧凑的。 所有处于纵向或横向模式的iPad都被认为具有常规的宽度和高度。 这意味着iPad方向的改变不会触发尺寸类别的改变。 尺寸类别不仅描述了设备类型和方向。 在iPad多任务处理模式下(例如“滑行”,“分割视图”和“并排”(见图2))显示应用程序时,大小类还描述了应用程序的环境。 请注意,尽管某些iPad多任务处理模式的水平尺寸类别可能会更改,但垂直尺寸类别仍保持常规。 实际上,紧凑的垂直尺寸级别足以表明我们正在横向模式下使用iPhone。 您可以使用Size类做什么? 大小类不能替代约束和自动布局,而是可以协同工作。 您可以使用尺寸类别对布局进行许多更改,例如: 可以调整视图的大小或位置。 字体和颜色可以更改。 可以激活或停用约束(称为已安装和已卸载)。 可以添加或删除视图(也称为安装和卸载)。 Interface Builder中的大小类 尽管您可以根据代码中的不同大小级别调整接口,但最简单,最方便的方法通常是使用Interface Builder ,尤其是在Xcode 8更新中添加的功能。您可以在Interface Builder中简单地将布局和约束分配给特定的大小级别,并且尺寸类发生变化时,布局也会自动更新-无需编写任何代码! 您将探索如何在具有非常简单布局的应用程序中的Interface Builder中为不同大小的类添加自定义项,并显示带有标题和正文的文章。 首先,您将构建iPhone界面,该界面在标签中包含标题,在文本视图中包含正文(请参见图3左侧的iPhone布局)。 但是,这种布局在iPad上看起来不太好(图3中央的布局)。 要解决此问题,您将使用尺寸类来调整界面(右侧布局)。 请注意布局之间的细微差别,而不是细微差别-随着iPad的空间增加,您将要调整字体大小,边距大小并添加字幕标签。 让我们从设置基本界面和约束开始。 创建一个简单的Single View Application,并将其称为SimpleSizeClasses。 […]