NSBlogger

意識高いブログ

iOSアプリ新規開発のノウハウ

仕事で何度か新規でiOSアプリを開発することがありました。チームやそのときの状況に応じて柔軟に対応するのがベストですが、その中でもやっておいてよかったなぁと感じたことについて紹介します。 iOSアプリの開発以外でも応用できる内容かも。

iOS11およびiPhone X対応でやろうと思っていることまとめ

圧倒的な進化、驚異的な飛躍 ついにiOS11がリリースされましたね。例年のごとくiOSアプリ開発者はiOS11への対応をしなければなりません。 Swift 4も同梱されているのでそちらの対応もちらほら。そして今年はiPhone X対応という特典付き! iOS11へのアップデ…

RxMoya + Codableで実現するリアクティブなAPIクライアント

Moya 最近MoyaというAPIクライアントを使っています。なかなか良さげで使い勝手も悪くありません。 github.comAlamofireベースで作られており、Moyaを入れるだけでいい感じのAPIクライアントがすぐに手に入ります。 また、Rx拡張もされているのでRxSwiftなど…

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的にダメみたいなので消しました。また後日のっけます)公式ドキュメントにもありましたが、絵文字を変数として使えます。なんだか面白い。