西海岸より

つらつらざつざつと

Objective-C

UITabbarの真ん中のタブボタンに大きな画像を使う方法

こんな感じでタブのボタンを表示する方法 真ん中のタブボタンを強調(抜粋) idev-recipes / RaisedCenterTabBar https://github.com/boctor/idev-recipes/tree/master/RaisedCenterTabBar デフォルトでUITabbarController、UITabbarに上記を実現するための方…

エキスパートObjective-Cプログラミング iOS/OS Xのメモリ管理とマルチスレッド

前から気になっていたこの本。早速購入して読んでみた。 話題としては以下の3つで、iOS4以降の新しい機能ばかり。 Automatic Reference Counter (iOS5〜) Block(iOS4〜) Grand Central Dispatch(iOS4〜) 感想としては、どの章も順を追った丁寧な説明がされて…

UIWebView上での動画再生通知(QuickTime起動)を受け取る方法

UIWebView上で、動画リンクタップ時やvideoタグ利用時に動画が再生されますが、その再生開始、再生終了の通知を受けとる方法。これもNSNotificationCenter使って実装できます。 //プレーヤ開始時(フルスクリーン状態になった時) [[NSNotificationCenter defa…

iOS5で特定のディレクトリをバックアップ対象外とする方法

特定ファイル、ディレクトリをバックアップ対象外とする方法 エントリアプリのiOS5のアップデート対応でも記述した通り、iOS5からはDLファイル等の大容量ファイルをバックアップ対象としてはいけないポリシーとなりましたが、それを受けてかiOS5.0.1よりDocu…

ゴミ箱アニメーションサンプル

ゴミ箱アニメーション(Viewがゴミ箱に消えていくイメージのアニメーション)に関するメモ。ゴミ箱のアニメーションを実装する必要があって、色々調べていたところ、iPhoneアプリのメモアプリで利用されている"SuckEffect"というものが使えそう。 ゴミ箱アニメ…

iPhoneアプリビルドのシェルスクリプト

iphoneアプリのビルドを行うシェルスクリプトのメモ。配置場所は、プロジェクトファイル(PJ_NAME.xcodeproj)と同じ階層で、実行するとアプリをReleaseモードでビルドし、adhoc配布やエンタープライズ用のipaのファイル作成まで行う。 build.sh #!/bin/bash #…

デバイスの向きの設定と取得の方法

デバイスの向きに関することを調べたのでメモ。 Info.plistでアプリがサポートする向きを設定 [プロジェクト名]-Info.plistを編集し、以下の項目でアプリがサポートする向きを設定でき、サポートする向きを複数指定可能。 Supported interface orientations …

CoreDataの罠-マイグレーションマッピングファイルの選択条件

アプリのアップデート時に、マイグレーションが必要になって実装時にはまったところのメモです。マイグレーション時にマッピングファイルが適切に選択されないという現象に悩まされました。 マイグレーションとは アプリのバージョンアップとともに、CoreDat…

アプリのiOS5のアップデート対応

iOS5が公開され、既存アプリのiOS5対応が必要だった項目のまとめ(全部ではないけど)。印象として、追加された機能以上に既存ライブラリの仕様がそこそこ変わっていて、テストして発見の繰り返しだった。 以下トピック別対応の一覧。 removeFromSuperlayerの…

ASIHTTPRequestをiOS5でビルドしたら一部宛先に対するhttps通信ができなくなった

現象としては、特定の宛先においてはすぐに通信タイムアウトが返ってきてしまう。 デバッグでエラーを見ると、(OSStatus error -98XX) が出ており、 過去だけれど関連する記事があった。 https://github.com/pokeb/asi-http-request/issues/132どうやらSSLの…

UUIDの取得方法

