Just My Life & My Work

每年iOS更新後,SDK中多少會有些API在最新的版本被棄用,此時就要去寫condition code分別跑在不同版本的iOS。Notification也在iOS 8有所變動,包含Remote Notification與Local Notification,我們就來看怎麼改比較容易吧~

iOS 8 Remote:Local Notification

如果沒有處理iOS 8的情況,是不會跳出請求允許傳送通知的提示喔!

繼續閱讀文章 »

2014年只剩下最後幾天,開始有跨年的氣息,該是時候來整理和回憶這一年來的生活,希望這365天所累積的經驗能變成智慧,讓2015年的我可以活得更精彩!

還記得去年做過2013年自分新聞,現在也就是今年來做2014年自分新聞吧~這是根據臉書個人塗鴉牆上所做的統計,程式挑出最具代表的貼文組合成的報紙喔~

2014自分新聞(日)

今年新推出英文版,總算能看得懂描述囉~有人(程式)幫我整理我在臉書上發生過的大小事情,實在太感動啦~要不是三不五時就分享所見所聞,很多當時認為很重要的時刻都將會被我遺忘⋯⋯

2014自分新聞(英)

我發現,今年按讚的人跟去年差不多呢~阿芳姐弟弟女友,她們倆可真是我的死忠臉書迷呢:)~

很高興今年所做的突破,4月底有去人生第一場路跑10公里,12月中參加人生第一場半馬拉松21公里,未來將挑戰全馬拉松42公里。

版面上吃的還是佔絕大多數,尤其是我最愛吃的甜點-霜淇淋

大家一起來回顧自己的臉書動態吧!

參考:2014年自分新聞製作網頁

過去App的資料是被保護在沙盒(Sandbox)之中,因此無法讓其它App來存取。現在Apple設計一個共享區域,在此區域可以讓不同的App來存取,只是這些App必須是同一個開發者呢!

在App間分享資料 (Share Data Between Apps)

在專案中的Capabilities中打開App Groups,接著創立一個App Groups,我這裡是設定group.happy.share,程式碼中會用到喔~

繼續閱讀文章 »

MacBook Air 容量變大速度變快

2012年7月買了現在這一台Macbook Air,規格是螢幕13吋容量128GB,起初以為這個規格就夠用了,然而在去年8月開始出現噩夢,也就是三不五時就跳出「硬碟即將滿出來」的訊息,實在很擾人,讓它永遠不要跳出只是把眼睛矇起來,沒有意義。所幸研究是學弟介紹我一款軟體OmniDiskSweeper,讓我發現潛藏在我Air中的「冗員」,寫了一篇Mac硬碟空間不足問題受到許多果粉的歡迎,才發現原來多數人有著我一樣的問題呢!

因為使用Xcode寫iOS App,時常會出現暫存檔,而且Xcode有beta版我也要下載來嘗試,使用OmniDiskSweeper來找出冗員相安無事到現在,不過到了最近我發現系統速度變慢,尚不知道原因為何⋯⋯

Disk Speed Test - before

速度:寫入151.5MB/s,讀取430MB/s。

繼續閱讀文章 »

目前所做的案子需要做用戶驗收測試 (User Acceptance Test),然而剛開始不太曉得這玩意兒是什麼,只知道在軟體完成之前,必須給使用者實際操作過,接著會得到一系列的回饋 (Feedback),然後我就要針對這些回饋修正或調整功能。這週某天下午去客戶公司報到,確實也是做這樣的事情⋯⋯

acceptance-testing-levels-of-testing

繼續閱讀文章 »

Apple Watch即將上市,對iOS開發者而言,無疑是個一定要了解的全新裝置,特別是在使用者體驗上,如何設計適合小螢幕的界面。這種改變從電腦轉移到手機已經歷過一次,如今要從手機移轉到手錶,螢幕可是越變越小呢~

手機上所呈現的界面是透過UIKit framework,而手錶所呈現的界面則是透過WatchKit framework,這兩者有相似的地方,也有許多不一樣的地方

WatchKit 與 UIKit

基本上,WatchKit是UIKit的簡化版,之後Apple應該會根據需求新增修改些property或method。一般而言,手錶的功用是瀏覽重於互動,所以framework少有互動的設計。

WatchKit的元件

WKInterfaceObject繼承於NSObject。WKInterfaceImage繼承於WKInterfaceObject、WKInterfaceLabel繼承於WKInterfaceObject,其餘依此類推,都是繼承於WKInterfaceObject。

其property與method也很陽春,只有一些基本的設定。

  • WKInterfaceObject

#import <Foundation/Foundation.h>
#import <CoreGraphics/CoreGraphics.h>
#import <WatchKit/WKDefines.h>

WK_CLASS_AVAILABLE_IOS(8_2)
@interface WKInterfaceObject : NSObject

- (instancetype)init NS_UNAVAILABLE;

- (void)setHidden:(BOOL)hidden;
- (void)setAlpha:(CGFloat)alpha;

- (void)setWidth:(CGFloat)width;   // setting to 0 means use natural size. ignored for table
- (void)setHeight:(CGFloat)height;

@property(nonatomic,readonly,copy) NSString *interfaceProperty;   // same as controller's property name

@end

@interface WKInterfaceObject (WKAccessibility)

- (void)setAccessibilityLabel:(NSString *)accessibilityLabel;
- (void)setAccessibilityHint:(NSString *)accessibilityHint;
- (void)setAccessibilityValue:(NSString *)accessibilityValue;

@end
  • WKInterfaceImage

#import <Foundation/Foundation.h>
#import <WatchKit/WKDefines.h>
#import <WatchKit/WKInterfaceObject.h>

