2014年08月12日

iOS 7.0 のシミュレーターがない!

Xcode 5.1.1 で開発していたら、テストチームから表示の不具合広告。
シミュレーター では、正常なのに。。

Simulator Version は 7.1。どうやら、7.0でのみ表示されなかったらしい。
そこで7.0のシミュレーターで確認しようと思ったら、

「な、ない。」

図1は「Xcode」>「Preferences」の「Download」画面

xcode_download.png

図1 Xcode ダウンロード

ダウンロードしようとしても、項目なし。Xcode をインストールし直しても同じ。
これ困っている人、結構いるんじゃないかな。

以下はそんなときの対処方法。

Step1> 古いバージョン(5.0.2)のXcode をダウンロード

アップルのデベロッパーサイトのダウンロードページで Xcode 5.0.2 のdmgをダウンロード。
ダウンロードできたらダブルクリックでdmg をオープンします。インストールするわけではないので、そのまま。

Step2> 「iPhoneSimulator7.0」.sdkをさがす

「iPhoneSimulator7.0.sdk」を探します。dmgを開いた状態で、dmgの内容は /Volumes というディレクトリにマッピングされますので、ターミナルでを開いてXcode のディレクトリを確認します。そのあとiPhoneSimulator7.0.sdk」を探してコピーします。手順は以下のとおりです
$ cd Volumes
$ ls
Untitled Xcode
$ find Xcode -name iPhoneSimulator*.sdk
Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk ←見つけた!
$ cd Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs
$ ls
iPhoneSimulator7.0.sdk
$ cp iPhoneSimulator7.0.sdk /tmp ←/tmpディレクトリにコピー


Step3> "Step2"のファイルをインストールされているXcode(5.1.1)の環境にコピー

Xcodeを閉じて終了していることを確認します。そして、アプリケーションのXcodeの所定の場所に「iPhoneSimulator7.0.sdk」をコピーします。手順は以下のとおり
$ cd /Applications/Xcode.app
$ cd Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs
$ ls
iPhoneSimulator7.1.sdk  ←確かに7.1のシミュレーターしかない
$ mv /tmp/iPhoneSimulator7.0.sdk . ←dmgからコピーしたファイルを移動
$ ls
iPhoneSimulator7.0.sdk iPhoneSimulator7.1.sdk ←入った


以上です。

Xcode を起動して確かめてみましょう。

ラベル:IOS xcode5 Simulator
posted by ayagu at 17:32| Comment(0) | iOS | このブログの読者になる | 更新情報をチェックする

2014年07月20日

IBでボタンのラベルを複数行表示

xcodeのInterface Builder(IB)で、ボタンのテキストラベルを複数行にする手順です。

Step1> ボタンの配置


Storyboardのビューにボタンを配置し、サイズを大きく広げます。(図1)

mlbutton0.png

図1ボタンを配置

Step2> ボタンのカラー変更


わかりやすくするためにテキストとバックグラウンドのカラーを変更します。(図2)

mlbutton1.png

図2 ボタンのカラー変更

Step3> タイトル・テキストを複数行で入力


複数行のタイトル・テキストを入力します。改行は[option]キー + [return]で入力します。(図3)

mlbutton2.png

図3 テキストの入力(複数行)

Step4> 改行モードの変更


改行モードを"Word Wrap"に変更します。(図4)

mlbutton3.png

図4 改行モードの変更

以上です。IBでボタン・タイトルが3行で表示されているのが確認できますね。




ラベル:ios7 IB xcode5
posted by ayagu at 13:21| Comment(0) | iOS | このブログの読者になる | 更新情報をチェックする

2014年05月13日

IBで作ったカスタム・ビューをStoryboardで再利用する

xcode5 Interface builder(以下IB) で、xibファイルとして作成したカスタム・ビューをStoryboardに配置してIB内で再利用する方法を紹介します。Storyboadの変わりに別のxibファイルを使っても同様の結果です。

0. 準備


xcode で新規アプリケーション・プロジェクトを「Simple View Application」テンプレートを選択して作成してください。ここでは[Product Name]をCVSampleとして作成します。

1. カスタム・ビューの作成


最初にカスタム・コントロールを作成します。

Step1> xibファイルの作成


xcode プロジェクトの左ペイン、[Project Navigator] の [CVSample] グループを右クリック、[New File…]を選択します。[iOS] → [User Interface] → [View]を選択して、[Next] ボタンをクリック。[Device Family] を[iPhone]にして[Next]ボタンをクリック。[Save As]を「CustomView」として[Create]ボタンをクリックし、CustomView.xib ファイルを作成します。

