2012年8月31日 星期五

獵取V.K克的雲端使用者ID - SoundCloud App開發(一)

SoundCloud是目前十分火紅的雲端音樂平台,如果說Youtube是諸葛亮,那麼SoundCloud就是周瑜了。Youtube的強項在影片,SoundCloud則在音樂。這些雲端平台讓許多像彼得潘這樣的平凡人實現唱歌,演電影的夢想,而對已經成名的明星來講,這些雲端平台不只有著更快,更國際化的宣傳效果,還能省下大筆的行銷預算。

彼得潘的好朋友,鋼琴天王V.K克,早已將專輯裡的音樂放到SoundCloud上,讓網友們免費試聽。如圖所示,我們可以看到SoundCloud十分強大,不只提供播放音樂的功能,還結合了Facebook的Like,讓更多的人可以認識,分享V.K的音樂。





接下來彼得潘將以V.K克儲存於SoundCloud的音樂為例,示範如何利用SoundCloud API,播放V.K克的琴聲陪伴我們度過漫漫長夜。

想要在App裡播放V.K克的音樂,首先我們得先顯示音樂清單,也就是要取得V.K克的作品清單。SoundCloud提供以下API供我們取得某人的音樂清單

https://api.soundcloud.com/users/USER_ID.json/tracks.json?client_id=CLIENT_ID

USER_ID和CLIENT_ID是我們要另外指定的。現在彼得潘先介紹如何取得V.K克的USER_ID。

1. 連到SoundCloud的V.K克頁面, http://soundcloud.com/vkstyle


2. 點選Share按鈕,從彈出的視窗裡複製Embed Code。


3. 解密Embed Code

 <iframe width="100%" height="450" scrolling="no" frameborder="no" src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Fusers%2F8546094&show_artwork=true"></iframe>

重點在於users%2F8546094,%2F後的8546094即是神秘的V.K克USER_ID。


有了USER_ID後,接下來結合CLIENT_ID,即可取得V.K的心血創作曲目清單。別急,讓我們休息一下,先聽聽V.K克的守護天使,下回再分曉。




2012年8月29日 星期三

王牌徵信社Mixpanel - 分析使用者不為人知的App操作習慣

每天新的App如雨後春筍般不斷冒出。一萬個App裡,可能只有一個存活著,其它都死在沙灘上。然而其實只要App順利上架,就算一開始出師不利,乏人問津,只要我們可以保持聖鬥士星矢永不放棄的心態,以科學化的分析,認真探究使用者的App操作行為,加以改善,還是有翻身的機會的。

但是要如何得知使用者的App操作行為呢? 可惜我們不是鬼,無法隨時守護使用者身旁,觀察她的一舉一動。這時候,幸好有王牌徵信社Mixpanel,幫助我們輕易掌控使用者的一舉一動。接下來彼得潘將以豬鳥世紀選美大賽為例,利用Mixpanel取得投票的結果。


1. 前往Mixpanel網站

https://mixpanel.com


2. 申請帳號








3. 登入後,建立新專案
    輸入專案名Story of Peter Pan,然後點選CREATE PROJECT。
 



4. 查詢專案token

點選右上角的Account,顯示專案清單。如下圖所示,Story of Peter Pan的token為21d4cb16b2a59aae66283260c6091fab。到時候我們的App將綁定此token。到時候App Story of Peter Pan使用者的一舉一動,都逃不過Mixpanel的手掌心。



5. 下載iPhone tracking library for Mixpanel Analytics

git clone https://github.com/mixpanel/mixpanel-iphone.git

6. 建立Single View Application專案TestMixpanel

7. 從步驟5下載的mixpanel-iphone資料夾,將MPLib加入專案裡。






8. 將MPLib的檔案設為不支援ARC


9. 以token建立MixpanelAPI物件



10. 加入豬鳥世紀選美大賽投票圖片按鈕。
      Angry Bird的故事不斷持續著,在世紀選美大賽繼續PK。



11.  點選小豬時,記錄pig被點選。點選小鳥時記錄bird被點選。
Mixpanel利用event的概念來追蹤使用者行為,在這裡我們分別將Pig和Bird設為event的名稱,對應到選擇小豬和小鳥的動作。



       

12. 執行App



13. 從Mixpanel網站查詢票選結果。


當彼得潘點選了一次小鳥,二次小豬後,網站上忠實無誤地顯示1:2的結果。



