xcode 7 の新しいところ #cm_ios9

111
EZ-NET 熊⾕友宏 http://ez-net.jp/ 2015.11.04 @ iOS 9 週連続 Bootcamp ! Xcode 7 の新しいところ

Upload: tomohiro-kumagai

Post on 11-Apr-2017

3.225 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Xcode 7 の新しいところ #cm_ios9

EZ-NET 熊⾕友宏 http://ez-net.jp/

2015.11.04 @ iOS 9 週連続 Bootcamp !

Xcode 7 の新しいところ

Page 2: Xcode 7 の新しいところ #cm_ios9

熊谷友宏EZ-NET http://ez-net.jp/ @es_kumagai

CodePiece

iOS, OS X, Apple Watch アプリ

ソースコードを Twitter と Gist に同時投稿できる。

いつもの電卓計算式も見える電卓アプリ。 watchOS 1 対応

音で再配達ゴッド簡単操作で 再配達の申し込み。

EZ-NET IP PhoneiPhone でひかり電話を使う。 自宅 LAN からの利用専用

Page 3: Xcode 7 の新しいところ #cm_ios9

熊谷友宏EZ-NET http://ez-net.jp/ @es_kumagai

横浜 iPhone 開発者勉強会#yidev

勉強会

わいわい・ゆるく、iPhone 開発者のみんなで楽しく過ごすのが目的の会

【 横浜・馬車道 】カジュアル Swift 勉強会

#cswift

ゆるくみんなで Swift を語らえる場を作りたくて始めた会

【 横浜・青葉台 】

第21回を 2015-12-12 に開催 第3回を 2015-11-14 に開催

Page 4: Xcode 7 の新しいところ #cm_ios9

Xcode 5 徹底解説著書

> 全機能を徹底解説 ✔ 各画面の使い方 ✔ プロジェクトやコードの編集 ✔ インターフェイスビルダー ✔ ビルドとデバッグ ✔ ユニットテストと Bot

> 紙版は絶版 (2015/08/21) > 電子書籍版は販売中

✔ 10x-Eng.com でも取扱予定2014/04/28 - 2015/08/21

750 ページ

Page 5: Xcode 7 の新しいところ #cm_ios9

Swift 2 の話をする予定MSM 2015

> MSM 2015 ✔ NPO 法人 MOSA 主催 ✔ 有料イベント(会員制) ✔ 年に一度の2日間に渡るお祭り的なイベント

✔ Apple 最新技術の話題満載

> NPO 法人 MOSA ✔ 10 年以上の活動実績 ✔ 法人会員での参加も多い印象

2015/11/06 - 2015/11/07http://www.mosa.gr.jp/

Page 6: Xcode 7 の新しいところ #cm_ios9

Xcode 7̶ 2015.09.16 ̶

Page 7: Xcode 7 の新しいところ #cm_ios9

▶ Swift 2 ▶ 新 OS サポート ▶ UI テスト ▶ コードカバレッジ ▶ ドキュメントコメント ▶ 呼出階層検索ナビゲーター ▶ インターフェイス定義の確認 ▶ 無料のオンデバイス開発

新機能Xcode 7

▶ スタックビュー ▶ ストーリーボード参照 ▶ オンデマンドリソース

Page 8: Xcode 7 の新しいところ #cm_ios9

▶ Swift 2 ▶ 新 OS サポート ▶ UI テスト ▶ コードカバレッジ ▶ ドキュメントコメント ▶ 呼出階層検索ナビゲーター ▶ インターフェイス定義の確認 ▶ 無料のオンデバイス開発

新機能 ざっくり紹介Xcode 7

▶ スタックビュー ▶ ストーリーボード参照 ▶ オンデマンドリソース

Page 9: Xcode 7 の新しいところ #cm_ios9

▶ Swift 2 ▶ 新 OS サポート ▶ UI テスト ▶ コードカバレッジ ▶ ドキュメントコメント ▶ 呼出階層検索ナビゲーター ▶ インターフェイス定義の確認 ▶ 無料のオンデバイス開発

Xcode 7

▶ スタックビュー ▶ ストーリーボード参照 ▶ オンデマンドリソース

