Articles of xcode

Storyboardable协议:更快地初始化基于Storyboard的视图控制器

我最近决定开始在Instagram上发布我的Swift编程语言经验。 该平台似乎只限于异国风情的度假照片和猫照片,但我相信它也可以用于承载惊人的视觉代码和构建应用程序的过程。 这里的挑战实际上是将好的代码和想法与呈现它们的美学方法结合在一起。 我的第一篇文章与情节提要有关,这是Xcode的可视化界面,用于构建具有漂亮的拖放功能的应用程序UI。 如果你问我的话,相当合适。 事不宜迟,请查看嵌入的帖子,如果喜欢的话可以给它一些爱,并在末尾查看完整的代码! 原始Storyboardable Instagram帖子 分镜脚本代码

XcodeのRun Scriptフェーズを无效にしてビルド时间を短缩する(スクリプト付き)

私が担当しているiOSアプリをXcodeでビルドすると,CarthageやCocoaPodsであわせて50が必要なくても49秒かかっていました。 RunのRun Scriptフェーズを実行しないようにして,ビルド时间が35秒短缩されました。 RunのRun Scriptフェーズは一度実行すればDerivedDataを削除したりフレームワークを追加・削除したりしない限り実行する必要はありません。ですのでそのフェーズを実行しないように设定することでビルド时间を短缩すること(CocoaPods1.2.0では代码签名をパラレルに実行できるようになるようなので,效果は小さくなると思いますが) 具体的には运行脚本フェーズの只有安装设定をオンにするとArchiveのときのみ実行されるようになります时才运行脚本。しかし常にオンにしておくとCIでの実行などで问题が発生します。また,手动でオン・オフを切り替えるのは面倒です。ですので切り替えるためのスクリプトを作成しました。 xcodeprojというGemが必要です。CocoaPodsをインストールしてある场合は既に入っています。 使い方はこのスクリプトに実行権限を与えて以下のように実行します。 change_run_only_installing.rb –only –project = MyProject.xcodeproj –target = MyTarget –phases =’迦太基复制框架’,'[CP]嵌入式容器框架’,'[CP]复制容器资源’ MyProject.xcodeproj,MyTarget,“迦太基复制框架”,“ [CP]嵌入荚框架”,“ [CP]复制荚资源”は自分の环境に合わせて変更してください。 – 只要 がオ指定すると仅在安装がオンになり,时运行脚本 -仅 を指定するとオフになります。 frのコマンドのエイリアスを作成したりAlfredから简単に実行するようにすると良いと思います。 をとgitフックを利用することでオフにすることが出来るかもしれませんが,それは试してません。 のスクリプトに问题を発见したら変更リクエストをお愿いします。

如何将字体导入Xcode(Swift 3)

因此,您正在构建自己的第一个应用程序……让我们用一些很酷的字体来增强UI效果! 这是6个步骤的操作方法。 第1步: 找到一个漂亮的字体并下载。 我使用DaFont作为我的个人徽标,并为该项目/博客文章找到了另一个漂亮的字体Ember。 我之所以选择Ember,是因为它在公共领域,但是您可以轻松地选择一种不错的字体,然后向其设计师发送一份体贴的捐款。 (我也非常喜欢Boquerón,但也许我会将其保存到另一个应用程序项目中)。 确保字体为TFF(TrueType格式)或OTF(OpenType格式)。 第2步:保存字体并将其拖到Xcode项目中。 将字体文件夹拖到项目中时,请确保“根据需要复制项目”。 第3步:单击您的字体文件夹,以确保它们包含在“目标成员身份”中。 步骤4:快速检查一下,您的字体在“构建阶段”->“捆绑资源”中吗? 步骤5:在plist中手动输入字体名称。 第6步:使用字体! 使用情节提要 ,在下拉菜单中找到字体。 以编程方式,在标签或文本项上选择font属性。 在下面,我将按钮的字体更改为“ Ember”字体。 给我留言,让我知道您决定将哪些酷字体导入应用程序! 资源: DaFont.com 1001字体 字体松鼠

CS 193P:使用Swift讲座1注释开发iOS应用程序

