ラベル モバイル の投稿を表示しています。 すべての投稿を表示
ラベル モバイル の投稿を表示しています。 すべての投稿を表示

2014年9月13日土曜日

iOS8世代におけるiTunes Connectからの申請

  • iOS8がもう来週でるということで慌てて対応を行って申請しました
  • なので箇条書きで感想と行った作業をログっておきます。結構問題がでてきたので長い箇条書きになる予定。
  • 結論からいうと今から対応してもiOS8のリリースには間に合わないでしよう。今申請からリリースに10日かかります。
  • うちも間に合わなかった組です。
  • 数日前からiTunes Connectの画面がものすごい変わっていて混乱
  • 今まで複数の画面に分かれていたものがひとつの画面に統一された、縦に長くなって入力しづらいよこれ!
  • いままで英語以外で情報を表示できていなかったがちゃんと日本語訳がついた
  • とりあえずiOS8対応。XCode6を落としてコンパイルしたら一発で通って一見問題もないようで安心。
  • iPodの新しいのを買ってきてiTunesからGM版のiOS8を導入、あんまり変化ないなー。
  • つなげてインストール、実機でも制作部分については動作について問題なし。
  • だが広告のSDKについては最新版に差し替えたり、表示方法を調整したりする必要があった。
  • 具体的にはウィンドウのサイズを取得する関数がいままでオリエンテーションを考慮してなかったのが考慮するようになっていた。
    UIScreen mainScreen boundsをとって横置きの開始と縦置きの開始を比較するとわかる。
  • iOS7までは考慮しないという仕様だったので対応するにはバージョン分岐が必要。
    ただこのレベルの問題って仕様じゃないのかなあとは思うのでさくっとAPIの挙動を変えるのは、ちょっとおかしいですね。ツール系のアプリが来週だいぶ画面崩壊するはず。
  • 他にはメッセージボックスの仕様が変わってたりとかで心配したがこちらはiOS7のときのような問題はなく、既存のAPIも互換して使えていた。
  • といわけで広告SDKにまつわるコンパイルエラーを直して申請
  • 動画がアップできるというのでGoogle Playと同じものをアップしてもらおうと考えた。あとなんかアイコンが透過を許さなくなっているというので、透過もなくしてもらった。
  • いままでのバージョンではバイナリをアップするとメタデータが編集できなくなっていたので、申請ボタンを押すのは躊躇された。まあこのことは問題とは関係ない。
  • 今回バイナリをいつのタイミングでもアップロードできるようになっているというのでアップする。
  • 警告 : IDFAの使い方がiTunes Connectで指定されてない由が、Validateの段階で出る。IDFAの指定はメタデータの送信のときに出た記憶があるので、これは指定できなくて仕方がない。とこの警告を無視してアップロード。
  • バイナリはビルドとしてiTunesにたまっていく。今回、バージョンとビルドにバージョンの定義がわけられ、同じバージョンの複数ビルドをアップロードできるようになっている。
  • メタデータを送信するタイミングでビルドを指定する必要があるので上記のIDFAの警告は必ず目にしなくてはならない。
  • さて、動画の完成を待ってアップロードしようとしたが。Mac OS XとSafariの環境でしかアップロードできません。試してみたが、アップできない。よくよく見ると
  • Mac OS X 10.10上のSafariからアップロードしてくださいって、おい。まだ出て無いじゃん。マック潰して一台潰してベータ版いれろというのか。却下。
  • というわけで、アップロードしたバイナリを指定して申請しようとしたが。Processingとなっていて指定ができない。これ申請してから1時間くらいかからないと指定できるようにならない。なので申請にかかってた作業の時間は膨らむね、これから。
  • 1時間待つと指定できるようになっていたので、申請。いつものIDFAとか暗号化に関する質問を回答して送信。よし終わったちょつと他の仕事して帰ろう。
  • アップルからメール着信、IDFAの使い方が指定されてないので、バイナリリジェクトして再アップしろよ。とValidateの時と同じ文句を言われる。いや、指定しましたけど? あれバイナリをアップした段階で指定されてないといけないのかな? でもバイナリアップした段階では、ビルド指定できないんだからどうあがいてもこのエラーでるよね? あれ
  • キレて帰宅。
  • 寝て、自宅で作業継続。夜中の2時。というわけで2つ目のバイナリを送信。XCode6でビルドを変更してアップする必要がある。Validateしてみたところ、なんかエラーが出て出来ない。のでそのままアップする。 はいIDFAの警告はなくなってるね。
  • そして1時間待ち。ちょこちょこ確認するがなかなか反映されない。メタデータ関連の質問に再度回答して申請完了。
  • これで、ひととおりiOS8への対応が完了したけど、心配がないではない。iPhone6とiPhone6 Plus用の解像度があったけどこちらのスクリーンショットはアップしてない。多分今回はなんもいわれんのじゃないかとは思うけど。今後は指定する必要があるわけで、また手間が膨らんだな!
  • ワークフローと警告の出方が明らかにおかしいことを除いても、今回のiOS8とiPhone6は開発者にとって悪夢の類だと思う、ほんと、アップデートごとに地獄が訪れるのはやめてもらいたい。

