NSBlogger

意識高いブログ

SketchでAuto Layoutを考慮したデザインが作成できるプラグインが便利すぎる

SketchでAuto Layoutのような制約がつけられるプラグインの紹介

iOSアプリエンジニアのための面接質問集100選

iOS

iOSアプリエンジニアが面接時に聞かれそうな質問100選

iOS10対応でやろうと思っていることまとめ

はじめに いよいよiOS10がリリースされます。iOSアプリ開発者のみなさんは、運営しているアプリを新iOSに対応させなければなりません。例年通りだと翌年の2月あたりに新iOSに対応していないアプリは審査に出すことすらできなくなります。早めに対応しておき…

iOSのBeta版を調査する上での心構え

新しいiOSが登場する 毎年6月にWWDCというApple主催の開発者向けカンファレンスが開催されます。最近の傾向では、WWDCで次期iOSの情報が公開され、同年の9月に新型iPhone発売と同時に一般公開されます。一般ユーザは次期iOSリリースまでワクワクテカテカしな…

SwiftでStoryboardとXibをシンプルに呼び出す

StoryboardとXibの呼び出し方が面倒 コードからStoryboardやXibを呼びだそうとすると以下のような煩わしい書き方になります。 // load view from xib let sampleView = UINib(nibName: "SampleView", bundle: nil).instantiateWithOwner(self, options: nil)…

SwiftでNSDateを直感的に比較する

NSDateの比較 下記のようにしてNSDateの比較ができます。 d1.compare(d2) == .OrderedDescending compareというメソッドを使い、その結果が.OrderedSame、.OrderedDescending、.OrderedAscendingのどれに一致しているかを見て判断。いまいち直感的でない比較…

iOSアプリ開発に役立つWebサービス&ツールまとめ

iOS

はじめに iOSアプリ開発をしていて役立つWebサービスやツールがありますので備忘録としてまとめてみました。アプリ開発を始めるところからリリース後までを順番に書き並べています。ぜひiOSアプリ開発をしている方は参考にしてください。(Androidアプリ開発…

UIScrollView.contentOffsetの謎

UIScrollView.contentOffset UIKitに含まれるUIScrollViewのプロパティ「contentOffset」。 public class UIScrollView : UIView, NSCoding { public var contentOffset: CGPoint // default CGPointZero contentOffsetはどれだけスクロールしたかを表します…

iOSアプリ開発におけるイースターエッグのすすめ

はじめに この記事はiOS Advent Calendar 2015 - Qiita 19日目の記事です。 昨日はhachinobuさんのMVVMっぽい構成のデモアプリを公開してみるでした。 本日はイースターエッグについて。 イースターエッグとは簡単にいうと隠し機能のことです。余裕のある開…

iOS9対応でやろうと思っていることまとめ

iOS9がそろそろでます iOS9が今月半ばに登場するので、それに向けてiOS9対応をする必要があります。 例年の通りだと、来年にはiOS9SDKでビルドしていないものは審査すら出せなくなります。 iOS8対応済みのアプリに対してiOS9対応する際にやろうと思っている…

iOSアプリの64bit対応でやったことまとめ

2015年06月より64bit対応必須に そういえば今月から64bit対応が必須になりました。アプリ申請時に64bit対応していないと自動的にはじかれます。64bit対応なんてすぐ終わるやーと思っていたんですが、なんだかんだ2週間くらいかかってしまいました…。やったこ…

WWDC2015で発表されたiOS9 Search APIsまとめ

Search APIs iOS9から「Search APIs」というのが登場します。これはSpotlightで色んな情報を検索でき、Spotlightからアプリにスムーズに遷移できるものです。たとえば、「東京駅」と入力すると地図アプリが推奨され、タップすると現在地から東京駅までのルー…

iOS7以降でUITableViewCellをカスタマイズするときに気をつけること

iOS7以降のUITableViewCell UITableViewのセル単体を管理するためにUITableViewCellを使います。iOS7以降になると標準のUITableViewCellの左端に微妙な隙間ができました。UITableViewCellをカスタマイズせずにそのまま使う場合は問題ありませんが、カスタマ…

UIImageがベタ塗りされたときの対処法

UIImageがベタ塗りされる ちゃんと画像を指定しているのに、真っ白になったり真っ黒になったり画像が1色でベタ塗りされたことがありました。そういえば、iOS7対応したときにいろんな画像が青色にベタ塗りされた記憶が…。ということで調べてみた結果が下記で…

AutoLayoutとうまく付き合うコツ

AutoLayoutと仲良くなった ぜんぜん言うこと聞かないからAutoLayout大嫌いだったんですが、接し方を変えたら言うこと聞くようになったので、そのコツを紹介します。

Images.xcassetsでアプリのアイコンから光沢を消す

Images.xcassets Xcode5から画像を一元管理できる仕組みとしてImages.xcassetsが登場しました。9Sliceも簡単に設定できたり便利です。 アイコンに光沢が… Images.xcassetsに画像を全部移行した後、アプリをインストールするとなぜかアプリのアイコンに光沢が…

UIWebViewで特定のURLの末尾にパラメータをつける

UIWebViewでページを読み込む前のイベントをキャッチ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { //WebView内のロードする前に呼ばれる } UIWebV…

Watch Kit AppとiPhone App間でNSUserDefaultsを使ってデータ共有をする

Watch Kit AppとiPhone Appのデータは別管理 基本的にWatch Kit AppとiPhone Appがそれぞれ保持するデータ領域は別々に管理されています。したがって、下記の設定を行わずにNSUserDefaultsを使ってみると、Watch Kit Appで保存したデータはWatch Kit Appから…

WatchKit AppからiPhone Appを起動する方法

Watch App側の実装 [WKInterfaceController openParentApplication:@{} reply:^(NSDictionary *replyInfo, NSError *error) {}]; WKInterfaceControllerのopenParentApplication:reply:メソッドを使うことでiPhone側の親アプリを起動することができます。現…

iOS Simulatorの調子が悪くなったときにやること

iOS Simulatorが調子悪いとき たまにXcodeでアプリを実行したとき、iOS Simulatorにアプリのインストールができなくなることがあります。 「Unable to run app in Simulator. An error was encountered while running (Domain = LaunchServicesError, Code =…

AFNetworkingでメモリリークが起こったときの対処法

AFNetworking Objective C のライブラリで超ど定番なHttpClientです。いまさらながら使い始めました。AFNetworking/AFNetworkingAFNetworking/AFNetworking · GitHub メモリリーク AFNetworkingのラッパーを作って既存のAPIとの通信をすべて置き換えました。…

XCTestExpectationの「API violation」エラーの解決策

XCTestExpectation XCTestで非同期通信処理をテストしたいときに使えるクラスです。 XCTestExpectation *expectation = [self expectationWithDescription:@"successfully load image"]; [self.imageLoader getRequest:@"http://dummy.jpg/" success:^(UIIma…

UIGravityBehaviorとUICollisionBehaviorでバウンドする開閉メニューをつくる

UIGravityBehavior UIViewに重力を与えることができます。重力を与える方向や強さの調整も可能。 UICollisionBehavior UIViewが衝突したときの挙動を与えられます。ここのラインにきたらバウンドさせるという動きができます。 事前準備 @property (nonatomic…

UIViewをドラッグした後、元の位置に戻す

UIViewをドラッグさせる touchesBeganやtouchesMovedでもできそうですが、今回は「UIPanGestureRecognizer」を使ってみました。 self.snapView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width/2, self.view.bounds.size.hei…

UIPushBehaviorでViewに力を与える

UIPushBehavior iOS7から追加されたUIKit Dynamicsに含まれるビヘイビアのひとつです。 UIKit Dynamics には重力をあたえたり、ViewとViewが衝突した際の動作であったり、Viewが指定した位置に吸い付いたりするアニメーションを作ることができます。 ゲーム…

Swiftの文字列操作まとめ

空文字のチェック 「isEmpty」を使えばOK。空ならtrueが返ってきます。 var empty = "" var empty2 = String() //Empty. if empty.isEmpty{ println("Empty.") }else{ println("Not Empty.") } //Empty. if empty2.isEmpty{ println("Empty.") }else{ printl…

Swiftでは絵文字を変数として扱える

(スクショはNDA的にダメみたいなので消しました。また後日のっけます)公式ドキュメントにもありましたが、絵文字を変数として使えます。なんだか面白い。

Swiftの「Optional Value」の使い方

Optional Value Swiftのコードを読んでいると変数の横に「?」や「!」がついていることがあります。 この「?」がついているものが「Optional Value」になります。 Optional Value の特徴 Optional Valueは「nil」を許容します。 逆にOptional Valueでないもの…

Swiftの「タプル(Tuple)」で複数のオブジェクトをひとまとめにする

タプル(Tuple) タプルは複数のオブジェクトをまとめて扱えるものです。 タプルの例 let Blog = (20140608, "About tuple")「20140608」「"About touple"」をもつBlogオブジェクトができました。 Blogオブジェクトへのアクセスの仕方はこちら。 Blog.0 //20…

SwiftでArrayの中身を昇順・降順でソートする

Sort関数 「Sort」を使えば簡単に配列の中身を並び替えられます。 昇順 var numbers = [1,4,2,3,6,5] sort(numbers) numbers // [1,2,3,4,5,6]そのままsortで配列を引数に与えてあげればOK。 引数の中身がソートされ、上書きされます。 var strings = ["a", …

SwiftのArrayがもつ非破壊的メソッド「map」

var numbers:Array<Int> = [0,2,4,6,8] var doubleNumbers:Array<Int> = numbers.map({ (number:Int) -> Int in return number * 2 }) numbers doubleNumbers結果はこちら [0,2,4,6,8] [0,4,8,12,16]numbersから値をひとつずつとってきて2倍したものを返してます。 非</int></int>…