higan96技術メモ

https://github.com/higan96

SwiftのGenericsについてのメモ(その1)

概要 SwiftのGenericsを勉強しているのでそのメモ。個人的に難しくて使いこなせていない機能です。 とりあえずThe Swift Programming LanguageのGenericsのページを読んでいる。 Genericsとは Generic code enables you to write flexible, reusable functio…

Go TourのExercise

GoのTourのExerciseの回答 go-tour-jp.appspot.com プログラミング言語 Goには、初学者が言語仕様を学べるTourというコンテンツがあります。 その中に練習問題(Exercise)があったので、自分の回答を学習メモとして記していきます。 Exercise: Slices A Tou…

cocoapodsでRxSwiftをインストールした際に出てきた謎のエラー「Expected ',' separator」

Environment Swift 4.2 Cocoapods 1.5.3 XCode 10.0 Problem 表題の通り、Expected ',' separatorっていうエラーがRxSwiftのパッケージ側に出てきて、ビルドがうまくいかなかった。 Cocoapodsで管理しているのですが、Pods以下はロックされていて自分でいじ…

WKWebViewで最初に読み込んだページに戻る

WKWebViewの最初に読みこんだページ(URL)に戻りたいことがあったので、いろいろ調べたらwebView.goToBackForwardListItem(item: WKBackForwardListItem)で実現できました。 let webView = WKWebView() let count = webView.backForwardList.backList.count…

ERROR ITMS-90037: "This bundle is invalid. The Info.plist file is missing or could not be parsed. Please check it for embedded control characters." の対処

iTunesConnectへアップロードを試みたところ、以下のようなエラーが出てしまいアップロードに失敗しました。 ERROR ITMS-90037: "This bundle is invalid. The Info.plist file is missing or could not be parsed. Please check it for embedded control ch…

AlamofireでUser-Agentを編集する

概要 Alamofireを使用していてUser-Agentを編集したいとき、ManagerのイニシャライザにNSURLSessionConfigurationのインスタンスを渡して対応しました。 NSURLSessionConfigurationの設定については、後から動的に変えることができないので、注意が必要です…

UITextFieldを含むUITableViewCellのNSIndexPathを取得する方法

UITableViewCellを含むCellが1つであれば、UITextFieldDelegateのtextFieldDidEndEditingから取得するだけでいいのですが、これが複数になると引数のtextFieldがどのCellに帰属するのかわからないので面倒です。 悩んでいたら、textFieldDidEndEditingの引数…

CompleteHandlerのないアニメーションにCATransactionでCompleteHandlerを追加する

