Posted by yamada on 2011/04/04 – 09:00
photo © 2008 Jason McHuff | more info (via: Wylio)
iOS Static Libraries
iOS Static LibrariesというiOSアプリ向けにビルドされた便利ライブラリ群があります。
ちょっと必要なライブラリが含まれていて、自分でビルドするよりも便利ですし、iOS SDKがバージョンアップされたらきちんと更新されているので便利に使わせてもらっています。
先日、iOS Static Librariesの、iOS SDK 4.3向けのビルドがリリースされました。
しかし、これがちょっと曲者で、現在iOSデバイスはARM V6かARM V7の二つがあり、今回のビルドバーションは、ARMアーキテクチャ向けに二つのビルドがなされているのです。
ARM V6というのはiPhone 3G以前で使われていたものなので、対応機種を3GS以降に絞るならARM V7のみに対応したビルドを行えばいいのですが、まだ3Gも無視できない状況ですので、これをなんとかしないといけません。
そして、Xcodeのビルド設定的には一つにマージされている方が便利なのです。
マージって、、なんかツールがあるのか?設定でどうにか回避できるものなのか?と調べてみたところ、偶然、lipoというコマンドを知ることが出来ました。
lipoコマンド
man lipoによると、次のような説明があります。
The lipo command creates or operates on “universal” (multi-architecture) files.
まさに複数アーキテクチャ対応のユニバーサルファイルを生成するためのツールだと分かります。
そして、これはiOSアプリを開発できる環境ならインストール済みであることも分かりました。
例として、前述したiOS Static Librariesについて調べてみます。
ARM V6用のライブラリ libcurl.a について下記のコマンドで調べてみます。すると、ちゃんとターゲットアーキテクチャを調べることが出来ることが分かります。
1
2
3
| $ lipo -info libcurl.a
input file libcurl.a is not a fat file
Non-fat file: libcurl.a is architecture: armv6 |
そして、ユニバーサルファイルを作る例ですが、例えば、ARM V6用、V7用のlibcurl.aが、./armv6/libcurl.a と、 ./armv7/libcurl.a にある場合には、次のようにして生成できます。出力先は ./fat/ とします。
1
| lipo -arch armv6 ./armv6/libcurl.a -arch armv7 ./armv7/libcurl.a -create -output ./fat/libcurl.a |
直感的でわかりやすいですね!
armv6/armv7ユニバーサルライブラリをつくる
というわけで、今回の目標である「iOS Static Librariesのarmv6/armv7ユニバーサルライブラリをつくる」シェルスクリプトを載せておきます。
まず、準備として次のようなファイル配置にしておきます。

workディレクトリ直下で実行したら、work/lib以下にユニバーサルライブラリファイルが生成されると思います。また、処理対象は”*.a”ファイルのみ、とします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| #!/bin/bash
echo 'makefat.sh -- start!'
RootV6='./iPhoneOS-V6-4.3'
for lib_armv6 in `find $RootV6 -name "*.a" -print`
do
lib_armv7=`echo $lib_armv6 | sed "s/V6/V7/g"`
echo $lib_armv6
echo $lib_armv7
lib_fat=`echo $lib_armv6 | sed "s/iPhoneOS-V6-4.3\///g"`
echo $lib_fat
lipo -arch armv6 $lib_armv6 -arch armv7 $lib_armv7 -create -output $lib_fat
done
echo 'makefat.sh -- end!' |
one more lipo
lipoは複数アーキテクチャのユニバーサルライブラリをから特定のアーキテクチャパートを削除することも出来たりするようです。
両方対応版のライブラリのみが提供されている環境で、不要なアーキテクチャを削除すれば、ビルド後の実行ファイルサイズが小さくなったりすると思うので、そういう用途にも使えそうですね。
[AD]
↓リンカーとかプログラムをきっちりやろうとしたら外せない部分。去年出たらしいこの本、面白そうですね。
↓もうすぐ発売されるWEB+DB PRESS plusシリーズ。気になるタイトルです!!
↓こういうのじっくり読んでみたいなぁ〜。

