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

甘いものが好きです

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

UIWebViewのコンテンツ読み込みメソッドで最近はまったこと

UIWebViewには、表示するコンテンツを読み込むためのメソッドとして、次の3つが用意されている。 loadRequest: loadHTMLString:baseURL: loadData:MIMEType:textEncodingName:baseURL: これらのメソッドはコンテンツ読み込みを行うという点では同じだけれど…

iOS 7 GUI for Sketchが出ていたことに今日気がついた

かつてSketch*1を購入したときに、iOS AppのUIモック制作に役立つデータをいくつか集めていた*2のだけれど、その後デザインが全面的に刷新されたiOS 7がリリースされたことにより、これらのモック制作用データが使えなくなってしまった。そのため、Sketchの…

estimote beaconsのDeveloper Preview Kitが届いた

estimote beaconsのDeveloper Preview Kitが仕事場に届いた。estimote beaconsのDeveloper Preview Kitが届いた。 pic.twitter.com/Gf2yNOXsd3— Shadow (@capt_shadow) February 2, 2014パッケージにも書かれているとおり、これはまだFCC/CEの認可を受けてい…

Camera Overlay Viewを設定するとiOS 7.0以降でアプリが操作不能になる問題への対処方法

UIImagePickerControllerを使った写真撮影機能を実装していたとき、iOS 7未満では何の問題もない次のようなコードを実行すると、iOS 7.0以降ではシャッターボタンをタップして写真撮影を行ったぐらいのタイミングでアプリが操作不能になる現象が発生した。 -…

Appleに交換依頼していたケーブルが届いた

昨日交換依頼を出したケーブルが本日さっそく届いた。かなり対応が早かったので驚いた。運送業者からの受け取り時に破損ケーブルを運送業者に渡す必要があった。*1届いた新品のケーブルの動作確認。問題があればアップルサービスセンターまで電話連絡する必…

AppleCare登録済iPhone 4Sに付属していたケーブルの交換依頼を出してみた

先日、iPhone 4Sに付属していた30ピン-USBケーブルの皮膜が破れて断線寸前になってしまった。ついにDockケーブルが逝った pic.twitter.com/yzuH0Vafk9— Shadow (@capt_shadow) June 12, 2013 Dockケーブルは一応AppleCareのサポート対象に入っているみたい。…

CocoaPods利用時にUnit Testがfile not foundエラーにより実行できない場合の対処方法

CocoaPods利用時にXcodeでCommand+UによりUnit Testを開始しようとしたら、外部ライブラリのヘッダファイルをインポートしているところについて次のようなエラーが出て、テストが開始できなかった。 '....h' file not found 対処方法をまとめておく。*1 *1:C…

pod installがSSLErrorで失敗したときの対処方法

以前は成功していたのに…… 数ヶ月前に開発が一段落ついたプロジェクトに久々に手を加えようとして、再びローカルに開発環境を整えようとしたのだが、pod installを実行してみると次のようなエラーが出て外部ソースの読み込みに失敗してしまうことがあった。 …

Command Line Tools for Xcodeを古いバージョンに戻す

同一マシンに複数のバージョンのXcodeをインストールしている状況下において、新しいバージョンの方のXcodeに対応するCommand Line Toolsをインストールすると、各種ツールはこの新しいXcodeに対応するCommand Line Toolsを参照するようになってしまう。*1何…

NSManagedObjectオブジェクトをdeep copyする方法

NSManagedObjectオブジェクトをdeep copyする方法を考えてみた。NSManagedObjectはNSCopyingプロトコルに適合していない。AttributeやRelationshipを個別にチェックしてコピーしていく方法が無難だろうと思う。*1*2 *1:Fetched Propertyは普段扱わないのでこ…

XcodeのコードエディタからメソッドのCallerをたどる方法

Xcodeでは、プログラムを実行しなくてもコードエディタ上でメソッドのCallerの一覧を表示したり、Callerにジャンプしたりできる。 XCode find caller functions - Stack Overflow 上記ページの内容はXcode 4.5 beta時点での情報とのことだが、この機能は現時…

SketchでiOS App用の画像素材を作成するのに役立つ情報をいくつか

先日の半額セールの際に勢いでSketchを買ってしまった。自分がSketchを使うのは、おそらくiOS App用の画像素材を作成する場面がほとんどだろうと思う。そこで、iOS App用の画像素材で作成するのに役立ちそうな情報を集めてみた。

はてなダイアリーからはてなブログに移行してみた

今更ではあるが、はてなダイアリーからはてなブログに移行してみた。 以下を参考にして、はてなダイアリーからの記事のインポートも既に実施済。 さらに、はてなダイアリーのページからはてなブログのページへのリダイレクトの設定もしてみた。 http://staff…

