Tag: xcode

有效的Xcode堆栈视图方法

1 。 使用情节提要,创建一个堆栈视图,如图(1)所示。 将路线设置为“填充”,将“分布”设置为“均等填充”。 另外,为子视图设置间距,该间距对于iPhone和iPad看起来都不错。 设置好所有按钮后,请稍后使用这些值。 2 。 如图所示放置堆栈视图(图2)。 堆栈视图不需要大小限制 。 注意堆栈视图的位置。 约束使用尾随空格设置水平位置,并使用顶部空格设置垂直位置。 子按钮视图确定堆栈视图的大小。 您可能会想要调整堆栈视图的大小,然后将按钮放在其中。 我建议不要这样做。 这是一罐蠕虫。 3 。 将按钮或其他对象拖到“堆栈视图”中(图3a)。 然后使第一个的等于主屏幕的宽度(图3b)。 接下来,将宽度编辑为主屏幕的百分比。 注意0.09乘数。 这样做将使“堆栈视图”中的所有子代的大小都根据屏幕大小进行调整。 4 。 向子级添加一个约束(图4)。 选择“宽高比”并将其设为1:1。 这样可以防止按钮歪斜。 将此约束添加到堆栈视图中的所有子级。 这是一个包装。 堆栈视图和自动布局的这种基本方法在大多数情况下都有效。 寻找即将发表的文章,以了解IBM Watson,Apple CoreML和Google Colab如何合作确定外星人。 可在此处获取更多屏幕截图: 影片| 不是地球 www.notfrom.earth

如何在Xcode中显示构建时间

如果您曾经从事过一个长期项目,则可能要处理代码优化问题 ,也许只是为了减少 构建时间以改善例如项目的beta发布时间。 Xcode的问题在于它无法轻松显示构建时间,您必须进入Product-> Perform Action-> Build With Timing Summary,然后进入报表导航器以查看每个目标的构建时间。 还有另一种聪明的方式可以在Xcode中显示构建时间,每次我们构建目标时,都可以直接在活动查看器中显示它,我们只需要在窗口终端中键入它即可: 默认写com.apple.dt.Xcode ShowBuildOperationDuration是 现在关闭并重新打开 Xcode,每次构建目标时,您应该在Xcode的顶部(即活动查看器)中看到构建时间,如下所示: 启用起来非常容易,而且超级快捷,它应该适用于每个Xcode版本 。 请记住,这将始终 可见,因此非常方便,例如长时间监视构建时间。

Xcode:模拟GPS坐标

因此,我一直在构建的MIDI音序器应用程序具有使用CoreLocation的功能。 我设置了一些CoreLocation区域,这些区域会影响我的音序器的行为。 它太酷了! 唯一的问题:我怎么知道我的地区工作? 我不能在城市中走来走去,检查以确保该行为在每个GPS位置均有效,可以吗? 我的意思是,我可以。 这将花费很长时间。 因此,我玩了一下Xcode,进行了一次谷歌搜索,发现Xcode中的电话模拟器可以模拟位置! 当您的应用程序运行时,在Xcode菜单中转到Debug> Simulate Location。 查看所有可以模拟的位置! 如果您选择其中一个城市,然后转到模拟器的主屏幕,然后打开地图,您将在所选的任何城市看到自己。 现在,您可以通过在檀香山模拟自己来测试所需的任何功能。 或莫斯科。 但是我不知道当你去檀香山时你为什么会去那里。 而且这对俄罗斯也没什么。 火奴鲁鲁。 拜托 现在一切都很好,但是如果我们需要更详细地说明我们的位置怎么办? 如果我们不想去檀香山怎么办? 如果我们要测试特定的自定义GPS坐标怎么办? 或更进一步:如果我们正在为正在移动的用户测试某些功能,该怎么办? 而且,如果我仅在本博客的其余部分仅回答问题呢? 你会继续读书吗? 好吧,Xcode中还集成了另一个很棒的东西:.gpx文件。 这是一种XML模式,用于表示GPS数据。 让我们看看这些家伙如何工作。 首先,让我们创建一个新文件。 在Xcode中,转到菜单>新建文件,然后从“资源”下的菜单中选择GPX文件。 我们将GPX称为“蝙蝠洞”,因为我知道蝙蝠洞在哪里。 我摆脱了GPX文件中出现的注释,但是您应该有如下所示的内容: 您会在Xcode调试菜单的“模拟位置”选项中看到一个新选项:“ Batcave” 但是,我们的地图向我们展示了库比蒂诺: 现在,您可能已经看了一下那里的XML内容,然后想到:“嗯,我看到了纬度和经度的属性。 我敢打赌,如果我更改这些数字,我的位置将会改变。 行:是您设置自定义GPS位置的位置。 “名称”是您的自定义位置的名称。 但是这位是什么? 还记得我说过我们可能想要一种模拟用户随着时间在位置之间移动的方法吗? 时间!? Tiiiiiiiime !?