2014年8月5日火曜日

XCode(iOS)でコードの署名まわりでエラーがでる場合の手順

備忘録。いつも何すればいいのかわからなくなるので。

■XCodeの署名まわりはトラブルが多い、代表的な事例は以下の二例 
> Code Signing Error...実機で起動しなくなった。
> Coudnot launch faile to get...とか出てデバッグできなくなった。

基本的に設定を変えたあとの変更ミスだと思うのだが、どうも直感的でない。
Adhocとかで人様にテストアプリ渡したあとだとかならずひっかかるのでなんというかとてもイライラする。
環境によるのかもしれないがこの正しく設定していてもエラーが発生することがあって。その場合は下記の手順でなおることがある。いわゆる、おまじない。

■Code Signing Errorが消えない場合の対処
1.コードのサインを指定する箇所は下記の二カ所がある
両方確認して修正すること
>PROJECT(xCodeのアイコン) 
>TARGET(アプリケーションのアイコン)

2. 署名の指定をなくしてクリーンビルド。エラーが出ることを確認
> Provisioningの指定をNone,Code Signの設定をDon’t Code Sign

3. 正しく指定をする。
>つまりReleaseのところにはDistributionプロファイルの設定、
DebugのところにはDeveloperのCodeSignとしてTeamプロファイルを指定する   
4. 再ビルドして動作するか確認。うまくいかなかったらXCodeを再起動とか

■ Could not launch failed to get the task for processの対処
> Runに対するSchemeが確認用にReleaseになっているのかもしれない
    Product > Scheme > Edit Schemeで設定を確認 Runの対象をDebugビルドにする
   => ただしリリース前にはReleaseでの確認を推奨

> 上記の署名まわりの修正手順をためしてみる

2014年6月14日土曜日

ユーザー視点から見るアプリ内広告

バナクリお願いでござるよ!! というフレーズが昔ありましたが。

ここしばらくアプリでバナクリお願いする立場になりまして、それでユーザー視点でこうした広告にどのようにつきあっていくべきなのかなということをまとめてみようと考えた次第。

アプリに関していえば、バナー広告、全画面広告、アイコン広告、CPIウォール、リワードウォールなどいろいろございます。個別での説明はユーザー視点ではまったく意味がないので興味があれば調べましょう。

広告うざいですよね。では、なぜこうしたものが張られているかというとまあないと稼げないからですね。継続的な更新やなんか次回が見たいと思ったのならクリックしてもらえると開発側は嬉しい。だけどクリックを強制するようなことは倫理的にできない(倫理観低いベンダも多いですが)

 話がちょっと逸れました。ではユーザーは気に入ったアプリがあった場合、広告とどのようにつきあうべきか。個別にみてみましょう。

------------------------------------------------------------------------

◆バナー、アイコン広告について

バナーとかアイコン広告に気に入った商品かあったらクリックして購入、インストールしてください。成果を出してください。でなければあまり貢献にならないのでクリックは適度にしましょう。 

実際バナー広告についてはクリックにたいして2%~20%くらいが成果になってます。逆にクリックされるけど成果がこれの数値より低いと、その広告枠は安い枠として買い叩かれるように成ります。

ウォールなどのインストール型広告について

