Download - Xcode 7 の新しいところ #cm_ios9
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 PhoneiPhone でひかり電話を使う。 自宅 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/07http://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 21/8
▶ プロトコル拡張とジェネリック拡張 ▶ 基本構文の追加guard, defer, repeat-while
▶ エラーハンドリング機構do-catch, try, throws, rethrows
▶ 関数 forEach の追加 ▶ 再帰的な列挙子 (indirect case) ▶ #available による環境判定
Swift 2Xcode 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 の新しいところ
▶ スタックビュー ▶ ストーリーボード参照 ▶ オンデマンドリソース