Passion make things more better

Ruby on Rails / React.js / Swift / AWS / Docker

CocoaPodsでpod installしたらundefined method 'to_ary'に出くわした

アプリを作っていて、新しいライブラリを導入するためにいつものようにPodfileに書いて、pod installしたら掲題のエラーが起きました。 他のライブラリでは問題なくできていたのに急に!?という思いに駆られ、調べていたところ、以下のissueが見つかりました。

undefined method `to_ary' #4891

読んでみるとどうやらrubyのバージョンが2.3以上の場合、起きることがあるようだ、ということがわかり、rubyのバージョンを調べてみると案の定。

╰─$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin14]

対応策としてはCocoaPods 1.0.0をインストールすることらしい。まだβ版(2016/4/2時点)なのでうーん、と思いながらアップデート作業。

// なんかあると怖そうだったので一旦消す
~ gem uninstall cocoapods
~ gem install cocoapods --pre
~ pod setup

そして再度pod installを実行すると見事成功。 ちょっとハマったので他の人の役に立てればと。

Rails runnerを使ってスクリプトを実行する

Railsを使っている時に、普通の処理とは別だけどもRailsの機能も使いつつ単独のスクリプト実行したい(バッチ処理とか、アプデに伴う諸々のデータの更新など)、と思ったことがある人は多いのではないでしょうか?そんな時に役立つのがRails runnerです。

はじめに

railsのルートディレクトリ直下にscriptsというフォルダを用意し、その中に実行したいファイルを作成します。 今回は20160322_passion.rbというファイルを作成します。内容は以下です。この中のスクリプトRailsの機能も使用可能です。

class Passion
  def self.execute
    put 'Do you have passion?'
  end
end

Passion.execute

スクリプトを実行する

作成したスクリプトは、以下のコマンドで実行します。

~ bundle exec rails runner scripts/20160322_passion.rb

環境毎に実行したい時

stagingやproduction環境下でも実行したい場合があるでしょう。その場合は以下のように-eオプションをつけて実行します。

bundle exec rails runner -e environment_here scripts/20160322_passion.rb

参考

SwiftでxibをカスタムViewとして使用する時の諸々

SwiftでStoryboard等を使っている場合、すべてのViewに関する処理を、同一のViewControllerに書くと、とても長くなってしまいます。そのため、Viewの切り出しを行う方が多いかと思います。以下でその分割方法について書いていきます。

xibをカスタムViewとして使用する方法

  1. UIView(以下CustomView.swiftと呼ぶ)とxib(以下CustomView.xibと呼ぶ)のファイルを作成する
  2. CustomView.xibで配置したViewのFile's OwnerにCustomViewを指定する
  3. CustomView.xibで配置したViewをCustomView.swiftcontentViewという名前で紐付ける
  4. CustomView.swiftにxibを読み込むための処理を記述する(以下参照)
import UIKit

class CustomView: UIView {

    @IBOutlet var contentView: UIView!
        
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        loadXib()
    }
    
    private func loadXib() {
        NSBundle.mainBundle().loadNibNamed("CustomView", owner: self, options: nil)
        contentView.frame = CGRectMake(0, 0, frame.size.width, frame.size.height)
        addSubview(contentView)
    }
}

あとは実際に使うところでUIViewのClassをCustomViewにすれば動くかと思います。

参考

Storyboard + AutoLayoutの環境下でUIScrollViewを配置する設定

Storyboard + AutoLayoutの環境下でUIScrollViewを配置するまでに必要な設定を書いていきます。

  1. Storyboard上で、UIViewControllerを配置
  2. UIViewControllerのUIView(以下①と呼ぶ)の上にUIScrollView(以下②と呼ぶ)を乗せて、Constraintsを上下左右0に設定
  3. UIScrollViewの上にUIView(以下③と呼ぶ)を乗せ、②③を選択し、equal widthにチェックを入れる
  4. ③のHeightにConstraintsを設定する
  5. ③にConstraintsを上下左右0に設定
  6. 該当のUIViewControllerのAdjustScrollViewInsetsのチェックを外す

簡潔ながら以上となります。 高さを変えたい時は③のHeightのConstraintsをいじるようにすれば大丈夫です。

参考