Tag: wwdc

优化HTTP实时流(HLS)以获得最佳用户体验2

介绍 为了更好地理解和利用AVFoundation功能,我观看了wwdc18会议502。我想传达优化HLS的信息,以提供更好的用户体验。 在上一篇文章中,我们学习了为KPI选择什么,以及如何减少启动时间。 本文,我们将介绍如何调查HLS播放中的停顿和错误 调查摊位 失速可能发生,并且确实发生! 听摊位通知 那么,如何检测您的应用程序停滞? 有停顿的通知。 AVPlayerItemPlaybackStalled是用于观察停顿的通知名称。 这是侦听停顿通知的代码示例。 检查AVPlayerItem状态,AVPlayerItem日志 当停顿时,您可以观察到一些东西来调查停顿。 首先,您可以检查AVPlayerItem.isPlaybackLikelyToKeepUp 发生停顿时, AVPlayerItem.isPlaybackLikelyToKeepUp为false ,您可以在那一刻开始加载指标。 其次,您可以从AVPlayerITemErrorLog , AVPlayerItemAccessLog查找详细日志。 如 错误说明 观察到的比特率和指示的比特率 减少失速 为了减少失速,应采取以下措施。 提供全套的比特率层 每个编解码器组合都需要自己的一组层 您的内容服务器和CDN必须 毫不延迟地提供媒体播放列表,片段和键 至少在每个目标持续时间更新实时播放列表 同步播放列表之间的不连续序列号 清楚表明服务器端故障 调查错误 我们如何调查错误? 调查方法很少 来自AVPlayerItem的错误和访问日志 来自AVPlayer,AVPlayerItem的错误属性 媒体验证工具来检测内容问题 AVPlayerItemErrorLog 这可能不是致命错误 详细信息在错误注释中 ErrorLog示例 “ 15秒内未收到媒体文件” “ HTTP404:找不到文件” “细分超过指定的变体带宽” “不支持的加密格式” AVPlayer,AVPlayerItem的“状态”属性 这可能是致命的错误 AVPlayerItem.Error结束播放并从播放器队列中删除项目 媒体验证工具 您可以使用媒体验证工具来发布内容 在开发者网站上可用 结论 […]

WWDC ’17序言:走出我的联盟

我认为冒名顶替综合症完全低估了我对这里的其他奖学金生对自己编程技能的观察的反应。 当他们只投入其他人工作的1/100时,就永远不要让他们缺乏在给定领域的经验,但是无论如何,它仍然可以做到。 在这里,第一个晚上和这里是我见过的应用程序:一个教用户如何在Swift中编写蛇的应用程序,以及一个用户可以与WWDC徽标中的化身进行交互的应用程序。 这是使这两个才华横溢的孩子参加会议的两个应用程序。 两者都是在两周内使用Swift游乐场制作的。 这两个应用程序为这些孩子提供了参加会议的门票,这显然是为什么。 这完全有道理。 没有意义的是我到底怎么参加了会议。 我可能在6个月内每天使用xCode编程2-3个小时。 唯一能记入我名字的应用程序即使是氢氧化钠也是如此基础(化学书呆子适合您)。 我提交给会议的应用程序不过是几个按钮,它们播放了一些自定义的声音循环。 鉴于我的初学者,我没有办法应该在这里。 尽管是成千上万的申请者之一,尽管与其他程序员的经验水平相距仅数年之遥,但我还是获得了奖学金。 我允许世界抛出一些令人惊讶的讽刺作品,但这一事实必须太好了,以至于无法实现。 然而,尽管患有这种几乎残酷的冒名顶替者综合症,尽管我诚实地认为奖学金选择部门的某人把我的名字放在了错误的篮子里,但我将吸收从这个机会中得到的每一滴。 我只需要记住:问很多问题,保持谦虚,闭嘴,这样您就可以从最好的中学到东西。

WWDC 2018 —使用Xcode和LLDB进行高级调试— 412