最近よくみる「おすすめゲーム」ボタン、クリックするとなんかランキングっぽいページが表示されたりします。あれはあそこからアプリをインストールすると検知してメディアの報酬になる仕組みです。
海外だとChartBoostとかRevMob、国内だと、GameFeatが有名ですね。

これについては、そこからインストールしてもらうとそのままメディアにとってかなりの額の報酬になります。安定すればアプリ内課金よりもよいくらいで。気に入ったアプリ経由で気に入ったほかのアプリをインストールしてもらえるとデベロッパ的にはとても嬉しいですよ。

特にアメリカ、日本中心での動きですが、大手デベロッパはランキング上位にはいるためにもインストールをとりたいわけです。1インストールに彼らがかける額は$3~$5くらい。おそらくそのだいたい半分くらいがメディアに入ってきます。まあこうした上位獲得に必至な巨大資本さまからお金を頂くという筋の話ですね。

キャ○ク○とか○ラッシュオ○クラ○とかナ○コ、スク○ニ、グ○ーあたりのゲームをインストールすることは、彼らにとって数百円の価値があるのです。信じがたいことに。

リワード広告について
Appleからも嫌われてるみたいだし、やめていこうな。上のウォールに対してゲームで使える報酬を支払う形のものです。効果的だとは思いますけど触れません。

------------------------------------------------------------------------

お気づきになった方も多いと思いますけどリワード以外は、メディア側としては離脱を促してるわけでもあるので、けして広告出すのもよいことだけではないです。

体感だいたい30万DLくらいされるとこうしたバナー広告やウォールなどでもそこそこ人雇える程度の収益が得られるようになってきます。逆にいうとそのくらいいってるアプリでないと、広告張ってあるだけというのは全然ペイしてないんですね。

というわけで世の中ででてる1%程度のアプリしかバナーで儲けてはないので嫌儲 の人もご安心ください。けっこう作ってますけど、ほんと無料で稼げたなんて一握りですよ。

ウェブサイトに比べてアプリ内広告は効率がとても悪いです、あまりターゲティングの精度が細かくないからです。
※Admob+Adwordsあたりで制御すれば結構よくなってくるとは思いますがあんなもんむしろ金がなきゃ制御できんよね

まあこーした広告があってこそ、ゲームも無料でプレイできることが、なきにしもあらずですのでうまく広告とつきあっていこうよと考える次第。

2014年2月14日金曜日

cocos2d-x 2.2.1とかそのあたりでandroid向け/armeabi-v7でコンパイルすると大量に警告

はい

cocos2d-x 2.2.1でarmeabi-v7でコンパイルするとワーニングが大量にでてコンパイルできない問題。2.2.2は知らない。3系はためしてないが多分解決している。リリース用にコンパイルすべとv7をいれた途端コンパイルできねえとなるので、とても困る。

再現が面倒なので細かいメッセージは省くが、ワーニングを見るとlibcurlが含まれているのが確認できるはず。これは配布ファイル内のlibcurl.aがstripされてるのが原因とのこと。
$(cocos2dx_home)\cocos2dx\platform\third_party\android\prebuilt\libcurl\libs\armeabi-v7a\libcurl.a

これをgithubの3.0の配布ファイルに含まれてる下記のURLにあるものに置き換えれば、ワーニングは消える。

https://github.com/cocos2d/cocos2d-x/tree/develop/external/curl/prebuilt/android/armeabi-v7a/

2012年10月25日木曜日

