タグ別アーカイブ: iPhone

一般情報 iPhone 構成ユーティリティ 3.3 (Windows)とは、

この「iPhone 構成ユーティリティ」を使うことで、iPhoneの構成プロファイルを作成、保守、暗号化、およびインストールしたり、プロビジョニングプロファイルや承認済みアプリケーションを追跡およびインストールしたり、コンソールログなどのデバイス情報を記録したりする作業を簡単に行うことができます。自社で開発して、AppAtoreにリリースする前には、このツールを利用してiPhoneにアプリを設定しで動作検証をしたり、XML ファイルで、デバイス・セキュリティ・ポリシー、VPN 構成情報、Wi-Fi 設定、APN 設定、Exchange アカウント設定、メール設定、iPhone や iPod touch からのエンタープライズシステムの操作を許可する証明書が含まれています。

通常のiPhone利用者は利用することがないツールですが、iPhoneアプリを開発する人には必須のツールです。

最初からプロファイルを作成するのが面倒なら、http://iphonenodata.com/ からダウンロードすることも可能。

米AppleのSupport Downloads日本のアップルサイトからダウンロードしてご利用ください。

TimeProfilerの使い方

CATEGORIES iPhone, 北海道ラボby.t1 Comments2011.02.28

前回はLeaksについて書きましたが、今回はTime Profilerについてまとめます。

TImeProfilerはシステムの中でどこの処理に時間(リソース)をつかっているかを可視化し、チューニングを行うためのツールです。

実行 -> パフォーマンスツールを使って実行 -> TimeProfiler

実行 -> パフォーマンスツールを使って実行 -> TimeProfiler

 

前回のLeaks同様に実行しましょう。実行と同時にiPhoneシミュレータも起動します。(ユーザごとの設定によります)

私は、シミュレータではなく実機で使っています。実は、iPhone3GSはあまりNSUserDefaultsを連続して呼ぶとフリーズしていまうというバグ(?)があり、TimeProfilerでみて処理を変えた経験から、テストは常に実機です。

起動初期の画面

起動初期の画面

画面左のcall Treeペイン

画面左のcall Treeペイン

起動初期画面左の中くらいの位置にある、CallTreeのチェックボックスは図のようにするといいでしょう。こうしておけば、System Libなどは表示されず調整しやすくなります。後は、iPhoneアプリをぐりぐりと動かしてみてください。

処理に時間がかかっている場所がグラフィカルに可視化される

このように、同一クラス内で処理に時間の掛かっている部分の割合が表示されてます!!(ちなみに、上の画面は関数名をダブルクリックすると表示されます。)

便利ですね。みなさんもこうやって地道にチューニングしていきましょう

iPhoneアプリの開発に関連する書籍は、大まかに分けて3種類あります。

  • HTMLやJavaScript等を使うWebベース系アプリ
  • Objective-Cで開発するネイティブアプリ
  • OpenGLを利用するC/C++言語ベースのゲーム系のアプリ

今回は、今まで読んだ中で「Objective-Cで開発するネイティブアプリ」のおすすめ本を紹介します。

iPhone SDK アプリケーション開発ガイド

iPhone SDK アプリケーション開発ガイド

定番のO’REILLY本です。この本には、網羅的で幅広い内容が深い部分まで掘り下げて書かれています。そのため、プログラミング初心者におすすめできない入門書です。私は半分しか読んでいないのですが、基本的なHelloWorldから高度なUIの開発まで、チュートリアルにしたがって習得していくことができます。プログラミング自体が初心者な方にはおすすめできませんが、Javaなどのプログラミングに慣れている人であれば読みやすいと思います。この本の第3章を読めば、基本的なアプリの作り方を理解出来ます

iPhoneプログラミングUIKit詳解リファレンス

iPhoneプログラミングUIKit詳解リファレンス

私が上記のオライリーと併用して読んだ本です。この本も入門書に近い構成で、実装の仕方が順番に説明してあります。図解が多いので理解しやすく、UIKitの各オプションの説明も豊富なので、リファレンスとして役に立つと思います。この本は順に読み進めていくのではなく、必要な部分をリファレンスとして読むことをおすすめします。Chapter9のUITableViewは最重要コンポーネントの1つであるTableViewの解説になっています。この章の知識はいろいろな事に応用できるので早めに読んでしまうのがおすすめです。