プログラミングコンテストチャレンジブック
著者/訳者:秋葉 拓哉 岩田 陽一 北川 宜稔
出版社:毎日コミュニケーションズ( 2010-09-11 )
定価:¥ 3,444
単行本(ソフトカバー) ( 316 ページ )
ISBN-10 : 4839931992
ISBN-13 : 9784839931995
↓結局まだ読んでいない数学ガールシリーズ最新作はアルゴリズムへ突入!

数学ガール/乱択アルゴリズム
著者/訳者:結城 浩
出版社:ソフトバンククリエイティブ( 2011-03-02 )
定価:¥ 1,995
Amazon価格:¥ 1,995
単行本 ( 480 ページ )
ISBN-10 : 479736100X
ISBN-13 : 9784797361001
Posted by yamada on 2010/12/13 – 06:38
繋がらないiPhone 3GS/4
いつの間にかiPhoneが家のwifiに繋がらなくなっていた。
Macからはつながるし、設定も切り替えられるし、特に問題がないけど、iPhoneだけが繋がらない。
しかも私のiPhone 3GSだけではなく、妻のiPhone 4もつながらない。
仕事にかまけて、いつからこうなっていたのかははっきり覚えていないのが問題なのだけど、もしかしたら、iOS 4.2.1に上げたタイミングかも?と思い調べてみたら、どうやら、やっぱりその予感は的中した様子。
iOSのバージョンアップに伴い、無線LAN接続の問題は発生しているようですが、誰の環境でも直る特効薬的な対応はない様子。
うちの環境の場合も、無線ルーターの設定見直しとか、iPhone再起動とかやってみたけど、全然ダメでした。
結局、上記フォーラムに書かれていたうち、一番効きそうな(でも、面倒そうな)対応である「無線ルーターを工場出荷時に戻して再設定」を試したら直りました。
これで治らなかったら、iPhoneのリストアぐらいしか無かったのですが、それは結構避けたい対応でした。
もしかしたらMACアドレスの問題だったかも?
途中調べている過程で怪しいと感じたのは、iPhoneのMACアドレスが変わっていたのかもしれない、ということ。
もともとうちの環境はMACアドレスフィルタリングしていたのですが、繋がらなくなったiPhoneのMACアドレスが、無線ルーターに登録されていたMACアドレスと近い数値(1桁しか違わない)が表示されていて、iPhoneのアドレスがなかったのです。そのあたりをiOSのバージョンアップでいじられたのかもしれない、と思っています。でも、そのMACアドレスを登録したり、MACアドレスフィルタリングを切ったりしてみても駄目だったのですが。
まぁ、面倒だったけど、直ったので良しとしますか。
[AD]
↓家のテレビが場所の関係からネットにつながっていないのですが、これがあればいいのかもしれない。ちょっと欲しい。
↓これ、こまどりアニメが簡単にできる玩具なんですが、なんか激安ですよ!クリスマスプレゼントにいいかも。(自分が欲しい)
↓おもちゃといえば、こっちの拡大鏡をテレビに繋げられるものってシンプルで面白いですよね!欲しい!

アイクロップス
定価:¥ 7,980
Amazon価格:¥ 7,600
カテゴリ:おもちゃ&ホビー
発売日:2008-07-12
Posted by yamada on 2010/10/16 – 00:03
TortoiseSVNのアップデートについて、ちょっとトラブったのと、それが解決したので、そのメモです。

