2013年4月30日火曜日

Titanium CLIでAndroid向けにCompile(Build)と実機でDebug

titanium-cli_android_debugiOS向けの開発が一段落したのでAndroid向けに作業し始めたときの覚書。

環境: Mac OS X 10.8.3, Titanium SDK 3.1.0.GA, Android SDK Platform-tools 16.0.2

公式ドキュメントを参考に。

 

とりあえずコマンドオプションをAndroidプラットフォームに向けてビルドしてみると下記エラー。
$ titanium build -p android --log-level trace --target device

[ERROR] Unable to detect Android SDK targets.

「--adnroid-sdk」のオプションを付けても同じエラー。先に「setup」しないとダメらしい。
$ titanium setup

Path to the Android SDK: (this is needed for building Android apps) /Applications/android-sdk-macosx

設定ファイルは~/.titanium/config.jsonに保存された。

 

Android実機にインストールするときには
設定 → セキュリティ → 提供元不明のアプリ
設定 → 開発者向けオプション → USBデバッグ
がオンになっていないと認識してくれないので注意。

 

KichinSinkで試してみる。
$ titanium clean
$ titanium build -p android --log-level trace --target device

実機でconsole.logの出力を監視したい場合はAndroid SDKのadb(Android Debug Bridge)を使う。

別コンソールを起動して
$ cd /Applications/android-sdk-macosx/platform-tools/
$ ./adb -d logcat | grep -G '\(TiAPI\)\|\(TiApp\)'

 

 

< Related Posts >

2013年4月26日金曜日

[Titanium Mobile] Titanium.Utils.base64encodeに日本語を与えると正しく変換できない

titanium_base64encodeアプリからPHPにPOSTした際にjson_decodeがたまに失敗するので原因を調査。

環境: Titanium SDK 3.0.2.GA

デコードすると、文字列が途中で切れる感じ。SDK 3.1が出たけど直っているか試してない。

参考にしたのは下記サイト。

バグらしいので、下記サイトで公開されているのを利用。

 

< Related Posts >

2013年4月25日木曜日

[Titanium Mobile] Facebook Moduleを使ったLoginが失敗する

titanium_facebook_sso Titaniumには、Facebookのアカウントを使ったログインやウォールへの投稿を簡単に実装できるモジュールがある(SDK 3.1からモジュール化した)。Facebookモジュールは公式ドキュメントが詳しい。

これを使ってFacebookのアカウントを使ってログインする仕組みを開発しているときに、なぜかiPhone 4Sで認証が完了しない。

ポップアップ(forceDialogAuth=true) → Facebookのログイン画面 → ログイン後画面が白くなって先に進まない

iPod touchだと問題なくできる。自分の環境ではiPod touchしかないのでデバッグできない(再現しない)ので困った。ちなみにエミュレータ上では問題なく成功する。

環境: Titanium SDK 3.1.0.GA, iPod touch(iOS 6.1.3), iPhone 4S(iOS 6.1.3)

調べてみるとiOS6だと以下のことに注意と公式ドキュメントにも書いてある。

 

  1. Facebookに登録したアプリのバンドルIDとTitaniumのapp id(tiapp.xmlの「id」)が一致している必要がある。image
  2. iOS 6以外は動かない。iOS 5の場合はforceDialogAuth=trueで処理する必要がある。
  3. iOSデバイス側の設定 > Facebook でアカウントを登録しておく必要がある。(→ 登録してなくても成功した) 
  4. 「forceDialogAuth」はfalse
  5. permissionsプロパティに含めることができない設定がある。詳しくは公式ドキュメントで。
  6. 書き込み権限を取得するには「reauthorize」を使う必要がある。

 

ちなみにこの技術はFacebookのSingle Sign-On (SSO)と呼ばれている。

 

iOS6の場合は「forceDialogAuth=false」でFacebookアプリの「バンドルID」がキーポイントの様子。

なるほどねーと実装してみたけどやはりiPhone4Sだと動かない。

