2013年12月10日 星期二

設定VoiceOver的語音提示

有些用戶可能是視覺障礙或其他特殊用途,iOS以相當簡單的方式設定,就能完成輔助使用的目的。



當我們選定某個元件,例如UITextField,則在Identity Inspector (位在Utility區的左3)中,在Accessibility的Hint中輸入欲語音提示的文字內容,使用者若是有開啟了VoiceOver的輔助功能,則會聽到語言唸出我們輸入的文字囉!

預設Accessibility的Enabled是啟用的,因此我們不需要花太多的功夫,就可以讓我們的App支援輔助使用功能了。


2013年12月7日 星期六

iOS 7 API新玩意兒

在iOS 7 API中,有些可能是改良的功能或差異,在此篇中做紀錄,會持續update。

Header File Import之差異
    #import <foundation/foundation.h>
    
    //iOS 7中可改為:
    @import Foundation;  
    
    //注意是將#改為@,且後面多了分號。
此新的@import作法,又稱作「模組(Modules)」或「語意匯入(Semantic Import)」,僅可用於Import Apple官方Framework或Library。無法使用在使用者自行開發或第三方開發的類別庫。

其中有個優點是,透過這個作法,在code-completion (可按ESC)中會出現所有你可以用到的提示。舊有的#import作法,你必須知道完整的套件類別字串名稱,才可正確import。

其中,使用@import作法,在引入的效能上會比#import還要快速。還有一項特點是,透過@import的方式,可直接使用framework,不需要在Xcode Target Settings中的「Linked Frameworks and Libraries」中先行加入,他會自行引入你所@import的類別庫。


[參考] StackOverflow神解答:http://stackoverflow.com/questions/18947516/import-vs-import-ios-7


2013年12月6日 星期五

開發iOS App前需要了解的事。

這裡不寫最細節的內容,因為這些東西在Apple Developer網站上,寫的絕對比我詳細,內容也保證比這裡豐富,既然這裡是blog而不是白皮書,我就以指引方向為前提來寫。

首先,若你想開發iOS App,那麼你就不要想「省錢」這件事,這只會搞得自己很麻煩而已。蘋果的世界裡,沒有什麼事是不麻煩的,尤其當你從一個「使用者」要變成「開發者」時,這點認知一定要有的。


需要什麼硬體?

你要開發之前,總要有開發環境,因此你需要一台可以跑Mac OS X的電腦。你可以買最便宜的Mac Mini,也可以買Macbook,這端看你的需求而定。不要去想用PC來裝Mac OS X這件事,效能既不好,還會有一堆的限制,工欲善其事,必先利其器,這點錢就別省了,既然都立誓要進入Apple的世界了,有一台Mac是很合理也很合邏輯的。

接下來,就是你需要一台可以測iOS的硬體了。你可以買iPad,然後在上面跑iPhone大小的App。這是省錢的方案,當然如果你會有需要用程式去抓3G的一些設定,就買3G+Wifi版的,如果沒有的話單純的Wifi版就可以應付多數情況了。

用模擬器來寫App的話嘛,個人是不建議,因為畢竟App是徒手要在上面滑來滑去的,手感手順很重要,若你這點錢也要省,單純只想用模擬器來寫,我個人覺得使用者經驗這部份沒有辦法做的太好。當然你能有一台iPhone和iPad,是最完美的,若沒有,至少要有一台iPad Wifi版。

順便一提的是,最好是買有Retina的iPad (也就是iPad 2及以前,並不建議),畢竟你若要做HD版的,一定要在上面跑過才可以最精確了解每一個pixel的表現是不是如你預期。

(幫你找了很多理由和藉口來買Mac和iOS裝置了吧!)


需要什麼軟體?

若你是第一次接觸Apple的開發,你應該還不知道Apple在「這個綁那個,那個又限制這個」是有多麻煩的事吧。首先,你的Mac上面灌了Mac OS X,不是這樣就了事了,版本是很關鍵的事。版本不對,後面什麼都不對了。

目前(2013/12月)最新的版本是Marvericks (10.9),你的Mac只要夠新(約4~5年左右的Mac),基本上就能安裝。這個版本會決定你的開發IDE Xcode可以裝到多新的版本。

