Macセットアップ手順(自分用メモ)

新たにMacをセットアップする必要があったので、自分用メモですが公開しておきます。

OSまわり

  • キーボード関連
    • 「システム環境設定」→「キーボード」→「キーボード」より「キーのリピート」を最大まで速くし、「リピート入力認識までの時間」を最大まで短くする
    • 「システム環境設定」→「キーボード」→「キーボード」→「修飾キー」よりCaps LockキーとControlキーを入れ替える
    • 「システム環境設定」→「キーボード」→「キーボードショートカット」→「キーボードと文字入力」で「次のウインドウを操作対象にする」のショートカットをoption + tabに変更
    • 「システム環境設定」→「キーボード」→「キーボードショートカット」→「フルキーボードアクセス」で「すべてのコントロール」を選択
  • マウス/トラックパッド関連
    • 「システム環境設定」→「トラックパッド」→「ポイントとクリック」→「副ボタンのクリック」で「右下隅をクリック」が選択しチェックを入れる
    • 「システム環境設定」→「トラックパッド」→「ポイントとクリック」→「軌跡の速さ」を最速に設定
    • 「システム環境設定」→「ユニバーサルアクセス」→「マウスとトラックパッド」→「トラックパッドオプション」「マウスオプション」のそれぞれで「スクロールの速さ」を最速に設定
  • 時刻の表示に日付を加える
    • 「システム環境設定」→「日付と時刻」→「時計」の「日付のオプション」の「日付を表示」にチェックを入れる
  • Dockを自動的に隠す
    • Dockの右側の方にある薄い点線を右クリックし、「"自動的に隠す"機能を入にする」を選択する
  • 「再ログイン時にウィンドウを再度開く」の無効化
  • Finder関連

アプリケーション関連

SVProgressHUDでかっこよくLoading(読み込み中)表示

iOSアプリでデータ取得中やWebページの読み込み中に処理中であることを示すためにUIActivityIndicatorViewを使用することが多いと思いますが、もう少しかっこよくスタイリッシュに表示したい場合にSVProgressHUDというOSSが便利だったので紹介したいと思います。

同じような機能を持ったライブラリにMBProgressHUDがありますが、こちらよりもシンプルで使いやすいです。ライセンスはMITライセンスです。ちなみにHUDとはUIKitに含まれているUIProgressHUDクラスのことですが、こちらはUndocumentedな非公開クラスのため、おそらくリジェクト対象になります。
f:id:murapong:20120522165932p:image

インストール

  1. SVProgressHUD.h/mをプロジェクトに追加する
  2. プロジェクトにQuartzCore.frameworkを追加する

使い方

基本的には、HUDを表示させたい時に[SVProgressHUD show]、非表示にしたいときに[SVProgressHUD dissmiss]のようにSVProgressHUDのクラスメソッドを呼ぶだけです。

インジケータ付きHUD表示メソッド。

+ (void)show;
+ (void)showWithStatus:(NSString*)status;
+ (void)showWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType;
+ (void)showWithMaskType:(SVProgressHUDMaskType)maskType;

非表示系メソッド。

+ (void)dismiss;
+ (void)dismissWithSuccess:(NSString*)successString;
+ (void)dismissWithSuccess:(NSString*)successString afterDelay:(NSTimeInterval)seconds;
+ (void)dismissWithError:(NSString*)errorString;
+ (void)dismissWithError:(NSString*)errorString afterDelay:(NSTimeInterval)seconds;

maskTypeでHUD表示時の挙動(ユーザ操作、背景)を変更することができます。

enum {
    SVProgressHUDMaskTypeNone = 1, // ユーザ操作可(デフォルト)
    SVProgressHUDMaskTypeClear, // ユーザ操作不可
    SVProgressHUDMaskTypeBlack, // ユーザ操作不可、背景が薄暗くなる
    SVProgressHUDMaskTypeGradient // ユーザ操作不可、alertViewっぽいグラデーションで背景が薄暗くなる
};

確認/完了メッセージを表示するには以下のメソッドを使用します。

+ (void)showSuccessWithStatus:(NSString*)string;
+ (void)showSuccessWithStatus:(NSString *)string duration:(NSTimeInterval)duration;
+ (void)showErrorWithStatus:(NSString *)string;
+ (void)showErrorWithStatus:(NSString *)string duration:(NSTimeInterval)duration;