介绍 为了成为iOS的高级开发者,斯坦福大学的CS193p: 在Swift中开发iOS(9)应用程序是一门课程,它受到许多人的拥护,这与他们在iOS开发中的成功紧密相关。 需要注意的是,对于初学者来说,它不一定是最好的课程。 我刚刚在Recurse中心(Hacker学校)完成了一批工作,并且受到启发去解决远远超出我舒适范围的问题。 参加这门课程就是这样的壮举。 这些是我用来帮助我进一步了解材料并防止我不得不暂停并无限期播放视频的笔记。 许多幻灯片是通过iTunes U课程提供的。 笔记是给我的,实际上是对演讲内容的要求,但是我被鼓励分享这些笔记,因为事实证明它们对许多参加该课程的人也很有用。 我什至没有满足先决条件的一半,因此我怀疑我的笔记会很冗长,并且可能更适合像我这样的相对较新的程序员。 请在下面发布任何改进建议。 谢谢! 先决条件 iOS概述 演示版 你会学到什么? –您将学习如何构建“酷”的应用程序 –现实生活中的面向对象编程 先决条件 :主要先决条件是具有面向对象编程 (OOP)的经验。 满足要求的相关斯坦福课程为CS106A&B , CS107 , CS108或CS110 。这是斯坦福大学的高级CS课程。 核心操作系统在硬件附近,而可可触摸在用户附近。 iPhone正在运行UNIX ,因此它具有完整的多任务处理和文件系统。 构建应用程序时,您可以使用所有这些功能。 特定于移动设备的是Power Management和Keychain Access之类的东西(以确保人们不会访问不应访问的东西)。 UNIX上的面向对象层是 核心服务层,因此我们可以使用Networking , Multithreading或Preferences和SQL数据库。 此层中没有用户界面 (UI)。 具有讽刺意味的是,这个(多媒体)层非常重要,我们不会花太多时间。 该层包括视频,各种不同的音频框架,静态图片(如JPEG),用于2D绘图的Quartz API,用于3D绘图的OpenGL等。 在顶层,我们将花费大部分时间在此处,这是Cocoa Touch 。 它是用于构建用户界面的面向对象的API。 这些用户界面不仅限于屏幕上的按钮和滑块。 例如,它们包括摇动手机时的操作以及使用手机的方向作为输入。 它还包括动画。 我们没有时间来遍历该层中的所有对象,但是我们的想法是,我们了解的一些对象将具有使用它们的范例,这些范例可以应用于我们不熟悉的对象。 我们所做的一切都将在Xcode 7中进行,我们将始终专注于Swift。 与框架同样重要的是一种称为Model-View-Controller(MVC)的设计策略或方法。 […]

WWDC17 —回顾展

