サウンド ファイルのフォーマットを変換する方法

(コマンド書式)
/usr/bin/afconvert -f ファイルフォーマット -d コーデック [入力ファイル] [出力ファイル]

wav → caf 形式への変換方法
$ afconvert -f caff -d LEI16 input.wav output.caf

mp3 → caf 形式への変換方法
$ afconvert -f caff -d ima4 input.mp3 output.caf

フォーマット一覧を参照する
$ afconvert -hf

MagicalRecord を使用する方法

xcode 4.6.2 にて確認した。
xcode ってバージョンが変わると操作手順が変わることがあり、久しぶりに操作するときれいさっぱり忘れていることがあるので、メモ。

1. <プロジェクト名>.xcdatamodeld ファイルを作成する

2. CoreData エンティティを基にモデルクラス ファイルを作成する (( エンティティ名).h / .m)
NSManagedObject

3. mogenerator でカスタム クラス ファイルを作成する (_(エンティティ名).h / .m)
上記2.で作成したクラスを基に _”アンダーバー”が付加されたファイルが出力される。
出力されたファイルはプロジェクトに追加する。
(例) aaa.h → _aaa.h ファイルが作成される

Model ディレクトリに mogenerator が作成するファイルを出力する場合の例 (ARC対応)

1
2
3
mogenerator --template-var arc=true -m Model/(プロジェクト名).xcdatamodeld/(プロジェクト名).xcdatamodel/ -O Model/
 
(ARC対応しない場合は、--template-var arc=true は不要)

4. プリコンパイル ヘッダに MagicalRecord のヘッダを追加する

1
2
3
4
5
6
7
8
#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
 
    // MagicalRecord 用
    #define MR_SHORTHAND 1
    #import "CoreData+MagicalRecord.h"
#endif

5. CoreData.framework を追加しておく

参照: CoreDataをActiveRecord風に扱えるMagicalRecordの使い方

iOS6 で推奨されてなくなっているメソッド

deprecatedなメソッドがあるようなので、気づいたタイミングで対処。
モーダルビュー画面遷移のコードが推奨されなくなっていたので、新しいメソッドを利用するようにした。

1
2
3
4
5
6
7
 'presentModalViewController:animated:' is deprecated: first deprecated in iOS 6.0
 
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion NS_AVAILABLE_IOS(5_0);
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion NS_AVAILABLE_IOS(5_0);
 
[self presentViewController:(ビューコントローラ) animated:YES completion: nil];
[self dismissViewControllerAnimated:YES completion:NULL];

“Application windows are expected to have a root view controller at the end of application launch” がログに出力された場合の対処方法

iOS 4 以降は、UIWindow の rootViewController プロパティで、ビューコントローラを直接指定する方法が推奨されているとのこと。
iOS 6 SDK で以前の方法を使うと、画面の回転が正しく効かないなど不具合の原因となるらしい。

1
2
3
4
5
6
7
8
9
10
11
// iOS 6 以降の推奨
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 :
(省略)
 :
    self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:(UIViewController を指定する)];
 
    [self.window makeKeyAndVisible];
    return YES;
}

参照: 既存プロジェクトの iOS 6 SDK 移行