ラベル 開発 の投稿を表示しています。 すべての投稿を表示
ラベル 開発 の投稿を表示しています。 すべての投稿を表示

2015/08/27

Varnish Cash のメモ

正直決行好きなVarnish Cache。

日本だとあんまりはやってない感じもするけど海外勢からの情報はそこそこあったりする。

#私が手を出したものは流行らないというジンクスはもうあまり気にしないことにしました。どうせね~

以下メモです。
本家 https://www.varnish-cache.org/

以下、日本語の情報サイト
http://www.hokahoka.net/amazon-linux-%E3%81%ABvarnish%E5%B0%8E%E5%85%A5.html
https://siguniang.wordpress.com/2014/01/09/notes-on-varnish-cache-validation/
http://infra.makeall.net/archives/1875
http://sharadchhetri.com/2013/09/30/varnish-vcl-file-wordpress/
https://www.varnish-cache.org/trac/wiki/VCLExamples 
http://qiita.com/TsuyoshiUshio@github/items/e3902d33e3867368e695

2014/12/24

Contact Form 7 wpcf7_mail_sent function が動かくなくなった

Contact Form 7 wpcf7_mail_sent function not working – can’t capture posted data 

WordpressのContact Form 7から問い合わせを受ける際についでにvTigerCRMに登録するようにwpcf7_mail_sentを使って引っ掛けたんだけど、Contact Form 7をバージョンアップしたら動かかなくなっちゃいました。

なんでかなと思って調べたらバージョン4.0.3で「$posted_data = $contact_form->posted_data;」では中身取れなくなってます。


前はこんなかんじでとれた
add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
 
function your_wpcf7_mail_sent_function( $contact_form ) {
    
    $posted_data = $contact_form->posted_data;
}
こう修正するととれるようになります。
add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
 
function your_wpcf7_mail_sent_function( $contact_form ) {
    
    $submission = WPCF7_Submission::get_instance();
  
    if ( $submission ) {
        $posted_data = $submission->get_posted_data();
    }
     
    
}
ちょっとハマった。 参考

2014/10/28

Nginx上のWordpressの管理画面にIP制限を設定する その1

こちらでNginx上にWordpressを構築しましたが、今回はWordpressの管理画面にIPを制限を設定したいと思います。

実はWebサーバーでわざわざ設定しなくてもIP制限を書けるためのプラグインも存在します。

最後に軽く紹介しますが、個人的にはセキュリティ系はアプリより下層のレイヤで制御できるならそちらでしたほうがよいと思うのでウェブサーバー側での制御をお勧めします。

Nginx (リバースプロキシ) – Nginx (Web サーバ)で構成している場合ですが、どちらのNginxで制限することも可能ですが、まずは、リバースプロキシに設定を追加します。

こちらで紹介したの設定ファイルに実際に追加したものを下に。 追加した箇所は72行目から79行目までです。
# ドキュメントルート
root   /var/www/html/wordpress;
# インデックスファイル指定
index  index.php index.html index.htm;

# キャッシュしたファイルが保管されるパスと、キャッシュゾーンの名前、容量を指定
# キャッシュ保管場所 /var/cache/nginx
# キャッシュを保存するサブディレクトリ階層の深さ 1:2
# キャッシュゾーン czone メモリの割当量 32m
# ゾーン内に保存できるキャッシュ最大値 256m
# アクセスの無いキャッシュを削除するまでの期間 1440m
proxy_cache_path  /var/cache/nginx levels=1:2 keys_zone=czone:32m max_size=256m inactive=1440m;
# 利用するキャッシュゾーンの名前を指定
proxy_cache czone;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# ステータスコードが通常応答の「200」と、ファイルが存在しない「404」の場合30分間キャッシュを保持
proxy_cache_valid 200 404 30m;

# プロキシサーバ設定
server {
    listen 80 default_server;

    # ドットファイルへのアクセスを禁止、ログへの記録オフ
    location ~ /\. {deny all; access_log off; log_not_found off; }
    # robots.txt へのアクセスはログへの記録オフ
    location = /robots.txt  { access_log off; log_not_found off; }
    # favicon へのアクセスはログへの記録オフ
    location = /favicon.ico { access_log off; log_not_found off; }
    # JavaScript CSS 画像へのアクセスはログへの記録オフ、直ちにプロキシに通しキャッシュ。
    # この期の設定でアクセス元の状態で複数キャッシュを行うが画像ファイルなどは複数キャッシュさせない
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        log_not_found off;
        proxy_pass http://unix:/var/run/nginx.sock;
        expires 7d;
    }

    # プロキシキャッシュ設定
    # 初期値はキャッシュするにセット
    set $do_not_cache 0;
    # .php ファイルへ直接アクセスがあるのは基本的に管理ページのみのためキャッシュしない
    if ($uri ~* "\.php$") {
        set $do_not_cache 1;
    }

    # POST 時はキャッシュしない
    if ($request_method = POST) {
        set $do_not_cache 1;
    }

    # $proxy_cache_key に任意の文字を加えることで別のキーでページをキャッシュ可能にする

    set $proxy_cache_key "$scheme://$host$request_uri";

    # ログイン状態またはコメントを記入したことがあれば、その情報ごとにキャッシュを分ける
    if ($http_cookie ~ "(wordpress_logged_in_|comment_author_)(.*)") {
        set $proxy_cache_key "$2::$proxy_cache_key";
    }

    # 今まで組み立てたプロキシ設定でキャッシュを実行
    location / {
        proxy_no_cache $do_not_cache;
        proxy_cache_bypass $do_not_cache;
        proxy_cache_key $proxy_cache_key;

        proxy_pass http://unix:/var/run/nginx.sock;
    }

#IP制限を追加
    location = /wp-login.php {
       allow xxx.xxx.xxx.xxx;
       allow xxx.xxx.xxx.yyy;
       deny all;

       proxy_pass http://unix:/var/run/nginx.sock;
    }

}


# ウェブサーバ設定
server {
    # ポートを指定
    #listen       80;
    listen unix:/var/run/nginx.sock;
    # WordPress カスタム パーマネントリンク対応
    try_files $uri $uri/ /index.php?q=$uri&$args;

    # PHP-FPM 設定
    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_pass_header "X-Accel-Redirect";
        fastcgi_pass_header "X-Accel-Buffering";
        fastcgi_pass_header "X-Accel-Charset";
        fastcgi_pass_header "X-Accel-Expires";
        fastcgi_pass_header "X-Accel-Limit-Rate";
        fastcgi_read_timeout 1200;
    }

}

次はリバプロ側ではなく、Webサーバー側に設定します。


ちなみにですが、使ったことは無いのですが、特定のIPアドレスから何度もログインしようとした場合に、そのIPアドレスを一定時間ブロックするWordPressのプラグインも存在します。
Limit Login Attempts
管理者側に固定IPアドレスがなくて制限をかけられない場合は、このようなプラグインを使うのもひとつの手かもしれません。

WordpressをNginx1.6.2で構築

WordpressをNginxでサイト構築したのでその設定等のメモ

個人的にはリバプロはVarnish Cacheも設定ファイルが書きやすくて好きでしたが、Nginxも今となっては詳しい解説サイトが多いので非常に敷居が低くなりました。

インストールに関しては他のサイトをご参照ください。

今回の構成は、割りと普通の、Nginx (リバースプロキシ) – Nginx (Web サーバ)という構成。

キャッシュされていないコンテンツがリクエストされた場合はnginx ウェブサーバが対応し、キャッシュを生成します。キャッシュされているリクエストはリバースプロキシが対応します。

Web サーバをNginxするだけでもFastCGIのおかげでしょう、サイトが相当軽くなります。

その恩恵が大きいのが管理画面でしょう。

Quick Cache等のWordpressのキャッシュ系のプラグインを入れれば、いわゆる公開ページは手軽にさくさくになりますが、管理画面はそうもいかず、こちらを高速化するのはなかなか敷居が高いかもしれません。

APC入れたりと根本的にPHP自体を高速に動作させる工夫が必要です。

「AWSでMicroインスタンスでWordpressを構築して公開画面はそこそこ見れる速度になったけど、管理画面が遅くて発狂しそう。。。」という方は是非お試しください。


ちなみにNginxのバージョンは1.6.2です。

ProxyとWebサーバー感の通信はUnix Socketを利用しています。

そんなわけで、設定ファイルを下に。

# ドキュメントルート
root   /var/www/html/wordpress;
# インデックスファイル指定
index  index.php index.html index.htm;

# キャッシュしたファイルが保管されるパスと、キャッシュゾーンの名前、容量を指定
# キャッシュ保管場所 /var/cache/nginx
# キャッシュを保存するサブディレクトリ階層の深さ 1:2
# キャッシュゾーン czone メモリの割当量 32m
# ゾーン内に保存できるキャッシュ最大値 256m
# アクセスの無いキャッシュを削除するまでの期間 1440m
proxy_cache_path  /var/cache/nginx levels=1:2 keys_zone=czone:32m max_size=256m inactive=1440m;
# 利用するキャッシュゾーンの名前を指定
proxy_cache czone;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# ステータスコードが通常応答の「200」と、ファイルが存在しない「404」の場合30分間キャッシュを保持
proxy_cache_valid 200 404 30m;

# プロキシサーバ設定
server {
    listen 80 default_server;

    # ドットファイルへのアクセスを禁止、ログへの記録オフ
    location ~ /\. {deny all; access_log off; log_not_found off; }
    # robots.txt へのアクセスはログへの記録オフ
    location = /robots.txt  { access_log off; log_not_found off; }
    # favicon へのアクセスはログへの記録オフ
    location = /favicon.ico { access_log off; log_not_found off; }
    # JavaScript CSS 画像へのアクセスはログへの記録オフ、直ちにプロキシに通しキャッシュ。
    # この期の設定でアクセス元の状態で複数キャッシュを行うが画像ファイルなどは複数キャッシュさせない
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        log_not_found off;
        proxy_pass http://unix:/var/run/nginx.sock;
        expires 7d;
    }

    # プロキシキャッシュ設定
    # 初期値はキャッシュするにセット
    set $do_not_cache 0;
    # .php ファイルへ直接アクセスがあるのは基本的に管理ページのみのためキャッシュしない
    if ($uri ~* "\.php$") {
        set $do_not_cache 1;
    }

    # POST 時はキャッシュしない
    if ($request_method = POST) {
        set $do_not_cache 1;
    }

    # $proxy_cache_key に任意の文字を加えることで別のキーでページをキャッシュ可能にする

    set $proxy_cache_key "$scheme://$host$request_uri";

    # ログイン状態またはコメントを記入したことがあれば、その情報ごとにキャッシュを分ける
    if ($http_cookie ~ "(wordpress_logged_in_|comment_author_)(.*)") {
        set $proxy_cache_key "$2::$proxy_cache_key";
    }

    # 今まで組み立てたプロキシ設定でキャッシュを実行
    location / {
        proxy_no_cache $do_not_cache;
        proxy_cache_bypass $do_not_cache;
        proxy_cache_key $proxy_cache_key;

        proxy_pass http://unix:/var/run/nginx.sock;
    }

}


# ウェブサーバ設定
server {
    listen unix:/var/run/nginx.sock;
    # WordPress カスタム パーマネントリンク対応
    try_files $uri $uri/ /index.php?q=$uri&$args;

    # PHP-FPM 設定
    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_pass_header "X-Accel-Redirect";
        fastcgi_pass_header "X-Accel-Buffering";
        fastcgi_pass_header "X-Accel-Charset";
        fastcgi_pass_header "X-Accel-Expires";
        fastcgi_pass_header "X-Accel-Limit-Rate";
        fastcgi_read_timeout 1200;
    }

}
いきなり再起動せずに、service nginx configtest で記述ミスが無いか確認しましょう。

次はWordpressの管理画面にIP制限を仕込みたいと思います。

2014/08/15

firefox31でssl_error_cipher_disallowed_for_version

ちょい時間ないのでメモとして。
Firefox31にバージョンをあげたらFirefox31のみSSLで怒られるようになった。

SSL peer selected a cipher suite disallowed for the selected protocol version.
 (エラーコード: ssl_error_cipher_disallowed_for_version)



こちらを見てみると(ざっくりいうと)SSLの設定が甘いというか許可すべきでないcipherを設定してるみたいですね。
対応としては。
  1. disable SSL 2.0をdisable。
  2. TLS 1.0 compressionをdisable,
  3. weak ciphers (DES, RC4)をdisable, prefer modern ciphers (AES), modes (GCM), and protocols (TLS 1.2).
だそうです。

ちなみに対象のApacheのバージョンは2.4.9。

SSLCipherSuiteやSSLProtocolの設定を以下に変更して対象。

SSLProtocol ALL -SSLv2
SSLHonorCipherOrder On
SSLCipherSuite 
ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
上記のサイトにNginxとか色々対応方法がのってますよ。

2014/07/10

Starting httpd: AH02559: The SSLCertificateChainFile directive is deprecated, SSLCertificateFile should be used instead

Wordpressを引っ越すことになりまして、PHPのバージョンとか古いので環境を作りなおすかと。
ついでにApacheも2.4.9へ。
ひと通り設定を終えてドメインを切り替えて、証明書を設定して起動!
そしたら、以下のエラーが。
Starting httpd: AH02559: The SSLCertificateChainFile directive (/etc/httpd/conf.d/ssl.conf:125) is deprecated, SSLCertificateFile should be used instead
調べてみるとApache 2.4.8以降はSSLCertificateChainFileがdeprecatedになったとさ。
これまでの様にSSLCertificateChainFile書くんじゃんくて、SLCertificateFileにサーバ証明書と中間証明書を連結したのを指定するようです。
http://httpd.apache.org/docs/current/mod/mod_ssl.html
はやりなんでしょうか、nginxとかもそうだった気が。
で、以下みたいなコマンドで結合。
# cat server.cer cacert.cer > cert.pem
結合した証明書ファイルは、下記のような構成になります。
-----BEGIN CERTIFICATE-----
[サーバ証明書]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[中間証明書]
-----END CERTIFICATE-----
はい、これでOK。
とおもったら、Andoroidからのアクセスだけが「証明書は信頼される機関からのものではありません」と。。。
そんなわけでジオトラストのこちらでちぇっく。
https://ssltools.geotrust.com/checker/views/certCheck.jsp
OKだけど、中間証明書まだたりないよ的なエラーが。。。
ただ、親切なことにこれを使いな!的な感じで「GeoTrust Global CA」がダウンロードできるようになってます。

こちおらも上で作ったファイルに結合してあげるとAndroidでも無事、鍵が閉じたマークになりました。
画面キャプチャとかとったので、ちゃんと書こうかとおもったけど台風なので帰ります。

2014/06/17

Titanium mobile [end tag name: string is not match the current start tagName:string]

超久しぶりのTitanium mobileネタ。

ちょっと前に作ったアプリを修正する必要があり3.1.2から3.2.3GAへ。

そしたらコンパイルでコケル。 なぜだーと調べてみたらこんなエラー。

end tag name: string  is not match the current start tagName:string 
@#[line:242,col:21]
/Users/hogehoge/Library/Application Support/Titanium/mobilesdk/osx/3.2.3.GA/node_modules/xmldom/dom-parser.js:187
     throw error;
           ^
end tag name: string  is not match the current start tagName:string
そうだ、なんかParserかわったんだっけ。

調べてみると、わかりました。

</string>である場所が</string >>の前にスペースが入っちゃってました。。。

パーサーかえるとかこの手の変更はマジ簡便してほしい。。。

JSONのパースでこけたりしたら想像するだけでうんざり系の対応だな。。。

アプリで対応できるものはよいけど、サーバー側が自分たちの管理している仕組みでなかったりするとえらく大変。

2014/04/20

App Not Setup: The developers of this app have not set up this app properly for Facebook Login.

OneALLというSocialログインのサービスを使って、
Facebookでログインしようとしたら人によっては、以下のエラーが発生する。

App Not Setup: The developers of this app have not set up this app properly for Facebook Login.

なんだよこれ?と調べたところ、「Do you want to make this app and all its live features available to the general public?」のチェックをONにしないとだめらしい。


確かに前はSandboxモードがほにゃららって項目があったけど、それってどこにいったんだ?と思ってたらこれなのね。

Wordpressを引越しというかサーバインスタンスをコピーしたらやること

Wordpressもしょっちゅう触ってるわけではないので、忘れぬようメモ。

Wordpressでステージングを作ろうとインスタンスのスナップショットをとって立ち上げた場合、Wordpressに登録してあるサーバーURlを変更しないた、接続時にコピー元のサーバーにリダイレクトされてしまいます。

回避する方法は二つあるのだけど、とりあえずその一つというか根本的な対応は以下のSQLを実行すること。



SELECT * FROM wp_options WHERE option_name = "home" OR option_name = "siteurl";
UPDATE wp_options SET option_value = "http://引越し後" WHERE option_name = "home" OR option_name = "siteurl"
これで回避できます。

2014/03/27

OpenClassifiedsのインストール時にエラーが出た。

// Sanity check, install should only be checked from index.php defined('SYSPATH') or exit('Install must be loaded from within index.php!'):

//were the install files are located define('INSTALLROOT', DOCROOT.'install/'):

//prevents from new install to be done 
if(!file_exists(INSTALLROOT.'install.lock')) die('Installation seems to be done, please remove /install/ folder'):

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE):

ini_set('display_errors', 1):

include 'class.install.php':

//start the install setup install::initialize():

;$is_compatible = install::is_compatible():

//choosing what to display
//execute installation since they are posting data if ( ($_POST OR isset($_GET['SITE_NAME'])) AND $is_compatible === TRUE) $view = (install::execute()===TRUE)?'success':'form':
 //normally if its compaitble just display the form 
elseif ($is_compatible === TRUE) $view = 'form':

 //not compatible else $view = 'hosting':

 ?>


なんだこれ? と思ったが、php.iniのshort_open_tagをOnにしてあげないとだめなんだね。
まっさらな環境に作ったので設定が漏れてった。

check your php.ini for short_open_tag configuration.
If short_open_tag is set to false change it to true like this:

short_open_tag = On

AWS EC2のLinux タイムゾーンを日本時間へ変更

完全に自分用メモ

EC2のインスタンスを立ち上げたタイムゾーンを日本時刻に設定する。
cp /usr/share/zoneinfo/Japan /etc/localtime

2013/07/28

2013/07/07

[Titanium mobile] Google playでのアルファ版・ベータ版配布機能を使ってみた

Titanium mobileで作成したアプリにてアルファ版・ベータ版配布機能をテストしてみた。
上げ方等は、他のサイトで詳しくかかれているのでそちらで。

私が知りたかったのは、有料アプリをベータ版やアルファ版では無料で提供できるのか?ってことだったのです。

なかなかそこに言及している記述が見当たらなかったので試してみた。

結果としては、だめでした。。。

まだ、ストアにのせる前の状態で価格設定を無料にして、とりあえずβユーザーに使ってもらうっていうのなら可能だけど、既に有料で公開しているアプリにはそれはできないみたいだね。
うーん、iTunes ストアのプロモーションコード的な機能ってPlay storeにはないのかね。

もうちょっと調べるか。

2013/05/08

[Titanium Mobile] AndroidでのsearchBar使用時のfilterAttributeの設定時の注意

久しぶりのTitanium mobile ネタ。
Titanium 3.1.0GAです。

有名な話かもしれないけど、自分用のメモとして。。。

Table に対してsearchBarを設定しようとしたら。

Androidでフィルタリングが動作しない場合が発生してなんだこれはと。

で、しらべてみたところ、filterAttributeの設定の仕方の問題みたいです。

filterAttributeを 'filter' とした場合、

var tableViewRow = Ti.UI.createTableViewRow({filter:'ああああ',...});
だと正しく動きますが、

tableViewRow.filter = 'ああああ';
だと動きません。

iPhoneだと両方問題なく動作します。

これはハマった。。。

2013/03/22

AndroidのバージョンとAPIレベルの関係

自分用メモ。

Android 4でPicker(Titanium.UI.PICKER_TYPE_TIME)がちゃんと動きません。

 詳しくはこちら。 #助かりました。

そんなわけで、AndroidのAPI Levelで挙動を切り分ける必要があったので、
下に調べたものを貼っておきます。


Platform VersionAPI LevelVERSION CODE
Android 4.0.315ICE_CREAM_SANDWICH_MR1
Android 4.0.214ICE_CREAM_SANDWICH
Android 4.0.1
Android 4.0
Android 3.213HONEYCOMB_MR2
Android 3.1.x12HONEYCOMB_MR1
Android 3.0.x11HONEYCOMB
Android 2.3.410GINGERBREAD_MR1
Android 2.3.3
Android 2.3.29GINGERBREAD
Android 2.3.1
Android 2.3
Android 2.2.x8FROYO
Android 2.1.x7ECLAIR_MR1
Android 2.0.16ECLAIR_0_1
Android 2.05ECLAIR
Android 1.64DONUT
Android 1.53CUPCAKE
Android 1.12BASE_1_1
Android 1.01BASE

Google Playで販売したアプリをGoogle Checkoutから返金

Google Playで販売したアプリをGoogle Checkoutから返金処理してみました。

どんな挙動になるのかなと思ったけど、
・アプリは削除されません。

・アプリのアップデートは普通に走ります。

うーむ、これ、安易に返金処理しちゃだめだな~


2012/12/10

[Titanium Mobile]Your app crashed on both Wi-Fi and cellular networks immediately after launch.だって。。。

こちらは会社で申請中のアプリですが、リジェクト二回目です。。。 わかんねー。

実機でちゃんと動くんだけどな。。。

 2.1

We found that your app crashed on iPhone 5, running iOS 6.0.1, which is not in compliance with the App Store Review Guidelines.

Your app crashed on both Wi-Fi and cellular networks immediately after launch.

We have attached detailed crash logs to help troubleshoot this issue. For information on how to symbolicate and read a crash log, please see Tech Note TN2151 Understanding and Analyzing iPhone OS Application Crash Reports.

For discrete code-level questions, you may wish to consult with Apple Developer Technical Support. Please be sure to include any symbolicated crash logs, screenshots, or steps to reproduce the issues when you submit your request. 

For discrete code-level questions, you may wish to consult with Apple Developer Technical Support. Please be sure to:

- include the complete details of your rejection issues
- prepare any symbolicated crash logs, screenshots, and steps to reproduce the issues for when the DTS engineer follows up. 

For information on how to symbolicate and read a crash log, please see Tech Note TN2151 Understanding and Analyzing iPhone OS Application Crash Reports.

If you have difficulty reproducing this issue, please try testing the workflow as described in <https://developer.apple.com/library/ios/qa/qa1764/>Testing Workflow with Xcode's Archive feature".

 #追記です。解決したかも!

とりあえず、Titaniumのビルド時にできる○○○○○.xcodeprojから、Xcodeを起動すると。
で、Xcodeのメニューから product > edit schemeでてくるダイアログの
Run〜(アプリ名)のBulid Configuration をDeveloperに変更して起動する。

そうすると確かに、起動時にエラーとして引っかかる箇所が出てきました。
ログをみると××××.js line 9でERRORみたいなのが書かれてるけど、これTitaniumで編集しているJSファイルではなく、Xcodeで実行?するように最適化されたの中間ファイル的なJSです。
××××.jsなら××××_.jsで探せば出てきます。
場所は/DerivedDataの下にあります。(検索すればすぐなのでパスの詳細は省略)

さー、再申請するぞ!






2012/11/26

[Titanium mobile]アプリ名の変更方法(How to Change the Titanium mobile App Name)

アプリをリリースすることになりましてと、名前が決まりましたー。
それでは名前変更するかとなって、tiapp.xmlの<name>ほにゃらら</name>を変更したら、ビルドする走らなくなる。。。。

海外の方の「Projectごと作りなおせよ、HA!HA!」みたいな書き込みをみて、つくりなおしてみたら、起動しないし。。。

なにそれー。てゆーか、調べてみるとハマった人も多いみたいね。


こ、この感じ久しぶり><

周りに理解してもらえないハマり時間が来たか?とうんざりしてたら、ここに変え方が書いてありました。

https://wiki.appcelerator.org/display/guides/Internationalization

正しくは、アプリ名を他言語対応するためのTipsだけど、作成しているアプリが他言語対応アプリなのでまぁよしと。

iOS用とAndroid用で方法は異なります。

でiOS側の変更方法は、以下の画像のようにi18nの下にapp.xmlを作成。


i18n/ja/app.xmlの中身は、こんだけ
<?xml version="1.0" encoding="UTF-8"?>
<
resources>
   
<string name="appname">CRM Touch</string>
</
resources>
Android用はというと
ビルドするとできる/build/android/AndroidManifest.xmlを
プロジェクト直下の/platform/android/にコピーします。
#フォルダは作成しましょう。

そして、AndroidManifest.xmlのandroid:label=""の部分をandroid:label="@string/app_name"と変更して(2カ所ありました)、i18nの下にstring.xmlに以下を
    <string name="app_name">CRM Touch</string>
を追加。

enやja等複数対応予定ならその数だけ追加しましょう。

これだけです。

[Titanium mobile]Titanium mobileでターゲットのiOSをしぼる方法

tiapp.xmlに以下を追加です。

<ios>
    <min-ios-ver>5.0</min-ios-ver>
</ios>

これだけです。

2012/10/31

[Titanium mobile]Galaxy S3でhasChild等のデフォルトのアイコンが小さすぎる

Android解像度の問題だと思うけど、tableViewRowにhasChildやhadDetailを設定したさいにでてくるデフォルトのアイコンが、Galaxy S3みたいな高解像度のデバイスでつかうと、ものすんごく小さくなってしまって。

えー、これどうすうのと調べたところ "Resources"と同じ階層にある"tiapp.xml"に下記を追加すると解決する。

    <android xmlns:android="http://schemas.android.com/apk/res/android">
        <manifest>
            <supports -screens="-screens" android:anydensity="false">
        </supports></manifest>
    </android>

"<supports -screens="-screens" android:anydensity="false">"を追記するだけでとりあえず解決はしました。

この項目、いろいろ調べてみないとなと。