その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

Objective-C

クラッシュイベントを受け取る

TestFlight SDK とか、クラッシュイベントを受け取って Stack Trace をレポートしてくれたりしますが、どうやるんだろう?と思い調べてみました。 クラッシュイベントを受け取って何かしたい場合は、 NSSetUncaughtExceptionHandler() にハンドラ関数のポイ…

GKLeaderboard でどのようなスコアデータの絞り込みができるか

Game Center の Leaderboard のスコアデータは、GKLeaderboard クラスを使用して直接とってくることができます。 アプリケーションでスコアデータを調べたり、独自の Leaderboard ビューを作成したい場合は、GameCenterから直接スコアデータをロードできます…

ARC 有効/無効に両対応させたい場合に便利なマクロ

汎用ライブラリ等、ARCプロジェクトでも非ARCプロジェクトでも使用する可能性のあるクラスを実装する場合、 #if !__has_feature(objc_arc) - (void)dealloc { [super dealloc]; } #endif といった感じで "__has_feature(objc_arc)" を用いて判定を行いそれぞ…

iOS 5.0 から iOS 5.1 への API 変更点まとめ

単なる API Diffs ドキュメントの抜粋ですが、iOS 5.1 での iOS SDK API 変更点です。 AssetsLibrary ALAssetRepresentation.h Added -[ALAssetRepresentation dimensions] AudioToolbox AudioFormat.h Added kAudioFormatProperty_FormatIsEncrypted AudioU…

Xcode の Guard Malloc オプション

Xcode 4 で、 Edit Scheme → Debug を選択 → "Diagnostics" タブを選択 と進むと、下記のような設定項目が出てきます。 このうち、"Enable Zombie Objects" にはいつもチェックを入れるのですが、他のチェック項目はどういう効果があるんだろう?と思いつつ…

Twitter や Facebook への投稿ライブラリ ShareKit の Tips

「iOSアプリにソーシャルサイトでのシェア機能を3行で簡単実装できる」という謳い文句で有名な ShareKit を初めて使ってみたのですが、ひっかかった部分や、ドキュメントに書いてなくてソースから汲み取った部分などあったので、諸々メモしておきます。 ソ…

オブジェクトが持つプロパティの型と名前のリストを取得する

クラス/オブジェクトが持つプロパティ情報を取得するには、Objective-C のランタイムにある、 objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount); を使用します。 また objc_property_t 型のプロパティ情報からプロパティ名を取…

WWDC 2011 Session Videos の「あとで見る」リスト その1

ずっと見ようと思っていてなかなか見れてない WWDC の セッションビデオ。 とりあえず気になったものを列挙してみました。 数が多いのでまずは A〜I 編。 Advanced ScrollView Techniques Come learn about how to achieve the appearance of infinite scrol…

NSNotification, NSNotificationCenter によるオブジェクト間通知のパフォーマンス

NSNotification, NSNotificationCenter を用いたオブジェクト間連携は使いやすいのでついつい多用してしまうのですが、具体的に内部でどのような処理が行われていて、パフォーマンス面での影響はどのくらいなんだろう、ということをイメージできずにいたので…

放物線状にアニメーションさせる

というタイトルで、はじめて Qiita に投稿してみました。 http://qiita.com/items/2269 (Twitter/Github/Hatena と同じ shu223 というIDです) ちなみにこんなコード。 + (void)startJump:(UIView *)view startPos:(CGPoint)startPos targetPos:(CGPoint)ta…

Google AdMob Ads SDK 5.0.5 の更新内容

アプリを申請した数時間後に、AdMob SDK がアップデートされていたことを知り、(申請を取り下げてまで最新にする必要があるかどうか判断するために)更新内容について調べてみました。 こちらがリリースノート。 http://code.google.com/intl/ja/mobile/ads…

In-App Purchase の Status が "Developer Action Needed" な場合の対処方法

In-App Purchase がらみでリジェクトをいただいてしまい、修正バイナリをアップロードしたのですが、iTunes Connect の In-App Purchase 設定画面の Status のところが "Developer Action Needed" のままでした。 で、そのStatusを変更するボタンのような便…

AppStoreに並ぶ最終的なバイナリサイズを計測する方法

Xcode でビルド(Archive)した ipa のサイズと、AppStore に並ぶ最終的なアプリのサイズは微妙に違います。しかもちょっとサイズが増える方向にいくので、20MBギリギリで作っている場合に非常に困ります。 たとえば以前出したKOF ENCOUNTERという位置ゲーア…

iOS 5 から GameCenter に追加された GKNotificationBanner

最近購入した下記のiOS5本、iCloud や ARC や Storyborad はもちろんのこと、「こんなのもあったのか」というような細かいネタもいろいろと載っていて、大変勉強になります。 詳解iOS5プログラミング沼田 哲史 秀和システム 売り上げランキング: 303,701Amaz…

iOS Advent Calender 2011 で勉強になったことメモ

