Hatena::Groupiphone-dev

iOS プログラミングメモ

2008-11-30 (Sun)

ファイルのタイムスタンプについて 18:27  ファイルのタイムスタンプについて - iOS プログラミングメモ を含むブックマーク

NSFileManager#attributesOfItemAtPath の中に NSFileCreationDate てのがあってファイルの作成日時がわかるんですが、実機じゃ動かない罠にハマりました。

NSError *error;
NSFileManager *fm = [NSFileManager defaultManager];
NSDate *date = [[fm attributesOfItemAtPath:@"anatanofile" error:&error] objectForKey:NSFileCreationDate]
NSLog(@"date: %@", date);

シミュレータ

date: 2008-11-30 18:03:48 +0900

実機

date: (null)

マジで…

Sales/Trend Reports の 7 22:46  Sales/Trend Reports の 7 - iOS プログラミングメモ を含むブックマーク

売上レポートのなかに、「Product Type Identifier」が「7」となっているものが大量に出始めて。この行に表示されている値段が0円になってるから、なんだろうなーと思って不安になって調べてみたら、アップデートの数だという事がわかりました。あー、更新した人数がわかるようになってるのか。

この前アップデートしたから、それをあててくれた人の数みたいですね。使ってくれて、どうもありがとうございます。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081130

2008-11-29 (Sat)

モリサワ\(^o^)/ 19:04  モリサワ\(^o^)/ - iOS プログラミングメモ を含むブックマーク

とか言いつつ

俺以上に涙目なのは、青空読書さんだよなぁ、とか思ったりも…。

とりえあず

ちょうど宣伝活動を始めようと思ってた所なので、頑張りますか。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081129

2008-11-27 (Thu)

SkyBook 1.0.1 10:21  SkyBook 1.0.1 - iOS プログラミングメモ を含むブックマーク

バグフィックスや動作改善を行なったバージョン1.0.1がリリースされました。

実はこのバージョンのアップロードの際にはちょっとした目論見がありました。それは「このバージョンの新機能」の欄に「バグフィックス」としか書かなければ審査は早くなるんだろうか?というものです。新バージョンをアップロードしたのが23日の SkyBook が登場 したすぐ後だったので、実質4日くらいかかりました。まあ、普通くらいでしょうか。残念ながら、特に早くなるって事はないような感じです。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081127

2008-11-26 (Wed)

iPhoneOS のバージョンアップが有料となった場合 09:59  iPhoneOS のバージョンアップが有料となった場合 - iOS プログラミングメモ を含むブックマーク

とりあえず、iPhoneOS3 が有料バージョンアップだと仮定します。

  • 開発者がアップロード出来るのは、特定のバージョン向けにビルドしたバイナリのみ(現状がそうなっている)
    • 新しいアプリは2.x系に対応しない
    • 既存アプリのバージョンアップは2.x系に対応しない
    • その時ユーザは?
      1. 我慢して古いバージョンのアプリを使い続ける
      2. 諦めて3.xにアップグレード
  • 開発者は2.x系と3.x系のバイナリを用意してアップロード出来るようになる
    • 両方を保守するのは面倒なので、2.x系の保守は放棄
      • その時ユーザは?
        1. 我慢して古いバージョンのアプリを使い続ける
        2. 他の2.x系保守を謳ってるアプリに乗り換える
        3. 諦めて3.xにアップグレード
    • 頑張って両方保守
      • その時ユーザは?
        1. 2.x系を保守してないアプリから乗り換えてくる

アプリをいっぱい入れてる人は、もはやファームアップしないと生きてけないよね。

問題は我々開発者はどうすれば良いのかって事。値段にもよるけど、多くのユーザは新ファームウェアに移行するような気がするんで、頑張って両系統の保守をする意味ってほとんどなさそうなんだよなー。どうなんでしょうね。互換性次第で保守のしやすさも変わるし、わかんないですねー。

ファームアップが有料になる可能性は十分あるというか、いつか確実にあると思います。

ちなみに

僕のアプリは可能な限り一系統前のバージョンまでは保守しようと考えています。

AppStore での順位 12:23  AppStore での順位 - iOS プログラミングメモ を含むブックマーク

順位とかレビューとかって結構モチベーションに影響するわけなんですが、その順位の変動をチェックしたい。グラフにしてニヤニヤしたい。調べてみても、API とか提供されてる様子はないし、どうやればいいのかわかんない。レビューの集計とかアプリの説明とかを自動で収集してるようなページがいくつもあるから、何とか出来ると思うんだけどなぁ。どうやってんだろ。いまいちわからん。

アプリのランキングをチェックする 15:48  アプリのランキングをチェックする - iOS プログラミングメモ を含むブックマーク

めんどいから適当に正規表現でパースしてリストを作った。MyApps にチェックしたいアプリの ID を入れておけば良い。STORE の値を変えると日本以外のストアのランキングも見れる。詳しくは no title に書いてある。ちなみに後ろについてる -9 は表示言語が日本語って意味っぽい。試しに -1 にすると英語環境でのアプリの名前が表示される。