简介:我们应该避免在进行每个修复后重新运行代码,并继续进行调试。 今天我们将讨论以下几点: 更改/注入代码 打印汇编代码值 通过lldb命令添加符号断点 跳过代码行 自定义调试说明 观察点 在目标C模式下运行命令 创建命令别名 在LLDB中使用python脚本 从调试器更新动画 约束调试 更改/注入代码 要在断点处编辑值,请使用以下lldb命令 表达式variable_name =值 您还可以配置断点以自动完成此操作。 单击断点>编辑断点 注入代码:假设您忘记设置委托,现在不用重新运行,而使用相同的表达式来注入并继续调试。 打印汇编代码值 假设您已经为UIlabel setText方法设置了符号断点 现在,当遇到断点时,如何在汇编代码中看到调试点时如何打印值 在这一点上尝试这些命令并观察值 po $ arg1 po(SEL)$ arg2 po $ arg3 通过lldb命令添加符号断点 假设我们要在另一个断点被击中后激活一个符号断点。 然后,我们可以使用以下调试器命令创建一个断点。 断点集-一键式true –name“-[UILabel setText:]” 跳过代码行 为要跳过的行设置一个断点,然后只需将包含两行的按钮拖动到下一行即可。 我们想在每次点击时跳过此行,让我们为其配置断点 跳线-1 自定义调试说明 对于自定义类,我们可以实现此协议以在LLDB中获取描述 观察点 监视点就像一个断点,每次更改属性时都会暂停。 可以使用调试器的变量部分中的上下文菜单进行设置。 在目标C模式下运行命令 有一些客观的C库,您想以ObjC方式发送命令或发送命令,而无需进行swift的严格类型检查。 为此,您可以使用下面的expression命令 表达式-l objc -o-[`self.view` recursiveDescription] […]

WWDC 2017:惊人的订阅新功能

