Tag: xcode

如何在视频预览中使用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) 如果现在要删除此帖子,则可以创建一个经理类作为帮助程序,我们可以调用该管理器类以单行删除帖子。 为不同的逻辑部分创建不同的类是一个很好的主意。 这种方法被称为“关注分离”。 它为我们提供了易于维护和测试的干净代码。 […]

持续学习曲线(2018年7月)

7月3日,星期二 WrapBootstrap 7月4日,星期三 Swift Package Manager基础 完美的例子 将您的项目分成多个目标 7月5日,星期四 Server Side Swift入门:1.0 完美入门-完美模板 URL路由 完美的JSON API示例 处理JSON API中的传入数据 完善的JSON API POST示例 邮差 使用Postman进行API端点测试 API测试目标 SQL教程 7月9日星期一 使用Xcode 9进行重构 SwiftLint 迅捷格式 迅捷 资料来源 更好的iOS项目:如何使用Mint管理工具 使用Fluid将任何网站变成真正的Mac应用 UserDefaultsStore Swift中的自定义容器视图控制器 在GitHub上备份和同步邮递员收藏 Xcode 9生产力提示 星期二七月10 使用Swift为Apple平台构建本机应用的新方法 使用统一日志记录系统在iOS上进行调试 Swift中无子类的视图控制器 扩大您的数据人员。 统一你的公司 改变您对数据的看法 星期四七月12 作法:在Swift中使用JSON和可编码 带有匹配项的简单代码签名 先进的iOS体系结构:解决MVC,MVVM和VIPER模式的5个问题 迈布里奇 使神经网络再次变得不酷 iOS开发目录是涵盖iOS开发的博客和网站的完整列表 优化Swift的构建时间 objc […]

“派生数据”文件夹中有什么?

(本文最初是为我的博客 vojtastavik.com撰写的 ) 删除派生数据-每次Xcode行为异常而无明显原因时,都会有用的众所周知的技巧。 我仍然清楚地记得,当我的长辈第一次告诉我有关此基本的iOS开发技巧时。 随着岁月的流逝,并获得了更多的经验,我开始了解可以解决什么样的错误。 但是,我从未真正了解DerivedData文件夹中的确切内容 。 我决定改变这一点,这是我的发现。 注意: DerivedData的内容随Xcode版本的不同而不同。 我在这篇文章中使用了Xcode 10.0 beta 6。 我完全删除了现有的DeriveData文件夹。 然后,我从单视图应用程序模板创建了一个名为DDExample的示例项目,并在Xcode DDExample其打开。 Xcode立即创建一个新的Derived Data文件夹,其中包含两个子文件夹-一个名为ModuleCache文件夹,另一个带有项目名称的名称,后跟某种哈希。 顾名思义,这是Xcode存储预编译模块文件( .pcm )的地方。 模块是组织和共享可重用代码的方式。 几年前,模块已引入Clang(Xcode使用的编译器),主要是为了确保合理且可扩展的编译时间。 通常,对于源文件中的每个单个import ,编译器都必须包含并解析兆字节的附加头。 多亏了模块,标头仅被解析和编译一次。 您可以在其中看到两个名为AIEKQT3S8ZS7和391J0EBN0O3XH子文件夹。 这些文件夹的数量及其名称在您的计算机上很可能会有所不同。 每个子文件夹的名称均指从传递给编译器的参数计算得出的哈希值。 项目使用的唯一编译器配置越多,此文件夹中带有.pcm文件的子文件夹越多。 每个子文件夹都包含使用给定参数预编译的同一组.pcm文件。 有关此过程的更多信息: Xcode构建过程的幕后 。 值得一提的是, ModuleCache文件夹不是特定于项目的,而是在所有项目之间共享的 。 Xcode在这里存储在索引阶段收集的数据。 此数据用于项目内的搜索,快速导航和重构。 在Xcode 9之前,使用SQLite以易于理解的形式存储数据。 通过Xcode 9,Apple更改了索引数据的存储方式,现在正在使用LMDB。 没什么大不了的,因为您仍然可以打开并检查mdb文件。 但是,Apple使用的是某种哈希,而不是人类可读的密钥。 我无法进一步告诉您当前格式的工作原理,因为我找不到有关该主题的任何其他信息。 如果您有更多信息,请在下面发表评论或在Twitter上ping我。 在此文件夹中,Xcode存储按域划分的各种日志( Install , Build等)。 记住,我还没有构建项目,因此Build logs文件夹为空。 […]