昨年末にiOS Advent Calender 2011というイベントがあったらしく、遅ればせながらチェックしてみたところいろいろと知らなかったこと、勉強になったことがあったので、以下にメモしておきます。 CocoaPods に対応していないライブラリを集めた自分用リポジト…

In-App Purchase で、プロダクトID が invalid になる場合の対処方法

たとえば下記のようなコードでプロダクト情報取得処理を行った場合に、 self.request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:productId]]; self.request.delegate = self; [self.request start]; プロダクト情報の…

iOS プログラミング 第2版

iOSプログラミングに関してだいぶ網羅的に書かれていて、600ページ近くもある分厚い本。 iOSプログラミング 第2版アーロン・ヒレガス ジョー・コンウェイ Aaron Hillegass Joe Conway ピアソン桐原 売り上げランキング: 222,713Amazon.co.jp で詳細を見る …

In-App Purchase のステータスが "Ready to Submit" な場合の対処法

課金機能つけたアプリ(※個人制作)で、課金数がずーっと0だったので、 「売れないもんなんだなー」 とのんきに構えてたら、なんと Itunes Connect でプロダクトのステータスが "Ready to Submit" になってることに気づいてしまいました。 次のように対処し…

ARC の有効/無効をファイルごとに設定する方法

プロジェクト全体でARCを有効にした状態で、一部ファイルを無効にしたい場合は、 1. プロジェクト設定画面のBuild Phasesタブを開く 2. ARCを無効にしたいファイルをまとめて選択 3. リターンキーを押すとダイアログボックスが出てくるので、"-fno-objc-arc"…

mecab での形態素解析を試してみました

https://github.com/FLCLjp/iPhone-libmecab こちらに上げられている mecab を用いて形態素解析を行うサンプルアプリで、どういう結果がでるのか試してみました。 入力文1:ゴルフに行ってきた 入力文2:ゴルフ行ってきた うーん、微妙だ。。 キーワード抽出的…

Stats : Class to monitor the real-time memory usage in iOS app

What is "Stats" "Stats" is a class to display set of parameters that indicate the load status such as memory usage, the number of UIView subclasses to create a directly below in real time. When you run the included sample project will appe…

CIFilter の効果を一通り試せるサンプルコード(フィルタ名一覧つき)

iOS5から使えるようになった CIFilter の効果を一通り試せるサンプルプロジェクトをgithubに上げました。 こんな感じでフィルターを試せます。 (フィルタのパラメータはランダムに生成されるので、かける度に変わる場合もあります) プロジェクト一式、こち…

KVC で setValue:forUndefinedKey: エラーが発生する場合の対処法

たとえば、CIFilterを使っていて、下記のようにinputImageに値(画像)を渡そうとしていて、 [filter setValue:_filteredImage forKey:@"inputImage"]; この filter が inputImage というプロパティを持たないものだったとき(たとえば CICheckerboardGenera…

NSUserDefaults の内容を一括消去する方法

ゲームアプリ開発時等、動作確認用にリセット(初期化)ボタンをつけたくなる場合があり、NSUserDefaults の内容を一括消去する方法について調べてみました。 以下のコードでいけました。 NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier]; …

NSUserDefaults に保存されている全てのキーと値の一覧を取得する

NSUserDefaults の、 - (NSDictionary *) dictionaryRepresentation というメソッドを使用すると、保存されている全キーの内容を取得することができます。 NSDictionary * dic = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]; NSLog(@…

位置情報のOn/Off、許可/不許可を確認する

Appleのドキュメントを見ながら、CLLocationManager の Boolean を返す系のメソッドがそれぞれどういうことを意味しているのか調べてみました。 ただこの調査、iOS5リリース以前(2011年7月)に行ったものなので、情報が古いところがあるかもしれません。 lo…

Push Notification おさらい

プッシュ通知を実装するときに、「バックグラウンドで通知受けたときはapplication:didFinishLaunchingWithOptions:とapplication:didReceiveRemoteNotification:、どっちが呼ばれるんだっけ?」とかなんだかいつも自信なくなってきてドキュメントを見返した…

パフォーマンスチューニングに関するアップルのドキュメント

アップルの『 iOSアプリケーションプログラミングガイド(英語版)』に、『パフォーマンスと応答性のチューニング』という章があって、これが今読むとかなり参考になったので、引用します。 個人的には、「リソースをあらかじめロードしておくと高速化になり…

Objective-Cの.gitignoreテンプレート

同僚のFacebook投稿で知ったのですが、各種言語の.gitignoreテンプレートを集めたリポジトリがあります。 https://github.com/github/gitignore ちなみにObjective-Cのテンプレートの中身はこんな感じでした。 https://github.com/github/gitignore/blob/mas…

CATransform3D で 複数軸に沿って回転させる場合の注意点

たとえば、 y軸について110度回転 z軸について30度回転 CATransform3D transformY = CATransform3DRotate(transform3D, DEGREES_TO_RADIANS(110.0), 0, 1, 0); CATransform3D transformZ = CATransform3DRotate(transform3D, DEGREES_TO_RADIANS(30.0), 0, 0…