Tag Archives: iOS

The Issue About Using MPChangeRepeatModeCommand

Apple’s MediaPlayer framework has two APIs in iOS 10 to let you control your player’s repeat mode (to repeat a song, or a list, and so on) and shuffle mode (sequential or shuffle play) with CarPlay. They are MPChangeRepeatModeCommand and … Continue reading

Posted in Code, iOS | Tagged , | Leave a comment

使用 Slather 產生 iOS/Mac 專案的單元測試覆蓋率報告

在 Xcode 6 以及之前的版本中,如果你使用蘋果內建在 Xcode 當中的 OCUnit/XCUnit 等測試框架撰寫單元測試的話,Xcode 會在測試的過程中產生 gcc 格式的覆蓋率(coverage)報告,叫做 gcda (意思是 gcov data file)檔案;如果我們想將產生測試覆蓋率的流程整合到 Jenkins 等持續整合系統中,我們可以用 gonvr 等工具,將測試報告轉換成 XML 或 HTML 格式,這將我們就可以在系統中,看到每個 build 的覆蓋圖表,以及覆蓋率變化的趨勢。 但是在 Xcode 7 之後,蘋果將 gcc 的工具換成 llvm 的工具,這種幾年前的方案便變得不敷使用。在 Xcode 7 中,雖然我們可以指定要求產生 gcc 格式的覆蓋率檔案,似乎可以與我們過去的工作流程相容,但是產生出來的結果非常不準確;而蘋果的立場大概是,反正 Xcode … Continue reading

Posted in Code, iOS, Mac | Tagged , , , , , | Leave a comment

Your Delegation Methods Might Not Be Called In Swift 3

One of the most obvious changes in Swift 3 is its naming convention. Apple also renamed lots of methods when releasing Xcode 8. To make new Swift APIs to be compatible with existing Objective-C APIs, Swift compiler converts Swift 3 … Continue reading

Posted in Code, iOS, Mac | Tagged , , , , , | Leave a comment

Upgrade to Xcode 8

Xcode 8 was out along with iOS 10, watchOS 3, tvOS 10 and macOS 10.12 Sierra last month. We spent a couple of days to upgrade our development environment and build machines of our continuous integration system to Xcode 8, … Continue reading

Posted in Code, iOS, Mac | Tagged , , , , | Leave a comment

KKBOX 的 WWDC 2016 讀書會影片

KKBOX 今年也舉辦了 WWDC 影片的讀書會,我們挑選了一些我們比較有興趣的主題,在公司內分享。您可以從下方找到我們的讀書會錄影,以及每場讀書會對應的 WWDC 官方影片。

Posted in Code, iOS, Mac | Tagged , , , | 2 Comments

Apple TV Tech Talks 東京場

蘋果在 2015 年十二月到 2016 年一月,在世界幾個主要都市舉辦一系列名為 Apple TV Tech Talks 的官方技術講座,主題為去年十月推出的第四代 Apple TV 上的 App 開發。 KKBOX 派出兩員參加 2016/1/21 在東京新宿舉辦的場次。在早上八點,冒著低溫趕到大樓林立的東京都廳對面的活動場地希爾頓飯店後,開始一整天的活動。蘋果派出三名 envanglist,進行總共九場、每場約三十分鐘的英文技術演講,也就是除休息時間外的連續五的小時的課程,除了與開發本身的議程之外,也包含部分設計與市場行銷的議題。 此外也有一個 Q&A Lounge 供開發者詢問開發過程中所遇到的問題。我們之前遇到了一些問題,也在現場獲得解決,不過我們現在還不方便透露我們遇到了怎樣的問題,先就當天的內容做一摘要。 本文也刊於 Rocket Café。

Posted in Events | Tagged , , | Leave a comment

KKBOX 的 iOS 開發訓練教材