タイトルの通りです。 CompleteHandlerのないアニメ―ションにCompleteHandlerを追加します。 下の例ではUITableViewのediting modeの終了アニメーション後に処理を追加しています。 CATransaction.begin() CATransaction.setCompletionBlock { () -> Void in…

複数のUITextFieldとUITextViewが混在するViewControllerでキーワードを閉じる

通常、であればViewConrollerがUITextFieldDelegateかUIViewControllerを適用して、textFieldShouldReturnだったり何かしらのタッチイベントでtextField.resignFirstResponder()をすると思います。 ただ、UITextFieldとUITextViewが混在する場合、どちらが編…

UITableViewで無限スクロール

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { if indexPath.row == (items.count - 1){ items += nextItems tableView.reloadData() } } 最後のcellに来たらnextItemsを追…

linker command failed with exit code 1 (use -v to see invocation)の対処

file too small (length=0) file '/some/file/path' for architecture x86_64 linker command failed with exit code 1 (use -v to see invocation) ↓ command + shift + k これでだいたい解決する 多分ビルドが失敗したときに、変な風に(0byte)書き換わっ…

randomなint

var items = [1,2,3] var randomIndex: Int = Int(arc4random()) % items.count items[randomIndex] みたいに使う

OHHTTPStubとXCTestで、モックを使った非同期処理をテストする

通信をモックを使って、実際のサーバーサイドやWebAPIとの通信を行わずにテストする。 import UIKit import XCTest class SomeAPIClientTests: XCTestCase { let someAPIClient = SomeAPIClient() override func setUp() { super.setUp() } override func te…

UIViewを45度傾かせる

吹き出しようの「ぺろっ」と出てている三角形を作りたかったので、正方形を45度傾かせて実現しました。 この辺の数学的知識が無いので、解説はできません。 let angle = CGFloat(M_PI * (45) / 180.0) //miniBoxはUIViewのインスタンス miniBox.transform = …

CoreLocationで国、都道府県、市区町村の取得

import CoreLocation let location:CLLocation = CLLocation(latitude: lat, longitude:lon) geocoder.reverseGeocodeLocation(location, completionHandler:{(placeMarks, error) -> Void in if error == nil { if placeMarks.count > 0{ let placemark: CL…

コレクションはオプショナル型にしない

Swiftを始めてオプショナル型覚えたてで、オプショナル型使いたい病にかかってしまい、 メソッドの返り値のコレクションデータまでオプショナル型で返していました。 ですが、やっぱアンラップするのがめんどくさい。 そもそも、ArrayにもDictionaryにもisEm…

定義済みクラスで「Use of undeclared type "ClassName"」のエラー

とっくに定義済みのクラスなのundeclaredと言われて怒られた。 Use of undeclared type "ClassName" 解決方法 右側の「Taget Membership」でテストターゲットの方にもチェックを入れる。 原因 あるクラスのテストを書こうとクラスが定義されたファイルだけテ…

ダミーのjsonファイルからjsonデータを作る

サーバーサイドの実装がまだだけど、APIの仕様が決まっているようなときに。 開発が進んだらjsonファイルは消すか、ターゲットをテストだけにしよう。 How do I create dummy JSON data on the client in objective C / iOS? How do I create dummy JSON dat…

Rspecでインスタンス変数に任意の値がセットされているかテストする方法

タイトルのままです。 GETメソッドなんかで、インスタンス変数の値に期待通りの値がセットされているかをcontrollerのテストで行う方法です。 it { expect(controller.instance_variable_get("@user").name).to eq 'hoge' } ここではインスタンス変数@userの…

updateでバリデーションの検証

どっかでとちりそうなのでメモ update - リファレンス - Railsドキュメントバリデーションによる検証を行う update update_attributes バリデーションによる検証を行わない update_all update_attribute

Rspecでbefore_actionなどをテストするときはAnonymousControllerを使うと便利

ApplicationControllerなどにすべてのControllerで読み込まれるbefore_actionなどを定義していて、そのbefore_actionをテストをしたいときは、AnonymousControllerを使うと便利です。anonymous controller - Controller specs - RSpec Rails - RSpec - Relis…

sessionに保存されたHashの挙動がストア前後で変わる。

sessionに保存されたHashの挙動がストア前後で変わる。 session[:test_data] = {hoge: ‘fizz’, fuga: ‘buzz’ } としたとき、session[:test_data]の中身は {:hoge =>’fizz’, :fuga => ‘buzz’} となる。 しかしこれが別のアクションで使用するとき、つまり一度…

使っていないminitestでWarningが出たよ問題

version: rails: 4.1 rails4.1にupdateしたら、使っていないはずのminitestを要求されて、困惑しました。 Warning: you should require 'minitest/autorun' instead. Warning: or add 'gem "minitest"' before 'require "minitest/autorun"'shoulda-matcher…

paperclipでlocaleに関するエラーが出たので対処

Rails 4.0.3 paperclip 4.1.1ファイルアップロードのライブラリとしてpaperclipを使っているのですが、 ファイルサイズについてのバリデーションをModelに加え、テストも加えたのですが、どうにもlocaleファイルが無いよ、とテストを走らせるとエラーが出て…

プロジェクトのリモートリポジトリで他のメンバーのプルリクがmergeされたら

git

他のメンバーの作業ブランチがリモートレポジトリでmasterブランチにマージされた ↓ 自マシンのローカルレポジトリのmasterブランチをgit pullで同期 git checkout master git pull ↓ (その後、自分がプルリクエストを送りたい場合) ↓ 対象の作業ブランチ…

Devise使っててNameError: wrong constant name mailersが出た時の対処

version: rails: 4.0.3 devise: 3.2.2config/initializers/devise.rb #config.mailer = 'Devise::Mailer' ↓ config.mailer = 'Devise::Mailer' 「config.mailer = 'Devise::Mailer'」のコメントを外したら動くようになりました。エラーの状況が発現したのが…

deviseのRemberable機能をデータベースにカラムを用意して使用する方法

deviseでは様々な機能がはじめから用意されています。それら機能はモジュール化されており開発者の用途に合わせて選択できるようになっています。 その中に「rememberable」という、所謂remember meの機能も用意されていて、その機能なのですが、少し変わっ…

Rails4なのにMassAssignに関するエラーが出た理由

症状 Rails4 + Devise + Omniauthを使って認証機能なんかを作っていたのですが、何故かMassAssignに関するエラーが出てしまい、新規ユーザーのレコードが保存できない事態に陥ってしまいました。 WARNING: Can't mass-assign protected attributes for User:…

ホームフォルダにある.gitignoreの設定を読み込めるようにする

git

毎回、gitignoreすんの面倒なんで、必ず無視したいものは事前に設定しておきたい。 git config --global core.excludesfile ~/.gitignore これでホームフォルダの.gitignoreを読み込める。 ~/.gitignore ちなみに自分の~/.gitignoreはこんな感じ .idea/ .iml…

gitをカラーで表示させる

git

ホームフォルダの.gitconfigファイルを編集する。 vim ~/.gitconfig 以下を追加。 [color] ui = auto 以上。