Xcode中的Rockin代码段

片段是Xcode的一个有价值的方面,直到最近我才开始关注它。 它内置在IDE中,可以帮助您更快地完成工作。 我有自己的常规任务和功能。 过去,我曾经将它们存储在Google文档中,并且在我工作的地方都可以调用它们……如果可以的话。 这是一个更快的方法! 要查找代码片段,只需在实用程序的右下方。 确保选择{}图标。 要创建新的代码段,只需选择要保存的代码,然后将其拖放到“代码段”窗格中即可。 这将生成一个窗口,您可以在其中指定一个有意义的名称和一个自动完成的快捷方式……太酷了! 现在,下次您需要自定义任务,函数或类时,只需开始键入快捷方式,其余的将由Xcode完成。 好棒!

IOS中的人脸检测

过去两天生病使我无法上班。 因此,我决定在iOS上使用OpenCV,最终完成了这个项目,我想与大家分享🙂 这个想法是使用基于Haar特征的级联分类器,该分类器在OpenCV中实现并用于人脸检测。 没什么新鲜的,我已经将各个部分放在一起并获得了以下结果。 在本文中,您可以找到使此工作正常进行的所有步骤。 我还提供了指向每个步骤使用的源的链接。 该项目的主要步骤: 导入OpenCV库并将其配置为xcode项目。 建立一个相机帧提取器,以获取每次可用的帧。 应用detectMultiScale来检测面部并显示结果。 下载最新版本的OpenCV。 你可以在这里找到它, 然后解压缩。 创建一个新的xcode项目。 拖放opencv2.framework文件 在项目内部(您可以创建libs文件夹并将文件拖放到内部)。 4.转到链接的框架和库 ,并确保已链接OpenCV。 如果没有,请按(+)->添加其他…->添加。 您还需要添加如下所示的库。 5.转到构建设置->框架搜索路径 ,并确保opencv2.framework的路径正确。 例如$(PROJECT_DIR)/ face_detection / libs 。 6.创建新的组 ( 文件夹 )并将其命名为class 。 7.内部课程 文件夹执行: 文件 -> 新建 -> 文件 …-> 可口可乐类 -> 名称 : OpencvWrapper , 子类 : NSObject , 语言 : Objective-C -> 下一步 […]

为iPad编写应用程序1

CrowdCam LLC技术总监Joakim Fernstad撰写 tl; dr完全可行,仍然! 在CrowdCam,我们喜欢向人们展示他们的照片,在夏天,我们认为为iPad创建新产品会很酷。 如果它也可以在iPad 1上运行,那将非常酷! 该产品称为SendFrame,它显示通过电子邮件发送到连接到iPad应用程序的SendFrame电子邮件地址的照片。 你可以在这里找到它。 从理论上讲,这一切都非常简单,而且iPad 1无法应付(实际上,正如它所显示的那样!)。 但是,iPad 1只能运行iOS 5,最新版本是iOS 5.1.1,这是4年的OS版本(更不用说设备本身是6.5年了!!),并且Apple已将iPad 1标记为旧设备,这意味着他们将不以任何方式,形状或形式支持它。 有几篇文章(例如this和this)可以帮助您确定如何为此旧OS版本开发应用程序,但它们并未提供完整的解决方案。 我发现它比他们描述的要容易,尽管您需要了解一些注意事项。 首先,这是我使用的工具: 运行El Capitan 10.11.6(15G31)的MacBook Pro iPad 1,iOS 5.1.1(9B206)带30针连接器 Xcode 7.3(7D175) Xcode 6.2(6C131e)<<魔术的一部分 所有开发人员都可以在Apples开发人员网站(2.5GB)上下载Xcode的早期版本,也可以在此处搜索“ Xcode 6.2”。 为什么我们需要Xcode 6.2? 因为它仍然支持调试iPad 1,所以您只需要跳过其中的一些步骤即可使其正常运行。 有关该应用的一些信息 正如我所说,我们的应用程序非常简单。 用户可以创建一个帐户,选择一个SendFrame电子邮件地址,然后查看传入的照片。 还有一些控件可以在幻灯片中来回移动,旋转照片和删除照片。 共有5个视图,它们使用常规的UINavigationController在它们之间进行导航。 这是情节提要的完美用例。 对于服务器请求,我使用由NSOperation控制的常规NSUrlConnection。 自iOS 4以来,此代码运行良好,没什么花哨的。 故事板 由于此版本可在旧版iOS版本上运行,因此我们不能使用闪亮的新故事板功能。 您可以将此故事板设置为与Xcode 6.2(“打开位置”)兼容,但该设置对我而言一直崩溃,因此我将其保留为Xcode7.x。 这使我们进入箍1: 使用Xcode 7.3在模拟器上进行代码,情节提要和调试。 使用Xcode […]

