画面遷移のアニメーションをカスタムする

UINavigationController を使った画面遷移のアニメーションのデフォルトは、横からスライドするアニメーションですが、これをカスタムすることができます。 最近、アニメーションをカスタムしたりといったようにカスタムトランジションについて学んでみたの…

UIPickerView に UILabel を表示するライブラリをつくった

タイトルの通り、 UIPickerView に UILabel を表示するライブラリを作りました。 github.com これを使うとこんな感じにコンポーネントごとに簡単にラベルを表示することができます。 なお、Carthage からインストールできます。 使い方 LabelPickerComponent…

iPhone用のアラームアプリを作った【iOS】

初の個人アプリをリリースしました! そのアプリがこちらです。 バイブアラームー音が鳴らずに秒まで指定できるーTatsuya Kojimaライフスタイル無料 簡単に言うとアラームアプリです。 アラームアプリは App Store にたくさんあるのですが、自分が欲しかった…

Auto Layout の Content Hugging Priority と Content Compression Resistance Priority

iOS

すぐ忘れるので。 Content Hugging Priority コンテンツの表示サイズに沿って表示されることの優先度。 そのため、この値が大きい方が優先的にコンテンツと同じサイズになる。 Content Compression Resistance Priority コンテンツが圧縮されないことの優先…

iOS の時間表示設定を取得する

iOS の日付と時刻の設定の24時間表示が ON になっていれば24時間表示用の UILabel を、そうでなければ12時間表示用の UILabel を表示するという用に、時間表示設定によって View を切り替えたいと思ってググってみたのですが、解決策が見つからなかったので…

Swift の Date の操作

