iphoneアプリ第3弾をただいま作成中です。
約2週間前から作業開始したのですが、その途端に仕事やその他プライベートが猛烈に忙しくなり、実質2日くらいしか作業時間がとれず、ようやくデザインが完成した段階です。
さて、今回は「iphoneアプリを作りたい!でもどうすればいいの?」という方に、初めてiphoneアプリを作るときに便利なサイトをまとめたいと思います。
1、iphoneアプリの作り方を覚える!
なにはともあれまずはこのサイトです。サルにもできるiPhoneアプリの作り方
iphoneアプリ作成に必要なもの、知識、効率のよい進め方などが、これでもかというほど分かり易く説明してあります。感謝です。
2、iphoneアプリを実機に登録する!
なんとiphoneアプリは、自分のiphoneに入れるだけでもかなり手間がかかります。最初はここで泣きそうになるくらいの覚悟が必要です。 そんなあなたに、こちらのサイトを!EZ-NET 登録レポート: 開発機として使用する iPhone 実機を登録する
とりあえず書いてあるとおりにすれば問題ないはずです。
3、iphoneアプリをitunesに公開する!
さて、ようやく公開だ、あ~つかれた!と思ったとき、公開の手順も泣きそうになるくらい手間がかかります。慣れるとラクになりますが。 とりあえずこのサイトを見てやりゃあ問題ないはずです。目指せ!iPhoneアプリ開発エキスパート
実はちょっと情報が古いので現状とは違う部分もありますが、そこらへんは調べましょう。まぁ調べなくてもノリでいけます。
4、その他
さて、なんど上記3サイトだけ見ればiphoneアプリが作れるというナイスな状況ですが、iphoneアプリには意外な落とし穴がたくさんあります。 よくひっかかる落とし穴を、というか私がひっかかった落とし穴をいくつか紹介します。
1、対応OSの部分をiphone3.0に変更しよう。
なんにも気にせずそのままリリースすると、iphone OS4の人しかダウンロードできなくなります。これは、iphoneアプリの設定で「対応OSを4.xx以上」とデフォルトでなっているからです。 これを変更するには、Xcodeのなんたら.plistの「OS」みたいに書いてあるところで、「iphone OS 3」みたいな感じのを選択できるので、そちらに変えてあげましょう。
2、日本語名のアプリは、ローカライズして英語版の情報を作ってあげよう
たとえば、「えっちなアプリ」みたいなタイトルのアプリがあるとして、アメリカに住んでいるアンダーソンさんはそれをみても「ワット?」な感じなわけです。日本語のタイトルなので。 itunes connectの設定で「manage localizations」みたいなボタンがあるので、そこで英語版のタイトルと説明文などを書いてあげましょう。
たぶん海外のitunesでは英語版のタイトルで表示される、はず。
なんか他にもたくさんあったけど、1ヶ月ぶりなので忘れてしまいました。思い出したら追記します。
というか眠くてねむくて。。。
久々にiphoneアプリ制作にトライしていたのですが、最後の最後でエラーが出て3時間くらいハマってしまいました。
iphone developcenter等への手続きをすべて終え、いざiphone実機へビルドしようとしたらこんなエラーがでました。
a valid provisioning profile matching the application’s Identifier ‘あなたのアプリのAppID’ could not be found
Google先生に聞いてみるといろいろな解決策が出てきたのですが、いろいろ試してもうまくいきませんでした。
そして3時間経過。
もう全てをあきらめて水死してやろうかとお風呂を沸かしていると、こんなサイトを発見。 iPhone デバイスでのビルド時にエラー(1) TAIZBOX
最後の頼みで試してみると、なんと無事にビルドされました!感謝ですTAIZBOX様!
理由は、Xcodeの「○○○-Info.plist」の「Bundle identifer」のところに入力するAppIDを自動生成される10桁の英数字を含めたものを入力してしまっていた、というものでした。
ここには自分で設定したAppIDだけを入力するようで、自動生成の10桁の英数字は入力してはいけないらしい。いやー、こんなところに落とし穴が。
私はこれで無事解決しましたが、別の原因で同じエラーが出る場合もあるようです。 そんなときは他のサイトをご覧ください。
http://iphone3gsmaster.blogspot.com/ http://ameblo.jp/micro-garden/entry-10324871784.html
では!
先月会社でipadを買いまして、そのレビューというか、ちょっと触ってみた感想を公開しました。
社長に「ペンキチくん、うちの会社概要のe-pub作っといて」といわれて、簡単に作ったりしたのですが、やっぱりAppleカッコイイ。ステキ。 そんなわけで、PHPとJavaScriptだけじゃなく、やっぱiphoneアプリ作れなきゃダメだよね!と思い制作に乗り切りました。
1、思い立ったが吉日男なので、さっそくmacbook proを購入。
いきなり会社の先輩と新宿ヨドバシに突入。macbookと迷ったのですが、放熱性を考慮してproにしました。 全然熱さが違います。これ、非常に重要。
会社のデスクトップと並べてみたの図。
2、iphoneアプリ制作セミナーに出席
その週末にiphoneアプリ制作勉強会に出かけたのですが、勉強会というよりも「場所貸すからみんなで勝手に作って!」という感じでした。 iphoneアプリ制作どころかmacすら満足に使ったことない私は完全にチンプンカンプンで、あえなく途中退席。あぁ無念。
3、書籍購入
こうなったら自分でやるしかない。と思ってその勉強会の帰りに新宿紀伊国屋に訪問。 勉強会中にオススメの書籍を調べておいたので、その書籍を購入。これです 。良書良書書かれていたので迷いなく購入。ちょっとくらい中見て買えという感じもするが。
4、本を片手に勉強&制作開始
会社でソッコー仕事を終わらせ、本片手に制作。以下、ハマったところを書きます。
●X-codeの使い方がわからん。 X-code、interface builderとかの使い方がサッパリわからん。というか全部英語てw そろそろ日本語化されててもいいじゃんか。
●文字サイズの文字間スペースの広げ方がわからん。 教えてgooで聞いてみたところ、Labelは広げることはできんということ。うーん。。
●iphone developer center(?)への登録とか、いろいろな手続きがチョー大変。 なんで全部英語なんだよ・・・しかも詳細をWebで公開することを規約で禁止してるもんだから、ちゃんとしたドキュメントがあんまりないでやんのww 案の定エラーが出てAppleサポートに連絡しました。のへー。
●Object-Cって。。。 いいもんC勉強するからいいもん!
5、というわけで完成
●全体日数:1週間 ●実作業日数:丸1日
こんなのできました。1日にタバコを吸った本数をカウントするアプリ。着々と死へと進む、みたいな。
クリックすると数が増えて、ドクロマークがこんな感じに。ボタンの色が若干変わって背後に×印のタバコが現れます。
「C」をクリックすると数字がゼロに戻ります。 数字のマージンが気になるところだけれど、ちょっと作り方を間違えて直せなかった。次から気をつけます。
これだけだと「で?」って感じですが、やってること自体は単純なプログラムでも見せ方とコンセプトをちょっと変えることでいろいろ新しい世界が見えてくるのではないかと思います。 まぁ最初のとっかかりなのでこんな感じでしょう。
Object-Cさっぱりわからないまま、プログラム自体は本からまんま取ってきてなんとなくで作ったので、 次回からちゃんとしたものを作るためには習得必須ですね。
6、とりあえず作ってみての感想
制作自体に関しては、Object-Cが分かれば意外とサクサク作れると思いました。Object-Cが出来なくてもオブジェクト指向やフレームワークの概念を理解していれば本片手で結構いけるかと。 ただ、Interface builderが慣れるまでどこに何があるのかサッパリだなと思います。やっぱり日本語版が出てほしい。。。
また、一番面倒だったのはAppleの登録手続きでした。こちらに関しては下記サイトが非常に参考になりました。 http://ameblo.jp/micro-garden/entry-10308925350.html http://report.station.ez-net.jp/registration/apple/iphone_dev.device.asp
とりあえずこんな感じ。その4くらいからオリジナルかな??という感じ。もっと頑張ります。
iPhoneアプリとiPadアプリを10本リリースした後でなんですが、未だにあまりiPhoneプログラミングを理解したとはいいがたい状態の私です。
これではイカン!と思ったので、これから基本的なプログラムをちょいちょい作ることで、 基本的なことからおさらいをしてみようと思います。
その第1弾としては、やはり「Hello! World!」以外にはないでしょう。
ということで作ってみました。
Hello_WorldAppDelegate.h
/*
アプリケーション起動時と終了時に実行されるクラスだよ
*/
// ユーザーインターフェースのフレームワークを読み込み
#import <UIKit/UIKit.h>
// 他の場所にあるクラスを使用するため、クラスとして宣言
@class Hello_WorldViewController;
// Hello_WorldAppDelegateクラスの宣言
@interface Hello_WorldAppDelegate : NSObject <UIApplicationDelegate> {
/*
<UIApplicationDelegate>はプロコトルといて読みこんでいる。
プロコトルとは、メソッドの宣言だけの継承のこと。
つまり、実装は自分でする必要がある。
*/
// インスタンス変数宣言
// インスタンス変数の型がクラスオブジェクト型(紫色)の場合、
// 宣言で変数名のアタマに*をつける。
UIWindow *window;
Hello_WorldViewController *viewController;
int pokemon;
}
// アクセッサー
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet Hello_WorldViewController *viewController;
@end
Hello_WorldAppDelegate.m
// 自分のヘッダーファイルを読み込み
// また、ヘッダーで宣言したクラスのヘッダーファイルも読み込み
#import "Hello_WorldAppDelegate.h"
#import "Hello_WorldViewController.h"
@implementation Hello_WorldAppDelegate
// アクセッサー
@synthesize window;
@synthesize viewController;
#pragma mark -
#pragma mark Application lifecycle
// アプリケーションが起動したら実行
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// Add the view controller's view to the window and display.
// ヘッダーで指定したHello_WorldViewController型のインスタンス変数をサブビューとして指定
[self.window addSubview:viewController.view];
// サブビューを可視化する
[self.window makeKeyAndVisible];
return YES;
}
// アプリケーションがアクティブでなくなる直前に実行 1
- (void)applicationWillResignActive:(UIApplication *)application {
}
// アプリケーションがアクティブでなくなる直前に実行 2
- (void)applicationDidEnterBackground:(UIApplication *)application {
}
// アプリケーションが復帰した直後 1
- (void)applicationWillEnterForeground:(UIApplication *)application {
}
// アプリケーションが復帰した直後 2
- (void)applicationDidBecomeActive:(UIApplication *)application {
}
// なんじゃこりゃ
- (void)applicationWillTerminate:(UIApplication *)application {
}
#pragma mark -
#pragma mark Memory management
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
}
// メモリ解放
- (void)dealloc {
[viewController release];
[window release];
[super dealloc];
}
@end
Hello_WorldViewController.h
// メインのビュークラス
// ユーザーインターフェースのフレームワークを読み込み
#import <UIKit/UIKit.h>
// UIViewControllerクラスを継承したビュークラス
@interface Hello_WorldViewController : UIViewController {
// アウトレットとして使用するインスタンス変数
IBOutlet UILabel *hello;
}
// プロパティ
@property (nonatomic,retain) IBOutlet UILabel *hello;
// アクション
- (IBAction) onHello;
- (IBAction) offHello;
- (IBAction) iyan;
@end
Hello_WorldViewController.m
#import "Hello_WorldViewController.h"
@implementation Hello_WorldViewController;
@synthesize hello;
- (void) onHello {
self.hello.text = @"Hello! World!";
}
- (void) offHello {
self.hello.text = @"";
}
- (void) iyan {
self.hello.text = @"いやんばかん";
}
/*
// ビュー読み込み時に実行
// nibを使わないときはこちらを使用
- (void)loadView {
}
*/
/*
// ビュー読み込み時に実行
// nibを使うときはこちらを使用
- (void)viewDidLoad {
[super viewDidLoad];
}
*/
/*
//横向きアプリや、傾きを固定したりするときに
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/
//メモリーがなんかえらいことになったら実行
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
// ビュー消去時に実行
- (void)viewDidUnload {
}
// メモリ解放
- (void)dealloc {
[super dealloc];
}
@end