2009-05-31

軟體上架後的記錄檔觀察

【台灣樂透彩券】軟體上架之後,可以到 IDP 的 iTunes Connect 看到每天、每周的軟體下載報表。


上架第一天是 5/29 23:40,所以下載的人數不多,只有 21 位。

我就先檢查一下 Server 來更新檔號的狀況,也到 iphonetw 發表看法。
還滿驚訝的是,不重複(扣除我自己)的已經有 142 個 iPhone/iPod touch 使用率。


第二天 5/30 下午,我在噗浪iphonetwMobile01 發布,受到大家的歡迎,馬上暴增!
台灣有將近600位,依序美國、日本、香港、加拿大、義大利、紐西蘭、阿根廷、德國都有,總共705位。


短短一天時間,就進入 Top 25 了!

看來題材真的很重要,再來要趕快把完整版寫好,也要找美編幫忙美化,創意都要在完整版內發揮啦!


*** 第三天 5/31 共 1284 位。
*** 接下來... 奇蹟持續中...

.

2009-05-30

【衛星雲圖】雛形搶先看!

幾年前,我在 Mobile01 發表過衛星雲圖的 Widget

下午想說,讓 iPhone 也可以隨時知道雲圖吧!

於是把【衛星雲圖】的雛形先做出來:




晚一點再想想功能,盡量完整一點,這次來試看看,做個收費的版本。

.

【台灣樂透彩券對獎】在 AppStore 商店上架了

今天中午上去看到,終於上架了,還好沒有被退件。
可以從這裡下載安裝

這個版本是免費的

收費的版本大概是這樣:
功能比較多,還要等台彩公司的圖標書面授權。

另外,我也在 Mobile 01 發表 [APP]台灣樂透彩券 還被列為[精選文章],有興趣可以一併去看看。

看來得加快腳步,把完整版寫好。
後面還要寫一套【衛星雲圖】發行。
還有一個古老的玩具,來寫成 Game 的軟體,一定可以喚起很多人童年的回憶!

.

2009-05-27

Your Contracts In Effect



在 AppStore 的合約過了。
這樣才表示可以把免費軟體與收費軟體上架。

這一等,等很久,有機會申請的人,在這個階段要有耐心。

不過,我昨天有從 iPhone Dev Center \ iPhone Developer Program \ iTunes Connect 的 Contact Us 反應,不知道是不是因為這個原因?

2009-05-25

好好學 Objective-C 2.0 吧!

當你越看越多,發現要好好認識一下 Objective-C,需要把這幾本手冊好好讀一讀:

The Objective-C 2.0 Programming Language

Objective-C 2.0 Runtime Programming Guide

Objective-C 2.0 Runtime Reference


*2010/11/06:
如果對物件導向不熟的,可以參考一下這篇


.

Table View Programming Guide for iPhone OS

這份手冊 Table View Programming Guide for iPhone OS 是接著 View Controller Programming Guide for iPhone OS 之後要仔細讀的!

除此之外,在 Table 裡面的資料取得,最好懂一些 Key-Value Coding,什麼是 Key-Value Coding 呢?

那也需要讀一下 Key-Value Coding Programming Guide


.

2009-05-23

產生含有 Navigation controller 的 Tab bar controller

在 Xcode 新增專案時,會有六個常用的範本給我們加入,其中擺在第一個的 Navigation-based Application 大概是最常用的,像 iPhone 內建的程式【聯絡資訊】。
而如果要產生像內建程式【音樂】的,一開始要選 【Tab Bar Application】範本。
在我剛寫第一個 iPhone 程式時,我挑選的是 Navigation-based Application,但是當我要分頁的時候,發現有點困難,再回去看【View Controller Programming Guide for iPhone OS】的 Combining Tab Bar and Navigation Controllers 章節才發現原來 Navigation View 是要在 Tab Bar 裡面。
還好,透過 Interface Builder 的功能,可以稍作調整,不用重新來過。

我在這個範例介紹的,不是用 Xcode 內建的 Tab Bar Application 範本開始,而是直接從一個乾淨的 Window-based Application 加入 Tab Bar,再加入 Navigation。