上記の2冊をひと通り読み終わると、iPhoneアプリの作成に必要な基本的な知識は身についているとおもいます。この段階まで到達してから、以下の書籍に取り掛かると、より高度なiPhoneアプリを開発できるようになります。

iPhoneSDK開発のレシピ

iPhoneSDK開発のレシピ

テクニックが詰まった一冊です。中級者向けの本になっています。標準のフレームワークや外部ライブラリについて触れています。本書籍内には多数のソースコード例が記載されているのですが、完全なアプリケーションとして紹介されているわけではありません。そのため、iPhoneアプリの開発に慣れていない人だと、サンプルを実行するにも一苦労すると思います。また、掲載されているサンプルでどういったアルゴリズムを使っているかは部分的にしか解説されていないため、ソースコードを読み解く力がない人には向かない1冊です。ですが、たくさんのテクニックが書かれているので、入門書から脱出したい人にとっては非常に重宝すると思います。

iOSデバッグ&最適化技法 for iPad/iPhone

iOSデバッグ&最適化技法 for iPad/iPhone

iPhoneアプリのデバッグ手法に特化した書籍です。iPhoneアプリでは、メモリ管理を自分で行う必要があります。なので、メモリ管理がうまく出来ていないとメモリリークやエラーの原因になります。この本では基本的なデバッグ方法から、メモリーリークを検出するデバッグ方法などについて学ぶことが出来ます。

iOS SDK Hacks ―プロが教えるiPhoneアプリ開発テクニック

iOS SDK Hacks ―プロが教えるiPhoneアプリ開発テクニック
こちらもOreillyの本です。こちらは先程の入門書のOreilly本とは異なり、iOSの利用テクニック集です。「iPhoneSDK開発のレシピ」よりもコアな部分が書かれており、パフォーマンスチューニングや課金システムに関しての項目は重宝しました。中級〜上級者向けの内容になっています。

これらの本に関して共通して言えることは、すべてInterfaceBuilderを利用しないガッツリアプリを書きたい人向けになっている事です。プログラミング初めて・iPhoneSDKってどんなものか触ってみたいといった人にはあまり紹介できない内容だと思います。また、個人的に一番参考になったものはO’REILLYの「iPhone SDK アプリケーション開発ガイド」です。これ一冊でほとんど網羅されているので、取り敢えず持っておくと役に立つと思います。是非参考にしてみてください。

iPhoneアプリ開発ではUITableViewを利用する場合が多々あります。そこでちょっと変わったUITableViewの使い方を紹介します。

TableViewを回転させる

標準ではセルが上から下にかけて並んでいますが、TableViewを回転させることで任意の方向にセルを配置することが可能です。

通常のTableView

90度回転させたTableView

90度回転させたものは中に入っているTexLabelも回転させています。Viewを回転させるにはCGAffineTransform構造体を利用します。

1
2
3
4
5
- (void)viewDidLoad {
CGAffineTransform rotate = CGAffineTransformMakeRotation(-90.0f * (M_PI / 180.0f));
[self.view setTransform:rotate];
[super viewDidLoad];
}

CGAffineTransformMakeRotationで回転行列を設定できます。ここでは、90度左に回転させるために−90度を設定しました。CGAffineTransformMakeRotationで指定できる角度はラジアンです。また、その値をUIViewのsetTransformというクラスメソッドに渡すことによって、回転させることが出来ます。また、90度以外にも中途半端に回転させることも可能です。

中途半端に回転させた図

加速度センサとの融合

これだけだとちょっとつまらないので、加速度センサと組み合わせてみました。iPhoneを傾けると、次のページ(セル)に移動するサンプルを作成してみました。

傾きを検知してスライドするサンプル

このプログラムはXcodeのデフォルトのUITableViewControllerのものを利用しております。RootViewController.mの実装は以下のとおりです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//RootViewController.h
#import
@interface RootViewController : UITableViewController {
NSMutableArray *cellList;
int rotateRad;
int indexRow;
UIAccelerationValue speedX_;
UIAccelerationValue speedY_;
UIAccelerationValue speedZ_;
}
@end

