2012年3月22日木曜日

Xcode4.3.2のバグ修正のチェック結果

ようやく公開されたので、現在調査中。

・・・

なんかうまく動かない。
V4.3.2自体が正常動作しない上に、V4.2.1までも動かなくなってしまった。

ということで、全部再インストールする羽目に。

アップルはいったいどういうチェックをしているのだ?
クリーンインストールの機体だけしかチェックしていないのではなかろうか?

→なんかまたインストールされ方が変わってる。

・・・
再インストール後チェック。

(1)iPadシミュレーターの枠がない(HOMEボタンが表示されない)のは仕様
(2)[[UIDevice currentDevice]systemVersion]が@"Unknown”を返してくるバグは修正された
(3) ビルトインマクロ__VERSION__は"4.2.1~"のまま。
"4.2.1 Compatible Apple Clang 3.1~"になってる

(4)実機をつないでデバッグしているとき、NSLog()の中に日本語があると文字化けするバグは修正されていない。

(5)日本語ファイル名があるとgitでcommit出来ないバグは修正されていない

(6)OrganizerのArchivesでアプリのアイコンが表示されないバグは修正された
(7)DistributionのCodeSigningが外れるバグは修正された

(8)シミュレーター上のUITextView/UITextFieldで落ちるバグは修正された

(9)WiFi接続のデバイスの検出機構(iOS Device DiscoverryのSupport Wirelessly Connected Devices)がなくなった
問題が多かったから?


ということで、重大なバグは修正された模様。一応開発に使えるレベルには戻った。

でも全てのバグは直ってない。

早よ直してくれ。

2012年3月17日土曜日

methods named 'xxx' found

プログラムを組んでいると、「methods named 'xxx' found」という警告がいくつか出た。

直訳すると「xxxという名前のメソッドが複数見つかった」となろうが、
それならエラーになるはずではないか。


よくよく調べると、id型のクラスインスタンスに対してメソッドを発行しようとすると
発生する(ことがある)とわかった。

「例」
タッチイベントを処理する
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
 NSTimeInterval tm=[[touches anyObject]timestamp]; // ここでmethods named 'timestamp' foundが発生する


}

touchesに実際に格納されるのはUITouchであるが、[touches anyobject]はid型で返す。
timestampという名前のメソッドは複数のクラスが持つので、
どれか解決できずに警告が出てしまう。

実行時にはNSSetの内容は決定しているので、[touches anyobject]のidが実際は何であるか、
この場合UITouchであることがわかっているのでtimestampを呼び出す先もわかる=実行時エラーはでないのである。

警告を回避するには
 NSTimeInterval tm=[(UITouch *)[touches anyObject]timestamp];
として型を確定してやればよい。ポインター型でキャストすることに注意。

Xcodeのエラーコードはわかりにくい(その上ドキュメントがない)ので困る。

2012年3月16日金曜日

The new iPad

「The new iPad」が届いたのでちょいと感想など。

Xcodeでつなぐと「iPad (3rd generation)」と表示される。
なら「iPad3」でいいじゃん、と思ったりもするのだが、
まあ、こだわりがあるのだろう。

で、ちょっと触ってみた感じのiPad2との違い。

  • 文字がきれい。これは今回の一番の売りのRetinaDisplay(解像度倍)だから当然だけど、目に優しく感じる。
  • iPhoneモードの2倍表示がきれい。従来のiPadにもiPhoneモード2倍表示はあったけど、単純拡大で文字はがたがただった。これが改良されたのか非常にきれいになった。iOS5の改良項目かと思ったが、iPad2では今まで通りだったので、3の特徴と言える。
  • 音が良く聞こえるようになった。スピーカーの位置は同じだけど、音ははっきりしている。スピーカーそのものが良い物になったか。
  • グラフィックを使う処理にもたつきがなくなった。iPad用のゲームで少々もたつきがあったゲームが、3では全くもたつかない。3はCPUの能力はほぼ同じだが、解像度倍に合わせてグラフィックの能力があげられているので、iPad解像度のゲームは恩恵を受けてこうなっているようだ。3専用ゲームではそうはいかんだろうけど。
  • 背面カメラの画像が格段に良くなった。PCの画面を撮影しても今までは文字が読めなかったが、3でははっきり読める。ただ、モアレの発生はかなりきつい。
  • 重さは、カタログ上は初代iPadと同じに戻ったらしいが、手に持った感じではiPad2と変わらなく思う。
    多分に、厚みが変わっていないからだと思う。
  • 外観上の違いはほとんどない(だからここにも写真を載せなかった)。あえて言うなら、背面カメラのレンズ径が倍くらい大きくなったのと、規格適合マークが大きく変わったことくらいか(iPad2はVCCIなど国内規格マークだったが、3はFCCやCEなど海外規格のみになっている)。両方持っている人は、自分でわかりやすいようにシールでも貼った方が良いかもしれない。

そんなところ。

2012年3月11日日曜日

開発用実機の接続について

Xcodeで開発用実機を「USBケーブルで」接続する場合、
本体のUSB端子もしくはそこに差したUSBハブからでなければならない。

USBハブにさらにハブをつなぎ、そこに差したケーブルで実機を接続すると認識してくれない「ことがある」。してくれることもあるが、不安定。
USBハブの種類というか構造にもよると思うけど。

Xcode4.2ではWiFi接続も出来るけど、また使ったことがない。
どんなもんだろうか?
→Xcode4.3.2ではWiFi接続機能は削除された。

Lionの壁紙が起動毎に初期化されてしまう・・・ように見える

Lionにしてから、壁紙が起動(またはログイン)毎に初期化されてしまう(Andromeda Galaxyになる)という問題が発生した。

調査の結果、以下のようにすれば解消されると判明。

(1)システム環境設定~デスクトップを開き、各画面に違う壁紙を設定する
そのときの各画面の壁紙名を控えておく

(2)Fiderからライブラリ~Preferences~com.apple.desktop.plistを開く
(3)BackGroundの下にある、0以外の数字だけの項目が画面別壁紙設定 なので、全てを開き、
  (1)で 設定した壁紙名「以外」の設定の入っている項目を全て削除(Cut)する
    spaces/default/0は消さないこと。

これで直る。

・・・修正。
初期化されたのではなく、表示されるページが変わっていたと判明。
デスクトップを複数用意している場合、背景(バックグラウンド)はデスクトップ毎に設定できる。
そのため、別のページが表示されると背景がおかしくなったように感じる。

上の処理をすると壁紙は戻るが、消したデスクトップに配置していたアプリの画面情報も消えるので注意。

なお、デスクトップの追加はMissionControl表示中、物理画面の右上あたりにマウスカーソルを持って行くと「+」が出るので、これで行う。
MissionControlは本当にわかりにくいし、操作しにくい。

ExposeとSpacesに戻して欲しい(可能なら切り替えでも良いので両方使えるようにして欲しい)。
ちゃんとユーザーの声を聞け、アップル。

2012年3月9日金曜日

Xcode4.3.1のバグ

iOS5.1の公開に合わせてXcodeも4.3.1(Lion専用)が公開された。

が、早速問題が多数出ている。
太字は重大なバグ。

(1)iPadシミュレーターでHOMEボタンが表示されない。
Retinaだと50%表示にしても縦1080でも枠付き表示しきれないからだと思われる。
外枠自体表示されないので、仕様変更であろう。
iOS4.x/5.xどちらも同じになってる。
メニューバーのハードウエア~ホームで押下をシミュレートできるが、
ホームダブルタップによるアプリ切り替えが出来なくて困る。
アプリの削除もやりにくい。
iPhoneシミュレーターはHOMEありで変更なし。

(2)シミュレーター上で[[UIDevice currentDevice]systemVersion]が@"Unknown”を返してくる。
実機では問題ないが、シミュレーターではデバイスまたはOSバージョンを変えても変化なし。
4.2.0まではちゃんとシミュレーターに設定したOSバージョンが返ってきてた。
バージョンチェックして動作を変えている場合、シミュレーター上では問題が出る。
なんかおかしいから調べてみて気がついた。
今のところ回避策が見当たらないので非常に困ってる。
→info.plistに独自キーを追加してそこにバージョンを「毎回打ち込んで」読み込ませることで、
当面回避。
なんていう手間。 やり方は1つ前の記事を参照のこと。早速役立った。

(3)ビルトインマクロ__VERSION__が"4.2.1~"になっている。
だめじゃん。

(4)シミュレーター上動作中でアプリがハングアップして落ちた場合、二度とシミュレーター上でアプリが実行できなくなることがある。
その状態でも実機ではデバッグできた。
シミュレーターのiPhone/iPadおよびバージョンを変えても改善しない。
シミュレーターおよびXcodeを再起動しても だめ。Mac自体を再起動してようやく復帰。
新しいデバッガーlldbのバグかも知れない。
1回だけ発生した。


(5)エディタで編集内容表示が消えてしまうことがある
スクロールすると戻る(ソースそのものには影響なし)。
2~3回発生。

(6)Xcode4.0.xほどではないが、遅くなった。
検索前とかビルド前にマウスカーソルが回る。
(Snapshotはとってないのに。)
せっかくv4.2.0で速くなったのに(4.1.0からだったかも) 。
→Lion自体の問題だと判明。

(7)writeToFileがエラーを発生することがある
これはXcodeのバグではないが、LionではSnowLeopardとファイルアクセス権限の設定が異なっているため、これが出る。
デバッグ中の中間ファイルが書き出されなくて調べてたらこれとわかった。writeToFile:@"ファイル名だけ"という書き方をしているとまずだめ。
フォルダを厳密に指定し、そこのアクセス権限を読み書き可能に設定していなければならない。