僵尸和编码器

僵尸! 是! 谁说僵尸不是真实的,如果您是iOS开发人员,您会非常了解它们。 没有? 别担心,让我们来探索一下。 在某个时间点,我们在不知不觉中或有意将它们植入我们的代码中,而更糟糕的情况是我们想要杀死它们。 僵尸不过是一半死亡,一半释放或保留的物体。 在本文中,我们不仅会跟踪它们,而且会以一种更简化的方式进行处理。 您是否曾经在跟踪已释放对象时遇到麻烦? 您是否曾经遇到过崩溃,内容是“发送到已释放实例的消息”? 真正!!! 然后,本文适合您,让我们开始吧。 有时,二进制语言会给我们带来沉重打击。 您能从这个“ 0x10010d681 ”中猜出类名吗? 也许不是。 假设这是一个已释放的对象,现在难度级别将更加困难。 尽管Xcode为我们提供了一个很好的工具来理解和跟踪“ Instruments” 。 在拥有大量分析模板的地方,Instruments是一个很好的工具。 从“ 分配 ”到“ 泄漏 ”再到“ 僵尸 ”。 但是今天,我们将不再探索Instrument,而是采用一种更为简单的方式来追踪僵尸对象的内存历史记录。 知道答案总是更好,无论答案是什么 因此,首先我们将编辑项目的方案: 在“诊断”下,我们有各种“内存管理”选项。 选择“僵尸对象”,然后为“日志记录”选择“ Malloc堆栈”。 就是这样,我们已经准备好运行该项目。 现在,当我们遇到可能由僵尸实例引起的崩溃时,这就是我们要通过在xcode的控制台中输入以下命令来调试它的方法: a)(lldb)命令脚本导入lldb.macosx.heap 这将产生类似于以下结果:

自定义片段

veres cucesdo desarrollamos tenemos que escribir varies veces las mismaslíneasy esto multiplicado alnúmerode proyectos que llevemos。 由ejemplo uncódigopara担任档案管理员。 O coluso unaslíneaspara comentar elcódigo。 在Xcode nos da herramientas para hacernos la vidamásfácil。 Para este caso la herramienta encuestiónse llama摘录。 EsbásicamenteGuardar un undefinedo decódigopara aceder a el de formarápidaen cualquier momento。 1. Escribir elcódigo 斯威夫特写信给Esmplbéeejemplo muy sencillo写信。 […]

Swift:运算符优先级和关联性➕➖✖️➗