#! /usr/bin/env ruby

require 'zlib'
require 'open-uri'

MyApps = %w(296500859 294465691 291634994)
STORE  = '143462-9'

URL = 'http://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewTop?id=25209&popId=30'

def main
   open(URL,
      "User-Agent" => "User-Agent: iTunes/8.0.2",
      "X-Apple-Store-Front" => STORE) do |f|

      gz = Zlib::GzipReader.new(f)
      i = 0

      begin
         gz.each do |line|
            next if !line.match(/Buy.*salableAdamId=(\d+)/)
            i += 1
            next if !MyApps.include?($1)

            line.match(/itemName="([^"]+)"/)
            puts i.to_s + ": " + $1
         end
      ensure
         gz.close
      end
   end
end

main

結果

296500859: [17] ポケット青空文庫 - SkyBook
291634994: [52] Aozora Vol.1
294465691: [61] 文庫リーダー・「soRa」

appbankappbank2008/11/26 13:23つhttp://blogs.oreilly.com/iphone/2008/08/scraping-appstore-reviews.html

レビュー情報だけではなくいろいろとれます。
年初あたりにランキングチャートを作ろうかと思っていましたが、よろしかったらどうぞ。

ktakayamaktakayama2008/11/26 13:34おお、そのブログはエリカ様じゃないですか。
どうもありがとうございます! お陰で欲しい情報が取れました。
さーて、ここからグラフにしちゃおうっと。

masatoshisw20masatoshisw202009/05/26 17:47ありがとうございます。参考になりました。
古い記事に今更で恐縮なのですが、
gz = Zlib::GzipReader.new(f)
の行を gz = f に変えたら動いたので、一応お知らせします。
仕様変わったみたいですね。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081126

2008-11-25 (Tue)

NEW 22:05  NEW - iOS プログラミングメモ を含むブックマーク

What's Hot やら New やらに登場したらマジで嬉しいよな〜。

青空読書 09:55  青空読書 - iOS プログラミングメモ を含むブックマーク

iTunes で見ると、アイコンが綺麗なものにアップデートされてますね。新バージョンの申請したのかな? ドキドキ。

サポートサイトに更新の予定が書いてあった

これはだいぶ脅威ですな。うかうかしてらんないっす。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081125

2008-11-24 (Mon)

iPhone OS にインストールされているっぽいフォント一覧 22:04  iPhone OS にインストールされているっぽいフォント一覧 - iOS プログラミングメモ を含むブックマーク

UIFont#fontWithName で指定出来る fontName の一覧になるのかな。

こうして

NSEnumerator *enu = [[UIFont familyNames] objectEnumerator];
NSString *font;
while(font = [enu nextObject]) {
   NSLog(@"%@: %@", font,[UIFont fontNamesForFamilyName:font]);
}

出力結果…をここに書く前にふと思い立って調べてみたら、見やすく一覧にしている人が既にいた。チェックしてみたら全部一緒だった。

SkyBook の売れ行きは好調のようです 00:34  SkyBook の売れ行きは好調のようです - iOS プログラミングメモ を含むブックマーク

お陰様で有料アプリケーションのランキングも上昇してきており、大変嬉しく思います。この感謝の気持ちを、期待されているバージョンアップで返していければ良いなと思います。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081124

2008-11-23 (Sun)

SkyBook 登場! 08:53  SkyBook 登場! - iOS プログラミングメモ を含むブックマーク

ついに拙作の青空文庫ビューワ - SkyBook - が AppStore に登場しました!!

いや〜、この10日間ほどは毎朝ドキドキしながらメールチェックをしていましたが、やっと開放されました。最悪の事態は免れて本当に良かった。

しかし、アプリのリリース日が11/12になってるんですよね。リリース日順で並び替えると後ろの方になって涙目。もう Pending Contract じゃないのに…。

これって、アップルにアップロードした日の日付が入ってるぽいですね。ちなみに青空読書はリリース日が11/18となってて、ストアに登場したのが19日(日本時間的に)って事はつまり…。いや、考えるのは良そう。自分の勝負はここからだ。

○○を探せ! 12:54  ○○を探せ! - iOS プログラミングメモ を含むブックマーク

SkyBook ではちょっとした遊びを用意しておりまして、それがこの「○○を探せ」とかいう企画です。

サポートサイト に企画なるページが用意されており、そこに説明が書いてありますが、ようするにどっか適当にタップすると何かが起きる、っていうただそれだけの話です。イースターエッグみたいなもんです。イースターエッグの良い案が思い浮かばなかったので、このような形になりました。イースターエッグはいつかそのうち仕込みたいです。

最初は、見付けた人に抽選で商品を上げようかと思ったんですが、さすがにそれはアコギかなと思ってやめました。

楽しんでいただければ幸いです。

日本だけに向けてアプリを提供する場合でも、英語の Description には気を配りたい 23:19  日本だけに向けてアプリを提供する場合でも、英語の Description には気を配りたい - iOS プログラミングメモ を含むブックマーク