新機能 じっくり紹介

Page 10: Xcode 7 の新しいところ #cm_ios9

Xcode 7 の新機能ざっくり紹介

Page 11: Xcode 7 の新しいところ #cm_ios9

Swift 21/8

Page 12: Xcode 7 の新しいところ #cm_ios9

▶ プロトコル拡張とジェネリック拡張 ▶ 基本構文の追加guard, defer, repeat-while

▶ エラーハンドリング機構do-catch, try, throws, rethrows

▶ 関数 forEach の追加 ▶ 再帰的な列挙子 (indirect case) ▶ #available による環境判定

Swift 2Xcode 7 の新機能

ざっくり

Page 13: Xcode 7 の新しいところ #cm_ios9

新 OS サポート2/8

Page 14: Xcode 7 の新しいところ #cm_ios9

▶ iOS 9.0 ▶ OS X 10.11 ▶ watchOS 2.0 ▶ tvOS 9.0

新 OS サポートXcode 7 の新機能

ざっくり

Page 15: Xcode 7 の新しいところ #cm_ios9

呼出階層検索ナビゲーター3/8

Page 16: Xcode 7 の新しいところ #cm_ios9

▶ 機能がどこで使われているか検索できる

呼出階層検索ナビゲーターXcode 7 の新機能

ざっくり

呼出階層を 検索 どこから

呼ばれるか分かる

⌘⇧⌃ H

Page 17: Xcode 7 の新しいところ #cm_ios9

インターフェイス定義の確認4/8

Page 18: Xcode 7 の新しいところ #cm_ios9

▶ Swift のインターフェイス定義だけ見られる ▶ 実装が省かれるので見渡しやすい ▶ Objective-C ヘッダーもSwift のインターフェイス定義に変換できる

インターフェイス定義の確認Xcode 7 の新機能

ざっくり

Page 19: Xcode 7 の新しいところ #cm_ios9

インターフェイス定義の確認Xcode 7 の新機能

ざっくり

ここから 定義を生成

Page 20: Xcode 7 の新しいところ #cm_ios9

インターフェイス定義の確認Xcode 7 の新機能

ざっくり

読みづらかった 機能の定義が …

Page 21: Xcode 7 の新しいところ #cm_ios9

インターフェイス定義の確認Xcode 7 の新機能

ざっくり

すっきり把握しやすくなる

Page 22: Xcode 7 の新しいところ #cm_ios9

インターフェイス定義の確認Xcode 7 の新機能

ざっくり

Objective-C の ヘッダーファイルも …

Page 23: Xcode 7 の新しいところ #cm_ios9

インターフェイス定義の確認Xcode 7 の新機能

ざっくり

Swift の 構文で見れる

Page 24: Xcode 7 の新しいところ #cm_ios9

無料のオンデバイス開発5/8

Page 25: Xcode 7 の新しいところ #cm_ios9

▶ 無料の Apple ID だけでコード署名できる ▶ iOS 9 以前のアプリも実行できる ▶ インストールされたアプリはホーム画面からいつでも起動できる

無料のオンデバイス開発Xcode 7 の新機能

ざっくり

Page 26: Xcode 7 の新しいところ #cm_ios9

無料のオンデバイス開発Xcode 7 の新機能

ざっくり

▶ アカウント設定で無料の Apple ID を登録してターゲット設定で選択する

実行手順 (1/3)

無料の Apple ID を選択

Page 27: Xcode 7 の新しいところ #cm_ios9

無料のオンデバイス開発Xcode 7 の新機能

ざっくり

▶ 実機を選択してデバッグ実行を行い出てきた画面で Fix Issue する

実行手順 (2/3)

コード署名が 生成される

Page 28: Xcode 7 の新しいところ #cm_ios9

無料のオンデバイス開発Xcode 7 の新機能

ざっくり

▶ コード署名の問題が解決すると実機でアプリが起動する

実行手順 (3/3)

これが消えると 実機で動き出す

Page 29: Xcode 7 の新しいところ #cm_ios9

スタックビュー6/8

Page 30: Xcode 7 の新しいところ #cm_ios9