まとめると

  • iPhone4Sの場合、インストールされているFacebookアプリが起動して認証まで表示されるけど、「OK」を押しても画面が白いまま。元のアプリに戻らない。
    このiPhone4Sは「設定 > Facebook」でサインインしていない状態。普通の人は気付かずに設定していないことがほとんどらしい。
  • 「設定 > Facebook」からサインインしたiPod touch(iOS 6.1.3)は動いた。Facebookアプリが起動せず認証のアラートが表示されるのみ。
  • iPod touchでも「設定 > Facebook」でログアウトすればiPhone4Sと同じ現象になる(Facebookアプリに移動するけど戻ってこれない)。
  • KichenSinkだとFacebookアプリで認証し終わったあと、ちゃんと元のアプリに戻ってくる。

 

試行錯誤の結果。解決方法は下記設定をtiapp.xmlに記述する。

<property name="ti.facebook.appid">FACEBOOK_APP_ID</property>

これで、Facebookアプリで認証後に戻ってくるようになった。

KichenSinkだとtiapp.xmlにこの設定がないので分からなかった。

 

その他、分かったこと。

  • Facebookアプリ管理画面の「App Type」は「ウェブ」でも動いた。
  • 「iPhoneアプリストアID」も未入力でも大丈夫。
  • iOS Dev Centerで固有のApp IDを設定してなくても関係ない。
  • エミュレータ上でも設定がちゃんと出来ていれば、Safariで認証して戻ってくる。
  • 「App ID」に対して「バンドルID」は一意になるようにしたほうがいいみたい。
    開発用とデモ用で同じ「バンドルID」を使っていたら、ログイン出来なくなってハマった。

 

Webで検索しても「Bundle IDを設定すれば動く」という情報だけだったので1日ぐらいハマった。

 

< 2014/02/13 Modified >
最新にアップデートしてみると下記エラー

The operation couldn't be completed. (com.facebook.sdk error 5.)

環境:Titanium SDK 3.2.1 SDK, Facebook Module iOS:3.1.1 Android:3.0.2

試したこと

  • forceDialogAuth = trueにしないと動かなかった
  • Facebook Dev Centerのアプリ → 設定で「iPhone Store ID」に「0」を入力
    画面更新すると何も表示されない。

 

 

< Related Posts >

2013年4月24日水曜日

Googleの検索結果の自分の写真が著作情報として表示されるようになった

profile-image_change いきなりGoogleから「Google の著者情報プログラムへようこそ」というメールが来た。

このブログが検索結果にヒットすると著作情報が表示されるようになったらしい。

image

最近ネコの画像から自分の写真に変えたので、それが原因かな?

自分が検索しているときに何となく写真が出ているのは閲覧を避ける傾向にあったので、表示されてもあまり嬉しくない。

表示されたい方は公式サイトを参考に。

 

< Related Posts >

2013年4月22日月曜日

MacPortsを使って特定のバージョンをインストールする(nodejs編)

macports_nodejs_version Titanium SDK 3.1がリリースされたので、何となくnode.js自体をアップグレードしたら動かなくなったときの覚書。

環境: Mac OS X 10.8.2, Titanium SDK 3.1, node.js 0.8.22, npm 1.2.18

参考にしたサイトは下記

 

まずはMacPorts自体を最新にする。
$ sudo port selfupdate
$ sudo port -d sync

何も考えず全てアップグレードしてみる。
$ sudo port upgrade outdated

するとnodejsがv0.10.4とnpm 1.2.18にアップグレードされてTitanium関係のコマンドが動かなくなった。

インストールされたソフトを一覧
$ sudo port installed

古いバージョンにスイッチする
$ sudo activate nodejs @0.8.16_0+python27+ssl

せっかくなのでnodejs v0.8系の最新をインストールしてみる。ChangeLogはGitHubのwikiにある。

MacPorts公式リポジトリから「nodejs 0.8.22」で検索。

Portfileのリビジョン番号が「103783」とわかる。

