使って創ってApp

ソフトウェアを使ったり作ったりするブログです

Mac OSX でスクリーンショットを撮る

Mac OSX でスクリーンショットを撮る方法を紹介します。ブログで記事を書く時にこの機能を良く使います。

実行環境

スクリーンショットを撮る

Mac OSX でスクリーンショットを撮る方法は主に2通りあります。

  • キーボードショートカットを使う
  • プレビューを使う

プレビューは画像を表示する Mac を買った時から入っているソフトのことです。キーボードショートカットが苦手な方はプレビューを使いましょう。スクリーンショットの取り方は Mac ヘルプに書いてありました。

  • 画面全体を撮る
    キーボードショートカット
    Commandキー + 3キー
    プレビュー
    ファイル -> スクリーンショットを撮る -> 画面全体
    プレビューの場合は撮影までカウントダウンしてくれます。キーボードショートカットはすぐ撮影されます。

    f:id:hitxutokun:20151225000732p:plain

  • 画面の一部を撮る
    キーボードショートカット
    Commandキー + 4キー
    プレビュー
    ファイル -> スクリーンショットを撮る -> 選択部分

    f:id:hitxutokun:20151225000759p:plain

  • ウインドウ
    キーボードショートカット
    Commandキー + 4キー の後に、スペースバーを押す
    プレビュー
    ファイル -> スクリーンショットを撮る -> ウインドウ

    f:id:hitxutokun:20151225000808p:plain

  • ウインドウ(影無し)

    ウインドウを撮る際に、Optionキーを押しながら撮ります。この方法はMacヘルプでは見つかりませんでした。

    f:id:hitxutokun:20151225001108p:plain

おまけ 〜Macヘルプ〜

MacヘルプはMacの操作方法に関することが書かれています。Macの操作でわからないことがあったら、とりあえずMacヘルプの検索欄に入力して答えを聞いてみましょう。まぁ、Googleで検索した方が答えに早く辿り着くのでしょう‥。

FinderのメニューからMacヘルプを表示することができます。ヘルプ -> Macヘルプ

f:id:hitxutokun:20151225001638p:plain

このスクリンーショットの撮影は Commandキー + 4キー で範囲を選択して撮ってますよ。

iOSシミュレータでTextFieldをクリックしても、キーボードが表示されない

iOS シミュレータで Text Field をクリックしたら、当然キーボードが下からにゅっと現れると期待して Text Field を iOS アプリに設置しました。しかし、期待とは裏腹にキーボードは現れてくれませんでした。そんなことがあったので記事にしました。

開発環境

症状

  • 主訴:iOS シミュレータでキーボードが表示されない
  • 再現:下記画像

    f:id:hitxutokun:20151223232921g:plain

解決方法

iOS シミュレータのメニューから設定を変更する。メニューバーから Hardware -> Keyboard -> Connect Hardware Keyboard のチェックを外す

f:id:hitxutokun:20151223233618p:plain

以上で完了です。

Keyboard オプション

Connenct Hardware Keyboard の項目も含めた、iOS シミュレータの Keyboard の項目について Apple の公式ドキュメント(Interacting with iOS and watchOS)に説明が書いてありました。

オプション名役割
iOS Uses Same Layout As OS X Mac で使用しているキーボード配列ともっとも近い iOSのキーボードを表示する
Connect Hardware Keyboard シミュレータの入力として Mac のキーボードを利用する
Toggle Software Keyboard 現在使用している入力方法を切り替える。(iOSキーボードなら、Hardware Keyboard を表示)

まとめ

iOS シミュレータで iOS のキーボードが表示されない時は、 Hardware -> Keyboard オプションの Connect Hardware Keyboard を非選択にする。

NSBundleでファイルが読み込めない iOS開発

iOSアプリ開発中に Xcode の Project Navigator 欄にファイルを確かに追加したのに、プログラムから読み込めないことがあったので記事にします。

開発環境

症状

iOSアプリ開発のプロジェクトに追加したファイルのパスを 、NSBundle のメソッドを使って取得しようとしたけど、fatal error が出る。コードは以下の通り。

let url = NSBundle.mainBundle().URLForResource("1億5千万の奇跡", withExtension: "m4a")!
// エラー発生
// fatal error: unexpectedly found nil while unwrapping an Optional value

ファイルが見つからないから nil が返る -> nil なのにアンラップする -> エラー!

解決策

今回の原因は、追加したファイルを Bundle Resource に追加しなかったことでした。そのため、アプリインストール時にファイルが実機やシミュレータにコピーされなかったのです。解決方法は二通りあります。

  1. オプションをつけて、もう一度追加し直す

  2. Copy Bundle Resources にファイルを追加

1. オプションをつけて、もう一度追加し直す

すでに追加されているファイルを削除し、もう一度プロジェクトに追加します。その際、追加画面のオプションで  Add to target のチェックボックスにチェックを入れます。これで完了です。

f:id:hitxutokun:20151221233013p:plain