Kindle

  • 買いますよええ、個人的にはpaperwhiteの方を、検証用にはfireを
  • amazonはまあもちろんですが、docomoが勝負に出てますね。
    • 回線費はAmazonが負担でどのくらいdocomoに利益が出るのか
  • 値段は安いが新たなandroidが増えたところでもう市場が飽和してるよねー
  • ストールマン先生の言ってたことももっともだが、 技術書の重さには耐え切れない
    • バックドアの問題以外はいたしかたない話でマネーがなければ何もはじまらないのだから個人情報とかは諦めるしかない、消せるんであれば有り難いが。
    • それを深刻に考える人が十分な数になればプリペイドカードでという話にもなろうよ
      • それを考える人が十分な数にならないのが多分問題そのものなんだろうけどね
    • 貸与っつーんなら端末を貸せばいい、e-inkはコピー機で複写できるよと、突っ込みどころはたくさんありますね。
  • ストールマン先生の言うところの問題はすべての書籍がe-bookにとってかわられ紙の書籍がなくなったときの問題もあると思う。データフォーマットがプロプラ云々。まあ、でもエロ本と同人誌があるから平気じゃね?
  • 一般的な流通を考えると書籍なんてものは中世から近代にかけてずっと市場や政府に規制されつづけてるものでオープンじゃないからだめという話にはあまりうなずけない。
  • 電池の寿命や、記憶装置の容量や、電子部品の寿命が一定以上になった場合、本を紙で読む文化が消失する可能性は十分ありえる
  • それは誰にとっての問題か
  • 一般的には不人気なものが電子書籍として読めるのは素直にありがたい話
  • 検閲、恣意的な操作など政治的問題になる可能性はありうる
  • 流通と本屋と出版業が一層厳しくなる、またひとつアメリカ企業がふくれる
  • 所有欲という観点からいくとデジタルデータとしての本は装飾としての属性を大幅に減少させたか、ポータビリティを持たせたものという理解ができなくもない。
    • たくさんゲームがDLされた3DSにはまあ、見せびらかして多少の装飾性はあるじゃないですか的な意味で装飾性は失ってないよ言説

2012年10月18日木曜日

RestKitの概要(翻訳)

RestKitについて検索しても国内であまりヒットしないのでトップページを翻訳。
使ってるけど、包括的にあんまり理解できてないので。冷静に読んでみると発見がある。
つか使い方覚えるまで、ちょっと違った書き方するだけで、BAD_ACCESSしまくるし、エラーメッセージが超曖昧。ばんばんAPIがObsolateしまくっていて、少し古い情報が役立たなかったりする、厄介なフレームワークですよほんとに。使いこなせれば便利そうだが。

http://restkit.org/
============================================================

RestKitはiOS向けのObjective-Cのフレームワークで、RESTful web serviceと、シンプルかつ高速に楽しく、対話することを目的としたものです。クリーンでシンプルなHTTPリクエスト/リスポンスのAPIと強力なオブジェクトマッピングシステムは製品作成において構築するべきコードを大量に減らしてくれることでしょう。

RestKitの第一目標はデベロッパが、リクエストの送信や、リスポンスのパース、リモートリソースの形式の構築に悩まされずに アプリケーションのデータモデルに注力できるようにすることです。

============================================================

RestKitがしてくれること

○シンプルで高レベルなHTTP Request/Response
RestKitはNSURLConnectionを基底としたHTTPクライアント と一緒にリリースされます。これはMIMEタイプやステータスコードの検査に関する便利なメソッドを含んでいます。フォームデータのサブミットもディクショナリによるパラメーターを指定することで簡単に行うことが出来、マルチパートデータの構築も容易に行うことが可能です。

○CoreDataのサポート
RestKitはオブジェクトマッピングレイヤの基底部分において、Appleのコアデータフレームワークとのインテグレーションを行っています。 このことにより、Restkitはリモートから読みこんだデータをローカルストアに直接永続化して、高速なローカルキャッシュとして、またはクラウドと定期的に同期するプライマリデータストアとして扱うことができます。
RestKitはCore Dataとの連携を用意し、データモデルをプロパティそのままの値を用いて、トラバースすることができます。また、コアデータのプリミティブに用意された良質なAPIを用いることで設定とユースケースの確認を省力化することができます。

○データベースシーディング
CoreDataをオブジェクトストアとして用いる場合、データファイルの集合としてデータベースをシードしておくことができます。このことによりAppStoreにサブミットする際に、アプリケーションバンドルにすぐに使えるデータベースを含めた形で提供することができます。

○サーバー及び開発環境の変更をフレームワークレベルでサポート
(development/production/staging)
RestKitは完全URLでなく、ベースURLとリソースパスの組み合わせでURLを管理します。このためターゲットとなるサーバーを容易に変更可能です。URL文字列の保管やNSURLオブジェクトの生成に頭を悩ませる必要はありません
 