▶ 複数のビューを詰め込めるビュー ▶ 余白と順番で手軽にレイアウトできる ▶ オートレイアウトの使用を最小限にできる ▶ 全機能は iOS 9.0 と OS X 10.11 で使える

スタックビューXcode 7 の新機能

ざっくり

Page 31: Xcode 7 の新しいところ #cm_ios9

スタックビューXcode 7 の新機能

ざっくり

ここから簡単に まとめられる

まとめたい ビューを選んで

Page 32: Xcode 7 の新しいところ #cm_ios9

ストーリーボード参照7/8

Page 33: Xcode 7 の新しいところ #cm_ios9

▶ ストーリーボードを分離してリンクできる ▶ 画面の見通しが効きやすくなる ▶ 複数人数でのデザインがしやすいかも ▶ 全機能は iOS 9.0 と OS X 10.11 で使える

ストーリーボード参照Xcode 7 の新機能

ざっくり

Page 34: Xcode 7 の新しいところ #cm_ios9

ストーリーボード参照Xcode 7 の新機能

ざっくり

分割したい 部分を選んで

リファクター すると…

Page 35: Xcode 7 の新しいところ #cm_ios9

ストーリーボード参照Xcode 7 の新機能

ざっくり

別ファイルに 分断される

Page 36: Xcode 7 の新しいところ #cm_ios9

オンデマンドリソース8/8

Page 37: Xcode 7 の新しいところ #cm_ios9

▶ リソースを必要時に DL できる ▶ リソースは App Store に保持される ▶ 実行可能バイナリ以外のほぼ全てを扱える ▶ NSBundleResourceRequest で取得する ▶ tvOS, watchOS, iOS で利用可能

オンデマンドリソースXcode 7 の新機能

ざっくり

Page 38: Xcode 7 の新しいところ #cm_ios9

オンデマンドリソースXcode 7 の新機能

ざっくり

ターゲットのリソースタグで設定

Page 39: Xcode 7 の新しいところ #cm_ios9

オンデマンドリソースXcode 7 の新機能

ざっくり

ファイルインスペクターからも設定できる

アセットカタログでは属性インスペクターからも設定できる

Page 40: Xcode 7 の新しいところ #cm_ios9

オンデマンドリソースXcode 7 の新機能

ざっくり

デバッグ時の リソースサーバーを 変更できる

ターゲットの ビルド設定から

Page 41: Xcode 7 の新しいところ #cm_ios9

オンデマンドリソースXcode 7 の新機能

ざっくり

リソースの状況を 確認できる

ディスクデバッグゲージで

Page 42: Xcode 7 の新しいところ #cm_ios9

Xcode 7 の新機能じっくり紹介

Page 43: Xcode 7 の新しいところ #cm_ios9

UI テスト1/3

Page 44: Xcode 7 の新しいところ #cm_ios9

▶ 画面操作を自動でテストする ▶ コードでアプリを操作する ▶ 操作からコードを生成できる

特徴UI テスト

Page 45: Xcode 7 の新しいところ #cm_ios9

テキストフィールドに入力したら ボタンが押せるようになるか確認

たとえば

Page 46: Xcode 7 の新しいところ #cm_ios9

ここに入力 したときに

押せるように なるのを確認

たとえば

Page 47: Xcode 7 の新しいところ #cm_ios9

テストを登録する

Page 48: Xcode 7 の新しいところ #cm_ios9

STEP 1 : テストターゲットを登録UI テストの登録

Page 49: Xcode 7 の新しいところ #cm_ios9

STEP 2 : テストメソッドを登録UI テストの登録

test で始まる メソッドを定義

テストナビゲータに 登録される

Page 50: Xcode 7 の新しいところ #cm_ios9

テストコードを書く

Page 51: Xcode 7 の新しいところ #cm_ios9

コードで画面を操作できるUI テスト

func testAutoEnabled() { let app = XCUIApplication() let window = app.windows["CodePiece"] let menuBars = app.menuBars let TweetTextField = window.textFields["TweetText"] let tweetButton = window.buttons["PostButton"]

menuBars.menuItems["Clear Tweet"].click() XCTAssertFalse(tweetButton.enabled)

TweetTextField.click() TweetTextField.typeText("abc") XCTAssertTrue(tweetButton.enabled)

}

