RVM のアンインストールコマンド名で笑った
なんか iMac 上の RVM の動作が変。もう、開き直ってクリーンインストールすることにした。
RVM のアンインストールコマンドを探してみたら "implode" と一緒に "seppuku(切腹)"があったのには笑った。
3509: implode | seppuku) 3536- source "$rvm_scripts_path/functions/implode"; 3594- __rvm_implode
さっそく切腹。:-)
$ rvm seppuku Are you SURE you wish for rvm to implode? This will recursively remove /Users/watanata/.rvm and other rvm traces? (anything other than 'yes' will cancel) > yes Removing rvm-shipped binaries (rvm-prompt, rvm, rvm-sudo rvm-shell and rvm-auto-ruby) Removing rvm wrappers in /Users/watanata/.rvm/bin Hai! Removing /Users/watanata/.rvm /Users/watanata/.rvm has been removed. Note you may need to manually remove /etc/rvmrc and ~/.rvmrc if they exist still. Please check all .bashrc .bash_profile .profile and .zshrc for RVM source lines and delete or comment out if this was a Per-User installation. Also make sure to remove `rvm` group if this was a system installation. Finally it might help to relogin / restart if you want to have fresh environment (like for installing RVM again).
動作環境
- Mac OSX 10.7.5
- RVM 1.18.21
今更ながら Ruby 1.9.3 インストール
Ruby 2.0 が出てる今日このごろ。ちょい前に会社で作ったアプリの動作環境を作るのに、Ruby 1.9.3 を入れることにした。rvm は既にあるから install を実行。
$ rvm install 1.9.3 Installing Ruby from source to: /Users/watanata/.rvm/rubies/ruby-1.9.3-p392, this may take a while depending on your cpu(s)...
エラーが出たので ~/.rvm/log/ruby-1.9.3-p392/make.log を見てみると、こんな感じ。
[2013-04-02 14:05:32] make CC = clang LD = ld LDSHARED = clang -dynamic -bundle CFLAGS = -O3 -ggdb -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=shorten-64-to-32 -Werror=implicit-function-declaration -pipe XCFLAGS = -include ruby/config.h -include ruby/missing.h -fvisibility=hidden -DRUBY_EXPORT CPPFLAGS = -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/Users/watanata/.rvm/usr/include -I. -I.ext/include/x86_64-darwin11.4.2 -I./include -I. DLDFLAGS = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -Wl,-flat_namespace SOLIBS = ... compiling bignum.c bignum.c:2732:26: warning: while loop has empty body [-Wempty-body] while (--ny && !zds[ny]); ++ny; ^ bignum.c:2732:26: note: put the semicolon on a separate line to silence this warning 1 warning generated. ... compiling st.c st.c:520:35: error: implicit conversion loses integer precision: 'st_index_t' (aka 'unsigned long') to 'int' [-Werror,-Wshorten-64-to-32] i = table->num_entries++; ~ ~~~~~~~~~~~~~~~~~~^~ 1 error generated. make: *** [st.o] Error 1
検索してみたら Ruby Forum に投稿があって、Ruby 1.9.3-p385 以降 + clang 4.2 で出るエラーだとか。clang が 4.1 だと出ないらしいけど、自分の環境は 4.2 でビンゴ。そーですか。
対処方法は?と思ってたら、トリビアル・イシューズ さんに対処方法が紹介されてた。
このエラーは -Wshorten-64-to-32 の警告と警告レベルをエラーとして扱う -Werror により発生する。対応策は単純にビルド時に警告を無視するように指定するのみ。具体的に言うと以下のコマンドを実行してからビルドする。
ruby-1.9.3-p385以降のインストールでバグあり - トリビアル・イシューズ
$ export CFLAGS=-Wno-error=shorten-64-to-32
openssl と readline が古いとダメっぽいとのとなので、ついでに最新版に更新して rvm install 1.9.3 を実行。無事インストールできたよ。:-)
$ export CFLAGS=-Wno-error=shorten-64-to-32 $ brew install readline openssl $ rvm install 1.9.3 $ rvm list rvm rubies ... => ruby-1.9.3-p392 [ x86_64 ]
動作環境
- Mac OSX 10.7.5
- rvm 1.18.21
- homebrew 0.9.4
- clang 4.2
- openssl 1.0.1e
- readline 6.2.4
find でファイル削除
Android SDK Manager で Fetch エラー、まさか cache が原因だったとは。。。
PhoneGap を試すなら Android の実機でも試せるようにしたい。ちなみに PhoneGap 2.4.0 の場合 r21.0.0.rc9 以降じゃないと動かないらしい。
前に入れた ADT は r20.0.1 だし、それじゃバージョンアップと思ったら Failed to fetch なるエラーが出て Android SDK Tools を更新できない。ええーーΣ(゚Д゚)
Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml.xml, reason: File not found
...
Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-7.xml, reason: File not found
パスが変わったのかなと思ったけど addons_list-2.xml や repository-7.xml はネット上にある。同じネットワークにつながってる別 Mac だと Fetch に成功する。試しに Android Developers から最新の android-sdk-r21.1-maxosx.zip を取得して、tools/android を実行してみたけど、やっぱり Fetch できないエラーが出る。どー考えても自分の Mac の環境問題。原因なんだろ?:-(
とりあえず「Failed to fetch ... repository.xml」で検索すると、いくつも対処方法が見つかる。結構、Failed to Fetch はあるみたい。手当たり次第に試してみた。結果はこんな感じ。
1. 設定で Force https:// を適用する
ほとんどのケースはこれ。理由は良くわからないけど https:// だとコケて http:// だと成功するらしい。メニュー [Android SDK Manager > 環境設定]を開いて、Force://https ... にチェックを入れて再起動。→ 失敗。あれ? (T^T)
2. androidtools.cfg にプロパティを定義する
1.の操作をすると ~/.android/androidtools.cfg が生成されて、sdkman.force.http=true として保存される。Talk Android に "(just one line)" とあったので、この1行だけ残して Android SDK Manager を再起動。→ 失敗。1.がダメなんだから動く方が変だよね。 ^^;)>
Make a androidtool.cfg file in ~/.android/ directory, with the following content:
Failed to fetch URL https://dl-ssl.google.com/android/repository/repository.xml
sdkman.force.http=true
(just one line).
3. Android SDK の各バージョンを手動でインストールする
fukushimaのソフト屋さん、Do Design Space さん曰く、ダウンロードできない addons_list.xml や repository.xml に書かれてる内容を読み取って android-sdk-mac/platforms に展開する方法があるらしい。試しに android-sdk-macosx_r20/platforms/* を android-sdk-macosx_r21/platforms 以下にコピーして Android SDK Manager を再起動したら認識された。最終手段はこれだな、と思いつつ保留 ^^;)
4. ADT を zip でインストールする
Android Developers の Troubleshooting に zip ダウンロードした ADT をインストールする手順が紹介してあった。r20→r21 にアップデートできるかなーと思い、Eclipse メニュー [Help > Install New Software] から実行してみたけど r20 のままだった。これも失敗。そもそもインストールした ADT.zip はどこ行った?(T^T)
- Download the ADT Plugin zip file (do not unpack it):
- Start Eclipse, then select Help > Install New Software.
- Click Add, in the top-right corner.
- In the Add Repository dialog, click Archive.
- Select the downloaded ADT-21.1.0.zip file and click OK.
- Enter "ADT Plugin" for the name and click OK.
- In the Available Software dialog, select the checkbox next to Developer Tools and click Next.
- In the next window, you'll see a list of the tools to be downloaded. Click Next.
- Read and accept the license agreements, then click Finish. If you get a security warning saying that the authenticity or validity of the software can't be established, click OK.
- When the installation completes, restart Eclipse.
5. cache/* のオーナー権限を変更する(成功)
~/.andorid/androidtools.cfg を見たときに cache/ があるのを思い出し、中を見てみたら sdkbin-xxx-repository_xml とかどっかで見たような名前のファイルがたくさんある。addons_list.xml や repository.xml は ~/.android/cache に一度保存されるんだね。まさか、と思って ls -l したらオーナーが root になってる。chown でオーナー変更して、Android SDK Manager を再起動したら、、、成功!Σ( ̄▽ ̄) キターーーー!
そーいや、はじめて ADT をインストールしたときに参考にしたサイトでは Android SDK Manager を root で実行しましょ、となってたような記憶が、、、。しばらくしてから android-sdk-macosx 以下はオーナー変更してたけど、まさか ~/.android に悪影響が出てるとは思ってなかった。解決できて良かったよ。 :-)
Sublime Text 2 使ってみよ
PhoneGap の UI が HTML+CSS+JavaScript で書けるのはいいけど、タグをいちいち書くのはめんどい。
後輩くんから Sublime Text で ZenCoding すると楽ちんだよーと教えてもらったので Sublime Text を試してみることにした。:-)
環境構築
こちらさんを参考にさせてもらっています。
- Sublime Text 2ってエディタがすごくイイ。Dreamweaverから乗り換えた時の初期設定とか使い方とかをメモ - Mnemoniqs
- 恋する速度を爆速化。Sublime TextでZen-Codingを使用する際の設定メモ - ウェビメモ
- Sublime Text 2 で Zen Coding (Emmet) - メモログ
まずはこちらから Sublime Text の最新版(2.0.1)をダウンロードする。自動補完機能とか便利な拡張機能を使うには Package をインストールする。
- メニュー[View > Show Console] を選択する。
- 画面下部にコンソールエリアが表示されるので、以下を入力して Sublime Text 2 を再起動する。
import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())
Zen-Coding するには、Emmet という名前のパッケージを追加する。
- Command + Shift + p でコマンドパレットを開き、install と入力する。候補に「Package Control: install Package」が出てくるので、それを選択する。
- コマンドパレットに「Emmet」と入力すると候補に「Emmet」が出てくるので、それを選択する。画面下部のインストール実行中の表示が消えたら完了。
お試し
最初に Syntax を html にする。コマンドパレット(command + shift + p)を開いて、html と入力し、候補から「Set Syntax html」を選択する。エディタに「html:5」と入力し、TAB を押す。そうすると、、、
すげーーーー楽ちん :-)
Zen-Coding の記法を覚える必要があるけど、この効率の良さは感激もんだね!こちらに記法が分かりやすくまとまってるので、この際、覚えてしまおっと :-)
カスタマイズ
Sublime Text は表示形式をいろいろカスタマイズできる。JSON で記述する。設定できる項目はこちら(↓)を参照。
- Sublime Text 2の設定とDiffの取り方 - DevAchieve
- Sublime Text 2 のDefault設定ファイルを眺める - blue_ham_cake1024のブログ
- Sublime Text 2 の設定 - Y.A.M の 雑記帳
メニュー [Sublime Text 2 > Preferences > Settings - User] を開いて、表示形式とかをカスタマイズする。Sublime Text 2ってエディタがすごくイイ… から引用させてもらいました。^^;)
行間とか保存すると即反映されるので、微調整しやすくて良いね。:-)
//フォントサイズ
Sublime Text 2ってエディタがすごくイイ…
"font_size": 13,
//行間
"line_padding_top": 5,
//タブサイズ
"tab_size": 4,
//空白の削除
"trim_trailing_white_space_on_save": true,
//タブやスペースなどの不過視文字を表示(お好みで)
"draw_white_space": "all",
//現在の選択行をハイライト表示(お好みで)
"highlight_line":true,
//自動改行
"word_wrap": true
Weinre でリモートデバッグ
技術評論社の記事いわく PhoneGap のリモートデバッグ用に Weinre を使うと良いとのこと。ワイナリーと読むらしい。まずは入れてみよ。:-)
環境構築
まずは nodejs.org から最新版(0.8.20)をダウンロードする。pkg を実行すると Node.js が /usr/local/bin/nodeに、npm が /usr/local/bin/npm にインストールされる。
ターミナルで npm を実行して weinre をインストールする。
npm install weinre
npm コマンドの実行した場所に node_modules が作成される。その中にある weinre を実行すると、サイトが起動される。
./node_modules/weinre/weinre
2013-02-19T10:20:09.273Z weinre: starting server at http://localhost:8080
http://localhost:8080 にアクセスしてみて、こんな画面(↓)が表示されれば weinre のインストールは完了。:-)
Xcode 側に戻って weinre でデバッグするプロジェクトの www/index.html に次の1文を埋め込む。# 以降は weinre サーバ接続時の識別子になるので、その都度、適当に変更する必要がある、とのこと。
最後にアプリを起動して、Safari から接続する。こんな(↓)の画面が出たらOKっぽい。:-)
タブを切り替えると Firebug っぽいページでHTML要素とかCSSとかを確認できる。
カーソル位置に合わせて 画面の色が変わるところも Firebug っぽい。
URL を間違った場合
URLの #以下のスペルを間違えてたときの画面がこれ。あれ?って悩んでしまった自分がはずかしー。target not connected になったならURLの入力ミスとかを疑いましょ。^^;)>
weinre の安定性?
ログを見たかんじ events.js のバグ?それとも weinre が不安定?もちっと調べなきゃだね。^^;
ともかく weinre が落ちたときはアプリ側も再起動しないと接続できないっぽい。素直にアプリを再接続しましょ。:-)
./weinre 2013-02-21T06:41:19.563Z weinre: starting server at http://localhost:8080 events.js:71 throw arguments[1]; // Unhandled 'error' event ^ --------------------------------------------------------- error: Error: socket hang up --------------------------------------------------------- stack: http.js:1360 - createHangUpError() http.js:507 - OutgoingMessage._writeRaw() http.js:476 - OutgoingMessage._send() http.js:749 - OutgoingMessage.write() http.js:882 - OutgoingMessage.end() response.js:108 - res.send() HttpChannelHandler.coffee:91 - handleGet() MessageQueue.coffee:78 - MessageQueue._updated() node.js:244 - startup.processNextTick.process._tickCallback()
おまけ
2.3.0 から Cordova.plist が config.xml に変更されてた
技術評論社の記事は2.0.0?での執筆らしく Cordova.plist にパラメータを追加してね!と書いてあるけど、2.3.0 から plist が config.xml に変更になったので plist はない。ちょいと探してしまった。^^;)>
外部リソースをロードするため,PhoneGapプロジェクトのデフォルトの設定ではwhitelist rejectionが発生して動作しません。Xcodeで該当のプロジェクトを開き,ResourcesのCordova.plistの,ExternalHostsに追記を行う必要があります。
第3回 weinreを使ったiOS/Androidアプリの動作検証
さらに 2.3.0 以前だと ExternalHosts に localhost とかエントリを追加する必要があったらしいけど、2.3.0 以降はデフォルトがワイルドカード(全部OK)になったらしく、まんま接続されるようになったらしい。
By default the external hosts are wild-carded so you should be able to connect to any host. There are further configuration options via the config.xml.
ExternalHosts in Dreamweaver App
PhoneGap セットアップ
まずは環境構築から。iOSでいってみよ。PhoneGap サイトにある通り進めるだけで良さげ。:-)
iOSの場合、PhoneGap2.0.0 からいくつか環境制約があるらしい。詳しくは技術評論社のこちらを見てね。抜粋部分だけ引用させてもらいます。^^;
第1回 PhoneGap/Cordovaとは - PhoneGap 2.0.0の変更点
- Xcodeテンプレートを使用しないように(iOS)
- 専用のコマンドラインツールを使用してXcodeプロジェクトを作成するように(iOS)
- コマンドラインからプロジェクトのビルド,エミュレータ起動,各種ロギングがおこなえるように(iOS, Android, BlackBerry)
- サポートするiOSバージョンが4.2以上に。iOS 3はサポート対象外となる(iOS)
- 必要動作環境のOSがLion (10.7)およびMountain Lion (10.8)のみに。Snow Leopard(10.6)はサポート対象外となる(iOS)
- Cordova WebViewサポート(iOS)
- Cordovajs導入,プラットフォーム間で統一したJavaScriptをサポート
- WeinreをNode Package Managerに移行
- Windows Phone正式対応
環境構築
まずは Xcode に Command Line Tools を入れる。
- メニューで Xcode から "Preference" を開き、Download を選択する。
- Components タブになる Command Line Tools 行の Install ボタンを押す。
次に Apache CORDVA の最新版(2.4.0)をダウンロードする。cordova-2.4.0.zip を解凍した中にプラットフォーム別アーカイブがあるので cordova-ios.zip を解凍する。
続いてプロジェクトを生成する。cordova-ios/bin に移動して、create コマンドを実行する。
./create [project location] [package name] [projectname]
project location : プロジェクト生成先ディレクトリ
package name : パッケージ名(バンドル名)
project name : プロジェクト名
こんな感じ。
./create ~/work/PhoneGap/iOS/HellowCordova com.sample.ios.HelloCordova HelloCordova
指定したディレクトリ内に .xcodeproj ができるので Xcode を起動する。
open ~/work/PhoneGap/iOS/HellowCordova/HelloCordova.xcodeproj
そのまま実行。こんな画面が表示されれば、最低限の環境構築は OK。iPad の実機で試そうと思ったら iOS Developer Program の期限が切れてた。ちょいと後回し。^^;)
不具合?
iPhone Simulator で動作はしてるんだけど、libCordova.a が赤になってる。あと同じ理由かもしれないけど Validate Project Settings で警告が出てる。Validate Project Settings の方は勝手に修正してくれる見たいなので適用。libCordova.a の方は Stack Overflow とかでいくつか対処方法が出てるみたいだけど、なんか直らない。しばらく放置してみる。キモい。 :-(
環境
- Mac OSX 10.7.5
- Xcode 4.6
- Cordova 2.4.0