2. Copy Bundle Resources にファイルを追加

こちらの方法は、ファイルを削除しません。プロジェクトの設定を開き、Build Phases を選択します。そして、Copy Bundle Resources を表示します。

f:id:hitxutokun:20151222212122p:plain
プロジェクトアイコンをクリックしてプロジェクトの設定を開く
f:id:hitxutokun:20151222212302p:plain
Copy Bundle Resources を開いた

Copy Bundle Resource のファイル一覧の下にある + ボタンをクリックして、目的のファイルを追加します。これで完了です。

まとめ

Xcode にファイルを追加する際は、Add to target チェックボックスにチェックを入れるようにしましょう。

iOSアプリ開発で音声ファイルを再生・一時停止する方法

iOS アプリ開発で音声ファイルを使用することがあると思います。そこで、音声ファイルを扱う上で基本的な再生と一時停止をしてみましょう。

Udemy の講座「 完全攻略!初心者からプロになるためのiOS 9アプリ開発のすべて」 でレクチャー79(音声の再生・一時停止・リスタート)の内容です。

www.udemy.com

開発環境

音声再生

音声を再生するには AVFoundation フレームワークを使用します。これは音楽や映像に関する機能を使えるようにするフレームワークです。これを使うと、簡単に再生や一時停止ができます。

サンプルアプリケーション

今回は、「5秒ごとに再生と一時停止を交互に繰り返す」アプリを作成します。こんなアプリで音楽聴きたくないですね。以下の順番でアプリを作ります。

  1. プロジェクトを作成する
  2. AVFoundation フレームワークを読み込む
  3. 音声ファイルを読み込む
  4. AVAudioPlayer クラスのインスタンスを作成
  5. 5秒ごとに再生と一時停止を繰り返させる

1. プロジェクトを作成する

Xcode を立ち上げ、新規プロジェクトを作成します。テンプレートは Single View Application を選択し、プロジェクト名は Demo_Audio にしました。

2.  AVFoundation フレームワークを読み込む

ここから先はコードを追加する際、ViewController.swift に追加していきます。

import UIKit
import AVFoundation // 追加

最初からある import UIKit の下に import AVFoundation を追加しました。これで AVFoundation クラスの機能を使えるようになります。

3.  音声ファイルを読み込む

まずはプロジェクトに音声ファイルを追加します。Project Navigator に音声ファイルをドラッグアンドドロップします。

f:id:hitxutokun:20151221232810p:plain

この時、追加オプションで Add to targets にチェックを入れてください。入れないと、プログラムからファイルを読み込めません。

f:id:hitxutokun:20151221233013p:plain

追加したファイルのパスを取得しましょう。以下のコードを viewDidLoad に追加します。

let url = NSBundle.mainBundle().URLForResource("1億5千万の奇跡", withExtension: "m4a")!

URLForResource メソッドの引数には、あなたが追加したファイルの名前と拡張子を書いてください。

4. AVAudioPlayer クラスのインスタンスを作成

AVAudioPlayer クラスは、音声ファイルを再生・一時停止や音量・現在の再生時間などを扱うクラスです。まず AVAudioPlayer のインスタンスを格納する変数を宣言します。クラス内で使い回すので、クラス宣言の下に書きます。

class ViewController: UIViewController {
  var player = AVAudioPlayer()

以下のコードを 3 で入力したコードの下に入力します。

let url = ~~~~
do {
  player = try AVAudioPlayer(contentsOfURL: url)
} catch let err as NSError { // エラー処理
  print(err.localizedDescription)
}

この時点で player = try ~~ の下に player.play() と書けば、音声ファイルが再生されるはずです。

5.  5秒ごとに再生と一時停止を繰り返させる

再生と一時停止を切り替える関数を作り、その関数を5秒ごとに呼び出します。

AVAudioPlayer のインスタンスは、自身が音声を再生しているか停止しているかを知る playing プロパティを持っています。このプロパティを利用して、関数を作ります。viewDidLoad メソッドと didReceiveMemoryWarning メソッドの間にでも書きましょう。

func playOrStop() {
  if player.playing {
    player.pause()
  } else {
    player.play()
  }
}

player(AVAudioPlayer クラスのインスタンス) に play() や pause() メソッドを呼ぶだけで、再生・一時停止ができます。とても簡単ですね。

一定間隔で関数を実行するには NSTimer クラスを使用します。NSTimer は Swift 2.1 タイマーを使う - 使って創ってApp でも使いました。

以下のコードを 4で書いた player = try~~~ の下に書きます。

player = try ~~~
NSTimer.scheduledTimerWithTimeInterval(
  5,
  target: self,
  selector: Selector("playOrStop"),
  userInfo: nil,
  repeats: true
)

これで完成です!シミュレータで実行すると、5秒ごとに再生・一時停止が切り替わりますか?

まとめ

Xcodeのコード補完で曖昧検索できるようにする

標準の Xcode のコード補完は、前方一致で候補を選びます。これを曖昧検索で候補を選べるようにできるプラグインを紹介します。

実行環境

プラグイン導入後

f:id:hitxutokun:20151220234936g:plain

NSMutableSet を補完しています。キーボードは nsmse としか入力していません。

プラグイン導入方法

github.com

FussyAutocomplete というプラグインをインストールします。Xcode のパッケージマネージャ Alcatraz を使ってインストールします。

Alcatraz をインストール

Alcatraz とは、Xcode 用のパッケージマネージャで、プラグインやエディタのテーマなどを扱っています。インストール方法は以下のコマンドをターミナルで実行するだけです。

変わる可能性があるので公式サイトから直接コピーした方がいいと思いますが、一応載せました。

インストールすると、Xcode の Window メニューに PackageManager 項目が追加されます。

FussyAutocomplete をインストール

FussyAutocomplete はエディタの最下部に空白を追加するプラグインです。

