日々精進

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

iOS

TARGETS>Build Phases>Run Scriptで実行するスクリプトをレビューしやすくする

iOS

XCodeのTARGETS>Build Phases>Run Scriptで実行するスクリプトは改行していてもproject.pbxprojファイルの中では1行にまとめられてしまうので 差分のレビューがしづらい。 レビューしやすくするためにスクリプトを別ファイルに切り出すようにした。 手順は以…

cocoa podのpost_installフックを使ってAFNetworkingの自己証明書を許可する

iOS

Podfileに以下を追加すればよい。 post_install do |installer_representation| installer_representation.project.targets.each do |target| if target.name == 'Pods-AFNetworking' target.build_configurations.each do |config| config.build_settings['…

Cocoa Static LibraryのコードカバレッジをJenkinsで集計する

iOS

テスト対象が普通のアプリの場合、下記記事の通りのやればOK。 iOS - Xcode5でカバレッジをJenkinsに表示する - Qiita テスト対象がStatic Libraryの場合は、このやりかただと*.gcdaが出力されない。 以下のようにすればOK。 ・GcovTestObserverクラスの実装…

ビルドして出来るバイナリは毎回違う

iOS

iOSアプリをビルドしてできたバイナリが毎回違う(ソースコードなどのビルドのインプットが全く同じでも)のが気になっていたんだけど、理由はTimestamp、GUID、ビルド時のファイルの読み込み順などらしい。 下記は.NETの例。 参考:c# - Why is the binary …

iOS7でアラートビューを閉じた後、- (void)willRotateToInterfaceOrientation:duration:が呼ばれない

iOS

環境はiOS7。 再現手順は以下。 ・端末が縦向きの状態でアラートビューを表示する ・端末を横向きにする ・アラートビューのボタンをタップしてアラートビューを消す ・ステータスバーが横向きになる。 が、- (void)willRotateToInterfaceOrientation:durati…

potatotips#3で発表してきます

iOS

1/15にある【第3回】potatotips (iOS/Android開発Tips共有会) - connpassに参加します。 発表資料は以下。 http://hosokawa0825.github.io/slides/iOSTips 社外の勉強会に参加するのは久しぶりなので楽しみです。

iOSで使えるフォント名の一覧を知る方法

iOS

実行時にデバッグウィンドウで下記を実行すると一覧が出る。 po [[UIFont familyNames] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]

カレンダー等の許可ダイアログを複数回出す方法

iOS

カレンダー等の許可ダイアログは一度OKすると二度と出ないので テストしづらい。が、Bundle Identifierを変更するとまた出せる。

バイナリに含まれるシンボル一覧を表示する

iOS

nmコマンドを使う。 nm libPods-OpenSSL.a以下のようなシンボルテーブルが表示される。 一番左の列のアドレスが空欄のシンボルは未定義。 libPods-OpenSSL.a(xcbc_enc.o): 00001738 s EH_frame0 U _DES_encrypt1 00000000 T _DES_xcbc_encrypt 00001750 S _D…

OpenSSLをcocoapod経由でインストールするとビルドエラー「Undefined symbols for architecture i386」

iOS

これは下記のpublicなpodspecが原因。 https://github.com/CocoaPods/Specs/blob/master/OpenSSL/1.0.1/OpenSSL.podspec このpodspecでビルド対象のファイルをsource_filesメソッドに渡しているが、実はこれがOpenSSLの一部しか無くて、 ビルド対象になって…

ビルド環境をプロダクト毎に分ける仕組みをDockerを使って構築したい

iOS

下記のようにDockerを使ってビルド環境を分けられるよという記事をいくつか見たので、早速iOSアプリでやってみようと思ったら、DockerがMacに対応してなかった。。 第8回Jenkins勉強会で「Jenkins with Docker」というLTをしました #jenkinsstudy - Yahoo! J…

GHUnitのテストカバレッジを出力する方法

やり方がHack感あってかっこいい。fopen$UNIX2003とかなんなんですかこれは。。やり方は↓ GHUnitのテストカバレッジをJenkinsで表示する - TOKOROM BLOG

cocoa podでインストールしたライブラリの.pchを修正する

マクロでライブラリのログ出力を切り替えたりするなど、設定を変更することがあるのでこれは便利。 podをインストール後の処理を定義出来るとは知らなかった。やり方は↓ 参考:CocoaPodsで自動生成されたターゲットにPreprocessor Macroを定義する方法 | 踊…

iOSアプリのテストについての記事

iOS

テストライブラリが網羅されている。 iphone - iOS Tests/Specs TDD/BDD and Integration & Acceptance Testing - Stack Overflow iOSアプリのテストについての記事のまとめ TDD Resources for iOS | Architects Zone

リリースビルドにspark inspectorなどを含めないようにする方法

cocoa podのtargetを使えばdebugビルドにのみ含めるように出来る。 target :debug do pod 'CocoaLumberjack' endこれをやるにはリリース用のターゲットと開発用のターゲットを分けないといけないが、基本それはやった方がいいよね。 参考:ios - Cocoapods d…

32bitと64bitのFat binaryの作り方

iOS

Build SettingsのArchitecturesをStandard Architectures(including 64bit)にするだけ。このお手軽さはすごい。 一応ReleaseビルドのBuild Active Architectures OnlyがNOであることを確認すること。 参考:iphone - Xcode 5 and iOS 7: Architecture and Va…

Objective-Cで日本語の変数が使えるようになった

iOS

いつのまに・・・!日本語シンボルはきもいという人もいるけど、自分は推奨派なので使ってみたい。 参考:Xcodeで日本語の変数名が使えるようになりました

ビルドすると「Code Sign error: A valid provisioning profile matching the application's Identifier '' could not be found」エラー

iOS

プロビジョニングファイルがMacに追加されていないことが原因だった。 プロビジョニングファイルをダブルクリックしてMacに追加するとビルドが通るようになった。

iOSのバージョンを判定して実装を切り替える方法

iOS

appleのサンプルコードを見ていたら下記コードがあった。 こういうマクロあったんだなぁ。 #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_6_0 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Ensur…

objcプロジェクトの.gitignore

iOS

一般的な設定をGithubが公開してくれてます。ありがたやー。 gitignore/Objective-C.gitignore at master · github/gitignore · GitHub

自動でObjective-Cのコードをモダンな書き方に変換する

XCodeのModernizerを使えばできる。 XCodeのメニューのEdit>Refactor>Convert to Modern Objective-C Syntax... を実行するとモダンな書き方に変更できるところのDiffが見られるのでDiffを確認した後一気に置換できる。

ipaファイルの作り方

iOS

こちらの記事を参考に作業していたが、オーガナイザのshare...ボタンが見当たらない。 じつはもっと簡単なAdHocアプリ(ipa)の作成方法があった件... for Xcode4 - iPhoneアプリ開発まっしぐら★ - iPhoneアプリ開発グループ XCode4.3以降ではShareボタンが…

NSRect,CGRectのリテラルの書き方

こういう書き方できるんだ。知らなかった。。NSRect,CGRect共通の記法っぽい。 CGRect rect = {1,2,3,4}; CGRect rect = {.origin = {0, 1}, .size = {.width = 2, .height = 3}}; 参考:Graham Lee on Twitter: "NSRect easyToRead = {.origin = { 0,0 }, .…

NSColor型のグローバル定数を宣言する

iOS

NSColor型のグローバル定数を直接宣言することは出来ないので、 float配列の定数を宣言し、呼び出し側でNSColorオブジェクトを生成する。 const.h const float kNiceBlueColour[] = {0.2, 0.2, 0.9, 1.0}; NSColor+category.m + (NSColor*) calibratedRGBCol…

GHUnitでテストを実行するとEXC_BAD_ACCESSが発生する

iOS

しかも毎回発生する箇所が違うとか、発生しないことがあったりしてかなり厄介だった。 原因は詳しく追ってないけど多分以下。 ・GHUnitはデフォルトでは別スレッドでテストを実行している ・GHVerifyViewでViewのテストをするときにUIGraphicsGetImageFromCu…

ビルド時にエラー「has been modified since the precompiled header was built」

ビルドしたら以下のエラーが出た。 file '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWindowController.h' has been modified since the …

cocoapodでライブラリをインストールした後ビルドするとエラー「Pods was rejected as an implicit dependency for 'libPods.a' because its architectures 'armv7' didn't contain all required architectures 'armv7 armv7s'」

iOS

cocoapodでライブラリをインストールした後ビルドすると以下のエラーが出た。 Pods was rejected as an implicit dependency for 'libPods.a' because its architectures 'armv7' didn't contain all required architectures 'armv7 armv7s'下記記事によると…

UIView以外のカスタムViewクラスのオブジェクトをXIBから作ろうとしたがうまくいかない

iOS

UIViewをRootViewとするカスタムViewの場合は問題ないんだけど、UITableViewCellなどUIView以外のクラスをRootViewとするカスタムViewもXIBから作ろうとするとうまくいかない。iphone - UIView subclass with its own XIB - Stack Overflow An Update on Nes…

LLDBで変数の値が見れない"error: Couldn't materialize struct: size of variable print_string disagrees with the ValueObject's size Errored out in Execute, couldn't PrepareToExecuteJITExpression"

iOS

LLDBで変数の値を見ようとすると、以下のようなエラーメッセージが出た。 error: Couldn't materialize struct: size of variable print_string disagrees with the ValueObject's size Errored out in Execute, couldn't PrepareToExecuteJITExpressionこれ…

XCode5 developer previewをインストールするとcocoapodをupdateできなくなる

sudo gem update coocapodを実行すると以下のエラーが出る。 ERROR: Error installing cocoapods: ERROR: Failed to build gem native extension.これはXCode Command Line Toolがインストールされていないことと、 デフォルトのXCodeがpreview版になってい…