【Xcode】Firebase関連のコードを消すと、Thread1 signal SIGBRTが消えた

新しくツイッター風のアプリを作ってて、初期画面が動作するからシミュレータを起動したら、Appdelegateの行でおなじみの”Thread1 signal SIGBRT”エラーが出ました。

 

そこで僕が行ったのは、

  • UI部品のキャッシュが残ってないか
  • 初期画面で実行できない処理はないか
  • ImageViewに画像が設定されてないのが問題か

などを確認したことです。

 

しかし、上記らの確認を経ても、エラーは解消されませんでした。

 

ですが、あることを思いつきました。

 

実はFirebaseを使うつもりだったので、AppDelegate.swiftの方に、

import Firebase
.
.
.
FirebaseApp.configure()

を書いていました。

 

なんですけど、まだFirebaseを利用するコードは書いてませんでした。

 

もしかして、”Firebaseを利用する準備をしたのにFIrebaseを使ってないのが問題じゃね?”と思い、Firebase関連のコードを全て消しました。

 

すると..エラーが解消されました。

 

余計なコードは書くべきだはないのかもしれません。

【Swift】udemyでFirebaseを習ったので復習

Swiftで重要なFirebaseudemyで学んだので、備忘録として書き記す。

 

 

Firebaseを使用する準備

 

AppDelegateにFirebaseのimport文と使用許可?のコードを書く。

f:id:nekokichi_yos2:20181003220444p:plain

 

ターミナルでpod関連をインストール

  

ターミナルで、

 

pod init

 

を打ち、生成されたPodfile

 

pod

 

と書き、ターミナルで

 

pod install

 

と打つ。

 

 

使いたいViewControlle

import Firebase

する。

 

データベースからデータを取得する流れ

 

  1. 保存したいデータを作成
  2. 指定したデータベースの階層下に保存
  3. データベースのURLを参照してデータを取り出す
  4. 取り出したデータを別に作ったPostクラスの変数に入れる
  5. セルなどに表示する
  6. 2に戻る

 

データベースの参照URLを生成

let ref = Database.database().reference()

データを保存するのに必要な変数を別クラスで宣言

 

f:id:nekokichi_yos2:20181003222156p:plain

 

データベースのpost階層下のデータを取得する 

 

//保存するデータをuserNameとcommentとする
//保存したデータは各postDataに格納される
//それらのPostクラスをpost_Arrayでまとめて管理する
//Post - データ群を持つデータ - userName, comment
var post_Array = [Post]()
var postData = Post()

//データを取得する
ref.child(“post”).observeSingleEvent(of: .value) { (snap, error) in

	//snapにはキーで名付けられたデータが辞書型で渡される
	//例:[“userName” : “Mike”]など
	let snapData = snap.value as? [String: NSDictionary]

	//もしデータがなければ
	if snapData == nil {
		return 
	}

	//
	for (_, post) in snapData! {

		if let userName = post[“userName”] as? String, let comment = post[“comment”] as? String {
			
			//Post.swiftの変数にデータを入れる
			self.postData.userName = userName
			self.postData.comment = comment

		}
		
		//データをまとめてpost_Arrayに入れる
		self.post_Array.append(self.postData)

	}

}

 

取得したデータをセルに表示させる

func tableView(…, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
	
	//セルを生成
	let cell = tableView.dequeueReusableCell(withIdentifier: “cell”, for: indexPath)

	//Tag:1のUILabelをOutlet紐付けなしで紐付け
	let userNameLabel = cell.viewWithTag(1) as! UILabel
	//indexPath.rowに該当するPost()クラスのuserNameを入れる
	userNameLabel.text = posts[indexPath.row].userName
	
	let commentLabel = cell.viewWithTag(2) as! UILabel
	//indexPath.rowに該当するPost()クラスのuserNameを入れる
	commentLabel.text = posts[indexPath.row].comment

	return cell

}

ユーザー名とコメントをデータベースに保存する

//post階層下にデータ群をまとめる配列?データを生成
//childByAutoId:階層下のデータを扱う階層名を自動生成?
let rootRef = Database.database().reference(fromURL: “Firebaseで作ったデータベースのURL”).child(“post”).childByAutoId()