Step2> IBでカスタム・ビューをレイアウト


CustomView.xib をIB エディターで開き、右パネル[Attribute Inspector]の[Simulated Metrics]>[Size]を「Freeform」、[Orientation]を「Portrait」、[Status Bar][Top Bar][Bottom Bar]を「None」に設定し、Viewを希望のサイズにドラッグします。(図1)
Object Library からUIコントロールを選択してViewに配置します。(ここでは例として、Segmented Controlとラベル)。

CustomView0.png
図1カスタム・ビューのレイアウト

Step3> CustomViewクラスを作成


[Project Navigator]から「CustomView.xib」を右クリック、メニューの[New File…]を選択し、[iOS]>[Cocoa Touch]から[Objective-C class]を選択し、[Next]ボタンをクリック。[Sub class of]を「UIView」にして、[Class] には.xibと同じ名前「CustomView」を入力、[Next]ボタンをクリックして、クラスファイルのヘッダーと実装ファイルを作成します。

Step4> xibのクラスをCustomViewクラスに設定


CustomView.xibをクリックして、IBのレイアウト・エディターに戻り、[Identity Inspector]の[Custom Class]>[Class]を「CustomView」に設定します。(図2)

CustomView1.png
図2 xibのクラスを設定

2. Storyboardにカスタム・ビューを配置


[Project Navigator]から[CustomView.xib]を選択し、IBを表示します。[Object Library]から「View」を任意の位置にドラッグし、カスタム・ビューがそこに収まるようにリサイズして配置します。配置したUIView を選択して、[Identity Inspector]の[Custom Class]>[Class]にカスタム・ビュークラス名「CustomView」を入力します。(図3)
CustomView2.png
図3 Storyboardに配置

3. 問題点(課題)の確認


この時点で、シミュレーターで実行してみます。メイン・ビューに配置・設定したはずのカスタム・ビューは表示されず、ブランクのままです。
それもそのはず、CustomView クラスはロードされても、xibファイルをロードしていません。

4. xib ファイルのロード (CustomView.mファイル)


3の課題を解決するには、以下の手順でコードを CustomView.mファイルに追加します。

Step1> サポート・メソッド(スタティック)の追加


xibをロードするコードを記述するスタティック・サポート・メソッド、loadInstanceOfViewFromNibを記述します。ここに標準的こxibファイルをロードするコードを書きます。

Step2> awakeAfterUsingCoder:aDecoder メソッドをオーバーライドする


- (id) awakeAfterUsingCoder:(NSCoder*)aDecoderをオーバーライドします。このメソッドはxibファイルがロードされたときに呼び出されます。厄介なことにStoryboardからロードされたときと、上記のloadInstanceOfViewFromNibメソッドで呼ばれたときにも呼び出されます。そのままでは、無限ループになってしまうので、Storyboardにレイアウトした張りぼてのUIView(プレースホールダー)としてロードされたときを検出して、xibロード時のコールが無限ループになるのを防ぎます。
また、プレイスホールダーとしてのUIViewに指定したプロパティを新しくロードしたCustomViewに受け継ぐ処理が入っています。これは必要なだけ記述してください。以上、このサンプルの追加のコードは以下の通りです。

// サポート・メソッド
+ (CustomView*)loadInstanceOfViewFromNib {
return [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:nil options:nil] lastObject];
}

// オーバーライド
- (id) awakeAfterUsingCoder:(NSCoder*)aDecoder {
BOOL loadedFromSimpleVuew = ([[self subviews] count] == 0);
if (loadedFromSimpleVuew) { // プレース・ホールダーViewの検出
CustomView* customView = [CustomView loadInstanceOfViewFromNib];

// IBでプレース・ホールダーに設定したプロパティをコピー
customView.frame = self.frame;
customView.autoresizingMask = self.autoresizingMask;
customView.alpha = self.alpha;
customView.userInteractionEnabled = self.userInteractionEnabled;
// ... その他、必要なだけのプロパティをコピーする
return customView;
}
return self;
}


以上です。トラップを少し回避するだけで、再利用可能なカスタム・ビューが使えるようになりました。カスタム・ビューに配置したオブジェクトのハンドリング等は、適時、行ってください。

posted by ayagu at 15:05| Comment(0) | iOS | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。