○オブジェクトマッピングシステム
RestKitは、データのペイロードをネイティブのCocoaオブジェクトに宣言的にマッピングすることのできるモデリングレイヤを提供します。このことによりアプリケーションプログラマは、パース処理を行うことを考えずに、フレームワークに対してリモートリソースを非同期に呼び出し、結果をデリゲートを介して受け取ることができます。オブジェクトマッピングはキーバリューコーディングで実装されており、パースされたオブジェクトグラフを迅速にトラバースすることが可能です。リフレクション処理がプロパティに対して行われ、Stringに加工された日付をNSDateに復元することもできます。

○プラグイン可能なパーシングレイヤ
RestKitは現在JSON(SBJSON)とYAJLパーサーをサポートしています。パース操作はシンプルなインターフェースの背後に実装されており、容易かつ透過的に新規のデータフォーマットを追加することが可能です。
============================================================

2012年10月17日水曜日

グループ化されたUITableViewのセルを行単位でインデントする

  • 例によって、いい情報がなかったので。
  • iOS標準のアドレス帳(の編集画面)っぽく、UITableViewのCellインデントしたいケースがある。
    • ぶっちゃけ個人的に真似してみたかっただけ。
  • xibを用いる方法としてTableViewを含むViewを作って、TableViewを含むControllerに差し込む方法が考えられる。だがこの方法だとTableView自体に微妙にグラデーションがかかっているため見栄えが悪くなる。
    • なによりTableViewがふたつできて、delegateの呼び出すメソッドが二重になるという時点で泣きたくなるというかそもそも上手く動くのかすらわからない。
  • UITableViewCellのサブクラスを作成してStoryBoard上でインデントしたいCellに適用することでうまく動作した。
  • 掲示板でこんな感じにしたらーというやりとりがあったのでほぼ引き移し。とてもビューティフルとはいいがたいすなー。
  • コードは以下のような感じ
========================================
#import "IndentTableViewCell.h"

@implementation IndentTableViewCell{
    CGRect original;
}

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
        original = CGRectMake(0,0,0,0);

    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{

}

-(void) layoutSubviews
{
   
    [super layoutSubviews];
    if(original.size.width==0){
        original = self.frame;
    }
    CGSize offset = CGSizeMake(120,30);
    CGFloat newX = original.origin.x + offset.width;
    CGFloat newWidth = original.size.width - offset.width;
    CGRect newFrame = CGRectMake(newX,original.origin.y, newWidth, original.size.height);
    self.frame = newFrame;
   
}

@end
========================================
  • 端末を回転したときとかはうまく動かないので回転対応する場合は追加のコードが必要になるが、はじめて二週間と半分なのでそこまで学習できてないです(><)素人ですみません。
  • やってることは至極当然のことっぽいですね。あーこんなのWindowsでも10年くらいまえにみたわー。おれやったことあるわー。
  • iOS5.1target+Storyboard+ARCで組んでます。
  • あとでBlogger用のコードフォーマッターさがそう。古いのが新しいテンプレートで使えなくなってるんだよなあ。

(追記)単にこれだけだとiOS5.1以前で表示が崩れることが判明。むーん。独自にビューを作るしかないかー。 ただまあ考え方は便利なので残しておく。

2011年9月20日火曜日

アンドロイドアプリケーションの圧縮について

画像や音声を多く含む、Androidアプリケーションはサイズが大きくなりがちです。工夫次第で品質を保ったままでも、相当量アプリケーションのサイズを縮めることができます。サイズの小さなアプリケーションはユーザーのダウンロードも快適になります。
画像などのサイズが小さな場合プログラムの効率もよくなるでしょう。同じアプリの場合、3G回線で、画像未圧縮で20MBのサイズをダウンロードすることにユーザは躊躇するかもしれませんが、2MB程度になっていれば我慢してダウンロードしてくれるかもしれません

どこをどう圧縮すればいいかは、apkの拡張子を一旦zipにしてアーカイバで確認するとわかりいいです。

以下その手法について


①proguardを用いて不要コードを取り除き、classes.dexファイルを圧縮する
default.propertiesに'proguard.config=proguard.cfg'の行を追加すると、
コードが暗号化され、利用されてないコードが削除されます
⇒ただしライブラリなどを利用している場合無視する条件などを設定しなければいけずそこそこ学習が必要です
⇒生成されたクラスファイルそれ自体はzipすると圧縮されやすいファイルですのでそこまで気にすることはないです
⇒サイズも重要ですが構築に必要なライブラリはまあ使いましょうという話