苹果公司致力于减少客户流失 编辑(2017年7月16日):苹果发布了此处描述的功能! 相关链接显示在底部。 继续逐渐成为对订阅的一种温和的迷恋,我非常荣幸地参加了Apple的主要活动,并探讨了订阅中出现的所有闪亮的新事物。 众所周知,在过去的一年中,App Store中订阅服务的公告和增长迅速。 它从开放所有类别的订阅开始,到第二年订阅者大幅削减Apple专利使用费,然后在全年继续提供大量功能发布,例如地理定价,新的免费试用选项和期限,订阅事件报告等。 在大多数情况下,这些举动都是促成因素,允许并鼓励许多开发人员转向新模型,这种做法是正确的。 但是,随着这些开胃菜的到来,我们都越来越渴望更多。 实际上,JoyTunes的团队已经仔细收集了一些统计数据和可行的见解,以供下一步使用。 幸运的是,苹果公司惊人的订阅团队也有类似的想法,这使我们进入了WWDC17。 那么,WWDC17发生了什么? tl; dr苹果决定加倍减少流失,包括非自愿取消,自愿取消和退款。 (流失率=付费用户流失率) 以下是JoyTunes团队发现的最令人兴奋的主要变化,然后对这些变化的重要性和现实生活数据进行了一些解释。 将帐单重试窗口从几个小时延长至(最多)60天 从Apple发送的特殊情况下的实时服务器事件,例如用户降级,退款和过期订阅的续订(例如在计费问题之后),这对于跨平台服务很重要 按用户标记计费问题,自动续订取消,退款,甚至发生退款的原因(来自AppleCare)(!!!) 对于退款,这尤其棒,因为之前没有与退款相关的信息 有点尴尬,但是这些变化实际上使我眼中充满了喜悦的眼泪。 要了解原因,让我们更深入地研究这些变化。 非自愿流失 让我们从非自愿的流失(也称为帐单问题)开始。 这些是由于信用卡过期,商店信用额不足,卡被盗以及Apple在收取续订费用时遇到的任何其他困难而导致的取消。 我猜这听起来太微不足道了,上帝知道我们也是这么想的。 也就是说,直到我们在相当新且隐藏得很深的订阅事件报告(ITC→销售和趋势→下拉菜单中的报告→下载订阅报告)中检查了取消原因之后,才发现有22%的取消是由于该原因而发生的。 进入WWDC17时,我们有以下问题– 22%被认为是标准的吗? 如果没有,wtf ?! 我们在做什么错? 如果是这样,wtf ?! 苹果可以帮助解决这个问题吗? 第一个发现是22%实际上是令人恐惧的标准,从某种意义上来说,这令人放心–至少不仅仅是我们! 此外,计费问题通常被认为是#3取消原因。 今天,当出现计费问题时,Apple会尝试让用户在几个小时内解决这些问题。 例如,如果您的卡被盗了,或者您像我们其他人一样只是一个懒惰的被动人物,那么时间就不会那么宽裕。 现在,已将其延长到最多60天(!!!),具体取决于发现的问题。 我的猜测是,这一变化可能单方面导致整体订阅收入大增。 此外,Apple在收据数据中添加了新字段,用于发出计费问题信号,以便我们(应用程序开发人员)可以警告用户有关情况,将其移至临时访问权限或任何其他解决方案。 最重要的是,Apple很快将针对几种特殊情况发出服务器通知。 其中,标记为已解决帐单问题,以便可以更新成员资格。 这对于跨平台服务非常重要,在跨平台服务中,用户可能会尝试访问网站,例如,没有先打开应用程序,因此我们不知道结算问题已得到解决。 换句话说,Apple认真对待其作为超越应用程序的订阅付款方式的责任 。 应当指出,服务器通知非常重要,特别是因为我们每天增加的订阅数量越来越多,并且要一直获取所有这些信息的最新挑战变得越来越困难。 自愿流失 此类别包括为什么任何人都想取消服务的自动更新的常规原因,其中之一就是过时的恐惧。 实际上,我们的数据显示,年度计划中自动续订的取消中有20%以上是在前几天发生的(请参见图表)。 基本上,人们想要该服务,但是只是想确保它甚至在使用前都不会更新。 尽管我们可以做很多事情来提高用户对我们高质量音乐学习服务的信心,但是到目前为止,还没有办法知道我们是否在进行改进,因为只有在订阅到期后才能看到这些匿名取消。 实际上,我们需要等一整年才能知道我们的努力是否产生了影响…… 好吧,苹果改变了这一点。 […]

关于开发人员macOS Mojave的5件事

苹果刚刚宣布了面向开发人员的即将发布的名为Mojave的macOS更新(版本10.14)。 最终发布日期可能是9月或10月,这已经在科技界引起了轰动。 这可能会影响已经存在macOS应用程序的5种方法: 64位计算机已经存在至少10年了。 但是,许多较旧的应用程序仍然仅支持32位。 这意味着macOS必须同时支持32位和64位应用程序。 苹果已经宣布, Mojave将成为支持32位的最终操作系统。 通过Mojave针对开发人员的这一更改, 您有一年的准备时间并为10.15(适用于Apple的第一个64位操作系统) 更新其构建 。 否则,您的旧版32位应用程序将在2019年秋季不再运行。 macOS Mojave现在要求您的应用在使用摄像头,麦克风或任何自动化设备 (例如AppleScript和Apple Events)时请求权限。 这意味着,如果您的应用程序使用这些功能中的任何功能,则需要更新代码以请求这些权限,并在未授予权限时进行处理。 深色模式是更改UI以便在深色主题上使用更亮的功能 。 开发人员喜欢它,并且只要考虑到这一点构建应用程序,它就看起来很漂亮。 若要发挥优势,开发人员可以查看 有关如何支持暗模式的 Apple文档 。 对于网站,请确保您的背景颜色设置正确,并及时更新您可以添加到样式中的可能查询,以使其在黑暗模式下保持良好外观。 使用Mojave,Safari用户将必须开始明确地授予某些网站跟踪它们的权限。 如果您运行的网站使用任何形式的跟踪或像素定位,请注意这些更改。 您可能需要调整跟踪网站用户交互的方式。 股票应用在Mojave上使用“小杏仁饼”的示例 UIKit是用于开发iPhone和iPad应用程序的用户界面的框架。 有传言说“ Marzipan”是将UIKit引入Mac的桥梁。 在针对iOS开发人员的macOS开发文章中,我们推测了“ Marzipan”的含义。 好吧,今年他们宣布将把它带给Mac开发人员……可能在明年。 他们还为我们在Mojave中提供了预览,其中包括Home,Stocks,News和Calculator等应用。 虽然我们可以看到生成的应用程序,但仍然存在许多问题,例如: 这些应用的外观如何? 该框架使用起来有多容易? 同时构建Mac App和iOS App是否容易? 对于那些现在正在构建macOS Apps的人,这意味着有时间通过​​以下方式准备您的应用程序: 确保您正在组织代码以使用较新的API和方法 避免过时的代码和API 正确使用可在Apple平台上使用的其他框架和API,例如CoreData,Metal,CoreML等。 借助Mojave中面向开发人员的所有新功能,Apple首次为我们提供了路线图。 这意味着我们有时间到2019年第四季度: 更新macOS应用程序以仅使用64位 在用户界面中支持黑暗模式 支持增强的应用程序权限 (相机,麦克风等) 清理您的体系结构以正确使用跨平台框架和API。 […]

