SlideShare a Scribd company logo
EZ-NET 熊⾕友宏
http://ez-net.jp/
2015.11.04
@ iOS 9 週連続 Bootcamp !
Xcode 7 の新しいところ
熊谷友宏
EZ-NET http://ez-net.jp/
@es_kumagai
CodePiece
iOS, OS X, Apple Watch アプリ
ソースコードを Twitter と
Gist に同時投稿できる。
いつもの電卓
計算式も見える電卓アプリ。
watchOS 1 対応
音で再配達ゴッド
簡単操作で
再配達の申し込み。
EZ-NET IP Phone
iPhone でひかり電話を使う。
自宅 LAN からの利用専用
熊谷友宏
EZ-NET http://ez-net.jp/
@es_kumagai
横浜 iPhone 開発者勉強会
#yidev
勉強会
わいわい・ゆるく、iPhone 開発者の

みんなで楽しく過ごすのが目的の会
【 横浜・馬車道 】
カジュアル Swift 勉強会
#cswift
ゆるくみんなで Swift を語らえる場を

作りたくて始めた会
【 横浜・青葉台 】
第21回を 2015-12-12 に開催 第3回を 2015-11-14 に開催
Xcode 5 徹底解説
著書
> 全機能を徹底解説
✔ 各画面の使い方
✔ プロジェクトやコードの編集
✔ インターフェイスビルダー
✔ ビルドとデバッグ
✔ ユニットテストと Bot
> 紙版は絶版 (2015/08/21)
> 電子書籍版は販売中
✔ 10x-Eng.com でも取扱予定
2014/04/28 - 2015/08/21
750 ページ
Swift 2 の話をする予定
MSM 2015
> MSM 2015
✔ NPO 法人 MOSA 主催
✔ 有料イベント(会員制)
✔ 年に一度の2日間に渡る

お祭り的なイベント
✔ Apple 最新技術の話題満載
> NPO 法人 MOSA
✔ 10 年以上の活動実績
✔ 法人会員での参加も多い印象
2015/11/06 - 2015/11/07
http://www.mosa.gr.jp/
Xcode 7
̶ 2015.09.16 ̶
▶ Swift 2
▶ 新 OS サポート
▶ UI テスト
▶ コードカバレッジ
▶ ドキュメントコメント
▶ 呼出階層検索ナビゲーター
▶ インターフェイス定義の確認
▶ 無料のオンデバイス開発
新機能
Xcode 7
▶ スタックビュー
▶ ストーリーボード参照
▶ オンデマンドリソース
▶ Swift 2
▶ 新 OS サポート
▶ UI テスト
▶ コードカバレッジ
▶ ドキュメントコメント
▶ 呼出階層検索ナビゲーター
▶ インターフェイス定義の確認
▶ 無料のオンデバイス開発
新機能 ざっくり紹介
Xcode 7
▶ スタックビュー
▶ ストーリーボード参照
▶ オンデマンドリソース
▶ Swift 2
▶ 新 OS サポート
▶ UI テスト
▶ コードカバレッジ
▶ ドキュメントコメント
▶ 呼出階層検索ナビゲーター
▶ インターフェイス定義の確認
▶ 無料のオンデバイス開発
Xcode 7
▶ スタックビュー
▶ ストーリーボード参照
▶ オンデマンドリソース
新機能 じっくり紹介
Xcode 7 の新機能
ざっくり紹介
Swift 2
1/8
▶ プロトコル拡張とジェネリック拡張
▶ 基本構文の追加

guard, defer, repeat-while
▶ エラーハンドリング機構

do-catch, try, throws, rethrows
▶ 関数 forEach の追加
▶ 再帰的な列挙子 (indirect case)
▶ #available による環境判定
Swift 2
Xcode 7 の新機能
ざっくり
新 OS サポート
2/8
▶ iOS 9.0
▶ OS X 10.11
▶ watchOS 2.0
▶ tvOS 9.0
新 OS サポート
Xcode 7 の新機能
ざっくり
呼出階層検索ナビゲーター
3/8
▶ 機能がどこで使われているか検索できる
呼出階層検索ナビゲーター
Xcode 7 の新機能
ざっくり
呼出階層を
検索
どこから
呼ばれるか分かる
⌘⇧⌃ H
インターフェイス定義の確認
4/8
▶ Swift のインターフェイス定義だけ見られる
▶ 実装が省かれるので見渡しやすい
▶ Objective-C ヘッダーも

Swift のインターフェイス定義に変換できる
インターフェイス定義の確認
Xcode 7 の新機能
ざっくり
インターフェイス定義の確認
Xcode 7 の新機能
ざっくり
ここから
定義を生成
インターフェイス定義の確認
Xcode 7 の新機能
ざっくり
読みづらかった
機能の定義が …
インターフェイス定義の確認
Xcode 7 の新機能
ざっくり
すっきり把握

しやすくなる
インターフェイス定義の確認
Xcode 7 の新機能
ざっくり
Objective-C の
ヘッダーファイルも…
インターフェイス定義の確認
Xcode 7 の新機能
ざっくり
Swift の
構文で見れる
無料のオンデバイス開発
5/8
▶ 無料の Apple ID だけでコード署名できる
▶ iOS 9 以前のアプリも実行できる
▶ インストールされたアプリは