コンテキストメニューに出てこない!
以前、1.6.9から1.6.10にしたときにコンテキストメニューに全く出てこなくなり、使い物にならなかったので、すぐに1.6.9に戻していました。
で、最近、1.6.11が出て、今回は大丈夫だろうと思ってインストールしてみたのです。
すると、、、やっぱりコンテキストメニューに出てこない!
一度でダメならもう一度!?
でも、すぐに戻すのも悔しいのでネットで検索してみました。
すると、こんな情報を発見!
よくみるとダウンロードページに「インストーラーを2回実行して、2回目のときは『修復』を使え!」とか書かれているようです。
[TortoiseSVN]バージョンアップしたら日本語パックがチェック通らない!⇒また【修復】で回復。 – Project Note
これは1.6.10のときにRelease Noteに書かれていたようです。
藁をもすがる思いで、もう一度インストーラを起動、そして、Repairを実行してみました。
すると!!なんとうまくいったではありませんか!
マジカヨ!!
[AD]
↓Subversionの本ではこれが評判いいですね!
↓TortoiseSVNとRedmineの連携について書かれているようです!

オープンソースによるプロジェクト管理入門
著者/訳者:ファーエンドテクノロジー株式会社
出版社:秀和システム( 2010-02 )
定価:¥ 2,940
Amazon価格:¥ 2,940
単行本 ( 352 ページ )
ISBN-10 : 4798025208
ISBN-13 : 9784798025209
Posted by yamada on 2010/05/21 – 09:00
Progressionを使い、とある大規模プロジェクトでFlashコンテンツ制作したのですが、特定環境で発生した問題には戸惑いました。
PPC Mac only!
その問題が発生する環境とは「PowerPC Macでのみ発生」というもの。
ちょっと調べてみたところ、確かにブラウザやFlash PlayerやOSのバージョンは関係なく、本当にただPowerPC Macである、というだけで発生するのです。
具体的な症状は、ProgressionのメソッドであるAddChildで配置するパーツが配置(表示)されない、という現象。
しかも、「一つも AddChild出来ない」というわけではなく、ある特定のパーツ以降で発生する。
なんだか、メモリリークのにおいプンプンである。
ググれ!きっと先人がいるはず!
で、ググりにググってみたところ、同様の症状について言及されいてるページを発見した。
この方によれば、「new AddChildを、コンストラクタのaddChildに変更すると正常に動作する」とのことで、たしかに、コマンドリストにnew AddChildしていた箇所だったのでそのコードを以下のように変更してみました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| /*
// Progression標準的コード.
addCommand(
new AddChild( partsRoot, _partsA ),
new AddChild( partsRoot, _partsB ),
new AddChild( partsRoot, _partsC )
};
*/
// PPC Mac対応コード.
partsRoot.addChild( _partsA );
partsRoot.addChild( _partsB );
partsRoot.addChild( _partsC );
_partsC.initOnAdded(); // ←必要に応じて初期化メソッド呼び出し. |
AddChildしてた箇所を全てこのようにしたところ、問題は発生しなくなりました!
かなり規模が大きいプロジェクトだったので同様なコードはかなりあり、それぞれ動作確認を取るのも結構大変でしたが、大抵これでうまくいくと思います。
それでも、便利なProgression
まさかのこの問題では手こずりましたが、このプロジェクトで初めて使ったProgression、総じてかなり便利でした。
クラスとかの構造もわかりやすかったので、自前でラッパークラスをつくり、便利に使いました。
使用していたProgressionのバージョンは3.1.62でしたが、最新版では直っていたりするのかな?
[AD]
↓最近発売されたオフィシャルProgression本!バージョン4にも対応、とのことで、これからProgressionやるなら必携!

ProgressionによるFlashコンテンツ開発ガイドブック
著者/訳者:阿部貴弘 池田泰延 楢山哲弘 松竹 誠 山上健一
出版社:毎日コミュニケーションズ( 2010-04-28 )
定価:¥ 2,940
Amazon価格:¥ 2,940
単行本(ソフトカバー) ( 312 ページ )
ISBN-10 : 4839931798
ISBN-13 : 9784839931797
↓今までの歴代Macが載っているらしい。話が通じる人と呑むときにこの本があれば酒も進みそう!

Macintosh名機図鑑 (エイムック 1512)
著者/訳者:大谷 和利
出版社:エイ出版社( 2008-03-24 )
定価:¥ 1,260
Amazon価格:¥ 1,260
単行本 ( 157 ページ )
ISBN-10 : 4777909921
ISBN-13 : 9784777909926