@toshiyuki83 Webサービス更新履歴&技術情報

PHP(FuelPHP)とかJavaScript(TitaniumMobile)とか、Webサービス情報など

Titanium MobileでiOS4とiOS5を分岐させる方法 #TitaniumJP

Titanium Mobile側の仕様かiOS側の仕様はわかりませんが、LabelのテキストでiOS4とiOS5の改行幅が違ったり、表示に差があるときがあります。


Titanium Mobile入門記事や本にはiOSとAndroidの分岐は必ず載っているのですが、iOSのバージョンによる分岐の日本語記事が見当たらなかったので、記載させていただきます。


(Titanium Mobile本第一弾の巻末リファレンスのTi.platformの項目にも抜け落ちていました・・・)

var tiPlatform = Ti.Platform.version;
var tiPlatformParseFloat = parseFloat(tiPlatform);

if(tiPlatformParseFloat >= 5){
	alert('iOSのバージョンは5.0以上です!');
	alert('正確には' + tiPlatform + 'です!');
}else if(tiPlatformParseFloat < 5){
	alert('iOSのバージョンは5未満です!');
	alert('正確には' + tiPlatform + 'です!');		
}else{
	alert('iOSのバージョンは未知のバージョンです!');
	alert('正確には' + tiPlatform + 'です!');
};



・parseFloat()をかけて、数値型に変換しているのは、iOSの"4.3.2"のように数値型と判別されないバージョン値があるためです。
・私、JavaScriptがまだ初級者のため、記載方法でまずいところがあれば、ご指摘いただけますと助かります。
@TeamMOSA2さんにご指摘いただき、修正しました。ありがとうございました!

WebViewで背景を透明にする方法 #TitaniumJP

createWebViewでbackgroundColorを0に指定する。これでcss3を利用したリッチな表現が可能になる。


var ***********Web = Ti.UI.createWebView({
    url:'/ui/***********.html',
    backgroundColor:0
});

Titanium Mobileはネイティブのパーツ描写と比べて、WebViewのhtml描写がはっきりと遅いとわかるので、極力ネイティブで描写しつつ、パーツでWebViewを使うのがいと思います。


※当初、html側のCSSで背景を透明しようと思ったけど、できなかった。

error: use of undeclared identifier 'UIRemoteNotificationTypeNewsstandContentAvailability と出るエラー #TitaniumJP (Titanium SDK 2.0.1.GA2)



・環境
Xcode 4.3.2 (以前は4.1)
Titanium SDK 2.0.1.GA2 (以前は1.8.2)
Titanium Studio 2.0
Mac OS 10.7.3 Lion (Snow leopard機にLionを)



Titanium Mobile2.0がリリースされたということで導入。1.8.2時は無事動いたのだが、どこからかのタイミングで下記ののようなエラーがでてビルドできなくなる現象に。



[ERROR] /Users/timothy/Documents/Titanium Studio Workspace/Scratch/build/iphone/Classes/NetworkModule.m:252:44: error: use of undeclared identifier 'UIRemoteNotificationTypeNewsstandContentAvailability' [2]
[ERROR] /Users/timothy/Documents/Titanium Studio Workspace/Scratch/build/iphone/Classes/NetworkModule.m:304:33: error: use of undeclared identifier 'UIRemoteNotificationTypeNewsstandContentAvailability' [2]
[ERROR]
[ERROR] Error: Traceback (most recent call last):
File "/Library/Application Support/Titanium/mobilesdk/osx/2.0.1.v20120410131722/iphone/builder.py", line 1318, in main
execute_xcode("iphonesimulator%s" % link_version,["GCC_PREPROCESSOR_DEFINITIONS=__LOG__ID__=%s DEPLOYTYPE=development TI_DEVELOPMENT=1 DEBUG=1 TI_VERSION=%s %s %s" % (log_id,sdk_version,debugstr,kroll_coverage)],False)
File "/Library/Application Support/Titanium/mobilesdk/osx/2.0.1.v20120410131722/iphone/builder.py", line 1224, in execute_xcode
output = run.run(args,False,False,o)
File "/Library/Application Support/Titanium/mobilesdk/osx/2.0.1.v20120410131722/iphone/run.py", line 41, in run
sys.exit(rc)
SystemExit: 65

※自分の環境ではエラーを回避できたため。上記エラーメッセージは#TIMOB-8769] iOS: App build fails on Snow Leopard/iOS 4.3 configured machine - Appcelerator JIRAからの抜粋です。


※たしかTitanium Studio 2.0、Titanium SDK1.8.2、Xcode4.1時にエラーが最初に出ており(そのときは上記エラーの2.0.1というところは1.8.2でした)、Xcode的なエラーかと思い、Xcode4.3にあげました。しかし、まだエラーが出るので、Titanium SDK 2.0.1.GA2にあげました。しかし、まだエラーで表示したのが、上記のようなエラーでした。(正確にどこからエラーかはわからず、すみません)


エラーメッセージでググったところ、Build Error with Titanium SDK 2.0.1 & iOS SDK 4.2 » Community Questions & Answers » Appcelerator Developer CenterというAppcelerator公式のQ&Aコミュニティがありましたが、ここでも解決策が提示されていません。(私の英語力ではわかりませんでした)


引き続き、探していると、下記のページに解決策がありました。
#TIMOB-8769] iOS: App build fails on Snow Leopard/iOS 4.3 configured machine - Appcelerator JIRA


書いてあるのですが、私のような英語力が乏しい人のために日本語で説明しますと、
1.ASIHTTPRequest.hをMacの検索機能か何かで探す。
2.ASIHTTPRequest.hファイルを開く。
3."#ifndef __IPHONE_3_2"と書いてあるとこがあると思うので、"#ifndef __IPHONE_4_0"の#endifの下に下記コードを挿入する。


#ifndef __IPHONE_5_0
  #define __IPHONE_5_0 50000
#endif


このファイルを保存すると、ビルドできるようになった思いますが、いかがでしょうか。


※注意:この方法だと、clean毎に該当ファイルが消されるので、clean毎に記載しなければならないです。どなたか根本的な解決方法わかる方いらっしゃいましたら、教えていただけると助かります。

Titanium Studioでファイルを保存すると、該当ファイルが閉じ、App Explorerがおかしくなる状態

タイトルのことが起きまして、Titanium Studioでファイルを保存すると、保存したファイルが閉じて、App Explorer(左側のツリー)のツリー表示が閉じられ、瞬時にすぐ展開されます。

原因ですが、手動クリーンしたいため、buildフォルダのiphone以下を削除してることにありました。

削除しきればいいのですが、削除作業が継続中で確認ダイアログを見落としたままの状態でした。「●●のファイルが消せません」みたいなダイアログだったと思います。

この状態のまま、ファイルを保存すると、タイトルのことが起こりました。確認ダイアログを消して、build以下のフォルダを正しい状態にすれば大丈夫だと思います。

Titanium MobileにAdmobを導入する方法(2012年3月) #TitaniumJP

無料のiPhone向けアプリを作る場合、マネタイズは様々な方法がありますが、最もポピュラーですぐ思いつくものとして、「広告」があります。私も「広告」をマネタイズの第一に検討しており、その際、最もベターなアプリ配信広告としては「AdMob」のようですので、今回、Titanium MobileにAdmobを導入した手順や、レポートを記載させていただきます。


私のTitanium SDKバージョンは1.8.2です。


AdMobの他にもアプリ内広告はたくさんありますが、Titanium Mobile導入の際には一度、モジュールを経由させないと、組み込むことはできず、AdMobはappcelerator公式のモジュールも含め、多数のモジュールがありましたので、今回、AdMobにいたしました。


Titanium MobileにAdMobを導入する他記事はありましたが、他記事が古いせいもあり、自分の導入手順と、若干手順が違いましたので、改めて書かせていただきます。

1.AdMobへの登録
AdMob


AdMobの登録方法は簡単です。上記URLにアクセスし、必要情報を入力して登録してください。まだアプリを作っていない状態でも登録可能です。サイトを登録する際、支払い情報を登録する必要がありますので、Paypalアカウントも作っておきましょう。Paypal以外にも小切手の方法がありますが、Paypalのほうが手数料の面から、良いらしいです。詳しくは下記記事をご覧下さい。


Androidアプリで広告収入を得れるAdMobへの登録方法 | mucchinのAndroid戦記


2.パブリッシャー IDを取得
アプリを登録すると、パブリッシャー IDという英数字混ざったIDが発行されますので、メモしておきます。


3.公式モジュールをダウンロード
appcelerator社が配布しているモジュールがあるので、ダウンロードします。


この画面にある「ti.admob-iphone-1.2.zip」のみ(※)をダウンロード


※本当は全てダウンロードしたほうが良いかもですが、「ti.admob-iphone-1.2.zip」のみでひとまず動きました。


参考・titanium_modules/admob at master · appcelerator/titanium_modules


4.「ti.admob-iphone-1.2.zip」を解凍します。


5.「module」をTitanium Mobileのプロジェクトのフォルダに入れる
解凍すると、moduleというフォルダができたと思います。
今制作しているTitanium Mobileでmoduleを初めて使う場合は、このmoduleフォルダをそのままResourcesフォルダがある同じ階層に入れます。


この説明でピンとこない方はKitchenSinkのフォルダ階層を参考にしてください。ここにあるmoduleフォルダと同じようにすればいいです。


appcelerator/KitchenSink


module > iphone > ti.admob > 1.2 > (省略)


というように入れば大丈夫だと思います。


6.tiapp.xmlに記述を追加
tiapp.xmlの最後のほうにあるのところに、

<modules>
        <module version="1.2">ti.admob</module>
</modules>



を追加します。


※なければ

7.AdMobを呼び出して、表示するコードを記述
コードにAdMobを呼び出して、表示するコードを記述します。下記のコードはiphoneアプリで広告入れるならやっぱadmobで決まりだね! - まんとるぽっと - ネットとゲームと秋葉原からコードを引用させていただいています!

// 広告枠定義
Titanium.Admob = require('ti.admob');
function createAdView(){
     var adview = Titanium.Admob.createView({
          width:320,
          height:50,
          top: 366,
         adBackgroundColor:'black',
         publisherId:'hogehoge'          // API key wo ireru.
     });

     return adview;
}

// 広告描画
win.add(createAdView());
      • -

これで表示したかと思いますが、いかがでしょうか。他記事ですと、AdMobのSDKをダウンロードする必要がある、と書いてましたが、必要なさそうでしたし、ビルドが必要と書いてあるところもありましたが、appcelerator社の配布しているモジュールではすでにビルド済みのファイル「ti.admob-iphone-1.2.zip」がありました。


いろいろ書かせていただきましたが、私自身、プログラマとしては初心者の部類に入りますため、記述に間違いがあった場合、指摘いただければ大変嬉しいです。(勉強のためにもブログを書いています)最後まで読んでいただきまして、ありがとうございました。


※参考にさせていただいた記事
iphoneアプリで広告入れるならやっぱadmobで決まりだね! - まんとるぽっと - ネットとゲームと秋葉原
Sawalog » 【Titanium Advent Calendar 2011:十四日目】広告、AdmobとAdmakerの導入方法まとめ
Titanium MobileにAdmobを入れる | マナブ・イガラシ
AdMobモジュールの設置方法 - kaz_konno’ blog: walkthisway

fontオブジェクトで色指定できなくて、「なんで色指定できないの?」と思った方へ

フォントで色を変えたいとき、fontのJSONオブジェクトで、fontColor:"red",とのように書きたくありますが、フォントオブジェクトではこのような指定はできません。

※参考
http://developer.appcelerator.com/apidoc/mobile/latest/Font-object.html


フォントの色を変えるには、Labelで指定する必要があります。color:"red",というように指定します。


教えていただいた@ryugoo_さん、ありがとうございます!

Titanium MobileにおけるTable ViewとLabelでのフォントにおける注意事項 #TitaniumJP



同じところでつまづく人がいると思うので、僕みたいな初心者のために書きます。


まずTableViewRowのtitleに文字列を割り当てることができますが、書体(Font Family)は変更できません。(簡易記法らしい)
https://twitter.com/#!/ryugoo_/status/179911974283517953


※Font Sizeや、Weightも僕の環境では指定できませんでした。キッチンシンクのサンプル見れば、指定できるように書いてあるけど・・・
http://ks.kanna.asia/base-ui/views/table-views/new-programmatic-api/table-view-layout/


ということで、Font Familyを変更する場合はlabelで指定するしかなさそうです。labelでがしがし書いていきましょう。


次にですが、textAlignでleft(左寄せ)にしても反映されない問題がありました。これはなぜ反映しないかというと、width='auto'だと反応しないようです。width=値を'320'とかちゃんと指定すれば、textAlignが反応します。