Xcode是用來開發iOS App的IDE開發工具,他也有一個版本,你要安裝愈新的Xcode,才可以開發愈新的iOS版本App,而你要裝愈新版的Xcode,你本身的Mac OS X也要夠新才行。這就是我上面說的「這個綁那個,那個又限制這個」。寫到這裡,不知你頭腦打結了嗎?

舉個實例好了,如果你想要寫的是iOS 7的App,你就至少要將Xcode升到5.0以上的版本(安裝iOS 7 SDK),且你的Mac OS X至少要10.8.4以上版本才可安裝該版Xcode。

接下來就是,iOS本身也有一個版本。這個版本呢,也很重要,如果你的開發用iOS裝置想要保持在某個版本上(例如iOS 6),那麼請不要輕易的升級。
若你原本是採用Xcode 4.5在寫iOS 6的App,用了一台iPhone 5安裝了iOS 6,運作的很好,有一天你突然把你的iPhone升到iOS 7,不好意思,你的Xcode會跟你說你的iPhone裝的版本太新了,他不能支援,你就必需升Xcode,然後可能此時又發現Mac OS X又不支援,也要升級,就會出現一關卡一關的冏境了。

等你都升好了以後,發現你原本Xcode可以讓iOS 5的人安裝,現在新版Xcode升級後,最低變成只能開發在iOS 6.0以上執行。

你只不過是不小心升級了你開發用的iPhone的iOS版本,就會不小心出現大災難,身為Apple開發者,我相信你會很懷念以前傻傻的當使用者的時光。(而且那時你也罵了Apple說很機車,這時才發現,身為開發者才該罵吧!)


決定你的開發者Program

如果你都了解上述的卡關限制後,還打不倒你,你就可以開始進入開發者的世界了(其實後面麻煩的事更多)。

首先,請先到Apple Developer網站逛一逛,了解一下你未來的家(誤)。

https://developer.apple.com/



當你要成為Apple開發者,你要先了解你需要申請的是哪一種Program。
基本上目前分為三種Program:
  1. iOS Developer Program (含個人與組織)
  2. iOS Developer Enterprise Program (企業內部專用)
  3. iOS Developer University Program (大學教學目的)
https://developer.apple.com/programs/start/ios/

基本上上面這個網址就講的很清楚了,不過有人搞不懂「我是一個公司,到底要申請第一種還是第二種」。

第一和第二種簡單的區別是,第一種是要上架到App Store的,所有人都可以下載的到。而第二種主要用於大型企業,開發的App是不上架到App Store,而是放置在公司內部自行架設的伺服器上安裝使用。

如果我記得沒錯,以前第一種是區分成「個人」與「公司(Company)」兩種Program,但現在已經整合了。只是差在若你是以公司組織單位要申請,一定要提出D-U-N-S碼相關文件,這個以我之前的例子:要審非常久!而且申請文件千萬不要有錯,不然重跑流程非常花時間。


一般人較少有機會接觸到Enterprise的Program(多半都是第一種),因為工作上我主要開發的就是Enterprise Program,若有機會我再與大家分享這方面的相關經驗和資訊。


在Developer網站上,其實有非常多的資源,只要你願意看(英文),基本上上面夠你看很久很久了。但是要跟大家說明一下,就是Apple Developer實在太常改版了,尤其是「Certificates, Identifiers & Profiles」專區,這個日後再提,不過很麻煩的是每次卡完了圖,過沒多久版面又改掉了,常常會造成講的地方跟最後改版的位置或功能名稱不相同,實在有點擾民就是了。

這篇就介紹到此,有興趣的人請自行研究囉。


2013年12月5日 星期四

網誌前言

開一個網誌前,不免俗要自我介紹一下,不然你們在看誰寫的文章都不知道,就照單全收好像也挺冒險的。

Who am I and why do I create this blog?

我的大學與研究所唸的都是資訊管理,在資訊領域界中打滾了差不多八、九個年頭了,自從Google發明了大神搜尋系統後,這一路上,從網路中許多神人的經驗分享幫助下,讓自己也能這樣跌跌撞撞在資訊領域存活了下來。

從最早學生時代寫ASP網頁,碩士延畢了一年,在家兄的新創網路公司中開發了PHP網站與Web3D程式,曾經從無到有企劃與開發3D換裝系統虛擬社群網站,玩過了挺少人在接觸的Quest3D虛擬實境系統。

接著四年的國防訓儲生涯,在航太產業開發各種網站與軟體,使用了Java、JSP、Spring MVC、Perl、C# .Net、SAP、Spinfire相關技術,發展了一套給公司工程設計部門使用的web-based VPM,用來管理Catia的各種3D零件組裝檔案。中間過程中,為了精進自己的程式與伺服器管理技能,考了SCJP和RECH證照。

國防役結束後,短暫到了澳洲打工度假(度假是實,打工是虛)幾個月後,回台灣又再度進入家兄的公司,這次經過了航太產業四年的洗禮後,技術能力提升了之外,從工程單位又回到了3D網頁多媒體的產業。

在這一年內,一個人當好幾個人用,開發的方向非常多元,參與開發了幾個新穎的標案計劃,主要發展3D Real Time的應用程式(Unity3D x C#)、也接觸了AR(擴增實境)和用Flash ActionScript寫3D多媒體系統,重回PHP領域外加Smarty、JQuery與ExtJS,做了一些建築產業的東西,購物,旅行業,鞋業,學術單位,各種領域應有盡有。

這一年相當充實,但階段性任務告一段落後,隨後進入了光電產業發展。

這也是目前的工作,這份工作內容和第一份在航太產業工程單位其實挺類似的,目前的工作主要使用ASP.NET(VB),開發各種企業內部用途的網站與單機程式,近兩年因為要發展雲端與Mobile,因此也順勢進入了行動裝置的開發行列,除了碰過一些Android之外,主要開發的都是iOS的App(我有幸能玩到一般較少人會接觸的Enterprise Program)。

除了程式的開發外,因為公司導入了CMMI Level 3,而且我參與的系統多半與整合CMMI流程有相關,因此也讓自己對軟體發展流程有更精實的認知,不過開發系統的彈性和速度,往往會跟嚴格的開發流程之間是天秤的兩端,總不能又要輕巧又要快,但又要每個流程環結都能的完美無缺,這實在是一個Trade-off。因此中間過程中,也參與了實驗性的SCRUM的敏捷式開發。


那所以呢?

聽了以上這些,這也不是在寫自傳,總之,這些年下來,發現自己接觸的面向相當廣泛,各式各樣五花八門都略懂略懂。

因此,自己意識到這樣發散下去好像無法聚焦,是到了該收斂的時候了。

於是挑了這兩年來主要開發的iOS來做為技術專精的目標。這個網誌也是為了這個而存在的,尤其是年紀也有了,記憶力衰退的同時,更需要找個辦法將自己辛苦研究的東西做個保存,以防日後自己需要再研究時也較為方便,同時又能造福人群。

當然,以目前收斂的速度來看,我寫的東西主要會是偏向給新手讀者指引用的,要再深入的話可能還需要一點時間。

往往自己遇到一些問題時,都是在StackOverflow這個神人出沒的地方找到解答,但我知道許多台灣朋友都有「看英文不耐症」,往往錯過了很多精彩的神解法,實在很可惜。這方面我也會著手做些零碎的紀錄,將自己所碰到的問題以及可能四處向洋人取經求得的解答與大家分享,讓更多的人不需要再走一樣的冤枉路呀。


寫些什麼?

那麼哪些是我會寫的,哪些又不寫呢?我曾經想過要效法Linux第一把交椅鳥哥一樣來寫文章,但發現Linux是歷久彌新的系統,有很多觀念都是可以貫穿古今。但iOS發展與變化有點過於快速,如果我也來從頭開始當教學筆記這樣寫,等寫完第1章,大概iOS也從7升到9了吧?而且可能寫的東西也不一定適用,時效性實在太低。況且這方面的基礎細節教學,就目前的iOS資源來看,已經有相當多且完整了,大家直接善用那些資源其實更為有效率。

因此我還是調整一下方向,是以不連慣單元,但採分類方式來紀錄(這也是一般網誌的型態),但記得東西都是我個人覺得值得分享的內容,值得分享的有可能是很基礎的,也可能是較少人在碰的,也可能是我剛好開發的案子有遇上的,這樣既有效益,也較無壓力。


如果你也準備好了要一起踏入iOS的開發行列,就讓我們一起互相幫助一起成長吧!