<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Toyship.org</title>
	<atom:link href="http://www.toyship.org/feed" rel="self" type="application/rss+xml" />
	<link>http://www.toyship.org</link>
	<description></description>
	<lastBuildDate>Sat, 21 May 2011 16:34:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>AndroidアプリをXcodeで作る方法</title>
		<link>http://www.toyship.org/archives/483</link>
		<comments>http://www.toyship.org/archives/483#comments</comments>
		<pubDate>Fri, 04 Mar 2011 14:36:31 +0000</pubDate>
		<dc:creator>Kaoru</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.toyship.org/?p=483</guid>
		<description><![CDATA[……とタイトルには書きましたが、正確には「AndroidアプリをXcode上でビルドする方法」です。 最近スマートフォンがはやってるんだけど、iPhoneだけじゃなくてAndroidバージョンも欲しいから一緒に開発してくんないかな？と無茶ぶりされてiOS/Android同時開発に勤しむみなさまへ。 手順はこんな感じです。 （図はクリックすると拡大します。） EcliplseでAndroidの新規プロジェクトを作る Xcodeで新規プロジェクトを作ってEclipseで作ったファイルを読みこむ Android updateをする Xcodeでプロジェクトのビルド設定を変更する ビルドする （念のためですが、EclipseとXcodeがインストールされている環境でのみ実行できます。あと、当然Macでのみ実行可能です。） プロジェクトの作成 まずはEcliplseでAndroidのアプリを新規作成してください。 プロジェクト名は、ここではHelloWorldとしますね。 パスはこちらになっているとします。 // Eclipseで設定したプロジェクトパス /Users/toyship/workspace/HelloWorld/ それから、Xcodeを開いて、File メニューから New Project （新規プロジェクト）を選択。 プロジェクト選択画面では、External Build Systemを選択してください。 プロジェクト名はHelloWorldにして、パスはさきほどのAndroidプロジェクトの一つ上を選択してださい。 // Xcodeでプロジェクトを作成するパス /Users/toyship/workspace/ このときに、「HelloWorleはもう存在するんだけどいれかえる？」と聞かれるので、「いれかえる（replace）」を選択。 するとこんな感じのファイル構成になります。 Eclipseでもともと作ったHelloWorldフォルダーの中に、Xcodeのプロジェクトファイル（HelloWorld.xcodeprj）が作成されます。 Xcodeプロジェクトにファイルを追加 その次に、今作成したXcodeのプロジェクトに、Eclipseで作ったソースファイルなどを追加します。 XcodeのProjectメニューから、Add to Project（プロジェクトに追加）を選択して、表示されたダイアログボックスで好きなファイルを追加してください。 ただし、その場合にダイアログの一番上に表示されている「コピーする」チェックボックスはオフにすること。 ここで追加するファイルはとりあえずなんでも構いません。 Eclipseで作ったプロジェクトのファイルの中から、自分がXcode上で編集したいファイルを追加してください。 （どのファイルがビルドの対象となるのかは別に設定されるので、ここで何を読み込んでもビルドエラーにはなりません。） Android update で、このままではant用のビルド設定ファイルがないので、作成します。 &#62; cd /Users/toyship/workspace/HelloWorld/ &#62; Android update project --path . これでプロジェクトフォルダー内にbuild.xmlが作成されます。&#8230;]]></description>
			<content:encoded><![CDATA[<p>……とタイトルには書きましたが、正確には「AndroidアプリをXcode上でビルドする方法」です。</p>
<p>最近スマートフォンがはやってるんだけど、iPhoneだけじゃなくてAndroidバージョンも欲しいから一緒に開発してくんないかな？と無茶ぶりされてiOS/Android同時開発に勤しむみなさまへ。<br />
<span id="more-483"></span></p>
<p>手順はこんな感じです。<br />
（図はクリックすると拡大します。）</p>
<ol>
<li>EcliplseでAndroidの新規プロジェクトを作る</li>
<li>Xcodeで新規プロジェクトを作ってEclipseで作ったファイルを読みこむ</li>
<li>Android updateをする</li>
<li>Xcodeでプロジェクトのビルド設定を変更する</li>
<li>ビルドする</li>
</ol>
<p>（念のためですが、EclipseとXcodeがインストールされている環境でのみ実行できます。あと、当然Macでのみ実行可能です。）</p>
<h3>プロジェクトの作成</h3>
<p>まずはEcliplseでAndroidのアプリを新規作成してください。<br />
プロジェクト名は、ここではHelloWorldとしますね。<br />
パスはこちらになっているとします。</p>
<div class="codecolorer-container c default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">// Eclipseで設定したプロジェクトパス</span><br />
<span style="color: #339933;">/</span>Users<span style="color: #339933;">/</span>toyship<span style="color: #339933;">/</span>workspace<span style="color: #339933;">/</span>HelloWorld<span style="color: #339933;">/</span></div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Build1.png" rel="lightbox[483]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Build1-440x310.png" alt="" title="Build1" width="440" height="310" class="alignleft size-medium wp-image-493" /></a><br />
それから、Xcodeを開いて、File メニューから New Project （新規プロジェクト）を選択。<br />
プロジェクト選択画面では、External Build Systemを選択してください。</p>
<table width="100%">
<tr></tr>
</table>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Build2.png" rel="lightbox[483]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Build2-440x257.png" alt="" title="Build2" width="440" height="257" class="alignleft size-medium wp-image-494" /></a>プロジェクト名はHelloWorldにして、パスはさきほどのAndroidプロジェクトの一つ上を選択してださい。</p>
<div class="codecolorer-container c default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">// Xcodeでプロジェクトを作成するパス</span><br />
<span style="color: #339933;">/</span>Users<span style="color: #339933;">/</span>toyship<span style="color: #339933;">/</span>workspace<span style="color: #339933;">/</span></div></div>
<table width="100%">
<tr></tr>
</table>
<p>このときに、「HelloWorleはもう存在するんだけどいれかえる？」と聞かれるので、「いれかえる（replace）」を選択。</p>
<table width="100%">
<tr></tr>
</table>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Build41.png" rel="lightbox[483]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Build41-440x233.png" alt="" title="Build4r" width="440" height="233" class="alignleft size-medium wp-image-559" /></a>するとこんな感じのファイル構成になります。<br />
Eclipseでもともと作ったHelloWorldフォルダーの中に、Xcodeのプロジェクトファイル（HelloWorld.xcodeprj）が作成されます。</p>
<table width="100%">
<tr></tr>
</table>
<h3>Xcodeプロジェクトにファイルを追加</h3>
<p>その次に、今作成したXcodeのプロジェクトに、Eclipseで作ったソースファイルなどを追加します。<br />
XcodeのProjectメニューから、Add to Project（プロジェクトに追加）を選択して、表示されたダイアログボックスで好きなファイルを追加してください。</p>
<p>ただし、その場合にダイアログの一番上に表示されている「コピーする」チェックボックスはオフにすること。</p>
<p>ここで追加するファイルはとりあえずなんでも構いません。<br />
Eclipseで作ったプロジェクトのファイルの中から、自分がXcode上で編集したいファイルを追加してください。<br />
（どのファイルがビルドの対象となるのかは別に設定されるので、ここで何を読み込んでもビルドエラーにはなりません。）</p>
<h3>Android update</h3>
<p>で、このままではant用のビルド設定ファイルがないので、作成します。</p>
<div class="codecolorer-container text default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&gt; cd /Users/toyship/workspace/HelloWorld/<br />
&gt; Android update project --path .</div></div>
<p>これでプロジェクトフォルダー内にbuild.xmlが作成されます。</p>
<h3>ビルド設定を変更</h3>
<p>次にXcodeのビルド設定を変更します。<br />
画面左ペインのTargets（ターゲット）を開くと、HelloWorldという項目があるので、そこをダブルクリック。</p>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Build6.png" rel="lightbox[483]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Build6-440x315.png" alt="" title="Build6" width="440" height="315" class="alignleft size-medium wp-image-535" /></a></p>
<table width="100%">
<tr></tr>
</table>
<p>そうするとビルド設定画面が表示されるので、ここで Build Tool とArgumentsとDirectoryをこの図と同じ値に設定。</p>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Build5.png" rel="lightbox[483]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Build5-440x271.png" alt="" title="Build5" width="440" height="271" class="alignleft size-medium wp-image-497" /></a></p>
<table width="100%">
<tr></tr>
</table>
<h3>ビルド</h3>
<p>そしてXcodeのメニューからビルドすると、こちらにデバッグビルドのapkファイルができます。<br />
/Users/toyship/workspace/HelloWorld/bin/MainActivity-debug.apk</p>
<p>というわけで、apkファイルが作成できたので、あとはこれを<strong>手動</strong>で実機に転送してください。</p>
<p>でも、XcodeでAndroid開発をすると、</p>
<ul>
<li>コード入力時に自動補完が使えない</li>
<li>グラフィカルなXML編集機能が使えない</li>
<li>エミュレーターに転送できない</li>
<li>実機に自動転送できない</li>
<li>リリース用ビルドでリリースすると署名の設定が必要</li>
<li>この手順ではapkの名称がメインのアクティビティになってる</li>
</ul>
<p>……などなど、いろいろと不便な点が多いので、素直にEclipseを使って作った方がいいかもしれませんね。</p>
<p>でもXcode用のAndroid新規プロジェクトのテンプレートをつくればEclipseだけで開発をほとんどできるかも。<br />
誰得？という感じですが……。</p>
<h3>参考</h3>
<p>こちらの記事を参考させていただきました。<br />
ありがとうございました。</p>
<ul>
<li><a href="http://d.hatena.ne.jp/tarosay/20110117/1295234981">eclipseプロジェクトをコマンドラインからビルドする方法</a></li>
<li><a href="http://code.davidjanes.com/blog/2009/11/20/how-to-use-xcode-for-android-projects/">How to use XCode for Android Projects</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.toyship.org/archives/483/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UITextField/UITextViewの文字入力で覚えておくと便利なこと</title>
		<link>http://www.toyship.org/archives/82</link>
		<comments>http://www.toyship.org/archives/82#comments</comments>
		<pubDate>Wed, 02 Mar 2011 10:58:41 +0000</pubDate>
		<dc:creator>Kaoru</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.toyship.org/?p=82</guid>
		<description><![CDATA[iPhoneで文字を入力してもらうときにはUITextFieldかUITextViewを使います。 UITextFieldとUITextViewはUITextInputTraitsプロトコルを継承していて、プロパティをちょっと変えるだけでいろいろと細かい設定ができます。 iPhoneの画面は狭いので、文字入力をするときにこのあたりのことを注意するようにすると、ユーザーの使い勝手がちょっとよくなりますよ。 まずはUITextFieldを作ってみる まずはテキストフィールドの作成。 普通につくると、こんな感じのキーボードが表示されて文字が入力できます。 （図はクリックすると拡大します。） &#160; UITextField* inputText = &#91;&#91;&#91;UITextField alloc&#93; initWithFrame:CGRectMake&#40;10,10,190,30&#41;&#93; autorelease&#93;; &#160; inputText.borderStyle = UITextBorderStyleRoundedRect; キーボードのReturnキーを変える まずは、キーボードの右下にあるReturnキーをちょっと変えてみましょう。 キーボードのキーを変更するには、UITextFieldのreturnKeyTypeプロパティを変更。 こちらのenumから選んでください。 typedef enum &#123; &#160; &#160; UIReturnKeyDefault, &#160; &#160; UIReturnKeyGo, &#160; &#160; UIReturnKeyGoogle, &#160; &#160; UIReturnKeyJoin, &#160; &#160; UIReturnKeyNext, &#160; &#160; UIReturnKeyRoute, &#160; &#160; UIReturnKeySearch, &#160; &#160; UIReturnKeySend, &#160; &#160; UIReturnKeyYahoo, &#160; &#160;&#8230;]]></description>
			<content:encoded><![CDATA[<p>iPhoneで文字を入力してもらうときにはUITextFieldかUITextViewを使います。<br />
UITextFieldとUITextViewはUITextInputTraitsプロトコルを継承していて、プロパティをちょっと変えるだけでいろいろと細かい設定ができます。</p>
<p>iPhoneの画面は狭いので、文字入力をするときにこのあたりのことを注意するようにすると、ユーザーの使い勝手がちょっとよくなりますよ。<br />
<span id="more-82"></span></p>
<h3>まずはUITextFieldを作ってみる</h3>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/DefaultKey.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/DefaultKey-293x440.png" alt="" title="Default" width="293" height="440" class="alignleft size-thumbnail" /></a>まずはテキストフィールドの作成。<br />
普通につくると、こんな感じのキーボードが表示されて文字が入力できます。<br />
（図はクリックすると拡大します。）</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; UITextField<span style="color: #002200;">*</span> inputText <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UITextField alloc<span style="color: #002200;">&#93;</span> initWithFrame<span style="color: #002200;">:</span>CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">10</span>,<span style="color: #2400d9;">10</span>,<span style="color: #2400d9;">190</span>,<span style="color: #2400d9;">30</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>;<br />
&nbsp; inputText.borderStyle <span style="color: #002200;">=</span> UITextBorderStyleRoundedRect;</div></div>
<h3>キーボードのReturnキーを変える</h3>
<p>まずは、キーボードの右下にあるReturnキーをちょっと変えてみましょう。<br />
キーボードのキーを変更するには、UITextFieldのreturnKeyTypeプロパティを変更。<br />
こちらのenumから選んでください。</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #a61390;">typedef</span> <span style="color: #a61390;">enum</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; UIReturnKeyDefault,<br />
&nbsp; &nbsp; UIReturnKeyGo,<br />
&nbsp; &nbsp; UIReturnKeyGoogle,<br />
&nbsp; &nbsp; UIReturnKeyJoin,<br />
&nbsp; &nbsp; UIReturnKeyNext,<br />
&nbsp; &nbsp; UIReturnKeyRoute,<br />
&nbsp; &nbsp; UIReturnKeySearch,<br />
&nbsp; &nbsp; UIReturnKeySend,<br />
&nbsp; &nbsp; UIReturnKeyYahoo,<br />
&nbsp; &nbsp; UIReturnKeyDone,<br />
&nbsp; &nbsp; UIReturnKeyEmergencyCall,<br />
<span style="color: #002200;">&#125;</span> UIReturnKeyType;</div></div>
<p>それぞれのenumを指定した時に表示されるキーボードはこうなります。<br />
（画面は英語の場合です。iPhoneの言語が日本語の場合、多少表示が違います。）</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.returnKeyType <span style="color: #002200;">=</span> UIReturnKeyGo;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Return1.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Return1-293x440.png" alt="" title="UIReturnKeyGo" width="293" height="440" class="alignleft size-thumbnail wp-image-426" /></a>UIReturnKeyGoの場合</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.returnKeyType <span style="color: #002200;">=</span> UIReturnKeyGoogle;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Return2.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Return2-293x440.png" alt="" title="UIReturnKeyGoogle" width="293" height="440" class="alignleft size-thumbnail wp-image-427" /></a> UIReturnKeyGoogleの場合</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.returnKeyType <span style="color: #002200;">=</span> UIReturnKeyJoin;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Return3.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Return3-293x440.png" alt="" title="UIReturnKeyJoin" width="293" height="440" class="alignleft size-thumbnail wp-image-428" /></a> UIReturnKeyJoinの場合</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.returnKeyType <span style="color: #002200;">=</span> UIReturnKeyNext;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Return4.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Return4-293x440.png" alt="" title="UIReturnKeyNext" width="293" height="440" class="alignleft size-thumbnail wp-image-429" /></a> UIReturnKeyNextの場合</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.returnKeyType <span style="color: #002200;">=</span> UIReturnKeyRoute;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Return5.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Return5-293x440.png" alt="" title="UIReturnKeyRoute" width="293" height="440" class="alignleft size-thumbnail wp-image-430" /></a><br />
UIReturnKeyRouteの場合</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.returnKeyType <span style="color: #002200;">=</span> UIReturnKeySearch;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Return6.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Return6-293x440.png" alt="" title="UIReturnKeySearch" width="293" height="440" class="alignleft size-thumbnail wp-image-431" /></a> UIReturnKeySearchの場合</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.returnKeyType <span style="color: #002200;">=</span> UIReturnKeySend;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Return7.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Return7-294x440.png" alt="" title="UIReturnKeySend" width="294" height="440" class="alignleft size-thumbnail wp-image-432" /></a> UIReturnKeySendの場合</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.returnKeyType <span style="color: #002200;">=</span> UIReturnKeyYahoo;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Return8.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Return8-293x440.png" alt="" title="UIReturnKeyYahoo" width="293" height="440" class="alignleft size-thumbnail wp-image-433" /></a> UIReturnKeyYahooの場合</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.returnKeyType <span style="color: #002200;">=</span> UIReturnKeyDone;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Return9.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Return9-293x440.png" alt="" title="UIReturnKeyDone" width="293" height="440" class="alignleft size-thumbnail wp-image-434" /></a> UIReturnKeyDoneの場合</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.returnKeyType <span style="color: #002200;">=</span> UIReturnKeyEmergencyCall;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Return10.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Return10-293x440.png" alt="" title="UIReturnKeyEmergencyCall" width="293" height="440" class="alignleft size-thumbnail wp-image-435" /></a> UIReturnKeyEmergencyCallの場合</p>
<div style="clear:both"></div>
<h3>キーボードの種類を変える</h3>
<p>次はキーボードの種類を変えてみます。<br />
UITextFieldのkeyboardTypeを変えると<br />
特に、入力するデータがメールアドレスやURLなどの特定の文字を使う時にはとても便利です。<br />
こちらの選択肢から。</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #a61390;">typedef</span> <span style="color: #a61390;">enum</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; UIKeyboardTypeDefault, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #11740a; font-style: italic;">// Default type for the current input method.</span><br />
&nbsp; &nbsp; UIKeyboardTypeASCIICapable, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// Displays a keyboard which can enter ASCII characters, non-ASCII keyboards remain active</span><br />
&nbsp; &nbsp; UIKeyboardTypeNumbersAndPunctuation, &nbsp;<span style="color: #11740a; font-style: italic;">// Numbers and assorted punctuation.</span><br />
&nbsp; &nbsp; UIKeyboardTypeURL, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #11740a; font-style: italic;">// A type optimized for URL entry (shows . / .com prominently).</span><br />
&nbsp; &nbsp; UIKeyboardTypeNumberPad, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #11740a; font-style: italic;">// A number pad (0-9). Suitable for PIN entry.</span><br />
&nbsp; &nbsp; UIKeyboardTypePhonePad, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// A phone pad (1-9, *, 0, #, with letters under the numbers).</span><br />
&nbsp; &nbsp; UIKeyboardTypeNamePhonePad, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// A type optimized for entering a person's name or phone number.</span><br />
&nbsp; &nbsp; UIKeyboardTypeEmailAddress, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// A type optimized for multiple email address entry (shows space @ . prominently).</span><br />
&nbsp; &nbsp; UIKeyboardTypeDecimalPad, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// A number pad with a decimal point.</span><br />
<br />
<span style="color: #002200;">&#125;</span> UIKeyboardType;</div></div>
<p>それぞれのenumで表示されるキーボードはこうなります。<br />
（画面は英語の場合です。iPhoneの言語が日本語の場合、多少表示が違います。）</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.keyboardType <span style="color: #002200;">=</span> UIKeyboardTypeASCIICapable;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Key1.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Key1-293x440.png" alt="" title="UIKeyboardTypeASCIICapable" width="293" height="440" class="alignleft size-thumbnail wp-image-418" /></a>UIKeyboardTypeASCIICapableの場合。</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.keyboardType <span style="color: #002200;">=</span> UIKeyboardTypeNumbersAndPunctuation;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Key2.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Key2-293x440.png" alt="" title="UIKeyboardTypeNumbersAndPunctuation" width="293" height="440" class="alignleft size-thumbnail wp-image-419" /></a> UIKeyboardTypeNumbersAndPunctuationの場合。</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.keyboardType <span style="color: #002200;">=</span> UIKeyboardTypeURL;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Key3.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Key3-293x440.png" alt="" title="UIKeyboardTypeURL" width="293" height="440" class="alignleft size-thumbnail wp-image-420" /></a> UIKeyboardTypeURLの場合。</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.keyboardType <span style="color: #002200;">=</span> UIKeyboardTypeNumberPad;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Key4.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Key4-293x440.png" alt="" title="UIKeyboardTypeNumberPad" width="293" height="440" class="alignleft size-thumbnail wp-image-421" /></a> UIKeyboardTypeNumberPadの場合。</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.keyboardType <span style="color: #002200;">=</span> UIKeyboardTypePhonePad;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Key5.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Key5-293x440.png" alt="" title="UIKeyboardTypePhonePad" width="293" height="440" class="alignleft size-thumbnail wp-image-422" /></a> UIKeyboardTypePhonePadの場合。</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.keyboardType <span style="color: #002200;">=</span> UIKeyboardTypeNamePhonePad;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Key6.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Key6-294x440.png" alt="" title="UIKeyboardTypeNamePhonePad" width="294" height="440" class="alignleft size-thumbnail wp-image-423" /></a> UIKeyboardTypeNamePhonePadの場合。</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.keyboardType <span style="color: #002200;">=</span> UIKeyboardTypeEmailAddress;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Key7.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Key7-293x440.png" alt="" title="UIKeyboardTypeEmailAddress" width="293" height="440" class="alignleft size-thumbnail wp-image-424" /></a> UIKeyboardTypeEmailAddressの場合。</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; inputText.keyboardType <span style="color: #002200;">=</span> UIKeyboardTypeDecimalPad;</div></div>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/Key8.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/Key8-293x440.png" alt="" title="UIKeyboardTypeDecimalPad" width="293" height="440" class="alignleft size-thumbnail wp-image-425" /></a> UIKeyboardTypeDecimalPadの場合。（ただし、このキーボードはiOS 4.1 以上のみ。）</p>
<div style="clear:both"></div>
<h3>UITextFieldでキーボードを簡単に閉じる</h3>
<p>さて、上でreturnKeyTypeを設定してReturnキーの表示を「Done」に変えても、そのままでは「Done」ボタンを押したときにキーボードが閉じてくれるわけではありません。<br />
キーボードのReturnキーを押されたときの挙動を定義する必要があります。</p>
<p>まずはUITextFieldのdelegateをselfに設定。</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">inputText.returnKeyType <span style="color: #002200;">=</span> UIReturnKeyDone;<br />
inputText.delegate <span style="color: #002200;">=</span> self;</div></div>
<p>そして、selfにtextFieldShouldReturnを実装して、そのなかでresignFirstResponderを呼ぶと、Returnキーを押されたときにキーボードが閉じるようになります。</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">BOOL</span><span style="color: #002200;">&#41;</span>textFieldShouldReturn<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UITextField <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>textField <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>textField resignFirstResponder<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #a61390;">return</span> <span style="color: #a61390;">YES</span>;<br />
<span style="color: #002200;">&#125;</span></div></div>
<p>もちろんキーボードを閉じる以外の処理をすることも可能です。</p>
<h3>キーボードに閉じるボタンをつける</h3>
<p>UITextFieldでキーボードを閉じたいときには上の方法が使えますが、複数行のテキストを使うときにはこの方法は使えません。<br />
複数行のテキストの編集にはUITextViewを使いますが、Returnキーでキーボードを閉じるようにしてしまうと、改行ができなくなってしまいます。</p>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/03/close2.png" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/03/close2-293x440.png" alt="" title="close button" width="293" height="440" class="alignleft size-thumbnail wp-image-462" /></a>UITextViewの場合には、accessoryViewを設定して、キーボードの上にこんな閉じるボタンをつけましょう。（あ、この画面ではUITextViewでなくてUITextFieldを使ってますが……。）</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; UIView<span style="color: #002200;">*</span> accessoryView <span style="color: #002200;">=</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UIView alloc<span style="color: #002200;">&#93;</span> initWithFrame<span style="color: #002200;">:</span>CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span>,<span style="color: #2400d9;">0</span>,<span style="color: #2400d9;">320</span>,<span style="color: #2400d9;">50</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>;<br />
&nbsp; accessoryView.backgroundColor <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>UIColor whiteColor<span style="color: #002200;">&#93;</span>;<br />
&nbsp; <br />
&nbsp; <span style="color: #11740a; font-style: italic;">// ボタンを作成する。</span><br />
&nbsp; UIButton<span style="color: #002200;">*</span> closeButton <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>UIButton buttonWithType<span style="color: #002200;">:</span>UIButtonTypeRoundedRect<span style="color: #002200;">&#93;</span>;<br />
&nbsp; closeButton.frame <span style="color: #002200;">=</span> CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">210</span>,<span style="color: #2400d9;">10</span>,<span style="color: #2400d9;">100</span>,<span style="color: #2400d9;">30</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; <span style="color: #002200;">&#91;</span>closeButton setTitle<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;閉じる&quot;</span> forState<span style="color: #002200;">:</span>UIControlStateNormal<span style="color: #002200;">&#93;</span>;<br />
&nbsp; <span style="color: #11740a; font-style: italic;">// ボタンを押したときによばれる動作を設定する。</span><br />
&nbsp; <span style="color: #002200;">&#91;</span>closeButton addTarget<span style="color: #002200;">:</span>self action<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>closeKeyboard<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> forControlEvents<span style="color: #002200;">:</span>UIControlEventTouchUpInside<span style="color: #002200;">&#93;</span>;<br />
&nbsp; <span style="color: #11740a; font-style: italic;">// ボタンをViewに貼る</span><br />
&nbsp; <span style="color: #002200;">&#91;</span>accessoryView addSubview<span style="color: #002200;">:</span>closeButton<span style="color: #002200;">&#93;</span>;<br />
<br />
&nbsp; inputText.inputAccessoryView <span style="color: #002200;">=</span> accessoryView;</div></div>
<p>closeKeyboardメソッドはこちらで定義。</p>
<div class="codecolorer-container objc default mycode" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:605px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>closeKeyboard<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>sender<span style="color: #002200;">&#123;</span><br />
&nbsp; <span style="color: #002200;">&#91;</span>inputText resignFirstResponder<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span></div></div>
<p>accessaryViewの上にはCloseボタンだけではなくて、「Prev/Next」ボタンやなど、ユーザーの入力の補助になるようなボタンをいろいろおくことができます。<br />
Viewの色を[UIColor clearColor]にしておけば、ボタンだけを表示することもできるので、いろいろ凝ったデザインのものをつくってみても素敵だと思います。<br />
個人的にはNoticaというアプリのこのaccessaryViewがさりげなくてお気に入りです。<br />
<a href="http://www.toyship.org/wp-content/uploads/2011/02/20110215-112743.jpg" rel="lightbox[82]"><img src="http://www.toyship.org/wp-content/uploads/2011/02/20110215-112743.jpg" alt="" class="alignleft size-thumbnail" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toyship.org/archives/82/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>アプリ内広告で利益をだすには</title>
		<link>http://www.toyship.org/archives/80</link>
		<comments>http://www.toyship.org/archives/80#comments</comments>
		<pubDate>Thu, 17 Feb 2011 15:25:47 +0000</pubDate>
		<dc:creator>Kaoru</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AdMob]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.toyship.org/?p=80</guid>
		<description><![CDATA[先日六本木ヒルズのGoogleオフィスで開かれたモバイルアプリ向け広告 AdMob導入 無料セミナーに行ってきました。 まずはGoogleのスタッフからAdMob導入についての初歩的な説明。 そのあとTouch The Numbersを出しているテクノードの水野和寛さんが実際のAdMob成功事例を説明してくださったんですが、とても参考になったのでまとめてみました。 ユーザーのアクティブ率が重要 テクノードでは、今18個のiPhoneアプリ、2個のAndroidアプリを出しているそうです。 そのうち広告＋無料モデルをとっているアプリと有料アプリの割合は9:1。ほとんどが広告＋無料モデルでリリースをしています。 有料アプリだとダウンロード数に応じて売り上げがさがっていってしまいますが、無料＋広告モデルであれば、ユーザーがアクティブであれば広告収入がキープされ、売り上げがおちません。（ちなみに、2/9の一日のTouch The Numbersのアクティブユーザーは11万人だそうです。） ユーザーのアクティブ率をあげるためには、頻繁なアップデートとユーザーフォローが大切。 Touch The Numbersでは、一年に20回のアップデートを行っている。 ランキングの上位ユーザーを招待して渋谷でオフ会を行って、その様子をUStreamするなどのイベントを開催し、いろいろな手段でユーザーのもりあげをはかっている。 （なお、こんなマーケティングは日本市場のみでとられているため、Touch the Numbersのユーザーの8割は日本市場だそうです。） また、アプリにGoogle Analyticsを埋め込んであり、情報収集に役立てているとのこと。 （詳細な収集内容はお聞きできませんでしたが……。） 利益をあげるためには、毎日10万インプレッションくらいを一つの目標とするのがよいでしょう、とのことでした。 広告モデルの向き不向き 広告モデルにむいていないアプリもあり、その場合にはアプリやマーケティングをいくら工夫しても収益をあげるのは厳しい。 Touch The Numbersは、企画当初から広告モデルを採用するということを前提に設計している。 カメラアプリに広告をいれてみたこともあったが、収益はかなり苦しかった。 電車の中などで（周りの目がきになり）なかなか起動できないということもある。 中毒性のあるアプリが広告モデルに最も向いている。 また、広告モデル向きのアプリジャンルと広告モデル向きでないジャンルがある。 ゲームは向いている。 広告モデルへ移行する場合 無料アプリにいきなり広告をいれるとApp Storeのレビュー欄が荒れてしまう。 もし無料アプリに広告をいれるなら、最初は自社広告などでユーザーに慣れてもらいながら移行するのもよい手かもしれない。 ただし、この一年くらいでユーザーのモバイル広告への嫌悪感はずいぶんと減っていると実感している。 AdMobからの入金 AdMobからの入金方法はPayPalか銀行振込が選べる。 銀行振込だと着金手数料がこちらの負担になってしまうが、PayPalの場合にはAdMobが負担してくれる。 （テクノードでは、PayPalを採用。） ただし、PayPalの場合為替変換レートが市場より3%くらい悪い。 小額なら、PayPalのほうが特になるが、500万円くらいがしきい値になるのではないか。 まとめ 私もお仕事で「無料アプリ＋広告」モデルのアプリを経験したことがあって、安定した広告収入を得るのはかなり難しいものだということを実感しています。 PaperTossやAngryBirdが広告で数億円儲かったみたいだから今売っているアプリにも試しに広告をいれてみよう！みたいな単純なノリで始めても難しいということがよくわかりました。 広告モデルをターゲットにした緻密なUI/デザイン設計とユーザーの期待にこたえるきめ細やかなアフターフォローがだいじですね。 テクノードさんから学んだ事まとめ アプリの設計段階から広告に特化して設計すること 頻繁にアップデートをして、ユーザーの希望にこたえること 目新しい仕組みやイベントを用意して、ユーザーに継続して使ってもらうこと 継続的にユーザーの使用状況をチェックして、効果的なアクションを起こすこと]]></description>
			<content:encoded><![CDATA[<p>先日六本木ヒルズのGoogleオフィスで開かれた<a href="http://www.mosa.gr.jp/?p=3808">モバイルアプリ向け広告 AdMob導入 無料セミナー</a>に行ってきました。</p>
<p>まずはGoogleのスタッフからAdMob導入についての初歩的な説明。<br />
そのあと<a href="http://tekunodo.jp/TouchTheNumbers_info.html">Touch The Numbers</a>を出しているテクノードの水野和寛さんが実際のAdMob成功事例を説明してくださったんですが、とても参考になったのでまとめてみました。<br />
<span id="more-80"></span></p>
<h3>ユーザーのアクティブ率が重要</h3>
<p><a href="http://www.toyship.org/wp-content/uploads/2011/02/20110218-082331.jpg" rel="lightbox[80]"><img src="http://www.toyship.org/wp-content/uploads/2011/02/20110218-082331.jpg" alt="" class="alignright size-medium" /></a>テクノードでは、今18個のiPhoneアプリ、2個のAndroidアプリを出しているそうです。<br />
そのうち広告＋無料モデルをとっているアプリと有料アプリの割合は9:1。ほとんどが広告＋無料モデルでリリースをしています。</p>
<p>有料アプリだとダウンロード数に応じて売り上げがさがっていってしまいますが、無料＋広告モデルであれば、ユーザーがアクティブであれば広告収入がキープされ、売り上げがおちません。（ちなみに、2/9の一日のTouch The Numbersのアクティブユーザーは11万人だそうです。）</p>
<p>ユーザーのアクティブ率をあげるためには、頻繁なアップデートとユーザーフォローが大切。<br />
Touch The Numbersでは、一年に20回のアップデートを行っている。<br />
ランキングの上位ユーザーを招待して渋谷でオフ会を行って、その様子をUStreamするなどのイベントを開催し、いろいろな手段でユーザーのもりあげをはかっている。<br />
（なお、こんなマーケティングは日本市場のみでとられているため、Touch the Numbersのユーザーの8割は日本市場だそうです。）</p>
<p>また、アプリにGoogle Analyticsを埋め込んであり、情報収集に役立てているとのこと。<br />
（詳細な収集内容はお聞きできませんでしたが……。）</p>
<p>利益をあげるためには、毎日10万インプレッションくらいを一つの目標とするのがよいでしょう、とのことでした。</p>
<h3>広告モデルの向き不向き</h3>
<p>広告モデルにむいていないアプリもあり、その場合にはアプリやマーケティングをいくら工夫しても収益をあげるのは厳しい。<br />
Touch The Numbersは、企画当初から広告モデルを採用するということを前提に設計している。</p>
<p>カメラアプリに広告をいれてみたこともあったが、収益はかなり苦しかった。<br />
電車の中などで（周りの目がきになり）なかなか起動できないということもある。<br />
中毒性のあるアプリが広告モデルに最も向いている。</p>
<p>また、広告モデル向きのアプリジャンルと広告モデル向きでないジャンルがある。<br />
ゲームは向いている。</p>
<h3>広告モデルへ移行する場合</h3>
<p>無料アプリにいきなり広告をいれるとApp Storeのレビュー欄が荒れてしまう。<br />
もし無料アプリに広告をいれるなら、最初は自社広告などでユーザーに慣れてもらいながら移行するのもよい手かもしれない。</p>
<p>ただし、この一年くらいでユーザーのモバイル広告への嫌悪感はずいぶんと減っていると実感している。</p>
<h3>AdMobからの入金</h3>
<p>AdMobからの入金方法はPayPalか銀行振込が選べる。<br />
銀行振込だと着金手数料がこちらの負担になってしまうが、PayPalの場合にはAdMobが負担してくれる。<br />
（テクノードでは、PayPalを採用。）<br />
ただし、PayPalの場合為替変換レートが市場より3%くらい悪い。<br />
小額なら、PayPalのほうが特になるが、500万円くらいがしきい値になるのではないか。</p>
<h3>まとめ</h3>
<p>私もお仕事で「無料アプリ＋広告」モデルのアプリを経験したことがあって、安定した広告収入を得るのはかなり難しいものだということを実感しています。<br />
PaperTossやAngryBirdが広告で数億円儲かったみたいだから今売っているアプリにも試しに広告をいれてみよう！みたいな単純なノリで始めても難しいということがよくわかりました。</p>
<p>広告モデルをターゲットにした緻密なUI/デザイン設計とユーザーの期待にこたえるきめ細やかなアフターフォローがだいじですね。</p>
<p>テクノードさんから学んだ事まとめ
<ol>
<li>アプリの設計段階から広告に特化して設計すること</li>
<li>頻繁にアップデートをして、ユーザーの希望にこたえること</li>
<li>目新しい仕組みやイベントを用意して、ユーザーに継続して使ってもらうこと</li>
<li>継続的にユーザーの使用状況をチェックして、効果的なアクションを起こすこと</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.toyship.org/archives/80/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Androidのカメラアプリは難しい</title>
		<link>http://www.toyship.org/archives/76</link>
		<comments>http://www.toyship.org/archives/76#comments</comments>
		<pubDate>Mon, 07 Feb 2011 21:56:04 +0000</pubDate>
		<dc:creator>Kaoru</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.toyship.org/?p=76</guid>
		<description><![CDATA[先日、Androidのカメラアプリ開発者向けのイベント、Android Camera Forum 2011 に行ってきました。 いろいろなAndroidの実機が会場で自由にさわれたり、カメラアプリ開発者の方の濃いお話が聞けました。 ToyCamera をつくったきっかけ まずは、深津貴之(@fladdict)さんのお話。 （じつは私はAndroidには個人的にはあまり興味がないので、このセミナーに参加したのも深津さんのお話を聞くのが一番の目的だったんですが……。） ToyCameraを作った最初のきっかけは、iPhone3Gに搭載されていたカメラの性能がよくなかったことだったそうです。 当時流行していたトイカメラのように、画質の悪さを長所にしたほうがいいアプリをつくれるのでは、ということで世にだしたのがあのToyCameraアプリ。 お金をもうけたいということではなく、携帯カメラの新しい提案をしたいというのが動機でした。 深津さんの仕事のすすめかた 深津さんは、まずFlashでプロトタイプを作成。 iPhoneアプリはObjective-Cで作るので、Flashで作業するのは二度手間のように見えるけど、そこには二点理由があります。 深津さんは元々Flash使いの方なので、Flashの方が開発のスピードが大きいことが一点。 もう一点は、Flashならそのままウェブにおけば、ベータ版アプリ配布などという面倒くさい手続きをせずに、誰にでもベータテストをしてもらうことができる点。 Flashでプロトタイプを作った後は、Post-Itによるペーパープロトタイピング。 50mmx75mmのPost-ItがiPhoneのスクリーンサイズと同じなので、それに手書きで画面イメージを描く。 PhotoShopでグラフィックパーツをつくり始めてしまうと、コンピューターの画面上ではかっこよく見えても、実際にタッチスクリーンに配置すると（小さくて）押せないなどということが起こってしまう。 ペーパープロトタイピングだと、実物大で画面を確認できるからこそ、実際にタッチした時の使い勝手を確かめられる。 解像度は重要？ あとここで深津さんは「解像度は重要？」と会場に質問を投げかけました。 （このイベントのメインは高解像度を売りにしたXperia Arcだったんですが。（笑）） カメラの解像度が高いということはデータ量が大きい。 3G回線でのアップロードが難しい。 よって、ソーシャル系サービスと相性が悪い。 個人的にはソーシャル系では600&#215;800くらいのサイズで十分。 ソフトウェアエンジニアとしては、性能のよすぎるデバイスも悪すぎるデバイスも切り捨てることにしている。 一機種だけに特別な機能があったとしても、それをサポートすることでユーザーが本当にハッピーになるどうかを考えている。 Androidでカメラアプリをつくるなら、深津さんのおすすめは、（特定の機種向けの）プリインストールのアプリ。 現状のAndroid Marketの規模では、なかなかペイするところまで持っていくのは難しい。 （ただ、深津さんみたいな著名デベロッパーならともかく、一般のデベロッパーにはプリインストールのアプリを作るという機会を作ることが難しいですよね。） 深津さんは今後Androidアプリを出す予定があるのでしょうか？と質問してみたら、プリインストールのアプリを作らないかというお話がいくつかきているとのことでした。 FxCamera、Androidの多機種への対応 次は山下盛史さん（@yyaammaa）のお話。 全世界で600万DLダウンロードされた脅威のカメラアプリ、FxCameraの作者さんです。 まず、Androidの本家Googleが開発したカメラアプリ、Google Gogglesのマーケットのレビューの紹介から。 「＊＊すると強制終了」「Motorolaだと起動しない」「Samsung Momentだと必ずおちる」……。 Googleでさえ全機種で動作するカメラアプリは作れないんだから大丈夫！という力強いお言葉。 Androidはいろいろなメーカーが独自の機種を出しており、カメラ周辺機能についてはすべての機種で確実に動く（動くべき）手順が存在しない。 Androidの標準のカメラアプリのソースコードをもとに作っても動作しない機種もある。 Androieのカメラアプリがつくりにくい原因 山下さんによると、Androieのカメラアプリがこれほどまでつくりにくい原因はこれが主な理由だそうです。 貧弱なAPI メモリー不足 機種固有のバグ 謎の不具合（JPEGのcodecのバグなどもあるそうです） もし実際にカメラアプリを作るなら、Intentで丸投げ処理にするか、がんばって独自で実装するかの二択。 ただし、Intentを使った場合にも機種によってはorientationを正しく返さない場合があるので、写真撮影の後に、ユーザーに回転をさせるユーザーインターフェース（回転ボタンなど）をつけるのがおすすめ。&#8230;]]></description>
			<content:encoded><![CDATA[<p>先日、Androidのカメラアプリ開発者向けのイベント、<a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20110209/357031/">Android Camera Forum 2011</a> に行ってきました。</p>
<p>いろいろなAndroidの実機が会場で自由にさわれたり、カメラアプリ開発者の方の濃いお話が聞けました。</p>
<p><span id="more-76"></span></p>
<h3>ToyCamera をつくったきっかけ</h3>
<p>まずは、深津貴之(<a href="http://twitter.com/fladdict">@fladdict</a>)さんのお話。<br />
（じつは私はAndroidには個人的にはあまり興味がないので、このセミナーに参加したのも深津さんのお話を聞くのが一番の目的だったんですが……。）</p>
<p>ToyCameraを作った最初のきっかけは、iPhone3Gに搭載されていたカメラの性能がよくなかったことだったそうです。<br />
当時流行していたトイカメラのように、画質の悪さを長所にしたほうがいいアプリをつくれるのでは、ということで世にだしたのがあのToyCameraアプリ。<br />
お金をもうけたいということではなく、携帯カメラの新しい提案をしたいというのが動機でした。</p>
<h3>深津さんの仕事のすすめかた</h3>
<p>深津さんは、まずFlashでプロトタイプを作成。<br />
iPhoneアプリはObjective-Cで作るので、Flashで作業するのは二度手間のように見えるけど、そこには二点理由があります。<br />
深津さんは元々Flash使いの方なので、Flashの方が開発のスピードが大きいことが一点。<br />
もう一点は、Flashならそのままウェブにおけば、ベータ版アプリ配布などという面倒くさい手続きをせずに、誰にでもベータテストをしてもらうことができる点。</p>
<p>Flashでプロトタイプを作った後は、Post-Itによるペーパープロトタイピング。<br />
50mmx75mmのPost-ItがiPhoneのスクリーンサイズと同じなので、それに手書きで画面イメージを描く。<br />
PhotoShopでグラフィックパーツをつくり始めてしまうと、コンピューターの画面上ではかっこよく見えても、実際にタッチスクリーンに配置すると（小さくて）押せないなどということが起こってしまう。<br />
ペーパープロトタイピングだと、実物大で画面を確認できるからこそ、実際にタッチした時の使い勝手を確かめられる。</p>
<h3>解像度は重要？</h3>
<p>あとここで深津さんは「解像度は重要？」と会場に質問を投げかけました。<br />
（このイベントのメインは高解像度を売りにしたXperia Arcだったんですが。（笑））</p>
<p>カメラの解像度が高いということはデータ量が大きい。<br />
3G回線でのアップロードが難しい。<br />
よって、ソーシャル系サービスと相性が悪い。<br />
個人的にはソーシャル系では600&#215;800くらいのサイズで十分。</p>
<p>ソフトウェアエンジニアとしては、性能のよすぎるデバイスも悪すぎるデバイスも切り捨てることにしている。<br />
一機種だけに特別な機能があったとしても、それをサポートすることでユーザーが本当にハッピーになるどうかを考えている。</p>
<p>Androidでカメラアプリをつくるなら、深津さんのおすすめは、（特定の機種向けの）プリインストールのアプリ。<br />
現状のAndroid Marketの規模では、なかなかペイするところまで持っていくのは難しい。<br />
（ただ、深津さんみたいな著名デベロッパーならともかく、一般のデベロッパーにはプリインストールのアプリを作るという機会を作ることが難しいですよね。）</p>
<p>深津さんは今後Androidアプリを出す予定があるのでしょうか？と質問してみたら、プリインストールのアプリを作らないかというお話がいくつかきているとのことでした。</p>
<h3>FxCamera、Androidの多機種への対応</h3>
<p>次は山下盛史さん（<a href="http://twitter.com/yyaammaa">@yyaammaa</a>）のお話。<br />
全世界で600万DLダウンロードされた脅威のカメラアプリ、FxCameraの作者さんです。</p>
<p>まず、Androidの本家Googleが開発したカメラアプリ、Google Gogglesのマーケットのレビューの紹介から。<br />
「＊＊すると強制終了」「Motorolaだと起動しない」「Samsung Momentだと必ずおちる」……。<br />
Googleでさえ全機種で動作するカメラアプリは作れないんだから大丈夫！という力強いお言葉。</p>
<p>Androidはいろいろなメーカーが独自の機種を出しており、カメラ周辺機能についてはすべての機種で確実に動く（動くべき）手順が存在しない。<br />
Androidの標準のカメラアプリのソースコードをもとに作っても動作しない機種もある。</p>
<h3>Androieのカメラアプリがつくりにくい原因</h3>
<p>山下さんによると、Androieのカメラアプリがこれほどまでつくりにくい原因はこれが主な理由だそうです。</p>
<ol>
<li>貧弱なAPI</li>
<li>メモリー不足</li>
<li>機種固有のバグ</li>
<li>謎の不具合（JPEGのcodecのバグなどもあるそうです）</li>
</ol>
<p>もし実際にカメラアプリを作るなら、Intentで丸投げ処理にするか、がんばって独自で実装するかの二択。</p>
<p>ただし、Intentを使った場合にも機種によってはorientationを正しく返さない場合があるので、写真撮影の後に、ユーザーに回転をさせるユーザーインターフェース（回転ボタンなど）をつけるのがおすすめ。</p>
<p>もしがんばって独自で実装するなら、最初は対応機種をしぼること。<br />
初期バージョンでは最新OSと特定機種に絞り、徐々に対応機種と対応OSをひろげていくのがよい、とのことでした。</p>
<h3>Androidは難しい</h3>
<p>最後は有山圭二さんの実際のカメラアプリの実装のお話。<br />
（実装のお話より余談の方がおもしろかったんですが。）</p>
<p>それにしても、AndroidのカメラアプリはiPhoneとは全然違いますね。<br />
私もお仕事でAndroidのカメラアプリを作っていたんですが、<br />
iPhoneでは機種による違いがほとんどなく、せいぜい解像度が違うことを考慮するくらいでいいところが、Androidでは機種ごとにコードを書き直さないと動作しないような感じでした。<br />
どちらかというと、ほとんど組み込みエンジニアの世界に近いという印象です。</p>
<p>今後、Androidはどんどん機種も増え、OSも増え、機種とOSの組み合わせが加速度的に増加していくなかで、アプリを作る側もさらに大変になりそうな予感がします。<br />
Androidのカメラアプリもさらに難しくなりそうです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toyship.org/archives/76/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GeSHiにUIKitを追加</title>
		<link>http://www.toyship.org/archives/53</link>
		<comments>http://www.toyship.org/archives/53#comments</comments>
		<pubDate>Mon, 07 Feb 2011 02:39:32 +0000</pubDate>
		<dc:creator>Kaoru</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.toyship.org/?p=53</guid>
		<description><![CDATA[