WWDC 2018最新Swift 4.2功能

更少的样板=更快乐的开发人员 作为iOS开发人员,我像许多其他人一样从Objective-C开始。 在日常工作中,我与Swift一起工作,考虑到它的第一次迭代的增长,我发现它的多功能性很有希望。 是的,前几个版本的重大更改难以使用; 但是,这些不断增长的痛苦导致了一种更好,更高效的语言。 它的第四个主要版本在功能和社区方面都继续给人留下深刻印象。 上周,苹果举行了年度全球开发者大会(WWDC),其中展示了Swift的一些最新改进。 尽管Swift 5计划于2019年发布,但Swift 4.2具有其自身的优势,特别是在消除繁琐的样板代码方面。 枚举案例的派生集合 Swift的可爱功能之一是它具有使用类似结构的功能来扩展枚举的功能。 例如,如果我们要遍历下面显示的枚举中的所有Fruits ,则需要实现一些样板代码,其中包含数组中的所有案例。 除了每次要遍历数组时都创建一个allCases变量外,每次向枚举添加新的大小写时,我们还必须更新allCases数组。 这可能很麻烦,并且为开发人员错误留了太多空间。 Swift 4.2添加了一个名为CaseIterable的新协议,该协议默认情况下只是添加allCases数组。 我们需要做的就是将CaseIterable添加到我们的枚举中,现在我们可以遍历所有案例。 但是,请务必注意,具有关联值的枚举将无法扩展CaseIterable 。 allCases数组中的元素必须具有相同的类型,而每个枚举的关联值可以包含不同的类型。 合成等量一致性 假设有一个用户对象具有我们可能要比较的简单属性。 令人讨厌的是,我们需要User对象符合Equatable协议,然后检查两个比较对象的每个属性是否相等。 尽管这看起来很简单,但是如果我们比较具有许多属性的大型对象,这也是一项不必要的麻烦任务。 Swift 4.2现在将能够比较两个 Equatable 对象,而无需实现Equatable函数。 只要每个属性都符合Equatable ,Swift就可以推断出我们的Equatable函数。 因此,开发人员将不再需要编写该样板代码。 数组的条件一致性 以前,我们无法像上面的areArraysEqual函数中所示比较两个数组的内容,因为不将Users数组视为Equatable类型。 虽然如果我们比较两个函数数组可能会有意义,但由于函数类型不是Equatable ,而元素类型为Equatable则没有意义。 在Swift 4.2中,我们提供了一个数组扩展名,可以比较两个具有Equatable元素类型的数组。 除了数组之外,可选内容和字典还通过这种新的条件一致性提供了相同的功能。 新的随机数生成器 如果您想在Swift中创建随机数,则必须使用导入的C API,这些API需要进行严格的平台检查。 坦白说,这不是最优雅的解决方案,而要正确解决问题可能会很棘手。 Swift 4.2现在为Floats和Ints提供了新的随机数生成器功能,可以接受一定范围以准确返回随机数。 此外,现在可以从数组中检索随机元素,并且可以分别通过添加randomElement()和shuffled()函数对数组的元素进行混洗。 更多细节 这些是Swift 4.2的主要更改,但这里还没有涉及其他内容,例如新的哈希算法和协议。 如果您想了解Swift的最新功能,建议您访问https://apple.github.io/swift-evolution/以查看正在审查,接受或实施的最新更改。 一如既往,感谢您的阅读和记忆,更少的样板=快乐的开发人员🙂 资源资源 Swift的新功能– WWDC […]

