まず動かしてみてから考える(4)

2010. 01. 27
お世話になった『目指せ!iPhoneアプリ開発エキスパート』も『第10回 App Storeでアプリを公開』にて終了です。

今回は前半のアプリケーションとして完成させるとこまでにして、後半のアプリケーション登録手続きは触れません。
『試しに登録してみる』というわけにもいきませんので。

●アイコンを作る

前述の通り、App Store用の画像は今回作成しませんので、メニュー用のアイコンに関してのみとします。

iPhoneメニュー用アイコンのフォーマットは、57x57ピクセル(PNG形式)です。

角を丸めたり、光沢のエフェクトを入れたりするのはiPhone側がするので、普通の正方形の画像で構いません。

アイコンも含め、iPhone内の画像は全てPNG形式になっているそうで、また最適化の仕方によって表示(展開)速度が変わるというので、後で調べておこうと思います。

さて、アイコン用の画像制作ですが、Mac用フリー画像処理ソフトの定番GIMPを使いました。
(元々ブログ制作用に探して見つけたのですが)
ちょっとI/Fにクセがありますが、有料ソフトに引けを取らないくらい機能が充実してます。

050

ブログ用のアイコン(70x70ピクセル)があったので、彩度と輝度を上げてリサイズして組み込んでみました。
地味ですが、操作が分かればいいので良しとします。

これで一通りの流れが大体掴めましたが、上辺をなぞっただけで中身を理解しているわけではないので、色々試しながらまとめていく予定です。

まず動かしてみてから考える(3)

2010. 01. 26
さて、紆余曲折の末iPhone Developer Programの登録が済みましたが、実機で動かすにはまだいくつかハードルがあります。

皆さんご存知の通り、iPhoneは常時インターネットに接続可能で、個人情報を多く抱えているデバイスです。

従ってユーザが安心して使えるよう、アプリケーション開発者にはセキュリティ面でかなり足枷を付けられています。

開発者としてメールアドレス、氏名、住所、電話番号を登録するだけでなく、デバイスIDを申請して開発用証明書を受け、制作したアプリケーションに署名をしなければなりません。
また、アプリの配布もApple Storeに限定されており、自由に配布できません。

これはウィルスなど悪意あるアプリが流布されても開発者が特定できるようにし、作らせないような抑止力の意味合いもあります。

結構な手間がかかり、よく分からない単語の目白押しですが、これをやらないと実機でのテストもアプリの配布もできませんのでめげずにやりましょう。

例によって『目指せ!iPhoneアプリ開発エキスパート』の『第9回 デバイスでアプリを動かす』 に沿って話を進めます。

●アプリを動かす準備

まず証明書署名要求を作ります。

キーチェーンアクセスで証明書署名要求のファイルを作り、iPhone Developer ProgramのiPhone Developer Program Portalに入ります。

044

(記事と)I/Fが若干変わったようです。
キーチェーンで作った証明書署名要求を提出し、開発証明書とWWDR intermediate certificateoをダウンロード、キーチェーンに登録します。

045

●App IDの作成

デバイスを登録し、App IDの作成に入ります。

046

記事とレイアウトが異なりまして、まず画面右上の『New App ID』ボタンをクリックします。

047

記事中の『App ID Name』は『Description』、『App ID』は『Bundle Identifier(App ID Suffix)』になっていますが、意味するところは同じです。

Descriptionは本来、商品概要の項目なのですが、しばらくはテスト用なので名前でもいいでしょう。

中央の『Bundle Seed ID(App ID Prefix)』は、『Generate New』しか選択できませんのでそのままに。

Bundle Identifierは調べてみると人によって『*』『逆ドメイン』『逆ドメイン.*』と違います(『逆ドメイン.*』だとエラーになるという人もいるそうです)。

本来はアプリケーションを個別認識させるためもので、バンドル識別子にはアプリケーション名を含まなければならないので、公開アプリの際には注意してください。

今回はテスト用なので『*』だけにし、右下の『Submit』を押して提出します。

048

●プロビジョニングのインストールと設定

049

後はダウンロードしたプロビジョニング・ファイルをインストールし、先日作ったBargainSaleの設定をデバイスに変更してビルドすると、実機で動かすことができます。