//RootViewController.m
#import "RootViewController.h"

@implementation RootViewController
- (void)viewDidLoad {
cellList = [[NSMutableArray alloc] initWithObjects:
@"P1",
@"P2",
@"P3",
@"P4",
@"P5",
@"P6",
@"P7",
@"P8",
@"P9",
@"P10",
nil];

indexRow = 0;
CGAffineTransform rotate = CGAffineTransformMakeRotation(-90.0f * (M_PI / 180.0f));
[self.view setTransform:rotate];
[self.tableView setScrollEnabled:NO];
[super viewDidLoad];
}

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
speedX_ = speedY_ = 0.0;
UIAccelerometer *accelemeter = [UIAccelerometer sharedAccelerometer];
accelemeter.updateInterval = 0.5;
accelemeter.delegate = self;
}

- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
UIAccelerometer *accelemeter = [UIAccelerometer sharedAccelerometer];
accelemeter.delegate = nil;
}

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
speedX_ = acceleration.x;
speedY_ = acceleration.y;
speedZ_ = acceleration.z;
rotateRad = 90+atan2(speedZ_,speedX_)*180/M_PI;

if(rotateRad>30) indexRow++;
else if(rotateRad<-30) indexRow--;
if(indexRow<0)indexRow=0;    if(indexRow>=[cellList count]) indexRow = [cellList count]-1;
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:indexRow inSection:0];
[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
}

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations.
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [cellList count];
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell.
CGAffineTransform rotate = CGAffineTransformMakeRotation(90.0f * (M_PI / 180.0f));
[cell.textLabel setTransform:rotate];
cell.textLabel.text = [cellList objectAtIndex:indexPath.row];
return cell;
}

- (void)dealloc {
[cellList release];
[super dealloc];
}

@end

ポイントは加速度センサから得られた値をもとに傾きを検出しています。今回はiPhoneを左右に30度傾けた時にセルの移動をするようにしました。また、色んなものと組み合わせれば面白いものができそうですね。

快適にアプリケーションを使ってもらうためには、最適なメモリー管理と動作のボトルネックを解消することです。

最適な学習環境を提供するために、SmartBrainはメモリー管理こそ無いものの、パフォーマンスチューニングを日々行っています。
実は、使いやすい・気持ち良い ・楽しいは学習にかかわらず仕事でも重要ですよね。

今回は、iPhoneの開発で利用するLeaksについてちょっとした使い方をまとめます。
memory warning Level=**みたいなものが出てるそこのあなた!!
Leaksを使ってメモリーリークを解消しましょう。

(次回はTime Profilerについての予定)
それでは、まずXCodeを起動してLeaksを実行しましょう。
(当然何かしらのプロジェクトを開いてないと実行できません)



実行をひらきましょう



パフォーマンスツールを使って実行からLeaksをクリック

すると以下のような画面が立ち上がります。
(通常立ち上がりと同時にシミュレータとサンプリングが開始されます。)



Leaks起動数秒後

起動しただけなのに、もう漏れてますね。これはいけません。メモリーリークがあると、”落ちる”減少が頻発します。またNSUserDefaultsに正しく保存できないなど、 百害あって一利なしです!

それでは、メモリーリークを根絶しましょう。画面左側の「水道管が破裂」したようなアイコンのあるエリアをクリックしましょう。すると以下の画面に変わるはずです。



左上のLeaksボタンを押すとこのような画面になります (右ペインは画面上部のViewの一番右を押しましょう)

完全にリークしてますね。右ペインには下から main -> TopMenu…. -> ViewCon….とメモリーリークを起こしている部分までのつながりが表示されています。 (人形の黒いアイコンが付いているものがユーザー定義の関数です)それでは、右ペインの ViewController4 viewDidLoadを見てみましょう。



メモリーリーク箇所を特定

NSMutableArrayが66.7%も漏れていますね。 きっとreleaseのし忘れでしょう。といった具合に リークしている可能性がある箇所を分かりやすく表示してくれるのがLeaksです。