ลำดับความสำคัญก่อนหลังของ运营商 运算符的优先级和关联性เนื้อเน้นๆอยู่ล่างๆ 社交网络社交网络社交网络社交网络社交网络pantip等。 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1–1 + 1 + 1 + 1 + 1 + 1×0 ถ้าเจอแบบนี้กันคิดว่าผลลัพท์ของโจทย์นี้คือเท่าไหร่??? ก็มีตั้งแต่อบของแต่ละคนก็มีตั้งแต่0,14,16,17,…แค่วงเล็บหายนี่เถียงกันไม่มีที่สั้นสุดจะคูณก่อนบวกก่อนหรือลบก่อนจะทำหลังไปหน้าหรือหน้าไปหลังนู้นนี่นั้นแต่ละคนแต่ละคนท 555555คำถามคือแล้วอแล้วนไหนมันเป็นเป็นคำตอบที่ถูกหละ? วิธีการหาคำตอบจึงต้องมีหลักการคิดที่แน่นอนเช่นคิดเครื่องหมายไหนก่อนซ้ายไปขวาหรือขวาไปซ้าย ➡อบที่ถูกต้องจริงๆของโจทย์ข้อนี้ก็มีหลายคำตอบ➡️ เนื่องจากหลักหรือวิธีคิดก็มีหลายรูปแบบ……#เอ้าาาาาาา😱แบบนี้ก็ได้เหรอ Blogาอยากทราบเนื้อหาเรื่องนี้อย่างละเอียดแนะนำให้อ่านBlogของพี่NuuNeoi NuuNeoI –ทำไมต้องคูณหารก่อนบวกลบ? มาย้อนความหลังกันกับเรื่องราวของ操作顺序 数学运算符运算符运算符运算符运算符运算符运算符… nuuneoi.com แล้วเกี่ยวกับการเขียนโปรแกรมยังไงหละคุณ? 💻 dingน่นอนการ编码ก็จำเป็นต้องมีหลักการคิดเหมือนกันแต่สิ่งที่แตกต่างก็คือภาษาSwiftนั้นมีหลักและการดำเนินกนการที่ตกลงไว้แล้วรนรั้นดังน คำนวนหรือจัดการกับแต่ละ运营商อย่างไหร่ตัวอย่างเช่น 变数= 2 +((3%4)* 5) น่าจะนึกออกว่าnumber = 17🍌ๆ🍌ๆาแบบนี้หละ 变数= 2 […]

Swift:运算符:

操作员คืออะไร? มีอะไรบ้าง? งนการเขียนโปรแกรมเรเองพื้นฐานมากและควรเข้าใจอย่างมันอย่างดีเลยคือเรื่องOperatorหรือตัวดำเนินการซึ่งมีหน้าตาปรปาณนี้ + – * / => <%! ? Operatorาใครเคยเขียนยรโปรแกนมก็าจะคุ้นเคยกับเครOperatorองหมายพวกนพวกนอย่างดีOperatorา SwiftาษาSwiftจะมี运算符พื้นฐานส่วนใหญ่เหมือนกับภาษาCมีแตกต่างบ้างเล็กน้อยซึ่งเป็นส่วนที่เพิ่มเติมเข้าไปตัวอย่างเช่น范围运算符..< … nil合并运算符?? เป็นต้น งระเภทของ运算符ในภาษาSwift ู่ออกเป็นหลักๆอยู่3ประเภท 一元 二元 三元 1,一元运算符 逻辑非运算符! 一元减运算符- 一元加运算符+ 按位NOT运算符~ aryารทำงานของ一元运算符คือการกระทำหรือดำเนินการบน 目标เดียว☝️ เท่านั้น…..เอ้างงดิ555😱ดูตัวอย่างดีกว่า运算符ที่เป็นUnary aryนเครื่องหมาย ! var IAmCool = true IAmCool =!IAmCool <-焦点 งไม่ายหลังพึ่งรู้ว่าตัวเองไม่Cool(เรื่องสมมุติ😎)เลยใช้操作员! falseนCาfalseาตัวแปรเป็นค่าตรงกันข้าม假ค่นได้ว่ามีการกระทำการกับตัวแปร IAmCool เท่านั้น(มองเฉพาะ !IAmCool ) ! จึงเป็น操作员แบบ一元 2.二元运算符 ด้วยความที่คำว่าBiขึ้นต้นมาก็น่าจะเดาได้ว่าการทำงานของtargetสระเภทนี้จะกระทำบนtarget สองตัว✌️ ตัวอย่างเช่นเครื่องหมาย = var name =“ Kolathee” nameนได้ว่าเกี่ยวข้องกับทั้งตัวแปร名称และ字符串“ […]