App Previewsの動画アップができない

iTunes Connectにて動画がアップできないのでなんでか調べたら音声のサンプルレートが高かったからみたいだ。
44.1kHzにしたら行けた。
他にもフレームレートも30fpsじゃないといけなかったり注意が必要。
アップできる仕様はこちら
しかも、各スクリーンサイズに合わせて動画用意しないといけないのか。。。大変だ。

64bit(arm64)対応の際の動的メソッドの呼び出し

64bit化に対応する際にちょっとハマったので調べてみたら、動的にメソッドを呼ぶ際の呼び出し方に対応が必要そうだった。
もともとのソースは。

Method method = class_getInstanceMethod([self->object class], self->selector);
IMP callback = method_getImplementation(method);
callback(self->object, self->selector, [[NSNumber alloc] initWithInt:1]);

もしくは

objc_msgSend(self->object, self->selector, [[NSNumber alloc] initWithInt:1])

こんなコードはパラメータで渡したオブジェクトがうまく渡らずEXEC_BAD_ACCESSで落ちてしまった。
それを

((void(*)(id, SEL, id))objc_msgSend)(self->object, self->success, [[NSNumber alloc] initWithInt:1]);

このように変えたらうまく動いた。

あと、「Implicitly declaring library function ‘objc_msgSend’ with type ‘id (id, SEL, …)’」というワーニングが出てたけど
#import <objc/runtime.h>
としているところを
#import <objc/message.h>
と変えたらワーニングも消えた。

参考)
Over&Out その後 | 【iOS7】AsyncImageView が arm64 でクラッシュする件Add Star

Landscapeでの起動画面の設定

横モードのみでiPhoneアプリを作るときにどうしてもiPhone5/6での起動画面が設定できなかったので調べてみた。
iPhone(iPhone6+以外)ではアプリが横でも起動画面は縦で用意する。
だけど、Asset Catalog(Images.xcassets)を使って起動画面を用意するとなぜか起動しても真っ黒。
どうしたらいいかと思って、xcassetsを使わずに以前のような命名規則に乗っ取った方法で設定したらうまくいった。

150410_default_setting

XCode6.3でまっさらなプロジェクトを作って試してもやはり真っ黒になるので、これはバグですよね…??
なので、横のみのアプリの際には起動画面はAsset Catalogを使わずに命名規則に沿った起動画面の画像を入れるのがよさそう。

AppDelegateから現在アクティブなUIViewController

Storyboardを使っていて、現在のアクティブなUIViewControllerを調べる方法。

[self.window.rootViewController presentedViewController];

NSLocalNotificationなどから起動した際の処理を分けたりする場合に便利。

参考)てっくろぐ | Storyboardを使っているときにAppDelegateからアクティブなUIViewControllerを取得する

ちなみに
AppDelegateを取得する方法は

AppDelegate *delegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];

参考)CreativeStyle | AppDelegateの参照をカンタンに取得する方法