>100 Views
November 05, 15
スライド概要
2015-11-05 に開催された『iOS 9 週連続 Bootcamp!』の第6回目で Xcode 7 の新機能について紹介してきました。ざっくりとじっくり含めて、目に止まった新機能を網羅的に扱っています。
※ Docswell での公開に移行する直前の Slideshare での閲覧数は 4,373 でした。
正統派趣味人プログラマー。プログラミングとは幼馴染です。
Xcode 7 の新しいところ 2015.11.04 @ iOS 9 週連続 Bootcamp ! EZ-NET 熊⾕友宏 http://ez-net.jp/
熊谷友宏 EZ-NET http://ez-net.jp/ @es̲kumagai iOS, OS X, Apple Watch アプリ CodePiece いつもの電卓 ソースコードを Twitter と Gist に同時投稿できる。 計算式も見える電卓アプリ。 watchOS 1 対応 音で再配達ゴッド EZ-NET IP Phone 簡単操作で 再配達の申し込み。 iPhone でひかり電話を使う。 自宅 LAN からの利用専用
熊谷友宏 EZ-NET http://ez-net.jp/ @es̲kumagai 勉強会 横浜 iPhone 開発者勉強会 カジュアル Swift 勉強会 【 横浜・馬車道 】 #yidev 【 横浜・青葉台 】 #cswift わいわい・ゆるく、iPhone 開発者の みんなで楽しく過ごすのが目的の会 ゆるくみんなで Swift を語らえる場を 作りたくて始めた会 第21回を 2015-12-12 に開催 第3回を 2015-11-14 に開催
著書 Xcode 5 徹底解説 > 全機能を徹底解説 ✔ 各画面の使い方 ✔ プロジェクトやコードの編集 ✔ インターフェイスビルダー ✔ ビルドとデバッグ ✔ ユニットテストと Bot > 紙版は絶版 (2015/08/21) 750 ページ 2014/04/28 - 2015/08/21 > 電子書籍版は販売中 ✔ 10x-Eng.com でも取扱予定
MSM 2015 Swift 2 の話をする予定 > MSM 2015 ✔ NPO 法人 MOSA 主催 ✔ 有料イベント(会員制) ✔ 年に一度の2日間に渡る お祭り的なイベント ✔ 2015/11/06 - 2015/11/07 http://www.mosa.gr.jp/ Apple 最新技術の話題満載 > NPO 法人 MOSA ✔ 10 年以上の活動実績 ✔ 法人会員での参加も多い印象
Xcode 7 ̶ 2015.09.16 ̶
Xcode 7 新機能 ▶ Swift 2 ▶ スタックビュー ▶ 新 OS サポート ▶ ストーリーボード参照 ▶ UI テスト ▶ オンデマンドリソース ▶ コードカバレッジ ▶ ドキュメントコメント ▶ 呼出階層検索ナビゲーター ▶ インターフェイス定義の確認 ▶ 無料のオンデバイス開発
Xcode 7 新機能 ざっくり紹介 ▶ Swift 2 ▶ スタックビュー ▶ 新 OS サポート ▶ ストーリーボード参照 ▶ UI テスト ▶ オンデマンドリソース ▶ コードカバレッジ ▶ ドキュメントコメント ▶ 呼出階層検索ナビゲーター ▶ インターフェイス定義の確認 ▶ 無料のオンデバイス開発
Xcode 7 新機能 じっくり紹介 ▶ Swift 2 ▶ スタックビュー ▶ 新 OS サポート ▶ ストーリーボード参照 ▶ UI テスト ▶ オンデマンドリソース ▶ コードカバレッジ ▶ ドキュメントコメント ▶ 呼出階層検索ナビゲーター ▶ インターフェイス定義の確認 ▶ 無料のオンデバイス開発
Xcode 7 の新機能 ざっくり紹介
1/8 Swift 2
Xcode 7 の新機能 Swift 2 ざっくり ▶ プロトコル拡張とジェネリック拡張 ▶ 基本構文の追加 guard, defer, repeat-while ▶ エラーハンドリング機構 do-catch, try, throws, rethrows ▶ 関数 forEach の追加 ▶ 再帰的な列挙子 (indirect case) ▶ #available による環境判定
2/8 新 OS サポート
Xcode 7 の新機能 新 OS サポート ざっくり ▶ iOS 9.0 ▶ OS X 10.11 ▶ watchOS 2.0 ▶ tvOS 9.0
3/8 呼出階層検索ナビゲーター
Xcode 7 の新機能 呼出階層検索ナビゲーター ざっくり ▶ 機能がどこで使われているか検索できる 呼出階層を 検索 どこから 呼ばれるか分かる ⌃ ⇧ ⌘ H
4/8 インターフェイス定義の確認
Xcode 7 の新機能 インターフェイス定義の確認 ざっくり ▶ Swift のインターフェイス定義だけ見られる ▶ 実装が省かれるので見渡しやすい ▶ Objective-C ヘッダーも Swift のインターフェイス定義に変換できる
Xcode 7 の新機能 インターフェイス定義の確認 ざっくり ここから 定義を生成
Xcode 7 の新機能 インターフェイス定義の確認 ざっくり 読みづらかった 機能の定義が …
Xcode 7 の新機能 インターフェイス定義の確認 ざっくり すっきり把握 しやすくなる
Xcode 7 の新機能 インターフェイス定義の確認 ざっくり Objective-C の ヘッダーファイルも …
Xcode 7 の新機能 インターフェイス定義の確認 ざっくり Swift の 構文で見れる
5/8 無料のオンデバイス開発
Xcode 7 の新機能 無料のオンデバイス開発 ざっくり ▶ 無料の Apple ID だけでコード署名できる ▶ iOS 9 以前のアプリも実行できる ▶ インストールされたアプリは ホーム画面からいつでも起動できる
Xcode 7 の新機能 無料のオンデバイス開発 ざっくり 実行手順 (1/3) ▶ アカウント設定で無料の Apple ID を登録して ターゲット設定で選択する 無料の Apple ID を選択
Xcode 7 の新機能 無料のオンデバイス開発 ざっくり 実行手順 (2/3) ▶ 実機を選択してデバッグ実行を行い 出てきた画面で Fix Issue する コード署名が 生成される
Xcode 7 の新機能 無料のオンデバイス開発 ざっくり 実行手順 (3/3) ▶ コード署名の問題が解決すると 実機でアプリが起動する これが消えると 実機で動き出す
6/8 スタックビュー
Xcode 7 の新機能 スタックビュー ざっくり ▶ 複数のビューを詰め込めるビュー ▶ 余白と順番で手軽にレイアウトできる ▶ オートレイアウトの使用を最小限にできる ▶ 全機能は iOS 9.0 と OS X 10.11 で使える
Xcode 7 の新機能 スタックビュー ざっくり まとめたい ビューを選んで ここから簡単に まとめられる
7/8 ストーリーボード参照
Xcode 7 の新機能 ストーリーボード参照 ざっくり ▶ ストーリーボードを分離してリンクできる ▶ 画面の見通しが効きやすくなる ▶ 複数人数でのデザインがしやすいかも ▶ 全機能は iOS 9.0 と OS X 10.11 で使える
Xcode 7 の新機能 ストーリーボード参照 ざっくり 分割したい 部分を選んで リファクター すると…
Xcode 7 の新機能 ストーリーボード参照 ざっくり 別ファイルに 分断される
8/8 オンデマンドリソース
Xcode 7 の新機能 オンデマンドリソース ざっくり ▶ リソースを必要時に DL できる ▶ リソースは App Store に保持される ▶ 実行可能バイナリ以外のほぼ全てを扱える ▶ NSBundleResourceRequest で取得する ▶ tvOS, watchOS, iOS で利用可能
Xcode 7 の新機能 オンデマンドリソース ざっくり ターゲットの リソースタグで設定
Xcode 7 の新機能 オンデマンドリソース ざっくり アセットカタログでは 属性インスペクター からも設定できる ファイルインスペクター からも設定できる
Xcode 7 の新機能 オンデマンドリソース ざっくり ターゲットの ビルド設定から デバッグ時の リソースサーバーを 変更できる
Xcode 7 の新機能 オンデマンドリソース ざっくり ディスク デバッグゲージで リソースの状況を 確認できる
Xcode 7 の新機能 じっくり紹介
1/3 UI テスト
UI テスト 特徴 ▶ 画面操作を自動でテストする ▶ コードでアプリを操作する ▶ 操作からコードを生成できる
たとえば テキストフィールドに入力したら ボタンが押せるようになるか確認
たとえば ここに入力 したときに 押せるように なるのを確認
テストを登録する
UI テストの登録 STEP 1 : テストターゲットを登録
UI テストの登録 STEP 2 : テストメソッドを登録 test で始まる メソッドを定義 テストナビゲータに 登録される
テストコードを書く
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) }
書き方が分からないときは?
たとえば 画面いっぱいに 表示させたい
UI テスト 操作をコードに変換する 入力したい行に カーソルを置いて 記録開始
UI テスト 変換したい操作を実施 最大化ボタンを 押すと・・・
UI テスト 操作がコードに記録される 操作が 記録される
先の画面操作を記録したい場合は?
たとえば この場面で 操作を記録したい
UI テスト 操作の記録は休止できる 記録休止 ボタン ▶ 操作をコードに変換しなくなる ▶ アプリの操作は進められる ▶ 記録したい場面から再開できる
テスト結果を見る
UI テストの実行結果 CASE 1 : テストナビゲーターで確認 テスト項目と 結果を確認可能
UI テストの実行結果 CASE 2 : テストログビューで確認 テスト項目と 結果を確認可能
UI テストの実行結果 CASE 2 : テストログビューで確認 その時の画面も 記録されている
まとめ UI テスト
UI テスト 要点 ▶ 従来の XCTest と同じ感覚で使える ▶ UI をコードで操作する ▶ 操作の都度、状態をコードで判定する ▶ テストを実行すると実際に動く ▶ 操作からもコードを生成できる
UI テスト 留意点 ▶ 最新 OS で利用可能 ✓ ✓ ✓ iOS 9.0 以上 OS X 10.11 以上 tvOS ▶ テスト完了までに時間がかかる ▶ テスト実行中の操作が結果に影響する
2/3 コードカバレッジ
コードカバレッジ 特徴 ▶ どのコードが実行されたかを収集 ▶ コードが実際に使われた割合を表示 ▶ メソッドやプロパティごとに計測 ▶ テスト実行ごとに測定
コードカバレッジの収集
コードカバレッジ 収集の仕方 ▶ スキーム設定で有効化 ▶ テストを実行すると収集される
スキーム設定 テストアクションで有効化 テスト アクションで コードカバレッジ を有効化
実行結果
コードカバー率 テストログビューで確認 テストログに 記録される カバレッジの タグを選択
コード通過回数 ソースコードエディターで確認 直近のテストでの 通過回数 通過してない コードは赤で
コード通過回数 表示されない場合は … カバレッジの 表示切り替え
まとめ コードカバレッジ
コードカバレッジ 要点と留意点 ▶ どのコードを実行したかを計測できる ▶ 計測はテストの度に行われる ▶ スキーム設定のテストアクションで有効化 ▶ テストログビューでカバー率を確認できる ▶ ソースコードエディターで 実際の網羅状況を確認できる(直近のみ)
3/3 ドキュメントコメント
ドキュメントコメント これまでの機能 ▶ コードの型や機能に説明を記載できる ▶ コード補完時に概要を見られる ▶ クイックヘルプで詳細を見られる
ドキュメントコメント 強化されたドキュメントコメント ▶ Markdown のような書式 • テキストの装飾 • 画像の挿入 • リンクの挿入 ▶ プレイグラウンド専用機能 • ページナビゲーション • リッチコメント描画 ▶ Swift 専用
強化されたドキュメントコメント 利用できる場面 1. シンボルの文書化 ▶ 型や機能にドキュメントを添える ▶ クイックヘルプやコード補完で見れる ▶ ソースコードとプレイグラウンドで使える 2. リッチコメント ▶ 見栄えの良いコメントが書ける ▶ プレイグラウンドをドキュメントとして見せる ▶ プレイグラウンド専用
1. シンボルの文書化
シンボルの文書化 書き方 ▶ コメント行内でマークアップする ▶ コメント行は次の2通りで書く (a) (b) /// でコメント行を書く(複数行可) /** 〜 */ でコメントブロックを書く
シンボルの文書化 記載 /// 指定したターゲットをビルドします。 /// 設定を追加することで異なるオプションでビルドできます。 /// /// - precondition: /// ビルド対象のプロジェクトが開かれている必要があります。 /// /// - parameters: /// - target: ビルドするターゲットです。 /// - configuration: ビルドで使う設定です。 /// /// - returns: ビルドの実行結果を返します。 /// - throws: エラー時は BuildError が投げられます。 func build(target:Target, config:Config) throws -> Report {
シンボルの文書化 表示 ▶ コード補完 ▶ クイックヘルプ
2. リッチコメント
リッチコメント 書き方 ▶ コメント行内でマークアップする ▶ コメント行は次の2通りで書く (A) (B) //: でコメント行を書く(複数行可) /*: 〜 */ でコメントブロックを書く
リッチコメント 記載 //: ## ̀reducè メソッド //: 配列の **総和** を簡単に計算できます。 //: ### 準備 let values = [1, 3, 8, 20] //: ### 実行 let sum = values.reduce(0, combine: +)
リッチコメント 表示
リッチコメント 表示の切り替え ▶ ファイルインスペクターで切り替える オン・オフで 切り替わる
マークアップ
マークアップ 基本 ▶ シンボルの文書化やリッチコメントの 内容に付加情報を添える ▶ コマンドを使ってマークアップする ▶ コマンドはインデントレベルが大事 • インデントによって解釈が変わる • コメントブロックの最初が第一レベル ▶ Markdown みたいな書式
マークアップ コマンドの種類 1. 行書式コマンド 2. テキスト書式コマンド シンボル文書化 専用 3. シンボル文書化コマンド 4. ページナビゲーションコマンド リッチコメント 専用
詳細は割愛 ! Apple - iOS Developer Library Markup Formatting Reference 参照
ページナビゲーションコマンド シンボル文書化 リッチコメント
ページナビゲーションコマンド 特徴 ▶ ページ移動するための機能 • 指定ページに移動する • 前後のページに移動する ▶ リッチコメントだけで使える シンボル文書化 リッチコメント
ページナビゲーションコマンド 指定ページに移動 ▶ 指定したページ名へのリンクを作れる ▶ ページ名の空白文字は %20 に置き換える 記載方法 [ 表題 ] ( 移動先ページ名 シンボル文書化 ) リッチコメント
ページナビゲーションコマンド 次のページに移動 ▶ 次のページへのリンクを作れる ▶ 順番はプロジェクトナビゲーターで指定する 記載方法 [ 表題 ] ( @next ) シンボル文書化 リッチコメント
ページナビゲーションコマンド 前のページに移動 ▶ 前のページへのリンクを作れる ▶ 順番はプロジェクトナビゲーターで指定する 記載方法 [ 表題 ] ( @previous ) シンボル文書化 リッチコメント
ページ シンボル文書化 リッチコメント
ページナビゲーションコマンド Playground ページ ▶ プレイグラウンド内に 複数のページを追加できる機能 ▶ プロジェクトナビゲーターで管理する シンボル文書化 リッチコメント
ページナビゲーションコマンド Playground ページのリソース ▶ 各ページがリソースを持てる ▶ Playground ファイル直下のリソースは すべてのページで利用できる様子 このページ 専用 全ページで 使える シンボル文書化 リッチコメント
ページ作成 シンボル文書化 リッチコメント
Playground ページ ページの新規作成 ▶ プロジェクトナビゲーターから作成 ⌥ + Click 新規作成 シンボル文書化 リッチコメント
Playground ページ ページの順番 ▶ プロジェクトナビゲーターで 登録されている順番で管理される ページは この順番 シンボル文書化 リッチコメント
ページ移動 シンボル文書化 リッチコメント
ページ移動 指定ページに移動 記載例 //: 目次 //: //: [セクション A](Section%20A) //: //: [セクション B](Section%20B) 表示例 シンボル文書化 リッチコメント
ページ移動 指定ページに移動 記載例 //: [前のページ](@previous) //: //: [次のページ](@next) 表示例 シンボル文書化 リッチコメント
まとめ ドキュメントコメント
ドキュメントコメント まとめ ▶ シンボルに説明を記載できる • セクションで詳しく意味づけできる • コード補完やクイックヘルプで見れる • テキストを装飾できる ▶ Playground コメントの可能性が広がる • テキストを装飾できる • ページ移動のリンクが貼れる
Xcode 7 の新しいところ ▶ Swift 2 ▶ スタックビュー ▶ 新 OS サポート ▶ ストーリーボード参照 ▶ UI テスト ▶ オンデマンドリソース ▶ コードカバレッジ ▶ ドキュメントコメント ▶ 呼出階層検索ナビゲーター ▶ インターフェイス定義の確認 ▶ 無料のオンデバイス開発