ダウンロードしてインストール
$ svn co -r 103783 http://svn.macports.org/repository/macports/trunk/dports/devel/nodejs/
$ sudo chown -R macports:macports nodejs
$ sudo mv nodejs/ /opt
$ cd /opt/nodejs
$ sudo port install

確認
$ sudo port installed nodejs

v0.10.4はアンインストール。インストールディレクトリも削除。
$ sudo port uninstall nodejs @0.10.4_0+python27+ssl
$ cd
$ sudo rm -rf /opt/nodejs/

 

nodejs 0.8.22に対応するnpm 1.2.14にダウングレード。

下記エラーが出たのでまずは一旦npmを全部アンインストールすることにした。

Error: org.macports.activate for port npm returned: Image error: /opt/local/lib/node_modules/npm/doc/cli/global.md already exists and does not belong to a registered port.  Unable to activate port npm. Use 'port -f activate npm' to force the activation.
To report a bug, follow the instructions in the guide:
http://guide.macports.org/#project.tickets
Error: Processing of port npm failed

$ sudo port uninstall npm @1.1.62_0
$ sudo port uninstall npm @1.2.18_0

npm関連ファイルを削除。
$ sudo rm -rf /opt/local/lib/node_modules/npm

nodejsと同じようにインストール
$ svn co -r 103782 http://svn.macports.org/repository/macports/trunk/dports/devel/npm/
$ sudo chown -R macports:macports npm
$ sudo mv npm/ /opt
$ cd /opt/npm
$ sudo port install

nodejs v0.10.4がインストールされたので、削除
$ sudo port activate nodejs @0.8.22_0+python27+ssl
$ sudo port uninstall nodejs @0.10.4_0+python27+ssl

npmを最新版に
$ sudo npm -g update

バージョンを確認してみる。
$ npm -v

1.2.18になってた。。。ので、この作業は必要ないかも?

 

環境が整ったので、いつものようにTitaniumプロジェクトをコンパイルしてみる。念のためbuild以下を削除する。
$ cd Documents/hoge_project
$ rm -rf build/iphone
$ titanium build -p ios --log-level trace

tiapp.xmlを下記のように変更するのを忘れずに。

<sdk-version>3.1.0.GA</sdk-version>

 

 

< Related Posts >

2013年4月14日日曜日

[xyzzy]Titanium Mobile開発するときのoutline-tree2用正規表現

何度もEmacsに乗り換えたいと思いながら未だにxyzzyを使い続けてる。。。

最近はTitanium Mobileを使ったiOSアプリ、Androidアプリを開発しているので、その時に設定した関数(メソッド)一覧を出力する正規表現の覚書。

設定方法は前の記事が詳しい。

単純に「prototype」をキーワードとして一覧にする正規表現はこれ。

\(\.prototype\.\)\([A-z]+\)

これだけで十分分かりやすい。

image

書き方は

function Detail() {
};

Detail.prototype.window = function() {
};

こんな風に統一する必要がある。

Lisp用の正規表現は下記を参考に(文字化けする場合はエンコードをeuc-jpにする)。

 

< Related Posts >

2013年4月12日金曜日

Gmail(Google Apps)経由でメールを送信するPostfixのSMTP設定

postfix_smtp_gmail 自宅内で開発している際にLAN内のLinux Serverからメールが送れなかったので、Gmail経由で送信するようにしたときの覚書。

環境:CentOS 5.9, Postfix 2.3.3

参考にしたのは下記ブログ

 

今使っているメールサーバがPostfixか確認する
# alternatives --display mta

変更する場合は
# alternatives --config mta

Sendmailを使ってた場合はchkconfigも忘れずに
# chkconfig --add sendmail
# chkconfig sendmail off
# chkconfig postfix on

Postfixの設定ファイルを編集。
# vi /etc/postfix/main.cf

myhostname = dev.hoge.net
mydomain = hoge.net
myorigin = $mydomain
inet_interfaces = localhost
mydestination = localhost.$mydomain, localhost
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt

ログインユーザー情報ファイルを作成
# vi /etc/postfix/sasl_passwd

[smtp.gmail.com]:587 info@hoge.net:(password)

Google Appsなら送信用のユーザーを作ってもいいかもしれない。

ファイルのハッシュ化、権限変更してPostfix再起動
# postmap /etc/postfix/sasl_passwd
# chmod 600 /etc/postfix/sasl_passwd
# /etc/rc.d/init.d/postfix restart

送信テスト
# mail hoge@gmail.com

Subject: test
testhoge
.
Cc:

メールログを確認
# tail -f /var/log/maillog

メールキューの確認
# mailq

送信出来なかったキューの削除
# postsuper -d ALL

 

< 2014/07/02 Modified >
CentOS6 minimalをインストールした環境で試すと下記エラー

Jul  2 15:42:01 hoge postfix/smtp[9488]: AD30DA000: SASL authentication failed; cannot authenticate to server smtp.gmail.com[xxx.xxx.xx.xxx]: no mechanism available
Jul  2 15:42:02 hoge postfix/smtp[9488]: warning: SASL authentication failure: No worthy mechs found

ライブラリをインストールすると大丈夫。
# yum install cyrus-sasl-plain cyrus-sasl-md5

 

 

< Related Posts >

2013年4月5日金曜日

Amazon EC2の環境にALMiniumを利用してRedmineをインストール

amazon_ec2_redmine 今までSubversionとMS Excelでやってきたプロジェクト管理をGitとRedmineでやろうと設定した覚書。

環境:Amazon Linux AMI 2013.03, Redmine 2.2.3, ruby 1.9.3

RedmineのインストールはALMinumを利用すると一発で完了する。Amazon AMIにも対応しているので、数行のコマンドを打つだけで後は自動でやってくれる。詳しくは前の記事で。

 

事前準備

  • スナップショットを取っておく
  • ホスト名(アクセスするためのURL)を決めておく

 

設定内容

SSL(https)サポートを有効にしますか?(y/N) N

(メール設定)番号選択: 1

Jenkinsをインストールしますか?[y/N]y

アプリケーションを動作させるためにセキュリティの設定を行いますか?[Y/n]Y

 

メール送信はGoogle Appsを使うことにした。設定方法は下記参照。

 

 

< Related Posts >

2013年4月4日木曜日

Amazon Route 53を利用したDynamic DNSを構築

amazon_route53_dynamic-dns 自宅のフレッツ光で固定IPを取得しようとすると月額4725円(wakwak)かかるので、開発サーバはAmazon Route 53を利用したDynamic DNSを構築することにした。

環境: CentOS 5.9

参考にしたのは下記ブログ

 

 

1.Amazon Route 53でドメイン名を追加

Route 53にアクセス。

Hosted Zones → Create Hosted Zone

ネームサーバの変更はRecord Setを編集してからにする。

 

 

2.Record Setの編集(移行)

Name Serverの変更がインターネットに伝搬するまで時間が掛かる(1時間ぐらいで反映された)ので、Record Setの登録をしておく。

この辺はExampleを見れば大して移行は難しくない。

Google Apps用のtxtレコードはダブルクオーテーションで囲む必要がある。spfとDKIMは改行して登録する。

image

 

 

3.確認。ネームサーバの変更

LinuxまたはMacでnslookupを打って確認してみる。
# nslookup -type=ANY -timeout=10 hoge.net ns-295.awsdns-36.com

下記サイトでも確認できる。

 

ドメインを選択して表示される「Delegation Set」をレジストラに登録する。

ちなみに私はvalue-domainを使っている。既存のName Serverは全て削除して登録。だいたい反映されるまで1時間ぐらい掛かった。

 

 

4.認証ツールのインストール

今度はLAN内の開発用サーバで作業。ちなみにこのサーバはVMware Fusion上のCentOS5。