iOS5より、UDIDが禁止になったので代わりにUUIDを使えと。。 + (NSString*) UUIDString { CFUUIDRef uuidObj = CFUUIDCreate(nil); NSString *uuidString = (NSString*)CFUUIDCreateString(nil, uuidObj); CFRelease(uuidObj); return [uuidString autorelea…

非同期で画像をロードするUIImageView

多くのWeb画像をUIImageViewで表示する時に、読み込み中はインジケータアニメーションを表示し、画像ダウンロード完了後に画像を表示するというものがほしかったので作成。(一般には既出かと)以下のような、UIImageのImageWithURLでは、同期で画像をWebから…

UIImagePickerControllerを使わないカメラ機能のサンプルView(iOS4以上)

カメラ機能を利用する際、iOS3系まではUIImagePickerControllerを使うしかなかったが、iOS4でカメラ機能のコアAPIが解放されて、いろいろとカスタマイズできるようになった。 ので、サンプルを書いてみる。 見た目 白い矩形を操作して、そのタイミングでキャ…

UIAlertViewのキャプチャー画像を出力

UIAlertViewのキャプチャ画像を取得するコードメモ。 出力例 (本当は透過あり) AlertCaptureViewController.h #import <UIKit/UIKit.h> @interface AlertCaptureViewController : UIViewController @property (nonatomic, retain) UIAlertView *alertView; @end AlertCaptur</uikit/uikit.h>…

Xcodeのソースのヘッダーの氏名、会社名を変更する方法

以下のファイルを開く(Xcode) ~/Library/Preferences/com.apple.Xcode.plist 以下の項目を追加 PBXCustomTemplateMacroDefinitions (Dictionary) FULLUSERNAME (String) -> 個人名 ORGANIZATIONNAME (String) -> 組織名 参考 http://cocoa.synck.jp/12368224…

Objective-CのCSVパーサ

CSVをパースしてくれる便利なクラスのパースライブラリがあったので、メモ。""囲いにも対応。 Writing a parser using NSScanner (a CSV parsing example) http://cocoawithlove.com/2009/11/writing-parser-using-nsscanner-csv.html サンプルは以下よりダ…

iPhoneアプリ開発への道

新しくiPhoneアプリ開発を始めるためにどういうステップがよいか、考えてみたので簡単にまとめてみました。 ※あくまで個人的な経験を元に書いてますので、その点ご了承ください。 ※ゲーム開発はターゲットにはしていません。 役立つスキル iPhoneアプリ開発…

Xcode4で困ったことQ&A

Xcode4では劇的にUIが変わってしまい、やり方がわからず困ったことが多々あったので簡単にまとめ。 エディタの設定を変えたい Xcodeメニューより、[Xcode] -> [Preferences] で設定画面を開き [TextEditing]のタブを選択。 行数を表示させる インデント、タ…

重い処理途中の再起動で落ちない方法

iOSでは、ホームボタンを押して5秒以内に(メインスレッドで)処理中のメソッドが終了しない場合は、強制的にアプリが終了させられる制約があり、この場合アプリはバックグラウンドからも削除されてしまう。 とはいえ時間のかかる長い処理をしたいことは多々あ…

UTF-32の16進文字列を文字へ変換する方法

例えばUTF-16だと「3042」->「あ」、UTF-32だと「00003042」->「あ」へ変換するメソッド。 NSStringの内部表現は2バイトまでなので、UTF-32の場合にはサロゲートペアでCFStringを使って表現し、NSStringにキャストしてやる必要がある。 //UTF-16の16進数コー…

iPhoneでMD5

よく使うので備忘メモ。 NSDataのカテゴリで実装。 なお、利用するには、Security.frameworkをリンクする必要あり。 NSData+MD5.h #import <Foundation/Foundation.h> @interface NSData (MD5) - (NSString *)MD5DigestString; @end NSData+MD5.m #import "NSData+MD5.h" #import <CommonCrypto/CommonCryptor.h> @im</commoncrypto/commoncryptor.h></foundation/foundation.h>…

UIAlertViewの表示タイミングがずれる問題

アプリ開発をしていると、何気なくUIAlertViewを使っているけれど、タイミングによっては表示がずれて、意図していないタイミングで表示されることがある。 結構苦しめられたが、やっと再現方法がわかったので備忘メモ。現象としては、「UIAlertViewのshowを…

デバイスIDの取得方法

UIDevice *device = [UIDevice currentDevice]; NSString *uniqueIdentifier = [device uniqueIdentifier]; 追記: iOS5よりUDIDが禁止 iOS5より上記メソッドがdeprecatedされ、かつUDIDが禁止されてしまいました。(審査リジェクトという噂があります) 代わり…

NSDateFormatterで日付文字列変換する際の注意

以下のように、NSDateFormatterを用いてNSDateから現在の年月を取得する場合があるけれど、 ユーザ設定が和暦の場合には、yyyyの部分が平成xx年として想定している年と異なる文字列が入り こんでしまう場合がある。 NSDateFormatter *formatter = [[NSDateFo…

UILabelやUITextViewのフォントをヒラギノで揃える

UILabelやUITextViewではデフォルトだとsystemフォントが設定されており、 記号(※)などの文字は、全角で入力しても半角フォントが適用されてしまい小さく表示されてしまう。これを防ぐには、UILabelのsetFontで明示的にヒラギノフォントを指定すればよい。 U…

iPhone上の各種パスを取得するコード

documentsディレクトリのパス NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; tmpディレクトリのパス NSString *tmpPath = NSTemporaryDirectory…

CookieをiPhone側でセット/削除する方法

Cookieは通常サーバ側で自動的にセットされるが、場合によってはiPhone側で制御したい場合もあり、その方法のメモ。iPhoneは、アプリ単位で、共有クッキーストレージと呼ばれるものを持っており、iPhoneの通信APIはその共有クッキーストレージを参照している…

NSDateFormatterのYYYY利用時の注意点

NSDateFomatterを利用していてハマったところ。 以下のコードでは、originalという年月日時分秒の文字列を、 フォーマッタで日付変換し、さらに同じフォーマッタで文字列に戻すというもの。 結果は元の文字列になるはず。(original = originalReversed) (フ…

定数のprefixのkの意味

AppleのObjective-Cのライブラリを見ていると、enumやconst定数、defineなど、 kから始まる定義を見かけることがある。 kCFCompareLessThan少し調べてみると、これは定数を意味するハンガリアン記法だそうな。 const -> konst -> kという由来なのか。。。 た…

NSLogの出力ログにクラス名とメソッド名を追加するマクロ

NSLogでログ出力をたくさんすると、どこで出力されているのかわからなくなる。 そこで、クラス名とメソッド名をログの先頭に付加してくれるログ出力マクロを作成。 ログ出力マクロ #define LOG(args...) NSLog([[NSString stringWithFormat:@"%s ", __func__…