Help us understand the problem. What is going on with this article?

[WWDC19] Xcode11新機能まとめ

はじめに

WWDC19 報告会 at Yahoo! JAPANで発表したXcode11の新機能について文章でまとめた記事です。
NDAや著作権に配慮してスクリーンショットなどは載せておりません。

エディタ

エディタUIの刷新

  • コミット履歴が一番右のインスペクタに統合
    • 真ん中の時計アイコン(Source Control History表示)
  • AssistantとAuthorsエディタをStandardエディタに統合
    • Editor Optionから表示モードが選択できるように
      • Editor Only(エディタのみ)
      • Editor and Canvas(SwiftUIのプレビュー用)
      • Editor and Assistant(従来のアシスタントエディタ)
  • Authorの表示
    • Editor Option > Show Authors
  • エディタを縦横に追加可能
    • 縦に追加する場合はoptionを押しながら
  • 個々のエディタで個別の表示設定が可能

    • エディタを縦横に分割可能
  • 縦に追加する場合はoptionを押しながら

  • フォーカスモードで一つのエディタを一時的に拡大

SwiftUIのサポート

  • プロジェクト作成時にUse SwiftUIにチェック
  • プレビュー表示
    • Editor Option > Editor and Canvas

Mini Map | ミニマップ

  • ミニマップの表示
    • Editor Option > Show Minimap
  • すばやく任意のセクションにジャンプ
  • ホバーで関数名などを表示
  • find箇所のハイライト

inline code diffs | インラインコード差分

  • change barをクリックしてShow Changeをクリック
  • マウスホバーで差分を強調表示

ドキュメンテーション機能の強化

  • パラメータを追加した時に差分だけのコメントを追加

    • command + クリック > Add Documentation
  • typoの修正もドキュメンテーションと同期

    • command + クリック > Edit All in Scope

Spell Checking | スペルチェック

  • スペルチェック機能がサポートされた
  • 現在開いているファイルのチェック
    • Edit > Format > Spelling and Grammar > Check Document Now
    • command + ;
  • タイピング時に自動でチェック
    • Edit > Format > Spelling and Grammar > Check Spelling While Typing
  • 赤線部分を右クリック
    • スペル候補が表示される
    • Ignore Spelling(スペルを無視)
    • Learn Spelling(スペルを学習)

cherry-pick

  • git cherry-pickコマンドがGUIで操作可能に
  • 別ブランチでのコミットを反映できる機能

stash

  • git stashコマンドがGUIで操作可能に
  • commitしていない変更を一時退避できる機能
  • メッセージも任意で追加可能

source control file inspector

  • インスペクタから現在のブランチでの履歴を見られる
  • StoryboardやXIBも含め、全ての種類のファイルで閲覧できる

パッケージ管理