今回始めて気付いたのですが、iTunes の設定を英語モードにしているユーザには、英語の Description が表示されるようです。したがって、日本市場にしか提供しないようなアプリでも、英語の Description はちゃんと書くか変な事を書かないようにした方が良いと思われます。

僕はアプリのレビューをしてくれる人に向けて、「For Reviewer」とした上でアプリの操作方法について延々書いていたら、それが iTunes 上に表示されてしまって何とも情けない状態になってしまいました。

なぜこんな状態になるかと言うと、iTunes Connect のデフォルトの言語が英語になっているので、日本語より英語が優先して表示されてしまうからだと思われます。ちなみに、デフォルトの言語を英語にしておくのはほぼ必須でしょう。(参考 iPhoneアプリ開発 - 身をもって学んだ9の教訓 の5番)

つまり、デフォルトの言語を英語にしている人は、英語の説明は手を抜いちゃダメって事ですね。SkyBook の Description がアノ状態では全く説得力はありませんが。

zionzion2008/11/23 12:52どの文庫ビューワが良いかと考えている時に、先日たまたまこちらのサイトに流れ着きまして、これも何かの縁とAppstoreに登場するのを待っていました。
リリースおめでとうございます。 早速購入させて頂きました。
今後のバージョンアップにも期待しています。

ktakayamaktakayama2008/11/23 12:58本当にどうもありがとうございます!
期待に答えられるように全力で頑張っていきます!!

cat_arqeecat_arqee2008/11/23 13:21こんにちは!
公開おめでとうございます&ありがとうございました!
便利な文庫ビューア探してました。
色々カスタマイズできてなかなか良いですね!
是非ともルビに対応して…いや気長に待っていますので
気が向いた時にでも宜しくお願いします。

ART2ART22008/11/23 15:00リリースおめでとうございます。

青空読書より格段に早いです。気持ちいい。
フォントの大きささや行間を都度変えれるのもいいですね(青空読書は画像作成時のみ)。
ただ、ページ切り替えが青空読書は一瞬で変わるのですがSkyBookは高速スクロールなので、何となく酔いそうです(笑)。

青空文庫読むときはルビ対応ほしいですね。

ただ、私は青空文庫よりその他のフリー作品を読むことが多いのであまり気になりません。
「独自テキストのインストール機能」をぜひお願いします。
(SkyBookも青空読書もとりあえず読めちゃいましたが(笑)。
 青空読書はタイトルも変えれたけど、SkyBookは本文だけなので
 探しにくい)。

ktakayamaktakayama2008/11/23 22:59> cat_arqee さん
ありがとうございます!
ルビ必要ですよね。僕もルビは欲しいんで、何とか対応したいです。

> ART2 さん
ありがとうございます&お待たせしました!

フリーテキスト入れたんですか。ちょっと裏技チックですね。
作品名は DB から持ってきてるので、DB をいじらないといけないから、手軽にはやりにくいです。

スクロールに関しては、ちょっと前の行を見たい時とか、手動で位置調整出来る SkyBook は
手軽に戻れて便利です! 多分慣れます!!笑

