swift エラー[!] CocoaPods could not find compatible versions for pod "Firebase/Auth"

次のようなエラーがcocoapodを利用しているときに出たときの対応

[!] CocoaPods could not find compatible versions for pod "Firebase/Auth":
  In snapshot (Podfile.lock):
    Firebase/Auth (= 5.20.2)


前提知識

まずcocoapodはrubyで書かれている。macはrubyが標準でインストールされているから利用できる。

Ruby Gems からcocoapodをbundlerにて、インストールする。
でも普通はhome brewを使うほうがいいと個人的には思う。

このpodを利用することにより、Github上にある2万以上の、ライブラリをインストールすることができる。

上記のようなエラーは、最新バージョンが入らないと言っている

podのコマンドは、このgithub上の情報をローカルにキャッシュする。
あるライブラリが新しくなっても、以前にみたローカルPC内のキャッシュを見に行くのでエラーになる。

解決法

pod install --repo-update


を実行すればリモートのGitリポジトリの情報をみて、最新版をインストールしてくれる。

Railsアプリ グーグルアナリティクス導入

まずgemを入れる

gem 'google-analytics-rails', '~> 1.1', '>= 1.1.1'

bundle install をする


参考資料 rubygems.org

config/environments/production.rb にトラッキングIDを設定

GA.tracker = "UA-990011-2"

//UA-990011-2はグーグルからもらう

app/views/layout/application.html.erb, の タグに埋め込む

<%= analytics_init if GoogleAnalytics.valid_tracker? %>

参考資料 GitHub - bgarret/google-analytics-rails: Rails 3 helpers to manage google analytics tracking. Mostly intended for small to medium websites.

Bootstrap header 固定

上部に固定

fixed-top クラスを当てる

<nav class="navbar navbar-expand-lg navbar-light bg_pink fixed-top">

headerの下の部分にpaddingを指定する。

これで下の部分がめり込まなくなる

 <div class="overflow-hidden container-fluid" style="padding-top: 56px;">
      <div class="container py-5">
        
        <%= render 'layouts/flash' %>  
        <%= yield %>        
        <%= render 'layouts/debug_info' %>  
          
      </div>
    </div>

Rails heroku デプロイ (heorku側)

とりあえずhistory

heroku CLIのインストール

 npm install -g heroku
  810  heroku --version
  811  heroku create
  812  heroku login -i
  813  heroku create
  814  git config --list | grep heroku
  815  git config --list
  816  git add .
  817  git commit -m "before deploy"


 
//herokuというgit のリモートを登録する
//そこにpushすれば自動的にデプロイされる 
  823  heroku git:remote -a intense-crag-hogehoge
  824  git push heroku master

環境変数をセット

 827  heroku config:set DB_USERNAME="hogehoge"
  828  heroku config:set DB_PASSWORD="hogehoge"
  829  git push heroku master

//ログを見る
  830  heroku logs --tails

//migrate herokuは rakeコマンドを利用する
  831  heroku run rake db:migrate

//seedも
  833  heroku run rake db:seed
  834  heroku logs --tail

DBのグレードをup

heroku hobyに入らずしてDBをupgrade

フリープランでは1万レコードしか利用できないため。

ここをしっかりと読むべし devcenter.heroku.com

//メンテナンスモードをon
  839  heroku maintenance:on
//コピー前 コピー後を記載する
  840  heroku pg:copy postgresql-objective-hogehoge postgresql-objective-hogehoge

  841  heroku pg:promote postgresql-objective-hogehoge後ろ

  842  heroku maintenance:off

//==ドメイン追加
  843  heroku domains:add www.hogehoge.com
  844  host www.hogehoge

ドメインはムームードメインがわでCNAMEを設定しておく。

CNAMEとは、特定のドメインにリダイレクトするイメージ wwwのサブドメインを設定する。オリジナルのドメインは設定できない。 これは意外だった。

heroku DB リセット関係コマンド

herokuのデータベースをリセット


heroku pg:reset DATABASE

//==
あとは確認の追加のオプションを要求されるので、それを追加する。


当然テーブルごと無くなっているのでmigrate


$ heroku run rake db:migrate

seedファイル作っていたので


$ heroku run rake:db:migrate

ログを見るときは


heroku logs --tail

AWS S3 無料枠限度アラートの対処法

結論からいうとS3を利用すると、自動でログを取るバケットが作成される。

そこには、すべてのアクセスのログが入る。それがカウントされるためユーザーが40人しかいなくても

2000カウント超えてしまった。

対処法

クラウドトレイルに入り、ログ記録をOFFにする。

これだけ。 amazonのリファレンスは、読むのに骨が折れるが、キチンと書いてありました。

f:id:happy_teeth_ago:20190406181432p:plain
cloud trail

Swift Coredata まとめ 忘備録

保存処理

let appDelegate = UIApplication.shared.delegate as! AppDelegate
//persistcontainer
let context:NSManagedObjectContext = appDelegate.persistentContainer.viewContext


//リレーションも保存 これだけ
datPerson!.relationship2 = mstBunrui

  do{            //保存
            try context.save()
        }catch{
            print(error)
        }
    }

ここのdatPerson!.relationship2 = mstBunruiは

メンバ変数
 //配布物の1個
 var mstBunrui :MstBunrui?

.xcadatamodel で関連付けをされている

f:id:happy_teeth_ago:20190330094211p:plain

読み出し この場合はtableViewに一覧表示

//メンバ
 let appDelegate = UIApplication.shared.delegate as! AppDelegate
//TableView表示用インスタンス    
var datPersons = [DatPerson]()



 let fetchRequest:NSFetchRequest<DatPerson> =  DatPerson.fetchRequest()
          
        do {
            //CoreDataの利用 swift3
            let datPersons = try appDelegate.persistentContainer.viewContext.fetch(fetchRequest)
          //usersの配列の内容をuserに入れなさい
            self.datPersons = datPersons
            tableView.reloadData()