@class UIImage;

WK_CLASS_AVAILABLE_IOS(8_2)
@interface WKInterfaceImage : WKInterfaceObject

- (void)setImage:(UIImage *)image;
- (void)setImageData:(NSData *)imageData;
- (void)setImageNamed:(NSString *)imageName;

- (void)startAnimating;	      // play all images repeatedly using duration specified in interface description
- (void)startAnimatingWithImagesInRange:(NSRange)imageRange duration:(NSTimeInterval)duration repeatCount:(NSInteger)repeatCount; // play subset of images for a certain number of times. 0 means repeat until stop
- (void)stopAnimating;

@end

我們很驚訝地發現,居然沒有frame這個特性!也就是我們無法設定其座標(但可設定長與高),也無法使用Auto Layout。實際上,WatchKit界面元件只能在格子中透過邊界相對位置來放置。

還有許多特性需要好好了解,因為本來就不該把手錶當作手機來設計,而簡化自然有其好處!持續去研究吧~

參考:WatchKit – NSHipster。

今晚很榮幸到捷運東門站的Läbu Café和一位創業家吃晚餐,彼此交流許多而洗滌了我有點生鏽的心,因為目前在公司多是在幫客戶解決需求問題,明明自己有非常多點子想實現,卻一直擱著、擱著、還是擱著,直到熱情冷卻⋯⋯慶幸的是我持續研究新的技術,如Apple Watch,只要再多一些push,那肯定可以work!

剛看了經理人雜誌的文章:54張手繪簡報,輕鬆看懂Google模式,很欽佩谷歌的處事風格,招募有創意的員工,創造可以盡情發揮能力的環境。「我們發現企業在今日要持續成功,唯一方法只有吸引聰明創意人來當員工、並為他們創造可以茁壯成長的環境。

馬雲

繼續閱讀文章 »

搭了八年捷運的我,第一次看到不是給人用的捷運地圖-台北貓咪咖啡廳捷運地圖,讓人感到很新奇!依此類推,其實也可以做給愛狗人士用呢!

台北貓咪咖啡廳捷運路線圖

我想若有心的話,愛什麼的人就做什麼捷運地圖吧!

吃的

比如早午餐店、便利商店、美式漢堡、義式餐廳、燒烤店、創意料理等。

喝的

比如咖啡廳、飲料店等。

玩的

比如公園、旅館、河堤、名勝古蹟等。

樂的

比如彩券行、KTV、夜店、夜市等。

24小時都可去的

像是便利商店、速食店、旅館等。

服務類的

像是郵局、銀行、醫院等。

期待有閒情逸致的人整理出清單,然後畫到台北捷運圖上,或者也可以交給我,讓我做出一個什麼都有的台北捷運App!有賴喜歡搭捷運的人集結而成:)~

參考:【貓咪+美食】喜歡貓咪?喜歡咖啡廳? 我的台北市貓咪咖啡廳捷運路線圖

[iOS] 大小類別 (Size Class)

大小類別 (Size Class)iOS 8新釋出的類別,主要目的是想要解決設備歧異的問題,透過實作Size Class,我們可以減少許多客製設備類別 (iPhone、iPad)與螢幕大小 (iPhone:3.5吋、4吋、4.7吋、5.5吋,iPad:7.9吋、9.7吋)的程式碼!還有之所以推出,是為了因應未來有更多不一樣螢幕大小的產品(如Apple Watch),所以若能採用Size Class便可減輕開發負擔!

Size Class

其分為普通(Regular)緊密 (Compact)兩個種類(class)。開發者便可以無視實際的尺寸,而是對這兩類和它們的組合進行適應。這樣不論在設計時還是程式碼上,我們都可以不再受限於實際的尺寸,而是變成遵循尺寸的視覺感官來進行適應。

繼續閱讀文章 »

iOS 8釋出已經三個月,我們來看一下現在iOS各版本的市佔率吧!真沒想到,比起Windows各版本市佔率,iOS可是非常快速地讓使用者安心更新!這種無痛升級且能享受更多的功能服務,當然會讓多數人都能夠接受!

iOS 版本市佔率 Version Market Share

2014/12/08由Apple官方統計,iOS 8占有63%iOS 7占有33%最新的兩個iOS版本就占有96%,讓開發者們如我樂觀其成!因為我們只要優先著重在iOS 7以上開發即可,若客戶說想要支援iOS 6,那麼就拿出這一張圓餅圖給他看吧~為了支援不到4%的iOS版本,而多花費時間與金錢在上頭,可不是個明智的選擇呢~

iOS 7以後的扁平化設計,可說是個劃時代的分水嶺,無論是在使用者體驗上,或是在開發者工具上,甚至軟硬體新的功能與服務,都將讓你我引領期盼!期許自己能深入體會研究其中奧妙之處,進而設計出自己他人都愛不釋手的應用軟體:)~

200930更新

2020/6/17,iOS 13市佔92%、iOS 12市佔12%、iOS 11之前版本則市佔2%。

2020 iOS and iPadOS Usage

此外,參考我正在做的快樂印App,是透過Facebook SDK而來的統計,在開發者後台就能查詢。

2020/9/30最新版本iOS 14有6.72%。至於iOS 10以下版本,可以考慮不要支援,畢竟用戶數非常少,若維護成本過高,就割捨掉吧!

不過我想,還在使用iOS 10以前版本的手機,應該也跑不太動現在我們的快樂印App吧~

快樂印 Facebook 2020 iOS and iPadOS Usage

mixpanel iOS 14

參考:App開發前要考量的首要關鍵數值 -「iOS版本市佔率」Apple Developer Support

標籤雲