LadyBugz

最近忙翻了,想要寫的東西積壓了好幾篇,不過首先來老王賣瓜一番-我們不久前,做了一套自產自銷而且自己也在天天服用的 Mac OS X 商業軟體,叫做 LadyBugz

LadyBugz

用最簡單的話來說,這是一套用來方便瀏覽、整理、回應 FogBugz 系統的桌面工具;FogBugz 是一個網頁服務,不過,就像雖然你也可以用瀏覽器連上 Web Mail 收發信件,你還是會想要裝一套 Outlook、ThunerBird 或是像 Mac OS X 內建的 Mail.app 收發信件,Twitter 是一套網頁服務,你還是會想要在 iPhone 上面裝一套 Tweetie(現在叫做 Twitter for iPhone 了)或是 Twitterrific,而 LadyBugz 呢,就是一套讓 FogBugz 更好用的工具。

那-FogBugz 是什麼?大概就來個,嗯,說故事行銷。

Continue reading

如果你是從 10.4 直接升級到 10.6,然後遇到中文輸入法問題

如果您手上的麥金塔電腦是在大概三年多之前購買的,當時裡頭所安裝的作業系統是 Mac OS X 10.4 Tiger,你跳過了 10.5,而在最近幾個月裡頭,透過升級安裝、而不是整台機器重灌,將系統升級到 10.6 Snow Leopard,那麼,您可能就會遇到這樣的問題-原本在 Tiger 裡頭的第三方中文輸入法(如 OpenVanilla、Yahoo! 奇摩輸入法、嘸蝦米…)跑得好好的,到了 Snow Leopard 上,卻無法打字。

蘋果在 10.4 到 10.5 之間,輸入法的架構設計有一次相當大的改變,所以許多輸入法必須分別推出供 10.4 與 10.5 使用的兩種版本。一些細節這邊先略過不提,簡單來說,就是,在 10.4 上,必須要使用 10.4 架構的輸入法,在 10.5 上,基本上建議使用 10.5 架構的版本,10.4 架構的版本只能算是相容,到了 10.6,繼續使用 10.4 版本,就會有問題了-最大的問題是,10.4 架構的輸入法只能夠在 32 位元應用程式中使用,但是 10.6 作業系統都所內建的都是 64 位元應用程式。

所以,在升級到 10.6 之後,便需要刪除原來的 10.4 架構輸入法。10.4 輸入法程式位在「資源庫」的「Components」目錄下,您也可以透過一個簡單的輸入法移除工具刪除。之後,再安裝 10.5 及之後架構的版本。

嘸蝦米輸入法的安裝程式裡頭其實同時包進了 10.4 與 10.5 的安裝套件,在開始安裝的時候,會判斷目前的作業系統,安裝適合的版本,所以,直接重新放進安裝光碟,再裝一次,就會是正確版本了。Yahoo! 奇摩輸入法方面,則是直接從網站上就可以看到有兩種 Mac OS X 版本可以下載,請下載 10.5 的那個版本。

至於 OpenVanilla,基本上一直沒有時間把 0.9 做完(而且往往做到一半又有想要整個刪掉重寫的衝動…),如果是想要繼續使用 0.8 系列的話,可以試試看去年九月放上去的 0.8.1 (下載連結) 這個版本。

Shit happens, always.

國外一些網路媒體如 Tech Crunch、還有 John Gruber 的網站等,前兩天報導,Joe Hewitt (Facebook 的 iPhone 應用程式的作者)說,他個人打算中止 Facebook 的 iPhone 應用程式開發,轉往進行其他的 Facebook 的計畫,原因是他對於蘋果的 App Store 上架審核機制非常不滿。

剛看到這則新聞的時候,還搞不清楚是怎麼一回事,第一個想法是-別人對上架審核不滿也就罷了,Facebook 有什麼好不滿的?其他人將軟體送進去之後快則到七天之後才能夠等到審核結果,就 App Store 開張以來,唯一看到能夠一個星期推出兩個新版本的軟體,也就只有一個,而這個軟體還不是別的,就是 Facebook。

