Xcode 10 更新

作者: Mr__Peng__ | 来源:发表于2018-12-03 16:29 被阅读22次
    概览

    Xcode 10 包含SDK iOS 12 ,watchOS 5, macOS 10.14,tvOS 12. 支持调试iOS 8和更高版本,tvOS 9和更高版本,watchOS 2 和更高版本,需要Mac运行在macOS 10.13.6或更高版本

    General
    新功能
    • 快速查找弹出窗口中添加了一个选项,用于导出NSData等数据类型。
    • 现在,新创建的方案默认由Xcode项目的所有用户共享。要创建个人方案,Product -> Scheme -> Manager Scheme -> uncheck Shared
    • Ctrl + 0 弹出Schemes 选择窗口,Ctrl + Shift + 0 弹出设备选择窗口,使用上下箭头选择,enter选中
    • 库(就以前右下角的快捷代码和xib的拖动空间)内容已从“检查器”区域的底部移动到叠加窗口,该窗口可以像Spotlight搜索一样移动和调整大小。 它会在拖动项目时解除,但在拖动之前按住Option键会使库保持打开状态以进行额外的拖动
      库打开的方式可以使用顶部导航栏 View-> Show Librarys,或(Options) + Shift + Command + L顶部的内容,媒体内容可以长按工具栏按钮或View -> Show Media Librarys(Options) + Shift + Command + M
    • 打开库的时候用一次就会消失,按住options键打开,在手动关闭之前都不会消失
    • “Project Editor”中的“ Capabilities”选项卡为macOS应用程序和应用程序扩展提供了新的“Hardened Runtime”功能。 启用此功能会使您的应用选择加入macOS 10.14提供的新安全保护,并且您的应用需要经过公证
    已知问题
    • 打开存储在iCloud Drive中的Xcode项目和工作区,或更改存储在iCloud Drive中的打开的工作区或项目的源代码控制分支,可能会导致Xcode挂起
    解决问题
    • Objective-C(.h)新文件模板包括NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END
    • 修复了从Find Navigator中进行选择时不会突出显示查找结果的文本范围的问题
    • 项目设置验证了解通过引用其他构建设置而设置的构建设置值
    • 管理方案表中未选中显示的方案不再显示在Product -> Scheme 子菜单中
    • 双击导航现在默认为与单击相同。可以在preferences修改
    • 修复了在代码段编辑器中按Tab键时发生崩溃的问题
    Apple Clang Compiler
    新功能
    • Xcode 10添加C++17的头文件<any>, <optional>, and <variant>的支持
    解决问题
    • 编译器现在可以正确的处理可能影响代码完成支持的无效Objective-C属性
    Asset Catalog
    新功能
    • 命名颜色现在可以象征性地引用系统颜色
    • 支持ARKit 3D ARReferenceObject 资源
    • 支持 CarPlay 资源
    • 支持在macOS 10.14及更高版本上通过LightDarkHigh Contrast外观改变图像和颜色资源
    • Asset catalogView debugger的背景可以明确地设置为亮或暗,以便前景元素以足够的对比度显示
    解决问题
    • 默认情况下,watchOS PDF不再启用自动缩放,无论选择如何
    • 修复了打开属于外部项目引用的Asset catalog时可能发生的挂起问题
    Build System

    查看 Build System Release Notes for Xcode 10

    Command Line Tools
    新功能
    • 命令行工具包在 macOS SDK中安装macOS系统头文件。 使用已安装工具编译的软件将在Xcode中提供的macOS SDK中搜索标头,
      /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
      或命令行工具:
      /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
      依赖于你选中的Xcode
      默认情况下,命令行工具将在SDK中搜索系统标头。 但是,某些软件可能无法针对SDK正确构建,并且需要在/ usr / include下的基本系统中安装macOS标头。 如果是此类软件的维护者,建议更新项目以使用SDK,或者提交错误报告以解决阻止您这样做的问题。 作为一种解决方法,提供了一个额外的包,它将把标头安装到基本系统。 在将来的版本中,将不再提供此包。 您可以在以下位置找到此套餐:
      /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
      确保你使用的版本的命令行工具,运行xcode-select - s <Xcode 路径>Xcodeselect- s/Library/Developer/CommandLineTools后安装。
    Create ML
    新功能
    • MTDataTable,MLDataColumn,MLUntypedColumn支持数学运算,基于范围的切片,多列子选择,类型转换和其他数据预处理方法
    • 增强支持裁剪图像的能力
    已知问题
    • 不支持使用命令行工具创建ML
    解决问题
    • 关闭字段时,更改模型名称可以正确保存
    Debugging
    新功能
    • 运行时改变macOS app外观 Debug -> View Debugging -> Appearance
    • Xcode的 视图调试器添加了浅色和深色的背景色选择
    • NSVisualEffectView属性现在显示在视图调试器检查器中
    • Disk Gauge Report中的files表包含已关闭的文件,以便开发人员了解其大小
    • 视图调试器将appearanceeffectiveAppearance属性添加到视图检查器
    • 调试附件表允许开发人员打开Malloc Stack Logging(Live Allocations)
    • 磁盘计量报告包括一个新表,显示该进程的总读写大小
    • 检查器中显示的命名颜色,而视图调试现在指示其名称以及它们是否为系统颜色
    • Metal Frame 调试器
      调试Metal着色剂, 捕获Metal工作负载,选择绘制/分派调用并单击调试栏上的新调试按钮以开始调试着色器
      Debug Navigator中选择命令编码器项将显示一个图表,显示编码器如何通过资源使用相互依赖。 放大以获取有关附件和编码器的更多信息。
      每个绘制调用都有新的“ Geometry”项,您可以在其中查看后变换顶点数据的三维可视化以及顶点输入和输出。
    解决问题

    -Memory Gauge Report现在可以在所有平台上一致地报告物理足迹。

    • 存在大量静态Swift模块时,第一个Swift表达式评估的性能已得到优化
    • 尝试在模拟器上运行应用程序之前,Xcode等待模拟器可用。
    • Debug -> View Debugging菜单中的选项(如Show View Frames)现在按预期继续目标应用程序
    Deprecation Notices
    Deprecations
    • libstdc++ Xcode 8弃用,Xcode 10 开始不支持,推荐使用libc++。还要审核硬编码链接器标志和目标依赖项,以删除libstdc++的引用,包括(-lstdc++,-lddc++.6.0.9,libstdc++6.0.9.tbd,libstdc++.6.0.6.dylib),还需要针对libc++重建项目依赖项,如,针对libstdc++构建的静态归档
    • Libgcc已经过时了。Xcode 10无法再构建具有macOS 10.410.5部署目标的应用程序。
    • Subversion的支持已经被删除
    • 在仪器中不再支持仅适用于macOSSimulator的基于dtrace的自定义检测。 基于os_signpost的新定制仪器包允许更大的灵活性和对数据表示的控制,并支持所有平台
    • Xcode 10 是最后支持Swift 3的发布版本,从Swift 3. 转移到Swift 4.2 打开项目,Edit -> Convert -> To Current Swift Syntax
    • macOS 10.14 SDK 不在包含和支持编译32位的应用程序,如果需要编译i386,需要Xcode 9.4或更早的版本·
    Devices
    已知问题
    • 运行在iOS 12设备使用Xcode截屏可能会失败
      解决方案:使用设备进行截屏
    • Xcode 10运行一个Xcode 10以前的版本构建WatchKit App,可能会出现错误"The WatchKit app has an invalid stub executable."
      解决方案:清除构建文件重新运行App
    Documentation Viewer
    新功能
    • Quick Help 使用单个列布局,可以更好地利用其显示的可用空间
    • 文档查看器和快速帮助中的代码清单与用户当前选择的主题颜色相匹配
    Instruments
    新功能
    • Instruments 10线程状态中使用系统跟踪检测时- 添加了一种只显示线程状态通道的新线程模式,之前的OS Fundamentals图形样式(系统调用,VM故障和线程状态通道)仍然可用
    • Instruments 8 之前对系统跟踪仪表的支持已经被移除。包含来自这些仪器的数据的某些跟踪文件将不再在仪器中打开。 要查看这些文件,下载Xcode 10之前的版本
    • 可以构建和分发自己的自定义仪器
    已知问题
    • 如果Xcode尚未完成准备开发的任何连接设备,则仪器可能无法启动
      解决方案: 等待设置完成然后启动Instruments
    • Instruments可能无法在模拟器中配置库或框架单元测试
    • 当停止包含路标的录音(例如pointsOfInterestos_signpost(_:dso:log:name:signpostID :)os_log(_:dso:log:_:_ :) instruments)时,录音按钮在一定时间内可能无法重新激活。
      解决方案:在Mac上启动控制台,选择目标设备,让控制台继续运行。 控制台和目标之间的这种连接足以使仪器在录制结束时不挂起
    解决问题
    • iOS 11.3之前的版本上进行性能测试,大多数都失败了
    Interface Builder

    Interface Builder Release Notes for Xcode 10

    Localization
    新功能
    • Xcode 10支持新的Xcode本地化目录(.xcloc)导出和导入格式,用于本地化数据,可以包含XLIFF文件和其他可本地化的内容,如图像文件
    • Xcode提供了为尚未使用它但支持多个本地化的项目启用Base Internationalization
    解决问题
    • Export For Localization命令生成的XLIFF中,项目目录外部文件的内容将通过相对于项目目录的路径而不是绝对路径引用
    • Xcode现在提取以下Info.plist键的适当值以进行本地化: UTExportedTypeDeclarations, UTImportedTypeDeclarations, UIApplicationShortcutItems, INAlternativeAppNames
    Metal
    新功能
    • 直接调用Metal编译器时,必须在构建.metal文件时使用-c标志.当metallib使用生成的.air文件时,不添加该选项将导致错误.使用Xcode的构建系统调用Metal编译器自动添加标志
    Playgrounds
    新功能
    • Playgrounds现在回逐步执行代码,Shift-Return运行会编译新的代码行,对于不想重复运行长任务特别有用,例如训练机器学习模型或设置实时视图的状态,并允许您逐步迭代您的想法而无需重新启动Playgrounds
    已知问题
    • playground中切换到非默认工具链可能会导致Xcode崩溃
      解决方案:切换回默认工具链,然后打开playground
    解决问题
    • 修复了playground无法运行的问题,显示“couldn't lookup symbols”错误消息
    • 修复了在带有inline结果的playground中发生的崩溃
    • 修复了创建新playground页面时有时会发生的崩溃,尤其是在playground被锁定时
    • 修复了阻止iOS Game Playground模块正常工作的问题
    • playground中的代码现在完成支持辅助资源文件
    Refactoring
    解决问题
    • 解决了当编辑Refactor -> Rename时,无法获取键盘焦点当Reduce motion -> Accessibility选项打开
    Server
    解决问题
    • Xcode Server日志(例如触发器日志)现在可在集成日志报告中看到
    Signing and Distribution
    新功能
    • 支持通过命令行将应用程序上传到Apple xcodebuild -export Archive 命令会执行上传如果提供了包含一个键名为destination值为uploadExportOptions.plist文件。此外,必须在Xcode的“帐户”首选项窗格中添加具有必要的App Store Connect角色和提供者成员身份的Apple ID帐户.xcodebuild 支持"app-store","developer-id", "validation"分布式方法
    • Xcode的管理器中的开发者ID分发选项现在支持将应用程序上传到Apple进行审核,打包后在管理器中通过单击“发布应用程序”按钮,然后选择“开发者ID”方法和“Upload”目标来选择此选项。必须要有Apple ID 且已经加入会员.此外,上传的审核应用程序必须使用开发者ID证书进行签名.如有必要,发布工作流程可以创建此证书,但需要具有代理角色的Apple ID帐户才能执行此操作。
      上传要应用程序后,可以通过选择存档并单击“显示状态日志”按钮,在“管理器”窗口中查看应用程序的状态。 收到应用程序已经过审核的通知时,可以通过选择存档并单击“导出应用程序”按钮从“管理器”窗口中将其导出。 导出的应用程序包含装订的票证,可以发布
    Simulator
    新功能
    • 模拟器的“编辑”菜单中的“复制”和“粘贴”项目不再用于与模拟器设备的粘贴板同步。 “编辑”菜单现在具有用于处理这些操作的显式菜单项
    • 当使用iOS模拟器目标从xcodebuildXcode Server运行测试时,测试失败将导致嵌入测试操作结果包中的日志存档的收集
    已知问题
    • 如果使用键盘命令进行快进和快退,视频输出可能会在外部显示器上停止播放
      解决方案:从屏幕的右上角拉下控制面板,然后再次隐藏它。
    • 模拟设备中的macOS粘贴板和粘贴板之间的同步有时会失败
    • 操作系统可能需要几分钟才能在模拟器中首次启动
    • macOS 10.14上,模拟器可能会在启动时或在模拟器中首次与麦克风交互时提示进行麦克风访问(例如,使用Siri)如果拒绝权限,模拟器音频会话将无法使用任何类型的音频输入,无论模拟器内授予的权限如何.使用macOS系统偏好设置,安全性和隐私首选项窗格更改此设置。
      您的应用程序仍必须在模拟器中被授予麦克风权限。macOS将其权限策略作为一个整体应用于模拟器运行时版本和模拟器内的所有应用程序。 每个模拟器将权限策略应用于各个应用程序,就像设备一样
    Source Control
    新功能
    • 改进源代码管理身份验证工作流程,可提供更多信息并提供更强大的控制权来执行
    • 集成Bitbucket CloudBitbucket Server
    • 可以选择推送标签。
    • 集成 GitLab.comGitLab
    • 通过源代码控制启用的项目,源编辑器显示开发人员在装订线中所做的更改,并显示尚未被拉入项目的其他开发人员所做的更改
    • 使用GitHubBitbucketGitLab的新创建,验证和上传工作流程,可以轻松管理SSH密钥。
    • Rebase支持当pulling source control更改时
    已知问题
    • Xcode 不支持ed25519编码的SSH秘钥
      解决问题:使用不同加密形式的SSH密钥对
    解决问题
    • Source Control编辑器的子模式性能得到了改进,可以更快地加载和滚动。
    Source Editor

    Source Editor Release Notes for Xcode 10

    Static Analyzer
    新功能
    • 使用Grand Central Dispatch时,静态分析器会检查常见的性能模式,其中包括使用信号量等待回调
    + (NSString *)requestCurrentTaskName {
        __block NSString *taskName = nil;
        dispatch_semaphore_t sema = dispatch_semaphore_create(0);
        NSXPCConnection *connection =
          [[NSXPCConnection alloc]
            initWithServiceName:@"MyConnection"];
        id remoteObjectProxy = connection.remoteObjectProxy;
        [remoteObjectProxy requestCurrentTaskName:^(NSString *task) {
            taskName = task;
            dispatch_semaphore_signal(sema);
        }];
        dispatch_semaphore_wait(sema,
            dispatch_time(DISPATCH_TIME_NOW, 100)
        );
        return taskName;
    }
    

    此类模式可能会降低性能并导致应用程序挂起。 默认情况下,该检查当前处于禁用状态,但可以使用building setting设置“Performance Anti-Patterns with Grand Central Dispatch”来启用该检查

    • 静态分析器效率更高,并且会报告大多数程序的其他问题
    Swift

    Swift 4.2 Release Notes for Xcode 10

    Testing
    新功能
    • 现在可以将方案配置为仅在测试包中运行固定的测试子集,而不是自动包含添加到包中的新测试。 这可以在方案编辑器的“测试”窗格中配置为每个测试包的选项
    • XCTest UI测试现在将已启动目标应用程序的标准输出和错误流捕获到结果包中的文件
    • Xcode 10支持并行运行测试,减少测试所需的时间。 测试并行化支持macOS单元测试,以及iOStvOS模拟器上的单元和UI测试。 要启用并行化,请导航到方案编辑器(“Product”>“Scheme”>“Edit Scheme”),选择“Test”操作,然后选择“Info”选项卡,然后在测试目标旁边,单击“Options”。 最后,选择“Execute in parallel”(对于macOS测试)或“Execute in parallel on Simulator”(对于iOStvOS)
      通过在多个运行程序进程中在目标中发布测试类来进行测试并行化。 使用测试日志查看测试类的并行化方式。 您将在日志中看到已启动的每个运行程序进程的条目,并且在每个运行程序下方,您将看到它执行的类的列表。
      Simulator上并行测试时,每个运行程序进程在所选模拟器的单独克隆上执行。 对于名为“iPhone X”的模拟器,这些克隆将在Simulator中显示为“Clone 1 of iPhone X”“Clone 2 of iPhone X”等。
    • XCTest现在强制不要多次等待XCTestExpectation实例。这可以防止意外误用,对于反转期望尤其重要,因为它们会导致等待完全超时持续时间,从而导致测试执行速度变慢
      期望可能被多次意外等待的一种方式是,如果使用expectationWithDescription创建它,则等待使用waitForExpectations:timeout:,然后waitForExpectationsWithTimeout:handler:被调用。 XCTest现在会在发生这种情况时引发异常,列出应该调整的有问题的预期。
      例如,以下代码就存在这个问题:
    func testFoo() {
        let expectation1 = self.expectation(description: "expectation1")
        doSomething { expectation1.fulfill() }
        XCTWaiter().wait(for: [expectation1], timeout: 1)
     
        let expectation2 = self.expectation(description: "expectation2")
        doSomething { expectation2.fulfill() }
     
        // API Violation exception because it waits on both expectations,
        // but expectation1 has already been waited on.
        self.waitForExpectations(timeout: 1)
    }
    

    两种修复的可能

    func testFoo_fix1() {
        let expectation1 = self.expectation(description: "expectation1")
        doSomething { expectation1.fulfill() }
        XCTWaiter().wait(for: [expectation1], timeout: 1)
    
        let expectation2 = self.expectation(description: "expectation2")
        doSomething { expectation2.fulfill() }
    
        // Only wait on expectation2, which has not yet been waited on.
        self.wait(for: [expectation2], timeout: 1)
    }
     
    func testFoo_fix2() {
        // Create an XCTestExpectation directly, not using XCTestCase convenience API.
        let expectation1 = XCTestExpectation(description: "expectation1")
        doSomething { expectation1.fulfill() }
        XCTWaiter().wait(for: [expectation1], timeout: 1)
    
        let expectation2 = self.expectation(description: "expectation2")
        doSomething { expectation2.fulfill() }
    
        self.waitForExpectations(timeout: 1) // Waits only for expectation2.
    }
    
    • 现在可以将测试包配置为每次运行测试时以随机顺序执行其内容。 这可以在方案编辑器的“测试”窗格中启用,作为每个测试包的选项
    • xcodebuild具有新的命令行选项来控制并行测试的行为。 使用-parallel-testing-enabled可以覆盖方案中的每个目标设置,以确定是否启用了并行化。 如果要控制启动运行数量,请使用-parallel-testing-worker-count-maximum-parallel-testing-workers
    • Xcode偏好设置包含用于控制Xcode在并行运行测试时应尝试的并行度的UI .Mac Test Parallelization用于调整并行运行macOS单元测试时生成的运行器数量。Simulator Test Parallelization 调整iOS ,tvOS app UI测试时生成的模拟器克隆的数量。注意,从xcodebuild进行测试时,-parallel-testing-worker-count-maximum-parallel-testing-workers命令行选项优先于这些值
    • XCTestXCUIElement上添加了新的API,用于捕获UI的整个状态,用于导出到外部系统或用于本地检查。 它包含一个表示UIAPI快照的类型,用于将该快照导出到标准值类型的字典
    解决问题
    • 测试日志中会显示可能导致丢失或没有覆盖数据的错误。 如果发现任何此类错误,请使用Apple Bug Reporter提交错误,并在DerivedData中附加项目文件夹的压缩存档
    • 在与WKWebViewSFSafariViewController内部的内容交互时,UI测试记录期间Xcode不再崩溃
    • 修复了在使用不使用点作为小数分隔符的区域设置的系统上编辑这些测量时导致基线测量更改丢失和将来测量报告为%inf的问题
      -"Run tests in Parallel"重命名为"Test on the selected destinations concurrently",此选项使选定的目标同时运行方案的测试. 它不会导致单个目标并行运行测试。 要允许每个目标并行运行测试,请取消选中此复选框,并在方案中启用并行测试,或者将-parallel-testing-enabled YES添加为xcodebuild参数
    • 当在测试导航器或源编辑器(Xcode)中单击测试gem时,或者在使用-only-testing时,Xcodexcodebuild现在在活动方案中构建所有目标:(xcodebuild)。 以前,只会构建相关的测试包目标及其依赖关系。Xcodexcodebuild现在也将禁止您运行其测试包不属于活动(Xcode)或指定(xcodebuild)方案的测试或测试类。

    相关文章

      网友评论

        本文标题:Xcode 10 更新

        本文链接:https://www.haomeiwen.com/subject/zabcqqtx.html