サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
数学
jarinosuke.hatenablog.com
Swift での iOS アプリ開発 徐々にですが、でも確実に色々な場面で Swift のコードを見る機会が増えてきたことを実感します。 iOS の設計思想など大枠の部分では Objective-C での知見は生きてきます。 しかし Swift の言語仕様についても知っておかないと ついつい低きに流れて Objective-C ぽい Swift になってしまいがちです。 Swift のコードレビュー そこで Swift らしく Swift の良さを活かしたコードにするためにコードレビューの話になるわけです。 iOS 開発全般におけるコードレビューについては以下のブログにまとまっているので省きます。 iOSアプリケーション開発のコードレビューで気をつけていること - ninjinkun's diary また本記事を書くにあたって Swift コードレビューを調べていて良いものがまとまっていた
今こそ frame 思考脱却の時 Xcode 4 / iOS 6 から存在していた Auto Layout でしたが、 当時は Interface Builder の Auto Layout 対応も中々ひどく、使うのが辛かった記憶があります。 そんななか僕は順調に layoutSubviews に傾倒していったわけですが、 iPhone 6/iPhone 6 plus がついに登場し、Size Class という新しい概念も投入され 現状では間違いなく2年前とは比べ物にならないレベルで Universal アプリは作りやすくなりました。(ただし iOS 8 専用アプリのみ) ある程度のデザインパターンを懐に用意していた方が時間が省けます。 ここでは Auto Layout を用いたレイアウトに関するユースケース毎に簡潔に書いていますので、 「それ知ってるわ」みたいなのがあったら適宜読み飛ば
設定アプリへの遷移 ローカル通知や位置情報の Always と WhenInUse の二種類の認証、 HealthKit など、 iOS 8 では iOS 7 よりも多くのユーザの許可が必要な情報が増えたように思います。 しかし、ユーザに初回のアラートで拒否されてしまうと iOS 7 まででは アプリ自身が設定画面へ遷移させて再度許可してもらう方法はありませんでした。 設定アプリへ非公開のカスタムスキームを用いて遷移させるという手法もありましたが。 iOS 8 での設定画面への遷移方法 iOS 8 ではアプリが何かしらのカスタマイズ設定を保持している場合、 設定アプリ内にアプリ毎の設定ルートビューができました。 そのビューに以下のメソッドを実行する事で遷移する事が出来ます。 [[UIApplication sharedApplication] openURL:[NSURL URLWithS
出たままのキーボードをスクロールされたら良い感じに閉じる iOS 純正アプリの Messages みたいなキーボードの挙動をやりたいなー、と調べていました。 どういう挙動かというと、 キーボードが出ている状態でスクロールダウンすると、それに伴ってキーボードも下がる ドラッグしながら下げるのをやめて上にあげるとキーボードも戻ってくる と、大変インタラクティブな挙動になっているのです。 まぁここまでやらなくとも、せめてスクロールビューへのドラッグなどのジェスチャーを検知して キーボードを dismiss したいと思いました。 iOS 7 以前 iOS 7 より前では、簡単に実装するとすればスクロールビューに以下のようなことを していてフックしていたかなと思い出しました。 UIGestureRecognizer をスクロールビューに付与してイベントを取得 UIScrollViewDelegate
Animation Block iOS 4 から UIView のアニメーションを簡単にするために、以下のアニメーションに関するクラスメソッドが UIView に追加されました。 iOS 開発に携わってる人ならみんな知ってると思います。 + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations; + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion; + (void)animateWithDuration:(NSTimeInterval)durati
Payload Push 通知には Payload と呼ばれるデータ領域があり、 そこにはシステムがユーザの警告するためのデータや、別用途で用いるためのカスタムデータなどが入っています。 iOS 側での実装 対象のアプリケーションが起動していない状態で、Notification Center 内の通知をタップするなどして起動すると、 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions が走り、launchOptions の中に Push 通知内の Payload のデータが入っているというわけです。 そのデータは以下の様にして取得する事ができます。 launchOptions[UIApplicationLaunchOption
ユースケース CADisplayLink を実際に使う例と共にどんなクラスなのか簡単に紹介します。 例えば現在時刻を表示する場合。 画面に表示されている日時を定期的に更新する必要があります。 そのような場合に NSTimer で 0.01 秒など適当なインターバルを設定して更新、みたいなこと実装した経験ありませんか? 僕はあります。 それを解決するための表示されているビューを更新するためのイベントを取得するためのクラス、それが CADisplayLink です。 最近 facebook が OSS 化した pop や、長年 iOS の 2D ゲームフレームワークとして親しまれている cocos2d でも、もちろん使われていました。 facebook/pop cocos2d/cocos2d-iphone CADisplayLink の使い方 CADisplayLink を以下の様にしてセット
tintColor iOS 4 以前は tintColor プロパティは UIToolBar など、限られたクラスにのみ提供されていました。 UIToolBar - tintColor | iOS Developer Library iOS 5 になると UIAppearance が提供され、他にもたくさんの UIView のサブクラスが tintColor プロパティを持つようになりました。 iOS 7 では遂に UIView 自身が tintColor プロパティを持つようになり、アプリケーション全体への tintColor の反映が可能なりました。 どういうことかというと、値を明示的に指定しない限り tintColor プロパティは親ビューの値を受け継ぐので、 たとえば keyWindow の tintColor プロパティを設定するだけでアプリ全体に行き渡る、ということです。 UI
コンバージョン計測 iOS 7.1 から以下の API が iAd.framework に追加されています。 iOS 7.1 API Diffs ADClient - (void)determineAppInstallationAttributionWithCompletionHandler:(void (^)(BOOL appInstallationWasAttributedToiAd))completionHandler NS_AVAILABLE_IOS(7_1); この completionHandler を登録しておくと、 iAd 経由でユーザがアプリをインストールした場合に発火するといった具合です。 また設定において、Limit Ad Tracking を行い、広告トラッキングをオプトアウトしている場合には appInstallationWasAttributedToiAd が
iAd on iOS 7 iOS 6 までは iAd を表示しようとすると、ADBannerView をインスタンス化して layout してなど色々と面倒でした。 iOS 7 では iAd.framework に以下のカテゴリが追加されています。 UIViewController (iAdAdditions) これを用いる事で、今までのような煩わしいことをほとんど気にせずに iAd を表示する事が出来る様になります。 ユースケース毎に見ていきましょう。 バナー広告を表示したい 以下のプロパティをセットするだけ。 ///(1)フレームワークをimport @import iAd; ///(2)初期化時などに self.canDisplayBannerAds = YES; これだけでバナーが画面下に表示されます。 Interstitial 広告を表示したい 事前準備として以下を実行すると I
なぜ Static Library なのか 全てのソースコードを GitHub にアップロードし、Cocoapods に podspec をマージしてもらって、 他のデベロッパー達とのコラボレーションを楽しむのが現在の iOS 界隈の Social Coding の主流になっているのかなと思います。 しかし、以下のような要因などによっては上記のようなアクションを取り辛い場合があると思います。 コード自体は自由に使ってもらいたいが、実装ファイルは見られたくない ファイルが山ほどあるので、それらを使いやすくパッケージ化したうえで共有したい そんなときに有効な手段の一つとなるのが Static Library です。 Static Library は指定した header file とコンパイル済みの archive file (.a 拡張子)がインターフェースとなります。 そのため、実装部分が
self.view iOS 開発において、UIViewController の view の振る舞いは一番理解しておきたい点の一つです。 今回はその view に対して、メモリ管理とレイアウトの2つの視点を交えてアプローチを行い、 UIViewController の subclass を作成する上で、 UIViewController の各メソッドにどんな処理を書くべきか、そして何を書くべきでないか を説明出来ればなと思っています。 iOS 6 以降からを対象として考えていますので、 iOS 5 以前は取り扱いません。 self.view の振る舞い 扱いを学ぶには、まず対象の振る舞いを把握する事からです。 ライフサイクルとレイアウトサイクルの2点から簡単に復習します。 self.view のライフサイクル UIViewController の view がどのようなタイミングで生成され
コーディング規約 プログラミングを行う上でコーディング規約は一つの指針になり、 定める事でそれをもとにコードレビューなどの場で指摘などがし易くなります。 Objective-C で、しかも公開されているだけでも、ざっと探してみてこれだけの量があります。 企業 Apple Google Github NYTimes Adium Bitbucket RobotsAndPencils 開発者 Raywenderlich Marcus Zarra Sam Soffes CocoaDevCentral Luke Redpath これだけの量のコーディング規約があることからも分かりますが、 それぞれの中で定められている事柄には、結構なばらつきがあるものも多いです。 そのような環境の中で、以下のような事象が発生してしまうのも事実です。 コーディング規約を定めたものの、守れないコードが生まれてしまう コー
コードを用いてのレイアウト処理 iOS 6 から Auto Layout が導入され、レイアウトに関するコードを書く機会が ずいぶんと減ってきていると思いつつもなかなか減らない今日この頃。 最後の砦となるのはやはり以下の2メソッドでしょう。 //UIView - (void)layoutSubviews; //UIViewController - (void)viewDidLayoutSubviews; 上記2メソッド内でコードを用いて様々なレイアウトを行うわけですが、 今回はその中でのコーディング作法として CGGeometry をもっと使って読みやすくできるよ! という事を知って欲しくて書きました。 CGGeometry CGGeometry というと聞き慣れないですが、CGRect や CGPoint, CGSize などの構造体と、それを取り巻くマクロ関数を含めた総称です。 CGG
導入 最近、最近ふと 詳解 Objective-C 2.0 初版 を手に取る(電子化しているので実際に手に取るのは Kindle ですが)機会がありました。 もちろん最新の3版も持っているのですが、初版と比べて読み進めてみると色んな事を振り返る事ができて楽しいんですね、もう歴史です。 言うまでもなく、Objective-C は僕が関わってきた約5年近くだけでも凄まじい発展を遂げています。 コミュニティも WWDC や Developer Forum を初めとして、最近では CocoaPods など 3rd party のものまで活発になっています。 そのような環境の中でも、たまにそれらの範囲外では数年前の「構造」のままのコードを見る事があったりもします。 「構造」と少々分かり辛く書いているのは、以下のような「コーディング規約」を超えた考え方だと思ったので分けて書いています。 もちろんどちら
UIMotionEffect とは iOS 7 の登場により視差効果などの、デバイスの動作がダイナミックにビューに反映される効果が多用されるようになりました。 iOS 7 登場前にそのようなことをしようとした場合、CoreMotion を用いて加速度センサに自分でアクセスして実装しなければいけなかったりと、かなり面倒な事が多かったように思います。 それを解決するべく登場したのが UIMotionEffect です。 UIMotionEffect は iOS 7 から提供されている抽象クラスで、UIView に対して実際のユーザがデバイスに対して行う動作を元にした修飾を可能にしてくれます。 UIMotionEffect の基本的な使い方に関しては、以下の記事が参考になると思います。 Motion Effects(iOS 7の「視差効果」の実装方法) 今回は UIMotionEffect を
potatotips に参加しました #potatotips というクックパッドで開催された iOS / Android の tips 共有会に昨日参加してきました。 普通の勉強会とは少し毛色が違い、参加者全員が5分間の tips を発表を行うという形式で、皆さん主体的に会に関わる事ができるような仕組みになっていたのかなと後から感じました。 僕も以下の資料を発表させていただきました。 発展 上記のスライドの最後に発展編として単純にアプリアイコンを出し分けるのではなく、既存のアイコンに対してアプリケーションの情報をオーバーレイさせて動的に作成できる事例を紹介しました。 しかし時間の関係で具体的なスクリプトの紹介は省いてしまっていたので、この記事で紹介します。 紹介 アプリの情報をアイコンにオーバーレイさせる方法は具体的に以下のリンクで紹介されています。 Overlaying applicat
JRNPasteboardMonitor [JRNPasteboardMonitor] monitoring UIPasteboard changes even if your app state is in background. https://t.co/HmJov7VYk6— CocoaPods (@CocoaPods) 2013, 10月 22 ペーストボード監視 ここ最近(といっても半年〜1年前位から)、辞書やURL共有のためのアプリでペーストボードを用いた他アプリとの連携が流行ってきているように思っていました。 というのも iOS では他アプリとの連携が Android などに比べて制限が厳しく、その中で Custome Scheme や Keychain Service などを用いて実装することが一般的です。 そのような環境下のなかで、ペーストボードのコピーイベントを元にした
ヒトは、辞める— Naoki Ishikawa (@jarinosuke) 2013, 10月 11 2010年4月新卒入社以来、約3年半勤めたヤフー株式会社を退職しました。 いままで 就職活動当時を思い出してみると右も左も分からない状態で、エンジニアとしてスタート地点にも立てていませんでした。 それでも趣味で齧った程度の iOS 開発経験と、少しばかりの虚栄心を交え「ソーシャルなことをしたいです!アプリ作りたいです!」と採用面接時に言った事を覚えています。 今思えば大ボラ吹きも良い所です。 幸いにも縁があってヤフーに入社することができ、入社前の自分では想像すらできない程の、以下のような貴重な経験をさせて頂きました。 Yahoo!メッセンジャーの Mac クライアント追加開発 新規メッセージングアプリ「Circle」 iOS アプリ開発 KakaoTalk 日本向け機能の iOS アプリ開
iOS のプライバシー設定 写真、現在地情報、カレンダーなどユーザ個人の情報をアプリ内で使用したい場合が多々あります。 これらの個人情報には iOS 6 より全体的に(一部は iOS 4.2 から)プライバシー制限がかかり、ユーザの許可無しに利用することができなくなりました。 これらの許可をユーザに要求するには、それらの情報を利用する機能を使用する時に勝手にアラートを表示してくれます。 プライバシー設定の確認 現状のユーザのプライバシー設定を知るためには、それらの機能を含むフレームワークを用いて確認します。 電話帳だったら AddressBook.framework の ABAddressBookGetAuthorizationStatus() 写真だったら AssetsLibrary.framework の [ALAssetsLibrary authorizationStatus]; だ
初OSS 週末にほぼ丸一日使って、初めて世に OSS というものを公開してみました。 JRNLocalNotificationCenter という iOS の Library で、 UILocalNotification を簡単に投稿しハンドリングするためのものです。 これを使うことでローカルプッシュを飛ばしたり、プッシュ通通知からのアプリ内ハンドリングやキャンセルが簡単にできるようになります。 この記事では JRNLocalNotificationCenter の簡単な使い方と、リリースまでにしたことなどを書きます。 使い方 投稿 UILocalNotification を投稿するのは以下のコードを書くだけです。 投稿する時に key を指定することで、アプリのプロセスが死んでしまった場合でもキャンセルが可能になります。 [[JRNLocalNotificationCenter defa
導入 iOS 開発者のみなさん、こんにちは。 このブログでは主にチュートリアルだったりフレームワークの紹介みたいなことを書いてきました。 そこで、たまには中級者向けのエントリを書いて「Xcode バリバリ使って、ビシバシ Objective-C 書いてますよ」アピールします。 iOS 開発をはじめて一通り Framework は理解したけど Xcode 使いこなせてる感が足りない方、夢にまで EXC_BAD_ACCESS が出てくる方に参考になる記事となればと思います。 といっても Xcode はマッシブな IDE なので、4つのデバッグツールに分けて「あれ、それ知らなかった!便利じゃん!」な方法を紹介します。 ブレークポイント デバッグには切っても切れない関係ですね。アプリを実行中に指定した行で処理を中断し、そこからステップ実行で細かいデバッグを可能にしてくれます。 ショートカットキー
久しぶりにテストを書く このブログも独自ドメインではてなブログに移行して読者数が一気に減ってしまいましたが、半年以上前のホッテントリぶりにブログ書きます。 前回は iOS 開発環境における CI 導入についてでしたが、今回はもう一度テストに戻って、その中でも iOS における Integration Test の実行方法について書きたいと思います。 Integration Test って? 日本語では良く結合テストと呼ばれていますが、iOS 開発ガイドなどでは単体テストをロジックテストと呼び、結合テストはアプリケーションテストと呼んでいます。 結合テストは UI テストとも呼ばれる場合もあったり、このブログで紹介した GHUnit でも最近では ViewController のテストができたりと境界は結構曖昧です。 僕の iOS におけるテストのイメージとしては、 Unit Test はコ
継続的インテグレーション 最近では iOS アプリでも単体テストを使った継続的インテグレーションが注目されています。 iOS 開発の単体テストについては、このブログでも取り扱いました。 Xcode 4 からはじめる Unit Testing GHUnitとOCMockでUnit Test効率化 一般的な CI 環境についての説明は、以下の本から抜粋するとこんな感じです。 Jenkins 作者: John Ferguson Smart,Sky株式会社玉川竜司出版社/メーカー: オライリージャパン発売日: 2012/02/22メディア: 大型本購入: 12人 クリック: 299回この商品を含むブログ (26件) を見る デプロイメントに至るまでの開発プロセスをスムーズにし、バグの検出とフィックスを素早く行えるようにし…(略) では iOS 開発における現実的な CI 環境を考えていきましょう。
また、テストを書く。 最近 iOS 界隈のテストのベストプラクティスについて調べているのですが、そこで目に留まった文章があるのでまずそれを紹介します。 How comfortable are you on a bike without a helmet? Writing code without tests is like riding a bike without a helmet. You might feel free and indestructible for now, but one day you’ll fall and it’s going to hurt. http://paulsolt.com/2010/11/iphone-unit-testing-explained-part-1/ ヘルメットを付けずに自転車を漕ぐのはとても快適ですね。でも、ふとしたある日に取り返しの
テストを書く。 最近、色々なプロジェクトで Jenkins をはじめとした継続的インテグレーション(CI)という単語を良く聞くようになりました。 僕自身といえば、iOS 開発では 「Xcode 4 から Unit Test 全面サポートがはじまった!」位しかキャッチアップできていませんでした。 なので開発中にデグレが発生したりすると、モデルから一つずつデバッグを繰り返して、気付いたら2時間経ってるみたいなことも多々ありました。 何してるんだろうみたいな感じになって、流石に危機感を覚えたので一旦手を止めて Xcode 開発に所謂今流行っているテスト手法を組み込もうと思いました。 今回は初歩の初歩ということで、Xcode に付属されている Unit Testing フレームワークである SenTestKit を用いた単体テスト環境の構築を行います。 全てを通して Xcode は 4.3 を使用
リッチなインターフェースにするために。 アプリを作る以上、ダウンロードしてもらったユーザには一回でも多くタップしてもらいたいですよね。 タップワーシィな UI を作るためには、現実のメタファーを反映させたコントロールを作る必要があります。 もちろん iOS SDK に付属している UIKit を用いるだけで十分な場合も多いのですが、今までにない独創的なアプリを作るためには、自分でイチから UI を作り込まなければいけない場合もあります。 しかし、 イチから作るとなると CoreAnimation や Quartz など今まであまり触ったことのないレイヤまで手を加えないといけないような気がして、腰が引けてしまったりすると思います。(自分がそうだっただけですが…) そこで「CoreAnimation とか良く分かってないけど、ちょっとリッチな UI にしてみたい」っていう人のために、簡単な画像
iPad Programming iPadアプリケーションの開発はiPhoneでのそれを応用できることも多数ありますが、変更しなくてはいけないものも多いです。 http://developer.apple.com/library/ios/documentation/userexperience/conceptual/mobilehig/MobileHIG.pdf 詳しくはiOS Human Interface Guidlineに書かれていますが、iPadの画面でiPhoneと同様のUIを提供するのはユーザーに対して優しくありません。 たとえばiPhoneではUITableViewを画面全体に表示しますが、それをiPadでも同じ事は良いことではありません。 画面の大きさを利用した適切なUIを提供するべきです。 iPad上での開発ではiPhone上では使えないクラスがいくつかあります。 Spl
Yahoo!地図 SDK for iPhone 先日公開されたYahoo!地図 SDK for iPhoneのチュートリアルを行いました。 このSDKはYMapKitとして配布されているので、それをプロジェクトに追加して使用します。 チュートリアルについての詳細は付属のドキュメントが分かりやすいので、そちらを参照しましょう。 以降Yahoo!地図 SDK for iPhoneのことを省略してYMapKitと呼びます。 このSDKを触ってみて、iOS SDK付属のMapKitとの違いなども含めて気がついた特徴を書きたいと思います。 また、ここに書いてあるYMapKitに関する感想などは個人の感想です。 個人的感想 MapKit互換がすごい ほぼiOS SDK付属フレームワークのMapKitフレームワークと互換しています。 戸惑うことはほとんどありません。クラス名なども基本的にYが頭に付くだけ
次のページ
このページを最初にブックマークしてみませんか?
『jarinosuke blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く