Swift Package Manager

  • Swift Package Managerの機能がXcodeに統合
  • GitHub、Bitbucket、GitLab、または自分のホストで公開されているSwiftパッケージを利用できる
  • 依存関係分析に基づいてパッケージを自動的に取得
  • Swiftパッケージの作成方法(参考:Creating Swift Packages
  • Swiftパッケージの導入方法(参考:Adopting Swift Packages in Xcode

XCFramework

  • ライブラリ、フレームワークの新しいバイナリ配布形式(.xcframework)
  • SwiftとC-basedコードをサポート
  • 1つのフレームワークで複数のプラットフォームで動かせる
    • 複数のフレームワークがアーキテクチャ毎のディレクトリに含まれる構成
  • xcframeworkを作成
    • ビルド設定のBuild Options > Build Libraries for Distribution をYesにする
xcodebuild archive -scheme XXX -destination "xxx" -destination "xxx" SKIP_INSTALL=NO
xcodebuild -create-xcframework -framework [path] -framework [path] -output XXX.xcframework

デバッグ・テスト

Device Conditions

  • デバイスの発熱状態、 通信状態をシミュレートできる機能
  • Window > Device and Simulators > DEVICE CONDITIONS
  • Thermal State (発熱状態のシミュレート)
    • 選択候補
      • Fair
      • Serious
      • Critical
    • 本当に熱くなるわけではない
  • Network Link(通信状態)
    • 選択候補
      • 100% packet loss
      • Very poor network
      • Edge Network - poor
      • Edge Network - average
      • Edge Network - good
      • Edge Network - best
      • 2G Network - poor
      • 2G Network - better
      • 3G Network - average
      • 3G Network - good
      • 3G Network - best
      • LTE Network
      • WiFi Network
      • WiFi Network(802.11ac)
      • DSL Network
      • High Latency DNS

Environment Overrides

  • デバイスの表示設定を実行時にリアルタイムで変更できる機能
  • Interface Style(ダークモードかどうか)
  • Dynamic Type(ダイナミックタイプ)
  • Accessibility Options(アクセシビリティでの設定)
    • Increase Contrast(コントラストを上げる)
    • Bold Text(文字を太くする)
    • Reduce Transparency(透明度を下げる)
    • Reduce Motion(示唆効果を減らす)
    • On/Off Labels(オン/オフラベル)
    • Button Shapes(ボタンの形)
    • Grayscale(グレイスケール)
    • Smart Invert(色を反転)
    • Differentiate Without Color(色なしで区別)

XCTest frameworkの新しいAPI

XCTUnwrap

  • nilが入ったらassert(=XCTAssertNotNil)
  • nilでない場合はUnwrapして値が取り出せる
  • nilの場合throwされるので、テストケースの関数をthrowsにする
func testFirstNameNotEmpty() throws {
    let forenames: [String] = customer.forenames

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

measure(metrics:options:block:)

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

Test Plan

  • 異なる設定毎にでテストを複数回実行できる機能
    • ローカリゼーション(言語、地域、位置情報)
    • アルファベット順、ランダム順
    • サニタイザー(Address、Thread、Undefined Behavior)
    • メインスレッドチェッカー
    • 引数もしくは環境変数
    • Memory diagnostics(MallocStackLogging、NSZombies)
    • スクリーンショットの撮影
  • 一箇所にテスト変数を定義し、複数のスキーム間でシェア可能
    • Test Planファイル(拡張子は.xctestplan)を作成(中身はJSON形式)
      • Testsタブ
        • テストケースの有効/無効のチェック
        • 並列実行するか
        • 新しいテストケースを自動で追加するか
      • Configurationsタブ
        • Shared Settings(すべてのテストで共通するデフォルト設定、個々のConfigurationで上書きも可能)
        • Configuration(Configurationを作成した分だけテストが実行される)
      • Option + クリックで選択したConfigurationのテストを1回だけ実行することも可能
        • テストナビゲーターではcontrol + クリックで同様のことが可能
    • 既存のTestスキームをTest Planをコンバートすることも可能
# -testPlanオプションを複数つけることで、Configurationを複数指定
xcodebuild test -project ... -scheme ... -testPlan 'Configuration1' -testPlan 'Configuration2'

Result Bundle

  • ビルドとテストの結果を含む新しいファイル形式(拡張子は.xcresult)
    • ビルドログ
    • テストレポート
    • コードカバレッジレポート
    • テストアタッチメント
  • 特徴
    • 従来のフォーマットに比べて容量が小さい(4倍小さい)
    • Xcodeで内容を閲覧可能
    • プログラムでアクセス可能なコンテンツ
    • xcresulttoolでアクセスする
# Result Bundleの書き出しパス指定
xcodebuild test ... -resultBundlePath /path/ResultBundle.xcresult

# 結果をJSONで取得
xcrun xcresulttool get --path ResultBundle.xcresult --format json

# マークダウン形式
xcrun xcresulttool formatDescription get

# コードカバレッジ
xcrun xccov view --report ResultBundle.xcresult

# コードカバレッジレポートの比較
xcrun xccov diff --json Before.xcresult After.xcresult

その他の改善

Signing and Distribution | 署名と配布

  • Signing & Capabilitiesタブにまとめられた
  • Configuration毎の設定が可能
  • 新しい証明書タイプ
    • Apple Development、Apple Distribution
    • すべてのプラットフォームをサポートする
    • Xcode11以降で利用可能
    • 既存の証明書も利用可能だが、旧バージョンのXcodeでは新しい証明書を利用できない

Asset Catalogの新機能

  • ローカライズのサポート
  • ダークモードのサポート
    • Darkアピアランスの設定(Any、Light、Dark)
  • SF Symbols
    • Symbol Configurationからサイズと太さのバリエーションを設定
  • 切り取り、コピー、貼り付けが可能に

Metrics Organizer

  • Window > Organizer > Metrics
  • リリース済みアプリのメトリクスデータを収集する機能
    • Battery(バッテリー消費)
    • Launch Time(起動時間)
    • Hang Rate(ハング率|レスポンス)
    • Memory(メモリ消費)
    • Disk Writes(ディスク書き込み)
  • ユーザーの許可設定が必要(設定 > プライバシー > 解析 > Appデベロッパと共有)

シミュレータ

  • Metalサポート
  • 60FPSで滑らかに描画
  • CPUの利用は90%減
  • Warm bootが二倍早く
  • シミュレータでもWatch単体で起動できるように

参考資料

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした