大多数浏览器和
Developer App 均支持流媒体播放。
-
Xcode 中的 App 瘦身
App 分发管道变得越来越强大和灵活。了解如何利用切片和 ODR 等新的 App 瘦身功能来打造创建功能齐全的 app 并交付到用户设备。了解如何将这些新功能整合到您的持续集成和测试流程中,并探索创建按需定制内容的工作流程。
资源
-
下载
Xcode的app切割 早上好 我是安德斯 欢迎你们来参加404会议 Xcode的app切割
APP切割在这个舞台上已经多次提及 但从你们昨天 提出的问题和问题数量看来 很多人深感兴趣并且仍有疑问 所以在这个会议上我们会讲的更详细些 尤其是关于 当今 APP切割如何影响APP传播途径 我们会看看其工作原理以及改善
我们会讨论 如何进行高效的APP切割 减少内存占用率
然后我们要讨论 这对你工作流程的意义 当你在开发和测试应用以及 提交到App Store等过程中
现在我们快速浏览一下 当前的APP是如何传播的 你会使用 Xcode开发iOS系统app 然后测试并提交应用商店
当你提交时 App会被标记上开发者证书 在经过检验后 App Store会重新证书标记 然后上架以供下载
然后有一台设备下载了你的App 这样设备就获得了你上传的的App 现在我们来看看里面的内容
首先 这是你的执行代码 这里有很多资源 几乎所有的东西都罗列在内
有些App代码很繁重 很多 资源也比较少 有些则正好相反 媒体文件较多 大部分是资源
我们举一个例子看一看
现在代码基本上 有两种版本64位或32位 实际上 还可能是RMV7 也包括NRV64切片 为了在 Apple硬件上运作良好RMV7
当然 资源中如果有图像的话 你会使用 1X 2X 3X或Retina 以使图像在各类设备上运行良好
你也许会想对图像进行一部分区分 分为适用iPhone的 和适用iPad的
如果是 游戏app或者是3D图像型APP 那么1X和2X在处理文本压缩和 文字模块方面并无太大意义
事实上 如果想利用 OpenGL AS和Metal语言 那么可能需要不同类型的资源纹理 而且还进行进一步的区分 优质和劣质文件 这样都能让设备在 不同内存大小上良好地运行 在任何设备上运行 取决于内存大小的图像清晰度
可能你还有声频资料 所以你还可能需要根据比特率进行区分
当然还有其他数据 像是游戏等级 又或者你的app需要认证文件 可能有些模板及其他一些信息 无法让设备进行区分 所有设备上都可能发生这种事
实际上 现在很多App都有所有类型的数据 所以你可能要费力进行归类 做好备注 这样相应资料才能安装在相应的设备上
这再好不过 这实际上就是APP切割的优势所在 如果你有一个iPad Mini 当它运行的时候 会运行RMV7切割 iPad等设备也是如此
另外APP切割所做的就是 在运行时决定加载资料 放到Store的资料 设备上的内容就是保存到设备上 始终保存在设备上 虽然不会在iPad1上下载 所以RM 64切割 无法在ipad Mini上使用 那么 为什么要全部上传到Store中呢?
在App Store上 我们将为ipad Mini预构建一个定制版本
iPhone 6+也是如此 这时候 我们使用3X art work RM 64等 此类的工具 值得注意的是 你仍会上传包括各种原图变体 和其他资源的通用APP 于是在App Store里 切割就会发生
实际上 App Store的作用是 查看你的App能够支持的不同设备 即使不同设备特性 然后再查看App中的实际内容 以及你如何 使用1X 2X等工具进行标注 然后Store 会预制并分离被下载的IPA 我们来看一个已经看过的例子 这是个演示箱 曾在美国展示过
在这个例子中 我们有一个App 74兆字节的通用APP 适用于所有架构和设备 通过切割 我们得到16至29兆字节 平均在22兆字节的文件 我们在这款App上运行切割 实际上 其中产生了19种变量 包括不同的特性组合 这一些都在后台自动进行 而你只需对app内容进行标注即可
这是第一级保存 实在酷 但是 有改善的空间吗? 当然了 有 设备上有些资料是我们一直使用到的 首先 代码 那里可能会有一些原图比如故事板 当你启动你的应用程序 或者将原图添加到主菜单 让我们假设 你需要不断使用这些原图
然后还有其它这些东西 这个应用程序之后会需要用到 但现在不需要用到 你之前听过的一个典型例子 比如游戏的第19级 正在玩游戏第一级的用户 还不需要19级的资料 同样地 还有其它例子 如果App是文件类应用 那么媒体模板就会比较丰富 你可能会想把这些推向市场 为了提供丰富的体验 你可能要有很多的模板 但是它们可能会占用很多空间 你可能会根据需要进行下载 对于音频工具也是这样的或者此类的
很好的示范例子是 许多用户看过一次就不再想让文件 占用设备的空间
如果我们看看我们以前讨论过的 应用切割其实应用已经进行简化了 因而只剩下一个结构 以及一种资源类型的质量变体
下一等级划分 我们可以做的只有 在了解应用程序的特定区域后才能执行 就是基于给定的时间所需要的资料 因为这些是基于你的代码逻辑 因此在这个例子中我们有图像 Metal着色器诸如此类的 我们可以把这些分为共享的 以及归入到 应用程序本身时刻所必须的一类 我们可以按需选择
通过划分
实际上你就可以减小 应用程序占用的基础空间 这样就可以保存更多文件
在这种特定的情况下 使用Xcode建立的 标记资源包就会被清除 保存到App Store中的IPA
你可以根据需要进行下载 你可以指定其中的一部分 作为初始下载 当用户下载展示的 应用程序并在进度条达到百分之百之后 应用程序就准备就绪了 App已经有了一些初始内容
你可以根据需要下载更多的内容 这已经不是存储在设备上应用程序包里 也不会备份到iCloud存储空间里 而是存储在系统内存中 系统可以进行高速缓存资源 并按需加载资源
因此在这种情况下 假如你在这个场景中 实际上我们会有更多的空间 而不仅只有三个等级的空间 我们可以有更多的等级空间 假如你不使用按需加载资源的话 当我们来到第四级系统会自动清理 最近使用过的资源包包括你的第一级资 源 对于第五级同样如此
如果用户有段时间没使用你的应用程序 以及其它需要下载需加载资源的App 则可进行空间回收 当应用程序再次被使用时 则再次自动下载
说说一些关于 按需加载资源的事 你通过 在Xcode中标记资源建立资源包 昨天你观看了一个简短演示 今天晚一点的时候 将会有一整个环节说明按需加载资源
资源包可以包含任何不可执行资源 应用切割在在资源类型下 资源目录起作用 通过按需加载资源 你可以下载任何的松散文件并标记它们 它们会成为资源包一部分 然后从App Store中下载 它们存储在App Store中 你把 它们一起提交到App Store 作为IPA的一部分 但是App Store会把它们分开 并单独存储
它们会根据代码在需要时被下载 它们作为必需品被回收
它们就像其它内容一样被切割 因此你可以把资源包放在这里 实际上 如果你在资源包里标记资源 Xcode会自动为你建立
在资源目录里面
我们来看下储存大小 对了 今天下午4:30分 在太平洋大厦会有一个会议
让我们看看 我们得到什么种类的储存 程序片切割后 我们得到的程序片平均为22兆字节 在这种情况下 我们得根据核心app 下载5-11兆字节的内容 而资源本身则是11-18兆字节 关键是并非所有文件 同时存在在设备中 所以总量大约有8兆字节 这是一个非常精简的app 但你可以看到它是一个巨大的运用程序 尤其是它有大量媒体资源文件 更精简app的就会很有帮助
更小的APP更好的使用体验 有些设备有8GB的空间 我们会小心使用这些空间 没必要用的东西不会占用你的设备容量
通过app简化设备就可支持更多应用
更棒的是这同时也意味着 更短的下载用时 更少的电线传送 更不容易超过100MB的限制
这使你下载的应用
这意味着你可以使用 更多类型的设备而不受太多限制 如果你一直很想使用那种 不但可以在大功率设备上运行地很好 而且也可以 在低能耗设备上使用的Metal 有更好的用户体验 那该怎么做呢 下面这个能使你克服其中一些限制 你可以现在就提交 提交到Store 和用户下载的体积都变小
这意味着你确实 可以长期利用回收的空间 处理之前因为容量问题 而不能安装的应用 这不是说你又得占据大量的容量 相反的 这意味着当你面临容量不够 而又想放 更多的东西进app时可以更自由
现在 我想请我的同事帕特里克·海宁 来告诉你们具体如何做到这一点
谢谢你 安德斯
我是帕特里克·海宁 我想谈论一些关于 资源切割的更多一些细节
它的工作原理是什么呢
好吧 非常高兴告诉大家 资源切割和App简化已经无缝 整合到Xcode的开发 输出和工作流之中了 也许你们已经很熟悉 如何开发应用
这一切的改善 可以让你真正 实现资源切割和App简化的关键在于 我们为产品开发和资源目录 设立工作流 并同时考虑了 各种不同设备和变量从而方便开发应用
那么你需要做的是什么呢
如果你已经习惯使用 iOS的app 亦或者
习惯开发iOS应用 那么你们 会使用1X 2X 3X原图 适应各类尺寸的屏幕 甚至可能早就在使用 iOS 7的资源目录了
这一些确实也是你必须要有的 什么是资源目录 它们有什么作用呢 资源目录就是根据 资源的相关设备特征 进行资源组织的功能 因此非常重要且具有针对性
这里需要重点强调一下 为了能利用应用简化功能 你的资源必须处于资源目录内才行 我们无法处理松散资源 这不能限制这项强大功能 以后我们会进行改善 需要重点说明
所以我刚刚提到了设备特征 因为在资源目录内 资源可以用设备关键组特征进行优化 这包括你很熟悉的 屏幕分辨率 2X 3X和其他系列设备 不管它是ipad还是 iPhone
更新 Xcode 7的iOS 9系统后 我们在设备硬件特征的基础上 开发了一组设备特性 尤其是图片处理能力和内存级别 这确实引起了两个需求 第一 我们可使用的一系列设备 性能特点更多强大 从最低终端到最高终端设备各有不同 单一的资源并不适用于 所有类别的设备 对于最终的使用体验 会是怎样真的很难达成一致 这对高端和低端的内存级别都是一样的 新的设备特性使你能 给不同的功能制定相应的资源
资源目录里又有哪些内容呢
好吧 目前为止 在我们所推出的资源目录中 最热门的是image
这主要是你应用里的原图资源 特别是位图资源和载体类型 你的图片可以是 png jpg或者pdf的格式 这些会先压缩以节省空间 编译成最佳的传送格式 然后通过 UI工具包的API传送到你应用
iOS 9和Xcode7更新后有了 新的的数据类别 至少一个新的数据类别 那就是Name数据 这是用来做什么的呢 Name数据让你可以 随心所欲的储存文件内容
现在 可能你们会担心的事情是 我们只是根据内容 对资源目录进行简化 你们会问 如果我尝试简化非Image类的资源 这正是Name数据的作用所在 Name数据让你可以 在资源目录中随意放入文件 并根据硬件水平进行分类 正如我之前提到的
然后 在运行时 可以使用OS X系统UI工具包 新的NSDataAsset 类别在app内进行内容检索
侧边栏在这里 资源目录的特征 正如我描述的Name数据和其他特点 在OS X系统中也有 我们不会在OS X系统中 进行应用简化 但是在目录里储存资源制品格式可以 用于从所有目标上获取资源 包括OS X系统和Watch 所有这些功能都能起作用 API在所有平台均可使用 简化只适用于iOS系统 侧边栏结束
在Xcode 7 和iSO 9 系统我们引入了另一种新的数据类型 就是Sprite地图集 这意味资源目录 和SpriteKit已经实现整合
让你们可以使用一般的方式 可以让你分组图像资源 以一种普通的方式在资源目录内组织 并重命名为Sprite地图集 另外可以在创建时候 自动创建纹理地图集 从而在图像资源里 检索SK纹理地图集类型 一项关键功能是 如果你已经在iPhone iPad上完成常规组织 那么它将自动创建 编译好的纹理地图集的简化版本 然后作为简化资源 与AppStore上和我稍后会谈到 的其他工作流简化的版本一致
那么我们如何 从资源目录中进行app简化呢
好的 这实在很简单 也许大家已经猜到了 每个资源目录中的资源都有标记 用于描述资源相关特征 以及有用的特征
在创建之时当我们建立流程后 这些特征会在资源 和相关简化app变体之间建立路径
就是这么简单 我想要在这里重点说明一下
资源目录已经存在好一会儿了 它们可以让你能够在运行的时候 选择适合请求该资源的 设备的正确资源 在简化app变体路径方面 也是基于同样的算法 和一样的选择标准 如果你的 app今天在不同设备上工作正常 那么app简化也同样工作正常 因为它们使用同一个原理
好了我之前提到单词组织 我想要再强调一下 有效对 资源目录进行归类绝对是关键所在 为什么呢? 因为对资源进行 大规模标注意味着 程序片变体中的冗余数据就越少 你不会 获取app变体产生的额外数据 而这些数据在目标设备上运行时 是不会使用到的
例如 即使应用之前可以正常工作 但是如果只是在一台设备上使用那么就 没有必要保留通用资源了 考虑一下比如你的iPad上的应用有 自己的UI弹出按钮 是在iPhone上的应用 却不会在你的iphone上显示出来 通用资源的话可以使用可以显示正常 但是 现在我们可以重新访问并进行归类 这样就无需 传送到iPhone版本的应用上 因为在那里没法显示 好的
以上是基础的知识 关于该系统工作的原理 我们来举个例子 说说具体的工作流程 以及如何产生影响的
首先说说创建 你是如何创建资源目录的 创建资源目录内容的首要方法是 通过Xcode上的资源目录编辑器
在IDE上使用用户界面很简单 或许你对此很熟悉了 创建一个新资源 只需增加一个新项目
你可以看到这里有个值域 这里 你可以看到数据集 图像集 Sprite地图集 以及其他平台的其他数据类型
当你将这增加到项目中时 你可以看到在左边 有一个组织数组和范围 显示的是设备特征 你可根据这些特征进行分类 并显示你想要的资料丰富性 将资源放到合适的源中 然后离开 前往种类完成了
好极了 用起来很简单 倘若你的团队无法在资源 产品里使用Xcode将会怎么样
倘若这是个游戏工作室 在现有资源工具链和管道上投资巨大 但对于创造出合适原图的 内容工程师或设计者来说 现有的资源工具链和管道 并不适合使用Xcode这将会怎样 很高兴的告诉你们我们考虑到这种情况 我们仔细地设计了资源目录特征 与简化相配使之适用于这些情况
我们特别地将它设计成 很容易从现有资源管道 导出图像集和数据集
如何做到这点呢
我们将通过 XC资源来源工件格式进行讲解 我很高兴的告诉大家 我们将进行文件编制和发行 使得外部工具链 可以很容易的执行这个格式
这算不上什么格式 因为它只是JSON标记上一个简单的 文件夹结构而且很容易配合使用 我想要强调的是 这并不是下面提到的这种格式 先创建 然后导入Xcode中 然后就变成了一个项目工件 这是源工件格式 在创建时 Xcode创建系统就开始用来 处理和产生最后执行成品
我们来看看它的细节信息 来看看先前说过的 例子AirPlay图像原图 在磁盘中看起来是这样的 事实上 这就是格式 非常简单 它所包含的是一个文件夹命名约定 包含资源的名字 这是使用UI图像名称在代码中 重新得到的名字 随后文件夹里包含了单独原图源 我想指出的是 尽管在这个特别例子中 用了一个众所周知半标准文件命名约定 来显示比例系数和设备习语 但它并不需要 任何特别的文件命名约定 你可以使用任何工作流程 或工具链或任何你所喜欢的方法 为什么可以做到这样 因为在这个设计中 有重要的第三元素 即contents.JSON文件
contents.JSON文件 包含所有资源标记信息 并将信息连接在一起 并告诉系统 与特别资源有关的特性 来看看 先前在Xcode编辑器上显示的 AirPlay图标 现在看起来是这样子的 你可以看到 它非常的简单明了 这只是单独图像中的一个数组你可以看 到单独文件名称 然后是设备习语和比例系数标记信息 这些属性你看到的这些关键数值组 就是将被记录在 SES源工件格式中的东西
举个高一级的例子 名字数据 我们叫它数据集 不出所料 看起来很相似 再一次 里面有单独源的文件名 然后是通用型标识符 和存储器的属性 或显卡未来集类
你可看到 它真的很好配合使用 你可以看到它是如何操作的 如何命名文件名和属性 这也是为什么不管你在 数据集和图像集加入什么名字没有关系 重要的是 contents.JSON是正确的
你可以用它来做什么呢 这是用来做什么的呢 我来举个例子 假设有用Xcode创建的图像集 我将展示的这个假设工作流程 是在PhotoShop中 使用PhotoShop CC生成器
假设你的设计者创建了漂亮的原图 他们决定今天iPad是蓝色的 iPhone是红色的 这只是我们工作的方法 设计者有时会这么做
他们有漂亮的主文件 并在这里陈列所有这些变体 事实上 他们用生成器工作流程 创建了主文件 打开图像资源生成 由合适的命名约定 构造他们的层级清单 默认层级直接导出到一个图像集 有一个生成器的特别版本 他们小心地进行扩展 这是产生 contents.JSON假想事例 这就是将从 PhotoShop工作流程中输出的 对于以前使用过生成器的人来说 他们很熟悉照片布局了 这是资源文件夹 里面有生成的图像集 所有不同的原图实体 和contents.JSON 我们要做的仅是拖出图像集 并将图像集放到 XE资源文件夹下的文件夹中 之后就可以进入竞态
就这样简单说来就是 带Xcode项目的动态集成
唯一的要求是 从一个Xcode项目文件水平来说 你的项目必须有XE资源文件夹 这是唯一的要求
里面的所有内容 都必须有一个任意层级 任意结构 它必须符合图像集和数据集 你可以按照任意深度进行嵌套 你可以使用 受它支配的自己的文件系统组织 假设你正确授权图像集和数据集 在创建时Xcode将递归地下降层级 发现所有图像集 数据集 和传播地图集并自动进行创建
现在你知道怎么创建资源目录了 现在进入下一步 创建
或许最普通最重要的创建工作流程是 坐在座位上 在Tether设备的app上作 或者你在模拟器上操作 此种情况下如何简化应用呢 很高兴的告诉你 创建和运行工作流程 可自动地为现有有效运作目标简化资源 在Xcode中 意思是说 每次进行创建 事实上它仅会对 你正在使用的目标设备分析 产生并自动创建适当的执行资源目录
所有的模拟器和设备均支持这功能
这是利用应用简化 绝佳的范例
这个功能是 由已经在目标编辑器资源目录显示的 新创建设置激发或控制的 仅在有效资源下启用创建
这很方便 倘若 你试着解决 一个由应用简化引起的问题将会怎么样 倘若简化全面影响了 特定的目标设备情况会怎么样 为此 你可以不断拨动开关
此创建工作流程的其他优势是 极大的加快重复编译 或增量编译 在应用内容繁多的时候尤其适用 它只处理并 只与当下适合目标的源进行匹配 当它创建一个应用的 普通版本时 并不需要像以前一样每一个都需做完
另一个重要优势是 对于一个特别设备或一组设备 可以很容易测试 若你想要理解 目录变动对简化输出的影响 整体创建应用的大小或 用户体验的其他方面的影响 你可以迅速变动这些目录创建并运行 随后通过在其他设备 和Xcode中运行目标间进行转化 来检查其他设备 可以极其快速简单地测试这些变动
创建就讲到这里 接下来是什么呢 传播 这是简化应用的基本步骤
现在 有很多方法 可用来传播你的iOS应用 使你能够传播你的iOS应用 最大且最有效的一个 当然是你的终端用户 顾客 通过AppStore 购买正在使用的用户这是最核心的 安德斯提到 这是你提供普通IPA的地方 商店做了这个工作 处理了所有简化变体 当用户购买app时 它将从商店里自动选择适合设备的变体 下载并进行安装完成了 完全自动的 不需要操心什么 在发布应用前 你或许也想为beta C 测试者创造完全相同的体验 也可通过TestFlight支持测 试传播我们将通过简化传播
然后 当然有ad hoc和企业传播 这是个常用方法 可用来在你的组织中传播应用 或在你的组中进行QA测试其他事情 这是传播极其重要的一种方法 我们也在其中创建了简化支持 最后 还有已经更新的Xcode服务 和Ecos服务器 用来支持传播简化应用 随后 我会讲到更多细节
上述方法的自动化程度非常高 你无需做太多事情 等下要我要讲的是 Ad hoc企业解决方案 这里 你需要自己托管传播流程 你可能需要理解 他们是如何放到一起如何运作的 我们现在就来说这个它们是如何运作的
Xcode中已增加的一个功能是 现在 对于特别设备 你可以从组织器中导出 若你将测试一个创建或要将创建切换到 制定设备 非常管用 你可立即创建一个IPA 用于直接指向到特定设备和为特定设备 提供的组织器
未来 我们将为你提供一种方法 可在所有的兼容设备上 导出所有简化变体 为应用的所有 可能支持设备提供完整的传播单元 这很重要 你或许不知道或能够为 所有的设备生成所有的简化变体 你想要获得全组信息
事实上 它将做的是 处理你所有的普通app创建存档
生成适合所有不同兼容设备的 所有简化变体 并将它们放入一组产品中
现在 你有很多应用 你或许会问自己 何才能为设备 获取一个正确的应用 是个大问题 将app发送到企业和adhoc设备 最常用的方法是 空中安装
随后我会讲到这个 化配合使用并会讲到如何与简 第一步保存为ad hoc或企业传播 这很重要 包了传播显示选项 左下角的复选框
这是用来做什么
它的作用是 当Xcode在生成IPA的导出集时 它将为它所生成的每个app变体 生成一个含有URL的显示清单 它将通过app变体的支持产品类型 更重要的是 将编插入索引 由不同产品门类区分支持 取决于那app的门类
影响在于 当设备试图安装app时 使用空中显示PO清单 它将会过一遍清单为设备 产品类型找到合适的URL 并对其进行安装 这就是它的运作方式 概念上与简化应用商店 实际所发生的相类似 但所有的这些移动块 都是由你通过Xcode进行生成并在 Web服务器上进行托管
倘若更进一步将会怎么样
这就是 Xcode服务器持续集成服务所做的
Xcode服务器所做的是 为创建代管和传播简化app 包括代管按需资源包 将我刚描述的原理 变成完整解决方案
非常简单 Xcode服务器 你在Xcode中创建集成盒 与Xcode服务器展开配合使用 项目自动创建应用 生成变体生成显示P清单 甚至在你在Xcode服务网站上 选定设备和选择特别创建的地方 覆盖web服务你所需做的 只是点击安装按钮 以及我先前所描述的 对显示P清单进行定位 牵引合适变量的所有原理 它是自动进行的 将设备指向Web服务并运行很简单 我鼓励你来看一看这个 尤其是 感受一下所有的一切是如何运作的 我鼓励你看看 这个模式和你在进行托管可能用来创建 你自己的企业传播工作流程 或ad hoc 传播工作流程的模式是相同的 所有的这些你都可以自己创建
整合各功能的Xcode服务 是使用空中显示的简化app变体的 一种流线型的安装方法 漂亮简单的解决方案 一站式
好了 我们刚讲的是 如何创建资源目录从而进行app划分 我们讲了 它如何与你的创建工作流程相结合 我们也讲了传播的不同方法 app简化如何与它们相互作用 现场交给安德斯 请安德斯为我们做总结
谢谢你 帕特里克
好了 在这部分 我们看了 app传播工作流程是如何运作的
以及如何改进app简化
你可以帮助它变得更加有效的方法 当你恰地标记资源和传播特征
对于你的工作流程来说 在测试及提交到App Store 这意味着什么在这里需要进行一些操作 你所应做的是 不断开发资源的定制版本 太好了 为你想开发出最好的app 并在所有的设备上运作良好 使用app简化 现在稍微放宽了上传大小限制 每个用户将只获得他们所需的
不断开发资源的定制版本 使用资源目录使你的资源系统化 正如帕特里克提到的 你可以 在其中放置数据和Sprite地图集 且这些可根据设备进行改变
同样地 使用Xcode测试你简化app变体 这个现在变得很重要 因为我们是 根据每个设备所需进行资源传播的 正如帕特里克所提到的 你可通过使用Xcode目标做到这个 使用Xcode 服务器创建多样的简化变体 并在真实的设备上进行测试
充分利用按需资源 资源进行标记 使它们成为按需加载 资源包的一部分
我将检索数个地方以获取更多信息 一是app简化指南 app传播指南中的章节 可在Apple的开发者网站上找到 另一个是资源目录格式文件 这个将 会放到Apple的开发者网站上
我们有相关联的会议 第一部分已经有了 你可以通过录像进行了解 另一点是 SpriteKit有什么新特性 这个在20分钟后 会详细讨论 它侧重于按需资源部分 今天4:30在太平洋大厦进行 我鼓励你们参加这会议 明天1:30在Mission会议上 将详细讨论DemoBots 我们有许多实验室 欢迎来我们的实验室学习更多信息 继续观看WWDC的其他部分
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。