Page 52: Xcode 7 の新しいところ #cm_ios9

書き方が分からないときは?

Page 53: Xcode 7 の新しいところ #cm_ios9

たとえば

画面いっぱいに 表示させたい

Page 54: Xcode 7 の新しいところ #cm_ios9

操作をコードに変換するUI テスト

入力したい行に カーソルを置いて

記録開始

Page 55: Xcode 7 の新しいところ #cm_ios9

変換したい操作を実施UI テスト

最大化ボタンを 押すと・・・

Page 56: Xcode 7 の新しいところ #cm_ios9

操作がコードに記録されるUI テスト

操作が 記録される

Page 57: Xcode 7 の新しいところ #cm_ios9

先の画面操作を記録したい場合は?

Page 58: Xcode 7 の新しいところ #cm_ios9

この場面で操作を記録したい

たとえば

Page 59: Xcode 7 の新しいところ #cm_ios9

操作の記録は休止できるUI テスト

記録休止 ボタン

▶ 操作をコードに変換しなくなる ▶ アプリの操作は進められる ▶ 記録したい場面から再開できる

Page 60: Xcode 7 の新しいところ #cm_ios9

テスト結果を見る

Page 61: Xcode 7 の新しいところ #cm_ios9

CASE 1 : テストナビゲーターで確認UI テストの実行結果

テスト項目と 結果を確認可能

Page 62: Xcode 7 の新しいところ #cm_ios9

CASE 2 : テストログビューで確認UI テストの実行結果

テスト項目と 結果を確認可能

Page 63: Xcode 7 の新しいところ #cm_ios9

CASE 2 : テストログビューで確認UI テストの実行結果

その時の画面も 記録されている

Page 64: Xcode 7 の新しいところ #cm_ios9

まとめUI テスト

Page 65: Xcode 7 の新しいところ #cm_ios9

▶ 従来の XCTest と同じ感覚で使える

▶ UI をコードで操作する

▶ 操作の都度、状態をコードで判定する

▶ テストを実行すると実際に動く ▶ 操作からもコードを生成できる

要点UI テスト

Page 66: Xcode 7 の新しいところ #cm_ios9

▶ 最新 OS で利用可能 ✓ iOS 9.0 以上 ✓ OS X 10.11 以上 ✓ tvOS

▶ テスト完了までに時間がかかる

▶ テスト実行中の操作が結果に影響する

留意点UI テスト

Page 67: Xcode 7 の新しいところ #cm_ios9

コードカバレッジ2/3

Page 68: Xcode 7 の新しいところ #cm_ios9

▶ どのコードが実行されたかを収集 ▶ コードが実際に使われた割合を表示 ▶ メソッドやプロパティごとに計測 ▶ テスト実行ごとに測定

特徴コードカバレッジ

Page 69: Xcode 7 の新しいところ #cm_ios9

コードカバレッジの収集

Page 70: Xcode 7 の新しいところ #cm_ios9

▶ スキーム設定で有効化 ▶ テストを実行すると収集される

収集の仕方コードカバレッジ

Page 71: Xcode 7 の新しいところ #cm_ios9

テストアクションで

コードカバレッジ を有効化

テストアクションで有効化スキーム設定

Page 72: Xcode 7 の新しいところ #cm_ios9

実行結果

Page 73: Xcode 7 の新しいところ #cm_ios9

テストログビューで確認コードカバー率

テストログに 記録される

カバレッジの タグを選択

Page 74: Xcode 7 の新しいところ #cm_ios9

ソースコードエディターで確認コード通過回数

直近のテストでの通過回数

通過してない コードは赤で

Page 75: Xcode 7 の新しいところ #cm_ios9

表示されない場合は …コード通過回数

カバレッジの 表示切り替え

Page 76: Xcode 7 の新しいところ #cm_ios9

まとめコードカバレッジ

Page 77: Xcode 7 の新しいところ #cm_ios9

▶ どのコードを実行したかを計測できる

▶ 計測はテストの度に行われる

▶ スキーム設定のテストアクションで有効化