gammagamma2008/11/24 00:18将来の予定に自前のテキストを読み込めるとあったので、期待を込めて購入させていただきます
贅沢を言うなら明朝体フォントで読みたいですが(笑

ART2ART22008/11/24 13:27>ktakayamaさん

 スクロールはすぐ慣れました(笑)
 さくさく動くので一押しです。
  ・Booksに「最近読んだ作品」「ダウンロード履歴」「作家別一覧」と3種類のリストが出ていますが、
   これらはメニュー分けしたほうが見やすいかなと思いました。
  ・「独自テキストのインストール機能」実現すればメイン確定です。

  →現バージョンはフリーテキストをいくつも入れるのはつらい(リストから探せない)ので、
    青空文庫:Skybook
    長文のフリーテキスト:Skybook(1~2ファイルを入れ替えながら)
    他フリーテキスト  :青空読書
   と併用するつもりです。

 (参考までに)
 青空読書は、
   ・1作品ごとにサブフォルダに保存される
   ・zip内のテキストファイル名のまま保存・管理されている
   ・縦書き画像作成前は、サブフォルダ名とファイル名のみで管理されているらしい。
   ・縦書き画像を作成する画面でタイトル・作者の再設定可能。
    (テキストファイルの1、2行目から自動&手書き修正)
   ・縦書き画像は何度でも削除・作成可能(遅いけど)
 という構造なので、同じファイル名で内容を変えていけばフリーテキストを表示でき、一覧の題名も変更できます。サブディレクトリ内に他のファイルがあっても問題無いようなので、内容をあらわすファイルも一緒に入れています。
 (私が勝手にやっているので、影響皆無かどうか不明ですし、バージョンアップ後もできるかどうかも不明です)

ktakayamaktakayama2008/11/24 17:33> gamma さん
期待に答えられるように頑張ります。

> ART2 さん
色々ご要望ありがとうございます。

もしかして、様々な書籍を横断的に読んでらっしゃるのでしょうか?
現状の Books 画面の仕様は、長編を順番に一個ずつ読むような形に最適化されている(ような気がする)ので、そのせいもあるかもしれないですね。「最近読んだ作品」以外のリストを使う事は滅多にないと言う考えに基づいた設計なんです。
インタフェイスについては、まだまだ改良の余地がありそうです。慎重に進めていきます。

ktakayamaktakayama2008/11/24 22:06明朝フォントは知人にもリクエストされていたんですけど、フォントが入ってないみたいですね…。
フォントを組み込む技術あれば良いんですが、今は何とも。

ART2ART22008/11/24 22:28>もしかして、様々な書籍を横断的に読んでらっしゃるのでしょうか?

 土日にまとめて入れておいて平日、通勤中に読んでいきます。気に入ったものはそのまま残していたりするので20ファイルくらいは入っています。

 小説は続けて読みますが、エッセイのようなものは、あちこちをすこしずづ読んだりもします。
 例えば、小説を読んでいて読み疲れたら、章の切れ目で他のファイルのエッセイを1つ読んでまた続きを読むというような読み方もしています。

ktakayamaktakayama2008/11/25 00:38なるほど、確かにそれだと現状のインターフェイスは合ってないですね。
ご意見大変参考になりました。ありがとうございました。

taicha_2001taicha_20012008/11/25 21:48良いアプリですね。
久々に青空文庫を読む気にさせてくれます。
私もこれくらいちゃんとつくらないとダメだなぁ。

ktakayamaktakayama2008/11/26 00:30ありがとうございます。
そういって頂けると、大変励みになります。

2008-11-22 (Sat)

とりあえず 18:34  とりあえず - iOS プログラミングメモ を含むブックマーク

soRa のバージョンアップが登場するまえに出てくれる事を切に願います。

最新のレビュー 18:41  最新のレビュー - iOS プログラミングメモ を含むブックマーク

soRa の最新レビューで星一個の奴ちょっとひどくねーか。どう見ても工作員です、とか思ったけど他にも普通にレビューしてるし普通の人なんだろうな…。疑ってごめんなさい。でもあの内容で星一個はひどいと思う。

俺のもルビ対応してないし、似たような事を書かれそうで今からドキドキっす。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081122

2008-11-21 (Fri)

いま考えている不安 11:51  いま考えている不安 - iOS プログラミングメモ を含むブックマーク

何やらiPhoneOS2.2がリリースされるとかされないとか噂がありますが、俺のアプリがリリースされる前に2.2がリリースされると、2.2対応バージョンをアップする開発者が殺到してなんか後回しになっちゃいそうな、そんな漠然とした不安があるわけです。

まとめ 15:31  まとめ - iOS プログラミングメモ を含むブックマーク

なんかイラついてしかたないので、心の平穏を取り戻すために今までの流れをまとめてみた。

  • 10/23 - 青空文庫のアプリなかなか来ないなー、誰も作ってないのか、じゃ作るか
  • 10/25 - 縦書きも意外とイケそう
  • 11/06 - そこそこ形になってきたから 紹介
  • 11/07 - 文庫リーダー soRa 登場で 涙目
  • 11/12 - バージョン1.0.0が完成したので Apple へ申請
  • 11/13 - Pending Contract 解除
  • 11/19 - リジェクト → 修正版を速攻アップロード
  • 11/19 - 青空読書登場
  • 11/21 - iPhoneOS2.2 登場 ← 今ココ

意外にも開発を始めてからまだ一ヶ月も経ってないのかぁ。soRa のお陰?で凄い頑張って初期バージョン完成させたからな。あの一週間は濃かった。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081121

2008-11-20 (Thu)

世界 08:22  世界 - iOS プログラミングメモ を含むブックマーク

あー、やっぱりネイティブアプリの所に書いてたのは fladdict さんで正解。

僕も世界展開には興味があって、ちょっとやってみたいと思ってる事とかあるんですが、まあそれは置いといて。自分のような個人事業主の人、意外と多いっぽいので真面目にやれば結構協力者は集められるんじゃないかなと思います。自由な時間も割とあるし。

僕はウェブアプリの開発が専門でして、お手伝い出来る事があったら協力していけたらいいなと考えています。

トラックバックがうまく飛んでないような

リジェクト後1日経過 08:37  リジェクト後1日経過 - iOS プログラミングメモ を含むブックマーク

ほんのちょっとだけ期待しながら目覚めたんだけど、まだ何も変わらず。やっぱこれって、順番待ちの最後尾にまわされちゃうのかなー。言われた所を変えただけだから数分でチェック出来そうなもんなんだけど、これは痛いなあ。

黒川黒川2008/11/20 11:28はじめまして、はじめてコメントします。
いつもブログ読ませていただいています。

僕も先週はじめて登録したアプリがリジェクトされました。
すぐに修正して登録しなおしたら、2日後くらいにReady for Saleメールがきました。

おお!と思って見に行ったら案の定Pending Contractでしたけど。。

ktakayamaktakayama2008/11/20 15:47コメントありがとうございます。
そんな事いわれちゃったら、今晩もドキドキしてなかなか寝られなくなります。:D
それにしても、Pending Contract 問題は一向に改善の兆しが見られませんね…。はやく何とかなると良いのですが。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081120

2008-11-19 (Wed)

リジェクト 12:06  リジェクト - iOS プログラミングメモ を含むブックマーク

今日、何の反応もなかったら新しいバージョンに差し替えて申請しようと思っていたら、リジェクト通知がきました。

ちょっくらボタンの使い方に問題があったようなので、そこだけ変えて高速でアップしましたが、すぐチェックしてもらえるんでしょうか…。この一週間、メールしても反応ないし悶々と過ごしていたので、進展があったのは素直に嬉しいです。

気になるのは、リジェクトメールの中身が日本語だったんですが、日系のチェッカが居るのかしら?

いわゆる日本だけで展開しているウェブサービスのアプリとかのレビューはどうしているのかすっごく気になってたんですが、どうも普通に専用スタッフがいるっぽいですね。

リジェクトの内容 12:23  リジェクトの内容 - iOS プログラミングメモ を含むブックマーク

情報共有って事で。大して参考にならんと思いますが。

今回のアプリは、UINavigationBar に UIBarButtonSystemItemBookmarks のアイコンを使ったボタンが置いてあって、これをタップすると設定画面が開くようになっていました。何でかっていうと、まあ本を表示する画面の設定だからっていう意味で、大きな意味はないんですけどね。しかしこのボタン、名前からもわかる通りブックマーク用なわけで、設定画面が開くのはガイドラインに反しててユーザが困惑するから代わりにインフォボタンとか使ってみろよって言われました。

UINavigationBar にインフォボタンって配置出来るのかな…?あんまりデバッグに時間を書けたくなかったので、次のように Prefs と言う名前のボタンにしておきました。

UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc]
   initWithTitle:@"Prefs" style:UIBarButtonItemStylePlain target:self action:@selector(showConfigView)];