Date の操作方法が全く覚えられないので、調べたことをここにまとめていく。 日時を指定して Date 生成 Calendar(identifier: .gregorian).date(from: DateComponents(year: 2017, month: 8, day: 13)) ある Date の次の日の Date 生成 Calendar(identifier:…

UnitTest 用のデータを共通化する【Swift】

テストをする際には複数のオブジェクトの初期化をする必要があり、この作業が面倒でテストを書くのが面倒になってしまうことがあったので、どうにかできないかと思い調べてみたところ、良さそうな方法がありました。 clean-swift.com これを、自分が使いやす…

Swift化開発合宿 in 熱海♨️

先日、会社のモバイルエンジニア5名でSwift化開発合宿に行ってきました! 普段はなかなか Swift 化を進めることができないので、こういった機会を設けてガガガっと進めてしまおうということから、今回の合宿が決まりました。 この開発合宿記録を書いていき…

iOSアプリ開発で実機のログに filter をかける

アプリ起動中のログであれば Xcode のコンソールから確認できますが、 アプリを起動したり終了させたときのログを確認したい場合には、Xcode のコンソールでは確認できないので実機のログを確認する必要があるかと思います。 このとき Xcode のツールバーの …

try! Swift 記録 2日目

try! Swift に参加してきました! www.tryswift.co ので、メモっていたことを書きます。 本当に雑なので、間違っているかもしれません。 2日目の分です。 1日目の分はこちら。 テスト可能なコードを書くということの2つの側面 なぜテスト バグを防げる テ…

try! Swift 記録 1日目

try! Swift に参加してきました! www.tryswift.co ので、メモっていたことを書きます。 本当に雑なので、間違っているかもしれません。 1日目の分です。2日目の分はこちら。 Swift開発者が知りたかったけど聞きにくい機械学習のすべて 機械学習ではデータ…

instantiateInitialViewController() が nil になる

同じことで何度もはまっている気がするのでメモ。 SampleViewController の Storyboard と Class を追加して、Storyboard から以下のようにインスタンスを作ろうとすると、nil になってしまう。 let storyboard = UIStoryboard(name: "SampleViewController"…

Swift で循環参照するケース

循環参照という言葉を最近よく耳にしていて、なんとなく相互参照の結果メモリリークしてしまうというのは分かっていたのですが、じゃあどうしたら起きてしまうのかというところがあやふやだったので調べてみました。 循環参照 インスタンスは参照カウンタと…

UIPickerView の使い方

UIPickerView とはこういうやつです。 これを使うための最低限の部分です。 UITableView 等と同様に DataSource と Delegate を設定して、表示する列数、行数、要素を各メソッドで return するといった感じです。 import UIKit class ViewController: UIView…

UIAlertController 使ってみた

UIAlertController を使うことで Alert や Action Sheet を画面に表示することができます。 Alert や Action Sheet とはこういうやつ↓です。 Alert Action Sheet 使う際の流れとしては、以下のような感じです。 Alert も Action Sheet もやることは同じなの…

shibuya.swift #5 で初めての LT をしてきた

LT

shibuya.siwft で生まれて初めての LT をしてきました。 shibuya-swift.connpass.com shibuya.swift にはお手伝いとして何度か参加させてもらっていたのですが、今回は自分が話す側だったのでとても緊張しました。頭が真っ白になることなく無事終わったので…

Swift の Class, Protocol を Objective-C で使う

Objective-C 側で ProjectName-Swift.h を import すれば使えるでしょとか思っていたのですが、すんなり使えなかったので書いておきます。 Class を使う SampleObjcClass.h と SampleObjcClass.m からなる Objective-C のクラス内で、 Swift で書かれた Samp…

iOSDC Japan 2016 に参加してきた!

8/19, 20 にかけて開催された iOSDC Japan 2016 に参加してきました! 記念すべき第一回でした! 次回開催についてですが、 SNS やブログ等で拡散されていけばあるかもということでした。是非来年も開催されてほしいです! iOSDC Japan 2016 の詳細はこちら↓…

constraint を動的に追加 / 削除する

AutoLayout でレイアウトに必要な constraint を追加する場合、 Storyboard 上で指定する方法と、コードで指定する方法があります。 Storyboard では静的な constraint であれば簡単に追加できますが、動的に追加、そして削除したい場合には、コードで指定し…

UITableView のセルの高さを可変にする

高さが可変の UILabel や UIImageView を UITableView のセルに配置したときには、もちろんセルの高さも可変にしたいと思います。 その方法を書きます。 ちなみに UILabel の行数を可変にする方法はこちらのエントリで書きました。 komaji504.hateblo.jp セ…

UILabel の行数を可変にする

Storyboard で UILabel を選択し、 Attributes inspector から Lines を 0 にするだけです。 この値が UILabel の行数で、デフォルトの 1 のままだと 1 行固定となり、 テキストが複数行にわたる場合は、 ... と省略されて表示されるようになります。 今回の…

Objective-C の Category と Swift の Extension

既存のクラスを拡張したいときに、 Objective-C であれば Category 、 Swift であれば Extension により実装していきます。 それぞれの実装方法の例です。 Objective-C NSDate を拡張して sampleMethod というメソッドを実装したい場合、 Objective-C では以…

Swift でページングを実装する

UICollectionView を使って一覧画面を作成していて、画面を一番下までスクロールしたら次ページをロードして表示する、というようにページング処理をさせたいときには、 UICollectionReusableView と UIActivityIndicatorView を使うと良いそうです。 これら…

Alamofire で APIClient を書いてみた

APIClient はどういう設計が良いのかあとずっと悩んでいたのですが、なんとなく形になったような気がしたので書いてみます。 Swift は型安全な言語なのですが、 API から取得される値は様々な型を取り得るので、それを汎用的に扱えるようにするためにはどう…

UICollectionViewCell をタップしたときにセルの色を変える

UICollectionView のセルをタップしたときに何のリアクションもないと寂しいので、セルの色を変える方法を調べました。 UICollectionViewDelegate を継承した Class に以下のメソッドを追加することで、セルをタップしている間は色を変え、離したら元の色に…

MVP と MVVM

MVP と MVVM の違いがよくわからなかったのですが、 調べているうちに違いがなんとなく分かった気がしたので、自分の理解での処理の流れ書いてみます。 MVP 2 種類ある Passive View View で入力がある。 View が入力があったことを知る。 受け取った入力に…

Swift で早期リターン

早期リターンを使うと、コードが読みやすくなります。 例えば、 nil をとりうる値 hoge があって、 nil のときは処理を終了させたいというメソッドの場合、Ruby ではこんな感じになります。 # 早期リターンなし def test if hoge # hoge が nil でないときの…

Rails のルーティング

ルーティングを追加するとき、毎回調べているので少しずつまとめていこうかと思います。 等価な書き方が色々あるので絶対これというわけではありません。 scope URI Pattern にのみ追加されます。 Rails.application.routes.draw do scope :user do resource…

Git で 変更を一時的によける

Git

あるブランチで色々変更をしていて、中途半端だけど、急遽他のブランチで作業をしなければならなくなった時に、 git stash というコマンドが便利です。 変更を加える ➜ sample git:(hoge) touch hoge.txt ➜ sample git:(hoge) ✗ git add . ➜ sample git:(hog…

TableViewController と Storyboard でテーブルをつくる (Swift)

ViewController でテーブルを作成する記事はよく見かけたのですが、 TableViewController を使う方法はあまりなかったのでメモ。 まだまだ学び始めたばかりでよくわかっていないことだらけなので、手順だけ。 ざっくり書くと、 storyboard で TableViewContr…

モデルの属性に自作のバリデーションを追加する

モデルの属性のバリデーションをしたいときに、バリデーションヘルパーの既存バリデーションだけでは足りないことがあると思います。 そのため、Rails ではバリデーションを自作することができます。 その一つの方法としてバリデーションメソッドがあります…

Xcode で info.plist のプロパティを追加する

プロパティの追加方法がわかりづらかったからメモ。 上記の手順をふむとプロパティが追加されるので、以下のようにプロパティ名や型を目的の値に変更して完了です。 ちなみに、、、 ③で一番下のプロパティと書きましたが、どのプロパティでも構いません。 当…

Rails の Time と DateTime

日時を扱うクラスには DateTime と Time の二つがあり、どちらを使えば良いのかを知ることもなく過ごしてきてしまっていたのですが、ざっくりと知ることができたのでメモ。 基本的には Time ( ActiveSupport::TimeWithZone ) を使う Rails 環境においては、…

ローカル環境の Ruboty を slack で動かす

ローカル環境の Ruboty を slack で動かしてみたときのメモです。 Ruboty の使い方は、先日投稿したエントリにざっくり書いてあります。 komaji504.hateblo.jp slack team を用意する 作っていない場合はこちらから。 Slack: Be less busy slack 用アダプタ…

Ruboty を使ってみた

Ruboty 作者の r7kamura さんのエントリを読んで使ってみました。 r7kamura.hatenablog.com 動かしてみる gem install ruboty ruboty --generate cd ruboty bundle install ここまでで Ruboty が動作する状態になります。 bundle exec ruboty を実行すること…

RSpec の expect_any_instance_of でハマった

class Test def say_hoge hoge1 = Hoge.new hoge2 = Hoge.new hoge1.say hoge2.say end end class Hoge def say puts 'hoge' end end こんな感じのクラスがあったとして、 Test#say_hoge で Hoge インスタンスが Hoge#say を1回ずつ実行していることをテスト…

入社してから早くも1年

先日は入社式があり、一緒に働く新しい仲間がたくさん増えました。 ということは、自分が入社してから早くも1年が経ったということです。 この1年は、とてもとてもあっという間でした。が、とても濃い1年でした。 ちょっと振り返る 自分が入社した時はどんな…

curl のオプション小まとめ

Web API の動作検証をするときに curl を使っているのですが、 そのときに使うオプションについて少しだけ書きます。 本当に少しだけです。 認証ユーザの指定 -u user_name:password サーバの認証に使用するユーザ名とパスワードを指定できます。 デフォルト…

Rubyのブロックをメソッド間で受け渡す

ブロックとは ブロックについてはこちらの記事が分かりやすかったです。 qiita.com ブロックを引数にとるメソッドの定義 定義方法は、ブロックを引数にとることを明示する or しないの2通りがあります。 メソッドを呼び出したときの実行結果は同じです。 明…

プルリクのコメントは大事

先日投稿した 大きいプルリクはつらい というエントリで、レビュー側の負担を少なする術を書きましたが、その続編を書きます。これも自戒の意を込めています。 コメントを残す PR を見ればコードの diff が分かるので、どんな変更を加えられたのか、その変更…

大きいプルリクはつらい

チームで開発をする場合、 GitHub 等のサービスを利用してコードを管理することが多いと思います。 既存のコードを変更する際は、GitHub であればプルリクを出して、他の開発者にレビューをしてもらい OK が出ればマージするといったフローが生じます。 レビ…

Factory Girl で関連を定義する

1対1の関連を持つ users テーブルと profiles テーブルがあり、User モデルと Profile モデルがそれぞれ以下のように定義されているとします。 users テーブル field type id int プライマリキー name string email string profiles テーブル field type id …

バグを入れてしまったら

サービスを運用していると、バグが発見されることはよく (?) あることだと思います。 ある変更をリリースした直後に、ここが動かなくった!なんてことになったらその変更を元に戻す必要があります。 こういったときに、git でコードを管理しているのであれ…

nagios-pluginsをgo-check-pluginsに置き換えた

nagios-pluginsにより設定していたmackerelの監視項をmackerel−check−plugunsに置き換えました。 今回置き換えたのは、プロセス数を監視する項目で、nagios-pluginsでいうcheck_procsです。 やったこと nagios-pluginsの調査 nagios-pluginsで書いていた、 /…

初めてコミットを分割してみた

Git

1つのコミットがでかくなりすぎて困っていたので、コミットを分割する術を学びました。 そもそも細かくコミットしろという話なのですが、それはひとまず置いておきます。 test1.txtとtest2.txtの作成を1つのコミットで行ってしまったので、2つに分けたいとい…

最初で最後のYAPC::Asia Tokyoに参加してきた

YAPC::Asia Tokyo 2015に参加してきました。 遅くなってしまったのですが、ブログを書くまでがYAPCということなので感想を書いていきます。 何聞いてきたのか 3日間で以下のトークを聞いてきました。 同じ時間に複数のトークがあったのでとても迷った... 言…