iOS知识总结技术 学习

Xcode 11 Beta 5

2019-08-16  本文已影响0人  Cooci_和谐学习_不急不躁

这一篇文章给大家介绍:Xcode 11 Beta 5,虽然是beta版本,但是在不久的将来必将来临,例如:SwiftUI + Combine

概述

Xcode 11包括用于iOS 13macOS Catalina 10.15watchOS 6tvOS 13sdkXcode 11支持iOS 8及以上版本tvOS 9及以上版本watchOS 2及以上版本的设备上调试。Xcode 11要求Mac运行macOS Mojave 10.14.4或更高版本。这是版本要求

通用

新特性

注意:SwiftUI开发工具只能在macOS Catalina 10.15 beta版上运行。

已知问题

已解决的问题

Apple Clang Compiler

新特性

static int value1 = 0;                  // Stored in __DATA
static int value2 = 0;                  // Stored in __DATA
const int * const valuePtr = &value1;   // Stored in __DATA_CONST

// ERROR: Attempting to store a value to a constant pointer
(int *)valuePtr = &value2;

已知问题

已解决的问题

Asset Catalog

新特性

已知问题

已解决的问题

Build System

新特性

已知问题

已解决的问题

Command Line Tools

已解决的问题

Core Data

新特性

已解决的问题

Create ML

新特性

已知问题

Debugging

新特性

已知问题

已解决的问题

Devices

已知问题

已解决的问题

DriverKit

已解决的问题

Instruments

新特性

已知问题

已解决的问题

Interface Builder

新特性

在Swift中,添加@IBSegueAction属性:

@IBSegueAction
func makeDogController(coder: NSCoder, sender: Any?, segueIdentifier: String?) -> ViewController? {
    PetController(
        coder: coder,
        petName:  self.selectedPetName, type: .dog
    )
}

在Objective-C中,在返回类型前添加IBSegueAction:

- (IBSegueAction ViewController *)makeDogController:(NSCoder *)coder
               sender:(id)sender
      segueIdentifier:(NSString *)segueIdentifier
{
   return [PetController initWithCoder:coder
                               petName:self.selectedPetName
                                  type:@"dog"];
}

已知问题

已解决的问题

Library

已知问题

Linking

已解决的问题

LLDB

新特性

defaults write com.apple.dt.lldb DefaultPythonVersion 2

已解决的问题

Localization

新特性

请注意: 使用-s参数并不会禁止对 NSLocalizedStringCFCopyLocalizedString 的支持。

已解决的问题

Mac Catalyst

已知问题

Organizer

新特性

Playgrounds

新特性

已解决的问题

Project Navigator

新特性

Reality Composer

新特性

已知问题

已解决的问题

Server

已知问题

已解决的问题

Signing and Distribution

新特性

已知问题

已解决的问题

Simulator

新特性

xcrun simctl status_bar <device> override --time "9:41" --batteryState charged --batteryLevel 100

有关全部选项,请参见xcrun simctl help status_bar。(51697821)

已知问题

请注意:与任何利用 GPU 的应用程序一样,外部连接显示的性能行为也会随着工作负载的不同而变化。

已解决的问题

Source Control

新特性

已知问题

已解决的问题

Source Editor

新特性

已解决的问题

Static Analyzer

新特性

Swift

新特性

struct Dog {
    var name = "Generic dog name"
    var age = 0

    // The synthesized memberwise initializer
    init(name: String = "Generic dog name", age: Int = 0)
}

let sparky = Dog(name: "Sparky") // Dog(name: "Sparky", age: 0)
class Foo {
    typealias FooClosure = () -> String
    func fooFunction(closure: @autoclosure FooClosure) {}
}
class MyClass: NSObject {
    @objc func clone() -> Self { return self }
}
let values: (Int, Int) = (10, 15)
let converted: (Int?, Any) = values
// Declare a type with a static subscript:
enum ProcessEnvironment {
    static subscript(name: String) -> String? {
        get { getenv(name) }
        set { setenv(name, to: newValue) }
    }
}

// Use it with any of these syntaxes:
ProcessEnvironment["PATH"]! += ":/usr/local/bin"
ProcessEnvironment["PATH"]! += ":/usr/local/bin"
someVarOfProcessEnvironmentDotType["PATH"]! += ":/usr/local/bin"

类型下标还可以与动态成员查找一起使用,以创建动态类型属性。

// Declare a type with a static subscript:
@dynamicMemberLookup
enum ProcessEnvironment {
    // …As above…
    static subscript(dynamicMember name: String) -> String? {
        get { self[name] }
        set { self[name] = newValue }
   }
}

// Now you can use property syntax with ProcessEnvironment:
ProcessEnvironment.PATH! += ":/usr/local/bin"
ProcessEnvironment.self.PATH! += ":/usr/local/bin"
someVarOfProcessEnvironmentDotType.PATH! += ":/usr/local/bin"
enum Foo { case none }

// Assigned Optional.none instead of Foo.none.
let foo: Foo? = .none
// Comparing with Optional.none instead of Foo.none.
let isEqual = foo == .none

