objc.io publishes books, videos, and articles on advanced techniques for iOS and macOS development.
App Extension とは? App Extension (Extensions) は、iOS 8 から導入される、新しいアプリ間連携のしくみです。 iOS では、以下の 6種類の Extension point *1を利用することができます。 Today Share Action Photo Editing Storage Provider Custom keyboard 大まかな仕組みは同じなのですが、見た目/機能は Extension point によって色々と違いがあり、実装方法も違ってくる(部分もある)ので、個別に説明していきたいと思います。 まずは一番説明しやすい "Action" から。 1. ターゲットを作成する Xcode の [File] > [New] > [Target] から、[Application Extension] > [Action Extensi
矢口裕也です。 Advent Calendar 10日目はiOSのUITableViewの話をします。 ぼやき iOSアプリを開発していると70%くらいの時間はUITableViewに費やしている気がしてきます。 UITableViewは非常にめんどうなものですが、パフォーマンスがシビアでかつユーザーの快適さに直結するものなので大いに手間をかける価値があります。 この記事ではガクガク処理落ちするUITableViewを例として改善していきながら快適なUITableViewのつくりかたを解説します。 目的 以下のケーススタディでは次の目的でコードを改善していきます なめらかに動くようにする ここでのポイントは実際速くなくてもユーザが快適に感じればOKである、ということです。処理速度が高速である必要はありません。 戦略 UITableViewでのパフォーマンス問題は次の2点であることが多いです
OCLint is a static code analysis tool for improving quality and reducing defects by inspecting C, C++ and Objective-C code and looking for potential problems like: Possible bugs - empty if/else/try/catch/finally statements Unused code - unused local variables and parameters Complicated code - high cyclomatic complexity, NPath complexity and high NCSS Redundant code - redundant if statement and use
Xcode標準のテストライブラリがうまいことやってくれないせいで、非同期処理のテストを書く場合に待ちの処理を自分で書いてあげないといけません。 最近のすごくいい感じの拡張が紹介されたのでこれを使うとなかなかいい感じです。 Objective-Cで非同期処理のテストをシンプルに書く方法 - TOKOROM BLOG ですが、実際はそこまでやらなくてもSDK標準の機能だけでも簡単に実装できます。サンプルコードは以下の通り。 - (void)testExample { CFRunLoopRef rl = CFRunLoopGetCurrent(); NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://xoyip.hatenablog.com/"]]; NSOperationQueue *qu
For a recent project I needed to refactor a primary view within our iPad app, so I decided to learn the ins and outs of UICollectionView (introduced in iOS 6) and I thought it would make for a good tutorial to share. My project ended up needing a custom UICollectionViewLayout which meant I needed to handle more of the layout logic than if I'd used the UICollectionViewFlowLayout that Apple provides
iOS開発1ヶ月ぐらいやったらいろいろと、疑問に思ったことがあったりしたので社外のエンジニアからいろいろ話し聞いてみたいと思い、定時後にふらっと行ってみた。 http://eventdots.jp/event/47442 会そのものは、うちではこんな環境でアプリ作ってますよ〜とかテストis便利とかグロースハックとかそんなことを発表されていた。印象としては思ってたよりもみんな人手によるテストを重視していて、今日の発表で自動テストの話をしてたのは id:cockscomb だけだった気がする。 アプリ開発のテストが個人的にもすごい関心事となっている。RubyやPerlに慣れたサーバーサイドのエンジニア的にはテスト書きながらコード書くのが当たり前になっていて、Objective-Cでいくら静的片付けっぽい型宣言をしているからと言っても、四六時中シミュレーター立ち上げてはブレークポイント打ってデバ
世の中にはたくさんキャッシュの実装があり、 自前の実装は捨てろなんて言われたりするのですが、 それでも自分の思い通りのキャッシュ機構を作りたくなるものだと思います。 自分はlimitに達したときにすべてのオブジェクトを削除するようなメモリキャッシュではなく、 他からの参照がないオブジェクトを選択して削除するようなメモリキャッシュが欲しかったのでISMemoryCacheを実装しました。 最近、ISMemoryCacheを更新して0.1.0を出したので、その機能を紹介します。 アプリがバックグラウンドに入ったときに他からの参照がないオブジェクトを削除 メモリ警告が出たときにすべてのオブジェクトを削除 ディスクキャッシュについてはISDiskCacheというのもあるので、そちらをどうぞ。 ISMemoryCache ISDiskCache
iOS 6から導入された Autolayout(オートレイアウト)を最近になって本格的に使うようになりました。 4-inch の iPhone が主流になりつつある中、アプリを Autolayout に対応させるのはほぼ必須といっても良いと思います。Storyboard と格闘してなんとかコツはつかめたものの UIScrollView だけは一筋縄ではいかず苦労しました。 というわけで Autolayout に対応した画面で UIScrollView を使う時のコツをまとめてみました。 なおこの記事で説明する内容は Storyboard 上で Autolayout がオンになっていることが前提になっています。 Autolayout 対応画面で UIScrollView を使うための2種類の方法 Autolayout に対応した画面で UIScrollView を使うには以下の2つの方法があ
StoryboardでUITableViewCellのPrototypeにUIGestureRecognizerを適用できないObjective-C Storyboardには、UIGestureRecognizerも配置できますが、UITableViewCellのPrototypeにOutletを紐付けるとビルド時にエラーとなります。 error: Illegal Configuration: Gesture recognizers cannot be used on prototype objects. エラー内容によると、ジェスチャはStoryboardのプロトタイプオブジェクトでは使えないようです。 コードで何とかするしかないですが、UITableViewCellは再利用を前提としていて、初めてデキューされたオブジェクトだけにジェスチャを紐付けするように工夫する必要があります。 st
As a local variable: returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...}; As a property: @property (nonatomic, copy, nullability) returnType (^blockName)(parameterTypes); As a method parameter: - (void)someMethodThatTakesABlock:(returnType (^nullability)(parameterTypes))blockName;
iPhone, iPod touchアプリ開発するときにApple Developer Centerからサンプルをダウンロードして参考にしながら開発しているけど、どのサンプルがどんな感じか忘れてしまうのでメモ。一覧でまとめたサイトはないものか・・・。 実際に動かしたものと(個人的に)参考になりそうなものだけ。順不同 UICatalog UIコンポーネントの一覧。 AppPrefs インフォメーション、設定画面への切り替え方 CoreDataBooks Core Dataを使ったアドレス帳。新規登録、削除、編集など基本的なことが分かる QuickContacts 上のCoreDataBooksを進化させてアドレス帳として完成度を高めた感じ。起動直後のメニューはplistファイルを使っている。 SimpleDrillDown ナビゲーションの使い方。データ部分がちゃんとクラスに別れている。 D
NSCacheというキャッシュモジュールについて第43回Cocoa関西で発表してきました。 NSCacheの特徴 スレッドセーフ NSDictionaryのように手動でロックする必要がない 格納オブジェクトの上限を決められる 溢れたら自動破棄 iOSのようなメモリ制約の厳しい環境に最適 NSDictionaryに似たインターフェイス Mac OS 10.6 / iOS 4.0以上で使える 具体例としては、ダウンロードした画像をオンメモリにキャッシュする際等にとても有用だと思います。同じような機能を提供してくれるOSSのモジュールは見たことがあるのですが(例えばnimbusに含まれているNIMemoryCache)こちらはOS組み込みなので手軽に使えます。 発表資料 サンプルコード Twitter及びInstagramの画像をロードしてデモするサンプルコードは以下です。それぞれの機能を動かす
kishikawakatsumi/SECoreTextView · GitHub iOS/Macの両方で使えて、文字の選択やリンクのクリックに対応したテキストビューをテスト公開しました。 - 24/7 twenty-four seven 前に書いたSECoreTextViewに編集機能を実装しました (iOSのみ)。 SECoreTextViewはCoreTextを使って簡単にクリッカブルなリンクや画像付きのリッチテキストを表示できるテキストビューの代替実装としてのライブラリです。 以前のものはそこそこ簡単に豊かな表現ができるのでこれはこれでけっこう実用的だったと思います。 ↓ このように画像を含めたテキストを表示したり、リンクはクリックに反応して任意の処理をすることができます。 画像に限らず、画面に表示できるものはボタンでもその他のビューでもブロックを渡して任意の描画をすることも可能です
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く