Altruistic Programmer's Blog (JP)

利他主義プログラマーのブログ

Base SDKとDeployment Targetの意味

without comments

詳しく知りたい方はSDK Compatibility Guideを読んでください
(http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development)

Weak Linkとは?

  • リンクする時ライブラリーにシンボル(変数、関数、クラスなど)が無くてもエラーが出て来ない。
  • アプリがロードされる時シンボルが無くてもエラーが出ない。
  • それでランタイムにシンボルがあるかどうか確かめてから使わなきゃならない。

Strong Linkとは?

  • リンクする時又はロードする時シンボルが無いとエラー出る。

Base SDK バージョンとは?

  • 自分のアプリが使う一番高いSDK(又はOS)バージョン
  • このバージョンより高いバージョンからある新らしいAPIは使えない。

Deployment Target バージョンとは?

  • 自分のアプリが使う一番低いSDK(又はOS)バージョン
  • このバージョンより高いバージョンのSDKにあるAPIはWeak Linkされる。
  • このバージョンと一緒又は低いバージョンのSDKにあるAPIはStrong Linkされる。

だってどう使うか?

  • 自分のアプリが支援するOSの最低、最高バージョンを決める。
  • Base SDKに最高バージョンを設定する。
  • Deployment Targetに最低バージョンを設定する。
  • Weak Linkされるシンボルについてはランタイムに存在するかどうか確かめてから使う。
  • Strong Linkされるシンボルはコンパイルタイムにエラーが発生する。

注意事項

  • ベースクラスが存在しない場合チャイルドクラスも存在しないことと見なす。
  • クラスのインタフェースに定義したデリゲートが存在しない場合アプリの起動時にランタイムエラーが出る。

チップ

  • 特定OSバージョンから発生できる問題点をコンパイルエラーとして発生させたい時にはBase SDKを該当OSバージョンに下げてビルドして見ればいい。

Written by muscly

May 3rd, 2011 at 5:26 pm

Objective-C 2.0でプライベートプロパティー使い方

without comments

クラスのヘッターからプロパティーを隠したい時にはクラスエクステンションを使えばいい。

//の意味 A.h
@interface A : NSObject {
}
-(void)setXXX:(int)i;
-(int)xxx;
@end

// A.m
#import "A.h"
@interface A()
@property int m; // HERE
@end

@implementation A
@synthesize m; // AND HERE
-(void)setXXX:(int)i {
self.m = i;
}
-(int)xxx {
return self.m;
}
@end

カテゴリーよりクラスエクステンションがいい理由は

  1. プロパティーが定義できる。
  2. メソッドを宣言だけして定義しないとエラーが出る。

Written by muscly

May 1st, 2011 at 10:01 pm

オブジェクトファイルのCPUアーキテクチャーの確認方

without comments

オープンソースライブラリーをビルドしてXCodeでリンクするとアーキテクチャーが合わないというエラーが出るときがある。下記のようにすると.aファイルの中の .oファイルがどんなCPUアーキテクチャーをターゲットにしてビルドされたのか確認できる。

otool -hv libxxxx.a

ちゃんとビルドしたと思ったのにリンクができなくて見たらx86_64だと出た。-arch i386 オプションを入れてビルドしたらシミュレーター用にリンクがうまくできた。
 
参考的に上からvオプションを外すとcputypeとcpusubtypeが数字で出るけど、 /usr/include/mach/machine.hを見るとあのすうじの意味がわかる。(実際にはvオプションを入れて使えばいい。。。)

Written by muscly

May 31st, 2010 at 8:54 pm

マルチリンガルブログに変身

without comments

韓国語以外にも日本語、英語のポスティングができるようにブログを整備しました。右上を見ると国旗が見えます。まだまだですが、いつかはすらすら日本語と英語のポスティングができればいいですね。

ちょうど今日PayPalに加入して10万円くらい決済をしたら英語を使う女性から電話がかかりました。ご飯を食べているうちだからあまりにも慌てました。なんで日本語しか出なかったのか。恥ずかしいです。^^;;

Written by muscly

May 8th, 2010 at 5:50 pm

Posted in その他