ホーム画面からいつでも起動できる
無料のオンデバイス開発
Xcode 7 の新機能
ざっくり
無料のオンデバイス開発
Xcode 7 の新機能
ざっくり
▶ アカウント設定で無料の Apple ID を登録して

ターゲット設定で選択する
実行手順 (1/3)
無料の
Apple ID を選択
無料のオンデバイス開発
Xcode 7 の新機能
ざっくり
▶ 実機を選択してデバッグ実行を行い

出てきた画面で Fix Issue する
実行手順 (2/3)
コード署名が
生成される
無料のオンデバイス開発
Xcode 7 の新機能
ざっくり
▶ コード署名の問題が解決すると

実機でアプリが起動する
実行手順 (3/3)
これが消えると
実機で動き出す
スタックビュー
6/8
▶ 複数のビューを詰め込めるビュー
▶ 余白と順番で手軽にレイアウトできる
▶ オートレイアウトの使用を最小限にできる
▶ 全機能は iOS 9.0 と OS X 10.11 で使える
スタックビュー
Xcode 7 の新機能
ざっくり
スタックビュー
Xcode 7 の新機能
ざっくり
ここから簡単に
まとめられる
まとめたい
ビューを選んで
ストーリーボード参照
7/8
▶ ストーリーボードを分離してリンクできる
▶ 画面の見通しが効きやすくなる
▶ 複数人数でのデザインがしやすいかも
▶ 全機能は iOS 9.0 と OS X 10.11 で使える
ストーリーボード参照
Xcode 7 の新機能
ざっくり
ストーリーボード参照
Xcode 7 の新機能
ざっくり
分割したい
部分を選んで
リファクター
すると…
ストーリーボード参照
Xcode 7 の新機能
ざっくり
別ファイルに
分断される
オンデマンドリソース
8/8
▶ リソースを必要時に DL できる
▶ リソースは App Store に保持される
▶ 実行可能バイナリ以外のほぼ全てを扱える
▶ NSBundleResourceRequest で取得する
▶ tvOS, watchOS, iOS で利用可能
オンデマンドリソース
Xcode 7 の新機能
ざっくり
オンデマンドリソース
Xcode 7 の新機能
ざっくり
ターゲットの

リソースタグで設定
オンデマンドリソース
Xcode 7 の新機能
ざっくり
ファイルインスペクター

からも設定できる
アセットカタログでは

属性インスペクター

からも設定できる
オンデマンドリソース
Xcode 7 の新機能
ざっくり
デバッグ時の
リソースサーバーを
変更できる
ターゲットの
ビルド設定から
オンデマンドリソース
Xcode 7 の新機能
ざっくり
リソースの状況を
確認できる
ディスク

デバッグゲージで
Xcode 7 の新機能
じっくり紹介
UI テスト
1/3
▶ 画面操作を自動でテストする
▶ コードでアプリを操作する
▶ 操作からコードを生成できる
特徴
UI テスト
テキストフィールドに入力したら
ボタンが押せるようになるか確認
たとえば
ここに入力
したときに
押せるように
なるのを確認
たとえば
テストを登録する
STEP 1 : テストターゲットを登録
UI テストの登録
STEP 2 : テストメソッドを登録
UI テストの登録
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 テスト
記録休止
ボタン
▶ 操作をコードに変換しなくなる
▶ アプリの操作は進められる
▶ 記録したい場面から再開できる
テスト結果を見る
CASE 1 : テストナビゲーターで確認
UI テストの実行結果
テスト項目と
結果を確認可能
CASE 2 : テストログビューで確認
UI テストの実行結果
テスト項目と
結果を確認可能
CASE 2 : テストログビューで確認
UI テストの実行結果
その時の画面も
記録されている
まとめ
UI テスト
▶ 従来の XCTest と同じ感覚で使える
▶ UI をコードで操作する
▶ 操作の都度、状態をコードで判定する
▶ テストを実行すると実際に動く
▶ 操作からもコードを生成できる
要点
UI テスト
▶ 最新 OS で利用可能
iOS 9.0 以上
OS X 10.11 以上
tvOS
▶ テスト完了までに時間がかかる
▶ テスト実行中の操作が結果に影響する
留意点
UI テスト
コードカバレッジ
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) /*: ∼ */ でコメントブロックを書く
書き方
リッチコメント
記載
リッチコメント
//: ## `reduce` メソッド
//: 配列の **総和** を簡単に計算できます。
//: ### 準備
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 コメントの可能性が広がる
• テキストを装飾できる
• ページ移動のリンクが貼れる
まとめ
ドキュメントコメント
▶ Swift 2
▶ 新 OS サポート
▶ UI テスト
▶ コードカバレッジ
▶ ドキュメントコメント
▶ 呼出階層検索ナビゲーター
▶ インターフェイス定義の確認
▶ 無料のオンデバイス開発
Xcode 7 の新しいところ
▶ スタックビュー
▶ ストーリーボード参照
▶ オンデマンドリソース

More Related Content

Xcode 7 の新しいところ #cm_ios9