昨天上班一打開電腦,才終於搞清楚發生在 Joe Hewitt 身上是什麼狀況。打開收信程式,看到蘋果送來的退件信件,說,我們寫的程式不能夠在 App Store 上架,原因是程式裡頭呼叫了 iPhone 的 private API;而我從來就不記得我什麼時候用到過這些東西,查了一下,呼叫 private API 的,不是自己的程式,而是因為程式用到了一個 external library,這個 library 呼叫了,而這個 library 就是 Joe Hewitt 所撰寫的 Three20Continue reading

ObjC 的記憶體管理之今晚你想吃哪一道

好像很多人在接觸 Objective C 開發的時候,在 alloc、retain、release 花了很多力氣,三不五時就看到有人在問這方面的問題。然後有時候看到網路上面的程式碼教學或分享,稍微一看,裡頭在記憶體管理方面的問題也不少,有的是忘記 release 物件,有時你會看到,[NSWorkspace sharedWorkspace] 都有人 release。

說實在,在不是 Garbage collection 的模式下寫 ObjC,大概就是像開手排車一樣,開始使用一個物件的時候就是推到一檔,每多使用一次、多 retain 一次物件,就像是打到了二檔、三檔,最後不再用到這個物件的時候,就是打回空檔。

所以,要比較正確的管理記憶體使用,也會跟開打檔車一樣,需要的不僅只是了解,而是要養成習慣,成為寫程式的時候身體反應的一部分,既然是要養成習慣,就恐怕不是在網路上或是哪裡抓個人問就可以解決。而這個習慣不外乎幾點-大概只有成員變數需要 retain、成員變數在 dealloc 的時候要記得 release,在寫 setter 的時候把原來的成員變數 release 掉並且 retain 新傳來的變數,一般在 method 之間傳遞的變數加上 autorelease,至於 singleton 的物件,就別 release 了。

個人經驗是,大概寫了幾千行 ObjC 之後,記憶體管理的習慣就會豁然清明開朗,先別苦惱,多寫就對了。而不管怎樣,有時候還是會弄錯,如果你在用 Mac OS X 10.6 上面的 Xcode,Xcode 有一個叫做「Build and Analysis」的選項,會在編譯的時候,幫你把忘記 release 的物件找出來。

如果你花了一定時間,還是對於 ObjC 的記憶體管理苦手的話,呃,那不如這樣-都不要 release 物件。

Continue reading

Use delegate methods, Luke.

有時候看一些討論區裡頭的內容,實在讓人不禁眉頭一皺。比方說,你看到有人問了這樣一個問題-

如果我有一個NSArray存放不固定數量的CGPoin,這些Point在drawRect中都被用來當作是draw的data,但其實這些點也要被某個我的Controller class來增減或改變。

請問這些data object(NSArray contain CGPoint),是放在View的class底下比較好, 還是放Controller的class底下,比較好ㄋ?

然後馬上出現的回應是:

其實你高興就好, MVC 不是強制的, 也有很多灰色地帶
是我的話這類東西通常放在 view, 不過那是我

是啦,雖然不是說不照某種方法設計,程式就會動不了,但是在直接跳到「MVC不是強制的」這種意見之前,是不是忽略了幾個討論-如果是用 MVC 的設計,應該要怎麼做,這種需求難道用 MVC 的方法沒有辦法解決嗎?蘋果自己是怎麼處理這樣的狀況?

另外一個很大的問題是-你是使用者的話,你會敢用抱持著「高興就好」的開發者寫出來的東西嗎?…

Continue reading

Cocoa/iPhone App 的 Debug

什麼程式都會有問題,而在寫 Cocoa/iPhone 程式的時候要 debug,最好還是先看一下蘋果的Xcode Debugging Guide這篇文件,這裡就只就一些最常見問題簡單寫一寫。

在開發 Cocoa/iPhone 應用程式的時候,如果你的程式 crash,QA Team 的成員很高興地把問題列成p1 bug 的時候,就個人遇到的狀況來說,有高達八成的機率(台灣電視記者的口氣),Xcode 會告訴你是以下三種問題-Out of Bound、Bad Access、Unsupported Selector。說起來都是很基本的錯誤,但是基本的錯誤並不代表是不會犯、或不常犯的錯誤,而且機率有高達八成之多。

Cocoa 應用程式有的時候就只會告訴你程式有 exception,接下來的 code 頂多就是不跑,至於 iPhone 上面就是直接炸掉給你看。而在這八成之外的另外兩成,則是各種稀奇古怪的問題了。

Continue reading