编译器会提供一个警告,并提供一个修复程序来用 Optional替换.none。没有或 Foo。没有人能解决这种含糊不清的问题。

func makeACollection() -> some Collection {
    return [1, 2, 3]
}

调用该函数的代码可以使用协议的接口,但不能看到底层类型。(SE-0244, 40538331)

enum Foo { case zero, one }

let foo: Foo? = .zero

switch foo {
    case .zero: break
    case .one: break
    case .none: break
}
struct Point {
    var x, y: Int
}

@dynamicMemberLookup
struct Box<T> {
    var v: T

    init(_ v: T) {
        self.v = v
    }

    subscript<U>(dynamicMember member: KeyPath<T, U>) -> U {
        get { return v[keyPath: member] }
    }
}

var box = Box(Point(x: 0, y: 0))
_ = box.x
struct Box<Value> {
    func transform1() -> Self { return self }
    func transform2() -> Box<Value> { return self }
}
struct BadCaptureExample {
    var escapingClosure: () -> ()

    mutating func takesInOut(_ x: inout Int) {
        func localFunction() {
            x += 1
        }

        escapingClosure = { localFunction() }
    }
}
func takesNoEscape(_ fn: () -> ()) {
    func localFunction() {
        fn()
    }

    { localFunction() }()
}

已知问题

已解决的问题

不再允许重复元组元素标签,因为这会导致不正确的行为。(SR-8974, 45218256)
以下内容现在被诊断为错误:

let dupLabels: (foo: Int, foo: Int) = (foo: 1, foo: 2)
enum Foo {
    case bar(x: Int, x: Int)
}
let f: Foo = .bar(x: 0, x: 1)

只要内部标签不同,在声明函数和下标时仍然可以使用重复标签。例如:

func foo(bar x: Int, bar y: Int) {}
subscript(a x: Int, a y: Int) -> Int {}

SwiftUI

已知问题

var body: some View {
    VStack {
        if true {
            Text("Hello World")
        }
    }
}

解决方法:将现有视图嵌入到容器中——无论是在画布中还是在源编辑器中——然后将新视图放入容器中。

解决问题

SwiftUI Tutorials

已知问题

Swift Packages

已知问题

#if !os(watchOS)
// XCTest code
#endif

已解决的问题

Testing

新特性

func testExample() {
    // Measures the CPU and memory impact of sorting the input list.
    measure(metrics: [XCTCPUMetric(), XCTMemoryMetric()]) {
        sortedList = qsort(list: self.fiftyNumbersFrom0to100)
    }
}
func testFirstNameNotEmpty() throws {
    let forenames: [String] = customer.forenames

    let firstName =  try XCTUnwrap(forenames.first)
    XCTAssertFalse(firstName.isEmpty)
}

XCTUnwrap是一个抛出断言,最好在抛出测试方法中使用,如上例所示。(30667432)

*结果包的格式在 Xcode 11 中更改。结果包是 Xcode 11 使用 xcresult 文件扩展名生成的资产,该扩展名包含有关构建、测试、代码覆盖率等信息。使用 Xcode 10 或更早版本生成的任何 xcresult文件都不能被Xcode 11读取。通过传递 -resultBundlePath ./Example 可以生成一个结果包。将 xcresult 转换为xcodebuild 调用和示例。然后可以在 Xcode中打开 xcresultXcode 还在派生数据中创建结果包。当前的结果包版本号是3,可以通过传递xcodebuild标志-resultBundleVersion 3来指定。版本3是Xcode 11中的缺省版本,但是仍然建议自动化显式地传递该标志,以便将来任何可能成为缺省版本的版本都不会对现有工具造成问题。可以使用xcresulttool检查结果包。可以使用xcrun xcresulttool get——format JSON——path ./Example导出结果包根对象的JSON表示。可以通过添加标记——id REF. xcresulttool来导出xcresult和任何由JSON输出中找到的引用标识的嵌套对象。xcresulttool还使用xcrun xcresulttool formatDescription` 提供其格式的描述。(41633595)

已知问题

SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(inherited) $(PLATFORM_DIR)/Developer/Library/Frameworks"
LIBRARY_SEARCH_PATHS = "$(inherited) $(PLATFORM_DIR)/Developer/usr/lib"
SWIFT_INCLUDE_PATHS = "$(inherited) $(PLATFORM_DIR)/Developer/usr/lib"

已解决的问题

TestFlight

已知问题

这一篇 Xcode 11 Beta 5 翻译 官方文档 长夜漫漫,独自一人翻译。如有纰漏敬请原谅(同时还望指出,及时更改,以惠后人)。内容更新角度是空前的,我相信正式版来临必将震撼整个互联网行业!通过现在 Xcode 11 出现之后的 SwiftUI + Combine 就知道!身处互联这个利益的漩涡之中,我们唯一能做的就是与时俱进

就问此时此刻还有谁?45度仰望天空,该死!我这无处安放的魅力!

上一篇下一篇

猜你喜欢

热点阅读