我们的两名开发人员Tim和Niall参加了抽奖活动,并获得了今年WWDC,苹果全球开发人员大会的门票。 Michael是他们不幸的iOS同事之一,就他们的WWDC经验以及iOS 11和Xcode的新功能采访了他们。 另一个不太幸运的同事杰西卡(Jessica)也加入了。 Niall,这是您的第一个WWDC,那么为什么不从给我们您对WWDC的总体印象开始呢? Niall(ND):很容易陷入炒作之中,我认为它会逐渐消失,但是这个地方的能量和对它感到非常兴奋的人的种类使你继续前进。 我非常喜欢它,整个活动,演讲者和场地。 今年是在圣何塞,是您第一次来圣何塞吗? ND:是的,我感到有点遗憾,因为它不在旧金山,因为我认为这是一个比圣何塞更有趣的地方,但是无论如何,您实际上并没有在场地外获得大量的时间-差不多全开。 蒂姆,这也是您去年第二次参加WWDC,请问该如何比较? 蒂姆(TC):我更喜欢圣何塞的场地。 一切都在一个楼层上,虽然紧凑但很大。 迈克尔(MB):那没有道理…… ND:感觉就像所有的东西都紧靠在一起,您真的不需要走太远就可以到达某个地方,但是无论何时到达任何地方,都有大量的空间-大厅很大。 “……您觉得很久以前就应该在那里的东西终于来了。” 就开发人员工具而言,最大的收获是什么? ND:我认为对我来说最大的改变是Xcode 9的一些更改,特别是新的重构工具,以及引入的一些生活质量更改,您认为应该有很长的时间时间前终于来了。 运行多个模拟器,进行无线调试对于Apple TV的开发将特别方便,并且还有其他一些优势,例如大大改进了代码折叠功能。 TC: iPad的新iOS 11功能给我留下了深刻的印象。 现在基本上在计算机上已经完整。 应用之间的拖放,改进了分屏显示。 MB:您认为这会让您想编写更多iPad应用程序吗? TC:是的,我真的很想尝试这种拖放式的东西,它在iPhone上的应用程序之间不起作用。 在第一个Beta中,我已经能够使其在测试应用程序中运行,但是他们在第二个Beta中禁用了它。 “我认为对于那些不住在命令行中的人来说,他们可能不需要太久的其他git工具,例如Tower或SourceTree。” 我和杰西卡都没参加会议,但是我们在家里一起玩,所以对您来说,杰西卡对您来说最大的好处是什么? 杰西卡(JC):我也非常喜欢重构方面的改进,这是我到目前为止一直在使用的主要内容。 显然Xcode更好,但是我在Android Studio中做了一些基本的事情,而这些东西在Xcode中是做不到的,对于Swift,您甚至不能做基本的重命名。 这是很简单的东西,但是却有很大的不同。 MB:到目前为止,我最喜欢的是Xcode 9中的新git功能。能够轻松浏览所有分支和标签,查看所有提交以及在完整的并排编辑器中查看差异是一个很大的事情。改善。 我认为对于不在命令行中的人们来说,他们可能不需要太久的其他git工具(如Tower或SourceTree)了。 TC:尽管如此,我认为它过于关注GitHub了-如果它更通用,那就更好了。 MB:是的,虽然我提到的东西可以在我们所有的git仓库中使用,但是我们在大多数项目中都没有使用Github,但是当然还有很多其他功能仅适用于GitHub,我想知道他们是否会为BitBucket添加类似的东西在未来的几年。 JC:所以您一直在使用Xcode中的git? MB:是的,实际上它是最棒的功能,我认为是后台获取,并突出显示远程文件更改的位置。 不必考虑这一点,只需在文件旁边看到一个小图标就可以了。 您认为Xcode或其他开发工具中还有什么值得一提的吗? ND:在大型项目中,Xcode 9的速度要快得多,搜索的速度要快得多。 TC:编辑器中的滚动确实得到了改善,滚动更大的文件的速度更快。 MB:还有一件事,我没有看到,但是您提到了Tim,我觉得听起来很棒,它是快照调试状态,您能告诉我们一些吗? TC:有时候您会发现一个错误,但是您不是一个要修复的错误,因此您可以暂停执行,拍摄快照并将其发送给另一位开发人员。 他们可以导入并运行它,然后从该状态继续。 不幸的是,这仅适用于SceneKit调试,但是仍然很酷。 我去过的每个WWDC,最大的欢呼之一就是他们一劳永逸地解决了我们所有的代码签名麻烦,而您提到他们今年再次做到了Niall? ND:是的,他们已经取消了从Xcode吊销发行证书的功能,因此希望这将减少意外吊销。 他们还更改了代码首选项中的“帐户”标签。 如果您在那里管理证书,它将为您提供各种证书的状态,并指出特定问题,例如证书是否在钥匙串中或是否已被吊销等。 MB:这次没有“修复问题”按钮了吗? […]

Swift的10个很棒的Swift功能-顽固的Swift反对者(第1部分)

