カテゴリー: iPhone関連のプログラムなど

iphoneアプリのビルド時に a valid provisioning profile matching the application’s Identifier みたいなエラーが出た時の解決法

久々に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

では!

iphoneアプリを作るべし!その1

先月会社で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プログラム基本からのおさらい その1「Hello! World!」

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