HUDの表示中にメッセージを変更したい場合は、以下のメソッドを使用します。HUDのメッセージを段階的に変えたいときなどに便利です。

+ (void)setStatus:(NSString*)string; // change the HUD loading status while it's showing

参考

最後のMRC(手動参照カウント)ブランチ
https://github.com/samvermette/SVProgressHUD/tree/last-mrc

Finderで隠しファイル/フォルダを表示するには

Macで.htaccessなどドットで始まるファイル/フォルダは隠しファイル/フォルダとなるため、デフォルトだとFinder上には表示されません。表示させるにはターミナルより以下のコマンドを実行します。

defaults write com.apple.finder AppleShowAllFiles true
killall Finder

非表示にするには以下のコマンドを実行します。

defaults write com.apple.finder AppleShowAllFiles false
killall Finder

UISegmentedControlを操作不可にするには

segControl.enabled = NO;

[segControl setEnabled:NO];

では操作不可にならないようで、

[segControl setEnabled:NO forSegmentAtIndex:0];

のようにセグメント毎に個別に操作不可にします。


すべてのセグメントを操作不可にするには以下のようにします。

for (int i = 0; i < segControl.numberOfSegments;  i++) {
    [segControl setEnabled:NO forSegmentAtIndex:i];
}

Appiraterを使ってアプリのレビュー誘導をする

AppirateriOS4.0以降で動作するApp Storeへのレビュー誘導を促すOSSです。導入手順も簡単なのでカスタマイズ方法と合わせて紹介したいと思います。ライセンスはMITライセンスです。
f:id:murapong:20120319170427p:image

導入手順

  1. Appiraterをプロジェクトに追加する
  2. CFNetwork.frameworkとSystemConfiguration.frameworkをプロジェクトに追加する
  3. AppDelegateのapplication:didFinishLaunchingWithOptions:で[Appirater appLaunched:YES]を実行する
  4. AppDelegateのapplicationWillEnterForeground:で[Appirater appEnteredForeground:YES]を実行する
  5. Appirater.hのAPPIRATER_APP_IDを自分のアプリのApple IDに変更する

カスタマイズ

Appirater.h内の定数を変更することでカスタマイズができます。いくつか解説しておきます。

#define APPIRATER_APP_ID				301377083

アプリのApple IDです。必ず対象のアプリのものに変更してください。

#define APPIRATER_APP_NAME				[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]

アプリ名です。都合が悪い場合は、以下のようにCFBundleDisplayNameを指定してもいいです。

#define APPIRATER_APP_NAME				[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]
#define APPIRATER_DAYS_UNTIL_PROMPT		30		// double

同じバージョンのアプリを使い始めてから何日経過したらアラートを表示するかを指定します。デフォルトは30日です。

#define APPIRATER_USES_UNTIL_PROMPT		20		// integer

同じバージョンのアプリを何回起動したらアラートを表示するかを指定します。デフォルトだと20回です。ここでいう起動というのはアプリ起動時に加えて、フォアグランドに入ったときも含まれます。

#define APPIRATER_SIG_EVENTS_UNTIL_PROMPT	-1	// integer

経過日、起動回数の条件に加えて何か特別な事(ex.ゲームのレベルアップやボス攻略など)をしてくれたユーザに対してアラートを表示することも可能です。-1に設定されているとこの機能は無効となります。条件クリアの回数を指定してください。また、条件をクリアした任意の箇所で [Appirater userDidSignificantEvent:YES]を実行してください。

#define APPIRATER_TIME_BEFORE_REMINDING		1	// double

「後で見る」を選択したときのリマインド間隔(日)を指定します。デフォルトは1日です。

#define APPIRATER_DEBUG				NO

YESにするとアラートが毎回表示されるようになります。メッセージやリンクの確認時に便利です。

UIWebView経由でアクセス時のユーザエージェントを確認するには

UIWebViewのstringByEvaluatingJavaScriptFromString:というメソッドでJavaScriptを実行すれば、ユーザエージェントを取得できます。

UIWebView *webView = [[[UIWebView alloc] initWithFrame:CGRectZero] autorelease];
NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSLog(@"userAgent: %@", userAgent);