開発メモ

開発メモ

SublimeText2で全角文字をハイライトする

SublimeText2で全角文字(特にスペース)をハイライトする

参考サイトでは、パターンにマッチしている部分をアウトライン(枠で囲う)する だけだったので、ちょっと改造して、ハイライトもできるようにした。

手順

基本的には参考サイトの通り

  1. プラグインソースコードを、プラグインのディレクトリに放り込む
    (Preference -> BrousePackagesで、プラグインのディレクトリを開く)
#!/usr/bin/python
# -*- coding: utf8 -*-
import sublime
import sublime_plugin

class AlwaysHihghlight(sublime_plugin.EventListener):
    # highlight
    def highlight(self, view):
        pattern = view.settings().get('alwayshighlight_pattern')
        if pattern:
            view.add_regions('AlwaysHighlight_Highlight',view.find_all(pattern), "invalid", sublime.DRAW_EMPTY)

    def outline(self, view):
        pattern = view.settings().get('alwayshighlight_outline_pattern')
        if pattern:
            view.add_regions('AlwaysHighlight_Outline',view.find_all(pattern), "invalid", sublime.DRAW_OUTLINED)

    def update(self,view):
        if view.settings().get('enable_alwayshighlight') == True:
            self.highlight(view)
            self.outline(view)
        else:
            view.erase_regions('highlight')

    # Called after changes have been made to a view.
    # @override
    def on_modified(self, view):
        self.update(view)

    # Called when a view gains input focus.
    # @override
    def on_activated(self, view):
        self.update(view)

    # Called when the file is finished loading.
    # @override
    def on_load(self, view):
        self.update(view)
  1. 個人用の設定に、以下の設定を放り込む
    (Cmd+, で個人用の設定を開く)
    // パッケージの有効化
    "enable_alwayshighlight": true,

    // ハイライトしたい文字パターンを設定
   "alwayshighlight_pattern": "[{}「」¥=”’+@:;・_ー 0-9A-Za-z]",

    // アウトラインしたい文字パターンを設定
    "alwayshighlight_outline_pattern": "[\n\t\r\n]",

参考サイト:http://qiita.com/WelinaNana/items/47742a4fee048f5156ab

SublimeText2で 言語ごとの設定をする(tabsizeとか)

  1. 設定したい言語のファイルを開いた状態で、↓を選択する。 Preferences -> Settings - More -> Syntax Specific - User

  2. 言語ごとの設定ファイルが開く(例:railsなら、 Ruby on Rails.sublime-settings) ので、好みの設定を入れる

{
  "tab_size": 2,
  "translate_tabs_to_spaces": true
}

参考サイト: http://mlo.io/blog/2012/08/23/language-specific-indents-sublime.html

UIViewのサブクラスをxibからロードする

