日々精進

新しく学んだことを書き留めていきます

iOS

instrumentsのCall TreeでSymbol Nameにメソッド名を表示する方法

iOS

instrumentsのプロファイラなどを使ってCall Treeを表示しても、メソッド名が表示されなくてどのメソッドで時間がかかっているのかわからん・・・という場合。 以下手順でメソッド名を表示出来る。 ・instrumentsをStop ・メニューのFile>Re-Symbolicate Doc…

文字列からUIEdgeInsetsを生成する

iOS

以下を使うと簡単にできる。 UIEdgeInsetsFromString(string)UIの設定をファイルから読み込む時とか使えそう。

UIEdgeInsetsをCGRectから差し引く

iOS

以下のコードで簡単にできる。 CGRect newRect = UIEdgeInsetsInsetRect(rect, insets);これは便利。

クラッシュレポートを実機から取り出す方法

iOS

実機のログをOrganizerで見ていると、以下のようなファイルにクラッシュレポートを保存したよというメッセージが出ることがある。 /var/mobile/Library/Logs/CrashReporter/###.plistこれはiOSデバイスの以下の画面から見られる。 設定>一般>情報>診断/使…

pod lib createでプロジェクトひな形作成

iOS

pod lib createでPodライブラリ用プロジェクトのひな形が出来るらしい。知らなかった。参考:Objective-C - iOS向けのライブラリをCocoaPodsで配布する - Qiita

iOS5でXIBを読み込むと「CRASH: The NIB data is invalid. 」エラー

iOS

iOS5でアプリを起動し、XIBを読み込んだところで「CRASH: The NIB data is invalid. 」 というエラーが出た。 iOS6,7では問題なし。 原因はXIBファイルがおかしかったことっぽい。 XCode4で作ったXIBをXCode5形式に変換した時に壊れたんだろうか。 でも、iOS…

NSNumberFormatterのnilSymbolがnilの時に出力されない

iOS

NSNumberFormatterのstringFromNumberを使うと、渡したnumberがnilでもnilSymbolが返されない。 nilSymbolを返すようにするためにはstringForObjectValueを使う。 なんでこういう仕様にしたんだろう。。stringFromNumberでもnilSymbol返していいと思うが。 …

UILabelのサブクラスを複数作って困ったこと

iOS

文字列のフォーマットや文字色の変更ロジック(0以下なら赤字、0以上なら黒字にするとか)をUILabelのサブクラスを作って、各サブクラスでやっていた。 具体的には、以下のサブクラスを作った。 ・ChangePercentLabel ・ChangePriceLabel それぞれ変化率、変…

カスタムViewクラスのインスタンスが生成されない

iOS

UIViewを継承してカスタムViewクラスを作成し、そのViewクラスのインスタンスをXIBから生成したが、 なぜかUIViewのオブジェクトになってしまうことがあった。 カスタムViewクラスのinitWithCoderも実行されない。 なぜ・・・と思っていたら、Targetにカスタ…

カテゴリ名にはPrefixを付けるべき

iOS

クラス名に付けるPrefix(NSとか)をカテゴリに付けていなかったので、 ヘッダファイル名がcocoapodでインストールしたライブラリとアプリでぶつかってしまい、不具合が発生した。 具体的には、 UIView+Geometory.h というヘッダファイルが複数できてしまった…

iOSアプリ用アイコンをリサイズしてくれるWebサービス

iOS

以下のWebサービスを使うと、画像をリサイズしてiOSアプリアイコンに必要なサイズの画像をすべて生成してくれる。便利。 Makeappicon - Generate app icons of all sizes with a click!

pod updateで「[!] Pod::Executable pull --no-rebase --no-commit」エラー

iOS