Slide Pocket for Developersで気軽にスライドを閲覧

【宣伝】Web開発者向けのSlideShare閲覧アプリを作りました!プログラミング言語毎に人気スライドをチェックできるアプリです!itunes.apple.com/jp/app/slide-p… [@himara2]— iphone_dev_jp (@iphone_dev_jp) March 20, 2013@iphone_dev_jp で宣伝されてい…

Xcodeのドキュメンテーション閲覧用にDashをインストールしてみた

APIドキュメントを閲覧する上で「Dash」というアプリが便利だという情報を目にし、無料だということもあってさっそくインストールしてみた。 Mac App Store - Dash (Docs & Snippets) インストール後、初回起動時にXcodeのドキュメントを読み込まれ、すぐに…

実行時警告「Attempt to dismiss from view controller while a presentation or dismiss is in progress!」への対応

EventKitを利用したAppを開発していたとき、イベント編集画面のView Controller*1上で「完了」/「キャンセル」/「イベントを削除」のいずれかのボタンがタップされたタイミングでこのView Controllerをdismissするために、eventEditViewController:didComple…

NSScannerを利用して16進数の文字列を10進数の数値に変換

16進数の文字列から10進数の数値を得る方法を探していたら、NSScannerを使うと便利だという情報を発見。 NSString *colorCode = @"0x80ffc4"; unsigned int rgb[3]; for (int i = 0; i < 3; i++) { NSString *component = [colorCode substringWithRange:NSM…

UIImagePickerControllerでデバイスの向きの変更を無視する

UIImagePickerControllerを利用して写真を撮影するとき、Portrait固定にしたいのになかなかできず苦労した。 失敗例 以下の方法を試してみたが、うまくいかなかった。 Xcodeのビルドターゲットの設定で「Supported Interface Orientations」を「Portrait」の…

XcodeでLeap Motion対応アプリ開発の準備(Objective-C版)

Leap Motion対応アプリはさまざまなプログラミング言語で開発することができるが、今回は、Xcode上で主にObjective-Cを使ってMac Appを開発することにした。開発環境は次のとおり。 OS X 10.8.2 (12C60) Xcode 4.6 (4H127) Leap Developer Kit 0.7.3 Leap Mo…

Xcode 4.6から利用可能になったビルド設定「Empty Loop Bodies」を試してみた

以下の記事によると、昨日リリースされたXcode 4.6では新たなビルド設定「Empty Loop Bodies」が追加されたとのこと。 空ループをワーニングで見つける | Cocoaの日々情報局 この設定を有効にすると、if文やwhile文などで条件を記述した括弧の直後にセミコロ…

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年の流れをふまえ…

使いこなすと便利な文字列出力関数

普段はiOS Appばかり書いているのだけれど、たまにMac Appを書く機会がある。iOS Libraryとは勝手が違う部分のあるMac OS X Libraryに少々戸惑いつつも、本を読んだりネットで調べ物をしたりしながら書く。先日、参考にしていたソースコードでNSLogで出力す…

Mac App Store経由でXcodeがインストールされていない…と思ったら

Snow LeopardからLionにアップデートしてXcode 4.2.1がインストール可能に 本日、ようやくMac OS XをSnow LeopardからLionにアップデート。Snow Leopard時代には既にXcode 4.2をインストールして使用していたのだが、Xcodeはバージョン4.2.1からSnow Leopard…

Twitter Frameworkでツイート機能の実装が容易になった

ツイート機能の実装が容易になった iOS5でiOS SDKに追加されたTwitter Frameworkを使うと、Twitter APIを利用するiOS Appを簡単に作成することができる。従来はTwitter社にxAuth利用申請を行うなどの事前準備が必要だったが、このTwitter Frameworkを使用す…

複数のStoryboardファイルを使ってViewの遷移を行う方法

Storyboardを使用することによって、1つのファイルで複数のViewの内部構成や各View間の遷移する様子を設計することができる。ところが、Viewの数が多いプロジェクトでは、1つのStoryboardでそれらのViewを一括管理しようとすると、従来のXibファイルを用いた…

通信速度が非常に遅い時のAppの動作を確認する方法

Appの通信機能が正しく実装されているかを確認上では、通信速度が著しく低い場合や、通信が途中で途切れる場合の対処までもを確認しなければならない。ところが、確認のために理想の通信状況を用意しなければならないので、実機で確認することは難しい。App…

appearanceプロキシを使ってUI要素の外見を一括カスタマイズ

iOS 5.0より前のバージョンのiOS SDKではUI要素の外見をカスタマイズするためには、 各オブジェクトごとにプロパティの変更等の個別設定を行う サブクラス化してdrawRect:をオーバーライドする などの方法をとらなければらななかったが、iOS 5.0では各種UI要…