こちらのサイトの記事が非常に参考になった。
http://blogios.stack3.net/archives/195

  • xibファイルを作成する
    1. 必要なパーツをxibに追加する
  • .h .m ファイルを作成する
    1. xibと紐づくメンバ変数を作成する(IBOutlet)
    2. インスタンス作成用のクラスメソッドを作る
    3. nibが読み込まれた後の処理を作成する
  • xibとクラスをひもづける
    1. xibのCustomViewの部分にクラス名を入れる
    2. xibとメンバ変数をひもづける(※File's ownerから紐付けてはいけないことに注意)

NSDate(日付の生成・比較)

NSDateでいつも調べていることをまとめておく

日付の生成

NSDate *now = [NSDate date]; // 現在時刻を設定
NSDate *date = [NSDate dateWithString:@"2013-12-19 20:30:00 +0900"]; // 文字列で時間を設定
// フォーマットが間違っているとnilが返ってくる、日付のデリミタは"-"のみ。

日付の比較

NSDate *earlierDate = [date1 earlierDate:date2];   // 早い日付が返ってくる (date2にnilが渡された時は、date1が返る)
NSDate *laterDate = [date1 laterDate:date2];        // 遅い日付が返ってくる
BOOL isEqual = [date1 isEqualToDate:date2];       // Date1とDate2が同じ日付(タイムゾーン含む)の場合YES
NSComparisonResult result = [date1 compare:date2]
// date1とdate2が同じ日付の場合 NSOrderedSameが返る
// date1の方が未来の場合 NSOrderedDescendingが返る
// date1の方が過去の場合 NSOrderedAscendingが返る

※ compare:メソッドは、date2にnilが渡された時にNSOrderdSameが返るので、そこは注意する。

Xcodeプラグイン

以前入れたコードフォーマッタを動かしていなかったので、 使い方を再度調べるついでに、Xcodeプラグインを入れた

Xcode 5.0 以降で使えるプラグインは、まだそんなに多くない模様? 参考 http://maniacdev.com/xcode-plugins

Alcatraz

サイト

https://github.com/mneorr/Alcatraz

インストール

↓のコマンドをターミナルで叩いて、Xcodeを再起動しろとあるが、何故か動かないので、 レポジトリをクローンしてきて、プロジェクトファイルを開き、ビルドする。

mkdir -p ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins;
curl -L http://goo.gl/xfmmt | tar xv -C ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -

BBUncrustifyPlugin-Xcode

コードフォーマッタ

サイト

https://github.com/benoitsan/BBUncrustifyPlugin-Xcode

使い方

  • 選択したファイルのフォーマッティング
    Edit → Uncrustify Selected Files

  • エディタで開いているファイルのフォーマッティング Edit → Uncrustify Active File

  • 選択した行のフォーマッティング
    Edit → Uncrustify Selected Lines

コードフォーマットの設定

ホームディレクトリに設定ファイルを置いておく(↓のどれでもOK) * ~/.uncrustifyconfig * ~/uncrustify.cfg * ~/.uncrustify/uncrustify.cfg

FuzzyAutocomplete

補完をファジーにしてくれる。 例えば、dispatch_get_main_queue()なら、dmqと打つだけで、補完候補に↓の2つだけ出てくれる * dispatch_get_main_queue() * _dispatch_main_q

サイト

https://github.com/chendo/FuzzyAutocompletePlugin.git

インストール

どっちか * Alcatraz * githubからクローンしてビルド

使い方

入れるだけ

XAlign

コードの整形をしてくれるツール

サイト

https://github.com/qfish/XAlign

インストール

  1. プラグインを直接ダウンロード http://github.so/XAlign/build/XAlign.tar.gz
  2. 放り込む~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/

使い方

  • Xcode → Edit → XAlign
  • デフォルトの整列コマンド Shift + Cmd + X
    デフォルトだとやりにくいのでCtrl + Sに変更した。Xcode →Edit → XAlign → Setting

ナビゲーションでの戻るボタンによるアプリのクラッシュ

iOS7になってから、UINavigationControllerを使用したアプリケーションで、 画面遷移中に戻るボタンを押すと、UIが更新されない問題が発生した。 (画面遷移中に左上を連打していると簡単に再現される。)

原因は、おそらくだがiOS7になってから、 ナビゲーションバーのボタンなどもスライドインのアニメーションがつき、 アニメーション中に戻るボタンが押せてしまうからなのではないかと思われる。

とりあえず、viewWillAppear:でボタンを使用不能にし、 viewDidAppear:でボタンを使用可能にした。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    // 戻るボタンを無効化する
    UIView *tmpBackView = [[UIView alloc] initWithFrame:CGRectZero];
    [tmpBackView setBackgroundColor:[UIColor clearColor]];
    UIBarButtonItem *tmpBackButton = [[UIBarButtonItem alloc] initWIthCustomView:tmpBackView];
    [tmpBackButton setEnabled:NO];
    [self.navigationItem setLeftBarButtonItem:tmpBackButton];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    
    [UIView animateWithDuration:0.3f animations:^{
        [self.navigationItem setLeftBarButtonItem:nil];
    }];
}

戻るボタンが瞬間的に現れるのもどうかと思ったので、viewDidAppear:では、 アニメーション付きで戻している。

また、この方法を使用すると、leftBarButtonItemをカスタムしている場合に、 そいつを戻るボタンに変更してしまうので、 メンバ変数にtmpBackButtonを放り込んで置いて、判定をかけるとかしているのだが、 他に良い方法があったりするだろうか?

Xcodeでのドキュメント

VVDocumenter-Xcodeが使いやすそう。

https://github.com/onevcat/VVDocumenter-Xcode

JavaDocのスタイルでコメントのテンプレを作成してくれるので、 Doxygenも使えるし。

インストールも簡単だった ・githubからダウンロード ・.projを開く ・ビルド