これで審査通るといいな。

青空読書 15:54  青空読書 - iOS プログラミングメモ を含むブックマーク

文字サイズ、色変更、ルビにも対応してる。オワタ。

efclefcl2008/11/20 00:04青空文庫以外からもファイルを追加できるなら需要ありますよ。
青空読書も青空文庫限定っぽいので。

faultierfaultier2008/11/20 00:07俺は「誤った設定をしたときはアラート出すようにしろよ、ガイドラインに書いてあるだろ」って趣旨のリジェクトメールを貰ったこともあります。
ガイドラインはちゃんと読めよってことですね…。
あと、日本語でメール送られてくるときはかなり定型文っぽかったので自動送信かテンプレがあるのかなと疑ってみたり。

art2art22008/11/20 01:10efclさんに一票。

青空読書使ってみましたが、縦書きは画像で保存して表示している関係か、縦書き作成、表示とも時間がかかります。
クイック動作を売り物にしても対抗できるかと思います。

ktakayamaktakayama2008/11/20 08:29> efcl さん
ファイル追加は出来るようにするつもりです。他のアプリも取り入れてくるんじゃないですかね。
僕のは XML データを解析しているので、その辺をどうするかを悩んでいます。

> faultier さん
確かに定型文ですねー。まあ、日本語がわかってないと定型文も送れないかなと考えてみたり。
誤った設定のアラート、出してないですね。いずれ言われるかも。今回はこれで通って欲しい。

> art2 さん
あー、ファイルの容量を見た感じ画像かなーと思ってましたがやっぱりそうでしたか。
容量大きいと、バックアップ速度が遅くなったりと色々難点なんですよねー。
これはまだチャンスがありそうです。気になってたので、情報感謝です!

僕が作る物はスピード命なんで、その辺は期待していてください!!
と言っても、結局 soRa とはあまり変わりませんが。^^;

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081119

2008-11-15 (Sat)

カラム名「id」のデータを保持する変数の名前 15:15  カラム名「id」のデータを保持する変数の名前 - iOS プログラミングメモ を含むブックマーク

ってどうしてます?

インスタンス変数に id って名前は使えないじゃないですか。

今は key って名前にしてるんですけど、イマイチ気に入らなくて…。

DB のモデルを楽につくるためのライブラリを作って使ってまして、結構便利だからオープンソースで公開したいんですけど、この部分が気になって夜も眠れません。

primary にしようかなと思って迷ってます。

ちょっと宣伝しておくと

上で書いたモデルってやつはかなり Railsインスパイヤされてまして、例えばこんな感じに使うわけです。

SkyAuthor *author = [SkyAuthor find:1];
author.name; // ← ID が 1 の列の name カラムの値が入ってる

id 使えない事もないのかな

こんなクラスを作って

@interface TestMethod : NSObject {
   @public
      int id;
}
@end

@implementation TestMethod

- (void) setter {
   self->id = 123;
}

- (int) getter {
   return self->id;
}
@end

こうしたら

TestMethod *test = [TestMethod new];
[test setter];
NSLog(@"get: %d", [test getter]);
test->id = 333;
NSLog(@"get: %d", [test getter]);

ちゃんと結果返してきた…(!!)

Nov 15 06:24:05 a.out [28941]: get: 123
Nov 15 06:24:05 a.out [28941]: get: 333

むー、気持ち悪すぎる。

もう一個出来た

意外と出来るもんだ。

@interface TestMethod : NSObject {
   int _id;
}
@end

@implementation TestMethod
- (int) id {
   return _id;
}
@end

これで test.id みたいな感じで id の値が取れる。

どうせ外部から id をセットする事はないんで、これいいかも。

こんな書き方、オッケーなんですかね、しかし。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081115

2008-11-13 (Thu)

Pending Contract が半分解除になりました 09:39  Pending Contract が半分解除になりました - iOS プログラミングメモ を含むブックマーク

今朝いつものように iTunes Connect にログインしてアプリケーションの画面を見てみると、いつもと違う表示が…。そうです、ついにアプリが Pending Contract じゃなくなりました!!!

なぜか Free Applications の方がまだ Setup in Process のままなのですが、これは有料アプリを登録しまくれって言う意向ですね。わかりました。

いやあ、しかしただ待つだけってのはホントつらかったっす。

太平洋標準時を表示しておくライフハック 00:11  太平洋標準時を表示しておくライフハック - iOS プログラミングメモ を含むブックマーク

ライフハックだって…w

と言うのはさておき、クパチーノ時間を表示しておくと、なにかと有用かもしれません。

例えば Pending Contract を待っている間は、5分おきに iTunes Connect を確認したくなりますが、日本時間で言う19時とか20時は、クパチーノだと深夜になるので、更新される可能性は微塵もありません。でも時差の事を忘れてると、ついついチェックしてしまいます。

17時間ずれてるので、7時間足せば時間なんてすぐわかるジャンって言われちゃうと終わりなんですが、パソコンに常に表示しておくと結構意識します。例えば、これを書いてる今現在は7時って表示されてるので、おおー、もうちょっとしたら向こうの人たちも出社だなぁ、俺のアプリのレビュー楽しみに待ってますよお願いします、って意識が芽生えます。何の意味もないけど、なんかこう気持ちの問題。

taicha_2001taicha_20012008/11/14 06:30あ、私も半分解除です。
有料の方が先ってどういうこと?って感じですが(笑)。

ktakayamaktakayama2008/11/14 10:24無事 free も解除されました♪

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081113

2008-11-12 (Wed)

青空文庫アプリの申請をしました 23:52  青空文庫アプリの申請をしました - iOS プログラミングメモ を含むブックマーク

先ほどアップロードしました。soRa への牽制もかねて、早めに紹介。しかし Pending Contract 状態なので、いつ発売になるかわからんのです。とか何とか言ってるそばから Pending を抜けたので、レビューだけ待てば良くなった。遅くとも一週間くらいで出ると思います。

f:id:ktakayama:20081112232745p:image:w180 f:id:ktakayama:20081112232744p:image:w180

見ての通りの、青空文庫に登録されているデータから好きな作品をその場でダウンロードして読むことが出来るようになるアプリです。特に解説が必要なほど機能過多ではありませんので、soRa との違いを見ながらどんなアプリなのかご紹介します。

文庫リーダー「soRa」との違い

※あくまで現時点での比較であって、今後のバージョンアップで変わってくる可能性は十分あります。

  • 文字サイズ、行間、文字間が自由にいじれる
  • 白背景、黒背景の選択が可能
    • バージョンアップで、自由に好きな色を選べるようにする予定
  • ダウンロード可能な作品点数が多い
  • 余計な画面遷移が少ない
  • 「全ての作品」から全文検索が出来たり、サクサクダウンロードできる
  • 「しおり」機能は無い
    • ※最後に読んでいた位置を記憶する機能は、当然あります
  • ページ番号を指定した直接移動が出来ない
    • 1ページずつスクロールするのみです
    • バージョンアップで対応予定

実は (X)HTML を解析してデータとして落としこんでいるので、いわゆる青空文庫形式のテキストデータの読み込みには対応していません。が、soRa の方は青空形式のデータを読んでいるようなので、今後対応したりするための技術的敷居は低いように感じています。どうなるかわかりませんけど。

ルビに対応したいとは思っているんですが、現状の実装だとパフォーマンス的にちょっと厳しいように感じています。読みが難しい言葉、結構多いんですよね。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081112

2008-11-11 (Tue)

チュートリアルとか TIPS とか 09:27  チュートリアルとか TIPS とか - iOS プログラミングメモ を含むブックマーク

ほとんどの事は SDK 付属のリファレンスマニュアルに書いてある事なので、リファレンスが読めれば特に必要もないような気がします。ていうか、中途半端にコピペで済むような環境が整備されると、マニュアル読まなくなって効率が低下するばかりか、いわゆる TIPS とかに書かれてないようなマニアックな事を知る機会がなくなります。新しい事をする時も、ググるよりマニュアルから探す方が早いし。