在成为顽固的Swift支持者(和狂热的Objective-C防御者)之后,几个月前,我首先进入了我的第一个Swift专属项目。 该项目是一个相当新的项目,仅包含几千行代码,因此这是一次完美的机会,可以最终为Swift提供应有的诚实机会。 但是,为什么要解决没有破裂的问题呢? 这是一个合理的问题,无需妖魔化Objective-C的活力。 它为开发人员服务了三十多年。 那么,为什么最近又反派呢? 显然,像Objective-C这样的动态语言在这个世界上仍然应该占有一席之地。 另一方面,通过前述的动态性可以避免一整类错误,同时使以前认为不可能的编译器优化成为可能。 同样,活力/严格性辩论似乎是季节性的,有时会不时地交替进行。 我来了,我现在是坚定的专业型安全。 受函数编程的启发,Swift还强烈鼓励不变性,在我看来,不变性导致代码更易于编写和理解。 最后,由您决定Swift是否可以在您的应用程序开发工具箱中替换Objective-C。 但是有一点很清楚:苹果公司出于自身的原因已经停止改进Objective-C。 取而代之的是,仅应用改进来提供与Swift更好的互操作性(例如,最近,可空性和轻量级泛型)。 苹果公司未来的所有开发工作都将集中在Swift上。 跟随他们的领导并不是一个坏主意,如果您尚未开始,现在可能并不是一个糟糕的开始时间,因为苹果公司承诺在Swift 3后的时间框架内减少代码破坏。 如果您决定坚持使用Objective-C,则有10种Swift特权无法利用: 协议扩展的默认实现 通过后卫轻松提前归还 带有尾随闭包的更流畅的API 具有默认值的功能参数 使用基于订单的参数名称进行单行闭包声明 枚举轻松命名 扩展中的协议实现 在单个.swift文件中定义多个类/结构/协议/扩展名 自动生成结构中的初始化参数 内置对延迟实例变量的支持 我今天只有时间来参加前三场比赛,所以让我们开始吧。 1.协议扩展的默认实现 协议(其他语言的“接口”)“非常棒”。 它们是软件体系结构的组成部分之一,并且在每个软件项目中都有一席之地。 与扩展结合使用时,Swift的协议甚至更强大。 它们实际上是Rubyists所称的mixins:行为的一部分,可以将其添加到类中,而无需子类化。 以下示例取自我的用于Coordinator设计模式的开源工具包,称为CoordinatorKit。 考虑协调器和ComposableCoordinator协议: 它们只是简单地定义:任何协调器至少应具有start()方法,并且适合协调器层次结构的任何协调器应至少公开其子级数组。 此模型中的常见操作是按其类型查找子协调器,然后将其返回。 以下方法完成了该功能的重复执行: 为了避免在各处重新实现(或将其定义为公共功能),一种解决方法是创建一个抽象超类,该超类实现ComposableCoordinator并在此实现。 虽然可行,但有点代码味道,因为Swift没有正式的“抽象”类概念。 这种强制子类化也限制了用户,因为像大多数面向对象的编程语言一样,Swift只允许单继承。 Swift-way将在协议扩展中声明此重复功能: 任何符合ComposableCoordinator的类都将免费获得findChildCoordinator ()方法,而无需子类化。 因为这是面向协议的,所以您可以以不依赖约定的方式混合使用任意数量的功能,并且可以由语言和工具支持。 当然,只要SourceKit不会崩溃,Xcode就会在任何兼容的类上自动完成此方法签名(眨眼眨眼)。 2.轻松让守卫提前归还 在Swift中,对可选对象的处理非常重要,因为这是该语言保证安全的方式之一。 相比之下,Objective-C并未提供对nil值处理的任何保护措施,从而可能导致各种类型的与nil相关的崩溃。 尽管如此明确地说明了可选值可以提高安全性,但它会以无数个可选的if拆包if语句的形式增加程序员的开销。 值得庆幸的是,苹果公司通过引入复合if语句解决了if let嵌套问题,但是这个守卫let事情是什么呢? 通常,在执行方法之前,需要将多个可选值解开,以作为一种验证手段。 为防止多次重复if […]

如何在视频预览中使用AVFoundation分析帧

AVFoundation是Apple开发的框架,可在iOS上使用。 该框架用于创建,编辑和播放媒体内容。 它使开发人员可以直接访问摄像头和麦克风。 在本教程中,我们将看到如何访问摄像机流以在每个帧上执行操作。 注意: AVFoundation是一个高度自定义的框架。 例如,如果您有一个只需要拍照的应用程序,则应使用UIImagePickerController。 要在应用程序中配置AVFoundation,必须使用AVCaptureSession。 此类拥有访问相机和正确使用输入所需的不同配置。 它将链接输入配置(相机,麦克风),输出配置(照片,视频流,音频流)和实时预览。 每个类的体系结构如下所示: 以下示例基于以下类: WASSA是室内位置和计算机视觉领域的创新数字代理专家。 无论您是想帮助客户在建筑物中找到自己的出路,增强产品的用户体验,收集有关客户的数据还是分析某个地点的人流量和行为,我们的创新实验室都将科学的专业知识带给您最大的设计灵感根据您的目标调整解决方案。 在 – 找到我们: Facebook和Twitter 领英 的GitHub 我们的网站

在收到FCM推送通知时设置应用程序徽章iOS(Swift)