ちなみに、メモリーリークチェックはデフォルトで10秒置きに起動します。すぐにチェックしたい!という人はしたの画像に有るように「Check for Leaks Now」を押してあげるとすぐにチェックしてくれます。



すぐにメモリーリークをチェックしたい場合

地道にメモリーリークは潰していくしかありませんね。

スマートフォンの時代

CATEGORIES eラーニング, iPhone, スマートフォンby.kibanadmin1 Comments2011.01.18

最近、電車の中で、携帯を使う人を見るとほとんどが、スマートフォンを利用している人でした。
ここ数年の間に目立つほど、スマートフォンの人気が急増しました。

▼スマートフォン増勢

通信会社ごとに、主力製品を出して、人気を争うのも実感します。
弊社では、iphoneを利用していますが、
iphone以外にも、最近話題になっているアンドロイドやXperia、
iphoneのライバルであるSamsungのギャラクシーなどが特に人気です。
むしろ、普通の携帯からスマートフォンに機種変更をする人も急増しているそうです。

ちなみに、韓国では、Samsungのギャラクシーの人気がiphoneをはるかに上回ります。

▼話題のSamsungのギャラクシーとギャラクシータブ

弊社では、すでにスマートフォンに対応できる「PPT2 Mobile」も取り扱いしています。
今の時代は、学習も本からパソコン、パソコンからスマートフォンに移動しているようです。
スマートフォンは、WiFiがつながる環境であれば、普通の携帯では不可能だったことまで出来る優れたものです。
まだ、スマートフォンを利用してない方も、是非、お試しください。

iPhoneでUstreamの番組を視聴するためには、Ustreamのアプリ”Ustream Viewer”が必要で、iPhoneで標準で搭載されているWebブラウザであるSafariでは再生できません。ですが、すべての番組をViewerで視聴できるわけではありません。

しかし、サードパーティ製ブラウザアプリである”Skyfire”を使用すると、Ustreamの放送を100%視聴することが出来ます。

Skyfireとは、FlashをHTML5に変換し、動画を再生することができるiPhoneのWebブラウザアプリです。

ただし、Flashコンテンツを一旦Skyfireに送信し、サーバ側でHTML5に変換しアプリ内で表示するため、タイムラグが10秒程度発生しました。

SkyfireでUstreamの配信画面に入ると、下のメニューバーから動画画面がポップアップされます。こちらをタップするか、上の配信画面の再生ボタンをタップすると動画を再生することが出来ます。

Ustreamのチャンネル画面

Ustreamの配信画面

PCでの視聴と比べてみたのですが、Skyfireのほうは変換サーバを経由している為10秒程度遅延が出ていました。

Ustreamが再生されている様子

Ustreamのチャンネル画面

10秒程度の遅延があるものの、ほぼすべてのUstream番組をiPhoneで視聴することが出来るのは良いですね。

Skyfireは350円で購入可能です。Ustream Viewerで見えない番組をiPhoneで見たいという方は、是非試してみてはいかがでしょうか?

キバンインターナショナルには、iPhone全社員支給制度があり、ほぼ全社員がiPhoneを所持していますが、執務室内ではソフトバンクの電波の入りが悪く、そもそも繋がらなかったり、繋がっても切れてしまったりと通話状態が悪い不便な状態でした。

本日、以前申し込んでいたソフトバンクのホームアンテナFTが届き、社内におけるソフトバンク回線の電波状況が改善しましたので、ご連絡致します。

ホームアンテナFTを正面から撮影

ホームアンテナFTを正面から撮影

上から撮影した図

上から撮影した図

高さ80mm x 幅40mm x 奥行き130mm、重量は 200g程度と、非常にコンパクトでした。

接続は簡単で、同梱されているマニュアルの通りにケーブルを繋ぐだけで設置は完了します。(モデムルータ等と、LANケーブルで繋ぐのみでした。)

ソフトバンクの電波状態が悪い!という場合は、ホームアンテナFTを申し込むと改善されるかもしれません。
お困りの 方は試してみて下さい。少なくとも、キバンインターナショナルの執務室内では、電波状況が改善しました。