RxSwift + MVVM:如何提供ViewModels

介绍 自从我们开始在BlaBlaCar的Model-View-ViewModel(MVVM)架构中使用RxSwift以来,已经快一年了。 我们对结果感到兴奋。 我们用这种方法编写的代码更容易理解,维护,测试和扩展。 但是,最初的几周并不是小菜一碟:我们必须在MVVM + RxSwift架构的某些方面进行迭代,以使事情变得正确。 其中之一是将输入提供给ViewModel的方式。 让我们通过两种不同的方法向ViewModels提供输入(Rx事件)。 但是首先,让我们快速讨论一下ViewModels。 视图模型 ViewModel的公共合同非常重要。 您必须做到正确(出于多个原因): 它应该可插在任何View上,即,不是通过View的构建方式来定义ViewModel的公共合同。 提醒一下,拥有ViewModel的是View。 换句话说,View知道ViewModel,而不是相反。 它应该是可测试的。 最后,MVVM体系结构的最大好处之一就是使业务逻辑可测试。 MVVM具有绑定机制,因此让我们在RxSwift中加以利用。 设计ViewModel合同时的经验法则是,始终尝试将ViewModel视为一个简单的黑匣子,该黑匣子接受输入以产生输出。 说到Rx,这意味着ViewModel消耗了一些Streams的事件(输入)(大部分时间由View提供)来计算输出Streams(用于View)。 从那里,可以编写一个简单的协议来表示任何ViewModel应该具有输入和输出。 接下来,该协议有2种不同的实现,每种都有各自的优缺点。

创建适用于iOS 11的邮件垃圾邮件过滤器扩展。

在某些国家/地区,垃圾短信是一个真正的问题。 人们从餐厅点菜或参加购物中心的“幸运大抽奖”时,无辜地给出了他们的电话号码。 但是不久之后,他们每天都会遭到数十条促销短信的轰炸。 与电子邮件不同,这些广告文字中的许多没有取消订阅的任何机制,其中一些也可能是骗局。 您可以删除消息,或者拒绝呼叫,然后继续前进,但是一种更永久的解决方案是完全阻止这些人,从而防止他们的文本到达您,直到您另行决定为止。 感谢iOS 11的IdentityLookup框架。 Apple引入了IdentityLookup框架,该框架允许开发人员过滤不需要的SMS和MMS。IdentityLookup仅适用于来自未知发件人的SMS和MMS消息。 它不适用于用户“联系人”列表中发件人的消息或任何来源的iMessage消息。 当用户从未知发件人处收到SMS或MMS消息时,“消息”应用程序可以询问您的“消息过滤器”应用程序扩展,以确定该消息是不请自来的还是不受欢迎的。 您的应用程序扩展程序可以通过使用自己的内置数据和逻辑,或通过由关联服务器进行的分析来做出此确定。 第一步将打开Xcode(9.0+)并创建一个新项目。 然后从Xcode菜单中选择File / New / Target,然后选择Message Filter Extension。 在您的扩展中,有一个继承自Xcode自动创建的ILMessageFilterQueryRequest的类。 消息应用程序使用ILMessageFilterQueryRequest对象将有关消息的信息传递到消息过滤器应用程序扩展。 如果您的应用程序扩展可以确定该消息是否有害,则将其决策返回给ILMessageFilterQueryResponse对象中的Messages。 它也符合ILMessageFilterQueryHandling 具有单一要求的协议,即handle(_ queryRequest:context:completion 🙂方法。 在此方法中,传递了类型为ILMessageFilterQueryRequest的queryRequest对象,并可以访问消息的发送者和messageBody 。 要将邮件视为垃圾邮件,必须将ILMessageFilterAction的对象设置为.filter,其他 选项.none和.allow将无效,该消息将正常显示。 如果要防止显示该消息,则需要将操作类型设置为.filter。 其他两个选项.none和.allow将无效,该消息将正常显示。 以下是演示的代码段,如果包含关键字“交易”或“折扣”,则该邮件将被视为垃圾邮件。 在演示中,我将这些关键字设为静态。 将以下代码粘贴到MessageFilterExtension.swift文件中。 是的,我们已经完成了必要的代码!!! 下一步是使用任何具有iOS 11.0+的iPhone并在iPhone中运行扩展程序。 现在,从设置中启用邮件过滤。 请按照以下步骤在iPhone中启用消息筛选器。 •首先,通过选择所需的第三方SMS阻止程序,导航至“设置”>“消息”以启用该功能。 •在“邮件过滤”部分下,选择“ 未知和垃圾邮件” 。 •现在选择我们的应用程序,您将看到一个弹出窗口,其中包含与隐私相关的警告消息。 点击“ 启用 ”以在运行iOS 11的iPhone上激活垃圾邮件SMS过滤。 现在,从未保存的联系人发送包含关键字“折扣”或“交易”的邮件,您将在“ 邮件 ”应用中将该邮件作为垃圾邮件接收,而不会打扰您(无通知或声音)。 恭喜你! 您已经创建了一个应用程序,该应用程序可以阻止未保存的联系人发送的带有“折扣”或“交易”字样的消息。 我使用这个概念制作了App。 […]

今日扩展iOS Swift 5

标记:标记: Создаемновый 字符串文件 Называемего,допустим, InfoPlist。 Выбираемнашновыйфайлинажимаем, 本地化… Далеевыбираем,например,俄语 Послечегоставимгалочкунапротив 英语 Должнополучитсявоттак: Итеперь,наконецлокализуем

Xcode界面构建器提示和技巧

Xcode 8.2,界面构建器,情节提要,Swift 嗨,我想分享一些视图提示和技巧,如果您希望在界面生成器中放置设计,可以使用这些技巧。 媒体库 在“实用程序”部分(右边的一个)中,有“库”部分,其中有我们一直使用的“对象库”,在它的右侧,您可以看到“媒体”库,在该库中您可以更快地找到图像并进行拖放他们进入您的意见。 您的图像不应该出现在“资产目录”中,但是我注意到无法识别1x图像。 本地化锁 允许您查看部分或全部视图属性。 方便使用,避免意外修改,例如在布局或字符串上。 您可以从“ 编辑”菜单->“本地化锁定”锁定整个情节提要,也可以从Identity Inspector的“文档”下 锁定特定的视图。 嵌入/取消嵌入并安排 您可能要在UIView / ScrollView / stackView下将几个视图捆绑在一起,而不是先拖动新视图然后将其拖动到其中,而是可以选择它们,然后从edit-> Embed中选择一个选项UIView / ScrollView / stackView,您可以将场景嵌入到UINavigationController / UITabbarController中,除非它是Tab Bar Controller,否则它是导航控制器,只能嵌入Tab Bar Controller中。 另一种方法是选择包含的视图, 然后从编辑器中选择“未嵌入 ”。 请注意,自动布局约束将被清除。 排列 (向前,向后,向后和向前发送):选择一个视图,然后从edit-> arrange中更改其在同级视图(相同级别)之间的顺序。 重构到情节提要 您可以选择一个或多个场景,然后编辑->重构到情节提要,然后会要求您命名情节提要,并且您将拥有一个包含所选场景的新情节提要文件。 急救人员 这是一组可以应用于第一响应者的函数,例如TextField 。 已经定义了一些功能,例如undo,selectAll,copy等。 另外,您可以创建自己的功能。 您所需要做的就是像往常一样(但现在与First Responder连接)在情节提要中连接UIControls动作。 调色板 这是非常有用的功能,因为您将在项目中冗余使用某些颜色集,因此创建易于访问的调色板会有所帮助。 您可以从这里查看方法。 设计和检查 将UIView子类标记为@IBDesignable将告诉接口构建器在其属性发生更改时刷新视图。 尽管在更复杂的场景和更大的情节提要中,此功能可能会使编译器感到痛苦,并且您可能最终将其关闭😀。 将属性标记为Inspectable将使它显示在Attributes Inspector中,并允许您从界面构建器中编辑定制属性。 同时使用这两个功能可能非常适合原型制作。 […]