pod updateを実行したらこんなエラーが出た。 [!] Pod::Executable pull --no-rebase --no-commit You have not concluded your merge (MERGE_HEAD exists). Please, commit your changes before you can merge.以下を実行したら直った。(privateはprivateな…

XCodeでビルド出来るのにxcodebuildでビルドすると「ld: library not found for -lPods」エラーが出る

iOS

原因はxcodebuildのCONFIGURATION_BUILD_DIRに相対パスを指定していることだった。 相対パスにしていると、各プロジェクト毎に.xcodeprojからの相対パスでビルド成果物を保存するフォルダを作ってしまうので、 Podsプロジェクトのビルド成果物が同じフォルダ…

アプリアイコンでアプリのバージョンが分かるようにする

iOS

テストの際に、間違ったバージョンのアプリを使ってテストしてしまっていたということが度々あったので icon versioningを使って解決することにした。 手順は以下。 ・ImageMagick installer for Mac OS XからimagemagickとGhostScriptをダウンロード・イン…

InterfaceBuilderのTips

iOS

下記記事参照。へーと思うものが結構あった。 The Code Sheriff: 8 Tips for working effectively with Interface Builder

pod updateしたら「[!] `` attempted to initialize an object with an unknown UUID. `F72FEE6D18D0296400332430` for attribute: `files`. This can be the result of a merge and the unknown UUID is being discarded.」のような警告が出る

iOS

原因は、マージに失敗するなどして謎のUUIDがproject.pbxprojに残ってしまっていること。 project.pbxprojの中をunknown UUIDで検索すると、以下のような行が見つかる。 // 普通はこんな感じで、UUIDに対応するファイル名が書いてある。 FCD71ECBE65FA52C3CE…

protectedなプロパティにアクセスすると「unrecognized selector sent to instance」になる

iOS

以下のように、Protected.hで宣言しているプロパティがある場合、 // AbstractViewController_Protected.h @property (nonatomic) NSObject *obj; このクラスのサブクラスのインスタンスからこのプロパティにアクセスするとエラーになる。 // ConcreteViewCo…

効率的にObjectiveーCのコードのDiffを見る方法

iOS

以下の方法でやるのが一番見やすい。 ・AppCodeのChangesタブをFloatingにする ・Preview DiffをONにする メリットは以下。 ・シンタックスハイライトされてる ・Side by sideで変更箇所見られる ・ファイルの切り替えが↑↓キー押すだけ やっぱりDiffは左右に…

AppCodeのChangesのファイルがすぐ消える不具合

iOS

なぜか以下の現象が発生し困っていた。 ・ファイルを編集した直後はChangesタブの中に編集したファイルが表示される ・ビルドしたり、Changesをリフレッシュしたりすると消える ・エディタ内の編集した行であることを表示するマーク(行番号などを表示してい…

NSNumberFormatterでエクセルっぽい書式設定ができる

iOS

エクセルでよくやるみたいな書式設定が使えるとは知らなかった。 これ便利だなぁ。 [formatter setFormat:@"¤#,##0.00"]; 参考:cocoa - Change NSNumberFormatter's negative format from (xxx.xx) to -xxx.xx - Stack Overflow

NSNumberFormatterでパーセントを付けると値が100倍されるのを防ぐ

iOS

Multiplierを設定すると防げる。 [numberFormatter setMultiplier:@1]; 参考:iphone - Formatting number as percentage - Stack Overflow

potatotips#5発表資料

iOS

potatotips#5で発表してきます。 発表資料は以下になります。 http://hosokawa0825.github.io/slides/GetRidOfDelegateChainByResponderChain/#/

iOSスタートアップ勉強会#2発表資料

iOS

iOSスタートアップ勉強会#2で発表してきます。 発表資料は以下になります。 http://hosokawa0825.github.io/slides/HowToUsePrivateCocoaPodLiraries

マクロで動的にシンボルを定義する

Token-Pasting Operator (##)を使うとシンボルを動的に定義出来る。 ここでの動的に、というのは実行時に、という意味では無く文字列を結合してシンボルをつくることができるという意味。 Stringizing Operator (#)を使うとシンボルを文字列に変換できる。 #…

Xcodeでactionを設定しようとしたら「Could not insert new action connection」エラー

iOS

@implementationの中にメソッドが一つも無いとこのエラーになるっぽい。 これ、XCodeのバグだよね。。

CGRectの定数を定義する

iOS

以下のようにしてCGRectの定数を定義できる。 static const CGRect CGRectOne = {1,1,1,1};今までinitWithFrame:にCGRectを直書きしてたけど、定数定義するようにしよう。

「library not found for -lPods」エラーの対処法

iOS

なぜかは分からないが、XCodeを再起動したら直った。。 原因が分からないのが気持ち悪いなぁ。

iOSアプリのBuild Settingsのいくつかの項目について調べてみた

iOS

項目が多いので調べるの結構しんどい。。 ・Debug Information Format dSYMを生成するかどうか。本番リリースのみYESにすることでビルド時間を短く出来る。 詳細:Spotify: iOSのビルド作業時間を短縮する - ワザノバ | wazanova ・generate profiling code …

+loadメソッドと+initializeメソッドの違い

iOS

どちらも一回だけ呼ばれるメソッドだが、呼ばれるタイミングが違う。 loadメソッドはクラスが最初にロードされた時に呼ばれる。 initializeメソッドは最初にクラスのいずれかのメソッド(インスタンスメソッド、Staticメソッドどちらでもよい)が呼ばれた時…

doxygenとgraphvizでドキュメント生成

下記記事の通りやるとできた。 Doxygen+Graphvizで、Objective-Cのクラス図を作る - Qiita 手順を書き出すと以下。 ・Doxygenインストール ・Doxyfile生成 brew install doxygen graphviz doxygen -g・できたDoxyfileのHAVE_DOT = NOをYESに変更。 ・doxygen…