Xcode

コレクションリテラルの記述方法に注意

#define COL_A @"columnA" #define COL_B @"columnB" #define COL_C @"columnC" #define COL_D @"columnD" NSArray* colums = @[COL_A, COL_B, COL_C COL_D ]; このようにNSArrayを定数で初期化した結果のダンプは $0 = 0x0b49f510 <__NSArrayI 0xb49f510>( columnA, columnB, colu</__nsarrayi>…

GithubとXcode

Xcodeプロジェクト中でファイル移動をしていると、処理が引っかかるようになったことに気がついた。Objective-Cがヘッダファイルとメッセージファイルの2ファイル構成からして、合計600ファイルはそれほど大きいプロジェクトとは思えないのだが、プロジェク…

OCUnitテストターゲットにて"ld: file not found"でビルドできない

ld: file not found: /Users/kazz/Library/Developer/Xcode/DerivedData/プロダクト名-eiottghqglskmzegzcmbbdbkgyhh/Build/Products/Debug-iphonesimulator/プロダクト名.app/プロダクト名 clang: error: linker command failed with exit code 1 (use -v t…

iOS6.0以降、GCDの'dispatch_release'はARC環境では使えない

以前GCD(Grand Central Dispatch)のエントリを書いた時に dispatch_release(group) グループは有限のリソースのため、使用が終わったら必ず解放する必要がある。(ARCの影響を受けないことに注意) と書いたが、iOS 6.1のプロジェクトを新たに作成して以前のコ…

Xcode4.6

iOS 6.1のリリースに合わせてこちらもアップデートされた。 コンパイラ ARCと弱参照を組み合せて使った際のバグを検出するための警告を追加した Intel AVX命令のディスアセンブルに対応するため、 otoolを拡張した C++11の"ユーザ定義リテラルと"無制限ユニ…

XcodeにおけるC++コードとデバッグとコンパイラオプション

以前に「OpenCVのコードを書く時にはC++で統一する」と宣言した。OpenCVのコードをC++にすることによって OOPになって画像やマトリクスを一貫してcv::Matクラスで扱えるようになった テンプレートやコレクションクラスが使えるようになった (最初は気味が悪…

フォトアルバムから写真を取得する

UIImagePicker(Controller)を使用してカメラから撮影した写真、又はフォトアルバムに格納されている写真をアプリケーションに取り込む場合、delegateを自身にセットして以下のようなコードを使うだろう。 - (void)imagePickerController:(UIImagePickerContr…

viewDidLoadでUIView.Frame.Sizeは確定しない

同じシーケンスで機能を呼んでいるのに、表示されるビューの座標特に高さが変わるという、しつこいバグに悩まされていたのだが、極めて単純な原因だった。それはログを採取することですぐに分かった。 [DEBUG] self.frame.size.width (viewDidLoad) -> 320.0…

Could not instantiate class named NSLayoutConstraint

Xcode4.5.2でプロジェクトを作成して、その後iOS5.0にターゲットを変更するとNSInvalidUnarchiveOperationExceptionと共に表題のエラーが発生する。 Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not…

ミイラ取りがミイラに

iOSで複数ある画面(UIViewController)のうち、特定の画面だけ向きの変更を許可する(許可しない)にはどのような実装が良いか。ベタな実装としては全てのViewControllerにshouldautorotatetointerfaceorientationを個別に実装する方法があるが、これはスマート…

scrollToRowAtIndexPathが期待通りに動作しない

UITableView:scrollToRowAtIndexPath:atScrollPosition:animated:は任意のIndexPathが指す行位置にテーブルビューをスクロールする便利なメソッドなのだが、テーブルビューの最後の行数行に対しては実行しても無視されてしまう(スクロールが起こらない)。親…

JenkinsとXcode

以前にあったiTunes Connectへのバイナリ提出の失敗の反省から、個人でもJenkinsを導入してみようと思っていろいろ試しているのだが、中々上手くいかない。Jenkins自体はよく作り込まれたプロダクトであり、導入自体は非常に簡単だ。自身のパッケージをイン…

Missing file

Xcodeを使用していると、ある時突然このエラーが大量に発生して焦ることがある。これは恐らくXcodeの問題だと思うのだが、誰かが作ったか、または自分が無意識に作ってしまった.svnディレクトリとその配下のファイルの同期がとれなくなったことを、本来検知…

アプリケーション提出時の心得

iTunes Connectにアプリケーションを提出した後に、そのアプリが実際には動かないことに気がついた。この場合バイナリだけをこっそり置き換えるなんてことは出来なくて、一旦提出したバイナリをリジェクト(破棄)して、状態をアップロード待ち状態にした後に…

lexical or preprocessor issue ,file not found

自宅のMacBook Pro Retinaでは上手くいくOpenCVを使ったアプリのビルドが、職場のMacBook Proで通らない現象だが、漸く判明した。このアプリケーション、Xcode上でフレームワークとして作られたopencv2.frameworkをプロジェクトに組み込んでいるのだがそのフ…

Build Settingsのエクスポート

自宅でビルドに成功しているOpenCV用のプロジェクト、職場ではどうやっても失敗するのでその違いを調べるためにも自宅のプロジェクトで使用しているプロジェクトのBuild Settingsをまとめてエクスポートしたい。一応、COMMAND+Aで全選択した後にクリップボー…

ホットスポット

昨日のエントリでデバッグシンボルが正しく割り当てられたので、iPod touch実機上で正しくプロファイリングが出来た。 結果その1 (invert Call tree on) "invert Call tree"によってスタックトレースを反転しているので、原因のあった行が先に表示される。時…

Re-Symbolicate (デバッグシンボルの再割り当て)

MacやiPhoneアプリケーションを開発している皆さんは、Instrumentsを使っているだろうか。 Instrumentsはこの手のプロファイラとしては最も高性能且つ高機能なツールであり、それがなんと無償で使えるのだ。使わなくては損だろう。※1 経緯 先日、OpenCVのサ…

iOSプログラミングの注意点 その3 (UITextUnBlinder修正)

先日アップしたBBUITextUnBlinderだが早速バグが見つかったので修正(恥bb_keyboardDidShow等で通知メソッドのパラメタから内部ソフトウェアキーボードの高さをCGRectとして取得しているが、キーボードの高さはデバイスの向き(Portraint/Landscape)でフィール…

iOSプログラミングの注意点 その3 (UITextUnBlinderを作成する)

iOSで面倒なことの一つにソフトウェアキーボードの制御がある。 Androidの場合、殆ど制御が要らないように上手くできているのに比べてiOSのそれは出たら出っぱなしでそのままでは閉じることも出来ず、他のコントロールを隠してしまってホームに戻ることしか…

iOSプログラミングの注意点 (その2

昨日がEXC_BAD_ACCESSだったので次はメモリリークだよねと思っていたのだが、タイムリーにやっかいなエラーが発生した(過去にもやったことがある)ので今回は別なテーマにする。 -.plistに注意 Xcodeのプロジェクトを作ると必ず"プロジェクト名-info.plist"と…

iOSプログラミングの注意点 (その1

Objective-Cを使ったiOSアプリケーション開発を初めてから半年以上経ち多少は慣れてきた。その中で他のプラットホームと比べてiOS上でのプログラミングで注意すべき点を幾つか上げていこう。 EXC_BAD_ACCESS 恐らくiOSプログラミングを初めて最初に遭遇する…

リテラル記述が補完候補に

上記はXcode 4.5.1上でイニシャライザの引数(NSDictionary*型)に辞書リテラルの開始である@を入力した所だが、見た通りコンプリションが効き候補がホバーされている中にリテラル記述が選択できるようになっている。(NSArrayとNSDictionary)いつの間にこの機…

UITableViewControllerをUIViewControllerに切り替える

以前に日記UITableViewController上に配置したUITableViewでヘッダ(tableHeaderView)をスクロールさせずに固定するTipsを書いた。 tableHeaderViewを固定にするコード -(void)scrollViewDidScroll:(UIScrollView *)scrollView { // ヘッダViewを取得 UIView*…

OCUnitがアプリケーションのコンテキストで動かない。

独立したテストは動くのだが、通常の単体テストとしてアプリケーションのコンテキストで動くはずなのにアプリケーション(AppDelegate)が起動しないのだ。ウィザードで追加したので特別な設定は必要は無いと思っていたんだが、そうではないようだ。 iphone - …

意外に簡単? 4インチスクリーン対応

iPhone5に対応したXcodeのバージョン、4.5が正式に登場した。 Xcode 4 Downloads and Resources - Apple Developer変更点は色々とあるのだが、なにより気になるのは iOS6(iPhone5)対応は? 旧アプリも含めた4インチディスプレイへの対応は? だと思う。私は面…

OpenCVをビルドしてプロジェクトに組み込む

少し空いてしまったが、少しずつOpenCVも勉強していこうと思う。 それには実際にサンプルコードを動かしていくのが一番なので、まずはOpenCVを使ったコードが動くように、それもiOS環境上で動くようにしなくてはならない。導入はHomeBrewかMacPortsを導入し…

UIToolBarとそのボタンもコードで追加する

UINavigationControllerにはナビゲーションバーの他に、下端にツールバー(UIToolBar)を配置することができる。 UIViewControllerのプロパティはインタフェースビルダのアトリビュートインスペクタで確認、変更することができる。ツールバーに関してもこれで…

UINavigationBarのボタンはコードで追加する

UINavigationControllerをベースにしたビューの遷移は、ビューがプッシュされる度にナビゲーションバー(UINavigationBar)と呼ばれるツールバーが上端に配置される。※ナビゲーションバーには遷移を逆に辿るために「戻る」ナビゲーション用ボタンが自動的に配…

プロジェクトが壊れる その2

案の定大量の.svnファイルが出来ていた。 entriesを見てみると、やはり全然関係の無いはずの外部リポジトリに接続していることになっている。どうやらプロジェクト作成時にリポジトリを作成するように指定するとプロジェクトに追加した他のプロジェクトも全…