でも、最初の取っ掛かり的なチュートリアルはあっても良いと思いますけどね。あとは、取っつきにくい Interface Builder の使い方とか。自分もアップル以外の情報なら、Hello World のビデオ は見たし。なんだかんだ言って、チュートリアル的なものをちゃんと見たのはこれとアップルの電卓のやつくらいかな。

ああああ、でもリファレンスマニュアルって英語なんだよなー。でも、英語全くダメ無理って人はそもそも開発始められないよね…、きっと…。自分も英語あんまり得意じゃないけど、毎日リファレンスと睨めっこしてたらだいぶ慣れてきたよ。

スパムメール 20:25  スパムメール - iOS プログラミングメモ を含むブックマーク

サブジェクトが「Contract e-fulfilment」なんていうメールがスパムフィルタを飛び越えてやってきたからヒャッホウと思って開けたけどどう見てもスパムです。本当にありがとうございました。

join 00:32  join - iOS プログラミングメモ を含むブックマーク

SQLite で join 句使うとちっと遅くなるような気がする。あ、もちろん実機で動作させた場合ね。

一部の動作に引っかかりがあってアレコレ調べてたら、select * from hoge left join fuga on ... みたいにやってる所の sqlite3_step の実行が遅い。なんか一回実行するのに0.05秒くらいかかってるっぽくて10件取っただけで0.5秒も経過しちゃうし。ちなみに、join を使わない普通の select 文だと sqlite3_step の実行にかかるのは0.01秒以下。

まあ0.5秒くらいなら許せる範囲だけど、同じようなことを三回くらい実行してて、そうすると1秒以上かかっちゃうんだよね。ユーザはそんなノンビリ待っててくれないから、これはちょっと困る。みなさんはどうですか?

自分の SQL の組み立てが変なのかなー。join 出来ないと、リレーション出来ないからすごく不便なんだけど。

組み込み開発的には、単一のテーブルで全てのデータを取得出来るようにして、問い合わせのコストは下げるべきなのかなー。アップデートって、そんな頻繁でもないしね。

obysobys2008/11/12 06:05SQLiteのjoinが遅くなる件ですが、インデックスはったら早くなりませんか?

ktakayamaktakayama2008/11/12 09:14おお、インデックスの存在をすっかり忘れてました。
試してみたら10倍以上の速度が観測され、ちょっぱやになりました。
ありがとうございます! 危うく泥臭いコードを書いてしまう所でした。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081111

2008-11-08 (Sat)

hogehoge.strings を vim で編集 12:00  hogehoge.strings を vim で編集 - iOS プログラミングメモ を含むブックマーク

Localizable.strings を作って各国語版の作成だぜヤッホーいと思って XCode でファイルを作成していざ vim で編集…と思いきや、これ、バイナリファイルじゃあないっすか。

しかし、以前見かけた iPod touch 用ソフトウェアの Localizable.strings はテキスト形式だったはず、と思って試しにテキスト形式で作り直したら普通に認識されました。

こっちの方が速度が遅いとか、そんなのあるのかな。ないよね。

速度と言えば、iPhone ちゃん、予想外にかなり高性能だと感じてます。今回のアプリに関して、例えばテキスト解析の処理なんかはとっても重そうだから外部に API を用意してそっちでやろうと思ってたけど、無くても全然困らない感じ。だいたいにおいて、描画部分に時間がかかってるっぽい。この辺は xib を使わないようにすれば、もっと性能を発揮出来るようになるんだろうか?まだまだ期待が持てる。

taicha_2001taicha_20012008/11/08 20:55あれ?
普通にテキストで作成されたような気が・・・。

バイナリじゃ、やりずらいっすよ。

ktakayamaktakayama2008/11/09 18:02XCode とか付属のテキストエディットとかだと普通に開けるんで、あんまり困らないんでしょうね。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081108

2008-11-07 (Fri)

うわあああああああああああああああ 18:44  うわあああああああああああああああ - iOS プログラミングメモ を含むブックマーク

orz orz

予定していた値段も一緒だとは…。完全にコンセプト被ってるよ…。

まあ 19:08  まあ - iOS プログラミングメモ を含むブックマーク

率直に言って俺のやつの方が優れてる点がいくつもありそうと言うか、白背景とか無いよね…。早くリリース出来るように頑張るよ。:)

CueNargaCueNarga2008/11/07 21:55悲観する事無く真っ向勝負してくださいませ!
確かに背景色やら選べる方が良いですよね〜

ktakayamaktakayama2008/11/07 23:35ありがとうございます!
まずはリリースをして同じ土俵に立ちたいですね〜

art2art22008/11/08 14:23ivBookのような汎用縦書きビュアーがほしいのですが、
青空文庫だけでなく、TouchExplorerなどでipodTouchに転送したテキストが表示できるようにはできませんか?

ktakayamaktakayama2008/11/08 19:32コメントありがとうございます。
僕の奴も青空文庫に特化したインターフェイスになってるので、独自のファイルをどう扱うかが悩み所ですが、技術的に出来ないわけじゃないので、考えておきます。結構需要あるみたいですね。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081107

2008-11-06 (Thu)

縦読み青空文庫 19:11  縦読み青空文庫 - iOS プログラミングメモ を含むブックマーク

とりあえず今こんな感じ。

わりと良い感じですけど、Pending Contract なわけで、非常に困る。

f:id:ktakayama:20081106190657p:image:w160 f:id:ktakayama:20081106190658p:image:w160 f:id:ktakayama:20081106190659p:image:w160

我輩は猫である、とかのデカいファイルのダウンロード+解析の処理に1分近くかかる上にメモリを30MBくらい消費するのがイケてない所だけど、一旦ダウンロードしちゃえば後はローカルで普通に見れるんで、問題ないかな…。

販売開始しています

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081106

2008-11-02 (Sun)

NSLog はあんまり長い行を出力しようとすると変になる場合がある 23:25  NSLog はあんまり長い行を出力しようとすると変になる場合がある - iOS プログラミングメモ を含むブックマーク

シミュレータは平気なんですけど、実機で NSLog を動かした場合に正常に出力されない場合がある。[NSString length] 的に見て100文字くらいが限界っぽく見えるが、細かく検証していないのでわからない。

以下、サンプルコード。横長で見にくくてごめんなさい。

int i;
for(i = 0; i < 20; i ++ ) {
   NSLog(@"ああああああああああああああああああああああああいいいいいいいいいいいいいいいいいいいいいいいいいううううううううううううううううええええええええええええええええええええおおおおおおおおおおおおおおおおおおおおおおお/////");
}

出力結果。

2008-11-02 23:18:30 /////
2008-11-02 23:18:30 /////
2008-11-02 23:18:30 /////
2008-11-02 23:18:30 /////
2008-11-02 23:18:30 おおおおおおおおおおおおおおおおおおおおおお/////
2008-11-02 23:18:30 ああああああああああああああああああああああああいいいいいいいいいいいいいいいいいいいいいいいいいううううううううううううううううええええええええええええええええええええおおおおおおおおおおおおおおおおおおおおおおお/////
2008-11-02 23:18:30 /////
2008-11-02 23:18:30 /////
2008-11-02 23:18:30 /////
2008-11-02 23:18:30 /////
2008-11-02 23:18:30 おおおおおおおおおおおおおおおおおおおおおお/////
2008-11-02 23:18:30 ああああああああああああああああああああああああいいいいいいいいいいいいいいいいいいいいいいいいいううううううううううううううううええええええええええええええええええええおおおおおおおおおおおおおおおおおおおおおおお/////
2008-11-02 23:18:30 ああああああああ/////
2008-11-02 23:18:30 /////
2008-11-02 23:18:30 /////
2008-11-02 23:18:30 /////
2008-11-02 23:18:30 /////
2008-11-02 23:18:30 ああああああああああああああああああああああああいいいいいいいいいいいいいいいいいいいいいいいいいううううううううううううううううええええええええええええええええええええおおおおおおおおおおおおおおおおおおおおおおお/////
2008-11-02 23:18:30 ああああああああああああああああああああああああいいいいいいいいいいいいいいいいいいいいいいいいいううううううううううううううううええええええええええええええええええええおおおおおおおおおおおおおおおおおおおおおおお/////
2008-11-02 23:18:30 /////

前が切れたり後ろが切れたりそもそも空になったりと、完璧ぶっ壊れるんだけど、いわゆる半角文字には犠牲は出ない模様。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20081102

2008-11-01 (Sat)

UINavigationController を release しても、中身は release されない? 13:43  UINavigationController を release しても、中身は release されない? - iOS プログラミングメモ を含むブックマーク

UINavigationController を新しく生成した場合なんですが。

例えば、適当な UIViewController クラスの中でこんな風にして。

navi = [[UINavigationController alloc] initWithRootViewController:nantokaView];
navi.navigationBar.barStyle = UIBarStyleBlackOpaque;
navi.view.frame = CGRectMake(0, 0, 320, 416);
[self.view addSubview:navi.view];

最終的に dealloc の所で

- (void) dealloc {
   [navi release];
   [super dealloc];
}

こうして解放するわけですが。

配下に自動で出来上がる UINavigationItem, UINavigationItemView, UINavigationBar あたりが release されないようでメモリにずっと残っちゃってて明らかにリークしてる、のにリークが検出されない謎現象に…。

なんかやり方がまずいのかなぁ。良くわかんない ><

子クラスから親クラスのメソッドを呼ぶやり方 18:45  子クラスから親クラスのメソッドを呼ぶやり方 - iOS プログラミングメモ を含むブックマーク

なんか、適当にやったら動いちゃったんですけど、これでいいんだろうか。

+ (NSString *) hoge {
   return @"i am class";
}

- (void) fuga {
   [[self class] hoge];
}