有效负载就是您的内容: 我们刚才所做的大部分工作都会在本地通知中替换触发器。 通知的内容可在有效负载中找到。 回到测试平台,您会发现: {“ aps”: { “警报”:“输入您的消息”,“徽章”:1,“声音”:“默认” } } 理想情况下,您的JSON文件应如下所示。 您只有4K的有效负载,因此在空间上浪费它已成问题。 发送有效载荷时,请避免步伐过快。 但是,很难以这种方式阅读。 看起来像这样更好: { “ aps”:{ “ alert”:“输入您的信息”, “徽章”:1, “声音”:“默认” } } aps是JSON字典,其中包含描述您的内容的条目。 警报条目可以是此处的字符串,也可以是描述设备上显示的警报内容的字典。 徽章给出了要在徽章图标上显示的数字。 声音播放默认声音。 您可以修改此有效负载以更改警报中显示的内容。 由于警报既可以是字典,也可以是字符串,因此您可以为其添加更多内容。 将有效负载更改为此: { “ aps”:{ “警报”:{ “ title”:“ Push Pizza Co.”, “ body”:“您的披萨准备好了!” }, “徽章”:42, “声音”:“默认” } } 这将添加标题和一条有关您的比萨准备就绪的消息。 它还会将徽章更改为42。 {“ aps”:{“ alert”:{“ title”:“ Push Pizza […]

为iPhone X创建自定义导航栏和标签栏

当苹果在iPhone X发布期间推出所有全新的边缘到边缘显示时,所有开发人员都可以预见,导航栏和标签栏将是此边缘到边缘显示中受影响最大的UI组件。 实际上,Apple已更新了iOS(iOS11),使其能够基于不同的iPhone模型自动呈现本机UINavigationBar和UITabBar 。 但是,为了创建自定义导航栏或标签栏,我们将必须手动处理这些差异。 在本文中,我将向您展示如何创建具有自定义背景图像的导航栏和标签栏,以适应iPhone X边缘到边缘的屏幕尺寸。 如果您不熟悉iOS11上引入的“ 安全区域布局指南 ”,建议您先阅读以下文章,然后再继续。 为iPhone X调整Apps UI时如何解决最常见的界面问题 只需在界面上进行一些简单的调整即可更新您现有的iOS应用程序以支持iPhone X边缘到边缘屏幕。 自定义导航栏 在安全区域中添加子视图 首先,将一个子视图(绿色视图)添加到视图控制器中。 为了演示,将按钮和标签添加到子视图中。 该子视图将成为我们的自定义导航栏。 让我们相应地设置自动布局。 NavBar.Height = 44 NavBar.Top = Safe Area.Top NavBar.Leading = Safe Area.Leading NavBar.Trailing = Safe Area.Trailing 请注意,我们设置的所有约束都在自定义导航栏和安全区域布局指南之间。 这是为了确保自定义导航栏中的所有UI元素始终位于安全区域内。 将图像视图添加为背景 我们需要的下一步是显示背景图像的图像视图。 在设置自动布局之前,请确保将图像视图放置在自定义导航栏的后面。 Image View.Top = Superview.Top Image View.Leading = Superview.Leading Image View.Trailing = Superview.Trailing Image View.Bottom […]

Firebase + Swift。 如何删除数据。

作为Firebase的“早期”用户之一,我建议将其实施到我所有客户的项目中。 我喜欢便利性,也喜欢Firebase的强大功能。 在这个故事中,我将说明如何使用Swift从Firebase删除数据。 假设我们已经构建了一个名为Post的社交媒体应用程序。 这是每个社交媒体产品中使用的非常常见的模型。 一个简单的例子可能是: struct Post {let userID:String let postID:字符串 让标题:字符串 let imageURL:字符串 } 例如,此帖子模型包含发布了该帖子的用户的userID,标题(和可选文本)以及一个imageURL。 存储更多的元数据(例如已发布该数据的用户的名称),也许是化身的链接,日期戳,位置等,将是非常常见的。 但是最重​​要的部分是postID。 postID是我们将用于存储和删除帖子的内容。 记住,我们需要postID(就像我们的userID)一样100%唯一,这非常重要。 2个具有相同ID的帖子会互相覆盖,并导致无尽的问题。 Firebase包含创建唯一子ID的功能,但为了使其变得简单,我们在这里仅使用1970年以来的毫秒数。软件开发中一个非常常见的变量。 并且在同一毫秒内独一无二。 扩展日期{var asUUID:字符串{ 让asInteger = Int(self.timeIntervalSince1970) 返回String(asInteger) } } 在我们的小助手扩展程序中,我们将创建一个String,该字符串可用于生成一个随机的postID,该ID也可以在生成帖子的日期同时工作。 再有,这种方法不能保证我们的帖子保持唯一性,因此不能扩展,因为自1970年以来,有2个用户可能在完全相同的毫秒内创建了一个帖子。对于拥有10亿用户的Instagram,我相信这很常见。 对于我们的示例,有2个假设用户没有。 我们可以通过调用以下内容来初始化对象: let post = Post(userID:user.userID, postID:Date()。asUUID, 标题:“用户输入的标题”, imageURL:“ http:// theLinkToTheImage” ) 上载post对象后,我们的Firebase结构可能如下所示,其中1535423643是Post对象的postID。 要遵循当前的方法,重要的是我们使用postID作为最后一个孩子来存储帖子。 例如: self.firebaseReference.child(“ Posts”)。child(post.postID) 如果现在要删除此帖子,则可以创建一个经理类作为帮助程序,我们可以调用该管理器类以单行删除帖子。 为不同的逻辑部分创建不同的类是一个很好的主意。 这种方法被称为“关注分离”。 它为我们提供了易于维护和测试的干净代码。 […]