  1. Window メニューから Package Manager を開く

    f:id:hitxutokun:20151219225805p:plain

  2. Package Manager 画面で Plugins を選択し、検索欄に FussyAutocomplete を入力

    f:id:hitxutokun:20151221000424p:plain

     

  3. 緑色のインストールボタンをクリック

これでインストール完了です!長いメソッド名や変数名を指定するのに便利です。

まとめ

FussyAutocomplete をインストールすると、曖昧検索でコードを補完できる。

Xcode7.2のエディタ最終行以降にスクロールする

Xcodeのエディタで、これ以上下にスクロール出来ない位置でコードを書いていることはありませんか?私はこの状態が嫌いなのでプラグインを入れて解決しました。

最終行以降にもスクロールできるようにします。Sublime Text で scroll_past_end 設定を true にした状態と同じようになります。

Control + L キーと組み合わせることで威力を発揮します。

開発環境

プラグイン導入後

f:id:hitxutokun:20151219222653g:plain

Control + L キーを押して、カーソルがある行が画面の真ん中に来るようにスクロールさせています。60行が最後なのに、さらに下にスクロールすることが出来るようになります。

プラグイン導入方法

導入するプラグインは SCXcodeEditorInset です。これを Xcode 用のパッケージマネージャ Alcatraz を使用してインストールします。

Alcatraz をインストール

Alcatraz とは、Xcode 用のパッケージマネージャで、プラグインやエディタのテーマなどを扱っています。インストール方法は以下のコマンドをターミナルで実行するだけです。

変わる可能性があるので公式サイトから直接コピーした方がいいと思いますが、一応載せました。

SCXcodeEditorInset をインストール

SCXcodeEditorInset はエディタの最下部に空白を追加するプラグインです。

  1. Window メニューから Package Manager を開く

    f:id:hitxutokun:20151219225805p:plain

  2. Package Manager 画面で Plugins を選択し、検索欄に SCXcodeEditorInset を入力

    f:id:hitxutokun:20151219230126p:plain

     

  3. 緑色のインストールボタンをクリック

これでインストール完了です!これで Control + L を押せば、どんな行でも画面中央にスクロールされます。

まとめ

Alcatraz と SCXcodeEditorInset をインストールする。

画面最下部で書きたくない人や、Control + L キーのショートカットを良く使う人には便利ではないでしょうか。

Xcode7.2でコードスニペットを追加する

Xcodeコードスニペットを追加しようとして迷ったのでメモします。コードスニペットを登録できれば、入力が楽になるのでやってみましょう。

開発環境

コードスニペットの追加

if 文のスニペットを追加します。Xcode を起動して、適当にプロジェクトを作成してください。私は Command Line Application テンプレートでプロジェクトを作成しました。

  1. 追加したいスニペットをソースに書く

    if <#条件#>{
      <#code#>
    }

    表示されているそのまま入力してください。すると<# #>で囲った部分が、水色の枠で囲まれました。コード補完の時にも出てくるあれで、tab キーで移動できるやつです。トークンと呼びます。

  2. コードスニペットに追加
    1. Utility エリアで Snipet Library を開いておく(画面右下)

      f:id:hitxutokun:20151218235257p:plain

    2. 追加する範囲を選択
    3. 選択範囲を長押ししてつかむ

      f:id:hitxutokun:20151218235738g:plain

    4. Snipet Library までドラッグアンドドロップ
  3. コードスニペットを設定

    追加したスニペットをダブルクリックして、左下のEditボタンをクリックします。編集画面が出るので、編集します。

    項目名 内容
    Title My Code if
    Summary if statement
    Completion Shortcut if

    f:id:hitxutokun:20151219001303p:plain

    Completion Shortcut に設定した文字列を、ソースコードに入力するとコード補完にスニペットが表示されます。

これで作業完了です!

まとめ

  • 選択範囲を長押しすると、ドラッグできるようになる
  • <# #>で文字列を囲むと、トークンになる

選択した文字列をドラッグする方法がわからなくて悩みました。選択範囲を長押しするのですね。