サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Appleイベント
jarinosuke.hatenablog.com
導入 iOS 開発者のみなさん、こんにちは。 このブログでは主にチュートリアルだったりフレームワークの紹介みたいなことを書いてきました。 そこで、たまには中級者向けのエントリを書いて「Xcode バリバリ使って、ビシバシ Objective-C 書いてますよ」アピールします。 iOS 開発をはじめて一通り Framework は理解したけど Xcode 使いこなせてる感が足りない方、夢にまで EXC_BAD_ACCESS が出てくる方に参考になる記事となればと思います。 といっても Xcode はマッシブな IDE なので、4つのデバッグツールに分けて「あれ、それ知らなかった!便利じゃん!」な方法を紹介します。 ブレークポイント デバッグには切っても切れない関係ですね。アプリを実行中に指定した行で処理を中断し、そこからステップ実行で細かいデバッグを可能にしてくれます。 ショートカットキー
継続的インテグレーション 最近では iOS アプリでも単体テストを使った継続的インテグレーションが注目されています。 iOS 開発の単体テストについては、このブログでも取り扱いました。 Xcode 4 からはじめる Unit Testing GHUnitとOCMockでUnit Test効率化 一般的な CI 環境についての説明は、以下の本から抜粋するとこんな感じです。 Jenkins 作者: John Ferguson Smart,Sky株式会社玉川竜司出版社/メーカー: オライリージャパン発売日: 2012/02/22メディア: 大型本購入: 12人 クリック: 299回この商品を含むブログ (26件) を見る デプロイメントに至るまでの開発プロセスをスムーズにし、バグの検出とフィックスを素早く行えるようにし…(略) では iOS 開発における現実的な CI 環境を考えていきましょう。
ヒトは、辞める— Naoki Ishikawa (@jarinosuke) 2013, 10月 11 2010年4月新卒入社以来、約3年半勤めたヤフー株式会社を退職しました。 いままで 就職活動当時を思い出してみると右も左も分からない状態で、エンジニアとしてスタート地点にも立てていませんでした。 それでも趣味で齧った程度の iOS 開発経験と、少しばかりの虚栄心を交え「ソーシャルなことをしたいです!アプリ作りたいです!」と採用面接時に言った事を覚えています。 今思えば大ボラ吹きも良い所です。 幸いにも縁があってヤフーに入社することができ、入社前の自分では想像すらできない程の、以下のような貴重な経験をさせて頂きました。 Yahoo!メッセンジャーの Mac クライアント追加開発 新規メッセージングアプリ「Circle」 iOS アプリ開発 KakaoTalk 日本向け機能の iOS アプリ開
今こそ 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 を用いたレイアウトに関するユースケース毎に簡潔に書いていますので、 「それ知ってるわ」みたいなのがあったら適宜読み飛ば
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
コーディング規約 プログラミングを行う上でコーディング規約は一つの指針になり、 定める事でそれをもとにコードレビューなどの場で指摘などがし易くなります。 Objective-C で、しかも公開されているだけでも、ざっと探してみてこれだけの量があります。 企業 Apple Google Github NYTimes Adium Bitbucket RobotsAndPencils 開発者 Raywenderlich Marcus Zarra Sam Soffes CocoaDevCentral Luke Redpath これだけの量のコーディング規約があることからも分かりますが、 それぞれの中で定められている事柄には、結構なばらつきがあるものも多いです。 そのような環境の中で、以下のような事象が発生してしまうのも事実です。 コーディング規約を定めたものの、守れないコードが生まれてしまう コー
Swift での iOS アプリ開発 徐々にですが、でも確実に色々な場面で Swift のコードを見る機会が増えてきたことを実感します。 iOS の設計思想など大枠の部分では Objective-C での知見は生きてきます。 しかし Swift の言語仕様についても知っておかないと ついつい低きに流れて Objective-C ぽい Swift になってしまいがちです。 Swift のコードレビュー そこで Swift らしく Swift の良さを活かしたコードにするためにコードレビューの話になるわけです。 iOS 開発全般におけるコードレビューについては以下のブログにまとまっているので省きます。 iOSアプリケーション開発のコードレビューで気をつけていること - ninjinkun's diary また本記事を書くにあたって Swift コードレビューを調べていて良いものがまとまっていた
self.view iOS 開発において、UIViewController の view の振る舞いは一番理解しておきたい点の一つです。 今回はその view に対して、メモリ管理とレイアウトの2つの視点を交えてアプローチを行い、 UIViewController の subclass を作成する上で、 UIViewController の各メソッドにどんな処理を書くべきか、そして何を書くべきでないか を説明出来ればなと思っています。 iOS 6 以降からを対象として考えていますので、 iOS 5 以前は取り扱いません。 self.view の振る舞い 扱いを学ぶには、まず対象の振る舞いを把握する事からです。 ライフサイクルとレイアウトサイクルの2点から簡単に復習します。 self.view のライフサイクル UIViewController の view がどのようなタイミングで生成され
ユースケース CADisplayLink を実際に使う例と共にどんなクラスなのか簡単に紹介します。 例えば現在時刻を表示する場合。 画面に表示されている日時を定期的に更新する必要があります。 そのような場合に NSTimer で 0.01 秒など適当なインターバルを設定して更新、みたいなこと実装した経験ありませんか? 僕はあります。 それを解決するための表示されているビューを更新するためのイベントを取得するためのクラス、それが CADisplayLink です。 最近 facebook が OSS 化した pop や、長年 iOS の 2D ゲームフレームワークとして親しまれている cocos2d でも、もちろん使われていました。 facebook/pop cocos2d/cocos2d-iphone CADisplayLink の使い方 CADisplayLink を以下の様にしてセット
テストを書く。 最近、色々なプロジェクトで Jenkins をはじめとした継続的インテグレーション(CI)という単語を良く聞くようになりました。 僕自身といえば、iOS 開発では 「Xcode 4 から Unit Test 全面サポートがはじまった!」位しかキャッチアップできていませんでした。 なので開発中にデグレが発生したりすると、モデルから一つずつデバッグを繰り返して、気付いたら2時間経ってるみたいなことも多々ありました。 何してるんだろうみたいな感じになって、流石に危機感を覚えたので一旦手を止めて Xcode 開発に所謂今流行っているテスト手法を組み込もうと思いました。 今回は初歩の初歩ということで、Xcode に付属されている Unit Testing フレームワークである SenTestKit を用いた単体テスト環境の構築を行います。 全てを通して Xcode は 4.3 を使用
はじめに ここ1,2ヶ月、cocos2dというフレームワークでゲームの開発をしています。 ただあまり日本語のドキュメントが整っておらず、英語のwikiやウェブサイトを色々巡回していました。 なかなかversionなどの関係でクラス名が変わっていて、つまらない所でハマったりなど、無駄な時間がかかったりしてしまいました。 そんななかとても良い入門記事を見つけ、内容的に飛び抜けて分かりやすく素晴らしい記事だったので、つたない英語で翻訳させてもらいました。 ボリューム的にはかなり多いのですが、「ゲーム制作をしてみたい」、という気持ちだけあればこなせるように設計されているチュートリアルなので興味がある方は是非最後まで読んで欲しいです。 以下 How To Make A Simple iPhone Game With Cocos2D Tutorialの邦訳記事です。 How To Make A Sim
また、テストを書く。 最近 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/ ヘルメットを付けずに自転車を漕ぐのはとても快適ですね。でも、ふとしたある日に取り返しの
導入 最近、最近ふと 詳解 Objective-C 2.0 初版 を手に取る(電子化しているので実際に手に取るのは Kindle ですが)機会がありました。 もちろん最新の3版も持っているのですが、初版と比べて読み進めてみると色んな事を振り返る事ができて楽しいんですね、もう歴史です。 言うまでもなく、Objective-C は僕が関わってきた約5年近くだけでも凄まじい発展を遂げています。 コミュニティも WWDC や Developer Forum を初めとして、最近では CocoaPods など 3rd party のものまで活発になっています。 そのような環境の中でも、たまにそれらの範囲外では数年前の「構造」のままのコードを見る事があったりもします。 「構造」と少々分かり辛く書いているのは、以下のような「コーディング規約」を超えた考え方だと思ったので分けて書いています。 もちろんどちら
コードを用いてのレイアウト処理 iOS 6 から Auto Layout が導入され、レイアウトに関するコードを書く機会が ずいぶんと減ってきていると思いつつもなかなか減らない今日この頃。 最後の砦となるのはやはり以下の2メソッドでしょう。 //UIView - (void)layoutSubviews; //UIViewController - (void)viewDidLayoutSubviews; 上記2メソッド内でコードを用いて様々なレイアウトを行うわけですが、 今回はその中でのコーディング作法として CGGeometry をもっと使って読みやすくできるよ! という事を知って欲しくて書きました。 CGGeometry CGGeometry というと聞き慣れないですが、CGRect や CGPoint, CGSize などの構造体と、それを取り巻くマクロ関数を含めた総称です。 CGG
はじめに cocos2d上でゲームを創っていくなかでハイスコアなどのユーザ情報をWeb上に投稿させたいこと、あると思います。 これを行うことで、ユーザは他者から「おまえ、すごいな!」などと賞賛され承認欲求が満たされ、ユーザは更にゲームを楽しんでくれると思います。 また、デベロッパーもWeb上にプロダクトの情報が広がることで、様々な人の目に付く可能性が広がると思います。 はい。 Objective-Cでは一般的に良く知られている(と思われる)Twitter-OAuth-iPhoneというライブラリがあります。 ということで、それを使ってcocos2d上でTwitterにpostするための簡単なチュートリアルのようなものを行っていきましょう! 準備 アプリケーション登録 まずは情報をpostするために、Twitter上でアプリケーションの登録を行う必要があります。 http://dev.twi
今回は、頭の弱い自分ではすぐに分からなくなってしまうので、PILライブラリの使い方について、私が勉強して行った足跡をメモしておきます。 PILとは何か? 読み方は恐らくピルですが、あのピルではありません。略称です。 PIL = Python Image Library Pythonで画像の生成や、イラストの加工を行うためのオープンソースライブラリです。 これを使うことで、自分でPython作ったデータ等を、いちいちcsv形式等でexcelに渡して、グラフ表示なんて面倒くさい事をしないで済みそうです。 まずはインストール インストールについては以下のサイトを参照して私もできたので、みなさんもできるはずです!(単にまとめるのが面倒) Pythonのライブラリインストール ではインストールできているか、確認してみましょう。 このように入力しても何事もエラーが起きなければ大丈夫です。エラーがでた人
第一回 一回目の今回はbox2dについての自分自身での復習も含め、テンプレートのソースを読んでいきたいと思います。 ただ! このテンプレートが、というかBox2dの仕様なのかよく知りませんが、僕は若干ソースを追いにくく全体を把握できませんでした。 なので、今まで使ってきましたがもう一度Box2dのコードを読み進めながら、それを改良していきたいと思います。Chipmunkは今回は無しです。 また、今回のソースは以下に上げてあるので、pullして照らし合わせながら読んで頂けると分かりやすいと思います。 git clone https://github.com/jarinosuke/KuwagataFallsおかしな所などありましたら、githubでコメント頂けると嬉しいです。 まずはWorld box2dは現実と同じように物理の力が働きます。なので「世界」を作らないといけません。 HelloW
久しぶりにテストを書く このブログも独自ドメインではてなブログに移行して読者数が一気に減ってしまいましたが、半年以上前のホッテントリぶりにブログ書きます。 前回は iOS 開発環境における CI 導入についてでしたが、今回はもう一度テストに戻って、その中でも iOS における Integration Test の実行方法について書きたいと思います。 Integration Test って? 日本語では良く結合テストと呼ばれていますが、iOS 開発ガイドなどでは単体テストをロジックテストと呼び、結合テストはアプリケーションテストと呼んでいます。 結合テストは UI テストとも呼ばれる場合もあったり、このブログで紹介した GHUnit でも最近では ViewController のテストができたりと境界は結構曖昧です。 僕の iOS におけるテストのイメージとしては、 Unit Test はコ
以下に移行しました blog.jarinosuke.com Intro to TensorFlow for Deep Learning Udacity の Free Course で Intro to TensorFlow for Deep Learning を受講した 空き時間などで少しずつ進めて、だいたい1ヶ月ちょっとで一通り終えられたと思う この記事は受講した上での感想と、忘れないために受講後にわかったこと/わからないことを挙げている その後に簡単に自分の目線でのコースの説明も付けておいた 感想 コースの全体的な構成としては、数分の説明用のビデオ(Youtube)を見た後に Colab と呼ばれる Google が提供している Python のオンラインの実行環境で課題を行うという流れだった 以前受講した Coursera の Machine Learning というコースは Oct
リッチなインターフェースにするために。 アプリを作る以上、ダウンロードしてもらったユーザには一回でも多くタップしてもらいたいですよね。 タップワーシィな UI を作るためには、現実のメタファーを反映させたコントロールを作る必要があります。 もちろん iOS SDK に付属している UIKit を用いるだけで十分な場合も多いのですが、今までにない独創的なアプリを作るためには、自分でイチから UI を作り込まなければいけない場合もあります。 しかし、 イチから作るとなると CoreAnimation や Quartz など今まであまり触ったことのないレイヤまで手を加えないといけないような気がして、腰が引けてしまったりすると思います。(自分がそうだっただけですが…) そこで「CoreAnimation とか良く分かってないけど、ちょっとリッチな UI にしてみたい」っていう人のために、簡単な画像
Thanks to Ray!!! 今回の記事も大まかな流れや、画像などはRayの記事「How To Create Buttons in Cocos2D: Simple, Radio, and Toggle」を参考に書かせてもらいました。 はじめに cocos2dでゲームを作ってる最中、「これボタンみたいなの必要じゃん」って時ありますよね? このチュートリアルは手取り足取りcocos2dでのボタンの作り方を説明していきます。 はじめは単純なボタンの作成からはじまって、トグルボタンであったり最後はラジオボタンも作っていきます。 もしあなたがcocos2dを用いてiPhone上で至極シンプルなゲーム作成チュートリアルをこなしていないのであれば、そちらを先にやるのをお薦めします。 始める前に、もしかしたらあなたが疑問に持っている一つの事についてお答えしたいと思います。 ずばり、それは「別にcoco
設定アプリへの遷移 ローカル通知や位置情報の Always と WhenInUse の二種類の認証、 HealthKit など、 iOS 8 では iOS 7 よりも多くのユーザの許可が必要な情報が増えたように思います。 しかし、ユーザに初回のアラートで拒否されてしまうと iOS 7 まででは アプリ自身が設定画面へ遷移させて再度許可してもらう方法はありませんでした。 設定アプリへ非公開のカスタムスキームを用いて遷移させるという手法もありましたが。 iOS 8 での設定画面への遷移方法 iOS 8 ではアプリが何かしらのカスタマイズ設定を保持している場合、 設定アプリ内にアプリ毎の設定ルートビューができました。 そのビューに以下のメソッドを実行する事で遷移する事が出来ます。 [[UIApplication sharedApplication] openURL:[NSURL URLWithS
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 などを用いて実装することが一般的です。 そのような環境下のなかで、ペーストボードのコピーイベントを元にした
コンバージョン計測 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 が
potatotips に参加しました #potatotips というクックパッドで開催された iOS / Android の tips 共有会に昨日参加してきました。 普通の勉強会とは少し毛色が違い、参加者全員が5分間の tips を発表を行うという形式で、皆さん主体的に会に関わる事ができるような仕組みになっていたのかなと後から感じました。 僕も以下の資料を発表させていただきました。 発展 上記のスライドの最後に発展編として単純にアプリアイコンを出し分けるのではなく、既存のアイコンに対してアプリケーションの情報をオーバーレイさせて動的に作成できる事例を紹介しました。 しかし時間の関係で具体的なスクリプトの紹介は省いてしまっていたので、この記事で紹介します。 紹介 アプリの情報をアイコンにオーバーレイさせる方法は具体的に以下のリンクで紹介されています。 Overlaying applicat
はじめに 突然ですが自分の描いた絵を動かしてみたい、という衝動に駆られたことはみなさんあると思います。 それを実現するための素晴らしいクラス群がcocos2dにはあります。 それらを使って自分の描いた絵に簡単なアニメーションを付けてみたので、ブログに書きました。 まずは素材の準備 絵 僕は最近使っているCS4 Illustratorを使って描きました。まだまだ宝の持ち腐れ感がすごいですね。 ちなみに今回扱うキャラクターは「卵男」という名前です。 アニメーションに使うだけの素材を用意しましょう。 iPhoneの画面サイズ(320 * 480)以下ならサイズは適当で大丈夫です。でも、各素材でのサイズは統一した方が楽かもしれません。 また画像の名前は後で重要になるので、画像の名前は統一して、アニメーションさせたい順に名前の後に1から順番に数字を振りましょう。 もし、少し気のおかしな人で僕の画像を
なぜ Static Library なのか 全てのソースコードを GitHub にアップロードし、Cocoapods に podspec をマージしてもらって、 他のデベロッパー達とのコラボレーションを楽しむのが現在の iOS 界隈の Social Coding の主流になっているのかなと思います。 しかし、以下のような要因などによっては上記のようなアクションを取り辛い場合があると思います。 コード自体は自由に使ってもらいたいが、実装ファイルは見られたくない ファイルが山ほどあるので、それらを使いやすくパッケージ化したうえで共有したい そんなときに有効な手段の一つとなるのが Static Library です。 Static Library は指定した header file とコンパイル済みの archive file (.a 拡張子)がインターフェースとなります。 そのため、実装部分が
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
tintColor iOS 4 以前は tintColor プロパティは UIToolBar など、限られたクラスにのみ提供されていました。 UIToolBar - tintColor | iOS Developer Library iOS 5 になると UIAppearance が提供され、他にもたくさんの UIView のサブクラスが tintColor プロパティを持つようになりました。 iOS 7 では遂に UIView 自身が tintColor プロパティを持つようになり、アプリケーション全体への tintColor の反映が可能なりました。 どういうことかというと、値を明示的に指定しない限り tintColor プロパティは親ビューの値を受け継ぐので、 たとえば keyWindow の tintColor プロパティを設定するだけでアプリ全体に行き渡る、ということです。 UI
次のページ
このページを最初にブックマークしてみませんか?
『jarinosuke blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く