(8)シミュレーターでiOS5.0以上を選択したとき、UITextFieldおよびUITextViewをタップするとEXC_BAD_ACCESSで落ちる
自分のプログラムの問題かと思って調べ、その後Apple提供のサンプル「HelloWorld」で試したらこれも落ちる。そのくせ実機で動作させたらあっさり動いた。丸1日調査してたのがばからしい結果。100%再現する。
重大なバグ。これらを使っている場合、実機でしか動作確認できない状況。
なお、iOS4.xのシミュレーターではINVARID dictionaryというのが出てるが、一応動作には問題ない。
Xcode4.2.0まででは発生していない。

(9)実機をつないでデバッグしているとき、NSLog()の中に日本語があると文字化けする。
シミュレーターでは問題ない。環境設定のフォント設定の間違い、なんてこともない。
これは実機OSが4.3でも5.1でも同じに発生する。

(10)日本語ファイル名があるとgitでcommit出来ない
V4.2.0でも有ったバグ。直されてない。
最初からわかってれば全て英語ファイル名にしたんだけど、後からgit管理下に入れたもんで。 フリーのGitXを使えばOK。

(11)OrganizerのArchivesでアプリのアイコンが表示されない

(12)DistributionのCodeSigningが外れる
ファイルそのものが消えていた。再設定が必要。
しかも、それがArchiveを作るときにはわからず、アップロードするときにわかる。
さらに、そのアップロード時のエラーメッセージも変更されたのでわかりにくい。

(13)[UIColor colorWithPatternImage:]にもバグがあるらしい(未確認)


V4.2.0にあった他のバグの内、大問題だったSettingBundleが編集できないバグはさすがに修正されてるが、他は未確認。


とにもかくにも問題が多すぎて困る。問題が出るたびに調査に時間がかかってしまう。
V4.2.0に戻そうとしたが、Xcode4.2.0(Build 4C199)/4.1.0はLion上では動かない。

仕方ないので、もう1台有るMacのSnowLeopard上に4.2.0で開発環境を再構築することにしたが、メインマシンではないのでいつもそちらで開発するのはつらい。

Appleには猛省をして欲しい。
毎度のことながら、とにかくデバッグが足りなすぎ。いじる理由がないのに、
前のバージョンまで正常に動いてたところが動かなくなるのも多い。
儲かってるんだから、デバッグ要員を増やせ。

一応(10)まではAppleのフィードバック(http://www.apple.com/jp/feedback/)で報告はしておいたが、フィードバックの項目にXcodeがないのはどういうもんだか(OSで報告した)。Xcodeのバグ報告は受け付けないってか?
それともXcodeは全く別の場所にフィードバックがある?→developperのXcodeダウンロードの一番下にあったのね(Submit Bugs to Apple)。出し直した方が良いのか?


また、Xcodeの最新版はまだSnowLopard上でもサポートして欲しい。
Lionには画面共有とかまだ不具合があるから。せめてMountainLionが出て安定するまで。

OSのサポート、およびOS間のアプリ動作互換性はMicrosoftを大いに見習って欲しい。(ほぼ)無意味な下位互換切り捨てはやめてくれ。

2012年3月6日火曜日

info.plistの読み出し方

プログラム名-info.plistの内容は、通常プログラムから明示的に読み出す必要はないが、
ごくまれに必要になることがある。

その全体の読み出しは、
[[NSBundle mainBundle]infoDictionary]
で行える。


個別キーに対応する値の読み出しは、
[[[NSBundle mainBundle]infoDictionary]objectForKey:@"CFBundleDisplayName"];
のように行う。

ただし、InfoPlist.stringsの内容によるローカライズは反映されていない。
 
キー名は、Xcodeでinfo.plistを表示して、Keyの桁で右クリック~Show Raw Keys/Vakuesにチェックして表示されるKey名を使う。

2012年3月1日木曜日

Windows7 64bitで正常動作するソフト

Windows7 64ビットで動作するソフトについても一応記録。
現行版ではないもののみ。

  • XM6 v2.06
    X68000エミュレーター。意外にも(失礼?)一発動作。
  • 楽々はがき2009(JustSystem)
  • アレンジOK!素材集(JustSystem)
  • はがき さくっとファイリング(コクヨ)
  •  

・・・2013/04/12追記
WindowsXPの公式サポートがあと1年ということで、これから7もしくは8への移行を考える人も多いと思う。
8はおそらくVista同様MSの黒歴史OSになると思うので全くおすすめしない。
操作性が変わりすぎており、混乱を招くこと必死だ。

意外にもXPのソフトが7の64ビット環境下でもそのまま動く。
ハードウエアドライバーはダメなことも多いが、すでに多くのソフトが対応版を出しているので、
入れ替えだけでいけることが多い。
万が一動かなければ、7のPro以上なら仮想XP環境を構築できるので、その上で走らせればよい。

ではあっても、異なるOS、というより別のPCに環境を移行することは、かなり難しい。
特にアプリケーションのライセンスや設定を移行するのは手間がかかる。
引っ越しツールというのもあるが、私はそれで成功した試しがない。
移行後に何かしらの問題が発生するため、手動でやったほうがよほどまし、という結果になったことがほとんど。

専門家に任せるか、時間をかけて、手動で徐々に行うのが吉。