忍者ブログ
なんでもいいから書くブログ。iPhoneアプリやAndroidアプリといったスマートフォンアプリを開発していこうと考えてはいるが、はたしてどこまでできるか、、とにかく記録していこうと思い書いているブログである。有益な情報はあるかもしれないし、ないかもしれない。
Admin | Write
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

iPhoneアプリ開発

私はiPhoneアプリ開発において、Interface Builder(IB) を使っていません。
最初は使っていたのですが、使わない開発を試したところ、
XCodeとIBの切り替えも発生しないし、IBOutletの連携し忘れもなくなるし、
微妙なレイアウトの位置調整でマウス操作と格闘することもなくなるし、
無駄なnibの読み込みがないので処理が早くなった(ような気がする)し、
メリットが多いので使わなくなりました。
IB は単独で、レイアウトのデザインツールとして使用しています。
部品の配置を調整するには最適なツールですので。

今回ハマッたのは、IBを使ったアプリのバージョンアップで、
IBを使わなくした(nib(xib)ファイルを全部削除した)ときに発生した問題です。
2点あります。(1点目はIBとは関係ありませんが。。)
(1) バージョンアップインストール(古いバージョンを上書きする場合)でアプリが起動しなくなる
(2) 起動するが、ラベルなどの表示がおかしく、動作しない箇所が多々発生する


(1) バージョンアップインストール(古いバージョンを上書きする場合)でアプリが起動しなくなる


今回のバージョンアップは大幅な改良なので、ソースを一から見直そうとプロジェクトを新規作成して作りました。

「Bundle identifier」が同じなら、同じアプリと見なされると思い、プロジェクト名やプロダクト名も変えました(前のはアプリ名とプロジェクト名が違っていたので)。

シミュレータでは、これで問題なくバージョンアップできたので、作業を続け、やっと完成。

実機(開発用のBundle identifier)で確認。問題なく動作! よしよし

いよいよ、Distribution の確認作業へ。

はじめは iPod (3.1.3) のOSで確認。新規も更新も問題なし。

次に、iPhone3GS (iOS 4.1) で確認。新規は問題なし。でも更新は。。。

あれ、、起動しない。一瞬、起動画面がでて、終了。

iPhoneを再起動したり、何回かやり直してみたが NG.

アプリを削除して、もう一度インストールしたら OK. でもこれは新規だから

データ消えちゃうのでだめだ。。

エラー内容は、
実行中...
Ignoring packet error, continuing...
gdb stack trace at 'putpkt: write failed':
0   gdb-arm-apple-darwin                0x0018d893 remote_backtrace_self + 54
1   gdb-arm-apple-darwin                0x00190cab putpkt_binary + 401
2   gdb-arm-apple-darwin                0x001913a8 remote_macosx_get_all_image_infos_addr + 45

さっぱりわからん。

こうなると、なぜ?を考えるのです。
違う部分はどこか、、

一つずつ前のバージョンと違う部分を戻していき、結論は

プロダクト名が違うとダメ


となりました。

プロダクト名は、アプリケーションのファイル名(パッケージ名)のことです( xxx.app )。
(通常はプロジェクト名がプロダクト名になります。)

アプリのバージョンアップ版を開発する場合は、

「Bundle identifier」コード署名 と
プロダクト名(アプリケーションのファイル (*.app)名)

を同じにしないとダメってことですね。ふぅ〜


(2) 起動するが、ラベルなどの表示がおかしく、動作しない箇所が多々発生する

この問題も苦労しました。(1日で原因がわかってよかったです。こういうのネットで調べるの大変、、結局ネット上に答えはなかったし。)

原因は、 nibファイルのキャッシュ (と思っています。)

ようは、昔使っていたnibファイルがなぜかロードされているってことです。
(バージョンアップでアプリを更新しても、どこかに残っているのでしょうか??)

IBを使わない開発に切り替えたので、nibファイルは削除し、コード上で

各部品を初期化、配置しているのですが、なぜか昔のnibファイルの内容が表示され、

重なっていたので、これが原因だと思ったわけです。

で、新規インストールは動くんだから、コーディングは問題ないはずと思い、

どうしたら昔のnibを読まなくできるのか試行錯誤していましたが、

結局、、コーディングが悪い(記述が足りない)ということがわかりました;;

UIViewController のロードで IB を使う場合は、
・-initWithNibName で作って
・viewDidLoad で各部品の初期処理を行う

IBを使わない場合
・-initWithNibName nibファイルにnill 指定 または単に init で作る
・loadView でビューをセットする
・viewDidLoad で各部品の初期処理を行う

2番目のloadView を記述していなかったのが原因なようです。

記述しなくても、本来はデフォルトで問題なく動きます。
(問題なく動くのが問題なのかもしれません。)

でも、今回のように、以前nibファイルを使っていた場合はダメみたいですね。
(なぜ?、どこの?キャッシュが使われているのか、はたまたOSのバグなのか
わかりませんが。)

IBを使わない場合は、loadViewの記述を書く で解決です。

こんな感じです。
- (void)loadView {
    UIView *mv = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    self.view = mv;
    [mv release];
}

で、viewDidLoad で各部品の初期化をすればいいでしょう。


おわり。

















PR
Comment form
Name
Title
Comment
Password   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
  管理人のみ閲覧可能にする
この記事のトラックバック
この記事にトラックバックする
YamaTatsuのiPhoneアプリ
iTunes Store でみる
LightOff Light Off Hot New
点いたライトを素早く消そう!
誰でも遊べるシンプルなゲームです

めいろであそぼう めいろであそぼう New
かわいいイラストのめいろ、ぬり絵もできる
子供向けの迷路あそびです。※iPad専用

運試し 運試し NEW
15連続の確率は0.0001%
操作は簡単 好きなパネルを選ぶだけ。どこまで進めるか運試し!

連打 連打! まだまだ人気
16連射に挑戦
10秒間で何回ボタンを押せるか競うゲームです。

うちメモ うちメモ ★大人気★
買い物中に 「まだあったかな?」 と思った経験 ありませんか? 「うちメモ」していれば大丈夫!!

BestBowling Best Bowling
マイボウラーに大人気! ボウリングのスコアを管理するアプリです。

イメージ貯金 イメージ貯金
貯金はモチベーションが重要! 目標を設定して毎日楽しく貯金しよう!

Mine Escape Mine Escape
聴力は優れていますか? 音で機雷の位置を判断する新感覚のアクションゲーム!

Rank Checker Rank Checker
だって気になるじゃないですか、、 アプリ開発者必須! AppStoreのランキングをチェックツールです。


カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Twitter
プロフィール
HN:
YamaTatsu
HP:
性別:
非公開
自己紹介:
iPhoneアプリを開発してまーす。
最新コメント
[06/04 K.I.T]
[06/03 Cotoba]
[05/19 K.I.T]
[05/18 コタツ猫]
最新トラックバック
ブログ内検索
バーコード
忍者アド
アクセス解析
忍者ブログ [PR]

Designed by