相信一些朋友已經知道了這個消息:我們在上週公開了我們在 KKBOX 內部使用的 iOS 訓練教材。 這是一本在 Gitbook 服務上發行的電子書,除了可以在網站上閱讀之外,也提供 EPUB、MOBI 等格式的電子書,可以在各種行動或平板裝置上閱讀。KKBOX 從 2011 年起,開始在內部訓練 iOS 開發人員,這本教材蒐集了我們認為在新人訓練期間所需要的必要開發知識。 我們希望這份教材可以對台灣在開發 iOS 的朋友有一些幫助。由於這份教材的初衷就是訓練可以參與 KKBOX 專案的開發人才,所以在內容的選擇上,未必可以滿足所有朋友的需要,像遊戲開發、上架流程等,根本隻字未提。 而一般在開發 iOS App 的時候,不見得需要了解底層的 audio API,但畢竟 KKBOX 是一家以音樂服務為主的公司,我們勢必要處理 audio,而在中文世界中,關於如何在 iOS 上處理 audio 的資料更是少之又少,我們期望可以在這塊領域中有所貢獻。 其實裡頭的錯漏不少,如果您發現這份教材裡頭有什麼問題,我們在 Github 上提供了教材原始的 Mark Down 格式的文件,您可以對 Github … Continue reading

Posted in Uncategorized | Tagged , , | Leave a comment

KKBOX 的 WWDC 2015 讀書會影片

KKBOX 在七月到八月之間,在內部舉辦了一連串的 WWDC 影片讀書會,我們大概挑選了大概其中一半的影片,由公司內的成員各自認領範圍報告。 除了觀看影片摘要報告之外,更重要的是,我們就 WWDC 提到的重要技術,也嘗試先寫一些 prototype 確認─畢竟就我們過去的經驗,很多蘋果在 WWDC 時釋出的 SDK 不見得與最後釋出時相同,也提早了解目前蘋果所提供開發環境會有哪些問題。 讀書會錄影如下:

Posted in iOS | Tagged , , , | Leave a comment

WWDC 2015

今年 WWDC 在 6 月 8 日至 12 日舉辦,KKBOX 共有 5 位工程師與一位 PM 參加。 WWDC 分成 sessions 與 labs 兩個部分,在 Moscone West 這個可以容納五千人的會議廳中,sessions 在二、三樓舉辦,一樓則是報到區、用餐區以及好幾個 lab 區塊,sessions 就是你可以在蘋果網站上。而這幾年發展下來,如果你去了 WWDC 現場,你應該要把重點放在 labs 而不是 sessions。

Posted in Events, iOS, Mac | Tagged , , , | 1 Comment

KKBOX iOS 開發過程中使用的 Jenkins 環境

先跟大家說明:目前架上版本的 KKBOX iOS 版本(6.2.50)有一些問題,在背景播放離線歌曲一兩首歌之後會暫停播放,如果你遇到這個問題,請先試試看關閉「歌曲淡入淡出」功能。另外,其實我們在發現問題的時候,也已經第一時間解決,但大家也知道…一套 iOS App 從修正完畢,到送到用戶手中,中間有一個很麻煩的關卡…。 KKBOX 在 2011 年左右在 iOS 版本的開發流程中導入 Jenkins,目前 iOS 開發部門負責大約七個主要產品,每個專案都透過 Jenkins 自動編譯每日發行版本,以及定時自動執行單元測試。隨著專案發展,一開始建置的環境已經沒有辦法因應現在的需求,所以我們最近大幅調整了 Jenkins 環境的架構。 建置 CI 系統的主機要能夠滿足兩個需求:速度快與容量大。 我們希望在每次改動程式碼之後,CI 主機都可以快速編譯出新版本,確認現在的程式碼沒有編譯問題,也可以讓測試人員隨時都可以拿到最新的版本,所以主機的編譯速度要快。 另一方面,編譯出愈多的版本,也就等於是要 archive 更多的檔案,這樣當測試版本出現問題時,我們也可以直接去 Jenkins 找到當初版本的 debug symbol 確認問題—畢竟有些 crash 不見得可以被 HockeyApp 上收集到做過 symbolicate 過的 crash … Continue reading

Posted in iOS | Tagged , , , | 7 Comments