不過如果投票規則改成一台機器針對某個對象只能投一票(但可以同時投不同對象),這時候我們只要將右上方的Total改成Unique,結果即變為1:1。彼得潘即使按了兩次小豬,還是以一次計算。



2012年8月27日 星期一

亞洲鋼琴天王 V.K克故事分享







解除被封印的登天神功

在iOS App的國度裡,幾乎所有的App都與生俱來擁有一點登天的神功,尤其是在表格頁面,更可以體會Apple貼心的一點登天設計。以Facebook App為例,由於彼得潘的好友眾多,總在不知不覺間就一路捲動到十萬八千里,想要回到起點,若是無登天神功,手指可能就得滑到抽筋了。經由登天神功,我們只要點選畫面最上方的status bar (時間,電量 ),即可回到最初。



登天神功背後的原理很簡單。iOS裡可以垂直捲動的物件,都有著登天神功。所以當我們點選status bar時,它們將瞬間返回起點,不敢稍作停留。

然而,世事豈能竟如人意。當畫面上只有table view時,點選status bar自動返回表格的開頭是天經地義。但當畫面上同時有table view和text view時,兩個同樣精通垂直捲動的強者相爭。此時可不是兩虎相爭,必有一傷,而是兩敗俱傷。此時點選status bar,畫面將如同定格般毫無回應,因為公正的系統無法決定該讓誰登天,該讓誰返回原點。如下圖所示,畫面上的表格(table view) 有2個cell,第一個cell是鋼琴小王子V.K克的照片,第二個cell是粉絲想對V.K克說的話( text view)。當我們將表格往下滑動,輸入感性留言後,點選status bar時,登天神功有如被封印般,不再作用了。








就像情人節只能和一個人過,畫面上只有一個物件能夠登天。想要讓table view登天,其實很簡單,只要將其它相爭敵人的scrollsToTop屬性設為NO即可。

textView.scrollsToTop = NO;

說明:
scrollsToTop為UIScrollView的property,當它設為YES時,即表示此物件能夠登天,這也是為何繼承自UIScrollView的UITableView,UITextView能夠登天的原因。當我們將scrollsToTop設為NO,即廢了其登天神功。唯有當畫面上只有一個物件的scrollsToTop為YES時,系統才能毫不猶豫地選出登天的對象。




再一次地點選status bar,登天神功再度發威,我們終於看到V.K克彈琴的認真神情了! 










2012年8月22日 星期三

PunApp活動: 當音樂克制不了變成App的衝動






智慧型手機已經是大多數人聽音樂的標準配備,然而除了直接聽下載來的mp3,你知道還有哪些在手機上聽音樂的方式嗎?你知道該去哪裡取得你最愛的音樂嗎?你認為這些新穎的音樂類型App有前途嗎?App的熱門會加快音樂產業數位化的速度,還是反而奪走了人們專心聽音樂的時間?

本次InstALL活動將邀請兩位在音樂類App方面擁有豐富經驗跟獨到見解的專家,各自以15分鐘的快講切入這次的主題:「音樂」。

講者:
 
彼得潘(App 開發者,iOS開發超級暢銷書《App程式設計入門》作者)  網站:http://deeploveapple.blogspot.tw/
 
音樂隊長(數位科技與音樂產業觀察家) 網站:http://musiccaptains.com/zh/

2012年8月20日 星期一

Xcode的scheme共享

好東西要和好朋友分享,對於開發App的工程師來說,Xcode上的scheme影響了App的生成和包裝,絕對是不能不享的必需品。接下來就讓彼得潘示範如何和團隊伙伴們共享scheme吧。


1. 在github上建立專案ShareScheme

2. 建立Xcode專案ShareScheme

3. 將Xcode專案ShareScheme和github做連結

git remote add origin https://github.com/deeplovepan/ShareScheme.git
git push -u origin master

4. 新增scheme "ShareScheme for peter pan"

從scheme清單裡點選Manage Schemes



新增ShareScheme for peter pan,並將Scheme列表裡欲共享的對象都勾選。( Shared欄位)



5. 將分享的scheme加入git管理

前一步勾選Shared後,專案下將生成xcshareddata資料夾,此資料夾下為我們想要和朋友共享的檔案。

(1) git status
->

# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
# ShareScheme.xcodeproj/project.xcworkspace/
# ShareScheme.xcodeproj/xcshareddata/
# ShareScheme.xcodeproj/xcuserdata/