Amazon Route 53にアクセスするために認証ツールをダウンロードする。ここから。
# wget http://awsmedia.s3.amazonaws.com/catalog/attachments/dnscurl.pl
# chmod +x dnscurl.pl
# mkdir /opt/software/route53
# mv dnscurl.pl /opt/software/route53/

AWSのアカウントコンソールでアクセスキーを生成。アクセスキーIDとシークレットアクセスキーを設定ファイルに記述。

# vi ~/.aws-secrets

%awsSecretAccessKeys = (
    "my-aws-account" => {
        id => "0F1V9UKMN23IEXAMPLE2",
        key => "lkTwZRalREYSU7lbSS5VoUhdYREcwsasEXAMPLEQ",
    }

# chmod 600 ~/.aws-secrets

動作に必要なモジュールをインストールする。
# yum install perl-Digest-HMAC perl-XML-XPath

試しに動かしてみる。
# /opt/software/route53/dnscurl.pl --keyfile ~/.aws-secrets --keyname my-aws-acc-- -v -H "Content-Type: text/xml; charset=UTF-8" https://route53.amazonaws.com/2010-10-01/hostedzone

なんとかく動けば成功。

 

 

5.DNSレコードを更新するスクリプト設置

「*.dev」のようなワイルドカードにも対応するスクリプトをForkして修正した。ここから。
# wget https://gist.github.com/DaikiSuganuma/5308558/raw/e077eb3ffd1d877d5ef952039a28f32cb75c06d6/route53DynDNS.bash
# chmod +x route53DynDNS.bash
# mv route53DynDNS.bash /opt/software/route53/

設定する
# cd /opt/software/route53/
# vi route53DynDNS.bash

## Location of the dnscurl.pl script
DNSCurl="/opt/software/route53/dnscurl.pl"
## The host name you wish to update/create
myHostName="*.dev"
## Zone/domain in which host (will) reside(s)
myDomainName="hoge.net"

「*.dev」を適当な値に変えておいて、正常に更新されるか試してみる。
# route53DynDNS.bash

 

 

6.cronに登録

とりあえず30分間隔で更新するよう設定
# vi /etc/cron.d/route53

#
# cron-jobs for amazon route 53
#

MAILTO=""

*/30 * * * * root /opt/software/route53/route53DynDNS.bash

 

ルータのNAT(NAPT)設定も忘れずに。

利用料金はまだ無料期間のため、1年後ぐらいに更新予定。

 

< Related Posts >

2013年4月1日月曜日

Amazon EC2にSquid(Proxy Server)を設定してLocal Userで認証

amazon_ec2_squid_install Amazon EC2にSquidをインストール、設定したときの覚書。EC2にSSH接続するまでは前の記事を参考に。

環境:Amazon Linux AMI(Region:Oregon) 2013.03, Squid 3.1.10

 

 

1.インストール

rootになっておく
# sudo su
# yum install squid

 

 

2.設定

今回はローカルユーザー(Linux User)で認証するためPAM(Pluggable Authentication Module)認証を使う。

# vi /etc/squid/squid.conf

auth_param basic program /usr/lib64/squid/pam_auth
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server

acl password proxy_auth REQUIRED
http_access allow password

logformat squid %tl %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt

上記設定を「http_access deny all」の前あたりに挿入。

一応ポート番号も変えとく

http_port 1234

EC2の場合は管理画面の「Security Groups」から使用するポートを登録すればOK。iptablesを設定する必要がない。

 

 

3.Linux Userを使うためのおまじない

Linux Userを使うためにはchmodする必要があるらしい。詳しくは下記

squid : Optimising Web Delivery

# chmod u+s /usr/lib64/squid/pam_auth

 

 

4.ユーザーの作成とSquid起動

Linux Userの追加
# adduser -s /sbin/nologin daiki
# passwd daiki

Squidを起動して、自動起動登録。
# /etc/rc.d/init.d/squid start
# chkconfig squid on

 

 

< Related Posts >

Related Posts Plugin for WordPress, Blogger...

Blog Archives