②ビットマップ画像・音声などのメディアファイルを圧縮する
◎画像、メディアの圧縮はウェブでも共通するノウハウ、効果は高いです
◎PNGはアルファ透過が必要ない場合はたいてい8bitPNGで構わないです。
⇒アルファ透過は変えが利かないので32bit止む無し
⇒スマホやフィーチャーホンの場合ディスプレイの色表現力がそもそもなかったりします
⇒写真でなければ、だいたい256色で表示してもあまり見栄えはかわりません
◎PNG24bitの画像などはJPGで置き換えが利かないか検討しましょう
⇒フルカラーの写真画像であればJPGの方がより縮まります
⇒たいていの場合です。ベタ塗の画像など、「この色が何個続いて、その次にこの色が何個…」という感じな画像はPNGの方が高圧縮になまります。(つまりランレングス圧縮が有効な場合)
◎JPG画像の品質は100%⇒60%くらいまで縮めてもあまりわかりません。
ノイズが気になる場合は80%くらいに。
それも気になるなら95%に
⇒100%と95%では格段にサイズが違いますが品質は変わらないと聞いた記憶が
◎RIOT(Radical Image Optimization Tool)というアプリケーションを使うと、面倒な画像最適化を自動でやってくれます
⇒http://luci.criosweb.ro/riot/
◎音声も圧縮しましょう。
⇒圧縮形式の検討、ビットレートの検討、モノ、ステレオの検討など
⇒高品質な音声がスマホで常に必要かは…その人の主義やアプリによります
◎豆知識
ではJPGファイルはどのように圧縮をしているのか
⇒RGBで表現されるピクセルデータを「輝度」と「二種類の色相」で表現するように変換します
⇒人間の目は輝度には敏感ですが色相には敏感ではないです、ですので色相データを荒くします
⇒色相の部分はわかんない程度にモザイク状にしてしまいます
⇒DCT変換⇒整列⇒エントロピー符号化は難しいので省略
⇒つまり人間の感覚の許容範囲を元に画像を縮めているので場合によっては
他の圧縮形式のが効率がよいということを理解できればOKです
◎画像フォーマットそれ自体に知識を持つといろいろ役に立ちます


③SVGファイルを用いる
画像を使う場合ビットマップでなくSVGファイルを用いるようにすると劇的にサイズを縮められます。
⇒PNGなどのビットマップはどうあがいても画像サイズ分のデータを持ちますがSVGは描画に必要なパスデータしか含んでません
⇒これは制作が使ってるライブラリが対応してればというのもありますね。
  ⇒幸いsvg-androidという名前でgoogleprojectを検索するとモノがありますのでこれを使うようにしましょう

④不要なファイルを削除する
基本的なことですが忘れがちです、使ってないファイルはapkファイルに含まれないように取り除きましょう

⑤サイズの縮小にあまり頑張りすぎない
手のひら返し的ですが あんまがんばんな、圧縮は単に手段のひとつですよというお話
⇒いいコンテンツならかりかりに圧縮されてなくてもユーザーはおとしてくれるさ
⇒上にあげたようなツールでさくりとできる程度以上の圧縮は必要ないと思います
⇒サイズの圧縮に時間をかけて、ギリギリの線を目指すような必要はないということです。
⇒縮まらないものはどうしても縮まらないです

2010年8月24日火曜日

i-mode html simulatorでguid=ONが利かない問題の妥当と思われる解決策

  • 携帯のWEBアプリを開発
  • i-mode html simulatorで?guid=ONが利かないので困る
  • だがネットワーク設定にプロキシの項目は存在しているので
  • なつかしのProxomitronを使えば普通に解決することにきづいた
  • http://proxomitron.sakura.ne.jp/
  • そもそもi-mode側もそのような感じの動きをしているわけです
  • FireMobileSimulatorはFirefoxのプラグインがそのまま使えるのでそれはそれでいろいろ見られてよいのだけど
  • FireFox使ってる人間としては鬱陶しいことこのうえないのでこの組み合わせが一番楽かなあ