iPhone Coding Notes

~我的iPhone程式筆記~

三個Xcode小技巧


要開發iPhone應用程式,第一關要面對的就是mac專用的IDE開發工具:Xcode。就我目前使用的感想,除了沒有支援中文,以及偶爾會發生需要重開才能解決的小bug外,Xcode還算是一個稱職的開發環境。

所謂工欲善其事,必先利其器。對Xcode愈熟悉,在開發iPhone程式時也將愈有效率。以下就來介紹幾個我個人覺得很基本也很重要的小技巧。

 

1.Method自動補完

這是一個簡單實用的小功能。Objective-C是一個物件導向為主的程式語言,而物件離不開的就是一堆的方法或函式呼叫。有時候方法太多,指令太長,不是忘了正確的名稱就是名稱太長不想打字。這時候就可以利用Xcode內建的功能把對應的函式方法找出來,並自動填寫。

舉個例,在Cocos2d裡有個CCJumpTo的Class,但後面接什麼函式方法忘了,這時只要在要鍵入方法的地方按一下ESC鍵(要跟CCJumpTo空一格),Xcode就會跳出視窗讓你選擇。

用上下鍵選完所要的方法後,按下enter,Xcode就會自動幫你補齊,參數的地方也會提示所需填入的種類,還不錯吧!

 

2.分類函式方法列表

在Xcode的程式碼編輯視窗上方有兩個下拉選單,左邊選單是用來選擇現在要編輯的程式碼,右邊的選單則是顯示這個程式碼所擁有的函式。

如果這個程式不大,右邊的選單列是可以用來快速跳至對應的函式。

但是,如果程式很大,裡面的函式有幾十到上百個,要在茫茫函式裡找到你要的函式,那就需要一點功夫了。還好Xcode有個小功能可以幫你把這個列表再進一步的分類。

做個簡單的示範。以上圖來說,這個程式碼裡有五個函式,先在程式碼裡找到+scene函式,然後在它上面加入

#pragma mark -

#pragma mark init method

接著找到-dealloc函式,在上面加入

#pragma mark -

#pragma mark other method

好了以後存檔,再看一次列表就會看到表上多了兩行比較明顯的標記。

新手在看一些範例程式時,常會在程式碼裡看到#pragma的符號,主要的用途就是在這裡。在Xcode中#pragma後面的文字和符號不會被編譯,而是被用來顯示在函式列表用的,所以如果想惡搞的話….

我為什麼要花時間幹這種事...囧

 

3.管理Resources資料夾

最後一個要介紹的,是關於Resources資料夾的檔案管理。這對遊戲開發尤其重要。在一般書籍或網路的教學範例上(包含我寫的範例),如果遇到需要用圖或音效等多媒體檔案時,範例都會說,把檔案拖進Resources資料夾,然後選"Copy items into destination group’s folder"和"Recursively create groups for any added folders"。

如果專案小,多媒體檔案不多,這樣子做是沒什麼關係。但是開發遊戲時,不但圖檔多,音效檔也多,如果這堆檔案都照上面的做法去加到專案裡,在Finder下這堆檔案就會凌亂的被放在專案資料夾下,完全沒有組織,而且檔名相同的還不能重複出現(因為其實他們都在同一資料夾下)。有人會說Xcode裡有group功能可以把檔案分類,

嗯….老實說,這功能只限在Xcode有效。打開Finder到專案資料夾下看,檔案還是一團亂。到底該怎麼做才好?

想想實際在開發時的情形,美工人員會把圖檔分類後放到"Image"資料夾,音效人員會把一堆音效檔放到"Audio"資料夾。當我們拿到這兩個資料夾時,希望讓它照著資料夾結構放到專案裡。最前面的步驟和上述一樣,把整個資料夾拖到Resources資料夾下,但在跳出的詢問視窗,下方的"Recursively create groups for any added folders"要改成"Create Folder References for any added folders",如此一來,整個資料夾就會依照原本的結構階層進到專案資料夾內。(變成藍色的資料夾)

另外,如果想要有更好的檔案管理,在Finder上,應該把圖案、音效、程式碼完全獨立開來。當把圖案資料夾拖到Resources時,在詢問視窗上不要把copy items的欄位打勾。這樣子Xcode就只會把這個放圖案的資料夾當成連結,而不直接複製一份。這樣的好處是,這些有連結的多媒體資料夾平常就跟一般的資料夾一樣,有新的圖案或音效就用Finder往那裡丟。而當開啟Xcode專案的時候,那些新的檔案就會一併被更新。

不過採用上述方法管理resources的時候,要注意檔案路徑已經不同了。過去檔案是放在

[[NSBundle mainBundle] resourcePath]

但現在的路徑要改成

[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@“yourdir”]

才能找到對應的檔案。而過去為了方便而使用的

[UIImage ImageNamed:@“yourimage.png”];

也失效了。因為這個指令只會去找main bundle裡的檔案,子資料夾裡的檔案會找不到。所以要載入圖檔時,請使用

[[UIImage alloc] initWithContentsOfFile : @“yourpath”];

並填入完整的檔案路徑。

另外,不知道是mac os本身的問題還是Xcode的關係,用上述方法,有時新加入的檔案並沒有被Xcode認到。結果就是讀不到新加的檔案或者一直在用舊的圖檔。

遇到這種問題,可以先試著執行"Build"->"Clean All Targets"。然後在專案資料夾下把"build"資料夾刪除。還有問題,可以把Xcode quit掉,再重新啟動專案。如果嫌太麻煩,也可以考慮這裡的作法。原理很簡單,寫一個script,讓Xcode在編譯專案前,先refresh resources資料夾內容。這樣“照理說”新加入的檔案就會被認到了。(要手動也可以,在Xcode左欄找到新加入檔案的對應資料夾,按右鍵選"touch"即可)

以上小技巧,提供給大家參考。

3 Responses to 三個Xcode小技巧

  1. MineS 2010/12/26 at 16:08:45

    十分好的小技巧~支持你繼續為大家提供好的文章!

  2. Hank Wang 2011/03/16 at 17:20:16

    寫得超詳細!
    那個囧實在是太好笑了XD

  3. Spk 2011/04/20 at 17:00:22

    寫的真好,多謝板主的分享~

發表迴響

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

連結到 %s

Follow

Get every new post delivered to your Inbox.