結果會是這樣:
最後我還會進階把第二頁換成 TableView


準備好了嗎?那就開始吧!

首先,執行 Xcode 選 New Project\ Window-based Application
(我用的 Xcode 是 Version 3.1.3)

專案名稱 Tabs

Xcode 產生需要的檔案:
不過我通常會把 Classes 內的這幾個 Group 展開
4.點選 Resources 的 MainWindow.xib,開啓 Interbase Builder,這時候的主畫面只有這幾個
按下鍵盤 +SHIFT+L 開啓 Library 把 "Tab Bar Controller" 拖曳進來 MainWindow.xib 的視窗內

MainWindow.xib 的視窗會看到 Tab Bar Controller,把它展開看看
這裡有一個 UITabBarController + 一個 UITabBar + 兩個 UIViewController,等一下 Selected View (Item 1) 的要加入一般的 View Controller,第二個 View Controller (Item 2) 的要加入 Navigation Controller

畫面如下:
看到 Item 1 項目現在是選取狀態,所以有點藍黑色,你可以先把 Item 1 與 Item 2 各點兩下,分別改成【第一頁】與【第二頁】

記得在 MainWindow.xib 先存檔 +S


接著要做幾個連結的動作,先把 Tab Bar Controller 加入 Delegate 的 Outlet:
1.點選 MainWindow.xib 內的 Tabs App Delegate,按下 +SHIFT+I 開啓 Inspecter
2.在 Class Outlet 內按底下的 "+" 號,加入 Outlet: rootController,Type: UITabBarController
*註:這裡在新版的 Xcode 有些不同,我在最後補充(20101024)

3.接著在 MainWindow.xib 的視窗內,點選 Tabs App Delegate,然後按住 Control 不放,接著滑鼠按左鍵移動一下,看到藍色拖曳線就可以把 Control 放看,滑鼠左鍵按著不要放,把拖曳線移到 Tab Bar Controller 之後放開,會出現 Outlets\rootController 的視窗,點選 rootController。

你可以按下 +2 看到 Tabs App Delegate 的 Outlets 內,有一個 rootController 連到 Tab Bar Controller

把 MainWindow.xib 存檔 +S 後,回到 Xcode 開啓 TabsAppDelegate.h 的檔案,把剛剛的 Tab Bar Controller(rootController) Outlet 定義進來

#import _UIKit/UIKit.h_


@interface TabsAppDelegate : NSObject {

UIWindow *window;

IBOutlet UITabBarController *rootController;

}


@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet UITabBarController *rootController;

@end

接下來要建立兩個 UIViewController 分別給這兩個標籤項目 Tab Item,一個是基本的 UIViewController,另一個是 UINavigationController

在 Xcode 的 Classes 上面按右鍵選 Add\New File,選 Cocoa Touch Class 的 UIViewController subclass,把 Option 勾選 With XIB for user interface,一併把畫面產生出來
名稱: FirstViewController.m

在 Classes 內會看到 FirstViewController 的 .h .m .xib 三個檔案

我通常會把 .xib 放在 Resources 內

把 FirstViewController.xib 打開編輯,拖曳一個 Lable 進來,內容為【第一頁】
然後存檔,開啓 MainWindow.xib,我們要讓第一個標籤與 FirstViewController 連結。
1.點選 Tab Bar Controller 的第一個標籤,按 +4 把 Class 指定 FirstViewController
2.按 +1 把 NIB Name 指定 FirstViewController

然後就可以馬上看到 View 畫面變成這樣:

記得存檔 +S,再回到 Xcode 打開 TabsAppDelegate.m 修改如下:

#import "TabsAppDelegate.h"

@implementation TabsAppDelegate


@synthesize window;

@synthesize rootController;


- (void)applicationDidFinishLaunching:(UIApplication *)application {


// Override point for customization after application launch

[window addSubview:rootController.view];

[window makeKeyAndVisible];

}


- (void)dealloc {

[window release];

[rootController release];

[super dealloc];

}


@end