▶ テストログビューでカバー率を確認できる ▶ ソースコードエディターで実際の網羅状況を確認できる(直近のみ)

要点と留意点コードカバレッジ

Page 78: Xcode 7 の新しいところ #cm_ios9

ドキュメントコメント3/3

Page 79: Xcode 7 の新しいところ #cm_ios9

▶ コードの型や機能に説明を記載できる ▶ コード補完時に概要を見られる ▶ クイックヘルプで詳細を見られる

これまでの機能ドキュメントコメント

Page 80: Xcode 7 の新しいところ #cm_ios9

▶ Markdown のような書式 • テキストの装飾 • 画像の挿入 • リンクの挿入

▶ プレイグラウンド専用機能 • ページナビゲーション • リッチコメント描画

▶ Swift 専用

強化されたドキュメントコメントドキュメントコメント

Page 81: Xcode 7 の新しいところ #cm_ios9

1. シンボルの文書化 ▶ 型や機能にドキュメントを添える ▶ クイックヘルプやコード補完で見れる ▶ ソースコードとプレイグラウンドで使える

2. リッチコメント ▶ 見栄えの良いコメントが書ける ▶ プレイグラウンドをドキュメントとして見せる ▶ プレイグラウンド専用

利用できる場面強化されたドキュメントコメント

Page 82: Xcode 7 の新しいところ #cm_ios9

1. シンボルの文書化

Page 83: Xcode 7 の新しいところ #cm_ios9

▶ コメント行内でマークアップする ▶ コメント行は次の2通りで書く (a) /// でコメント行を書く(複数行可) (b) /** ~ */ でコメントブロックを書く

書き方シンボルの文書化

Page 84: Xcode 7 の新しいところ #cm_ios9

記載シンボルの文書化

/// 指定したターゲットをビルドします。 /// 設定を追加することで異なるオプションでビルドできます。 /// /// - precondition: /// ビルド対象のプロジェクトが開かれている必要があります。 /// /// - parameters: /// - target: ビルドするターゲットです。 /// - configuration: ビルドで使う設定です。 /// /// - returns: ビルドの実行結果を返します。 /// - throws: エラー時は BuildError が投げられます。

