記録。

めも。

コードでUIButtonを実装

まだまだswiftを書いていて知らないこと、学ぶこと盛りだくさんなswift初心者です。


コードでUIButtonのイベント処理を追加するときは、addTargetを使用しますが、(他を知らない)

そのとき引数のtargetにはサンプルコードにも今までの自身の経験でもselfしか見たことがありませんでした。

今回は、selfではないパターンで初めてaddTargetを使用して自身も「なるほどなぁ〜」と思ったので、
ここにメモとして書いとこうと思います。

今回はviewで定義したUIButtonをviewContorollerでボタンタップ時のイベントの処理を書いていきたいと思います。


sampleView.swift

import UIkit

class SampleView: UIView  {

    let sampleButton: UIButton

    override init(frame: CGRect) {

        self.sampleButton = UIButton(frame: CGRect(x: 50, y: 50, width: 50, height: 50)
  sampleButton.addTarget(SampleViewController(), action: #selector(SampleViewController.tappedButton), for: .touchUpInside)

        super.init(frame: frame)

        self.addSubview(self.sampleButton)

    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}


SampleViewController.swift

import UIKit

class SampleViewController: UIViewController {

   override func viewDidLoad() {
          super.viewDidLoad()
        
          sampleView = SampleView(frame: CGRect(origin: .zero, size: self.view.frame.size))
          self.view.addSubview(sampleView)

     }


   @objc func tappedButton() {

    print("button tapped!!")

     }


}


書いてみたら、、、「まあ、そうなるよね。。。」「当たり前だよね。。。」っていうような感じですね。


以上です!!

.actionsheetにはtextfieldを使うことができない

iosアプリ開発中にエラーが発生したので、その時に知ったことをメモ。

UIAlertControllerを使おうとしようとした時、

init(title: String?, message: String?, preferredStyle: UIAlertControllerStyle)

上記のpreferredStyleを.actionではなくて.actionsheetを使ってみたけど、
どうやらtextFieldは入れることができないらしい。

以下がそのときに発生したエラー。

 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Text fields can only be added to an alert controller of style UIAlertControllerStyleAlert'


ということでUIAlertControllerにtextFieldを使うときは.actionを使いましょう。

いや、たぶん.actionと.actionsheetのそれぞれが使用される目的が違うはず。
それを自分が知っていなかったからこのようなことが起きてしまったのかも。
公式のドキュメントをじっくり読もう。

公式ドキュメント
UIAlertController - UIKit | Apple Developer Documentation

realm 3.1.1でたくさん警告が出た

iosアプリ開発でrealmをインストールしてビルドしたら、25個くらいの警告が発生したので、
その時の対応をメモ。

実際に以下の感じで警告が出てきた。。。

f:id:jksdaba:20180225210419p:plain

ちなみにこの時の環境情報は以下の感じ

xcode : 9.1
cocoapods : 1.4.1
realm : 3.1.1

一個ずつ潰していかなきゃいけないのかな〜とか思っていたけど、
よくよく警告を見てみると同じようなことばっかり書いてあった。

それで調べて見たら、以下の対応方法で解消することができた。

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF'] = false
        end
    end
end

上記をpodfileに書いて再度 pod updateして、ビルドしたら、綺麗に警告がなくなった。

参考
stackoverflow.com


cocoaPodsがデフォルトでCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELFを有効にしていることで発生しているとのこと。
それに対してrealmが対応していなかったということらしい。
次のrealmのリリースで解消されることを願います。

ちなみにCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELFは警告に関してObjective CとARCで定義している項目の1つで、
ブロック内で暗黙的に"self"を参照しているときに警告を出す設定のこと。

参考
qiita.com

CocoaPodsで使用しないライブラリを削除する

いつもpod installくらいしか使ったことなかったのですが、
ライブラリを入れてみて、やっぱりいいやと言う場面があったので、そのライブラリを削除したくなりました。

そんな感じで、CocoaPodsで使用しなくなったライブラリを削除する方法を調べていたんですが、
すぐにわかり、方法もあっさりしてたので、メモ程度に残したいと思います。

1.>|vi podfile|<で開く

2.不要になったライブラリ>|pod 'hogehoge'|<を削除する

3.podfileを閉じて>|pod update

ReactNativeの環境構築結構大変だった①

色々な技術を触ってみていますが、あんまりjavascript系の技術に興味を持ちながらも
あんまり触れてみれていなかったので、年末年始を使って触れてみました。

主にReactを触ってみたのですが、結構環境構築が大変だった(自分だけかもしれません)ので、それを今回は書きたいと思います。
と言ってもreactのことよりnode.jsだったりnpmのことが大半だと思いますが、ご了承ください。


まず、

create-react-native-app hogehoge 

プロジェクト作成が全然うまくいかない。。。


なんで?なんで?と思いました。
react.jsは全然問題ないのに、、、と思いながらも

エラーを調査したりすると、どうやらReactNativeが動くnpmの4系のバージョンじゃないといけないらしい。。。

知りませんでした。その時のnpmのバージョンは5.6.0でした。


ってことで、node.js諸々アンインストールして再インストールするところから巻き戻しになりました。

ちなみにnode.jsをアンイストールして再インストールした理由は

npmのダウングレードを行なうためです。

もともとpkgでnode.jsをインストールしていて、そこからnpmのバージョンを
ダウングレードする方法がありませんでした。(もしかしたら調べ不足かもしれない)
nodebrew管理にすれば、npmのダウングレードができます。
なので、アンインストールしてnodebrewで管理することに切り替えました。



ってことで、まずは、node.jsとnpmのアンインストール

node.jsのアンインストール

lsbom -f -l -s -pf /var/db/receipts/org.nodejs.node.pkg.bom \
| while read i; do
  sudo rm /usr/local/${i}
done
sudo rm -rf /usr/local/lib/node \
     /usr/local/lib/node_modules \
     /var/db/recei
pts/org.nodejs.*

npmの削除

sudo rm -rf ~/.npm

参考資料
MacにpkgでインストールしたNode.jsをアンインストールする手順 - Qiita


でnode.jsはアンインストールできたんですが、なぜかnpmの削除がうまくいきませんでした。

それで色々調べて試した結果以下のコマンドでできました。

sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}

参考資料
node.js - How do I uninstall nodejs installed from pkg (Mac OS X)? - Stack Overflow


そんな感じで、問題点は全て解消できました。

次回nodebrewのインストールからreactNativeを動かすところまで書きます。

centOS7にGitLabをインストールした話

前回、centOSをインストールしてssh接続までしたので、色々とサーバーをたててみました。
今回はgitlabをインストール。

今回、作業した環境は以下の通り

macOS Sierra 10.12.6
virtualBox 5.1.28 r117968
centOS 7
centOSのisoはminimalを使用しました。

gitlabのインストール

※以下の作業はrootユーザーで行っています


まずは、必要なパッケージをインストールします。

yum install curl policycoreutils openssh-server openssh-clients

ssh接続をできるようにします。

systemctl enable sshd
systemctl start sshd

メールサーバーを構築するときに使用されるpostfixというメール転送エージェントをインストールして利用できるようにします。
これによってgitlabが適宜メールを送信できるようになるらしいです。。。個人でサーバーをたてているので、使用しないと思われるますが。。。

yum install postfix
systemctl enable postfix
systemctl start postfix

firewallの設定でhttpを許可します。

    • permanentを入れて、設定を再読み込み(reload)しないと再起動をしたときに設定が戻ってしまうので、注意してください。
firewall-cmd --permanent --add-service=http
systemctl reload firewalld

コマンド入力後、設定が完了するとsuccessと表示されます。

続いてgitlabのインストール
まずは、gitlabのインストーラをダウンロードする

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

gitlabのインストール

yum install gitlab-ce

gitlabの初期設定をして、起動させます。

gitlab reconfigure

これで完了。
http://<サーバーのIPアドレス>でgitlabが表示されるはず。



参考サイト

qiita.com

kengo700.hatenablog.com

qiita.com

<更新版>centOS7のインストールとssh接続まで

以前書いたタイトルの内容が参考サイトの紹介だったので、
自身が実際に行った手順をメモメモ。

環境***

macOS Sierra 10.12.6
virtualBox 5.1.28 r117968
centOS 7
centOSのisoはminimalを使用しました。

*********

まずは、virtualboxで新しい仮想マシンを作成してcentOSをインストール。

インストールが完了したら、いったん仮想マシンを停止し、ssh接続の準備。

virtualbox → 環境設定 → ネットワーク → ホストオンリーネットワーク 
それで、vboxnet()をダブルクリック。
すると、IPアドレスが出てくるので、とりあえず確認。

先ほどcentOSをインストールした仮想マシンの設定を変更するために、virtualboxマネージャーで
設定 → ネットワーク アダプター2
ネットワークアダプターを有効化にチェックを付けて、プルダウンのホストオンリーネットワークを選択。名前は前に確認したvboxnet()。

ちなみにプルダウンで他にもアダプターが色々ありますが、それぞれの意味や役割については以下の記事がわかりやすかったです。


Virtual Boxのネットワーク設定 - ぐ~だらびより。


ネットワークアダプターの設定が完了したら、仮想マシンを立ち上げる。

rootでログインしてNetworkManagerのコマンド

nmtui

上記のコマンドを入力すると以下の画面が出てくる。

f:id:jksdaba:20171103175416p:plain


edit a connectionを選択。
まずはNATの設定をするため
次の画面ではenp0s3(NATのアダプタ)を選択した状態で、edit...を実行。

f:id:jksdaba:20171103180206p:plain


上記の画面が出てきて、デフォルトだと IPv6 CONFIGURATION がAutomaticになっているのでIgnoreに変更して、Automatically connectにチェックを付ける。


次にホストオンリーアダプタを設定するために
enp0s3(NATのアダプタ)を選択した画面と同じ列にいたもう一つのアダプタを選択し、edit...。

f:id:jksdaba:20171103183136p:plain


profile nameを変更して、IPアドレスを設定しましょう。
前に確認したIPアドレス以外の値にしましょう。(192.168.56.1以外なはず)
(たぶん、192.168.56.XX)みたいになるはず、、、

編集が終了したら、 back → quitでNetworkManagerを終了して
以下のコマンドを実行。

systemctl restart network


それで、Macの方から 

ssh root@192.168.56.XX

ssh接続できるはず。



参考サイト
marimomemo.hatenablog.jp

www.task-notes.com