執行看看,點選標籤1與標籤2,是不是正常切換:

接下來就是重點了,要把 Navigation 設定在標籤2

回到 Xcode 加入一個 UIViewController subclass 取名 MyNavigationController,跟之前 FirstViewController 一樣,不過要把 MyNavigationController.h 的 @interface 繼承自 UIViewController 改成 UINavigationController

#import _UIKit/UIKit.h_


@interface MyNavigationController : UINavigationController {


}


@end

接著開啓 TabsAppDelegate.h 修改如下:

#import _UIKit/UIKit.h_

#import "MyNavigationController.h"


@interface TabsAppDelegate : NSObject {

UIWindow *window;

IBOutlet UITabBarController *rootController;

MyNavigationController *navigationController;

}


@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet UITabBarController *rootController;

@property (nonatomic, retain) MyNavigationController *navigationController;


@end


記得回到 TabsAppDelegate.m 加上

@synthesize navigationController;

還有,Navigation Controller 也要有一個 View Controller,所以繼續加上一個 UIViewController 取名 SecondViewController 的 UIViewController subclass,並建立 SecondViewController.xib

開啓 SecondViewController.xib 修改 View:
存檔 +S 後,開啓 MainWindow.xib

與 FirstViewController 做法一樣,點選標籤2,把 Class 設定 MyNavigationController

接著點選 MainWindow.xib 的 Tab Bar Controller
按 +1 把 Title "第二頁" 的 Class 改成 "Navigation Controller"

再來把 MainWindow.xib 的 Tab Bar Controller 展開,點選第二頁的 View Controller

按 +4 把 Class 設為 SecondViewController


按 +1 把 NIB Name 設為 SecondViewController


接著就可以看到 View 的畫面變成這樣
執行看看吧!
第二頁是 Navigation 的 ViewController


如果底下的 Toolbar 不要顯示,可以在 MainWindow.xib 把 Tab Bar Controller 展開,點選 Navigation Controller (第二頁)
按 +1 把 Shows Toolbar 勾選取消即可


很簡單吧!多做幾次就熟悉了,你也可以任意加入其他 UIViewController

==============================

再進階把 SecondViewController 的 UIViewController 換成 UITableViewController:

回到 Xcode 在 Classes 按右鍵 Add \ New File,選 Objective-C Object,Subclass of 選 UITableViewController,取名 MyTableViewController

開啓 MyTableViewController.h 修改如下:

#import


@interface MyTableViewController : UITableViewController {

NSMutableArray *tableData;

}


@property (nonatomic, retain) NSMutableArray *tableData;


@end

開啓 MyTableViewController.m 加上:

@synthesize tableData;

- (void)viewDidLoad {

//[super viewDidLoad];

tableData = [[NSMutableArray alloc] initWithObjects:@"", @"", @"", nil];

}


在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

// Set up the cell... 下面加上

cell.text = [tableData objectAtIndex:indexPath.row];



存檔後回到 IB 新增一個 ThirdView.xib,從 Library 拖曳一個 UITableView 放到 View 的上面排好,點選 File's Owner 在 Class Outlets 加上 Outlet: tableView,Type: UITableView

然後把關係建立如下:

開啓 MainWindow.xib 把 Tab Bar Controller 展開,點選 Second View Controller (Item)
把 Class 換成 MyTableViewController

MainWindow.xib 也跟著變了


再把 NIB Name 改成 ThirdView

執行看看,第二頁就變成有 TableView Controller 的畫面:

不錯吧!如果可以跟到這裡,那真的要好好恭喜你!

如果你無法照著我的步驟做到這裡,那真的要好好讀一讀我上一篇介紹的

基本上要讀這本 Interface Builder User Guide

*2010/10/24補充:
在新版 Xcode 的 IB,有關 Class 加入 Outlet 部份有些不同,移到了 Library 內,我在這裡補充:

點選要加入 Outlet 的 Class
在 Inspecter 的第四頁,按下這個箭頭,會開啓 Library

點選該 Class 的 Inheritance 改成 Outlets

這樣就可以繼續了

.