WWDC 2017国情TL; DR

这是我们在WWDC 2017的“国情咨文”演讲期间从苹果公司获得的一切的简要回顾。 源代码编辑器 从头开始用Swift重写 内置降价编辑器 更好的修复(内联并且不破坏格式) 300多种新的诊断程序,分析仪及其修复程序 文件打开速度提高3倍,滚动速度达到60 fps,行跳移速度提高了50倍 在Playgrounds的代码编辑器中标记化(悬停时按住Cmd) 动作的上下文菜单(在标记化结构时点按) 全新的重构系统 Cmd +/-调整代码文本的大小 SDK版本可用性修复 协议实施存根修复 “提取”将实现移至其自己的方法/ let 重命名/编辑范围 跨源代码进行全局重命名/重构-跨所有片实时更新 开源转换/动作-开发人员可能会引入新的东西 斯威夫特4 字符串现在是字符集,就像数组一样 带”””多行字符串文字 单边范围和使用下标的字符串切片 Unicode 9 Grapheme Breaking(Unicode 9字素突破)-更好地支持Unicode(相对于旧版本,它实际上是正确的) 可编码协议:编码/解码JSON / plist的超级超级简单方法: try JSONEncoder().encode(Codable) vs try JSONDecoder.decode(Type.self, from: payload) Xcode 9 Swift语言版本(3.2 / 4.0)-允许逐步升级到Swift 4 构建时间:混合和匹配Swift / Objective-C的速度应提高40% 整个模块优化应该有更好的构建时间(大约2倍)(从Xcode 8.3.2开始,理论上来说) 核心技术 索引器 完全重新架构 快速打开x35更快 […]

优化HTTP实时流(HLS)以获得最佳用户体验1

苹果每年都会更改并扩展其框架。 为了更好地理解和利用框架功能,以下是用于优化HTTP Live Streaming(HLS)的演示文稿和注释。 HTTP实时流(HLS)用于向全球受众流式传输实时和点播内容。 您可以发现如何调整和调整流创作和传递元素,以通过会话502改善用户体验。 会话链接 在会议上,他们讨论了以下内容: 建立通用的流QoS语言 客观衡量流式QoS 识别并解决损害QoS的问题 有关HLS回放会话的基本知识,请参见下图。 首先,您需要先找到问题再解决。 为了发现问题,您需要测量定义的一些指标。 什么是HLS用户体验的KPI? 这是会议中讨论的一些KPI。 5个用于HLS性能的KPI 启动时间:每个会话的启动时间 失速计数:失速速率(标准化为已观察的持续时间—计数/小时) 失速持续时间:失速持续时间与观察的持续时间之比 指示比特率:时间加权指示比特率 错误:播放失败百分比 启动时间 这是启动媒体播放的每个阶段。 失速计数,失速持续时间,指示的比特率 您可以使用AVPlayerItemAccessLog来衡量KPI 播放失败百分比 定义KPI后的下一步,提高性能! 减少启动时间 调查摊位 调查错误 使用AVAsset减少启动时间 您可以通过减少启动时间 在用户决定播放之前创建并检查AVAset 预取解密密钥(采用AVContentKeySession) 减少启动时间-AVPlayer和AVPlayerItem 您可以通过减少启动时间 在缓冲之前设置AVPlayItem 在设置播放器项目之前设置AVPlayer速率 减少启动时间-AVPlayerItem过渡 您可以通过减少启动时间 使用AVQueuePlayer播放多个项目 预先排队第二个AVPlayerItem 在本文中,我讨论了会话(502)“测量和优化HLS性能”的部分内容 这是本文的摘要 设置KPI以获得更好的HLS UX 找到衡量KPI指标的方法 减少启动时间(通过更改avasset,avplayer的配置-avplayeritem,avplayeritem转换) 在下一篇文章中,我们将看一下如何调查HLS播放中的停顿和错误