手順だけを追って、そのまま手続きすれば一応動かすことはできますが、App IDのバンドル識別子など、中身や意味を理解していないと公開時に困ることになるので、それまでにきちんと調べておく必要があります。

それとエミュレータと実機では、やはり操作に対する印象が異なります。
BargainSaleの場合、スライダを操作する際に、割引後の価格が手の下に表示されて見難いことも判明しました。
例えテストであっても、I/Fの確認には実機で試さないとダメですね。
 

まず動かしてみてから考える(2)

2010. 01. 22
前回に引き続き『目指せ!iPhoneアプリ開発エキスパート』を実際にやってみた編です。

『第5回 アクションとObjective-C』までは、読み進めながらついていけると思いますが、第6回と第7回は機能の紹介だけで実作業については記事本文であまり触れられていません。

第6回の最後の方にソースコードを公開している旨が書かれていますので、ソースを解読して試してという話だと思いますが、それまで懇切丁寧な説明だっただけに、突然ハシゴを外されたような感じで挫折してしまいそうです。

ただプログラミングの勉強の場合、サンプルコードの解読は常套手段ですので、それができないと話にならないと言われるとそれまでだったりもします。

とはいえ、端折り過ぎな部分もあるので、ここで独自に穴埋めをしてみたいと思います。

ただし、私も初心者ですので以下の説明が正しいか自信がありませんし、実行した結果、何らかの損害を被っても保証いたしかねますので、ご留意の上読み進めてくださいませ。

ちなみにBargainSaleのプロジェクトは、ターミナルで

svn checkout http://bargainsale.googlecode.com/svn/trunk/ bargainsale

と入力するとダウンロードできます。



第8回 アプリの完成を目指して

●バーゲン教師を作る

前回まで試していたBargainSaleのプロジェクトはいったん終了してフォルダごと捨てて、新規にBargainSaleプロジェクトを起こします。
(Xcodeで『新規プロジェクト』→『View-based Application』→『BargainSale』と入力)

016
 
●背景色の変更

『BargainSaleViewController.xib』を開いてInterFace Builderを立ち上げます。

インスペクタパネル中央の『Background』をクリックするとパレットが出てきますので、これで好きな色に背景を変えます。

017

●パーツの配置

LibraryパネルからViewパネルへのドラッグ&ドロップで、『Text Field』『Label』『Segmented Control』『Slider』『Round Rect Button』を配置していきます。

フォントのサイズを変更したりボールドにするにはFontメニューから、フォントの色はインスペクタパネル『Label』欄の『Color』をクリックしてパレットで変更できます。

割引後の価格や合計額の表示で、Labelを右寄せにするには、インスペクタパネル『Label』欄の『Layout』で変更します。

018

機能や表示に影響しない程度であれば、厳密に合わせなくても大体のレイアウトで構わないと思います。

ただし、Text Field入力時に出てくるNumber Padを閉じるActionは、Segmented ControlとSliderに関連付けしますので、Sliderは画面中央より上に配置する必要があります。

019

パーツ配置後、Text FieldとSliderにインスペクタで値を設定します。

(1)Text Field   Keyboardを『Number Pad』に
(4)Slider     ValueのMinimumを『0.05』、Maximumを『0.95』に

●アウトレットとアクションの作成

Interface Builderのファイルウィンドウの『Files Owner』を選択し、Libraryパネルで『Classes』を選択、すぐ下のリストから『BargainSaleViewController』を選択し、下方の『Outlets』と『Actions』に以下のものを追加します。

アウトレット)
priceOriginal    (1)Text Field
discountButton   (2)Segmented Control
discountPercent   (3)Lavel
discountSlider    (4)Slider
priceNew      (5)Lavel
cartPrice      (7)Lavel

アクション)
buttonValueChanged:   (2)Segmented Control        Value Changed
sliderValueChanged:   (4)Slider               Value Changed
escapeButtonPush:    (2)Segmented Control (4)Slider   Value Changed
pushAddCart:       (6)Round Rect Button        Touch Down
pushClearCart:      (8)Round Rect Button         Touch Down

020

設定が終わったら『File's Owner』選択状態でFileメニューのWrite Class Filesで書き出し、ファイルもセーブしておきます。

●アクションの実装

『pushAddCart』アクションですが『priceNewとcartPriceを足してcartPriceに戻す』部分が抜けています。
公開ソースにはきちんと書かれていたので、修正します。

