読者です 読者をやめる 読者になる 読者になる

mazeltov7のweb断片

備忘録的なテキトーなことを書きます。間違ってたり、ツッコミあればお願いします。

【Xcode8】ビルドが成功しているのにiOSシュミレータが起動しないときの対処法

xcode

原因

  • Runの設定「Executable」が「None」になっている

対応

  1. 左上の△のRunボタンをoption押しながら、クリック。
  2. 設定画面出て来るので、Run->InfoのExecutableがNoneになってるところを、プロジェクト名に変更する。

Done

参考

IPv6に対応する(さくらVPS-CentOS6, お名前.com)

VPS

環境

  • OS:CentOS6.8(さくらVPS
  • ドメイン:お名前.com すでにIPv4で動いてるのを対応させる。

対応

事前チェック

自分のサイトがIPv6に対応してるかチェックできるサイト。
Is your site IPv6 ready?
- DNS (IPv6 AAAA Record)
- IPv6 Connectivity
でFAILしてるのを確認。

最近立ち上げたさくらのVPSだとすでにIPv6のある程度の対応されているみたい。

$ ifconfig -a
# で、eth0のところのinet6 addrがScope:LinkとGlobalもあれば一応対応されている

IPv6のアドレスを一応pingで確認

$ ping6 2001:XX:XX:XX:XX:XX:XX:XX 
# 対応されてる場合はこれで返ってくる

対応されている場合でも、

wget -6 hogehoge.com 
# -6はipv6での接続 (-6,  --inet6-only        connect only to IPv6 addresses.)

たぶんこれでconnection refuseされる。

IPv6 AAAA レコード対応

お名前.comでログイン後、「ドメイン設定」→「ネームサーバーの設定」→「DNS関連機能の設定」→対象ドメインを選択して「次へ進む」→「DNSレコード設定を利用する」
ここでAAAA Typeの、ValueにはIPv6のアドレスを入れて追加して保存する。
(サイトわかりにく(ry…) で、対応されたら、上のサイト(ready.chair6.net)でチェックする。PASSと出るはず。

IPv6 Connectivity対応

実は上記の対応だけでこれもチェックPASSする場合もある気がする。
わたしはここに習って設定反映したら、逆に通らなくなったがw (二重設定してる部分が原因だったorz)
IPv6アドレスの設定方法 – さくらのサポート情報

結局書いたのは、

$ vim /etc/sysconfig/network

NETWORKING_IPV6="yes"
IPV6_AUTOCONF=no
を追加

$ vim /etc/sysconfig/network-scripts/ifcfg-eth0

元々以下が書かれていたので一点だけちょっと修正したのみ。
DEVICE="eth0"
BOOTPROTO="static"
DNS1="XXX.XXX.XXX.XX"
DNS2="XXX.XXX.XXX.XX"
DNS3="2001.XXX.XXX.XX"
GATEWAY="XXX.XX.XX.X"
HWADDR="XXX.XXX.XXX.XX"
IPADDR="XXX.XXX.XXX.XX"
IPV6ADDR="XXX.XXX.XXX.XX/64" # ここに/64を追加
IPV6INIT="yes"
IPV6_AUTOCONF="no"
IPV6_DEFAULTGW="fe80::1%eth0"
MTU="OOO"
NETMASK="XXX.XXX.XXX.XX"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="OOOOOOOOOO"

上記対応したら、

$ service network restart

で確認

$ ifconfig -a # inet6 addrがScope:Globalも出てること確認
$ netstat -rnA inet6 # ::/0で、fe80::1になってること確認
$ ping6 2001:XX:XX:XX:XX:XX:XX:XX(ipv6のアドレス) # 返ってくること確認

あとは、サイトで両方PASSしてることを確認。 あと、

$ wget -6 hogehoge.com
# これで結果返ってくることを確認

開通はこれでOK。

ip6tablesの設定

iptablesipv4の方なので、別途ip6tablesを対応しないといけない。

$ chkconfig ip6tables --list # 3:onになってたら自動起動設定されてる
$ vim /etc/sysconfig/ip6tables
# httpとhttpsだけあけとく
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
COMMIT

$ /etc/init.d/ip6tables restart

OK

参考:
- https://serversmanvps.xn–ockc3f5a.com/2016/01/04/%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AEipv6%E5%8C%96%E3%82%92%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F
(↑リンク飛ばねぇ…URLコピペしたら見れる…)
- 俺の知っているコマンドがIPv6で使えないわけがない|サイバーエージェント 公式エンジニアブログ
- 4ステップでWebサーバをIPv6に対応させる方法(2/3) − @IT
- CentOS に ip6tables の設定を行う(IPv6) | Webセキュリティの小部屋

iosストア審査申請のメモ

ios

毎度面倒なのでメモしておく。

以上

Apache動いてるCentosにnode入れてnodeも動かす

VPS apache node
環境
node入れる

nodeのサイトを見ると6.xバージョンが現在安定版ぽいので、そちらを入れる。

$ sudo su
$ curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
$ yum -y install nodejs
$ yum install gcc-c++ make
$ node -v  // 確認
$ npm -v // 確認

参考: パッケージマネージャを利用した Node.js のインストール | Node.js

node動かしてみる
$ mkdir nodeApp
$ cd nodeApp
$ npm init
$ npm install express --save // express入れて動かす
$ vim app.js // expressのhello worldのコード書いとく
$ ln -s ~/nodeApp /var/www/node // /var/www側にリンク貼る
$ node /var/www/node/app.js // 動かす
apacheからnodeへproxyする

/etc/httpd/conf.d/node.confに書くのもあるっぽいけど、今回は /etc/httpd/conf/httpd.conf

<IfModule mod_proxy.c>
    ProxyPass /nodeApp http://127.0.0.1:3000
    ProxyPassReverse /nodeApp http://127.0.0.1:3000
</IfModule>

書いとく。この中にdeny, allow制限してもいいけど、今回はそのまま。
*注:上の設定のポート3000の後ろに/を付けてると、ルートはうまく表示されるけど、ルート以下の他のパスがうまく表示されなくなるので注意。 設定を反映、

$ service httpd restart

で、アクセスで確認!が、503エラー、、、、error_logには

[Mon Jan 23 17:43:43 2017] [error] (13)Permission denied: proxy: HTTP: attempt to connect to 127.0.0.1:3000 (localhost) failed
[Mon Jan 23 17:43:43 2017] [error] ap_proxy_connect_backend disabling worker for (localhost)

で、selinuxあたりで限定されてるらしい。 参考:
Linux:CentOS6でmod_proxyが動かない - HiiHahWIKI - making some notes for... -
Apache Mod_proxy '[Error] (13)Permission Denied' Error on RHEL - SysAdmin's Journey

$ sestatus -b | grep httpd // 設定を確認

たしかにhttpd_can_network_connectoffになっている。これをonにする。

$ /usr/sbin/setsebool -P httpd_can_network_connect 1
$ service httpd restart
$ sestatus -b | grep httpd // onになってるの確認

これでアクセスすると、ちゃんとアクセスできた。OK

おまけ

node動かすのに、forever使って常駐させる。
www.npmjs.com

$ npm install forever -g
$ forever start app.js

xcode8のデバッグエリアのノイズを消してすっきりさせる

swift xcode

xcode8でAPI叩くとか通信系の対応してるとデバッグエリアになんか色々ノイズが入ってくる。
f:id:mazeltov7:20170118192346p:plain

特に重要そうでもない?ので、できれば消したい。

解決

Xcodeで、Product>Scheme>Edit Schemeを選択、RUNEnvironment VariablesOS_ACTIVITY_MODE: disableに設定する。
で、再度確認すると綺麗に消えてる!

NSCodingでIntをdecodeする際にdecodeObjectじゃなくてdecodeIntegerを使う

swift
    // MARK: Properties
    var hoge: String
    var piyo: Int
    
    // MARK: Types
    struct PropertyKey {
        static let hogeKey = "hoge"
        static let piyoKey = "piyo"
    }
    
    // MARK: Initialization
    init?(hoge: String, piyo: Int) {
        self.hoge = hoge
        self.piyo = piyo
        
        super.init()
        
        if hoge.isEmpty || piyo < 0 {
            return nil
        }
    }
    
    // MARK: NSCoding
    func encode(with aCoder: NSCoder) {
        aCoder.encode(hoge, forKey: PropertyKey.hogeKey)
        aCoder.encode(piyo, forKey: PropertyKey.piyoKey)
    }
    
    required convenience init?(coder aDecoder: NSCoder) {
        let hoge = aDecoder.decodeObject(forKey: PropertyKey.hogeKey) as! String
        let piyo = aDecoder.decodeObject(forKey: PropertyKey.piyoKey) as! Int
        
        self.init(hoge: hoge, piyo: piyo)
    }

とか書いてたら、Intのdecodeのところでthread 1 exc_bad_instruction(code=exc_i386_invop subcode=0x0)が出て落ちた。なにやらnilが返ってきてたぽくて、上記エラーになったみたい?
as! Intas? Int ?? 0とかすると0が返ってきてしまう。入れるところまでは値あるので、なんでかなと思っていじってたら、decodeObjectdecodeIntegerに変えたら正しい値が返ってきた。Intの扱いで普通にdecodeObjectでもできた部分もあったのでなんでだろ。備忘録。

elasticsearchで、marvel, shield, licenseをremoveする

elasticsearch

入れていたmarvel, shieldなどの有料プラグインを外す。(有料プラン1node辺りめちゃ高かったw)

$ /usr/share/elasticsearch/bin/plugin remove shiled
$ /usr/share/elasticsearch/bin/plugin remove marvel
$ /usr/share/elasticsearch/bin/plugin remove license

shield関連で入れていた設定を解除する。

// ssl周りの設定を解除
$ vim /opt/kibana/config/kibana.yml

まぁ、httpsだけに制限しててもいいっちゃあいいかも。

$ service elasticesearch restart
$ service kibana restart