甘いものが好きです

iOS App開発時に感じた疑問や課題、その他の雑感などを書いていきます。

2012-01-01から1年間の記事一覧

MRCとARCの両方に対応したコードをシンプルに書く方法

MRC(Manual Reference Counting)とARC(Automatic Reference Counting)の両方に対応したコードを書くためには #if __has_feature(objc_arc) #if __has_feature(objc_arc_weak) という分岐により条件つきコンパイルをしなければならない。 今となっては少…

文字列(NSStringオブジェクト)を画像化する方法

文字列を画像化する方法を調べてみたら、オフスクリーン描画をしてグラフィックスコンテキストから画像を得る方法が簡単だった。 Page not found · GitHub Pages 上記のページを参考にして、指定されたサイズの領域の中央に文字列を描画して画像化するコード…

ビルドエラー「While reading ... pngcrush caught libpng error」への対処方法

Xcodeプロジェクトで使用している画像を新しいものに差し替えた後、実機をターゲットにしてビルドすると以下の3つのエラーが出るようになった。*1 While reading [プロジェクトで使用している画像へのフルパス*2] pngcrush caught libpng error: Could not f…

In-App PurchaseでProductsRequestの応答にInvalid Product IDが含まれる場合にチェックすべきこと

In-App Purchase(アプリ内課金)で課金対象プロダクトについての情報を取得するときなどには、SKProductsRequestオブジェクトに対してstartメッセージを送信する。 - (void)sendProductsRequestWithProductIdentifiers:(NSSet *)identifierSet delegate:(id…

警告「PerformSelector may cause a leak because its selector is unknown」への対処

セレクタを指定してオブジェクトにメッセージを送る処理について。 SEL sel = @selector(doSomething); if ([obj respondsToSelector:sel]) { [obj performSelector:sel]; } このようなコードをビルドすると、ARC有効時にperformSelector:の行について次の警…

警告「Unsupported Configuration: … view outlet and NIB Name set」への対処

XcodeでiOS Appのプロジェクトをビルドしたときに、xibファイル内のView Controllerについて次のような警告が出ることがあった。*1 *2 Unsupported Configuration … view outlet and NIB Name set 「view outlet and NIB Name set」で検索してみると、この警…

有効ではないSEL型変数にはnilとNULLのどちらを設定すべきか

有効ではないSEL型変数にはnilとNULLのどちらを設定すべきか、少々気になったので調べてみた*1。 NULLにするのが「伝統的」 『詳解 Objective-C 2.0 第3版』の08-02節「メッセージ送信の仕組み」(185ページ)には次のように書かれている。 Objective-Cのプ…

Mac App Storeで「ほかのアカウントで使用可能なアップデートがあります」と出てアップデートできない場合の対処法(追記あり)

Mac

Mac App Storeでアップデートを試みるとエラーが発生する OS X Mountain Lionのリリースに合わせてXcode v4.4もMac App Storeで公開された。さっそくアップデートをしようと思い、Mac App Storeの「購入済み」タブからXcodeのアップデートを試みたところ、次…

Outletにはweakを使う

きっかけはひとつのツイートから。 .@mfks17 あ!IBoutletも弱参照か。。。 @iphone_dev_jp [@tokyopengwyn]— iphone_dev_jp (@iphone_dev_jp) June 8, 2012自分はARCを利用するようになってからもずっと、weakではなくstrongを使用してOutletをプロパティ宣…

まずは『Mobile Design Pattern Gallery』をサクッと読んでおけ

O'Reilly eBookのセール中に$9.99で購入した*1『Mobile Design Pattern Gallery』*2を先日読み終えた。普段iOSアプリ制作を行なっている自分にとって興味深い話題を扱っている本だしセール期間中だったこともあり、勢いで購入して読み始めることになったのだ…

白黒反転状態の電子書籍を暗闇で読んでみるテスト

まったく未知の読書体験をしてみよう | fladdict上の記事で紹介されている読書体験をいつか試そうと思ったまま試さずに2ヶ月以上経ってしまったのだが、先ほどiBooksでEPUB形式のO'ReillyのeBooksを読んでいるときに、ふと思いつきでテーマを「夜間」にして…

Xcodeに標準でついてくる帯域制限アプリ「Network Link Conditioner」

Xcodeに標準でついてくるNetwork Link Conditionerという帯域制限アプリが次の記事で紹介されていたので試してみた。 標準で付いてくる開発用ネットワーク帯域制限アプリ | Cocoaの日々情報局 導入方法 /Developer/Applications/Utilities/Network Link Cond…

breakpointで停止すると必ずアセンブリコードが表示されてしまう状態を解決する方法

Xcodeをv4.3.1に更新した後あたりで気がついたのだが、デバッグ中にbreakpointで停止すると、該当箇所のソースコードではなくアセンブリコードが必ず表示されるようになってしまっていた。一応breakpointを設定したあたりで停止しているようなのだが、ステッ…

Xcodeをv4.3からv4.3.1に更新

Mac App StoreでiOS 5.1に対応したXcode v4.3.1が公開されたので、さっそくインストールしてみた。 アップデート手順 Mac App Storeの「アップデート」タブからXcodeのアップデートを開始。アップデート完了後、Xcodeを起動すると初回起動時には「Xcode Comp…

エラー「Couldn't register [App Identifier]」への対処

実機やシミュレータでiOS Appのデバッグをしようとすると、Appの起動前に次のようなエラーメッセージが出てAppが実行できないことがある。 Couldn't register App Identifier with the bootstrap server. Error: unknown error code. This generally means t…

Static Libraryでカテゴリを使用する場合の注意点

カテゴリの定義を含むStatic Libraryを使用すると、そのカテゴリで定義しているメソッドを呼び出すところで例外が発生してプログラムがクラッシュしてしまうことがあった。原因を調べてみたところ、まさに次の記事で説明している通り、リンカフラグに "-ObjC…

xcode-selectコマンドでXcode.appのパスを指定する

Xcode v4.3からXcode.appのパスが変わった*1ため、xcodebuildコマンドでエラーが発生することがある。このときには、xcode-selectコマンドでXcode.appのパスを指定するとよいとのこと。 参考 xcodebuildにXcodeの場所が変わったことを教える - Hello, world!…

Xcodeをv4.2.1からv4.3に更新

Xcode v4.3がMac App Storeで公開されたので、v4.2.1からv4.3に更新することにした。*1Mac App StoreでXcode*2についての「無料」ボタンを押下するとボタンの表示が「Appをインストール」に変化する。この状態のボタンをさらに押下すると(認証が行われてい…

個人情報保護に配慮したAddress Book Frameworkのラッパークラス

アドレス帳情報にアクセスする前にユーザに許可を求め、許可が得られたらハッシュ化した連絡先情報を使用する。MITライセンス。crossforward/HashedContacts · GitHub

NSFetchRequestが返す結果のタイプを設定する

NSFetchRequestクラスのインスタンスメソッドexecuteFetchRequest:error:によってフェッチ処理を行うことができる。フェッチ結果は配列(NSArrayオブジェクト)形式で得られる。この配列の各要素はデフォルトではNSManagedObjectオブジェクトだが、フェッチ…

BTServerのCPU使用率が非常に高くなる問題はXcode 4.2.1で解決?

Xcode 4.2でBTServerのCPU使用率が非常に高くなる問題 以前、Mac OS X 10.6.8 + Xcode 4.2の環境下でBTServerのCPU使用率が非常に高くなる件について記事を書いた。 Xcode 4.2付属のiOSシミュレータを起動し続けるとBTServerのCPU使用率が非常に高くなる(追…

通話履歴情報にアクセスする方法を調べてみたが…

iOS Appが通話履歴情報にアクセスする方法がないか調べてみたら、このような情報を発見。 Accessing iPhone Call History | Bushra Shahid's iOS stuff ios - How to get call history from iphone? - Stack Overflow iOS5より前のバージョンのiOSでは次のフ…

マルチスレッドでCore Dataを利用する場合にはスレッドごとにManaged Object Contextを用意する

Managed Object Contextはスレッドセーフではない Core Dataを利用するiOS Appの処理の一部をマルチスレッド実行するように修正したところ、実行時エラーが発生して強制終了するようになってしまった。このときデバッグコンソールには次のようなメッセージが…

「やるやる詐欺」は撲滅できたか

あけましておめでとうございます。本年もよろしくお願いいたします。一年の計は元旦にありというけれど、今年の抱負を語る前に、自分が昨年の年始にどのようなことを言っていたのかを振り返ってみることにする。その時点での考えとその後の1年の流れをふまえ…