Tag Archives: プログラミング言語

iPhone用の.xibファイルをiPad用にする

0
Filed under iOS SDK, iPadアプリ, Xcode
Tagged as , , ,

ある程度制作したりリリースしたiPhone専用アプリをiPad用でも使えるようにしたいことがあります。
iPhone専用アプリでもiPad上で拡大してくれるのですが、やっぱり専用にリソースを作ったり、UIを変更したいという、つまりUniversalアプリ化したいというとき、ソースコードで生成しているUIはそれなりに対応も出来るのですが、XIBファイルはどのようにすればいいのでしょうか?

今回は、XIBを変更するの手順を下記に書きました。ちょっと面倒ですが、手順を覚えてしまえば迷わずできます。

XIBの複製

まず、xibをコピーします。
[File]メニューから[Duplicate]を選び、XXX~ipad.xib の用に命名します。

【命名の話】

このxibの名前の付け方ですが、適当な名前にし、自分で呼び出す部分も変更することももちろん出来るのですが、“~ipad”とつけると、Xcodeが自動的にiPad用に呼び出してくれます

内部の定義を修正

ファイル◯◯エリアで複製したXXX~ipad.xibを、右クリックし、[Open As]>[Source Code] でテキストとして開きます。

(普通に開くとInterface Builderで開くところを内部のXMLを直接編集できるようになります)
この中身を、下記のように書き換えます。

1. typeの変更

ファイル上部に有る archiveノード の type属性 を、
“com.apple.InterfaceBuilder3.CocoaTouch.XIB”
から、
“com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB”
と置換
します。

2. framework名の変更

ファイル内にある全ての
“IBCocoaTouchFramework”
を、
“IBIPadFramework”.
と置換
します。
“⌘⌥F”で開くパネルで一括置換しましょう。

画面サイズの修正

最後に、画面サイズがiPhone用になっているものを、iPad用に変更します。
ファイル◯◯エリアでXXX-iPad.xibを、右クリックし、[Open As]>[Interface Builder – iOS] で開きます。

一番外側のViewを選び、画面右側の”Attribute inspector”で、一番上にある”Simulated Metrics”の”Size”を、“iPad Full Screen” にします。
以上で、XIBのiPad化は完了です。

おまけ1:UITableViewの背景色が適用されないとき

UITableViewをGroupedで使用したとき、背景色が適用されない問題が発生しました。
この場合、下記のように、backgroundViewをnilにします。

1
[menuList setBackgroundView:nil];

(注意:これはiOS3.2以降で設定できるパラメータです)

おまけ2:initWithNibName:の場合の変更手順

上記で書いた、xibを『自分で呼び出す部分も変更する』コードというのは下記のようになります。

1
2
3
4
5
6
7
8
9
10
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
  xxxViewController = [[XxxViewController alloc]
    initWithNibName:@"XxxViewController"
    bundle:nil];
}
else{
  xxxViewController = [[XxxViewController alloc]
    initWithNibName:@"XxxViewController-iPad"
    bundle:nil];
}

(このように書いている場所を探して全て変えるのは面倒ですよね。上記手順で書いたように、”~ipad”とリネームすれば、この分岐コードは必要無いわけです!)

参考情報ソース


[AD]

↓iOS SDKのリファレンスを Kindle Paperwhiteに入れたくてたまらない。。

Kindle Paperwhite Wi-Fi (第5世代)

Kindle Paperwhite Wi-Fi (第5世代)

定価:¥ 7,980

カテゴリ:エレクトロニクス

発売日:2012-11-19


↓あ!これこないだ買った!良書だなーと、思っていたんだけど、Kindleで出ていた!!こっちにすべきだった…。そうすれば、iPadでも読めたのに…。

iOS5プログラミングブック

iOS5プログラミングブック

カテゴリ:Kindle版

発売日:2012-08-23


ObjCのdelegateの作例サンプル

0
Filed under Objective-C
Tagged as , ,

デリゲート(Delegate)を定義して、、ということをやろうとしたら、いろいろ忘れていたので、ちょっとメモしておきます。

ZZControllerというクラスがあり、そのクラスのある処理をDelegateとして外に委譲出来るようにしたい、というときには次のように書くことができます。

ヘッダー:ZZController.h

まずは、ヘッダー。
下記のように、デリゲート ZZControllerDelegate と、それを使うクラス ZZController を定義します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// ZZController.h
 
// クラスの前方宣言.
@class ZZController;
 
// delegate.
@protocol ZZControllerDelegate
 
- (void) doSomething:(ZZController*)controller;
 
@end
 
// class header.
@interface ZZController : NSObject
{
  id<ZZControllerDelegate> delegate;
}
 
@property (nonatomic,assign) id<ZZControllerDelegate> delegate;
 
- (void) somethingHappened;
 
@end

実装:ZZController.m

次に、実装側のソースを記述します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// ZZController.m
 
#import <ZZController.h>
@implementation ZZController
 
@synthesize delegate;	// for property.
 
// デリゲートの使用例.
- (void) somethingHappened{
  if( delegate ){
    [self.delegate doSomething:self];
  }
}
 
@end

使い方のサンプル

AAManagerが上記デリゲートプロトコルを実装する場合のサンプルコードです。

1
2
3
4
5
6
// AAManager.h
#import <ZZController.h>
 
@interface AAManager : NSObject <ZZControllerDelegate>
 
@end
1
2
3
4
5
6
7
8
9
10
// AAManager.m
#import <AAManager.h>
 
@implementation AAManager
 
- (void) doSomething:(ZZController*)controller{
  NSLog(@"Oh! What's happened?");
}
 
@end

[AD]

↓最近はエンジニアと言えどもデザインセンスは必須です!よね?

インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針

著者/訳者:Susan Weinschenk

出版社:オライリージャパン( 2012-07-14 )

定価:

Amazon価格:¥ 3,024

大型本 ( 288 ページ )

ISBN-10 : 4873115574

ISBN-13 : 9784873115573


↓今時のプリンタはインクと同じくらいの価格!!

Canon インクジェットプリンター複合機 PIXUS MG3130

Canon インクジェットプリンター複合機 PIXUS MG3130

中古価格: ¥ 4,308 より

カテゴリ:Personal Computers

発売日:2011-10-27


晴れときどきMacRubyインストール

0
Filed under Mac, Ruby
Tagged as , , , ,

MacRubyというツールで、Xcode+Rubyという環境でMacアプリを簡単に作れるらしいので、ちょっとどれほどのものか、とりあえずテストプロジェクトのビルドまでをやってみました!
作業環境は、Mac OS X 10.7.3、Xcode 4.3.2、MacRuby 0.10 です。
最近のMacRubyは、Intel 64bitのMac OS X 10.6以上、という環境でないと動かないので注意。

参考サイト

いくつかのチュートリアルページを見て、設定も簡単そうなので、試してみました。

ここを読む限り、簡単に出来そうで始めたわけです。
が!最新事情はちょっと変わっていて、ちょっとハマったので、下記にその解決策も書いておきます。

なにはともあれダウンロード