func build(target:Target, config:Config) throws -> Report {

Page 85: Xcode 7 の新しいところ #cm_ios9

▶ コード補完

表示シンボルの文書化

▶ クイックヘルプ

Page 86: Xcode 7 の新しいところ #cm_ios9

2. リッチコメント

Page 87: Xcode 7 の新しいところ #cm_ios9

▶ コメント行内でマークアップする ▶ コメント行は次の2通りで書く (A) //: でコメント行を書く(複数行可) (B) /*: ~ */ でコメントブロックを書く

書き方リッチコメント

Page 88: Xcode 7 の新しいところ #cm_ios9

記載リッチコメント

//: ## `reduce` メソッド //: 配列の **総和** を簡単に計算できます。

//: ### 準備

let values = [1, 3, 8, 20]

//: ### 実行

let sum = values.reduce(0, combine: +)

Page 89: Xcode 7 の新しいところ #cm_ios9

表示リッチコメント

Page 90: Xcode 7 の新しいところ #cm_ios9

▶ ファイルインスペクターで切り替える

表示の切り替えリッチコメント

オン・オフで切り替わる

Page 91: Xcode 7 の新しいところ #cm_ios9

マークアップ

Page 92: Xcode 7 の新しいところ #cm_ios9

▶ シンボルの文書化やリッチコメントの内容に付加情報を添える

▶ コマンドを使ってマークアップする ▶ コマンドはインデントレベルが大事

• インデントによって解釈が変わる • コメントブロックの最初が第一レベル

▶ Markdown みたいな書式

基本マークアップ

Page 93: Xcode 7 の新しいところ #cm_ios9

1. 行書式コマンド 2. テキスト書式コマンド 3. シンボル文書化コマンド 4. ページナビゲーションコマンド

コマンドの種類マークアップ

リッチコメント 専用

シンボル文書化 専用

Page 94: Xcode 7 の新しいところ #cm_ios9

詳細は割愛 !

Apple - iOS Developer Library Markup Formatting Reference 参照

Page 95: Xcode 7 の新しいところ #cm_ios9

シンボル文書化

ページナビゲーションコマンド

リッチコメント

Page 96: Xcode 7 の新しいところ #cm_ios9

▶ ページ移動するための機能

• 指定ページに移動する • 前後のページに移動する

▶ リッチコメントだけで使える

特徴ページナビゲーションコマンド

シンボル文書化 リッチコメント

Page 97: Xcode 7 の新しいところ #cm_ios9

[ 表題 ] 移動先ページ名( )

▶ 指定したページ名へのリンクを作れる ▶ ページ名の空白文字は %20 に置き換える

指定ページに移動ページナビゲーションコマンド

記載方法

シンボル文書化 リッチコメント

Page 98: Xcode 7 の新しいところ #cm_ios9

[ 表題 ] @next( )

▶ 次のページへのリンクを作れる ▶ 順番はプロジェクトナビゲーターで指定する

次のページに移動ページナビゲーションコマンド

記載方法

シンボル文書化 リッチコメント

Page 99: Xcode 7 の新しいところ #cm_ios9

[ 表題 ] @previous( )

▶ 前のページへのリンクを作れる ▶ 順番はプロジェクトナビゲーターで指定する

前のページに移動ページナビゲーションコマンド

記載方法

シンボル文書化 リッチコメント

Page 100: Xcode 7 の新しいところ #cm_ios9

ページ

シンボル文書化 リッチコメント

Page 101: Xcode 7 の新しいところ #cm_ios9

▶ プレイグラウンド内に 複数のページを追加できる機能

▶ プロジェクトナビゲーターで管理する

Playground ページページナビゲーションコマンド

シンボル文書化 リッチコメント

Page 102: Xcode 7 の新しいところ #cm_ios9

▶ 各ページがリソースを持てる ▶ Playground ファイル直下のリソースはすべてのページで利用できる様子

Playground ページのリソースページナビゲーションコマンド

シンボル文書化 リッチコメント

このページ専用

全ページで 使える

Page 103: Xcode 7 の新しいところ #cm_ios9

ページ作成

シンボル文書化 リッチコメント

Page 104: Xcode 7 の新しいところ #cm_ios9

▶ プロジェクトナビゲーターから作成

ページの新規作成Playground ページ

シンボル文書化 リッチコメント

新規作成

⌥ + Click

Page 105: Xcode 7 の新しいところ #cm_ios9

▶ プロジェクトナビゲーターで 登録されている順番で管理される

ページの順番Playground ページ

シンボル文書化 リッチコメント

ページは この順番

Page 106: Xcode 7 の新しいところ #cm_ios9

ページ移動

シンボル文書化 リッチコメント

Page 107: Xcode 7 の新しいところ #cm_ios9

指定ページに移動ページ移動

//: 目次 //: //: [セクション A](Section%20A) //: //: [セクション B](Section%20B)

表示例

記載例

シンボル文書化 リッチコメント

Page 108: Xcode 7 の新しいところ #cm_ios9

指定ページに移動ページ移動

//: [前のページ](@previous) //: //: [次のページ](@next)

表示例

記載例

シンボル文書化 リッチコメント

Page 109: Xcode 7 の新しいところ #cm_ios9

まとめドキュメントコメント

Page 110: Xcode 7 の新しいところ #cm_ios9

▶ シンボルに説明を記載できる

• セクションで詳しく意味づけできる • コード補完やクイックヘルプで見れる • テキストを装飾できる

▶ Playground コメントの可能性が広がる

• テキストを装飾できる • ページ移動のリンクが貼れる

まとめドキュメントコメント

Page 111: Xcode 7 の新しいところ #cm_ios9

▶ Swift 2 ▶ 新 OS サポート ▶ UI テスト ▶ コードカバレッジ ▶ ドキュメントコメント ▶ 呼出階層検索ナビゲーター ▶ インターフェイス定義の確認 ▶ 無料のオンデバイス開発

Xcode 7 の新しいところ

▶ スタックビュー ▶ ストーリーボード参照 ▶ オンデマンドリソース