申し込んでから届くまでに2ヶ月近くかかるので、その点はご注意を。

ホームアンテナFTお申込のURLは以下の通り。
http://mb.softbank.jp/mb/special/network/home_antenna_ft/

みなさんこんにちは。新しいものが出ると試さずにはいられない北海道研究所です。
本日午前3時頃に公開されたiOS 4.2をiPhoneとiPadにインストールしました!

今回の目玉はなんといってもiPadでのマルチタスキングですね。複数のアプリケーションを切り替えながらつかうという夢がかないましたw

▲タスク一覧があるー!

▲フォルダ機能が使える!

▲横の回転禁止のスイッチはミュート機能になりましたので、ここで回転をする・しないを選択できます

マルチタスキングの他にもフォルダー機能・エアプリント・エアプレイ・iPhone/iPad/iPod touchを探すなどが利用出来るようになったようです。
なお、 iPhone/iPad/iPod touchを探すはiPhone4、iPad、iPod touch第4世代でiOS4.2が動いている物で動作するようです。

【参考文献】
http://www.apple.com/ios/

昨今、国内においても爆発的にスマートフォンの普及が進んでいますが、複数のスマートフォンで等しく動画コンテンツを見られるようにすることは容易ではありません。
単に動画ファイルを再生するだけであれば、専用の動画再生アプリをダウンロードすることで対応可能です。が、これではサービスを作成していくにあたって、

「Webブラウザ上で他のコンテンツと組み合わせて動画を再生させたい!!」
「エンドユーザに特別にソフトをインストールさせるなどの手間・制約を強要させたくない!!」

といった要求には対応することができません。

PCではあまり深く考えなくても、ほとんどの動画ファイルをWebブラウザ上で再生することができますが、スマートフォンでは事情が異なってきます。
2010年11月現在、残念ながら国内で販売されているスマートフォンのすべてで一様に再生できる動画フォーマットというものは存在しません。
そのため、動画コンテンツを複数のスマートフォンに対応させるためには各々に合わせた動画フォーマットに変換する必要があります。

ひとつの動画ファイルを複数のスマートフォンで等しく再生することはできない

それでは、それぞれのスマートフォンで再生できる動画フォーマットとは一体どのようなものなのでしょうか。

iPhone・iPadにおいては3gp,mp4,m4v等の動画ファイルが再生可能です。
特にmp4形式は特別に動画変換を行わなくてもそのまま再生することができます。(一部例外のフォーマットもあります)

Android端末においてはFlash10.1にてFlash動画を閲覧することができますが、AndroidのバージョンによってはこのFlash10.1自体が動作しません。
Androidのバージョン依存の影響を抑えるためには、少々手間がかかりますが、動画変換ソフトを用いてmp4ファイルをAndroid端末等でも読み込める形式に変換することがベターです。

なお、Android端末用等、各種スマートフォンに対応した動画に変換する具体的な方法に関しては弊社ブログの以下の記事をご参照ください!!

参考記事:iPhone、iPad、Andloidに対応した動画を作ろう!

  • 製品・サービス
    PC、iPhone対応のeラーニングシステム。20名まで無料でASPサービスを利用できます
    PC、iPhone対応のeラーニング学習管理システム(LMS)【SmartBrain】
    http://smartbrain.info/
    PC、iPhone対応のeラーニングシステム。ユーザ数無制限のASPコースをご用意。


    eラーニングポータルサイト【elearning.co.jp】
    http://elearning.co.jp/
    eラーニング専門企業(株)キバンインターナショナルの製品を紹介しています。


    コンテンツビジネス支援パック
    http://contentsbank.jp/

    Ustream配信、動画コンテンツ制作、セミナーにご利用いただけるレンタルスタジオ
    Ustreamレンタルスタジオ「パンダスタジオ」
    http://pandastudio.tv/

    eラーニング専門企業(株)キバンインターナショナルのスタッフが、eラーニングに関する情報・最新事情をBlogでご紹介。月50本程度の情報発信を行っています。
    ブログ「blog.eラーニング.co.jp」
    http://blog.elearning.co.jp/

  • アーカイブ
  • カテゴリー
  • Amazon
  • タグ