.-- --

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 comment(-) trackback(-)
.26 2010

セキュアなネットワークへのアクセス

Tasakiです。

ここ最近、とても暖かいですね。いや暑いくらいです。
とても2月とは思えません。一体何が起こっているのでしょうか?

今週はSDK 3.2 beta 3 も公開され、そろそろフィックス版も近いのかなと推測していますが、ここ最近何かと出くわすことの多かった、この話題について取りあげてみます。
iPhoneは携帯電話ということで、セキュリティについては特に重視した設計になっていますが、そのために困った問題が発生することもあります。

httpsスキームが、その代表例でしょうか。
この場合、認証局の署名がされていない自己署名の証明書では、通信時にエラー扱いにされてしまいます。Macでは警告ダイアログなのに、ちょっと乱暴な気がします。

これを回避するための魔法のコードがこれです。
@implementation NSURLRequest( NSHTTPURLRequest ) 
+ ( BOOL ) allowsAnyHTTPSCertificateForHost:( NSString* ) host {
return YES;
}
@end
これをコードのどこかに記述しておけば、ビルド時に警告が7件くらい出るものの、自己署名証明でも問題なく通信を行うことができるようになります。
ただし、AppStoreで配布する場合には、審査を通過しないようです。うーん。

また、BASIC認証が必要なURLへUIWebViewからアクセスする場合も注意が必要です。
事前にBASIC認証のかかったサイトであることが分かっている場合は、
NSURL* url = [ NSURL URLWithString: @"http://user:password@www.test.com" ];
[ webVIew loadRequest:[ NSURLRequest requestWithURL: url ]];
と言った具合で記述しておけば、問題なく表示することが可能な訳ですが、そうでない場合には、非公開APIを利用してイベントを取得する必要があるようです。
この方法については、私自身が未検証なので、リンクだけ貼らせていただきます。
http://d.hatena.ne.jp/KishikawaKatsumi/20090603/1243968707
なお、Mobile Safari では、専用の入力フォームが表示されるようになっています。なんかずるいですよね。

こんな感じで、通信部分のAPIについては、今後更なる拡充をお願いしたいところですね。

スポンサーサイト
.12 2010

静的ライブラリなんて…

Tasakiです。

ついにSnowLeopardにアップグレードしました。見た目はほとんど変わらないという話ですが、ツールが対応してなかったり、XcodeやIBに至っては、操作性がだいぶ変わってるみたいで、慣れるまで大変な気がします。

今回のテーマですが、タイトルからしてネガティブ感にあふれてますけども、静的ライブラリの欠点についてです。
ライブラリは便利だという話の後にこんなネタを持ってきて恐縮ですが、用途を考える上では重要だと思いますので。

・ファイルサイズの肥大化
フレームワーク等をリンクしていると、ライブラリ内にまるごと含まれてしまいます。結果、アプリケーションバンドルが目に見えて大きくなります。

・同一の静的ライブラリを含む派生ライブラリを複数リンクする場合の問題
アプリケーションターゲットのリンカフラグに-ObjCや-all_loadを指定しているとクラスが二重定義されていると言われ、ビルドが通らなくなります。二重定義じゃなくて同じものだっつーの。かといって、それらのフラグを外すと既存クラスへの追加カテゴリ等がロードされなくなります。

・NSSelectorFromString()でライブラリ内部のメソッドが取得できない
ライブラリの外から内部のメソッドに対して、Objective-Cのウリの1つである動的結合が使用できません。これも痛いです…



1つ目はしょうがないとしても、他は致命的です。そんな設計にしてる方が悪いと言われればそれまでですが…
どなたか、いい解決法をご存知ないでしょうか?

.05 2010

ライブラリの作成(2)

Tasakiです。

1回目から一月ほど空いてしまい、僕自身何を書こうとしていたのか忘れかけていましたが、(…というか、いろいろあって、このテーマに対する興味が失せてきている訳ですが)、一度乗りかかった船でもありますし、気を取り直して続けたいと思います。

前回は、プロジェクトとしてライブラリを作成する方法についてご紹介しました。今回は、既存のプロジェクトに対してライブラリターゲットを追加する方法です。

そもそも、このターゲットについてなんですが、ご存じない方のために解説しておきますと、1つのプロジェクトで複数のバイナリを生成するための概念で、ターゲットごとにビルド条件やバンドルするソース、リソース、ライブラリを変更することが可能です。
まあ、便利ではあるんですが、増やしすぎると混乱の元となりますので、ほどほどにしておくのが賢明です。

アプリ開発と並行してライブラリ開発を行う場合に、この手法を用いるとプロジェクトをひとまとめにして管理できます。ただし、楽かどうかは個人の感覚によりそうです。

で、肝心の方法なんですが、まず、既存のプロジェクトを開きます。
メニューバーから「プロジェクト」 >「新規ターゲット…」を選択します。
以下の画面が表示されたら、左のリストからCocoa Touchを選択し、Static Libraryを選んで「次へ」を押します。
ピクチャ 4

その後の画面で、ターゲット名を入力して「完了」を押せば、新たにライブラリ用ターゲットが追加されます。
あとは、プロジェクトから作成した場合と同様に開発を進められるんですが、注意点が幾つかあります。

・prefixファイルが未定義である
 - 全てのライブラリまたはフレームワークに対し、importを明示するか、ターゲットのビルド情報にプレフィックスファイル(.pch)を追加する必要があります。プレフィックスファイルを追加する場合は、アプリターゲットのものとは別に用意した方が安全かと思います。

・ビルド前にアクティブターゲットに指定する必要がある
 - ターゲットを追加した場合は、プロジェクトウィンドウの概要ボタン等から、ビルド対象のターゲットをアクティブターゲットに設定する必要があります。(これが意外と忘れます)

・プロジェクトにファイルを追加する際に、逐次全てのターゲットに対して、ファイルの必要性を確認する
 - ターゲットが複数ある場合に、ファイルの追加漏れが生じる危険が生まれます。これもビルドエラーの要因として、陥りやすい罠です。

このようにマルチターゲットなプロジェクトは、きちんとした管理が必要となります。
安易なマルチターゲット構成には気をつけましょう。(<自分)

 HOME 

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


  • UTO:
    カナダ版iPhone4Sは、マナーモードでシャッター音がならない…


  • Ehara:
    ...


  • Hayate:
    ...


  • Tasaki:
    Developer登録完了...したのはいいけど


  • Ueda:
    ...



リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。