WWDC18 KeyNote — iOS 12정리(第2部分)

Siri 세계하고하고하고하고에에에하하하하하하하iri iri iri iri iri iri iri iri iri iri iri iri iri iri iri iri iri iri。 중에cut많은cut cut cut 快捷键 이능능새있습니다。 请勿打扰(방해금지) 。싶싶싶끔。수메시들을들을들을많으실많으실많으실많으실많으실많으실많으실많으실많으실많으실많으실많으실많으실많으실많으실겁니많으실많으실겁니。 Bed 请勿在就寝时间打扰 이했습니기능을했습니다。 。사진과이보인다고다。 检测时间 Screen Time的屏幕 快照 。 용자는용자는iPhone용자는iPad됩니됩니다。 iMessage的 舌头检测 이입니기입니다。 Animoji가아래와사진을스있습니다。 FaceTime和 Group FaceTime一起使用32位主题的列表。 在Group FaceTime上进行的下载。 。있습니있습니다。 (59:15〜1:02:15) 하여하여WWDC18발표한iOS 12봤습니봤습니다。 。능들트트트트트트트트트。 。리이기능들을다써다느낌입니다。 WWDC18 KeyNote – iOS […]

iOS 11:如何使用CoreNFC检测和读取NFC标签

注意:该项目的源代码可以在Github上找到。 iPhone三年来一直在为Apple Pay配备NFC(近场通信)阅读器,而开发人员一直在耐心地等待访问该小芯片。 随着今年秋天iOS 11的发布,Apple终于向开发人员提供了这一急需的功能。 幸运的是,我们不必等待三个月就可以开始玩了! iOS 11的新框架之一是CoreNFC ,实际上设置起来非常简单! 注意: CoreNFC仅在iPhone 7或iPhone 7 Plus上受支持,即使其他iPhone内装有NFC芯片也是如此。 证书,标识符和配置文件 为了使用具有NFC Tag Reading功能的应用程序,您需要在Apple的证书,标识符和配置文件网页上注册应用程序ID。 前往该处,然后在“ Identifiers标题下选择“ App IDs ”。 继续并添加一个iOS应用ID,该ID与您在Xcode中使用的绑定ID相同。 您可以根据需要命名描述。 在“ App Services部分中,选择“ NFC Tag Reading ,然后单击“继续”。 完成添加新的App ID,然后回到Xcode开始! 无论您是否将此应用程序发布到App Store,都需要执行此步骤,所以请不要跳过它! 入门 就我而言,我将创建一个名为TestingCoreNFC的新项目。 创建一个新的Single View App,并根据需要命名。 我正在为此项目使用Swift,并跳过了单元测试。 继续保存到任何地方,让我们开始吧。 权益 在Project Editor选择“ Capabilities 。 打开其中任何一个,然后再将其关闭。 为什么? 因为这是将权利文件添加到您的应用程序的最简单方法。 在我的情况下,它称为TestingCoreNFC.entitlements 。 在您的权利文件中,添加一个键为com.apple.developer.nfc.readersession.formats的数组。 在数组内部添加一个值为NDEF的字符串。 […]