- (IBAction)pushAddCart:(id)sender {

int org = [[cartPrice text] intValue];

int add = [[priceNew text] intValue];

[cartPrice setText:[NSString stringWithFormat:@"%d", org + add]];

}

また、『pushClearCart』アクションで確認ダイアログを出すので、第7回のデリゲートの設定を参考に、BargainSaleViewController.hの@interfaceから始まる行を修正します。

@interface BargainSaleViewController : UIViewController <UIActionSheetDelegate> {

これでビルドしてもエラーが出ず、一通り動くはずです。


ただ一つ気になったのは・・・

021


Sliderで60%、80%、85%を選択した際の端数処理が上手くできていないんです。
これはダウンロードしたサンプルコードでも同様ですので、今回は仕方ないとします。


まず動かしてみてから考える(1)

2010. 01. 21
本来であれば、次の手順として『iPhone Developer Programへの登録』となります。

Developer Programの登録手続きには多少時間がかかるとか、iPhone App唯一の配布元であるApp Storeへ申請ができないとか、何よりも実機でのテストができないという致命的な問題もあるからです。

しかし他と比べて安いとはいえ、Developer Programの登録料はスタンダードでも¥10,800もしますし、本格的に取り組むとなれば参考書等にも投資する必要も出てくるかと思います。

ここでは経済的に負担がかからないとこから始め、本格的に取り組む段になってから登録してみようと思います。

試しに『iphone 開発』で検索してみますと1300万件程ヒットしますが、検索トップに出て来る技術評論社の皮さんによる連載『目指せ!iPhoneアプリ開発エキスパート』という記事が初心者にも分かり易かったので紹介させていただきます。

記事中で筆者の皮さんも仰っていますが、『まずは自分で作ったアプリが動く楽しさ』を最初に知らないと途中で挫けてしまいがちですので、良い入門記事だと思います。

ただ、記事が2008年11月~2009年3月のもので、最新のiPhone SDKで試そうとすると戸惑う部分もありますので、私が実際にやってみた際の補足を書いていこうと思います。

第2回 iPhone SDKの入手と設定

●アプリのビルドと実行

『ビルドして進行』ボタンの表記が『ビルドと実行』に変わっています(動作は同じ)。

009

第3回 アプリ開発の第一歩

●Interface Builder

コメントでも指摘されていますが、『XIBファイルをダブルクリックしてInterface Builderを起動』の際、『MainWindow.xib』ではなく『BargainSaleViewController.xib』を開いてください。
でないと『パーツが1個しか置けない状態』になり、先に進めなくなります(経験者談)。

瑣末なところでは、Interface BuilderのI/Fの初期状態が掲載されているものと異なります。
 
012

上部の階層構造を示すウィンドウがプルダウンメニューになっています。
(プルダウンメニューとアイコンウィンドウの間にある『・』を下にドラッグすると階層表示になります)

アイコンウィンドウの表示は、ウィンドウ内で右クリックし、『View Icons And Descriptions』を選択すれば掲載図と同じになります。

●テキストフィールド

インスペクタパネルも(操作に迷うほどではありませんが)僅かにI/Fが変わっています。

013

●ビルドと実行

解説ではInterface Builderでパーツ配置後にそのままXcodeで『ビルドと実行』すると、保存するか訊ねられるとありますが、Interface Builderで何か手を加えたら、Interface BuilderのFileメニューで保存してから、Xcodeでビルドしないと、Interface Builderでの変更が反映されませんので注意してください。

第4回 初めてのプログラミング

●アウトレットの作成

これもコメントで指摘されていますが、Outlet作成メニューがインスペクタ・ウィンドウからLibraryウィンドウに変更されています。

Libraryウィンドウ上部の『Classes』ボタンを押すと、下方に『Outlet』ボタンが出てきます。

014

OutletやActionを追加する際、Libraryウィンドウ中央のリストで『BargainSaleViewController』を選択した状態で追加しないと変なことになるので注意が必要です。

●アクションの作成

アクションも同様に、Libraryウィンドウの『Classes』タブ下方、『Outlet』ボタンの右側に『Actions』ボタンがあります。

015






Bose SoundLink around-ear wireless headphones II
Calendar
06 | 2017/07 | 08
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 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 - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Bose SoundLink around-ear wireless headphones II
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR