読者です 読者をやめる 読者になる 読者になる

西海岸より

つらつらざつざつと

iPhone

XCode4系での正規表現検索

XCode4系で、検索sや置換(Find, Replace)を正規表現でする方法のメモ。 少しわかりにくいけど、XCode3系とほぼ同じように利用可能1. 左ナビゲーションカラムの検索ボタンをクリックして検索画面を開く 2. 検索マークの▼をクリックして、「Show Find Options…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

iPhoneアプリ開発への道

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

iPhoneアプリの保証

iPhoneアプリを作成してリリースする際、気になるのがいつまでサポートすべきか。 AppStoreを見る限り、提供する個人、会社なりの独自基準でサポートを続けているっぽいが、iTunesStore上の規約ではどうなっているのか確認してみた。ITUNES STORE - サービス…

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…

iPhone4フロントパネルの修理費用比較

昨年のイブの夜、急いで帰宅している最中にマイiPhoneがアスファルトをまさかのスライディング。。。こんなザマに。。。交換は高いかなぁと思いつつ、一刻も早く修理したく調べてみたところ、 修理業者はいくつかあるみたいで、自分なりに調査して比較。 iPh…

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

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

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

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

エンタープライズライセンスでのipaファイル作成をコマンドで実行

コマンドのメモ。 エンタープライズライセンスでは、adhocにアプリを配布することができるが、そのためにはアプリをビルドした後に、配布可能なファイルモジュール(ipaファイル)を作成する必要がある。 そのipaファイルがあれば、itunesにドラッグするだけで…

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__…

layerのアニメーションを無効化する方法

UIView上で扱うlayerに対して、変更を加えた場合、自動でアニメーション(暗黙的なアニメーション)がかかってしまう。これを無効化する方法のメモ。 layer追加によるアニメーションを無効化 layerの上にlayerを追加した際に、自動的にアニメーションがかかる…

staticライブラリにカテゴリを含む際に気をつけること

Xcodeのプロジェクトでstaticライブラリを作る場合で、さらにライブラリにカテゴリの実装が含まれる場合には注意が必要です。 リンカフラグに、「-ObjC」を設定 staticライブラリを利用する側のコードで、カテゴリを利用する場合、そのままでは実行のexeファ…

Xcode上でのトラックパッドによるショートカット

Xcodeでは、トラックパッドの3本指スワイプがとても便利。 三本指で上にスワイプ .mを編集中の場合には.hの編集モードへ、.hの場合には.mへの編集モードへ移動 三本指で左右にスワイプ 左にスワイプするとカーソルの位置を戻し、右にスワイプすると進める そ…

CGImageRefからcontextへの描画方法

UIImageをcontextに描画させる際、以下のようにCGContextDrawImageを使ったコードの場合、imgRefで取り出した際にy軸が逆さになって表示されてしまう。 UIImage *image = [UIImage imageNamed:@"test.png"]; CGContextDrawImage(context, self.frame, image.…

CoreDataで複数のデータモデルをマージして利用する方法

XcodeでCoreDataを用いる場合、データモデル(xcdatamodelの拡張子ファイル)を作成して、編集し、プログラム上から読み込むことになるが、複数のデータモデルをマージして、一つのManagedObjectContextとして扱いたいケースがある。この場合、NSManagedObject…

時間を計測する方法

パフォーマンスチューニングの際に、時間を測定することがよくあるので、メモ。 NSDate *startDate = [NSDate date]; //do something NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:startDate]; NSLog(@"time is %lf (sec)", interval);

iPhoneのデバイス種別を判定する方法

unameを使うと簡単に判別が可能だったりする。 - (NSString *) devicePlatform{ struct utsname u; uname(&u); return [NSString stringWithCString:u.machine encoding:NSUTF8StringEncoding]; } iPhone1,1といった型番を取得でき、以下のように機種が細か…

ホーム画面上でのアプリ表示の制限

iPhoneのアプリ名の文字数の制限を調べてみたところ、一般的には以下っぽい。 全角6文字 半角13文字 ただ、アルファベットはプロポーショナルフォントが使われてるのでは、と思い「l」(小文字のL)でやってみたところ、最大26文字までいけた。 とはいうものの…

簡単なprivateなsetterメソッドの実装方法

Objective-Cでは、プロパティの機能で以下のように記述することで、自動にアクセサメソッドを生成してくれるが、セッターは外部から非公開としたい、ということがよくある。 @property(retain) NSArray *array; @synthesize array; ここで、@property(retain…

iPhoneで利用可能なフォント

iPhoneで利用可能なフォント一覧を出力。日本語では、ヒラギノの以下のもののみ利用、表示可能。 HiraKakuProN-W6 HiraKakuProN-W3 フォントで表示可能な字数は、wikipediaを調べてみたところ、非常に広いらしい。 現行日本語書体(OpenType形式)では、Std…

ドラッグ可能なAlertView

UIKitでは、UIViewを継承することで簡単にタッチイベントを拾い、独自に実装することが可能、ってことでAlertViewもできるか試してみました。 (審査に通るかはとても怪しいので利用しない方がよいと思います) DraggableAlertView.h #import <UIKit/UIKit.h> @interface Drag</uikit/uikit.h>…

iPhoneで縦書きを表現する方法(nehan)

iPhoneで縦書きを表示する方法は提供されていないが、nehanという日本語のレイアウトエンジンを使うことで表示可能。nehan MITライセンスのOSSで公開されており、複数ブラウザに対応しておりiPhoneのWebKit(UIWebview)でも同じく利用可能だした。 ルビ、引用…