タグ

ブックマーク / blog.ishkawa.org (12)

  • Storyboardとの付き合い方 2018

    Aug 12, 2018 少し前に、自分のStoryboardの使い方をツイートしたら割と反応があったので、改めてまとめてみようと思います。これまで何年かiOSアプリの開発をしてきて、Storyboardとの付き合い方は何度も変わりました。なので、今回紹介するものはあくまで2018年現在のもので、来年には変わっているかもしれません。 説明のイメージを掴みやすくするため、画面の例を用意しました。左が編集時のStoryboardで、右が実行時のiOSシミュレーターです。具体的なトピックが出た時に、この例を説明に使うことがあります。 記事の最後にこれが動作するサンプルコードも用意しましたので、興味があればどうぞ。 Storyboardを使う目的 以下の2つを重視して、Storyboardを選択しています。 動作確認に掛かる時間を短縮する 成果物の構造を把握しやすくする ただし、Storyboar

    Storyboardとの付き合い方 2018
  • APIKit: レスポンスに応じた独自のエラーを投げる

    { "message": "Validation Failed", "errors": [ { "resource": "Issue", "field": "title", "code": "missing_field" } ] } 今回は、このようなエラーをリクエストの呼び出し側に伝える方法を説明します。なお、この説明はDefining Request Protocol for Web Serviceのエラーの扱いをもう少し詳しく説明したものとなります。 サービス用のリクエストプロトコル APIKitでは、特定のサービス(Web API)向けのリクエストの特徴をまとめるために、サービス用のリクエストプロトコルを定義します。今回はGitHub APIを例としているので、baseURLのデフォルト値がhttps://api.github.comとなっているGitHubRequestを定義しま

    APIKit: レスポンスに応じた独自のエラーを投げる
    tokorom
    tokorom 2016/05/27
  • パターンマッチングでprepareForSegue(_:)のネストを浅くする

    Nov 14, 2015 1年前に書いたprepareForSegue(_:)がoptional bindingとtype castingの地獄になっていたので、パターンマッチングで描き直してみました。確かにネストは浅くなりましたが、これはこれで地獄なのかもしれません。 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { switch (segue.identifier, segue.destinationViewController, sender) { case ("Web"?, let viewController as WebViewController, let cell as UITableViewCell) where cell == feedbackCell: viewC

    パターンマッチングでprepareForSegue(_:)のネストを浅くする
    tokorom
    tokorom 2015/11/16
  • Xcode 7のXCTAssertEqualとOptional

    Oct 17, 2015 Xcode 6までのXCTAssertEqualは<T: Equatable>(expression1: T, expression2: T)という引数になっていました。一見するとジェネリックで良い感じに見えるんですが、実際には片方がOptionalの場合に型が一致しなくて面倒という問題がありました。 http://blog.ishkawa.org/2015/03/02/1425257147/ Xcode 7ではそれが改善されており、XCTAssertEqualの引数は<T: Equatable>(expression1: T?, expression2: T?)というものになりました。これにより、unwrapせずにTとT?が比較できるようになりました。

    Xcode 7のXCTAssertEqualとOptional
    tokorom
    tokorom 2015/10/17
  • Swiftで書いたコマンドラインツールをHomebrewでインストールできるようにする

    Feb 18, 2015 toolという名前のコマンドラインツールをつくるとします。 Makefile ビルドターゲットのINSTALL_PATHは/usr/local/binとします。 DSTROOT=/tmp/tool.dst prefix_install: xcodebuild install -scheme tool DSTROOT=$(DSTROOT) mkdir -p $(PREFIX)/bin cp -f $(DSTROOT)/usr/local/bin/tool $(PREFIX)/bin/ class Tool < Formula homepage "https://github.com/yourname/tool" version "0.0.1" sha1 "0123456789abcdef0123456789abcdef01234567" url "https://g

    Swiftで書いたコマンドラインツールをHomebrewでインストールできるようにする
  • !を避けたいときは@noreturnが使えるかもしれない

    May 7, 2015 Swiftに慣れてくると!を避けたくなりますが、!を書きたくなるようなケースもあります。 func loadSignInViewController() -> SignInViewController { let storyboard = UIStoryboard(name: "SignIn", bundle: nil) let viewController = storyboard.instantiateInitialViewController() as! SignInViewController return viewController } func loadSignInViewController() -> SignInViewController { let storyboard = UIStoryboard(name: "SignIn", bundle

    !を避けたいときは@noreturnが使えるかもしれない
    tokorom
    tokorom 2015/05/13
    ++
  • Circle CIでiOSアプリのリリース作業を自動化

    Jan 7, 2015 ※ 現在(2015/01/07)Circle CIのiOSビルドはベータとなっているため、利用するにはサポートへの連絡が必要です。 できること GitHubへのコミット毎に以下のタスクを実行します。 ユニットテストの実行 ipaの作成 ipaのバリデーション CrittercismにdSYMをアップロード Circle CIにテストレポートを出力 iTunes Connectにipaをアップロード これらの作業を自動化すると、masterブランチにgit pushするだけでテストが通ったアプリがiTunes Connectに登録され、 TestFlight(新)からダウンロードできるようになり、そのままApp Storeに申請することまで出来るようになります。 Circle CIのメリット 無料(1 container) 見た目がきれい private reposi

    Circle CIでiOSアプリのリリース作業を自動化
  • Carthage: Swift対応の新しいライブラリ管理

    Nov 20, 2014 iOS, OSXで利用できるライブラリ管理ツールといえばCocoaPodsが有名ですが、 それとはまた違った方針のCarthageというライブラリ管理ツールがリリースされました。 GitHubのデベロッパーを中心としたチームで開発が進められているようです。 https://github.com/Carthage/Carthage インストール方法 Releasesからpkgをダウンロードして、インストーラーを実行します。 使い方 Cartfileを書く carthage updateを実行する Carthage.buildに作成された.frameworkをXcodeに追加する Cartfileではgithub, gitの2種類のキーワードが利用でき、以下のように書きます。 サポート対象 Carthageはdynamic frameworkのみをサポートするため、C

    Carthage: Swift対応の新しいライブラリ管理
    tokorom
    tokorom 2014/11/22
    Swiftプロジェクトで導入検討
  • gcovrでコードカバレッジを確認

    手元ではCoverStoryを使っていたのですが、なんか使いづらかったのでgcovrを使い始めました。 gcovr 3.1にはhtml出力がついていて、以下のようなコマンドでレポートを出力してくれます。 1 2 3 4 5 6 7 gcovr \ -r . \ --html --html-detail \ -o build/coverage.html \ -e Pods \ -e UnitTests \ -e ".*\.h" 出力されるHTMLは以下のようになります。 ファイルを選択すると各行の状況を確認できます。

    gcovrでコードカバレッジを確認
  • 頑張ってOCLintを使ってみた結果 - blog.ishkawa.org

    意識が高まり、OCLintを使ってみました。 手順 OCLintの公式のドキュメントを頑張って読んでも使い方はわかるのですが、 以下のリンク”Give a try”という項目に従うと手っ取り早く試せます。 Integrating OCLint in Xcode 結果 ISRefreshControlで試しました。 ご覧の通り、たくさん怒られています。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 Pods/ISMethodSwizzling/ISMethodSwizzling/ISMethodSwizzling.m:9:1: long line P3 Line with 138 characters exce

    tokorom
    tokorom 2013/06/12
  • GHUnitをやめてSenTestingKitを使う理由 - blog.ishkawa.org

    ※ はじめにことわっておきますが、GHUnitを批判したくて書いているわけではなく、 SenTestingKitが意外と使えたということを書きたくて書いています。 – 特定のテストがターミナルから実行できないという問題に遭遇した。 GHUnitは新しいXcodeやiOS SDKが出たときに対応されるまでにラグがある。 やっぱりcommand+Uでマメにテストを実行したい。 SenTestingKitではできないと思い込んでいたことが実はできた。 以下、誤解していたことについて書きます。 SenTestingKitへの誤解 実機ではテストを実行できない。 UIKitが絡むテストは書けない。 非同期のテストが書きづらい。 実機での実行 SenTestingKitで実行できるテストにはLogic Unit TestsとApplication Unit Testsがあります。 前者は実機での実

  • iOSのライブラリにTravis CIを導入する - blog.ishkawa.org

    最近、Travis CIがiOSのビルドに対応したようです。 Introducing Mac, iOS and RubyMotion Testing on Travis CI なので、早速拙作のISRefreshControlに導入してみました。 ISRefreshControl 導入手順 驚くほど簡単で、基的には以下の2つだけで導入完了となります。 .travis.ymlにlanguage: objective-cと書く Travis CI上でリポジトリを選択する デフォルトのビルドスクリプトにはobjc-build-scriptsが採用されているようです。 もちろんカスタマイズも可能で、ISRefreshControlではMakefileを書いてそちらを使っています。 依存関係はPodfileを書いておけば自動的に解決されます。 CocoaPods以外の方法も.travis.

    tokorom
    tokorom 2013/04/17
    めも
  • 1