まず、公式サイト(http://www.macruby.org/)より、インストーラ(.zip)をダウンロードします。

インストーラパッケージ「MacRuby 0.10」をダブルクリックしてインストール。

完了したら、ターミナルで下記のようにコマンドの存在を確認できます。

Xcode 4.3対応

チュートリアルページを見てもこれで完了のハズですが、Xcodeで新規プロジェクトのダイアログを開いても、MacRubyが出てきません

あれ?と思っていろいろ考えてみたら、Xcode 4.3でフォルダ構成がガラっと変わったことを思い出しました。
Xcode 4.2.x までは、 /Developer というフォルダにすべてが入っていたのですが、4.3からは、Xcode.app内に移動したのです。

で、探ってみたら、やはりMacRubyインストーラは/Developer フォルダにいろいろと入れているので、これを移動します。
Finder上でやってもうまくいかないところが出てくるので、ターミナルでsudoコマンドで実行しましょう。
MacRubyがインストールしたのは、/Developer/ 以下の Library、Examplesというフォルダと、binの3つのフォルダ。
まずは下記のように、Library、Examplesフォルダをコピーします。

1
2
$ sudo cpmac -r /Developer/Library /Applications/Xcode.app/Contents/Developer/
$ sudo cpmac -r /Developer/Examples /Applications/Xcode.app/Contents/Developer/

もう一つのbinフォルダですが、この中に入っているのはrb_nibtoolというシンボリックリンク一つです。
シンボリックリンクをそのままコピーすると問題が出てくるので、改めてシンボリックリンクを作成します。
rb_nibtool ですが、 /Library/Frameworks/MacRuby.framework/Versions/0.10/usr/bin/rb_nibtool へリンクが貼られていたので、そのようにシンボリックリンクを作成します。
※このシンボリックリンクがうまく貼れないと、Xcode上で、xibファイルを見るときにXcodeが落ちたりします。

1
$ sudo ln -s /Library/Frameworks/MacRuby.framework/Versions/0.10/usr/bin/rb_nibtool /Applications/Xcode.app/Contents/Developer/usr/bin/

以上でインストール完了です!
改めてXcodeを開いてみると、下図のようにMacRuby Applicationのテンプレートが追加されています!

テストプロジェクトのビルド

ちょっとテストなので、ドキュメントベースでもなく、CoreDataも使わない設定でプロジェクトを作ります。

プロジェクトが作られたら「⌘+R」でそのままビルド、実行できました!

さて、何しよう!?

関連エントリ:exerb

Windowsでも、CUIアプリ(.exe)なら簡単に作れます。
というエントリを以前書いていたので、改めて紹介。

.rbファイルをコンバートし、.exeにする、というものです。
最新版は2011年12月末にリリースされているので、その後もきちんとメンテされているようですね!
オープンソースプロジェクトでメンテナンスって一番重要だと思うので、とても評価できるプロジェクトだと思います。


[AD]

↓ヒレガス氏の著書。結構評判いいらしい。

Mac OS X Cocoaプログラミング 第三版

著者/訳者:Aaron Hillegass アーロン ヒレガス

出版社:ピアソン桐原( 2009-11-01 )

定価:

単行本 ( 479 ページ )

ISBN-10 : 4894714469

ISBN-13 : 9784894714465


↓英語だけど、比較的新しい著書なので内容は参考になりそうですね!

MacRuby: The Definitive Guide: Ruby and Cocoa on OS X

著者/訳者:Matt Aimonetti

出版社:O'Reilly Media( 2011-11-07 )

定価:¥ 4,897

Amazon価格:¥ 4,011

ペーパーバック ( 246 ページ )

ISBN-10 : 9781449380373

ISBN-13 : 9781449380373


Reachability:iOSでネット接続を確認する公式ライブラリ

1
Filed under iOS SDK
Tagged as , , , ,

Reachabilityは、私も過去に使ったことがあるライブラリですが、最近また別のアプリでも使ったので、メモしておきます。

本ブログ執筆時の最新バージョンであるバージョン2.2では、対応iOSは、「iOS4.0以降」となっています。

インストール

ソースですが、上記ページ(iOS Developer Library内)にある [Download Sample Code]ボタン からダウンロード出来ます。

必要なのはこの中にあるReachability.hとReachability.m 。さらにプロジェクトには、SystemConfiguration.framework というフレームワークも追加しておく必要があるので、設定しておきましょう。
無事プロジェクトに追加できたら、下記のようなコードでネット接続状況を判別できます!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Reachability *reachablity = [Reachability reachabilityForInternetConnection];
NetworkStatus status = [reachablity currentReachabilityStatus];
switch (status) {
    case NotReachable:
        NSLog(@"インターネット接続出来ません");
        break;
    case ReachableViaWWAN:
        NSLog(@"3G接続中");
        break;
    case ReachableViaWiFi:
        NSLog(@"WiFi接続中");
        break;
    default:
        NSLog(@"??[%d]", status);
        break;
}

Warning対策

最近の開発環境では、ビルド時にReachabilityで下記のようなWarningが出ることがあります。

Declaration of ‘struct sockaddr_in’ will not be visible outside of this function

この場合、次の #import 指定を Reachability.h に追記すればこのWarningは消えます。

1
#import <netinet/in.h>

ARC対応のアプリでは要注意

私が今手がけているアプリではどれもARC対応とかしていないのですが、ARC対応のプロジェクトでは現在公開されている Reachability(Version 2.2, 2010-07-20)はそのままでは使えないようなので要注意です。
いろいろとネットに情報は転がっているので、必要な方はそれぞれ参考して修正してください!

↑2つ目のGistというのはそのままGitHubに上がっているので便利そうですね!


[AD]

↓購入しました!VMWare Playerとそこで動く仮想環境が入ったCD-ROM付き!さぁ、やるぞ!

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

著者/訳者:徳丸 浩

出版社:SBクリエイティブ( 2011-03-01 )

定価:

Amazon価格:¥ 6,567

単行本 ( 496 ページ )

ISBN-10 : 9784797361193

ISBN-13 : 9784797361193


↓次のステップへ行きたいiOSアプリ開発者は必携!

エキスパートObjective-Cプログラミング -iOS/OS Xのメモリ管理とマルチスレッド-

著者/訳者:坂本 一樹

出版社:インプレス( 2011-11-18 )

定価:

Amazon価格:¥ 7,747

単行本(ソフトカバー) ( 224 ページ )

ISBN-10 : 4844331094

ISBN-13 : 9784844331094