2013-10-31

一套 App 幫你快速建立 Icons 的軟體 IconFly

我一直在找一套可以幫我快速產生 Icon 的 App,剛好在 Mac OS 的 App Store 看到:
https://itunes.apple.com/tw/app/iconfly/id556381974?l=zh&mt=12


它可以很快幫我們產生 Mac App Icon、iOS App Icon,甚至連 Web 的 Icon 都可以,你不用再查表問格式、檔名... 

只要將 1024x1024 的檔案準備好就可以。



除此之外,還可以幫我們的 Folder 檔案夾的 Icon 置換成自己設計的 Icon

ps.感謝魏巍書本封面借我說明。

.

2013-09-11

簡碼到用時方恨少

需要時可以查閱。


在這裡,看到了吧!


編輯器輸入點移到關鍵字後面,按下 ESC 按鍵,就可以看到。

.



2013-09-08

電腦儲存空間怎麼消失那麼快?

MacBook Pro 或 MacBook Air 使用 SSD 的儲存硬碟,大多數的人會覺得,怎麼空間那麼快就不夠使用?到底哪些檔案佔用硬碟儲存空間?

我從 Slackware Linux 時也曾有過這樣的問題,發現 Unix 指令檢查很方便,於是到了 Mac OS X 也就一直這樣查:

-m 是以 mega bytes 大小列示
然後再 google 查看看哪些 path 是什麼用途、可不可以刪除... 可是這樣也滿費時的。

剛好看到 App Store 的「Editors' Choice」推薦的 DaisyDisk,於是就買來用看看。


還真的不錯,我可以很快地查閱哪些路徑檔案佔用我的硬碟儲存空間。

你可以由內而外,從圖形化的比例大小檢查





想知道實際的路徑在哪裡,可以開啟功能表從 Show in Finder 開啟


如果你也有這樣的需要,可以買來使用,很方便!
.

2013-06-20

iTunes Connect 無法登入?

在 Facebook 看到有人提問 iTunes Connect 無法登入的問題,以為是 iTunes Connect 故障。

這個界面那麼重要,關係你的 App 上架、帳務、人員管理的後台,怎麼能夠故障呢?

iTunes Connect 無法登入的畫面

我自己也遇過幾次,原因是 Cookie 的關係,通常 Apple 會教你「重置 Safari...」再將 Cookie 清除就可以了。

選擇「重置 Safari...」

舊版的 Safari 在功能表看不到 Cookie,可以從「偏好設定」的「隱私」找到。

.

2013-06-05

UIColor 存放到 NSDictionary/NSMutableDictionary 內

之前有篇提到「UIImage 存放到 NSArray/NSMutableArray 內」讀過之後,是不是了解到 imageNamed:imagePath 並不是直接將 imagePath 路徑內的圖片載入 Array 內了?

這次來看看 UIColor。

如果你這樣用:

NSDictionary *dict0 = [[NSDictionary allocinitWithObjectsAndKeys:
                           @"紅色"@"CColor",
                           [UIColor redColor], @"EColor",
                           @"YES"@"Fill",
                           nil];

Xcode 會跟你這樣說:
-[UICachedDeviceRGBColor bytes]: unrecognized selector sent to instance 0xa9671e0
ColorInDictionary[7955:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UICachedDeviceRGBColor bytes]: unrecognized selector sent to instance 0xa9671e0'
原因是 NSDictionary 內容不允許你直接存入 [UIColor redColor] 的關係。


於是你要將 [UIColor redColor] 包裝起來,改用 [NSKeyedArchiver archivedDataWithRootObject:[UIColor redColor]]

像這樣:

NSDictionary *dict0 = [[NSDictionary allocinitWithObjectsAndKeys:
                           @"紅色"@"CColor",
                           [NSKeyedArchiver archivedDataWithRootObject:[UIColor redColor]], @"EColor",
                           @"YES"@"Fill",
                           nil];

取用時再拆開,還原成 UIColor 即可

UIColor *colorNow = [NSKeyedUnarchiver unarchiveObjectWithData:[dict0 objectForKey:@"EColor"]];


.

如何統計你的工作效能

你花費了多少時間在你的工作上?

每天八個小時辛勤地工作,但是不見得是整天做同一件事,那麼你要如何統計出你的專案到底在你的工時裡佔用的時間與成本?

我想大家都一樣被一般雜務佔了大部份時間(單位 hh:mm)
你看看,雜務的工作是不是消耗了你很多的成本?

你的工作效能是不是可以從這裡抓出問題來了?


記錄工作效能有個好處,如何精準報價。

很多剛開始接專案的朋友問我,要如何向客戶報價?

其實你要評估你自己的能力,而你的能力不可以信口開河,你先給自己一段時間統計分析,才會對自己有自信,面對客戶報價時,如果沒有自信胡亂報價,客戶一眼就看得出來!

我自己在上班族的時候,不用老闆規定就養成自己記錄工作的習慣,幾年下來就可以很快評估自己需要的工時與成本,透過工具調整自己的工時成本。

對於獨立開發商、開發者而言,如果你看到統計表之後,你會更加珍惜你的時間。


工具呢?在 Windows 時我習慣用 MS Project,但是 iPhone App 盛行之後,有很多 App 可以讓你選擇,我最早選了 Billings 這套,因為它可以與電腦桌面同步。


這是一套很好用的工作管理軟體:Billings Pro。


它有電腦版也有手機版本、平板版本

產生客戶對帳單

應收帳款管理與追蹤

幫你分析你的財務資訊

下載安裝:
https://itunes.apple.com/tw/app/billings-pro/id434514810?mt=12

2013-06-02

較大型 App 的流程設計軟體

通常在設計比較大型的 App,會有很多的畫面與流程,如果在 coding 之前可以有 UI/UX 的設計先完成,連同使用到的圖片資源檔案都可以輸出,那麼就可以減少很多寫程式的時間。

稍微搜尋一下,相信大家都可以找到許多免費的 App 流程設計軟體,目前這套大概是我遇過比較貴的吧 US$200 (NT$5,990)。


US$200(NT$5990) 會讓很多人購買時猶豫一下
它還可以將畫面與流程先讓客戶看過,在看到它的功能之後,倒是可以買一組來使用。


參考 App Store 畫面


參考 App Store 畫面


參考 App Store 畫面


參考 App Store 畫面


參考 App Store 畫面



如何呢?
.

2013-05-27

iOS Dev Club 環島開發聚#1, Taipei

iOS Dev Club 開發者聚會邁入第三年,每個月底辦一場程式開發者的聚會,這樣大大小小也有 24 場次了。

每場都會聽到抱怨,抱怨怎麼只是在中部舉辦?
於是,第三年,我們開始了「iOS Dev Club 環島開發聚」,第一站,從台北出發。




怎麼可以辦這麼久?我們自己也很好奇。

分享

是啊,這兩個字大家都會講,但不是大家可以做得順利。


大概是一句最簡單的話:「我為人人,人人為我」。

我不自私地幫你,你也會不自私地幫我,你你我我,我們就這樣大家一起互相幫忙。

這是我們成長的動力,也是參加者成長的動力。


還有,就是「你相信我,我相信你」。

誠信

讓我們愈走愈實在,愈走愈長遠。


以及,秉持著 Apple 的精神:

簡單


在這個社團學習寫程式,不用擔心被笑是小白,只要有心,你也可以做出造福人類的 App!


***

我們來看第一段由 A.P.O CAFE 的現場吧


不過癮嗎?來看看當時的 Handouts 直播

不夠清楚?沒關係,以下四段 HD 1080p 現場影片




加入[iOS Dev Club] 粉絲專頁

加入[iOS Dev Club] 社團

.

2013-05-24

WWDC 2013 倒數計時


WWDC 2013 即將開始,在沒有 iPhone/iPad 以前,每年這個時候都是等待 Mac OS X 帶來什麼新的技術讓人驚艷,或是 Apple Mac 系列又有哪些新機種要上市,還有 iPod 等等...

後來 iPhone、iPad 相繼上市,WWDC 變得更精彩,幾乎所有 IT 都在等著跟隨觀察 Apple 帶給人類的新體驗。

Apple 的產品,讓科技不再冰冷,讓普羅大眾覺得很親和。

會不會有普羅大眾的產品價格?我們期待吧!


等待之前,來觀賞很重要的里程碑

.

2013-05-02

Develop iPhone and iPad Apps using Delphi/C++Builder

做個筆記...

Cross-Platform Applications

iOS Mobile Application Development

Mac OS X Application Development

iOS Tutorials: Delphi iOS Application Development





這次 Delphi/C++Builder 還是不放棄跨平台的 IDE 開發工具,我認為不會像千禧年後的 Kylix 鎩羽而歸。

雖然當時的 Kylix 可以跨平台於 Linux,但是 Linux 的發行版本太多,當時除了有 RedHat,還有後來被 Novell 買下的 SUSE,還有 Mandrake... 等等,但是我習慣的 Slackware 好像就無法適用。


因為這次的 OS 平台是具有 UINX 血統的 Mac OS X,雖然 Linux 也是 UNIX like 的作業系統,但相較於 Mac OS X,後者就有很清楚的規格標準,所以呢~

Delphi/C++Builder 這回看到了使用 Mac 的數量越來越多,而 Mac 上面的 IDE 大概就只有 Xcode 嗎?
Windows OS 之所以那麼普遍地散開,有多樣的 IDE 可以選擇會是一個原因。

這樣一來,一直想要開發 Mac 程式的設計師們,這是一個讓你大方邁進的通道了。


ref. http://zh.wikipedia.org/wiki/Delphi

.

2013-04-30

Mac Wi-Fi 網路分享

在簡報時,我不會常在電腦旁。所以,不是在講台中央,就是在聽眾群中的走道。

通常,我會使用手機執行 Keynote Remote,這樣就可以一邊走動,一邊控制播放流程。

但是,在沒有 Wi-Fi AP 的環境下,用藍牙又不可以走太遠,所以 Wi-Fi 會是不錯的選擇。

Mac 有分享網路的功能,我來幫你打開,甚至還可以透過 Mac 當成 Wi-Fi AP 讓其他設備上網。
⬆建立 Wi-Fi 網路,不要連接現有的 Wi-Fi AP


⬆網路名稱自己設定,最好也加上 AP 密碼


⬆此時,你的 Wi-Fi 符號會變成這樣

在這個階段,你的 Mac 可以與其他電腦互相連接。


⬆開啟「系統偏好設定」的「共享」


⬆將「Internet 共享」勾選
我這裡是透過區域網路上網,如果你是透過手機分享 3G 網路,那麼「共享連線來源」可以制定為你的 iPhone USB。



⬆這樣就可以分享網路


⬆開啟手機的 Keynote Remote



⬆這樣就可以在手機滑動切換內容


就這樣幾個步驟,你的 Mac 就可以分享給 iPhone、iPad,甚至其他需要 Wi-Fi 連接的電腦或智慧型設備。

.

Apple 的藍牙鍵盤、滑鼠、觸控板


很多人在使用藍牙都有過配對的痛苦經驗,我以前還認為它是失敗的發明。

但是 Apple 的藍牙鍵盤、滑鼠、觸控板,就是簡單到讓你不知不覺地需要它,抽掉了就覺得礙手沒效率。


有趣的是觸控板,一般人都習慣用滑鼠,但是如果願意認真試看看觸控板,反而有沒有滑鼠都不會影響工作效率。
我的觸控板曾經掉到地上,現在還是一直在使用

觸控板最明顯的就是「捲頁」與「定位」。

「捲頁」,雖然有 function/block list 可以讓你點擊很快切換到需要的程式行位置,但是搭配觸控板的「慣性捲動」只要手指輕輕一撥就好,捲動的速度連 PageUp/PageDn 都趕不上。
「定位」,是在設計時非常重要的技巧,就算你用個 dpi 很高、反射率很精密的滑鼠墊,體驗了觸控板會很訝異,為什麼這麼粗的手指頭可以這樣細微地將鼠標定位到我要的位置?!


但是以上如果手指容易出汗、潮濕,那麼觸控板就完全廢物了。
.

2013-04-26

Delphi 寫的程式 Build 到 Mac OS X 執行



為什麼這樣做?

說真的,用了 Object Pascal 那麼多年,還是用 Delphi 開發 Windows 的程式比較習慣。

這也是為什麼,目前商用軟體的廠商,還是採用 Delphi 開發系統應用程式佔了大多數的原因。

我為了這個目標,大概用了幾年的時間,想要在 Mac 上面開發商用軟體,試了很多種做法,現在 Delphi 可以用 LLVM 編譯,再傳到 Mac 上面,我看這樣的路會是最無痛,也是比較實際的方法了!

Borland(embarcadero) Delphi 這次不會像兩千年的 Kylix 了,挑對了作業系統,命運也會朝向好運的方向前進!

辦公室的軟體,移植到 Mac OS 的時間應該不遠了!


.

2013-04-19

UIImage 存放到 NSArray/NSMutableArray 內

最近學員遇到一個問題,要將 UIImage 放到 NSMutableArray 內,但是很不幸地會發生這樣的錯誤訊息:
ImageArray[5343:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

不管是從 NSBundle 或是從 NSFileManager 取得 Documents 的都一樣。

載入如下:

NSArray *directoryContent = [[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:nil];
NSMutableArray *items = [[NSMutableArray alloc] initWithCapacity:0];

for (NSString *imagePath in directoryContent) {
    UIImage *img = [UIImage imageNamed:imagePath];
    [items addObject:img];
}
NSLog(@"imagesArray:%@", items);

可是執行之後,就會得到上述的錯誤訊息。

錯誤的原因就在這句:
UIImage *img=[UIImage imageNamed: imagePath];

只要改成
UIImage *img = [UIImage imageWithContentsOfFile:imagePath];

錯誤就可以修正


最後正確的程式碼如下:

NSArray *directoryContent = [[NSBundle mainBundlepathsForResourcesOfType:@"png" inDirectory:nil];
NSMutableArray *items = [[NSMutableArray allocinitWithCapacity:0];

for (NSString *imagePath in directoryContent) {
    UIImage *img = [UIImage imageWithContentsOfFile:imagePath];
    [items addObject:img];
}
NSLog(@"imagesArray:%@", items);


善用你在 Xcode 的 Option+Click,你就可以找到答案了:

+ (UIImage *)imageWithContentsOfFile:(NSString *)path
Creates and returns an image object by loading the image data from the file at the specified path.
This method does not cache the image object.

+ (UIImage *)imageNamed:(NSString *)name
Returns the image object associated with the specified filename.
This method looks in the system caches for an image object with the specified name and returns that object if it exists


下載範例檔案
.

2013-04-01

Storyboard 有兩個 Segue 的問題

剛好有學員問到這樣的問題,我就拿該程式畫面在這裡做個圖文解說。
這個畫面連結了兩個 Segue
一般 Segue 都是要在  - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 內安排,如果有 Object 或 Value 要往下個 ViewController 傳遞的話,也是在這裡處理。


另外,如果只有一個 Segue 是從 UIButton 發生,可以這樣做:
- (IBAction)btnSyp:(id)sender {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    Game01VC *vc = [storyboard instantiateViewControllerWithIdentifier:@"CustomerAdd"];
    vc.Flag = 1;
}

但是,第二個 UIButton 就無法如預期發生。
- (IBAction)btnKiller:(id)sender {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    Game01VC *vc = [storyboard instantiateViewControllerWithIdentifier:@"CustomerAdd"];

    vc.Flag = 2;
}

所以,還是要回來以 prepareForSegue 處理。


先在 Storyboard 內設定好 Segue 的 Identifier 為 @"btnSyp" 與 @"btnKiller"


在第一個 UIButton 連結的 Segue 設定 Identifier 為 @"btnSyp"
另一個 UIButton 連結的 Segue 設定 Identifier 為 @"btnKiller"

在 prepareForSegue 內的程式如下:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    Game01VC *vc = segue.destinationViewController;

// 原本在 -(IBAction)btnSyp:(id)sender 內的,移到這裡來,以這種方式做
    if ([segue.identifier isEqualToString:@"btnSyp"]) {
        vc.Flag = 1;
    }
    
// 原本在 -(IBAction)btnKiller:(id)sender 內的,移到這裡來,以這種方式做
    if ([segue.identifier isEqualToString:@"btnKiller"]) {
        vc.Flag = 2;
    }
}

如此,就可以讓下個 ViewController 收到 Object 或 Value 了。


.

2013-03-30

iOS Dev Club 聚會 2013-03-30 活動影片

張景隆分享 Passbook 的實作,向隅的朋友可以觀看影片。


很久沒有來的家銘,這段時間都在開發這個平台,InWedding



iOS Dev Club : iPhone/iPad/iPod touch 軟體應用開發
https://www.facebook.com/groups/iostw/

姻為妳 inWedding 粉絲頁
https://www.facebook.com/OurInWedding




2013-01-10

生日快樂,iPhone!

2007 年一月10日,Apple 在 San Francisco 的 Macworld 發表了 iPhone。



他來了,他說「Congratulation Steve」、「What an Incredible job」
還讓他在台上講了三分鐘。
還說什麼很榮幸與 Apple 一同打造出突破性的智慧型手機。
但是後來他們又私底下做出「類iPhone」的手機,所以您知道為何賈伯斯說要把 Android 消滅的原因了吧。


他也有來站台
但是他就很謙虛
所以他們的股票資訊、天氣資訊、搜尋引擎,到現在還是在 iOS 6 內。


沒有訂閱 iTunes Podcast 的朋友,可以從 iTunes 看看當年 iPhone 發表的影片


六年了,iPhone 你這隻好厲害的紅螞蟻,大家都爭先恐後地學習你,祝你生日快樂!
.