(2) git add ShareScheme.xcodeproj/xcshareddata/

(3) git status

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# new file:   ShareScheme.xcodeproj/xcshareddata/xcschemes/ShareScheme for peter pan.xcscheme
# new file:   ShareScheme.xcodeproj/xcshareddata/xcschemes/ShareScheme.xcscheme
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
# ShareScheme.xcodeproj/project.xcworkspace/
# ShareScheme.xcodeproj/xcuserdata/


(4) git commit -a

(5) git push

經過以上步驟,當彼得潘的好朋友溫蒂從github下載ShareScheme專案時,將幸福地一次擁有ShareScheme和ShareScheme for peter pan兩個Scheme。




2012年8月10日 星期五

真實世界的App上架流程


一個真實App的上架或改版,往往比課本裡教的複雜許多。單單將App精美地包裝送到Apple評審手上只是基本功,想要成為App高手,其實還有以下2點要注意:
(1) 專案的版本記錄
(2) crash report的收集

由於Xcode對於git先天的良好支援,目前大部分的App皆以git作為版本管理。為了將來能夠隨時回到過去,研究某個上架版App的問題,最好在每一次上架時,利用git的tag功能,將當時的專案做個版本記錄。

至於Crash Report,也就是所謂的錯誤回報,對於一個追求App盡善盡美的App高手而言,可以說是再多錢也買不到的稀世珍寶。有了crash report,我們可以大幅縮短找尋App當掉原因所花的時間。彼得潘過去年少不懂事,曾經採用最笨的方法,相約遇到問題的使用者一起出來喝咖啡複製問題。然而時代進步了,現在彼得潘每個月花個10美金,HockeyApp將貼心地幫彼得潘收集使用者的crash report,並聰明地解析crash原因。



連出問題的檔案和行數都解析出來的神機秒算HockeyApp。



接下來彼得潘將以Passion Bean最近上架的App LOCOMO為例,說明一個真真實實上架App的完整上架流程。




1. 在iTunes Store上建立欲上架的App版本,並將狀態設為Waiting For Upload。



2.  從Xcode設定上架App的版號。(Version和Build欄位)
   
點選專案檔,然後從Targets清單裡選定要上架的App Locomote,於 Locomote的Summary頁面設定版號。

注意: Version欄位必須和iTunes Connect上設定的一致。    







3.  選擇release的scheme



LOCOMO包裝時,可分為平常每天包裝給測試人員試用的Ad Hoc版以及正式上架App Store的Release版。由於此兩個版本需要不同的provisioning profile,因此彼得潘建立以下3種不同的Configuration。
(1) Debug: 開發人員測試,結合development profile
(2) Release:  App Store上架版,結合App Store的distribution profile
(3) Adhoc: 測試人員測試,結合Adhoc的distribution profile





為了包裝方便,彼得潘建立2個scheme,Locomote Releaes和Locomote,將Archive的Build Configuration分別設為Release和Adhoc,以對應App Store版和Adhoc版。






4.  將compile目標切換到iOS Device

如果compile目標是模擬器,將無法進行上傳App的Archive動作。





5. 開始包裝App ( Product -> Archive )


點選Distribute按鈕


選擇Submit to the iOS App Store,然後按下Next按




6. 完成App上傳後,將目前的專案做git tag的動作


git tag v1.2.0
git push --tags


7. 將剛剛上傳的App,傳到HockeyApp的Server上,未來才能接收使用者的crash report。

在Organizer的Archives分頁,可以找到剛剛上傳到App Store的版本。(上傳到App Store的Status將顯示Submitted) 請點選它,然後從右鍵清單裡點選Show in Finder。




接著將App,也就是. xcarchive檔拖曳到Dock上的HockeyMac Icon,啟動上傳到HockeyApp主機的HockeyMac




Release type: App Store版請選擇Live,Ad Hoc版則選擇Beta

Download Allowed:  主要針對Ad Hoc版,必須勾測了測試人員才能夠下載。

Notify Testers: 勾選了才會通知使用者有更新
















2012年8月4日 星期六

2012年8月3日 星期五

不畏末日預言,2012秋天勇敢現身的iOS 6 SDK

MacToday 2012.8 專欄

介紹iOS 6熱騰騰的4大功能:

1. Passbook

2. In-App Purchase 

3. 全新的地圖

4. 誰能比我更Social