読者です 読者をやめる 読者になる 読者になる

NSBlogger

意識高いブログ

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

sketch

f:id:Kamekiti:20170103162213j:plain

Auto Layout問題

iOSアプリを作成する際、なにかしらの方法でデザインをデザイナーから共有してもらうことがあります。
画像ファイルでもらったり、Sketchファイルでもらったり。
一部ではデザイナーがStoryboardを直接修正することも。

デザイナーとのやりとりで一番ネックとなるのが画面サイズが変わったときのデザインです。
iPhone 7の大きさをベースとしたデザインを1枚いただいたとしても、どこを可変にしてどこを固定にするか曖昧です。別途なにかしらの形で可変な部分や固定する部分を指定してもらってもよいですが、なかなか手間ですよね。
全画面サイズのデザインを作っても良いですが、デザイナーの負担が増すばかり。
これらの問題を解決してくれるのがAuto Layout for Sketchというプラグイン
※ちなみにFluid for Sketchというプラグインもあります。

続きを読む

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

iOS

f:id:Kamekiti:20161224033950p:plain

はじめに

こちらはiOS その2 Advent Calendar 2016の12月24日の記事です。
iOSアプリエンジニアが採用面接時に聞かれることってなんだろうと思い、ひねり出した100個の質問です。
ゼロベースで考えるのはさすがに困難だったので、以下に挙げられている記事をだいぶ参考にしました。

これらで紹介されているものは、実際にコードを見て応えるものもありますのでぜひご参考ください。
また、他の言語や環境に関する面接質問集も載っているので、興味のある方は覗いてみてはいかがでしょうか。

上記の参考文献をもとに、オリジナルも含めた面接質問集をジャンルごとに分けてまとめました。
Answerは自分自身の回答もありますし、それっぽいことを載せているものもあります。
詳細を書きすぎると長文になるので、できるだけ簡潔にまとめました。
質問に対して関連してそうな記事やサイトも載せていますのでご参考ください。

ただのiOSクイズになっちゃったなぁと感じてます……。
回答に大きな間違いがありましたら、こっそり教えてください。

続きを読む

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

iOS10 iOS swift xcode

f:id:Kamekiti:20160911192718p:plain

はじめに

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

iOS10対応って何をするの?

対応手順

まず「iOS10対応」についてですが、以下のような手順で対応します。

  1. Xcode 8をインストール
  2. 既存のプロジェクトをXcode 8で開く
  3. ビルドする
  4. エラーやクラッシュを修正する
  5. アプリをリリース

Xcode 8はまだ正式にはリリースされていません。iOS10のリリースと同時にアップデートがくるはずです。その時まで待っていてもよいですが、はやく対応したくてたまらない方はXcode 8 betaをインストールしましょう。先日書いた下記の記事も参考にしてみてください。
nsblogger.hatenablog.com

Build Settingsをチェック

Xcode 8でビルドする際に、「PROJECT」→「Build Settings」→「Base SDK」が「Latest iOS (iOS10.0)」になっていればOKです。この状態でビルドすればiOS10に対応したことになります。体感ですが、例年と比べるとすんなりビルドが通るのではないかと思います。
※Swiftでコードを書いている方は後述の「Swift 3.0に対応する」をご参考ください。
f:id:Kamekiti:20160911163330p:plain
その他、iOS10で登場した新機能にも素早く対応しておくと、Appleに気に入られるかもしれません。
では、以下にiOS10対応で最低限やるべきことと、+αとして新機能への対応について紹介します。

続きを読む

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

iOS xcode

新しいiOSが登場する

f:id:Kamekiti:20160813112319j:plain
毎年6月にWWDCというApple主催の開発者向けカンファレンスが開催されます。最近の傾向では、WWDCで次期iOSの情報が公開され、同年の9月に新型iPhone発売と同時に一般公開されます。一般ユーザは次期iOSリリースまでワクワクテカテカしながら待っていればよいのですが、iOSアプリ開発者にとっては非常に重要な期間となります。次期iOSのBeta版が公開されるので、その影響調査をする必要があるのです。何から始めてどうすればよいのか、以下に紹介しますね。

iOSのBeta版について

次期iOSは夏前に開催されるWWDCにて発表され、その秋に一般公開されます。その間、Appleは開発者に向けて定期的にBeta版のリリースを行っています。

バージョン 公開日
iOS10 beta1 2016年06月14日
iOS10 beta2 2016年07月06日
iOS10 beta3 2016年07月19日
iOS10 beta4 2016年08月02日
iOS10 beta5 2016年08月10日

上記のように、だいたい2週間おきに次のバージョンが公開されます。正式リリースされる1週間ほど前にGM(Gold Master)版と呼ばれる最終Beta版が公開されます。

また、iOSのBeta版が新しくなると同時に、iOSアプリ開発に必要なIDEXcode」のBeta版も公開されます。iOSXcodeはセットで新しくなります。

余談ですが、開発者向けに公開されるBeta版とは異なる「Public Beta版」と呼ばれるものも存在します。Beta版はApple Developer Programに参加しているユーザのみに提供されますが、Public Beta版は一般ユーザも利用可能です。Beta版より1周期ほど遅れての公開になりますが、次期iOSを一足早く試したい方はぜひ利用してみましょう。利用する前にバックアップは必須ですよ。

続きを読む

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

swift

StoryboardとXibの呼び出し方が面倒

コードからStoryboardやXibを呼びだそうとすると以下のような煩わしい書き方になります。

// load view from xib
let sampleView = UINib(nibName: "SampleView", bundle: nil).instantiateWithOwner(self, options: nil)[0] as! SampleView

// load view controlelr from storyboard
let storyboard = UIStoryboard(name: "Sample", bundle: nil)
let sampleViewController = storyboard.instantiateViewControllerWithIdentifier("SampleViewController") as! SampleViewController

まず何が煩わしいかというと、長ったらしくて覚えてられんということ。そしてas!で強制アンラップしているので、Swift的にあまりよろしくありません。as?にしてif let, guard let elseで書くのもありですが、毎回書くのは面倒です。

続きを読む

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

swift

NSDateの比較

下記のようにしてNSDateの比較ができます。

d1.compare(d2) == .OrderedDescending

compareというメソッドを使い、その結果が.OrderedSame、.OrderedDescending、.OrderedAscendingのどれに一致しているかを見て判断。いまいち直感的でない比較でよく混乱します。

<, >, == で比較できるようにする

下記のように「<」「>」「==」を拡張すると、直感的に比較ができるようになります。

func == (d1:NSDate, d2:NSDate) -> Bool {
    return d1.compare(d2) == .OrderedSame
}

func > (d1:NSDate, d2:NSDate) -> Bool {
    return d1.compare(d2) == .OrderedDescending
}

func < (d1:NSDate, d2:NSDate) -> Bool {
    return d1.compare(d2) == .OrderedAscending
}

func <= (d1:NSDate, d2:NSDate) -> Bool {
    return d1 < d2 || d1 == d2
}

func >= (d1:NSDate, d2:NSDate) -> Bool {
    return d1 > d2 || d1 == d2
}

使い方はこんなかんじ。

let now = NSDate()
let tomorrow = NSDate(timeIntervalSinceNow: 60 * 60 * 24)
let yesterday = NSDate(timeIntervalSinceNow: -60 * 60 * 24)

if now < tomorrow {
    print(true)
}

if yesterday <= now {
    print(true)
}

普通の文字列比較のように、右辺と左辺にNSDateのオブジェクトを指定してやればOK。ぱっと見ただけでどういう条件かも分かりやすくて便利かと。

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

iOS

はじめに

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

続きを読む