//保存したいデータの型を宣言
let feed = [“userName”:Label.text , “comment”:textField.text] as [String: Any]

//指定した階層にデータを保存
rootRef.setValue(feed)

 

まとめ

  

Userdefaults以上のデータ連携を可能にするFirebaseは、開発に重要な技術でありながら、初心者にはめちゃむずい。

 

udemyで初めてFirebaseに触れた時は、なんのこっちゃだった。

 

自分で写形したり、ほかの講座でまた触れたりしていくと、何となく理解できるようになった。

 

やはり、その技術にどれだけ触れられるかで理解度が変わってくる。 

【Xcode】XCTestについて

XCTest(テスト)は、ViewController.swiftなどに書かれている関数をテストできる手法。

 

例えば、シミュレータや実機でアプリを起動しても、メソッドや関数がきちんと動作してるかは不明。

 

しかし、アプリではなく、関数という細部のテストをXCTestは可能にしてくれる。

(シミュレータが自動で起動してしまうが。)

 

XCTestを使用する手順は以下。

f:id:nekokichi_yos2:20181003215816p:plain

f:id:nekokichi_yos2:20181003215818p:plain

f:id:nekokichi_yos2:20181003215807p:plain

f:id:nekokichi_yos2:20181003215813p:plain

f:id:nekokichi_yos2:20181003215809p:plain 

まとめ

 

XCTestを調べていて驚いたのが、日本語の記事があまりないことだ。

 

少なくとも、日本ではあまり浸透していないのだろう。

 

仮に2018年の記事があっても、4000文字規模の詳しい記事はそうそうない。

 

やはり、応用的な技術は英語でしか手に入らないらしい。

 

しかし、XCAssertNil()Nilかどうかを判定する、などのテスト用のメソッドが用意されており、現場での開発で使えれば、注目されそう。

【Xcode】HomeBrewでcarthage updateを実行する際の注意点

僕と同じ二の舞を踏む人を減らすために、Homebrewを利用したcarthage経由のファイルをダウンロードする際の注意点を書いていきます。

 

 

いつエラーが起こったのか

 

udemyでWatsonを使ったiOSアプリを作る講座を受講していて、必要なファイルをHomeBrew経由でインストールしていました。

 

Carthageというテキストファイルを用意し、

 

 github "watson-developer-cloud/swift-sdk"

 github "SVProgressHUD/SVProgressHUD" 

 

と書き込み、ターミナルで

 

$ carthage update

 

と入力すると、swiftSDKとSVProgressHUDがダウンロードされます。

 

しかし、上記の過程を経る中で、僕はエラーや問題に遭遇しました。

  

Cartfileのフォーマットは”rtf”ではなく”標準テキスト(プレーンテキスト)”にせよ

 

$ carthage update

 

を実行すれば、

 

 Parse error: unexpected dependency type in line: {\rtf1\ansi\ansicpg???\cocoartf????\cocoasubrtf???} 

 

というエラーが出た場合、

「Cartfile内のテキストのフォーマットがRTF(リッチテキストフォーマット)なので実行できません」

と解釈してください。

 

解決方法は、フォーマットを標準テキスト(プレーンテキスト)に変更すればいいだけです。

f:id:nekokichi_yos2:20181002205631p:plain

 

”xcrun: error: unable to find utility "xcodebuild", not a developer tool or in PATH”というエラーの対処法

  

(僕は下記の方法で解決しました)

qiita.com

 

僕なりに解釈すると、

「xcodebuildのユーティリティがない、デベロッパーツールがない」

かと。

 

下記の画像の通りに、Preferences →  Location → Command Line Tool、のチェック欄から最新のXcodeのバージョンを選択するだけです。

f:id:nekokichi_yos2:20181002205629p:plain

f:id:nekokichi_yos2:20181002205627p:plain

 

まとめ

 

今回のエラーに加えて、yukicoderでの問題を解けなかったことが重なって、昨日は落ち込んでました。

 

がむしゃらに探せば解決策は見つかるので、今後もエラーに遭遇したらできるだけ粘ってみよう。